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

165
31114
API Factura Electronica Costa Rica

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 = "[email protected]";
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: "[email protected]");

//DotNetcr.FacturaElectronicaCR.Receptor iReceptor =
//    new DotNetcr.FacturaElectronicaCR.Receptor(pNombre: "nombre receptor",
//                                               pIdentificacion_Tipo: "01",
//                                               pIdentificacion_Numero: "11122233",
//                                               pCorreoElectronico: "[email protected]");

//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: "[email protected]");

//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: [email protected]

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

165 Comentarios

    • Hola, es compatible con dotnet standard. Todas las librerías se entregan para que corran localmente.
      La comunicación es entre su aplicacion y Hacienda, no hay un tercero involucrado.
      Los dlls miden 3 megas en total y son 5 dlls

      Ta vamos a enviar la información al correo. Saludos.

  1. Buenos días Don Roy, primeramente agradecer por compartir esto. Segundo, para ver si me puedes compartir la información relacionada con el API, dll y demo para ver si puedo ponerla a funcionar.

  2. Por favor, quisiera usarlo en un sistema tanto personal como comercial que quiero montar, quisiera saber si es posible y el costo.
    Otra cosa es que no quisiera tener dependencia de nadie, es decir, sii mañana uds deciden dejar de trabajar quisiera que siguiera funcional. Es posible?
    Nota: Mi correo esta bien escrito aunq parezca que no, digo para cuando me respondan.
    Saludos.

  3. Hola me podrían enviar como luce un xml de mensaje receptor y como luce el json que hay que enviar para 4.3, tengo un problema que me devuelve indicando que payload no incluye algunos de los campos requeridos.

    Ejemplo del payload que estoy enviando:
    {
    «Clave»: «50623081900310130324805000002010000025684199999999»,
    «NumeroCedulaEmisor»: «3101303248»,
    «FechaEmisionDoc»: «2019-08-23T19:30:39.000-06:00»,
    «Mensaje»: «1»,
    «MontoTotalImpuesto»: «2371.06207»,
    «CodigoActividad»: «523402»,
    «CondicionImpuesto»: «04»,
    «TotalFactura»: «20610.00107»,
    «NumeroCedulaReceptor»: «3101884369»,
    «NumeroConcecutivoReceptor»: «00100001050000000014»,
    «comprobanteXml»: «PD94bWwgdmVyc2lvbj0iM…..»
    }

  4. Buenas, me puede enviar información del API, yo tengo un sistema de POS y ocupo agregarle la parte de facturación electrónica. Yo lo tengo hecho en C#.

Dejar respuesta

Please enter your comment!
Please enter your name here