-- 083: RCS — resgate dos lotes travados no status "70 — Limite Empresa"
--
-- 13/08/2026: a MKOM recusou mensagens por teto de volume da conta e devolveu
-- status=70, status_description="Limite Empresa". Nem o código nem a descrição
-- casavam com as regras de normalização, então o status literal "70" foi
-- gravado em rcs_messages — fora de QUALQUER família terminal.
--
-- Consequências (as três observadas em produção):
--   1. os lotes ficaram presos em 'processing' (o socorro de 24h nem os
--      contava, porque "70" não está na lista de não-terminais);
--   2. os contatos ficaram congelados em "RCS: aguardando confirmação" —
--      o relatório do cliente não diria nunca que a operadora recusou;
--   3. o crédito seguiu debitado por mensagem que não saiu.
--
-- Mesma classe do "73 — Enviado - Restrição Operadora" (06/08). A correção de
-- código (mapa + rede de segurança UNKNOWN_*) vai junto neste deploy; aqui
-- resgatamos o que já estava gravado.
--
-- Lotes afetados em produção: OPM317, OPM318, OPM319 (4 mensagens no total).
-- Idempotente: reexecutar não muda nada (os WHERE deixam de casar).
--
-- ⚠ NÃO finaliza as campanhas nem estorna aqui de propósito: com as mensagens
-- reclassificadas para FAILED, o socorro de 24h que já roda de hora em hora
-- fecha cada lote pelo caminho normal — contadores recomputados, contatos com
-- desfecho e ESTORNO pela regra de sempre. Mexer no crédito por SQL seria
-- pular o caminho auditado.

BEGIN;

UPDATE rcs_messages
SET status = 'FAILED',
    error_message = COALESCE(NULLIF(error_message, ''), 'Limite Empresa (recusado pela operadora)'),
    updated_at = NOW()
WHERE status = '70';

UPDATE sms_messages
SET status = 'FAILED',
    error_message = COALESCE(NULLIF(error_message, ''), 'Limite Empresa (recusado pela operadora)'),
    updated_at = NOW()
WHERE status = '70';

COMMIT;
