Example #1
0
        public CCeldaProcesada ProcesarMuestra(int idmuestra, string elemento, string value_celda)
        {
            if (dicControlValues.ContainsKey(elemento) && !value_celda.Contains("NULL"))
            {
                System.Drawing.Color colorError = System.Drawing.Color.NavajoWhite;

                CCeldaProcesada celdaProcesada      = new CCeldaProcesada();
                decimal         value_celda_decimal = Convert.ToDecimal(value_celda);
                CControlValues  controlValues       = dicControlValues[elemento];

                // procesar celda: idmuestra + elemento
                DataRow fila = dicFilasLeyes[idmuestra];
                celdaProcesada.ColorCelda = Color.White;
                celdaProcesada.ValueCelda = value_celda;
                string  nombreMuestra = fila["Muestra"].ToString();
                string  metodo        = fila["Metodo"].ToString();
                decimal factor        = Convert.ToDecimal(fila["Factor"]);
                decimal dilucion2     = Convert.ToDecimal(fila["Dilucion"]);


                if (EsDUP(nombreMuestra))
                {
                    // encontrar muestra original
                    int     idmuestra_orig = queryFilasIteva.Single(c => nombreMuestra.Contains(c.Muestra) && nombreMuestra != c.Muestra).Idmuestra;
                    DataRow drOri          = dicFilasLeyes[idmuestra_orig];
                    decimal value_orig     = Convert.ToDecimal(drOri[elemento].ToString().Replace('<', ' '));
                    decimal MDL_or_IDL     = metodo == "MT" ? controlValues.MDL : controlValues.IDL;
                    celdaProcesada.ValueCelda = "OK Dup";
                    if (value_orig > MDL_or_IDL)
                    {
                        if (!(Math.Abs(value_orig - value_celda_decimal) < 0.15M * value_orig))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out Dup";
                        }
                    }
                    else
                    {
                        if (!(value_celda_decimal < 2.2M * controlValues.MDL))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out Dup";
                        }
                    }
                }
                else if (EsLFM(nombreMuestra))
                {
                    int     idmuestra_orig = queryFilasIteva.Single(c => nombreMuestra.Contains(c.Muestra) && nombreMuestra != c.Muestra).Idmuestra;
                    DataRow drOri          = dicFilasLeyes[idmuestra_orig];
                    decimal value_orig     = Convert.ToDecimal(drOri[elemento].ToString().Replace('<', ' '));
                    decimal MDL_or_IDL     = metodo == "MT" ? controlValues.MDL : controlValues.IDL;
                    celdaProcesada.ValueCelda = "OK LFM";
                    if (value_orig > MDL_or_IDL)
                    {
                        if (!EstaEntre(Math.Abs(value_orig - value_celda_decimal), controlValues.LFM * 0.70M, controlValues.LFM * 1.30M))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out LFM";
                        }
                    }
                    else
                    {
                        if (!EstaEntre(value_celda_decimal, controlValues.LFM * 0.70M, controlValues.LFM * 1.30M))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out LFM";
                        }
                    }
                }
                else if (EsSoloMuestra(nombreMuestra))
                {
                    decimal MDL_or_IDL      = metodo == "MT" ? controlValues.IDL : controlValues.MDL;
                    string  limite_inferior = metodo == "MT" ? "IDL" : "MDL";
                    string  txt;

                    if (value_celda_decimal < MDL_or_IDL)
                    {
                        celdaProcesada.ValueCelda = "<" + MDL_or_IDL;
                    }
                    else
                    {
                        if (value_celda_decimal < controlValues.LDR)
                        {
                            celdaProcesada.ValueCelda = (value_celda_decimal * factor * dilucion2).ToString();
                        }
                        else
                        {
                            celdaProcesada.ValueCelda = ">" + controlValues.LDR.ToString();
                        }
                    }

                    #region comentario

                    ///Metodo:
                    ///LimiteInferior:
                    ///LimiteSuperior:
                    ///Prueba: LimiteInferior < lectura < LimiteSuperior .......
                    ///Resultado:

                    StringBuilder mensaje = new StringBuilder();
                    mensaje.Append("Metodo: {0}");
                    mensaje.Append("\nLímite inferior {1}: {2}");
                    mensaje.Append("\nLímite superior LDR: {3}");
                    mensaje.Append("\nPrueba: {4} < {5} < {6}");
                    mensaje.Append("\nResultado: {7}");

                    txt = string.Format(mensaje.ToString(),
                                        metodo,
                                        limite_inferior, MDL_or_IDL,
                                        controlValues.LDR,
                                        MDL_or_IDL, value_celda, controlValues.LDR,
                                        celdaProcesada.ValueCelda);

                    dicToolTip.Add(idmuestra.ToString() + elemento, txt);

                    #endregion
                }

                // agregar/actualizar el diccionario
                string key = idmuestra.ToString() + elemento;
                celdaProcesada.Idmuestra = idmuestra;
                celdaProcesada.Elemento  = elemento;

                if (!dicCeldaProcesada.ContainsKey(key))
                {
                    dicCeldaProcesada.Add(key, celdaProcesada);
                }
                else
                {
                    dicCeldaProcesada[key] = celdaProcesada;
                }

                return(celdaProcesada);
            }
            else
            {
                return(null);
            }
        }
