use Suot\Fiscal\Core\Exception\InfrastructureException;
use Suot\Fiscal\Core\Result\RetryMode;
try {
$result = $bpe->cancel()
->forOperation('ticket-456-cancel')
->inHomologation()
->accessKey($chave44)
->emitterCnpj($cnpj)
->protocol($nProt)
->justification('Cancelamento solicitado pelo passageiro antes do embarque conforme política comercial.')
->handle();
} catch (InfrastructureException $e) {
$failure = $e->toFailure('cancel');
// Host: alertar; QueryBeforeRetry se timeout após envio — consultar antes de reenviar evento
throw $e;
}
if ($result->isCancelled()) {
// Host: persistir protocolNumber do evento, responseXml, accessKey, operationId; marcar bilhete cancelado
}
if ($result->isRejected()) {
$failure = $result->failure();
$policy = $result->retryPolicy();
match ($policy?->mode) {
RetryMode::AfterCorrection => /* corrigir justificativa/protocolo e tentar de novo */,
RetryMode::QueryBeforeRetry => /* byAccessKey() antes de reenviar */,
RetryMode::AfterDelay, RetryMode::Immediate => /* filar conforme política */,
RetryMode::Never, null => /* definitivo; não reenviar */,
};
}