viernes, marzo 29, 2024

API Facturación Electrónica Costa Rica, componente dll para .NET

En DotNetcr tenemos un DLL en .NET para la facturación electrónica de Costa Rica, con el que se realiza todo el proceso, creación del XML, firma la factura, la envía a los servidores de Hacienda y la valida si fue aceptada o rechazada.

En pocos minutos tendrás tu sistema de facturación electrónica funcionando. Te brindamos un demo para que lo puedas instalar en tu aplicación y probarlo en el ambiente de pruebas de Hacienda y si estás a gusto con el sistema puedas comprar tu licencia con uso ilimitado.

No hay límite en la cantidad de facturas enviadas y tu información no pasa por terceros, toda la comunicación es entre su aplicación y los servidores de Hacienda.

En un artículo anterior mostramos el API que funciona con cualquier tipo de aplicación, se instalan unos Servicios Windows en la computadora o servidor y este se comunica con una base de datos donde se procesa toda la información de las facturas electrónicas.

Ahora publicamos el componente para aplicaciones en .NET, con el que solo se agrega un dll a la aplicación y ahí mismo puede crear la factura XML, enviarla a los servidores de Hacienda y también consultarla si fue aceptada o rechazada.

Demo v1.0.39
VB: https://1drv.ms/u/s!AtqYg4eM-S_8iaxYB4AL1iNLtSksJA
C#: https://1drv.ms/u/s!AtqYg4eM-S_8iaxZm0zUifuK9FUFrA

Ejemplo de uso C#

Console.WriteLine("Generando XML Factura Electrónica");

//Deben de cambiar los valores abajo del certificado y los datos del emisor
//Para las pruebas crear la carpeta C:\Temp\

string _pathCertificado = "C:\\Temp\\310188887777.p12";
string _pinCertificado = "1111";
string _usuarioAPI = "cpj-3-101-888777@stag.comprobanteselectronicos.go.cr";
string _claveAPI = "pru:1234:A_b:c^543678;";

//Aquí va la licencia, generada por DotNetcr 
string _licencia = "PRU898464356DC20-25D5C679FA2737C7B9084FC5DNCR-RRFCD20E527F84B6";

//IMPORTANTE: cambiar los valores por los correctos. 

DotNetcr.FacturaElectronicaCR.Emisor iEmisor =
    new DotNetcr.FacturaElectronicaCR.Emisor(pNombre: "Aquí poner nombre de emisor",
                                             pIdentificacion_Tipo: "02",
                                             pIdentificacion_Numero: "Aqui poner cédula jurídica",
                                             pUbicacion_Provincia: "1",
                                             pUbicacion_Canton: "04",
                                             pUbicacion_Distrito: "06",
                                             pUbicacion_Barrio: "01",
                                             pUbicacion_OtrasSenas: "Dirección",
                                             pTelefono_CodigoPais: "506",
                                             pTelefono_Numero: "555555",
                                             pCorreoElectronico: "emisor@correo.com");

//DotNetcr.FacturaElectronicaCR.Receptor iReceptor =
//    new DotNetcr.FacturaElectronicaCR.Receptor(pNombre: "nombre receptor",
//                                               pIdentificacion_Tipo: "01",
//                                               pIdentificacion_Numero: "11122233",
//                                               pCorreoElectronico: "receptor@correo.com");

//Receptor con identificación Extranjero
//DotNetcr.FacturaElectronicaCR.Receptor iReceptor =
//      new DotNetcr.FacturaElectronicaCR.Receptor(pNombre: "nombre receptor",
//                                                 pIdentificacion_Tipo: "",
//                                                 pIdentificacion_Numero: "",
//                                                 pIdentificacion_EsExtranjero: true,
//                                                 pIdentificacion_Extranjero_Numero: "A0123456",
//                                                 pCorreoElectronico: "receptor@correo.com");

//IMPORTANTE: Si quiere poner receptor descomentar el iReceptor anterior 
//y comentar el siguiente iReceptor

DotNetcr.FacturaElectronicaCR.Receptor iReceptor =
    new DotNetcr.FacturaElectronicaCR.Receptor(pSinReceptor: true);

DotNetcr.FacturaElectronicaCR.FacturaElectronica iFactura =
    new DotNetcr.FacturaElectronicaCR.FacturaElectronica(codigoSucursal: 1,
                                                         codigoPuntoVenta: 1,
                                                         tipoComprobante: "01", //01 Factura, 02 ND, 03 NC, 04 Tiquete
                                                         secuenciaFactura: 102, //Este valor debe de comenzar en 1
                                                         emisor: iEmisor,
                                                         receptor: iReceptor,
                                                         condicionVenta: "01",
                                                         plazoCredito: "0",
                                                         codigoMoneda: "CRC",
                                                         tipoCambio: 1,
                                                         fechaFactura: DateTime.Now,
                                                         codigoCompania: "1");

iFactura.AgregaMedioPago("01");
iFactura.AgregaMedioPago("02");

//Se inicializan los impuestos 
DotNetcr.FacturaElectronicaCR.ImpuestosDetalle iImpuesto = 
    new DotNetcr.FacturaElectronicaCR.ImpuestosDetalle();

