facturacionelectronicapy-xmlgen
v1.0.251
Published
API Node JS para generar el archivo XML del Documento electrónico exigido por la SET en base a JSON
Downloads
622
Maintainers
Readme
Facturación Electrónica - Generación de XML para la SET (Paraguay)
Módulo NodeJS que genera el archivo XML para enviar a la SET (Subsecretaria de Estado de Tributación del Ministerio de Hacienda) para el proceso y generación del documento electrónico, a partir de una estructura de datos en formato JSON.
Versión del Manual Técnico: 150
Este paquete pretende servir de modelo de transferencia estandarizado para la comunicación con la SET contemplando la totalidad de los campos exigidos para cada bloque y tipos de documentos electrónicos.
El mismo es utilizado y mantenido por el autor y otorgado a la comunidad de desarrolladores de forma gratuita bajo licencia MIT
El módulo está preparado de forma a proveer una fácil integración dentro de su entorno NodeJS y para con cualquier otro lenguaje, sistema o librería que requiera, por ejemplo publicando el médoto desde un REST.
Características
- Genera el CDC automáticamente de acuerdo a los datos del documento electrónico
- Implementa el Algoritmo del dígito verificador del CDC
- Permite sobreescribir el valor del código de seguridad, de acuerdo a las necesidades del implementador
- Realiza la validación de los datos de entrada conforme el menual técnico de la SET
Instalación
Para instalar el módulo en su proyecto node, ejecute el siguiente comando:
npm install facturacionelectronicapy-xmlgen
El método requiere 2 argumentos tipo JSON para general el XML. El primero es un argumento params
con las informaciones estáticas del Contribuyente emisor, y el segundo es un data
con los datos variables para cada documento electrónico a generar.
La promesa devuelve el documento XML con los datos generados.
Ejemplos de Uso:
Javascript:
const xmlgen = require('facturacionelectronicapy-xmlgen');
//O const xmlgen = require('facturacionelectronicapy-xmlgen').default;
xmlgen.generateXMLDE(params, data, options).then(xml => {
console.log(xml);
}).catch(error => {
console.log(error);
});
TypeScript:
import xmlgen from 'facturacionelectronicapy-xmlgen';
xmlgen.generateXMLDE(params, data, options).then(xml => {
console.log(xml);
}).catch(error => {
console.log(error);
});
Ambos parámetros params
y data
pueden ser proveidos a partir de una vista de base de datos, leyendo datos de un CSV o proceso generado por otro sistema, para lograr una fácil integración
Al final podrá encontrar la estructura completa para el PARAMS y el JSON
Estructura completa del params
JSON de Ejemplo
{
"version" : 150,
"ruc" : "80069563-1",
"razonSocial" : "DE generado en ambiente de prueba - sin valor comercial ni fiscal",
"nombreFantasia" : "TIPS S.A. TECNOLOGIA Y SERVICIOS",
"actividadesEconomicas" : [{
"codigo": "1254",
"descripcion": "Desarrollo de Software",
}],
"timbradoNumero" : "12558946",
"timbradoFecha" : "2022-08-25",
"tipoContribuyente" : 2,
"tipoRegimen" : 8,
"establecimientos" : [{
"codigo" : "001",
"direccion" : "Barrio Carolina",
"numeroCasa" : "0",
"complementoDireccion1" : "Entre calle 2",
"complementoDireccion2" : "y Calle 7",
"departamento" : 11,
"departamentoDescripcion" : "ALTO PARANA",
"distrito" : 145,
"distritoDescripcion" : "CIUDAD DEL ESTE",
"ciudad" : 3432,
"ciudadDescripcion" : "PUERTO PTE.STROESSNER (MUNIC)",
"telefono" : "0973-527155",
"email" : "[email protected], [email protected]",
"denominacion" : "Sucursal 1",
}]
}
El campo Email, si bien puede informarse mas de 1 (uno), en el Sifen solamente será enviado el primero
Estructura completa del data
JSON de Ejemplo
{
"tipoDocumento" : 1,
"establecimiento" : "001",
"codigoSeguridadAleatorio" : "298398",
"punto" : "001",
"numero" : "0000001",
"descripcion" : "Aparece en el documento",
"observacion" : "Cualquier informacion de marketing, publicidad, sorteos, promociones para el Receptor",
"fecha" : "2022-08-14T10:11:00",
"tipoEmision" : 1,
"tipoTransaccion" : 1,
"tipoImpuesto" : 1,
"moneda" : "PYG",
"condicionAnticipo" : 1,
"condicionTipoCambio": 1,
"descuentoGlobal": 0,
"anticipoGlobal": 0,
"cambio": 6700,
"cliente" : {
"contribuyente" : true,
"ruc" : "2005001-1",
"razonSocial" : "Marcos Adrian Jara Rodriguez",
"nombreFantasia" : "Marcos Adrian Jara Rodriguez",
"tipoOperacion" : 1,
"direccion" : "Avda Calle Segunda y Proyectada",
"numeroCasa" : "1515",
"departamento" : 11,
"departamentoDescripcion" : "ALTO PARANA",
"distrito" : 143,
"distritoDescripcion" : "DOMINGO MARTINEZ DE IRALA",
"ciudad" : 3344,
"ciudadDescripcion" : "PASO ITA (INDIGENA)",
"pais" : "PRY",
"paisDescripcion" : "Paraguay",
"tipoContribuyente" : 1,
"documentoTipo" : 1,
"documentoNumero" : "2324234",
"telefono" : "061-575903",
"celular" : "0973-809103",
"email" : "[email protected], [email protected]",
"codigo" : "1548"
},
"usuario" : {
"documentoTipo" : 1,
"documentoNumero" : "157264",
"nombre" : "Marcos Jara",
"cargo" : "Vendedor"
},
"factura" : {
"presencia" : 1,
"fechaEnvio" : "2023-10-21",
"dncp" : {
"modalidad" : "ABC",
"entidad" : 1,
"año" : 2021,
"secuencia" : 3377,
"fecha" : "2022-09-14T10:11:00"
}
},
"autoFactura" : {
"tipoVendedor" : 1,
"documentoTipo" : 1,
"documentoNumero" : 1,
"nombre" : "Vendedor autofactura",
"direccion" : "Vendedor autofactura",
"numeroCasa" : "Vendedor autofactura",
"departamento" : 11,
"departamentoDescripcion" : "ALTO PARANA",
"distrito" : 143,
"distritoDescripcion" : "DOMINGO MARTINEZ DE IRALA",
"ciudad" : 3344,
"ciudadDescripcion" : "PASO ITA (INDIGENA)",
"transaccion" : {
"lugar" : "Donde se realiza la transaccion",
"departamento" : 11,
"departamentoDescripcion" : "ALTO PARANA",
"distrito" : 143,
"distritoDescripcion" : "DOMINGO MARTINEZ DE IRALA",
"ciudad" : 3344,
"ciudadDescripcion" : "PASO ITA (INDIGENA)"
}
},
"notaCreditoDebito" : {
"motivo" : 1
},
"remision" : {
"motivo" : 1,
"tipoResponsable" : 1,
"kms" : 150,
"fechaFactura" : "2022-08-21"
},
"condicion" : {
"tipo" : 1,
"entregas" : [{
"tipo" : 1,
"monto" : "150000",
"moneda" : "PYG",
"cambio" : 0
}, {
"tipo" : 3,
"monto" : "150000",
"moneda" : "PYG",
"cambio" : 0,
"infoTarjeta" : {
"tipo" : 1,
"tipoDescripcion" : "Dinelco",
"titular" : "Marcos Jara",
"ruc" : "6969549654-1",
"razonSocial" : "Bancard",
"medioPago" : 1,
"codigoAutorizacion" : 232524234
}
}, {
"tipo" : 2,
"monto" : "150000",
"moneda" : "PYG",
"cambio" : 0,
"infoCheque" : {
"numeroCheque": "32323232",
"banco" : "Sudameris"
}
}],
"credito" : {
"tipo" : 1,
"plazo" : "30 días",
"cuotas" : 2,
"montoEntrega" : 1500000.00,
"infoCuotas" : [{
"moneda" : "PYG",
"monto" : 800000.00,
"vencimiento" : "2021-10-30"
}, {
"moneda" : "PYG",
"monto" : 800000.00,
"vencimiento" : "2021-11-30"
}]
}
},
"items" : [{
"codigo" : "A-001",
"descripcion": "Producto o Servicio",
"observacion": "Información adicional o complementaria sobre el producto",
"partidaArancelaria" : 4444,
"ncm": "ABCD1234",
"unidadMedida": 77,
"cantidad": 10.5,
"precioUnitario": 10800,
"cambio": 0,
"descuento": 0,
"anticipo": 0,
"pais" : "PRY",
"paisDescripcion" : "Paraguay",
"tolerancia" : 1,
"toleranciaCantidad" : 1,
"toleranciaPorcentaje" : 1,
"cdcAnticipo" : "44digitos",
"dncp" : {
"codigoNivelGeneral" : "12345678",
"codigoNivelEspecifico" : "1234",
"codigoGtinProducto" : "12345678",
"codigoNivelPaquete" : "12345678"
},
"ivaTipo" : 1,
"ivaBase" : 100,
"iva" : 5,
"lote" : "A-001",
"vencimiento" : "2022-10-30",
"numeroSerie" : "",
"numeroPedido" : "",
"numeroSeguimiento" : "",
"importador" : {
"nombre" : "Importadora Parana S.A.",
"direccion" : "Importadora Parana S.A.",
"registroImportador" : "Importadora Parana S.A."
},
"registroSenave" : "323223",
"registroEntidadComercial" : "RI-32/22",
"sectorAutomotor" : {
"tipo" : 1,
"chasis" : "45252345235423532",
"color" : "Rojo",
"potencia" : 1500,
"capacidadMotor" : 5,
"capacidadPasajeros" : 5,
"pesoBruto" : 10000,
"pesoNeto" : 8000,
"tipoCombustible" : 9,
"tipoCombustibleDescripcion" : "Vapor",
"numeroMotor" : "323234234234234234",
"capacidadTraccion" : 151.01,
"año" : 2009,
"tipoVehiculo" : "Camioneta",
"cilindradas" : "3500"
}
}],
"sectorEnergiaElectrica" : {
"numeroMedidor" : "132423424235425",
"codigoActividad" : 125,
"codigoCategoria" : "001",
"lecturaAnterior" : 4,
"lecturaActual" : 5
},
"sectorSeguros" : {
"codigoAseguradora" : "",
"codigoPoliza" : "AAAA",
"numeroPoliza" : "BBBB",
"vigencia" : 1,
"vigenciaUnidad" : "año",
"inicioVigencia" : "2021-10-01",
"finVigencia" : "2022-10-01",
"codigoInternoItem" : "A-001"
},
"sectorSupermercados" : {
"nombreCajero" : "Juan Antonio Caceres",
"efectivo" : 150000,
"vuelto" : 30000,
"donacion" : 1000,
"donacionDescripcion" : "Donado para la caridad"
},
"sectorAdicional" : {
"ciclo" : "Mensualidad",
"inicioCiclo" : "2021-09-01",
"finCiclo" : "2021-10-01",
"vencimientoPago" : "2021-11-01",
"numeroContrato" : "AF-2541",
"saldoAnterior" : 1550000
},
"detalleTransporte" : {
"tipo" : 1,
"modalidad" : 1,
"tipoResponsable" : 1,
"condicionNegociacion" : "CFR",
"numeroManifiesto" : "AF-2541",
"numeroDespachoImportacion" : "153223232332",
"inicioEstimadoTranslado" : "2021-11-01",
"finEstimadoTranslado" : "2021-11-01",
"paisDestino" : "PRY",
"paisDestinoNombre" : "Paraguay",
"salida" : {
"direccion" : "Paraguay",
"numeroCasa" : "Paraguay",
"complementoDireccion1" : "Entre calle 2",
"complementoDireccion2" : "y Calle 7",
"departamento" : 11,
"departamentoDescripcion" : "ALTO PARANA",
"distrito" : 143,
"distritoDescripcion" : "DOMINGO MARTINEZ DE IRALA",
"ciudad" : 3344,
"ciudadDescripcion" : "PASO ITA (INDIGENA)",
"pais" : "PRY",
"paisDescripcion" : "Paraguay",
"telefonoContacto" : "097x"
},
"entrega" : {
"direccion" : "Paraguay",
"numeroCasa" : "Paraguay",
"complementoDireccion1" : "Entre calle 2",
"complementoDireccion2" : "y Calle 7",
"departamento" : 11,
"departamentoDescripcion" : "ALTO PARANA",
"distrito" : 143,
"distritoDescripcion" : "DOMINGO MARTINEZ DE IRALA",
"ciudad" : 3344,
"ciudadDescripcion" : "PASO ITA (INDIGENA)",
"pais" : "PRY",
"paisDescripcion" : "Paraguay",
"telefonoContacto" : "097x"
},
"vehiculo" : {
"tipo" : 1,
"marca" : "Nissan",
"documentoTipo" : 1,
"documentoNumero" : "232323-1",
"obs" : "",
"numeroMatricula" : "ALTO PARANA",
"numeroVuelo" : 143
},
"transportista" : {
"contribuyente" : true,
"nombre" : "Paraguay",
"ruc" : "80068684-1",
"documentoTipo" : 1,
"documentoNumero" : "99714584",
"direccion" : "y Calle 7",
"obs" : 11,
"pais" : "PRY",
"paisDescripcion" : "Paraguay",
"chofer" : {
"documentoNumero" : "",
"nombre" : "Jose Benitez",
"direccion" : "Jose Benitez"
},
"agente" : {
"nombre" : "Jose Benitez",
"ruc" : "515415-1",
"direccion" : "Jose Benitez"
}
}
},
"complementarios" : {
"ordenCompra" : "",
"ordenVenta" : "",
"numeroAsiento" : "",
"carga" : {
"ordenCompra" : "",
"ordenVenta" : "",
"numeroAsiento" : ""
}
},
"documentoAsociado" : {
"formato" : 1,
"cdc" : "01800695631001001000000612021112917595714694",
"tipo" : 1,
"timbrado" : "32323",
"establecimiento" : "001",
"punto" : "001",
"numero" : "00278211",
"fecha" : "2022-09-14",
"numeroRetencion" : "32323232",
"resolucionCreditoFiscal" : "32323",
"constanciaTipo" : 1,
"constanciaNumero" : 32323,
"constanciaControl" : "33232323"
}
}
El email del Cliente, si bien puede enviarse mas de 1 (uno), en SIFEN solamente será enviado el primero.
Eventos
Para la invocación de Eventos de la SET se debe utilizar como primer parámetro, el mismo params
utilizado en la Generación de XML.
El segundo parámetro data
debe ser pasado en el siguiente formato, dependiendo del evento a ser invocado. A continuación los ejemplos para cada evento.
Evento de Cancelación
{
"cdc": "01800695631001001000000612021112917595714694",
"motivo": "Se cancela este CDC"
}
Evento de Inutilización
{
"tipoDocumento": 1,
"establecimiento": "001",
"punto": "001",
"desde": 10,
"hasta": 12,
"motivo": "Se inutiliza la numeración"
}
Evento de Conformidad
{
"cdc": "01800695631001001000000812021112910953738413",
"tipoConformidad": 1,
"fechaRecepcion": "2022-01-31T00:01:01"
}
Evento de Disconformidad
{
"cdc": "01800695631001001000000812021112910953738413",
"motivo": "Se informa de una disconformidad"
}
Evento de Desconocimiento
{
"cdc": "01800695631001003000013712022010619364760029",
"fechaEmision" : "2022-01-31T00:01:01",
"fechaRecepcion" : "2022-01-31T00:01:01",
"tipoReceptor" : 1,
"nombre": "BRASIL CRESCENCIO",
"ruc": "50062360-0",
"documentoTipo": 1,
"documentoNumero" : "",
"motivo": "teste"
}
Evento de Notificación
{
"cdc": "01800695631001003000013712022010619364760029",
"fechaEmision" : "2022-01-31T00:01:01",
"fechaRecepcion" : "2022-01-31T00:01:01",
"tipoReceptor" : 1,
"nombre": "BRASIL CRESCENCIO",
"ruc": "50062360-0",
"documentoTipo": 1,
"documentoNumero" : "",
"totalPYG": 1550000
}
Ejemplos de Uso de invocación de evento de Cancelación:
Javascript:
const xmlgen = require('facturacionelectronicapy-xmlgen');
// O const xmlgen = require('facturacionelectronicapy-xmlgen').default;
xmlgen.generateXMLEventoCancelacion(id, params, data).then(xml => {
console.log(xml);
}).catch(error => {
console.log(error);
});
TypeScript:
import xmlgen from 'facturacionelectronicapy-xmlgen';
xmlgen.generateXMLEventoCancelacion(id, params, data).then(xml => {
console.log(xml);
}).catch(error => {
console.log(error);
});
Siendo, los demás eventos disponibles:
generateXMLEventoInutilizacion(id, params, data);
generateXMLEventoConformidad(id, params, data);
generateXMLEventoDisconformidad(id, params, data);
generateXMLEventoDesconocimiento(id, params, data);
generateXMLEventoNotificacion(id, params, data);
Serie Técnica sobre Facturación Electrónica - YouTube
Para más información sobre el proceso que llevó a la generación de éste módulo visite la lista de reproducción "Serie técnica sobre Facturación Electrónica" en el canal de youtube del autor https://www.youtube.com/channel/UC05xmdC5i3Ob7XnYbQDiBTQ
Todos los proyectos
Generación de XML Firma de XML Generación de QR API de la SET Generación KUDE
Empresas que utilizan éstos proyectos
FacturaSend JHF Ingeniería Informática JR Ingeniería y Servicios Datamex Factupar Globe Informatica FZ Sistemas de Gestion
Todos los derechos reservados - 2021