Result, que distingue com clareza autorizações, rejeições e falhas técnicas. Da ordem ao resultado.
Fluxo de emissão
Todo CT-e segue exatamente quatro etapas dentro do SDK:Montar os dados
Reúna as informações do transporte — emitente, tomador, remetente, destinatário, carga e valores — usando Value Objects tipados (
Cnpj, ChaveCTe, Municipio, Peso, etc.).Construir o Command
Use
CTeBuilder com a interface fluente Step Builder para compor o EmitirCTeCommand. O objeto resultante é imutável e validado em tempo de construção.Handler autoriza junto à SEFAZ
Passe o Command para
EmitirCTeHandler::handle(). O Handler assina o XML, conecta ao webservice da SEFAZ e aguarda o retorno de forma síncrona.Construindo o Command
OCTeBuilder segue o padrão Step Builder — cada método retorna a próxima etapa obrigatória da construção, eliminando estados inválidos em tempo de compilação. Named arguments tornam o código autodocumentado.
O
CTeBuilder valida cada etapa ao avançar. Se um campo obrigatório estiver ausente ou um Value Object receber um dado inválido — como um CNPJ com dígito verificador errado — uma \Suot\Fiscal\Exception\InvalidValueObjectException é lançada antes que o Command seja criado.Executando com o Handler
InstancieEmitirCTeHandler com a configuração do ambiente (obtida via injeção de dependência ou manualmente) e passe o Command para handle().
Inspecionando o Result
UmEmitirCTeResult com isSuccess() === true expõe:
| Método | Tipo de retorno | Descrição |
|---|---|---|
getChave() | ChaveCTe | Chave de acesso de 44 dígitos |
getProtocolo() | Protocolo | Número do protocolo de autorização da SEFAZ |
getXmlAutorizado() | string | XML do CT-e com o nProt inserido pelo fisco |
getXmlEnvio() | string | XML enviado (útil para auditoria) |
getDataAutorizacao() | DateTimeImmutable | Data e hora do processamento na SEFAZ |
getMetadata() | ResultMetadata | Ambiente, autorizador, tempo de resposta |
Rejeições vs. falhas técnicas
Rejeição (Result)
A SEFAZ processou a requisição e recusou o documento. O
Result é retornado normalmente com isSuccess() === false. Consulte getRejeicao() para obter código, descrição e se é corrigível.Falha técnica (InfrastructureException)
Timeout de conexão, certificado expirado, resposta malformada ou webservice fora do ar. Uma exceção é lançada — não há
Result. Trate no bloco catch.Cancelamento e inutilização Em desenvolvimento
O cancelamento e a inutilização de faixas de numeração são operações separadas do fluxo de emissão, com seus próprios Commands e Handlers.CancelarCTeCommand e InutilizarCTeCommand estarão disponíveis em versão próxima. Acompanhe as notas de atualização.
Consulta de CT-e Em desenvolvimento
Para consultar a situação de um CT-e já emitido junto à SEFAZ, utilizeConsultarCTeCommand com a ChaveCTe do documento. ConsultarCTeHandler estará disponível em breve e retornará um ConsultarCTeResult com situação, protocolo e XML mais recente.
Próximos passos
Resultados
Anatomia completa do padrão Result: campos, status e metadados de cada operação.
Rejeições
Lista de códigos de rejeição da SEFAZ, classificação e estratégias de tratamento.