Ejemplos de Código
Ejemplos completos de uso
Casos de uso reales con código completo para integrar Atto en tu aplicación. Copia y adapta estos ejemplos a tus necesidades.
Factura Electrónica Completa
Ejemplo completo de una factura electrónica con múltiples items, formas de pago y toda la información del receptor.
POST
/factura/emitir
Emite una factura electrónica para consumidor final con IVA incluido
https://api.atto.sv/factura/emitir
factura-completa.js
1const axios = require('axios');
2
3class DTEClient {
4 constructor(apiKey, baseURL = 'https://api.atto.sv') {
5 this.api = axios.create({
6 baseURL,
7 headers: {
8 'Content-Type': 'application/json',
9 'X-API-Key': apiKey
10 }
11 });
12 }
13
14 async emitirFactura(datos) {
15 try {
16 const response = await this.api.post('/factura/emitir', datos);
17 return {
18 success: true,
19 data: response.data
20 };
21 } catch (error) {
22 return {
23 success: false,
24 error: error.response?.data || error.message
25 };
26 }
27 }
28
29 async consultarEstado(codigoGeneracion) {
30 try {
31 const response = await this.api.get(`/factura/estado/${codigoGeneracion}`);
32 return response.data;
33 } catch (error) {
34 throw new Error(error.response?.data?.message || 'Error al consultar estado');
35 }
36 }
37}
38
39// Uso del cliente
40const dte = new DTEClient('sk_live_tu_api_key');
41
42const facturaCompleta = {
43 folio: 12345,
44 tipoMoneda: "USD",
45
46 // Items de la factura
47 items: [
48 {
49 numItem: 1,
50 tipoItem: 1, // 1 = Bien, 2 = Servicio
51 codigo: "PROD001",
52 descripcion: "Laptop Dell Inspiron 15",
53 cantidad: 2,
54 uniMedida: 99, // 99 = Otros
55 precioUnitario: 800.00,
56 montoDescu: 50.00 // Descuento
57 },
58 {
59 numItem: 2,
60 tipoItem: 2,
61 codigo: "SERV001",
62 descripcion: "Soporte técnico anual",
63 cantidad: 1,
64 uniMedida: 99,
65 precioUnitario: 200.00,
66 montoDescu: 0
67 }
68 ],
69
70 // Formas de pago
71 pagos: [
72 {
73 codigo: "02", // 02 = Cheque
74 montoPago: 900.00,
75 referencia: "Cheque #12345",
76 plazo: "01" // 01 = Al contado
77 },
78 {
79 codigo: "01", // 01 = Efectivo
80 montoPago: 850.00,
81 referencia: "Pago en efectivo"
82 }
83 ],
84
85 // Información del receptor
86 receptor: {
87 tipoDocumento: "36", // 36 = NIT
88 numDocumento: "0614-010190-103-1",
89 nrc: "123456-7",
90 nombre: "Empresa Receptora S.A. de C.V.",
91 codActividad: "10001",
92 descActividad: "Venta de productos tecnológicos",
93 direccion: {
94 departamento: "06", // San Salvador
95 municipio: "14", // San Salvador
96 complemento: "Col. Escalón, Av. Norte #123"
97 },
98 telefono: "2234-5678",
99 correo: "[email protected]"
100 }
101};
102
103// Emitir la factura
104async function ejemplo() {
105 const resultado = await dte.emitirFactura(facturaCompleta);
106
107 if (resultado.success) {
108 console.log('✅ Factura emitida exitosamente');
109 console.log('Código:', resultado.data.codigoGeneracion);
110
111 // Consultar estado después de 5 segundos
112 setTimeout(async () => {
113 const estado = await dte.consultarEstado(resultado.data.codigoGeneracion);
114 console.log('Estado actual:', estado);
115 }, 5000);
116 } else {
117 console.error('❌ Error:', resultado.error);
118 }
119}
120
121ejemplo();Campos importantes
tipoItem
- •
1= Bien (productos físicos) - •
2= Servicio (servicios prestados)
Códigos de pago
- •
01= Efectivo - •
02= Cheque - •
03= Tarjeta de crédito - •
04= Tarjeta de débito - •
05= Transferencia bancaria
Mejores Prácticas
Manejo de Errores
Siempre valida las respuestas y maneja los errores apropiadamente.
- • Verifica el status HTTP
- • Lee los mensajes de error
- • Implementa reintentos para errores temporales
- • Registra los errores para debugging
Seguridad
Protege tu API key y datos sensibles.
- • Nunca hardcodees tu API key
- • Usa variables de entorno
- • Implementa HTTPS siempre
- • Rota las API keys periódicamente