//Linea Detalle con impuesto
iImpuesto.AgregaImpuesto(pImpuesto_Codigo: "99", pImpuesto_Tarifa: 10);

iFactura.AgregaLineaDetalle(pArticulo_Tipo: "04",
                            pArticulo_Codigo: "AR0123",
                            pCantidad: 2,
                            pUnidadMedida: "Unid",
                            pUnidadMedidaComercial: "Unidad",
                            pDetalleArticulo: "Camiseta M Blanca",
                            pPrecioUnitario: 1000,
                            pMontoDescuento: 100,
                            pNaturalezaDescuento: "Descuento en factura",
                            pImpuestos: iImpuesto,
                            pEsServicio: false);

//Linea Detalle sin impuesto
iImpuesto = new DotNetcr.FacturaElectronicaCR.ImpuestosDetalle(pSinImpuesto: true);

iFactura.AgregaLineaDetalle(pArticulo_Tipo: "04",
                            pArticulo_Codigo: "12344983771",
                            pCantidad: 1,
                            pUnidadMedida: "Unid",
                            pUnidadMedidaComercial: "",
                            pDetalleArticulo: "Refresco gaseoso",
                            pPrecioUnitario: 1000,
                            pMontoDescuento: 0,
                            pNaturalezaDescuento: "",
                            pImpuestos: iImpuesto,
                            pEsServicio: false);

iImpuesto = new DotNetcr.FacturaElectronicaCR.ImpuestosDetalle();
iImpuesto.AgregaImpuesto("01", 13);

iFactura.AgregaLineaDetalle(pArticulo_Tipo: "04",
                            pArticulo_Codigo: "DG0233478",
                            pCantidad: 1,
                            pUnidadMedida: "Sp",
                            pUnidadMedidaComercial: "Servicio",
                            pDetalleArticulo: "Servicio Restaurante",
                            pPrecioUnitario: 1000,
                            pMontoDescuento: 100,
                            pNaturalezaDescuento: "Descuento en factura",
                            pImpuestos: iImpuesto,
                            pEsServicio: true);
                        
//Agrega campos otros, es opcional
iFactura.AgregaOtroTexto("CR001", "Valor 01");
iFactura.AgregaOtroTexto("CR002", "Valor 02");

//iFactura.AgregaReferencia(pTipoDoc: "", 
//                          pNumero: "", 
//                          pFechaEmision: DateTime.Now, 
//                          pCodigo: "", 
//                          pRazon: "");

System.Xml.XmlDocument xmlFactura = new System.Xml.XmlDocument();
xmlFactura = iFactura.CreaXMLFacturaElectronica();

xmlFactura.Save("C:\\Temp\\" + iFactura.Clave.ToString() + "_SF.xml");
//iFactura.XmlFactura.Save("C:\\Temp\\" + iFactura.Clave.ToString() + "_SF.xml");

Console.WriteLine("Consecutivo: " + iFactura.NumeroConsecutivo.ToString());
Console.WriteLine("Clave: " + iFactura.Clave.ToString());
Console.WriteLine("Clave Cod. Seguridad: " + iFactura.ClaveCodigoSeguridad.ToString());

DotNetcr.FacturaElectronicaCR.Procesa iProcesa = new DotNetcr.FacturaElectronicaCR.Procesa();
iProcesa.Licencia = _licencia;  //<<<<<<<-----IMPORTANTE

iProcesa.EnviaFactura(xmlFactura: iFactura.XmlFactura,
                      modoPruebas: 1,
                      pathCertificado: _pathCertificado,
                      pinCertificado: _pinCertificado,
                      usuarioApi: _usuarioAPI,
                      claveApi: _claveAPI,
                      directorioTemp: "C:\\Temp\\");

iProcesa.xmlFacturaFirmado.Save("C:\\Temp\\" + iFactura.Clave.ToString() + "_firmada.xml");

Console.WriteLine();
Console.WriteLine("Enviando Factura");
Console.WriteLine("Estado: " + iProcesa.estadoFactura);

//Este paso debe de estar en otro proceso
//Para el ejemplo se pone un delay de 10 segundos.
Thread.Sleep(10000);
iProcesa.ConsultaFactura(clave: iFactura.Clave,
                         modoPruebas: 1,
                         usuarioApi: _usuarioAPI,
                         claveApi: _claveAPI);

iProcesa.xmlRespuesta.Save("C:\\Temp\\" + iFactura.Clave.ToString() + "_respuesta.xml");

Console.WriteLine();
Console.WriteLine("Consulta Factura");
Console.WriteLine("Estado: " + iProcesa.estadoFactura);
Console.WriteLine();
Console.WriteLine("Mensaje: " + iProcesa.mensajeRespuesta);

Console.Read();

Si desea más información del API no dude en contactarnos.

Información: contacto@dotnetcr.com

Artículos de la factura electrónica en
http://www.royrojas.com/tag/factura-electronica-costa-rica/

Roy Rojas
Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub
Roy Rojas
Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub