0032 — Envio em lote por .zip¶
Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-09-10 · Decidido em: 2026-07-06
Contexto¶
Até a v2.0.x, o envio era POST /api/transporte/processar com um .xlsx por chamada. O ciclo
da Vantroba gera várias planilhas de uma vez: eram N chamadas, cada arquivo com a sua notificação,
sem noção de "este ciclo terminou". O bi-comercial-xls já recebia em lote por zip, e os
processadores XLS da frota deviam falar o mesmo contrato.
Decisão¶
POST /api/xls/processar,multipart/form-data, campo únicoarquivo: um.zipcom 1..N.xlsx. O zip é o lote. O cliente não manda período — ele vem da aba 10 de cada planilha (0016).- O servidor gera o id do lote:
conjuntoId = "zip-"+ os 60 primeiros hex do SHA-256 do zip (cabe noVARCHAR(64); o mesmo zip gera o mesmo id). Cada.xlsxválido vira umxls_processamentopróprio, com checksum próprio, carimbado com oconjunto_id. - Migration V16 (
conjunto_lote_e_zip): tabelaxls_conjunto_lote(conjunto_idPK,total,duplicados,nao_processados,criado_em,notificado_em) e colunaconjunto_id, com índice, emxls_processamento. - Resposta
202= recibo do lote:conjuntoId,totaleitens[]com ohttpStatuspor arquivo (202enfileirado,200já processado,409em andamento,400não aceito) — a idempotência por checksum continua valendo por arquivo.400no nível do lote: zip inválido, vazio ou sem.xlsx. - O lote fecha quando todas as entradas terminam — contando as duplicatas já processadas e as
entradas não processadas (tipo/magic inválido ou já em andamento) — e então sai um resumo
único no Telegram (
notificado_em).
Consequências¶
- Quebra de contrato (v2.1.0): endpoint e payload mudaram, e as integrações com o endpoint
antigo tiveram de migrar (o
@OpenAPIDefinitionfoi a2.0.0na v2.1.1). Contrato narrado emdev/api-rest. data_referencia/hora_referenciaemxls_processamentoviraram legado (não populadas).- Arquivos do mesmo lote processam em paralelo — concorrência na mescla, que expôs o deadlock 40P01 resolvido em 0031.
- Continua sem tela de upload: o envio é só por API.
Alternativas consideradas¶
- Manter o
.xlsxavulso (status quo): N chamadas e N notificações por ciclo, sem fechamento de lote, e contrato divergente do bi-comercial-xls. Descartado.