tmn-afip
v0.8.0
Published
Libreria para usar los Web Services de AFIP con JavaScript - Actualizada para RG 5616/2024
Maintainers
Readme
tmn-afip
Librería para usar los Web Services de AFIP con JavaScript
Descripción
Esta librería facilita la comunicación con los Web Services de AFIP, permitiendo realizar operaciones como facturación electrónica y consultas al padrón de contribuyentes desde aplicaciones JavaScript.
⚠️ Actualización importante - RG 5616/2024: A partir de esta versión, se incluye soporte completo para el campo obligatorio CondicionIVAReceptorId requerido por la Resolución General 5616/2024 de AFIP.
Instalación
npm install tmn-afipConfiguración
Para utilizar la librería, necesitarás:
- Un CUIT válido
- Certificado y clave privada emitidos por AFIP
- Tener habilitado el servicio al que deseas conectarte en la página de AFIP
Obtener certificado y clave
Para obtener un certificado y clave:
- Ingrese a la página de AFIP
- Vaya a "Servicios administrativos" → "Gestión de Certificados Digitales"
- Siga las instrucciones para generar su certificado y clave privada
Uso básico
const Afip = require('tmn-afip');
const afip = new Afip({
CUIT: 20111111112,
production: false,
cert: "cert.pem",
key: "key.pem",
res_folder: "./Afip_res/"
});
// Consultar estado del servidor
async function checkStatus() {
const serverStatus = await afip.ElectronicBilling.getServerStatus();
console.log(serverStatus);
}
// Consultar último comprobante
async function getLastInvoice() {
const lastVoucher = await afip.ElectronicBilling.getLastVoucher({
PtoVta: 1,
CbteTipo: 11
});
console.log(lastVoucher);
}
// Crear factura electrónica (con soporte RG 5616/2024)
async function createInvoice() {
const date = new Date();
const invoice = {
CantReg: 1,
PtoVta: 1,
CbteTipo: 11,
Concepto: 1,
DocTipo: 99,
DocNro: 0,
CbteDesde: 1,
CbteHasta: 1,
CbteFch: parseInt(date.toISOString().slice(0, 10).replace(/-/g, '')),
ImpTotal: 121,
ImpNeto: 100,
ImpIVA: 21,
FchServDesde: parseInt(date.toISOString().slice(0, 10).replace(/-/g, '')),
FchServHasta: parseInt(date.toISOString().slice(0, 10).replace(/-/g, '')),
FchVtoPago: parseInt(date.toISOString().slice(0, 10).replace(/-/g, '')),
MonId: 'PES',
MonCotiz: 1,
CondicionIVAReceptorId: 5, // ⭐ NUEVO CAMPO OBLIGATORIO (RG 5616/2024)
Iva: [
{
Id: 5, // 5 = 21%
BaseImp: 100,
Importe: 21
}
]
};
const result = await afip.ElectronicBilling.createVoucher(invoice);
console.log(result);
}
// Consultar condiciones de IVA disponibles
async function getIVAConditions() {
const conditions = await afip.ElectronicBilling.getIVAConditionTypes();
console.log(conditions);
}Novedades RG 5616/2024
Campo CondicionIVAReceptorId obligatorio
A partir de la Resolución General 5616/2024, es obligatorio incluir la condición de IVA del receptor. Los códigos más comunes son:
1: IVA Responsable Inscripto5: Consumidor Final (valor por defecto)6: Responsable Monotributo
// El SDK automáticamente asigna 5 (Consumidor Final) si no se especifica
const invoice = {
// ... otros campos
CondicionIVAReceptorId: 5 // Especificar según el tipo de receptor
};Compatibilidad con versiones anteriores
Si tienes código existente que no incluye CondicionIVAReceptorId, el SDK automáticamente asignará el valor 5 (Consumidor Final) para mantener la compatibilidad.
Consulta la documentación completa: docs/IVA_CONDITIONS.md
## Web Services disponibles
- Facturación Electrónica (`ElectronicBilling`)
- Padrón A13 (`RegisterScopeThirteen`)
- Padrón A5 (`RegisterScopeFive`)
- Padrón A10 (`RegisterScopeTen`)
- Inscripción y Registro (`RegisterInscriptionProof`)
## Configuración avanzada
```javascript
const afip = new Afip({
CUIT: 20111111112,
production: false,
cert: "cert.pem",
key: "key.pem",
res_folder: "./Afip_res/",
ta_folder: "./Token/",
soap_timeout: 20000
});Contribuir
Las contribuciones son bienvenidas. Por favor, envía tus pull requests a https://github.com/tamnora/afip.js
Publicar en npm
Para publicar este paquete en npm y usarlo en varios proyectos:
Preparación para publicación
Asegúrate de tener una cuenta en npm y estar logueado:
npm loginVerifica el contenido del paquete que será publicado:
npm pack --dry-runActualiza la versión del paquete según corresponda:
npm version patch # Para cambios pequeños npm version minor # Para nuevas características npm version major # Para cambios importantes
Publicar el paquete
npm publish --access publicSi es la primera vez que publicas este paquete, debes usar:
npm publish --access publicUso en otros proyectos
Una vez publicado, puedes usar el paquete en cualquier proyecto:
npm install tmn-afipActualizar el paquete
Después de hacer cambios:
- Actualiza la versión:
npm version patch|minor|major - Publica nuevamente:
npm publish
Licencia
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
