Repository navigation
CT e Detalhe e PDF
Documentação técnica da UI de consulta de CT-e (modelo 57) no módulo ui-logistic: ações na lista e página de detalhe somente leitura.
Implementação: ui-logistic#34 (feature publicada em master).
Backend de emissão, SEFAZ e geração de DACTE a partir do XML: CT-e — Emissão NFePHP (api-platform-accounting).
Na aba CTE de /cte (listagem de invoice_tax modelo 57 / tarefas de processamento), permitir:
- Abrir o DACTE em PDF (mesmo espírito do download de NF-e).
- Abrir a página de detalhe do CT-e com o mesmo layout visual da emissão (
CteEmitPage), porém somente leitura — sem envio para fila e sem reorganização/remoção de NFs.
Dentro do escopo:
- Ações de linha na aba CTE: PDF + Detalhe (
CteCteActions). - Rota
cte/detail→CteDetailPage(paramsiddo CT-e). - Carga do CT-e (
GET invoice_taxes/{id}) e das NFs vinculadas (cte= id do CT-e). - Preview PDF do CT-e e das NFs via
invoice_taxes/{id}/download-nf?format=base64. - Manutenção das abas existentes: CTEs à emitir / CTE / Integrações.
Fora de escopo:
- Cancelamento ou anulação de CT-e.
- Edição de dados fiscais após emissão.
- Qualquer alteração no worker de emissão ou na montagem do XML (permanece no accounting).
| Visão | Papel neste fluxo |
|---|---|
| MANAGER / operação fiscal-logística | Operador consulta CT-e já emitidos na lista /cte (aba CTE), abre DACTE e visualiza detalhe (parties, número/série/chave, NFs vinculadas). |
| DELIVERY | Não é o ponto de entrada típico desta tela; a home de DELIVERY é operacional de motoboy/pedidos. A rota pode existir se o menu/configuração expuser /cte. |
| API (accounting) | Única fonte de verdade para XML autorizado e geração de DACTE no download. |
| Outras (CRM, POS, SHOP, PPC, …) | Não emitem nem listam CT-e neste fluxo. |
O módulo ui-logistic expõe a UI de listagem/emissão/consulta. A API não deve assumir layout de tela; a UI não deve reemitir nem alterar status fiscal após autorização SEFAZ.
| Rota (path) | Componente | Papel |
|---|---|---|
cte |
CtePendingInvoicesPage |
Lista com abas: pendentes (NFs sem CT-e), CTE (modelo 57), Integrações (CteEmission). |
cte/emit |
CteEmitPage |
Emissão (seleção de NFs, CFOP, envio à fila). |
cte/detail |
CteDetailPage |
Detalhe read-only do CT-e já emitido. |
Registro em src/react/router/routes.js (export logisticRoutes).
- Store/filtro da aba:
invoice_tasks_processingcominvoiceModel: 57. -
rowActionsComponent=CteCteActions. -
PDF:
api.fetch('invoice_taxes/{id}/download-nf', { params: { format: 'base64' } })→ modal com iframedata:application/pdf;base64,...+ link Baixar. -
Detalhe:
navigation.navigate('CteDetailPage', { id }).
- Resolve
idderoute.params(ou query, se presente). - Carrega CT-e e lista de NFs vinculadas (filtra modelo ≠ 57 quando necessário).
- Layout alinhado à emissão: cards de parties (emitente, remetente, destinatário, transportadora), campos fiscais do CT-e (número, série, chave, protocolo, status SEFAZ, CFOP, datas), resumo de totais/peso, lista de NFs.
- Todos os campos em modo somente leitura (
editable={false}). - Não renderiza botão “Enviar para fila de integração”.
- Não oferece remover/devolver NFs nem reorganizar rota.
- Cada NF no detalhe permite apenas preview PDF (mesmo endpoint
download-nf?format=base64).
Componentes auxiliares reutilizados: CteEmitNfCard (com flag/condição para ocultar remoção no modo detalhe).
| Operação | Endpoint | Uso |
|---|---|---|
| Carregar CT-e | GET invoice_taxes/{id} |
Dados do documento modelo 57 e parties. |
| NFs vinculadas | Listagem filtrada por cte = id do CT-e (ou equivalente no store) |
Cards de NF no detalhe. |
| PDF / DACTE | GET invoice_taxes/{id}/download-nf?format=base64 |
Resposta com pdf (base64) e filename. Backend usa NFePHP Dacte a partir do XML persistido (modelo 57). |
Sem reconsulta SEFAZ só para visualização: o PDF é montado do XML já autorizado.
sequenceDiagram
participant User as Operador
participant List as CtePendingInvoicesPage (aba CTE)
participant Act as CteCteActions
participant Detail as CteDetailPage
participant API as api (invoice_taxes)
User->>List: Abre /cte → aba CTE
List->>API: Lista modelo 57
User->>Act: Clica PDF
Act->>API: download-nf?format=base64
API-->>Act: pdf base64 (DACTE)
Act-->>User: Modal iframe + Baixar
User->>Act: Clica Detalhe
Act->>Detail: navigate({ id })
Detail->>API: GET invoice_taxes/{id} + NFs cte=id
API-->>Detail: CT-e + NFs
Detail-->>User: Parties, dados fiscais, NFs (só PDF)
A emissão continua em /cte/emit e no worker app:cte:emit / fila CteEmission documentados na wiki do accounting. Esta feature não altera o caminho de autorização; apenas consome documentos já persistidos como modelo 57.
Ajuda pública (cliente final): páginas na Central de Ajuda sob Project/Delivery (CT-e), mantidas pelo tutorial-assistant (ex.: emissão e visualização de PDF).
| Arquivo | Responsabilidade |
|---|---|
src/react/pages/cte/CteCteActions.js |
Botões PDF + Detalhe na aba CTE; modal base64. |
src/react/pages/cte/CteDetailPage.js |
Página read-only; carga CT-e/NFs; preview PDF. |
src/react/pages/cte/CtePendingInvoicesPage.js |
Abas e rowActionsComponent por store. |
src/react/pages/cte/CteEmitNfCard.js |
Card de NF (remoção só no fluxo de emissão). |
src/react/router/routes.js |
path: 'cte/detail' → CteDetailPage. |
Smoke de referência (quando publicado no índice canônico): cte-detail / fluxo delivery com flowchartIds pertinentes — evidência visual fica sob responsabilidade de QA/UX; esta página descreve o contrato técnico, não o gate de aceite visual.
| Destino | URL |
|---|---|
| Emissão backend (NFePHP / DACTE) | https://github.com/ControleOnline/api-platform-accounting/wiki/CT-e-Emissao-NFePHP |
| Home wiki ui-logistic | https://github.com/ControleOnline/ui-logistic/wiki |
| Índice módulo no app | https://github.com/ControleOnline/app-community/wiki/ui-logistic |
| Issue de origem | https://github.com/ControleOnline/ui-logistic/issues/34 |