A superfície pública do CT-e é o client Suot\Fiscal\Cte\Application\Cte: monte a intenção e encerre em handle().
Client $cte
Portas no mesmo client: issue(), validate(), cancel(), correct(), serviceStatus(), byAccessKey(), authorizationProtocol(), downloadProc(), distributeDfe(), registerEpec(), issueInContingency(), eventos de entrega, etc.
Namespace: Suot\Fiscal\Cte\Application\Cte.
Client $cteOs (modelo 67)
CT-e OS usa o mesmo padrão com Suot\Fiscal\CteOs\Application\CteOs:
Portas: serviceStatus(), issue(), byAccessKey(), cancel(). Jornada completa: CT-e OS.
Client $bpe (modelo 63)
BP-e usa o mesmo padrão com Suot\Fiscal\Bpe\Application\Bpe:
Portas: serviceStatus(), issue(), byAccessKey(), cancel(). Jornada completa: BP-e. BP-e TM e TA não estão disponíveis nesta onda.
Client $mdfe (modelo 58)
MDF-e usa o mesmo padrão com Suot\Fiscal\Mdfe\Application\Mdfe:
Portas: serviceStatus(), issue(), byAccessKey(), nonClosed(), cancel(), close(), includeDriver(), includeDfe(), issueInContingency(), downloadProc(), distributeDfe(). Jornada completa: MDF-e.
No Laravel, Handlers explícitos são opcionais — ver Laravel Bridge.
O que é @internal
Não use na aplicação hospedeira:
Rejeição fiscal válida volta como Result (isRejected(), failure()), não como exception. Exceptions são para infraestrutura, argumentos inválidos e estados impossíveis.
Próximos passos