use Suot\Fiscal\Core\Exception\InfrastructureException;
use Suot\Fiscal\Core\Result\RetryMode;
try {
$result = $cte->issue()
->forOperation('ot-123')
->inHomologation()
// … cadeia …
->handle();
} catch (InfrastructureException $e) {
$failure = $e->toFailure('issue');
// Host: alertar; filar retry conforme $failure->retryPolicy (timeout ambíguo → QueryBeforeRetry)
throw $e;
}
if ($result->isAuthorized()) {
// Host: persistir accessKey, protocolNumber, submittedDocumentXml, responseXml, receivedAt, operationId
}
if ($result->isRejected()) {
$failure = $result->failure();
$policy = $result->retryPolicy();
match ($policy?->mode) {
RetryMode::AfterCorrection => /* remontar issue() com dados corrigidos + novo forOperation */,
RetryMode::QueryBeforeRetry => /* byAccessKey() antes de reemitir */,
RetryMode::AfterDelay, RetryMode::Immediate => /* filar conforme política */,
RetryMode::Never, null => /* definitivo; não reenviar */,
};
}
if ($result->isProcessing()) {
// Host: consultar por chave/protocolo; não emitir de novo às cegas
}