lunes, diciembre 5, 2022

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 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

Redes Sociales

2,736FansMe gusta
326SeguidoresSeguir

Popular esta semana

Flutter – Error: ADB exited with exit code 1

En este artículo vamos a explorar algunas posibles causas y solución al error en Flutter Error: ADB exited with exit code 1....
SQL Server - Merge

MERGE en SQL Server para Insert, Delete y Update con dos tablas

Ejemplo práctico usando MERGE para sincronizar dos tablas, Insert, Update y Delete en un solo query. Válido para SQL SERVER 2008 o superior.

Convertir String a Base64 y Base64 a String

Hemos tenido algunas consultas en estos días de cómo convertir Texto String a Base64 y viceversa, entonces decidimos hacer este pequeño ejemplo. Las funciones son...

Últimos artículos

Índices repetidos en SQL Server ¿Cómo encontrarlos?

Los índices en la base de datos SQL Server es una herramienta que nos ayuda a mejorar la respuesta de nuestras consultas,...
Flutter - Instagram Clone App

Instagram Clone App con Flutter

Marvin Stanley Valenzuela nos comparte un reto y genialidad a la vez, excelente práctica de la que podemos aprender mucho, diseñó en...

¿Cómo agregar una IP adicional en una VM Ubuntu en Azure?

Lo más común al momento de crear y configurar un nuevo servidor es que a este le asigne un solo IP, pero...
flutter one year

Después de un año con Flutter, esto es lo que aprendí

La historia comenzó cuando un día desperté pensando en tener un nuevo proyecto personal. Me dije a mí misma que hay muchas...