Skip to content

Latest commit

 

History

History
98 lines (74 loc) · 3.91 KB

README.md

File metadata and controls

98 lines (74 loc) · 3.91 KB

Features

Esta librería esta impirada en https://github.com/apokalipto/facturacr

Esta librería implementa los procesos de facturación electrónica del Ministerio de Hacienda de Costa Rica en Ruby. Puede ser utilizada como punto de partida para realizar la integración necesaria con el Ministerio de Hacienda.

Actualmente cuenta con las siguientes características:

  • Funcionalidad con .NetCore 2 y .NetFramework4
  • Generación de XML
  • Firmado de XML ( utilizando https://github.com/ctt-gob-es/FirmaXadesNet45 )
  • Comunicación con el API del ministerio de hacienda(enviar documento y comsultar estados)

Se emplean las librerias:

Consideraciones importantes

  • El formado de las fechas debe ser "yyyy-MM-dd'T'HH:mm:sszzz"
  • Emisor->Identificacion->Numero debe ser en formato crudo y no en 12 digitos como en el número de secuencia

Implementación

Configurar las variales

            var user = "**************";
            var userPass = "**********";

            var pin = "****";
            var p12 = "C:\\Users\\$$$$$\\Desktop\\060339051236.p12";

            var config = new Configuracion(user, userPass, p12, pin);
            var FH = new FacturacionHacienda(config);

Crear un objeto emisor y receptor

            //Emisor
            var cedula = new DocumentoIdentificacion(DocumentoIdentificacion.TipoIdentificacion.Cedula_Fisica, "202220222");
            var telefono = new TelefonoBase(TelefonoBase.TipoTelefono.Telefono, "506", "88888888");
            var ubicacion = new Ubicacion("1", "01", "01", "OTRO");
            var email = "*****@***.com";

            var emisor = new Emisor("NOMBRE EMISOR", cedula, ubicacion, email);

            //Receptor
            var cedulaReceptor = new DocumentoIdentificacion(DocumentoIdentificacion.TipoIdentificacion.Cedula_Fisica, "101110111");
            var receptor = new Receptor("NOMBRE RECEPTOR", identificacion: cedulaReceptor);

Crear items y tipo de documento

            var items = new List<Item>();
            items.Add(new Item("1", "1", "Sp", "Desarrollo de Software y Mantenimiento", 300, 300, 300, 300, new string[] { "001" }));

            var tax = new Impuesto(Impuesto.CodigoImpuesto.Impuesto_General_sobre_las_Ventas, 13, (float)(100 * 0.13));

            items.Add(new Item("2", "2", "Unid", "Impresora de POS", 50, 100, 100, 113, new string[] { "002" }, impuestos: new 
Impuesto[] { tax }));

            var resumenFac = new ResumenFactura(codigoMoneda: "USD", tipoCambio: 575, totalServExentos: 300, totalMercanciasGravadas: 
100, totalExento: 300, totalGravado: 100, totalVenta: 400, totalVentaNeta: 400, totalImpuesto: 13, totalComprobante: 413);

            var numeroFac = "24";
            var secCod = "3";
            var factura = new Documento(DateTime.Now, emisor, Documento.CondicionVenta.Contado,
                                        Documento.MedioPago.Efectivo, numeroFac, Documento.TipoDocumento.Factura_Electronica,
                                        secCod, items.ToArray(), resumenFac, Documento.SituacionDocumento.Normal, receptor);

Firmar doc y enviar

            //firmar XML
            FirmadorXML.Firmar(config);

            //Enviar a Hacienda
            var esEnviado = FH.EnviarDocumento(factura, xmlFirmado);

            //Espera a Hacienda
            System.Threading.Thread.Sleep(2500);

            //Optener el estado de la factura
            var estado = FH.EstadoDocumento(factura.ClaveNumerica());
            Console.WriteLine(estado);

TODO

  • Verificar el XML contra el XSD
  • Optener todos los documentos desde Hacienda
  • Optener un documento de Hacienda
  • Parsear XML a clases de la librería

Contacto

Fabián Balmaceda Rescia fabianbalmaceda2@gmail.com Telegram: @balmacefa