Example #2
0
        public CCeldaProcesada ProcesarMuestraControl(int idmuestra, string elemento, string value_celda)
        {
            if (dicControlValues.ContainsKey(elemento) && !value_celda.Contains("NULL"))
            {
                System.Drawing.Color colorError = System.Drawing.Color.NavajoWhite;

                CCeldaProcesada celdaProcesada      = new CCeldaProcesada();
                decimal         value_celda_decimal = Convert.ToDecimal(value_celda);
                CControlValues  controlValues       = dicControlValues[elemento];

                // procesar celda: idmuestra + elemento
                DataRow fila = dicFilasLeyes[idmuestra];
                celdaProcesada.ColorCelda = Color.White;
                celdaProcesada.ValueCelda = value_celda;
                string  nombreMuestra = fila["Muestra"].ToString();
                string  metodo        = fila["Metodo"].ToString();
                decimal factor        = Convert.ToDecimal(fila["Factor"]);
                decimal dilucion2     = Convert.ToDecimal(fila["Dilucion"]);

                if (EsIPC(nombreMuestra)) // IPC
                {
                    celdaProcesada.ValueCelda = "OK IPC";
                    if (!EstaEntre(value_celda_decimal, controlValues.IPC * 0.9M, controlValues.IPC * 1.1M))
                    {
                        celdaProcesada.ColorCelda = colorError;
                        celdaProcesada.ValueCelda = "Out IPC";
                    }

                    StringBuilder mensaje = new StringBuilder();
                    mensaje.Append("IPC de {0}: {1}");
                    mensaje.Append("\nIntervalo: {1} * 0.9 <= lectura <= {1} * 1.1");
                    mensaje.Append("\nIntervalo: {2} <= {4} <= {3}");
                    mensaje.Append("\nResultado: {5}");

                    string txt = string.Format(
                        mensaje.ToString(), elemento, controlValues.IPC, controlValues.IPC * 0.9M,
                        controlValues.IPC * 1.1M, value_celda, celdaProcesada.ValueCelda);
                    dicToolTip.Add(idmuestra.ToString() + elemento, txt);
                }
                else if (EsLRB(nombreMuestra)) // LRB en (MT ó MD)
                {
                    decimal MDL_or_IDL = metodo == "MT" ? controlValues.MDL : controlValues.IDL;
                    celdaProcesada.ValueCelda = "OK LRB";
                    if (!(value_celda_decimal < MDL_or_IDL * 2.2M))
                    {
                        celdaProcesada.ColorCelda = colorError;
                        celdaProcesada.ValueCelda = "Cont LRB";
                    }
                }
                else if (EsLFB(nombreMuestra))
                {
                    int idbatch_muestra = queryFilasIteva.Single(c => c.Idmuestra == idmuestra).Idbatch;
                    int idmuestra_lrb   = queryFilasIteva.Single(c => c.Muestra == "LRB" && c.Idbatch == idbatch_muestra).Idmuestra;

                    DataRow drLrb = dicFilasLecturas[idmuestra_lrb];
                    decimal lrb   = Convert.ToDecimal(drLrb[elemento]);
                    celdaProcesada.ValueCelda = "OK LFB";
                    if (!EstaEntre(Math.Abs(value_celda_decimal - lrb), controlValues.LFB * 0.85M, controlValues.LFB * 1.15M))
                    {
                        celdaProcesada.ColorCelda = colorError;
                        celdaProcesada.ValueCelda = "Cont LFB";
                    }
                }
                else if (EsDUP(nombreMuestra))
                {
                    // encontrar muestra original
                    int     idmuestra_orig = queryFilasIteva.Single(c => nombreMuestra.Contains(c.Muestra) && nombreMuestra != c.Muestra).Idmuestra;
                    DataRow drOri          = dicFilasLeyes[idmuestra_orig];
                    decimal value_orig     = Convert.ToDecimal(drOri[elemento].ToString().Replace('<', ' '));
                    decimal MDL_or_IDL     = metodo == "MT" ? controlValues.MDL : controlValues.IDL;
                    celdaProcesada.ValueCelda = "OK Dup";
                    if (value_orig > MDL_or_IDL)
                    {
                        if (!(Math.Abs(value_orig - value_celda_decimal) < 0.15M * value_orig))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out Dup";
                        }
                    }
                    else
                    {
                        if (!(value_celda_decimal < 2.2M * controlValues.MDL))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out Dup";
                        }
                    }
                }

                // agregar/actualizar el diccionario
                string key = idmuestra.ToString() + elemento;
                celdaProcesada.Idmuestra = idmuestra;
                celdaProcesada.Elemento  = elemento;

                if (!dicCeldaProcesada.ContainsKey(key))
                {
                    dicCeldaProcesada.Add(key, celdaProcesada);
                }
                else
                {
                    dicCeldaProcesada[key] = celdaProcesada;
                }

                return(celdaProcesada);
            }
            else
            {
                return(null);
            }
        }
