Skip to content

CT e Detalhe e PDF

technical-documenter edited this page Sep 1, 2026 · 1 revision

CT-e — Detalhe (read-only) e visualização de DACTE (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).

Objetivo

Na aba CTE de /cte (listagem de invoice_tax modelo 57 / tarefas de processamento), permitir:

  1. Abrir o DACTE em PDF (mesmo espírito do download de NF-e).
  2. 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.

Escopo e fora de escopo

Dentro do escopo:

  • Ações de linha na aba CTE: PDF + Detalhe (CteCteActions).
  • Rota cte/detail → CteDetailPage (params id do 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ões de produto (APP_TYPE)

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.

Rotas e componentes

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).

Ações na aba CTE

  • Store/filtro da aba: invoice_tasks_processing com invoiceModel: 57.
  • rowActionsComponent = CteCteActions.
  • PDF: api.fetch('invoice_taxes/{id}/download-nf', { params: { format: 'base64' } }) → modal com iframe data:application/pdf;base64,... + link Baixar.
  • Detalhe: navigation.navigate('CteDetailPage', { id }).

Página de detalhe (CteDetailPage)

  • Resolve id de route.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).

Contrato de API utilizado pela UI

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.

Fluxo resumido (consulta)

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)
Loading

Relação com emissão

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).

Arquivos principais (ui-logistic)

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.

Links cruzados

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