miércoles, junio 7, 2023

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

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.
SQL Server

Cómo saber la fecha que se modificó un procedimiento almacenado

Poder saber cuales objetos o procedimientos almacenados se modificaron recientemente es muy útil principalmente en bases de datos donde varios desarroladores tienen acceso
SQL Server

Format en SQL Server (Transact-SQL)

La función Format aplica desde SQL Server 2012 en adelante. Devuelve un valor con el formato previamente indicado. Se puede utilizar para definir el formato de una fecha y hora o para retornar un numero como varchar en un formato específico.

Últimos artículos

SQL Server MERGE

MERGE in SQL Server for Insert, Delete and Update with two tables

Practical example using MERGE to synchronize two tables, Insert, Update and Delete in a single query. Valid for SQL SERVER 2008 or...

Como crear una API REST con ASP.NET Core 6.0

Crear una API REST con C# en ASP.NET es un proceso sencillo y rápido que permite exponer un conjunto de recursos a...
Machine Learning & Python

Introducción a Machine Learning en Python

Machine Learning es una rama de la inteligencia artificial que se enfoca en el desarrollo de sistemas que pueden aprender de...
SQL Server MERGE

MERGE en SQL Server, como utilizarlo de forma sencilla

El comando MERGE en SQL Server se utiliza para combinar datos de varias tablas en una sola tabla. Es útil para actualizar...