public string validarNumeroPedimento(string NumeroPedimento, string Error)
        {
            string result;

            try
            {
                if (NumeroPedimento.Length != 21)
                {
                    result = Error + " - El número de pedimento es inválido.";
                    return(result);
                }
                string fechaA = DateTime.Today.Year.ToString();
                fechaA = fechaA.Substring(2, 2);
                string UltimoFecha    = fechaA.Substring(1, 1);
                string añoActual      = NumeroPedimento.Substring(0, 2);
                string Aduanas        = NumeroPedimento.Substring(4, 2);
                string PatenteAduanal = NumeroPedimento.Substring(8, 4);
                string cantidad       = NumeroPedimento.Substring(14, 7);
                if (Convert.ToInt16(añoActual) > Convert.ToInt16(fechaA))
                {
                    result = Error + " - El número de pedimento es inválido.";
                    return(result);
                }
                if (Convert.ToInt16(añoActual) < Convert.ToInt16(fechaA) - 10)
                {
                    result = Error + " - El número de pedimento es inválido.";
                    return(result);
                }
                OperacionesCatalogos ox1x = new OperacionesCatalogos();
                c_NumPedimentoAduana x    = ox1x.Consultar_Aduanas((int)Convert.ToInt16(Aduanas));
                if (x == null)
                {
                    result = Error + " - El número de pedimento es inválido.";
                    return(result);
                }
                OperacionesCatalogos oxx = new OperacionesCatalogos();
                c_PatenteAduanal     x2  = oxx.Consultar_Patente((int)Convert.ToInt16(PatenteAduanal));
                if (x2 == null)
                {
                    result = Error + " - El número de pedimento es inválido.";
                    return(result);
                }
            }
            catch (Exception ee)
            {
                NtLinkBusiness.Logger.Error("", ee);
                result = Error + " - El número de pedimento es inválido.";
                return(result);
            }
            result = "OK";
            return(result);
        }
