예제 #1
0
        public int VerificaCSDRevocado(string serieCert, string fecha)
        {
            //var lcoLogic = new LcoLogic();
            var  lcoLogic = new Operaciones_IRFC();
            vLCO lco      = lcoLogic.SearchLCOByNoCertificado(serieCert);

            try
            {
                if (lco == null)
                {
                    return(304);
                }
                DateTime fechaEmision = Convert.ToDateTime(fecha);
                if (lco.ValidezObligaciones.Equals("0", StringComparison.CurrentCultureIgnoreCase) ||
                    (fechaEmision < lco.FechaInicio || DateTime.Now > lco.FechaFinal) ||
                    !lco.EstatusCertificado.Contains("A"))
                {
                    return(304);
                }
                return(0);
            }
            catch (Exception ee)
            {
                Logger.Error("", ee);
                return(304);
            }
        }
예제 #2
0
        /*
         * public empresa GetByRfcMultipleUsuario(string usuario)//obtiene la empresa por medio del usuario
         * {
         *  try
         *  {
         *      using (var db = new NtLinkLocalServiceEntities())
         *      {
         *          Sistemas sist = db.Sistemas.FirstOrDefault(c => c.Email == usuario);
         *          var empresa = db.empresa.FirstOrDefault(e => e.idSistema == sist.IdSistema);
         *          return empresa;
         *      }
         *  }
         *  catch (Exception ee)
         *  {
         *      Logger.Error(ee);
         *      if (ee.InnerException != null)
         *          Logger.Error(ee.InnerException);
         *      return null;
         *  }
         * }*/

        //-------------------------------------------------------------------------------------
        private bool Validar(empresa e)
        {
            //TODO: Validar los campos requeridos y generar excepcion
            {
                if (string.IsNullOrEmpty(e.RazonSocial))
                {
                    throw new FaultException("La Razón Social no puede ir vacía");
                }
                if (string.IsNullOrEmpty(e.RFC))
                {
                    throw new FaultException("El RFC no puede ir vacío");
                }
                if (string.IsNullOrEmpty(e.Email))
                {
                    throw new FaultException("El campo Email es Obligatorio");
                }
                if (string.IsNullOrEmpty(e.Direccion))
                {
                    throw new FaultException("El campo Calle es Obligatorio");
                }
                if (string.IsNullOrEmpty(e.Ciudad))
                {
                    throw new FaultException("El campo Municipio es Obligatorio");
                }
                if (string.IsNullOrEmpty(e.Estado))
                {
                    throw new FaultException("El campo Estado es Obligatorio");
                }
                if (string.IsNullOrEmpty(e.RegimenFiscal))
                {
                    throw new FaultException("El campo Regimen Fiscal es Obligatorio");
                }
                if (string.IsNullOrEmpty(e.CP))
                {
                    throw new FaultException("El campo Codigo Postal es Obligatorio");
                }
                Regex regex =
                    new Regex(
                        @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;]\s*\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*");
                if (!regex.IsMatch(e.Email))
                {
                    throw new FaultException("El campo Email esta mal formado");
                }
                Regex reg = new Regex("^[A-Z,Ñ,&amp;]{3,4}[0-9]{2}[0-1][0-9][0-3][0-9][A-Z,0-9]{2}[0-9,A]$");
                if (!reg.IsMatch(e.RFC))
                {
                    throw new FaultException("El RFC es inválido");
                }

                //LcoLogic lco = new LcoLogic();
                Operaciones_IRFC lco = new Operaciones_IRFC();
                var rfcLco           = lco.SearchLCOByRFC(e.RFC);
                if (rfcLco == null)
                {
                    throw new FaultException("El Rfc no se encuentra en la lista de contribuyentes con obligaciones");
                }
            }
            return(true);
        }
