# Robustez de banco e fallbacks transacionais ## Objetivo Evitar que falhas de persistência/cache/idempotência derrubem o atendimento com HTTP 500 e contaminem a continuidade transacional. ## Alterações 1. `OracleStore.cache_get` - normaliza `datetime` naive/aware para UTC antes de comparar TTL; - elimina o `TypeError: can't compare offset-naive and offset-aware datetimes`. 2. `IdempotencyStore` - suporta backend de fallback; - quando `require_durable=False`, falhas do backend primário degradam para `InMemoryCache` por padrão; - `get`, `set` e `delete` não propagam indisponibilidade do backend primário em modo fail-open; - quando durabilidade é exigida, a semântica fail-closed continua disponível. 3. `cancelamento_vas_avulso_batch` - boundary por item converte exceções técnicas inesperadas em resultado recuperável; - um item com erro não derruba o batch nem o request HTTP inteiro; - erros são devolvidos com `reason=internal_processing_failed`/`recoverable=true` para composição controlada da resposta. ## Configuração opcional `IDEMPOTENCY_FAIL_OPEN=true|false` pode sobrescrever o comportamento. Sem configuração explícita, `require_durable=False` usa fail-open e `require_durable=True` mantém fail-closed.