Пример #2
0
        //---------------------------------------------------------------------------------------------
        public string ProcesarPago(Comprobante com, ServicioLocal.Business.Complemento.Pagos Pag, Pagoo.Comprobante c)
        {
            string result;

            if (com.TipoDeComprobante != "P")
            {
                result = "CRP101 - El valor del campo TipoDeComprobante debe ser \"P\"";
            }
            else if (c.SubTotal != "0")
            {
                result = "CRP102 - El valor del campo SubTotal debe ser cero \"0\".";
            }
            else if (com.Moneda != "XXX")
            {
                result = "CRP103 - El valor del campo Moneda debe ser \"XXX\".";
            }
            else if (com.FormaPagoSpecified)
            {
                result = "CRP104 - El campo FormaPago no se debe registrar en el CFDI.";
            }
            else if (com.MetodoPagoSpecified)
            {
                result = "CRP105 - El campo MetodoPago no se debe registrar en el CFDI.";
            }
            else if (!string.IsNullOrEmpty(com.CondicionesDePago))
            {
                result = "CRP106 - El campo CondicionesDePago no se debe registrar en el CFDI.";
            }
            else if (com.DescuentoSpecified)
            {
                result = "CRP107 - El campo Descuento no se debe registrar en el CFDI.";
            }
            else if (com.TipoCambioSpecified)
            {
                result = "CRP108 - El campo TipoCambio no se debe registrar en el CFDI.";
            }
            else if (c.Total != "0")
            {
                result = "CRP109 - El valor del campo Total debe ser cero \"0\".";
            }
            else if (com.Receptor != null && com.Receptor.UsoCFDI != "P01")
            {
                result = "CRP110 - El valor del campo UsoCFDI debe ser \"P01\".";
            }
            else
            {
                if (com.Conceptos != null)
                {
                    if (com.Conceptos.Count <ComprobanteConcepto>() != 1)
                    {
                        result = "CRP111 - Solo debe existir un Concepto en el CFDI. ";
                        return(result);
                    }
                    foreach (ComprobanteConcepto conp in com.Conceptos)
                    {
                        if (conp.Impuestos != null)
                        {
                            result = "CRP112 - No se deben registrar apartados dentro de Conceptos";
                            return(result);
                        }
                        if (conp.ComplementoConcepto != null)
                        {
                            result = "CRP112 - No se deben registrar apartados dentro de Conceptos";
                            return(result);
                        }
                        if (conp.CuentaPredial != null)
                        {
                            result = "CRP112 - No se deben registrar apartados dentro de Conceptos";
                            return(result);
                        }
                        if (conp.InformacionAduanera != null)
                        {
                            result = "CRP112 - No se deben registrar apartados dentro de Conceptos";
                            return(result);
                        }
                        if (conp.Parte != null)
                        {
                            result = "CRP112 - No se deben registrar apartados dentro de Conceptos";
                            return(result);
                        }
                        if (conp.ClaveProdServ != "84111506")
                        {
                            result = "CRP113 - El valor del campo ClaveProdServ debe ser \"84111506\".";
                            return(result);
                        }
                        if (!string.IsNullOrEmpty(conp.NoIdentificacion))
                        {
                            result = "CRP114 - El campo NoIdentificacion no se debe registrar en el CFDI.";
                            return(result);
                        }
                        if (conp.Cantidad != 1m)
                        {
                            result = "CRP115 - El valor del campo Cantidad debe ser \"1\".";
                            return(result);
                        }
                        if (conp.ClaveUnidad != "ACT")
                        {
                            result = "CRP116 - El valor del campo ClaveUnidad debe ser \"ACT\".";
                            return(result);
                        }
                        if (!string.IsNullOrEmpty(conp.Unidad))
                        {
                            result = "CRP117 - El campo Unidad no se debe registrar en el CFDI.";
                            return(result);
                        }
                        if (conp.Descripcion != "Pago")
                        {
                            result = "CRP118 - El valor del campo Descripcion debe ser \"Pago\".";
                            return(result);
                        }
                        if (conp.ValorUnitario != 0m)
                        {
                            result = "CRP119 - El valor del campo ValorUnitario debe ser cero \"0\".";
                            return(result);
                        }
                        if (conp.Importe != 0m)
                        {
                            result = "CRP120 - El valor del campo Importe debe ser cero \"0\".";
                            return(result);
                        }
                        if (conp.DescuentoSpecified)
                        {
                            result = "CRP121 - El campo Descuento no se debe registrar en el CFDI.";
                            return(result);
                        }
                    }
                    foreach (Pagoo.ComprobanteConcepto conp2 in c.Conceptos)
                    {
                        if (conp2.ValorUnitario != "0")
                        {
                            result = "CRP119 - El valor del campo ValorUnitario debe ser cero \"0\".";
                            return(result);
                        }
                        if (conp2.Importe != "0")
                        {
                            result = "CRP120 - El valor del campo Importe debe ser cero \"0\".";
                            return(result);
                        }
                        if (conp2.Cantidad != "1")
                        {
                            result = "CRP115 - El valor del campo Cantidad debe ser \"1\".";
                            return(result);
                        }
                    }
                }
                if (com.Impuestos != null)
                {
                    result = "CRP122 - No se debe registrar el apartado de Impuestos en el CFDI.";
                }
                else
                {
                    foreach (PagosPago pagos in Pag.Pago)
                    {
                        if (pagos.FormaDePagoP == "99")
                        {
                            result = "CRP201 - El valor del campo FormaDePagoP debe ser distinto de \"99\".";
                            return(result);
                        }
                        if (pagos.MonedaP == "XXX")
                        {
                            result = "CRP202 - El campo MonedaP debe ser distinto de \"XXX\"";
                            return(result);
                        }
                        if (pagos.MonedaP != "MXN")
                        {
                            if (!pagos.TipoCambioPSpecified)
                            {
                                result = "CRP203 - El campo TipoCambioP se debe registrar.";
                                return(result);
                            }
                        }
                        else if (pagos.TipoCambioPSpecified)
                        {
                            result = "CRP204 - El campo TipoCambioP no se debe registrar.";
                            return(result);
                        }
                        OperacionesCatalogos  o9   = new OperacionesCatalogos();
                        CatalogosSAT.c_Moneda mone = o9.Consultar_Moneda(pagos.MonedaP);
                        if (mone != null)
                        {
                            string varia             = mone.Variacion;
                            OperacionesCatalogos o10 = new OperacionesCatalogos();
                            Divisas divisa           = o10.Consultar_TipoDivisa(pagos.MonedaP);
                            if (divisa != null)
                            {
                                decimal inferior = this.CalculoInferiorPorcentajeMoneda(divisa.PesosDivisa, (int)Convert.ToInt16(varia));
                                decimal superior = this.CalculoSuperiorPorcentajeMoneda(divisa.PesosDivisa, (int)Convert.ToInt16(varia));
                                if (pagos.TipoCambioP < inferior)
                                {
                                    if (string.IsNullOrEmpty(com.Confirmacion))
                                    {
                                        result = "CRP205 - Cuando el valor del campo TipoCambio se encuentre fuera de los límites establecidos, debe existir el campo Confirmacion.";
                                        return(result);
                                    }
                                }
                                if (pagos.TipoCambioP > superior)
                                {
                                    if (string.IsNullOrEmpty(com.Confirmacion))
                                    {
                                        result = "CRP205 - Cuando el valor del campo TipoCambioP se encuentre fuera de los límites establecidos, debe existir el campo Confirmacion";
                                        return(result);
                                    }
                                }
                            }
                        }
                        decimal tot = 0m;
                        if (pagos.DoctoRelacionado == null)
                        {
                            result = "CRP000 - El numero de elementos DoctoRelacionado debe ser mayor a cero";
                            return(result);
                        }
                        if (pagos.DoctoRelacionado.Count <PagosPagoDoctoRelacionado>() == 0)
                        {
                            result = "CRP000 - El numero de elementos DoctoRelacionado debe ser mayor a cero";
                            return(result);
                        }
                        PagosPagoDoctoRelacionado[] doctoRelacionado = pagos.DoctoRelacionado;
                        for (int i = 0; i < doctoRelacionado.Length; i++)
                        {
                            PagosPagoDoctoRelacionado doc = doctoRelacionado[i];
                            if (doc.ImpPagadoSpecified)
                            {
                                tot += doc.ImpPagado;
                            }
                        }
                        if (pagos.Monto <= 0m)
                        {
                            result = "CRP207 - El valor del campo Monto no es mayor que cero \"0\".";
                            return(result);
                        }
                        decimal MontoDocumentos = pagos.Monto;
                        if (pagos.MonedaP != "MXN")
                        {
                            MontoDocumentos *= pagos.TipoCambioP;
                            MontoDocumentos  = decimal.Round(MontoDocumentos, mone.Decimales.Value, MidpointRounding.AwayFromZero);
                        }
                        if (tot > MontoDocumentos)
                        {
                            result = "CRP206 - La suma de los valores registrados en el campo ImpPagado de los apartados DoctoRelacionado no es menor o igual que el valor del campo Monto.";
                            return(result);
                        }
                        string mon = pagos.Monto.ToString();
                        if (mon != null)
                        {
                            if (mon != "0")
                            {
                                string[] split = mon.Split(".".ToCharArray());
                                if (split.Count <string>() <= 1)
                                {
                                    result = "CRP208 - El valor del campo Monto debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaP.";
                                    return(result);
                                }
                                if (split[1].Count <char>() != (int)Convert.ToInt16(mone.Decimales))
                                {
                                    result = "CRP208 - El valor del campo Monto debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaP.";
                                    return(result);
                                }
                            }
                        }
                        OperacionesCatalogos             o11 = new OperacionesCatalogos();
                        CatalogosSAT.c_TipoDeComprobante TCP = o11.Consultar_TipoDeComprobante(com.TipoDeComprobante);
                        if (TCP != null)
                        {
                            decimal monto        = pagos.Monto;
                            long?   valor_máximo = TCP.Valor_máximo;
                            if (monto > valor_máximo.GetValueOrDefault() && valor_máximo.HasValue)
                            {
                                if (string.IsNullOrEmpty(com.Confirmacion))
                                {
                                    result = "CRP209 - Cuando el valor del campo Monto se encuentre fuera de los límites establecidos, debe existir el campo Confirmacion";
                                    return(result);
                                }
                            }
                        }

                        if (!string.IsNullOrEmpty(pagos.RfcEmisorCtaOrd))
                        {
                            if (pagos.RfcEmisorCtaOrd != "XEXX010101000")
                            {
                                Operaciones_IRFC r = new Operaciones_IRFC();
                                vI_RFC           t = r.Consultar_IRFC(pagos.RfcEmisorCtaOrd);
                                if (t == null)
                                {
                                    result = "CRP210 - El RFC del campo RfcEmisorCtaOrd no se encuentra en la lista de RFC.";
                                    return(result);
                                }
                            }
                            else if (string.IsNullOrEmpty(pagos.NomBancoOrdExt))
                            {
                                result = "CRP211 - El campo NomBancoOrdExt se debe registrar.";
                                return(result);
                            }
                        }
                        if (pagos.FormaDePagoP != "02" && pagos.FormaDePagoP != "03" && pagos.FormaDePagoP != "04" && pagos.FormaDePagoP != "05" && pagos.FormaDePagoP != "06" && pagos.FormaDePagoP != "28" && pagos.FormaDePagoP != "29" && !string.IsNullOrEmpty(pagos.CtaOrdenante))
                        {
                            result = "CRP212 - El campo CtaOrdenante no se debe registrar.";
                            return(result);
                        }
                        if (!string.IsNullOrEmpty(pagos.CtaOrdenante))
                        {
                            OperacionesCatalogos     o10       = new OperacionesCatalogos();
                            CatalogosSAT.c_FormaPago formaPago = o10.Consultar_FormaPago(pagos.FormaDePagoP);
                            if (formaPago.PatroncuentaBeneficiaria != "No" && formaPago.PatroncuentaBeneficiaria != "Opcional")
                            {
                                if (!this.validarExpresion(formaPago.PatroncuentaBeneficiaria, pagos.CtaOrdenante))
                                {
                                    result = "CRP213 - El campo CtaOrdenante no cumple con el patrón requerido.";
                                    return(result);
                                }
                            }
                        }
                        if (pagos.FormaDePagoP != "02" && pagos.FormaDePagoP != "03" && pagos.FormaDePagoP != "04" && pagos.FormaDePagoP != "05" && pagos.FormaDePagoP != "28" && pagos.FormaDePagoP != "29")
                        {
                            if (!string.IsNullOrEmpty(pagos.RfcEmisorCtaBen))
                            {
                                result = "CRP214 - El campo RfcEmisorCtaBen no se debe registrar.";
                                return(result);
                            }
                            if (!string.IsNullOrEmpty(pagos.CtaBeneficiario))
                            {
                                result = "CRP215 - El campo CtaBeneficiario no se debe registrar.";
                                return(result);
                            }
                        }
                        if (pagos.FormaDePagoP != "03" && pagos.TipoCadPagoSpecified)
                        {
                            result = "CRP216 - El campo TipoCadPago no se debe registrar. ";
                            return(result);
                        }
                        int tDoc = 0;
                        if (pagos.DoctoRelacionado != null)
                        {
                            tDoc = pagos.DoctoRelacionado.Count <PagosPagoDoctoRelacionado>();
                        }
                        if (pagos.DoctoRelacionado != null)
                        {
                            doctoRelacionado = pagos.DoctoRelacionado;
                            for (int i = 0; i < doctoRelacionado.Length; i++)
                            {
                                PagosPagoDoctoRelacionado doc = doctoRelacionado[i];
                                if (doc.MonedaDR == "XXX")
                                {
                                    result = "CRP217 - El valor del campo MonedaDR debe ser distinto de \"XXX\"";
                                    return(result);
                                }
                                if (doc.MonedaDR != pagos.MonedaP)
                                {
                                    if (!doc.TipoCambioDRSpecified)
                                    {
                                        result = "CRP218 - El campo TipoCambioDR se debe registrar.";
                                        return(result);
                                    }
                                }
                                else if (doc.TipoCambioDRSpecified)
                                {
                                    result = "CRP219 - El campo TipoCambioDR no se debe registrar.";
                                    return(result);
                                }
                                if (doc.MonedaDR == "MXN" && pagos.MonedaP != "MXN" && doc.TipoCambioDR != 1m)
                                {
                                    result = "CRP220 - El campo TipoCambioDR debe ser \"1\".";
                                    return(result);
                                }
                                if (doc.MetodoDePagoDR == "PPD")
                                {
                                    if (!doc.ImpSaldoAntSpecified)
                                    {
                                        result = "CRP234 - El campo ImpSaldoAnt se debe registrar.";
                                        return(result);
                                    }
                                }
                                if (tDoc > 1 && !doc.ImpPagadoSpecified)
                                {
                                    result = "CRP235 - El campo ImpPagado se debe registrar. ";
                                    return(result);
                                }
                                if (tDoc == 1 && doc.TipoCambioDRSpecified && !doc.ImpPagadoSpecified)
                                {
                                    result = "CRP235 - El campo ImpPagado se debe registrar. ";
                                    return(result);
                                }
                                if (doc.ImpSaldoAntSpecified)
                                {
                                    if (doc.ImpSaldoAnt <= 0m)
                                    {
                                        result = "CRP221 - El campo ImpSaldoAnt debe mayor a cero.";
                                        return(result);
                                    }
                                    string impSal = doc.ImpSaldoAnt.ToString();
                                    if (impSal != null)
                                    {
                                        if (impSal != "0")
                                        {
                                            string[] split = impSal.Split(".".ToCharArray());
                                            if (split.Count <string>() <= 1)
                                            {
                                                result = "CRP222 - El valor del campo ImpSaldoAnt debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                            if (split[1].Count <char>() != (int)Convert.ToInt16(mone.Decimales))
                                            {
                                                result = "CRP222 - El valor del campo ImpSaldoAnt debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                        }
                                    }
                                }
                                if (doc.ImpPagadoSpecified)
                                {
                                    if (doc.ImpPagado <= 0m)
                                    {
                                        result = "CRP223 - El campo ImpPagado debe mayor a cero.";
                                        return(result);
                                    }
                                    string impPa = doc.ImpPagado.ToString();
                                    if (impPa != null)
                                    {
                                        if (impPa != "0")
                                        {
                                            string[] split = impPa.Split(".".ToCharArray());
                                            if (split.Count <string>() <= 1)
                                            {
                                                result = "CRP224 - El valor del campo ImpPagado debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                            if (split[1].Count <char>() != (int)Convert.ToInt16(mone.Decimales))
                                            {
                                                result = "CRP224 - El valor del campo ImpPagado debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                        }
                                    }
                                }
                                if (doc.ImpSaldoInsolutoSpecified)
                                {
                                    string impSalI = doc.ImpSaldoInsoluto.ToString();
                                    if (impSalI != null)
                                    {
                                        if (impSalI != "0")
                                        {
                                            string[] split = impSalI.Split(".".ToCharArray());
                                            if (split.Count <string>() <= 1)
                                            {
                                                result = "CRP225 - El valor del campo ImpSaldoInsoluto debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                            if (split[1].Count <char>() != (int)Convert.ToInt16(mone.Decimales))
                                            {
                                                result = "CRP225 - El valor del campo ImpSaldoInsoluto debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                        }
                                    }
                                    if (doc.ImpSaldoInsoluto < 0m)
                                    {
                                        result = "CRP226 - El campo ImpSaldoInsoluto debe ser mayor o igual a cero y calcularse con la suma de los campos ImSaldoAnt menos el ImpPagado o el Monto.";
                                        return(result);
                                    }
                                    if (doc.ImpSaldoInsoluto != doc.ImpSaldoAnt - doc.ImpPagado)
                                    {
                                        result = "CRP226 - El campo ImpSaldoInsoluto debe ser mayor o igual a cero y calcularse con la suma de los campos ImSaldoAnt menos el ImpPagado o el Monto.";
                                        return(result);
                                    }
                                }
                            }
                        }
                        if (pagos.TipoCadPagoSpecified)
                        {
                            if (pagos.CertPago == null)
                            {
                                result = "CRP227 - El campo CertPago se debe registrar.";
                                return(result);
                            }
                            if (string.IsNullOrEmpty(pagos.CadPago))
                            {
                                result = "CRP229 - El campo CadPago se debe registrar.";
                                return(result);
                            }
                            if (pagos.SelloPago == null)
                            {
                                result = "CRP231 - El campo SelloPago se debe registrar. ";
                                return(result);
                            }
                        }
                        else
                        {
                            if (pagos.CertPago != null)
                            {
                                result = "CRP228 - El campo CertPago no se debe registrar.";
                                return(result);
                            }
                            if (!string.IsNullOrEmpty(pagos.CadPago))
                            {
                                result = "CRP230 - El campo CadPago no se debe registrar.";
                                return(result);
                            }
                            if (pagos.SelloPago != null)
                            {
                                result = "CRP232 - El campo SelloPago no se debe registrar.";
                                return(result);
                            }
                        }
                        if (pagos.DoctoRelacionado != null)
                        {
                            doctoRelacionado = pagos.DoctoRelacionado;
                            for (int i = 0; i < doctoRelacionado.Length; i++)
                            {
                                PagosPagoDoctoRelacionado doc = doctoRelacionado[i];
                                if (doc.MetodoDePagoDR == "PPD")
                                {
                                    if (string.IsNullOrEmpty(doc.NumParcialidad))
                                    {
                                        result = "CRP233 - El campo NumParcialidad se debe registrar.";
                                        return(result);
                                    }
                                    if (!doc.ImpSaldoInsolutoSpecified)
                                    {
                                        result = "CRP236 - El campo ImpSaldoInsoluto se debe registrar.";
                                        return(result);
                                    }
                                }
                            }
                        }
                        if (pagos.Impuestos != null)
                        {
                            result = "CRP237 - No debe existir el apartado de Impuestos.";
                            return(result);
                        }
                        if (pagos.FormaDePagoP != "02" && pagos.FormaDePagoP != "03" && pagos.FormaDePagoP != "04" && pagos.FormaDePagoP != "05" && pagos.FormaDePagoP != "06" && pagos.FormaDePagoP != "28" && pagos.FormaDePagoP != "29" && !string.IsNullOrEmpty(pagos.RfcEmisorCtaOrd))
                        {
                            result = "CRP238 - El campo RfcEmisorCtaOrd no se debe registrar.";
                            return(result);
                        }
                        if (!string.IsNullOrEmpty(pagos.CtaBeneficiario))
                        {
                            OperacionesCatalogos     o10       = new OperacionesCatalogos();
                            CatalogosSAT.c_FormaPago formaPago = o10.Consultar_FormaPago(pagos.FormaDePagoP);
                            if (formaPago.PatroncuentaBeneficiaria != "No" && formaPago.PatroncuentaBeneficiaria != "Opcional")
                            {
                                if (!this.validarExpresion(formaPago.PatroncuentaBeneficiaria, pagos.CtaBeneficiario))
                                {
                                    result = "CRP239 - El campo CtaBeneficiario no cumple con el patrón requerido.";
                                    return(result);
                                }
                            }
                        }
                    }
                    result = "0";
                }
            }
            return(result);
        }//-------------------------------------------------------------------------------------
Пример #3
0
        public string ProcesarSPT(ServiciosPlataformasTecnologicas s, ServicioLocal.Business.ComplementoRetencion.Retenciones retencion)
        {
            try
            {
                if (retencion.Version != "1.0")
                {
                    return("SPT101 - El atributo Version tiene un valor inválido.");
                }
                if (retencion.CveRetenc != ComplementoRetencion.c_Retenciones.Item26)
                {
                    return("SPT102 - El atributo CveRetenc contiene una clave distinta a \"26\" (Servicios mediante Plataformas Tecnológicas)");
                }
                if (!string.IsNullOrEmpty(retencion.DescRetenc))
                {
                    return("SPT103 - Se registró el atributo DescRetenc.");
                }
                if (retencion.Receptor != null)
                {
                    if (retencion.Receptor.Nacionalidad != ComplementoRetencion.RetencionesReceptorNacionalidad.Nacional)
                    {
                        return("SPT104 - El complemento “Servicios Plataformas Tecnológicas” no debe existir cuando el valor del atributo Nacionalidad es distinto de \"Nacional\".");
                    }
                }
                if (retencion.Receptor.Item != null)
                {
                    try
                    {
                        retencion.Receptor.Extranjero = (RetencionesReceptorExtranjero)retencion.Receptor.Item;
                    }
                    catch (Exception ex)
                    { }
                    try
                    {
                        retencion.Receptor.Nacional = (RetencionesReceptorNacional)retencion.Receptor.Item;
                    }
                    catch (Exception ex)
                    { }
                    if (retencion.Receptor.Nacional != null)
                    {
                        Operaciones_IRFC r = new Operaciones_IRFC();
                        vI_RFC           t = r.Consultar_IRFC(retencion.Receptor.Nacional.RFCRecep);
                        if (t == null)
                        {
                            return("SPT105 - El atributo RFCReceptor es inválido según la lista de RFC inscritos no cancelados en el SAT (l_RFC).");
                        }
                    }
                }
                if (retencion.Periodo.MesFin != retencion.Periodo.MesIni)
                {
                    return("SPT106 - El valor del nodo MesFin es diferente al valor del atributo MesIni o mayor al mes en curso.");
                }
                var fecha = DateTime.Now;
                if (retencion.Periodo.MesFin > fecha.Month)
                {
                    return("SPT106 - El valor del nodo MesFin es diferente al valor del atributo MesIni o mayor al mes en curso.");
                }
                if (retencion.Periodo.Ejerc < 2019)
                {
                    return("SPT107 - El valor del atributo Ejerc es menor a 2019 o mayor al valor del año en curso.");
                }
                if (retencion.Periodo.Ejerc > fecha.Year)
                {
                    return("SPT107 - El valor del atributo Ejerc es menor a 2019 o mayor al valor del año en curso.");
                }
                if (retencion.Totales.montoTotOperacion != s.MonTotServSIVA)
                {
                    return("SPT108 - El valor del atributo montoTotOperacion es diferente al valor registrado en el atributo MonTotServSIVA.");
                }
                if (retencion.Totales.montoTotGrav != retencion.Totales.montoTotOperacion)
                {
                    return("SPT109 - El valor del atributo montoTotGrav es diferente al valor del atributo montoTotOperacion.");
                }
                if (retencion.Totales.montoTotExent != 0)
                {
                    return("SPT110 - El valor del atributo montoTotExent es diferente de 0.00.");
                }

                if (retencion.Totales.ImpRetenidos != null)
                {
                    if (retencion.Totales.ImpRetenidos.Length > 0)
                    {
                        OperacionesCatalogos o = new OperacionesCatalogos();


                        decimal imp = 0.0M;
                        foreach (var i in retencion.Totales.ImpRetenidos)
                        {
                            imp = imp + i.montoRet;
                            if (i.ImpuestoSpecified == true)
                            {
                                if (i.Impuesto == RetencionesTotalesImpRetenidosImpuesto.Item01 || i.Impuesto == RetencionesTotalesImpRetenidosImpuesto.Item02)
                                {
                                    if (retencion.Totales.ImpRetenidos.Length > 1)
                                    {
                                        return("SPT112 - Existe más de 1 nodo de ImpRetenidos para cada tipo de impuesto ISR (01) o para IVA (02).");
                                    }
                                }
                            }
                            if (i.BaseRetSpecified == true)
                            {
                                if (i.BaseRet == retencion.Totales.montoTotOperacion)
                                {
                                    return("SPT113 - El valor del atributo BaseRet es diferente al valor del atributo montoTotOperacion o es diferente del valor contenido en uno de los rangos establecidos en los catálogos \"c_RangoSemRet \" o \" c_RangoMenRet \".");
                                }
                            }
                            if (i.ImpuestoSpecified == true && i.BaseRetSpecified == true)
                            {
                                double montoRet = o.Consultar_rangoMensualSemanal(s.Periodicidad, i.BaseRet, i.Impuesto.ToString());
                                if (i.montoRet != (i.BaseRet * (decimal)montoRet))
                                {
                                    return("SPT114 - El valor del atributo montoRet se encuentra fuera del rango establecido de acuerdo a la clave del atributo “Periodicidad”, registrada en el complemento o no corresponde con el factor aplicable del catálogo correspondiente.");
                                }
                            }
                        }
                        if (retencion.Totales.montoTotRet != imp)
                        {
                            return("SPT111 - El valor del atributo montoTotRet es diferente de la suma de los atributos montoRet del nodo ImpRetenidos.");
                        }
                    }
                }

                //--------------------------------------------------------

                ServicioLocal.Business.c_Periodicidad myTipoPeriodicidad;
                Enum.TryParse <ServicioLocal.Business.c_Periodicidad>(s.Periodicidad, out myTipoPeriodicidad);
                if (myTipoPeriodicidad.ToString() != s.Periodicidad)
                {
                    return("SPT115 - El atributo Periodicidad tiene un valor no permitido.");
                }
                if (Convert.ToInt32(s.NumServ) != s.Servicios.Length)
                {
                    return("SPT116 - El NumServ registrado es diferente de la suma de los elementos hijo del nodo “Servicios”.");
                }
                decimal precioSinIVA = 0;
                decimal ImpuestosTrasladadosdelServicio = 0;
                foreach (var i in s.Servicios)
                {
                    precioSinIVA = precioSinIVA + i.PrecioServSinIVA;
                    if (i.ImpuestosTrasladadosdelServicio != null)
                    {
                        ImpuestosTrasladadosdelServicio = ImpuestosTrasladadosdelServicio + i.ImpuestosTrasladadosdelServicio.Importe;
                    }
                }

                if (s.MonTotServSIVA != precioSinIVA)
                {
                    return("SPT117 - El valor del atributo MonTotServSIVA es diferente de la suma de los atributos “PrecioServSinIVA” registrados en los nodos hijos “DetallesDelServicio”.");
                }

                if (s.TotalIVATrasladado != ImpuestosTrasladadosdelServicio)
                {
                    return("SPT118 - El valor del atributo TotalIVATrasladado es diferente de la suma de los atributos “Importe” del nodo “ImpuestosTrasladadosdelServicio”.");
                }

                decimal tiVA            = 0;
                OperacionesCatalogos o2 = new OperacionesCatalogos();
                double MonTotServSIVA   = o2.Consultar_rangoMensualSemanal(s.Periodicidad, s.MonTotServSIVA, "02");
                tiVA = s.MonTotServSIVA * (decimal)MonTotServSIVA;
                if (s.TotalIVARetenido != tiVA)
                {
                    return("SPT119 - El valor del atributo TotalIVARetenido es diferente el producto obtenido al multiplicar el valor del atributo “MonTotServSIVA” por la tasa de retención de IVA del catálogo “c_RangoMenRet” o “c_RangoSemRet” según corresponda.");
                }

                decimal tISR            = 0;
                OperacionesCatalogos o3 = new OperacionesCatalogos();
                double MonTotServSIVA2  = o3.Consultar_rangoMensualSemanal(s.Periodicidad, s.MonTotServSIVA, "01");
                tISR = s.MonTotServSIVA * (decimal)MonTotServSIVA2;
                if (s.TotalISRRetenido != tISR)
                {
                    return("SPT120 - El valor del atributo TotalISRRetenido es diferente del producto obtenido al multiplicar el valor del atributo “MonTotServSIVA” por la tasa de retención de ISR del catálogo “c_RangoMenRet” o “c_RangoSemRet” según corresponda de acuerdo al rango en el que se encuentre el valor del atributo “MonTotServSIVA”.");
                }


                if (s.DifIVAEntregadoPrestServ != (s.TotalIVATrasladado - s.TotalIVARetenido))
                {
                    return("SPT121 - El valor del atributo DifIVAEntregadoPrestServ es distinto del producto obtenido de la diferencia entre el valor del atributo “TotalIVATrasladado” y el valor de atributo “TotaldeIVARetenido”.");
                }
                decimal ComisionDelServicio = 0;
                decimal contribucion        = 0;
                foreach (var i in s.Servicios)
                {
                    ComisionDelServicio = ComisionDelServicio + i.ComisionDelServicio.Importe;
                    if (i.ContribucionGubernamental != null)
                    {
                        if (s.MonTotalContribucionGubernamentalSpecified == false)
                        {
                            return("SPT123 - Se debe registrar el MonTotalContribucionGubernamental siempre que exista el nodo “ContribucionGubernamental” o su valor es diferente al resultado de la suma del atributo “ImpContrib” de los nodos hijos “ContribucionGubernamental” del nodo hijo “DetallesDelServicio”.");
                        }
                        contribucion = contribucion + i.ContribucionGubernamental.ImpContrib;
                    }
                }
                if (s.MonTotalporUsoPlataforma != ComisionDelServicio)
                {
                    return("SPT122 - El valor del atributo MonTotalporUsoPlataforma es diferente la suma de los atributos “Importe” de los nodos “ComisiondelServicio”.");
                }
                if (s.MonTotalContribucionGubernamental != contribucion)
                {
                    return("SPT123 - Se debe registrar el MonTotalContribucionGubernamental siempre que exista el nodo “ContribucionGubernamental” o su valor es diferente al resultado de la suma del atributo “ImpContrib” de los nodos hijos “ContribucionGubernamental” del nodo hijo “DetallesDelServicio”.");
                }

                foreach (var i in s.Servicios)
                {
                    ServicioLocal.Business.c_FormaPagoServ myTipoFormaPago;
                    Enum.TryParse <ServicioLocal.Business.c_FormaPagoServ>(i.FormaPagoServ, out myTipoFormaPago);
                    if (myTipoFormaPago.ToString() != i.FormaPagoServ)
                    {
                        return("SPT124 - La clave registrada en el atributo FormaPagoServ es diferente a las contenidas en el catálogo c_FormaPagoServ.");
                    }
                    ServicioLocal.Business.c_TipoDeServ myTipoServicio;
                    Enum.TryParse <ServicioLocal.Business.c_TipoDeServ>(i.TipoDeServ, out myTipoServicio);
                    if (myTipoServicio.ToString() != i.TipoDeServ)
                    {
                        return("SPT125 - El atributo TipoDeServ tiene una clave diferente a las establecidas en el catálogo c_TipoDeServ.");
                    }

                    if (i.SubTipServSpecified == true)
                    {
                        ServicioLocal.Business.c_SubTipoServ myTipoSubtipo;
                        Enum.TryParse <ServicioLocal.Business.c_SubTipoServ>(i.SubTipServ, out myTipoSubtipo);
                        if (myTipoSubtipo.ToString() != i.SubTipServ)
                        {
                            return("SPT126 - El valor del atributo SubTipServ es diferente a la relación del catálogo “c_SubTipoServ” con el tipo de servicio.");
                        }
                    }

                    Operaciones_IRFC r2 = new Operaciones_IRFC();
                    vI_RFC           t2 = r2.Consultar_IRFC(i.RFCTerceroAutorizado);
                    if (t2 == null)
                    {
                        return("SPT127 - El valor capturado en el atributo RFCTerceroAutorizado es inválido según la lista de RFC inscritos no cancelados en el SAT (l_RFC).");
                    }
                    if (i.FechaServ.Month != retencion.Periodo.MesIni)
                    {
                        return("SPT128 - El valor del atributo MesIni es diferente al valor registrado en el atributo FechaServ del CFDI de Retenciones o mayor al mes en curso.");
                    }
                    if (i.ImpuestosTrasladadosdelServicio.Base != i.PrecioServSinIVA)
                    {
                        return("SPT129 - El valor del atributo Base del nodo “ImpuestosTrasladadosdelServicio” es diferente al valor del atributo “PrecioServSinIVA”.");
                    }

                    if ((i.ImpuestosTrasladadosdelServicio.TasaCuota * i.ImpuestosTrasladadosdelServicio.Base) != i.ImpuestosTrasladadosdelServicio.Importe)
                    {
                        return("SPT130 - El valor del atributo Importe, del nodo “ImpuestosTrasladadosdelServicio es diferente del producto obtenido al multiplicar el valor del atributo “Base” por el valor del atributo “TasaCuota” del nodo hijo “ImpuestosTrasladadosdelServicio”.");
                    }

                    ServicioLocal.Business.c_EntidadesFederativas myTipoEntidad;
                    Enum.TryParse <ServicioLocal.Business.c_EntidadesFederativas>(i.ContribucionGubernamental.EntidadDondePagaLaContribucion, out myTipoEntidad);
                    if (myTipoEntidad.ToString() != i.ContribucionGubernamental.EntidadDondePagaLaContribucion)
                    {
                        return("SPT131 - El valor del atributo EntidadDondePagaLaContribucion es diferente de la clave del catálogo c_EntidadesFederativas.");
                    }

                    if (i.ComisionDelServicio.Importe <= 0)
                    {
                        return("SPT132 - El valor del atributo Importe del nodo “ComisiondelServicio” es igual a cero.");
                    }
                }


                return("0");
            }
            catch (Exception ex)
            {
                return("SPT999 - Error no clasificado");
            }
        }
        public string ProcesarGastosHidrocarburos(GastosHidrocarburos gh, string version, string TipoComprobante)
        {
            string result;

            try
            {
                if (version != "3.3")
                {
                    result = "GCEH101 - El atributo Version no tiene un valor válido.";
                }
                else if (TipoComprobante != "E")
                {
                    result = "GCEH102 - El atributo TipoDeComprobante no cumple con el valor permitido.";
                }
                else
                {
                    foreach (GastosHidrocarburosErogacion en in gh.Erogacion)
                    {
                        if (en.DocumentoRelacionado != null)
                        {
                            foreach (GastosHidrocarburosErogacionDocumentoRelacionado d in en.DocumentoRelacionado)
                            {
                                if (!string.IsNullOrEmpty(d.FolioFiscalVinculado))
                                {
                                    if (d.OrigenErogacion.ToString() != "Nacional")
                                    {
                                        result = "GCEH103 - El atributo FolioFiscalVinculado no se debe registrar cuando el atributo OrigenErogacion es Extranjero.";
                                        return(result);
                                    }
                                    if (string.IsNullOrEmpty(d.RFCProveedor))
                                    {
                                        result = "GCEH105 - El atributo RFCProveedor debe registrarse por que existe el atributo FolioFiscalVinculado.";
                                        return(result);
                                    }
                                    if (!d.MontoTotalIVASpecified)
                                    {
                                        result = "GCEH107 - El atributo MontoTotalIVA debe registrarse por que existe el atributo FolioFiscalVinculado.";
                                        return(result);
                                    }
                                }
                                else
                                {
                                    if (!string.IsNullOrEmpty(d.RFCProveedor))
                                    {
                                        result = "GCEH104 - El atributo RFCProveedor no se debe registrar por que no existe el atributo FolioFiscalVinculado.";
                                        return(result);
                                    }
                                    if (d.MontoTotalIVASpecified)
                                    {
                                        result = "GCEH106 - El atributo MontoTotalIVA no se debe registrar por que no existe el atributo FolioFiscalVinculado.";
                                        return(result);
                                    }
                                }
                                if (!string.IsNullOrEmpty(d.NumeroPedimentoVinculado))
                                {
                                    if (d.OrigenErogacion.ToString() == "Nacional")
                                    {
                                        result = "GCEH108 - El atributo NumeroPedimentoVinculado no se debe registrar cuando el atributo OrigenErogacion es Nacional.";
                                        return(result);
                                    }
                                    if (!d.ClavePedimentoVinculadoSpecified)
                                    {
                                        result = "GCEH110 - El atributo ClavePedimentoVinculado debe registrarse por que existe el atributo NumeroPedimentoVinculado.";
                                        return(result);
                                    }
                                    if (!d.ClavePagoPedimentoVinculadoSpecified)
                                    {
                                        result = "GCEH112 - El atributo ClavePagoPedimento debe registrarse por que existe el atributo NumeroPedimentoVinculado.";
                                        return(result);
                                    }
                                    if (!d.MontoIVAPedimentoSpecified)
                                    {
                                        result = "GCEH114 - El atributo MontoIVAPedimento debe registrarse por que existe el atributo NumeroPedimentoVinculado.";
                                        return(result);
                                    }
                                }
                                else
                                {
                                    if (d.ClavePedimentoVinculadoSpecified)
                                    {
                                        result = "GCEH109 - El atributo ClavePedimentoVinculado no se debe registrar por que no existe el atributo NumeroPedimentoVinculado.";
                                        return(result);
                                    }
                                    if (d.ClavePagoPedimentoVinculadoSpecified)
                                    {
                                        result = "GCEH111 - El atributo ClavePagoPedimento no se debe registrar por que no existe el atributo NumeroPedimentoVinculado.";
                                        return(result);
                                    }
                                    if (d.MontoIVAPedimentoSpecified)
                                    {
                                        result = "GCEH113 - El atributo MontoIVAPedimento no se debe registrar por que no existe el atributo NumeroPedimentoVinculado.";
                                        return(result);
                                    }
                                }
                                if (!string.IsNullOrEmpty(d.FolioFiscalVinculado) && !d.FechaFolioFiscalVinculadoSpecified)
                                {
                                    result = "GCEH132 - El atributo FechaFolioFiscalVinculado debe registrarse por que existe el atributo  FolioFiscalVinculado.";
                                    return(result);
                                }
                                int Mes  = d.FechaFolioFiscalVinculado.Month;
                                int Mes2 = Mes - 1;
                                if (Mes2 == 0)
                                {
                                    Mes2 = 12;
                                }
                                string strinMes = d.Mes.ToString().Replace("Item", "");
                                int    M        = (int)Convert.ToInt16(strinMes);
                                if (M != Mes && M != Mes2)
                                {
                                    result = "GCEH115 - El valor del atributo Mes no corresponde al mes registrado en el atributo FechaFolioFiscalVinculado, o al de un mes anterior de calendario respecto a dicho atributo.";
                                    return(result);
                                }
                                if (d.NumeroPedimentoVinculado != null)
                                {
                                    string sa = this.validarNumeroPedimento(d.NumeroPedimentoVinculado, "GCEH133");
                                    if (sa != "OK")
                                    {
                                        result = sa;
                                        return(result);
                                    }
                                }
                            }
                        }
                        if (en.Porcentaje <= 0m)
                        {
                            result = "GCEH116 - El valor del atributo Porcentaje no es mayor a 0.";
                            return(result);
                        }
                        if (en.Actividades != null)
                        {
                            foreach (GastosHidrocarburosErogacionActividades a in en.Actividades)
                            {
                                if (a.SubActividades == null || a.SubActividades.Count == 0)
                                {
                                    if (a.ActividadRelacionadaSpecified)
                                    {
                                        result = "GCEH117 - El atributo ActividadRelacionada no se debe registrar por que no existen los atributos SubActividadRelacionada y TareaRelacionada.";
                                        return(result);
                                    }
                                }
                                foreach (GastosHidrocarburosErogacionActividadesSubActividades s in a.SubActividades)
                                {
                                    if (s.SubActividadRelacionadaSpecified && s.Tareas.Count > 0 && !a.ActividadRelacionadaSpecified)
                                    {
                                        result = "GCEH118 - El atributo ActividadRelacionada debe registrarse por que existen los atributos SubActividadRelacionada y TareaRelacionada.";
                                        return(result);
                                    }
                                    if (!a.ActividadRelacionadaSpecified && s.Tareas.Count == 0 && s.SubActividadRelacionadaSpecified)
                                    {
                                        result = "GCEH119 - El atributo SubActividadRelacionada no se debe registrar por que no existen los atributos ActividadRelacionada y TareaRelacionada.";
                                        return(result);
                                    }
                                    if (a.ActividadRelacionadaSpecified && s.Tareas.Count > 0 && !s.SubActividadRelacionadaSpecified)
                                    {
                                        result = "GCEH120 - El atributo SubActividadRelacionada debe registrarse por que existen los atributos  ActividadRelacionada y TareaRelacionada.";
                                        return(result);
                                    }
                                    if (!a.ActividadRelacionadaSpecified && !s.SubActividadRelacionadaSpecified && s.Tareas.Count != 0)
                                    {
                                        result = "GCEH121 - El atributo TareaRelacionada no se debe registrar por que no existen los atributos ActividadRelacionada y SubActividadRelacionada.";
                                        return(result);
                                    }
                                    if (a.ActividadRelacionadaSpecified && s.SubActividadRelacionadaSpecified && s.Tareas.Count == 0)
                                    {
                                        result = "GCEH122 - El atributo TareaRelacionada no se debe registrar por que no existen los atributos ActividadRelacionada y SubActividadRelacionada.";
                                        return(result);
                                    }
                                    Actividades myTipoActividad;
                                    Enum.TryParse <Actividades>("Item" + a.ActividadRelacionada.ToString(), out myTipoActividad);
                                    if (myTipoActividad.ToString() != "Item" + a.ActividadRelacionada.ToString())
                                    {
                                        result = "GCEH123 - El valor del atributo ActividadRelacionada no contiene una clave del catálogo catCEH:Actividad.";
                                        return(result);
                                    }
                                    OperacionesCatalogos      o322            = new OperacionesCatalogos();
                                    CatalogosSAT.SubActividad usoSubActividad = o322.Consultar_SubActividad(s.SubActividadRelacionada.ToString());
                                    if (Convert.ToInt16(usoSubActividad.c_Actividad) != Convert.ToInt16(a.ActividadRelacionada.ToString()))
                                    {
                                        result = "GCEH124 - El valor del atributo SubActividadRelacionada no contiene una clave del catálogo catCEH:SubActividad donde la columna c_Actividad sea igual a la clave registrada en el atributo ActividadRelacionada.";
                                        return(result);
                                    }
                                    foreach (GastosHidrocarburosErogacionActividadesSubActividadesTareas t in s.Tareas)
                                    {
                                        if (t.TareaRelacionadaSpecified)
                                        {
                                            OperacionesCatalogos o323     = new OperacionesCatalogos();
                                            CatalogosSAT.Tareas  usoTarea = o323.Consultar_Tarea(t.TareaRelacionada.ToString());
                                            if (Convert.ToInt16(usoTarea.c_SubActividad) != Convert.ToInt16(s.SubActividadRelacionada.ToString().Replace("Item", "")) || Convert.ToInt16(usoTarea.c_Actividad) != Convert.ToInt16(a.ActividadRelacionada.ToString()))
                                            {
                                                result = "GCEH125 - El valor del atributo TareaRelacionada no contiene una clave del catálogo catCEH:Tarea donde la columna c_Subactividad sea igual a la clave registrada en el atributo SubActividadRelacionada y la columna c_Actividad sea igual a la clave registrada en el atributo ActividadRelacionada.";
                                                return(result);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        if (en.CentroCostos != null)
                        {
                            foreach (GastosHidrocarburosErogacionCentroCostos c in en.CentroCostos)
                            {
                                if (c.Yacimientos.Count == 0)
                                {
                                    if (!string.IsNullOrEmpty(c.Campo))
                                    {
                                        result = "GCEH126 - El atributo Campo no se debe registrar por que no existen los atributos Yacimiento y Pozo.";
                                        return(result);
                                    }
                                }
                                foreach (GastosHidrocarburosErogacionCentroCostosYacimientos y in c.Yacimientos)
                                {
                                    if (y.Pozos.Count == 0 && string.IsNullOrEmpty(y.Yacimiento) && !string.IsNullOrEmpty(c.Campo))
                                    {
                                        result = "GCEH126 - El atributo Campo no se debe registrar por que no existen los atributos Yacimiento y Pozo.";
                                        return(result);
                                    }
                                    if (y.Pozos.Count <GastosHidrocarburosErogacionCentroCostosYacimientosPozos>() > 0 && !string.IsNullOrEmpty(y.Yacimiento) && string.IsNullOrEmpty(c.Campo))
                                    {
                                        result = "GCEH127 - El atributo Campo debe registrarse por que existen los atributos  Yacimiento y Pozo.";
                                        return(result);
                                    }
                                    if (y.Pozos.Count == 0 && string.IsNullOrEmpty(c.Campo) && !string.IsNullOrEmpty(y.Yacimiento))
                                    {
                                        result = "GCEH128 - El atributo Yacimiento no se debe registrar por que no existen los atributos Campo y Pozo.";
                                        return(result);
                                    }
                                    if (y.Pozos.Count != 0 && !string.IsNullOrEmpty(c.Campo) && string.IsNullOrEmpty(y.Yacimiento))
                                    {
                                        result = "GCEH129 - El atributo Yacimiento debe registrarse por que existen los atributos  Campo y Pozo.";
                                        return(result);
                                    }
                                    if (string.IsNullOrEmpty(y.Yacimiento) && string.IsNullOrEmpty(c.Campo) && y.Pozos.Count != 0)
                                    {
                                        result = "GCEH130 - El atributo Pozo no se debe registrar por que no existen los atributos Campo y Yacimiento.";
                                        return(result);
                                    }
                                    if (!string.IsNullOrEmpty(y.Yacimiento) && !string.IsNullOrEmpty(c.Campo) && y.Pozos.Count == 0)
                                    {
                                        result = "GCEH131 - El atributo Pozo debe registrarse por que existen los atributos  Campo y Yacimiento.";
                                        return(result);
                                    }
                                }
                            }
                        }
                    }
                    result = "0";
                }
            }
            catch (Exception ex)
            {
                result = "GCEH999 - Error no clasificado " + ex.Message;
            }
            return(result);
        }