Caso · producto de Kip-Up
La boleta sale del sistema y SUNAT la acepta
En Perú una venta no termina cuando el cliente paga: termina cuando SUNAT acepta el comprobante, y cada uno tiene tres días calendario para llegar. Kuantera es la pieza que hace ese viaje —armar el documento, firmarlo y enviarlo— y está escrita desde cero, sin pasar por ningún intermediario.
Cómo se ve
Quince segundos, de la pantalla en blanco a la constancia guardada: se elige el cliente, se añade una línea, y al emitir el servidor firma y envía. El estado se actualiza solo.
Cómo funciona por dentro
Un comprobante electrónico peruano es un XML en formato UBL 2.1 con una firma digital
dentro, envuelto en un ZIP y entregado por SOAP. Aquí no hay una librería que haga eso: está
escrito en el proyecto, en packages/sunat, porque es justo la parte donde se
decide si el comprobante vale o lo rechazan por una cifra mal puesta.
La firma es lo que no se negocia. Cada comprobante se firma con el certificado digital y la clave SOL del negocio que emite, nunca con los míos ni con los de la agencia: el emisor ante SUNAT es él. Usar credenciales propias para emitir por otros obligaría a inscribirse como proveedor de servicios electrónicos, que es otro negocio y otra responsabilidad.
El envío no bloquea la venta. La API acepta el comprobante, lo numera y lo devuelve al momento; un proceso aparte lo manda a SUNAT y reintenta si el servicio está caído, que pasa más de lo que uno esperaría. Por eso el panel enseña estados de verdad —en cola, enviado, aceptado, observado, rechazado— y no un «listo» que no significa nada.
Cada empresa ve solo lo suyo, y eso se sostiene en la base de datos, no en el código: las tablas van con seguridad a nivel de fila y el rol con el que se conecta la API no puede saltársela. Si mañana una consulta olvida filtrar por empresa, no devuelve datos ajenos: devuelve vacío.
- TypeScript
- NestJS
- Prisma · PostgreSQL
- RLS
- pg-boss
- UBL 2.1
- XML-DSig
- SOAP
- React
Qué es y qué no es
Está probada contra el entorno de pruebas de SUNAT: factura, boleta, notas de crédito y débito, detracción y recargo al consumo. Lo que todavía no ha pasado es emitir con un RUC real en producción, y hasta que eso ocurra no diré que está terminada.
Y una cosa que aprendí preparando este caso: al emitir con bolsas plásticas, SUNAT rechaza el comprobante si el número de bolsas no coincide con la cantidad de la línea. Lo encontré emitiendo, no leyendo la norma, y está anotado como error con su XML para corregirlo. Esa es la diferencia entre decir que algo funciona y haberlo visto funcionar.
¿Emites comprobantes y te pelas con el facturador?
Sistemas que emiten ante SUNAT desde dentro, sin copiar datos a otra pantalla y sin depender de un tercero para la parte que decide si la venta existe.
Hablemos →