Example #3
0
        public CCeldaProcesada ProcesarMuestraControl(int idmuestra, string elemento, string value_celda)
        {
            if (dicControlValues.ContainsKey(elemento) && !value_celda.Contains("NULL"))
            {
                System.Drawing.Color colorError = System.Drawing.Color.NavajoWhite;

                CCeldaProcesada celdaProcesada = new CCeldaProcesada();
                decimal value_celda_decimal = Convert.ToDecimal(value_celda);
                CControlValues controlValues = dicControlValues[elemento];

                // procesar celda: idmuestra + elemento
                DataRow fila = dicFilasLeyes[idmuestra];
                celdaProcesada.ColorCelda = Color.White;
                celdaProcesada.ValueCelda = value_celda;
                string nombreMuestra = fila["Muestra"].ToString();
                string metodo = fila["Metodo"].ToString();
                decimal factor = Convert.ToDecimal(fila["Factor"]);
                decimal dilucion2 = Convert.ToDecimal(fila["Dilucion"]);

                if (EsIPC(nombreMuestra)) // IPC
                {
                    celdaProcesada.ValueCelda = "OK IPC";
                    if (!EstaEntre(value_celda_decimal, controlValues.IPC * 0.9M, controlValues.IPC * 1.1M))
                    {
                        celdaProcesada.ColorCelda = colorError;
                        celdaProcesada.ValueCelda = "Out IPC";
                    }

                    StringBuilder mensaje = new StringBuilder();
                    mensaje.Append("IPC de {0}: {1}");
                    mensaje.Append("\nIntervalo: {1} * 0.9 <= lectura <= {1} * 1.1");
                    mensaje.Append("\nIntervalo: {2} <= {4} <= {3}");
                    mensaje.Append("\nResultado: {5}");

                    string txt = string.Format(
                        mensaje.ToString(), elemento, controlValues.IPC, controlValues.IPC * 0.9M,
                        controlValues.IPC * 1.1M, value_celda, celdaProcesada.ValueCelda);
                    dicToolTip.Add(idmuestra.ToString() + elemento, txt);
                }
                else if (EsLRB(nombreMuestra)) // LRB en (MT ó MD)
                {
                    decimal MDL_or_IDL = metodo == "MT" ? controlValues.MDL : controlValues.IDL;
                    celdaProcesada.ValueCelda = "OK LRB";
                    if (!(value_celda_decimal < MDL_or_IDL * 2.2M))
                    {
                        celdaProcesada.ColorCelda = colorError;
                        celdaProcesada.ValueCelda = "Cont LRB";
                    }
                }
                else if (EsLFB(nombreMuestra))
                {
                    int idbatch_muestra = queryFilasIteva.Single(c => c.Idmuestra == idmuestra).Idbatch;
                    int idmuestra_lrb = queryFilasIteva.Single(c => c.Muestra == "LRB" && c.Idbatch == idbatch_muestra).Idmuestra;

                    DataRow drLrb = dicFilasLecturas[idmuestra_lrb];
                    decimal lrb = Convert.ToDecimal(drLrb[elemento]);
                    celdaProcesada.ValueCelda = "OK LFB";
                    if (!EstaEntre(Math.Abs(value_celda_decimal - lrb), controlValues.LFB * 0.85M, controlValues.LFB * 1.15M))
                    {
                        celdaProcesada.ColorCelda = colorError;
                        celdaProcesada.ValueCelda = "Cont LFB";
                    }
                }
                else if (EsDUP(nombreMuestra))
                {
                    // encontrar muestra original
                    int idmuestra_orig = queryFilasIteva.Single(c => nombreMuestra.Contains(c.Muestra) && nombreMuestra != c.Muestra).Idmuestra;
                    DataRow drOri = dicFilasLeyes[idmuestra_orig];
                    decimal value_orig = Convert.ToDecimal(drOri[elemento].ToString().Replace('<', ' '));
                    decimal MDL_or_IDL = metodo == "MT" ? controlValues.MDL : controlValues.IDL;
                    celdaProcesada.ValueCelda = "OK Dup";
                    if (value_orig > MDL_or_IDL)
                    {
                        if (!(Math.Abs(value_orig - value_celda_decimal) < 0.15M * value_orig))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out Dup";
                        }
                    }
                    else
                    {
                        if (!(value_celda_decimal < 2.2M * controlValues.MDL))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out Dup";
                        }
                    }
                }

                // agregar/actualizar el diccionario
                string key = idmuestra.ToString() + elemento;
                celdaProcesada.Idmuestra = idmuestra;
                celdaProcesada.Elemento = elemento;

                if (!dicCeldaProcesada.ContainsKey(key))
                    dicCeldaProcesada.Add(key, celdaProcesada);
                else
                    dicCeldaProcesada[key] = celdaProcesada;

                return celdaProcesada;
            }
            else
                return null;
        }
