Skip to main content

O quê / quando

Corrija campos permitidos de um CT-e autorizado sem cancelar. Cada item é um CteEventCorrection (grupoAlterado, campoAlterado, valorAlterado).

Exemplo

use Suot\Fiscal\Core\Exception\InfrastructureException;
use Suot\Fiscal\Core\Result\RetryMode;
use Suot\Fiscal\Cte\ValueObject\CteEventCorrection;

try {
    $result = $cte->correct()
        ->forOperation('cce-1')
        ->inHomologation()
        ->accessKey($chave44)
        ->emitterCnpj($cnpj)
        ->corrections([
            new CteEventCorrection(
                changedGroup: 'ide',
                changedField: 'xObs',
                changedValue: 'Observacao corrigida em homologacao',
            ),
        ])
        ->handle();
} catch (InfrastructureException $e) {
    $failure = $e->toFailure('correct');
    // Host: alertar; QueryBeforeRetry se timeout após envio
    throw $e;
}

if (! $result->isRejected()) {
    // Host: persistir protocolNumber do evento, responseXml, accessKey, operationId
}

if ($result->isRejected()) {
    $failure = $result->failure();
    $policy = $result->retryPolicy();
    match ($policy?->mode) {
        RetryMode::AfterCorrection => /* ajustar corrections[] e tentar de novo */,
        RetryMode::QueryBeforeRetry => /* reconciliar eventos antes de reenviar */,
        RetryMode::AfterDelay, RetryMode::Immediate => /* filar conforme política */,
        RetryMode::Never, null => /* definitivo; não reenviar */,
    };
}
Construtor: changedGroup, changedField, changedValue, e opcionalmente changedItemNumber (coleções).
Só corrija grupos/campos permitidos pelo MOC/schema. Valores fiscais críticos (valores, chave vinculada, etc.) em geral exigem cancelamento e nova emissão — valide na especificação oficial.
Resultado: CorrectCteResultisRejected(), failure(), protocolo do evento quando OK.