예제 #3
0
 private bool Validar(Distribuidores d)
 {
     //TODO: Validar los campos requeridos y generar excepcion
     {
         if (string.IsNullOrEmpty(d.Nombre))
         {
             throw new FaultException("La Razón Social no puede ir vacía");
         }
         if (string.IsNullOrEmpty(d.Email))
         {
             throw new FaultException("El campo Email es Obligatorio");
         }
         if (string.IsNullOrEmpty(d.Direccion))
         {
             throw new FaultException("El campo Calle es Obligatorio");
         }
         if (string.IsNullOrEmpty(d.Ciudad))
         {
             throw new FaultException("El campo Municipio es Obligatorio");
         }
         if (string.IsNullOrEmpty(d.Estado))
         {
             throw new FaultException("El campo Estado es Obligatorio");
         }
         if (string.IsNullOrEmpty(d.Cp))
         {
             throw new FaultException("El campo Código Postal es Obligatorio");
         }
         Regex reg = new Regex("^[A-Z,Ñ,&amp;]{3,4}[0-9]{2}[0-1][0-9][0-3][0-9][A-Z,0-9]{2}[0-9,A]$");
         if (!reg.IsMatch(d.Rfc))
         {
             throw new FaultException <ApplicationException>(new ApplicationException("El RFC es inválido"),
                                                             "El RFC es inválido");
         }
         Regex regex =
             new Regex(
                 @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;]\s*\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*");
         if (!regex.IsMatch(d.Email))
         {
             throw new FaultException("El campo Email esta mal formado");
         }
         if (d.IdDistribuidor == 0 && Existe(d))
         {
             throw new FaultException("El RFC ya fue capturado");
         }
         // LcoLogic lco = new LcoLogic();
         Operaciones_IRFC lco = new Operaciones_IRFC();
         var rfcLco           = lco.SearchLCOByRFC(d.Rfc);
         if (rfcLco == null)
         {
             throw new FaultException("El Rfc no se encuentra en la lista de contribuyentes con obligaciones");
         }
     }
     return(true);
 }
예제 #4
0
 //-------------------------------------------------------------------------------------
 public int ValidaRFCLCO(string rfc)
 {
     try
     {
         //var lcoLogic = new LcoLogic();
         var  lcoLogic = new Operaciones_IRFC();
         vLCO lco      = lcoLogic.SearchLCOByRFC(rfc);
         return(lco == null ? 402 : 0);
     }
     catch (Exception ee)
     {
         Logger.Error("", ee);
         return(402);
     }
 }
        public int VerificaCSDRevocado(string serieCert, DateTime fecha, string version)
        {
            var lcoLogic  = new LcoLogic();
            var lcoLogic2 = new Operaciones_IRFC();

            if (version == "3.2")
            {
                vLCO lco = lcoLogic2.SearchLCOByNoCertificado(serieCert);
                try
                {
                    if (lco == null)
                    {
                        return(304);
                    }

                    if (lco.ValidezObligaciones.Equals("0", StringComparison.CurrentCultureIgnoreCase) ||
                        (fecha < lco.FechaInicio || fecha > lco.FechaFinal) ||
                        !lco.EstatusCertificado.Contains("A"))
                    {
                        return(304);
                    }
                    return(0);
                }
                catch (Exception ee)
                {
                    Logger.Error("", ee);
                    return(304);
                }
            }
            else
            {
                var lco = lcoLogic.SearchCsdBySerie(serieCert, fecha);
                try
                {
                    if (lco == null)
                    {
                        return(304);
                    }
                    return(0);
                }
                catch (Exception ee)
                {
                    Logger.Error("", ee);
                    return(304);
                }
            }
        }
예제 #6
0
 public bool ValidaCSDEmisor(byte[] certificado)
 {
     try
     {
         X509Certificate2 cer = new X509Certificate2(certificado);
         if (certificado != null)
         {
             if (cer.SerialNumber != null)
             {
                 string serialNumber =
                     cer.SerialNumber.Trim();
                 string a = serialNumber;
                 for (int i = 0; i < a.Length; i++)
                 {
                     if (i < serialNumber.Length)
                     {
                         serialNumber = serialNumber.Remove(i, 1);
                     }
                 }
                 Operaciones_IRFC o     = new Operaciones_IRFC();
                 vLCO             valor = o.CSDValidar(serialNumber);
                 //RfcLco valor = CSDValidar(serialNumber);
                 if (valor != null)
                 {
                     return(true);
                 }
             }
         }
     }
     catch (Exception ee)
     {
         Logger.Error(ee);
         return(false);
     }
     return(false);
 }
예제 #7
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);
        }//-------------------------------------------------------------------------------------
예제 #8
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");
            }
        }