Example #4
0
        void RecuperarIcp()
        {
            // columnas
            var queryColumns =
                (from m in queryLecturasIcp
                 orderby m.Elemento
                 select new
            {
                m.Elemento
            }).Distinct();

            dtSamples.Columns.Add("Matriz");
            dtSamples.Columns.Add("Codigo");
            dtSamples.Columns.Add("Factor");
            dtSamples.Columns.Add("T_85C");
            dtSamples.Columns.Add("Alicuota");
            dtSamples.Columns.Add("Volumen");
            dtSamples.Columns.Add("Dilucion");
            dtSamples.Columns.Add("Idmuestra");
            dtSamples.Columns.Add("Muestra");
            dtSamples.Columns.Add("Metodo");

            dtLeyes.Columns.Add("Matriz");
            dtLeyes.Columns.Add("Codigo");
            dtLeyes.Columns.Add("Factor");
            dtLeyes.Columns.Add("T_85C");
            dtLeyes.Columns.Add("Alicuota");
            dtLeyes.Columns.Add("Volumen");
            dtLeyes.Columns.Add("Dilucion");
            dtLeyes.Columns.Add("Idmuestra");
            dtLeyes.Columns.Add("Muestra");
            dtLeyes.Columns.Add("Metodo");

            dtLecturas.Columns.Add("Matriz");
            dtLecturas.Columns.Add("Codigo");
            dtLecturas.Columns.Add("Factor");
            dtLecturas.Columns.Add("T_85C");
            dtLecturas.Columns.Add("Alicuota");
            dtLecturas.Columns.Add("Volumen");
            dtLecturas.Columns.Add("Dilucion");
            dtLecturas.Columns.Add("Idmuestra");
            dtLecturas.Columns.Add("Muestra");
            dtLecturas.Columns.Add("Metodo");

            // filas
            var queryFilas =
                (from m in queryLecturasIcp
                 select new
            {
                m.Idmuestra,
                m.Muestra,
                m.Dilucion2
            }).Distinct().OrderBy(c => c.Idmuestra);

            int idbatch = 0;

            foreach (var item in queryFilas)
            {
                if (item.Muestra.Contains("IPC") || item.Muestra.Contains("LRB") ||
                    item.Muestra.Contains("LFB") || item.Muestra.Contains("LFM") ||
                    item.Muestra.ToUpper().Contains("DUP"))
                {
                    idbatch++;
                }

                queryFilasIteva.Add(new CMuestrasIteva()
                {
                    Idbatch = idbatch, Idmuestra = Convert.ToInt32(item.Idmuestra), Muestra = item.Muestra
                });
            }

            // agregando columnas
            foreach (var item in queryColumns)
            {
                dtLecturas.Columns.Add(item.Elemento);
                dtLeyes.Columns.Add(item.Elemento);
            }

            // agregando filas
            foreach (var item in queryFilas)
            {
                DataRow drSamples = dtSamples.NewRow();
                drSamples["Idmuestra"] = item.Idmuestra;
                drSamples["Muestra"]   = item.Muestra;
                drSamples["Metodo"]    = "MD";
                drSamples["Factor"]    = factor;
                if (Convert.ToInt32(item.Dilucion2) == 1)
                {
                    drSamples["Dilucion"] = 20;
                }
                else
                {
                    drSamples["Dilucion"] = 1;
                }

                dtSamples.Rows.Add(drSamples);

                DataRow drLey = dtLeyes.NewRow();
                drLey["Idmuestra"] = item.Idmuestra;
                drLey["Muestra"]   = item.Muestra;
                drLey["Metodo"]    = "MD";
                drLey["Factor"]    = factor;
                if (Convert.ToInt32(item.Dilucion2) == 1)
                {
                    drLey["Dilucion"] = 20;
                }
                else
                {
                    drLey["Dilucion"] = 1;
                }

                if (!dicFilasLeyes.ContainsKey(Convert.ToInt32(item.Idmuestra)))
                {
                    dicFilasLeyes.Add(Convert.ToInt32(item.Idmuestra), drLey);
                    dtLeyes.Rows.Add(drLey);
                }

                //-----------------------------------------------------
                DataRow drLec = dtLecturas.NewRow();
                drLec["Idmuestra"] = item.Idmuestra;
                drLec["Muestra"]   = item.Muestra;
                drLec["Metodo"]    = "MD";
                drLec["Factor"]    = factor;
                if (Convert.ToInt32(item.Dilucion2) == 1)
                {
                    drLec["Dilucion"] = 20;
                }
                else
                {
                    drLec["Dilucion"] = 1;
                }

                if (!dicFilasLecturas.ContainsKey(Convert.ToInt32(item.Idmuestra)))
                {
                    dicFilasLecturas.Add(Convert.ToInt32(item.Idmuestra), drLec);
                    dtLecturas.Rows.Add(drLec);
                }
            }
            // procesar control de calidad
            foreach (var item in queryLecturasIcp)
            {
                if (item.Muestra.Contains("IPC") || !item.Muestra.Contains("LRB") ||
                    !item.Muestra.Contains("LFB"))
                {
                    dicFilasLecturas[Convert.ToInt32(item.Idmuestra)][item.Elemento] = item.Lectura.ToString();

                    CCeldaProcesada celdaProcesada = ProcesarMuestraControl(Convert.ToInt32(item.Idmuestra), item.Elemento, item.Lectura.ToString());

                    if (celdaProcesada != null)
                    {
                        dicFilasLeyes[Convert.ToInt32(item.Idmuestra)][item.Elemento] = celdaProcesada.ValueCelda.ToString();
                    }
                }
            }

            // procesar muestras de control
            foreach (var item in queryLecturasIcp)
            {
                if (!item.Muestra.Contains("IPC") && !item.Muestra.Contains("LRB") &&
                    !item.Muestra.Contains("LFB"))
                {
                    dicFilasLecturas[Convert.ToInt32(item.Idmuestra)][item.Elemento] = item.Lectura.ToString();

                    CCeldaProcesada celdaProcesada = ProcesarMuestra(Convert.ToInt32(item.Idmuestra), item.Elemento, item.Lectura.ToString());

                    if (celdaProcesada != null)
                    {
                        dicFilasLeyes[Convert.ToInt32(item.Idmuestra)][item.Elemento] = celdaProcesada.ValueCelda.ToString();
                    }
                }
            }

            // procesar dilusiones y columnas de control
            // procesar muestras de control
            foreach (var item in queryLecturasIcp)
            {
                if (!item.Muestra.Contains("IPC") && !item.Muestra.Contains("LRB") &&
                    !item.Muestra.Contains("LFB") && !item.Muestra.Contains("Blank") &&
                    !item.Muestra.Contains("STD"))
                {
                    dicFilasLecturas[Convert.ToInt32(item.Idmuestra)][item.Elemento] = item.Lectura.ToString();

                    //CCeldaProcesada celdaProcesada =
                    ProcesarDilucionElementos(item.Muestra, item.Elemento);

                    //if (celdaProcesada != null)
                    //    dicFilasLeyes[Convert.ToInt32(item.Idmuestra)][item.Elemento] = celdaProcesada.ValueCelda.ToString();
                }
            }

            gridControl1.DataSource = dtSamples;
            gridControl2.DataSource = dtLecturas;
            gridControl3.DataSource = dtLeyes;

            //ocultar columnas en las lecturas y leyes
            gridView2.Columns["Matriz"].Visible = false;
            gridView2.Columns["Codigo"].Visible = false;

            gridView2.Columns["T_85C"].Visible     = false;
            gridView2.Columns["Alicuota"].Visible  = false;
            gridView2.Columns["Volumen"].Visible   = false;
            gridView2.Columns["Idmuestra"].Visible = false;
            gridView2.Columns["Metodo"].Visible    = false;
            gridView2.Columns["Muestra"].Visible   = true;
            gridView2.Columns["Factor"].Visible    = true;
            gridView2.Columns["Dilucion"].Visible  = true;

            gridView3.Columns["Matriz"].Visible    = false;
            gridView3.Columns["Codigo"].Visible    = false;
            gridView3.Columns["T_85C"].Visible     = false;
            gridView3.Columns["Alicuota"].Visible  = false;
            gridView3.Columns["Volumen"].Visible   = false;
            gridView3.Columns["Idmuestra"].Visible = false;
            gridView3.Columns["Metodo"].Visible    = false;

            gridView3.Columns["Muestra"].Visible  = true;
            gridView3.Columns["Factor"].Visible   = true;
            gridView3.Columns["Dilucion"].Visible = true;

            gridView2.Columns["Muestra"].Fixed  = DevExpress.XtraGrid.Columns.FixedStyle.Left;
            gridView2.Columns["Factor"].Fixed   = DevExpress.XtraGrid.Columns.FixedStyle.Left;
            gridView2.Columns["Dilucion"].Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left;

            gridView3.Columns["Muestra"].Fixed  = DevExpress.XtraGrid.Columns.FixedStyle.Left;
            gridView3.Columns["Factor"].Fixed   = DevExpress.XtraGrid.Columns.FixedStyle.Left;
            gridView3.Columns["Dilucion"].Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left;
        }
