No confundir con
/invoices/batch. Ese endpoint manda hasta 20 facturas en un request, pero cada una se envia al SIAT por separado y en linea. La emision masiva es otra modalidad ante el SIAT, con su propio codigo de emision y su propio ciclo.Las tres modalidades
La masiva se emite en linea: necesita el SIAT operativo. Si el punto de venta entra en contingencia, las facturas nuevas salen como contingencia aunque haya un lote abierto; las que ya entraron al lote quedan intactas y se envian cuando lo cierres. Para contingencia, ver Contingencia.
Ciclo de un lote
1
Abrir el lote
POST /api/v1/massive sobre el punto de venta.2
Emitir normalmente
Las facturas se crean con
POST /api/v1/invoices como siempre. Mientras el lote este abierto quedan en estado MASSIVE_PENDING — con su CUF definitivo, listas para imprimir y entregar — pero todavia no viajaron al SIAT.3
Cerrar el lote
POST /api/v1/massive/end. Se arman los paquetes, se envian y se validan. Cada factura queda ACCEPTED o REJECTED con su motivo.4
Rectificar, si hubo rechazos
POST /api/v1/massive/rectify regenera las rechazadas y las devuelve a la cola. Despues volves a cerrar.Abrir un lote
POST /api/v1/massive
Es idempotente: si el punto de venta ya tiene un lote abierto, la llamada devuelve ese lote en vez de crear otro. Un punto de venta no puede tener dos lotes abiertos a la vez.
Respuesta 201
422 (SECTOR_NOT_SUPPORTED / SECTOR_NOT_AUTHORIZED) lo devuelve POST /api/v1/invoices, no la apertura del lote.
Hasta la version anterior el lote fijaba
sector e invoiceType al abrirse y todo el lote viajaba a ese sector. Si los seguis mandando en el body, se ignoran.Cerrar el lote
POST /api/v1/massive/end
Es reentrante. Si un cierre se corta a mitad, volver a llamarlo retoma donde quedo: los paquetes ya validados no se reenvian.
Repeticiones (certificacion)
repeticiones manda el mismo paquete N veces al SIAT: el archivo se arma una sola vez y se reenvia tal cual. Es lo que pide Impuestos para certificar la modalidad masiva, igual que en el reenvio del paquete de contingencia.
No cambia el resultado fiscal: cada repeticion recibe su propio codigoRecepcion y las facturas se marcan una sola vez. Decide la primera repeticion que valida, y el paquete se queda con su codigoRecepcion: las siguientes rebotan con [1000] EL CUF ENVIADO YA EXISTE EN LA BASE DE DATOS DEL SIN, que es lo esperado (el SIAT ya ingesto el paquete) y no un rechazo. En operacion normal se omite.
Respuesta 200
message distingue cuatro desenlaces que no hay que confundir:
- Sin facturas — el lote se cerro vacio, no habia nada que enviar.
- Todo aceptado —
facturasRechazadas,packsRechazadosypacksPendientesen0. - Pendiente de validacion —
packsPendientesmayor a0y sin rechazos: el SIAT recibio los paquetes pero todavia los esta procesando (codigo901). - Con rechazos — parte del lote quedo
REJECTED; hay que rectificar.
paquetes[]: con un lote multi-sector, “2 de 13 paquetes rechazados” no te dice que sectores no entraron. Cada entrada trae su sector, su estado y el motivo del SIAT si lo hubo.
Ver el lote
GET /api/v1/massive/{posId}
Devuelve el lote abierto del punto de venta con el detalle de cada paquete: cuantas facturas lleva, el receptionCode que devolvio el SIAT y su estado.
Respuesta 200
Rectificar rechazos
POST /api/v1/massive/rectify
A las facturas que el SIAT rechazo se les regenera el CUF, el XML, la firma y el QR contra el CUFD vigente, y vuelven a la cola del lote. Despues hay que cerrar de nuevo con
/massive/end para reenviarlas.
Las facturas ya aceptadas no se tocan: su CUF esta validado por el SIAT y regenerarlo cambiaria un documento fiscal firme.
Respuesta 200
Estados de la factura en masiva
Una factura en
MASSIVE_PENDING ya tiene su CUF definitivo y su QR: podes entregarla e imprimirla. El SIAT validara ese mismo documento cuando cierres el lote.
Limites
Al cerrar, las facturas se agrupan primero por sector y tipo de documento — un paquete SIAT tiene que ser homogeneo en esa combinacion — y cada grupo se parte despues en tantos paquetes de 500 como haga falta.