Example #5
0
        public CCeldaProcesada ProcesarMuestra(int idmuestra, string elemento, string value_celda)
        {
            if (dicControlValues.ContainsKey(elemento) && !value_celda.Contains("NULL"))
            {
                System.Drawing.Color colorError = System.Drawing.Color.NavajoWhite;

                CCeldaProcesada celdaProcesada = new CCeldaProcesada();
                decimal value_celda_decimal = Convert.ToDecimal(value_celda);
                CControlValues controlValues = dicControlValues[elemento];

                // procesar celda: idmuestra + elemento
                DataRow fila = dicFilasLeyes[idmuestra];
                celdaProcesada.ColorCelda = Color.White;
                celdaProcesada.ValueCelda = value_celda;
                string nombreMuestra = fila["Muestra"].ToString();
                string metodo = fila["Metodo"].ToString();
                decimal factor = Convert.ToDecimal(fila["Factor"]);
                decimal dilucion2 = Convert.ToDecimal(fila["Dilucion"]);

                if (EsDUP(nombreMuestra))
                {
                    // encontrar muestra original
                    int idmuestra_orig = queryFilasIteva.Single(c => nombreMuestra.Contains(c.Muestra) && nombreMuestra != c.Muestra).Idmuestra;
                    DataRow drOri = dicFilasLeyes[idmuestra_orig];
                    decimal value_orig = Convert.ToDecimal(drOri[elemento].ToString().Replace('<', ' '));
                    decimal MDL_or_IDL = metodo == "MT" ? controlValues.MDL : controlValues.IDL;
                    celdaProcesada.ValueCelda = "OK Dup";
                    if (value_orig > MDL_or_IDL)
                    {
                        if (!(Math.Abs(value_orig - value_celda_decimal) < 0.15M * value_orig))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out Dup";
                        }
                    }
                    else
                    {
                        if (!(value_celda_decimal < 2.2M * controlValues.MDL))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out Dup";
                        }
                    }
                }
                else if (EsLFM(nombreMuestra))
                {
                    int idmuestra_orig = queryFilasIteva.Single(c => nombreMuestra.Contains(c.Muestra) && nombreMuestra != c.Muestra).Idmuestra;
                    DataRow drOri = dicFilasLeyes[idmuestra_orig];
                    decimal value_orig = Convert.ToDecimal(drOri[elemento].ToString().Replace('<', ' '));
                    decimal MDL_or_IDL = metodo == "MT" ? controlValues.MDL : controlValues.IDL;
                    celdaProcesada.ValueCelda = "OK LFM";
                    if (value_orig > MDL_or_IDL)
                    {
                        if (!EstaEntre(Math.Abs(value_orig - value_celda_decimal), controlValues.LFM * 0.70M, controlValues.LFM * 1.30M))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out LFM";
                        }
                    }
                    else
                    {
                        if (!EstaEntre(value_celda_decimal, controlValues.LFM * 0.70M, controlValues.LFM * 1.30M))
                        {
                            celdaProcesada.ColorCelda = colorError;
                            celdaProcesada.ValueCelda = "Out LFM";
                        }
                    }
                }
                else if (EsSoloMuestra(nombreMuestra))
                {

                    decimal MDL_or_IDL = metodo == "MT" ? controlValues.IDL : controlValues.MDL;
                    string limite_inferior = metodo == "MT" ? "IDL" : "MDL";
                    string txt;

                    if (value_celda_decimal < MDL_or_IDL)
                        celdaProcesada.ValueCelda = "<" + MDL_or_IDL;
                    else
                    {
                        if (value_celda_decimal < controlValues.LDR)
                            celdaProcesada.ValueCelda = (value_celda_decimal * factor * dilucion2).ToString();
                        else
                            celdaProcesada.ValueCelda = ">" + controlValues.LDR.ToString();
                    }

                    #region comentario

                    ///Metodo:
                    ///LimiteInferior:
                    ///LimiteSuperior:
                    ///Prueba: LimiteInferior < lectura < LimiteSuperior .......
                    ///Resultado:

                    StringBuilder mensaje = new StringBuilder();
                    mensaje.Append("Metodo: {0}");
                    mensaje.Append("\nLímite inferior {1}: {2}");
                    mensaje.Append("\nLímite superior LDR: {3}");
                    mensaje.Append("\nPrueba: {4} < {5} < {6}");
                    mensaje.Append("\nResultado: {7}");

                    txt = string.Format(mensaje.ToString(),
                        metodo,
                        limite_inferior, MDL_or_IDL,
                        controlValues.LDR,
                        MDL_or_IDL, value_celda, controlValues.LDR,
                        celdaProcesada.ValueCelda);

                    dicToolTip.Add(idmuestra.ToString() + elemento, txt);

                    #endregion

                }

                // agregar/actualizar el diccionario
                string key = idmuestra.ToString() + elemento;
                celdaProcesada.Idmuestra = idmuestra;
                celdaProcesada.Elemento = elemento;

                if (!dicCeldaProcesada.ContainsKey(key))
                    dicCeldaProcesada.Add(key, celdaProcesada);
                else
                    dicCeldaProcesada[key] = celdaProcesada;

                return celdaProcesada;
            }
            else
                return null;
        }