# Dossiê de paridade PROFUNDO — Front: Monitoração + Parametrizações + Alçada

Auditoria read-only, zero inferência. Cada afirmação com prova (arquivo:linha, tabela.coluna ou consulta DB).
Escopo pedido: Legado Angular `pages/spi/{monitoracao/lancamentos, monitoracao(integracao/nao-integradas/nao-processadas), parametrizacoes/(alcadas,alerta,tarifas,participantes,legados,gerais), contabilizacao/monitor}` × Nosso Vue `transactions, monitores(Integration/Tariff/RealTime), alcada/*, participants/*, SystemConfig, accounting/monitor`.

Convenção de unidade (importante ao confrontar valores): legado PIX guarda alçada/limite/tarifa/contábil em REAIS decimais (`numeric(18,2)`); nossa cabine em base_units/centavos. Prova legado: `.scratch/legado-pix-map/09-alcada-contabil-conciliacao.md:5`.

---

## 0. Mapa das telas (legado → nosso)

| Área legado | Rota/Func legado | Nosso Vue | Nosso backend |
|---|---|---|---|
| Monitoração > Lançamentos | `lancamentos` / 3001 | `transactions/TransactionListView.vue` (+Detail/Create/ActionsMenu) | settlement `/messages`, spi `/payments` |
| Monitoração > Integração / Não Integradas / Não Processadas-Clearing | `integracao` param 1/2/3 / 3002-3004 | `monitors/IntegrationMonitorView.vue` | (deriva de `/api/v1/audit/logs`) |
| Parametrizações > Alçadas | `alcadas` / 3033 | `alcada/AlcadaParametersView.vue` + `AlcadaPendingView.vue` + `AlcadaHistoryView.vue` | spi `/alcada/*` + settlement `/messages/held` |
| Parametrizações > Alerta (Notificações) | `alertas` / 3034 | (sem equivalente direto) | — |
| Parametrizações > Tarifas | `param_tarifas` / 3014 | `monitors/TariffMonitorView.vue` | settlement `/fees/schedules` |
| Parametrizações > Participantes (indiretos) | `participantes` / 3033 | `reda/RedaListView.vue` (não `ParticipantsView`) | reda / REDA |
| Parametrizações > Legados | `legados_parametrizacao` / 3033 | `participants/LegacyParametersView.vue` | (viewer) |
| Parametrizações > Gerais | `parametrizacoes` / 3033 (grava 3013) | `SystemConfigView.vue` | settlement `/system/config` |
| Contabilização > Monitor | `spi-monitor-contabil` | `accounting/AccountingMonitorView.vue` | settlement `/accounting/*` |

RBAC nosso lado (Sidebar): `transactions.read/write`, `monitoring.read`, `alcada.read` (único p/ parameters+pending+history), `participants.read`, `accounting.read`. Prova: `pix/frontend/admin/src/components/layout/Sidebar.vue:90-92,244-246,265-270`.

RBAC legado: por funcionalidade (30xx) vinda de `ADM_API /api/Security/GetAcessoSistema`; distingue **Incluir 3022, Aprovar 3023, Rejeitar 3024, Cancelar 3025**. Prova: `.../lancamentos/lancamentos.component.html:157,160,163,166`.

---

## 1. Monitoração > Lançamentos  ×  transactions

### 1.1 Legado (prova)
`lancamentos.component.ts:101-117` (form) + `.html`:
- Filtros: Data De/Até + **Hora De/Até** (`txtHoraDe/txtHoraAte`, default 00:00:00 / 23:59:59), **Valor De/Até** (`txtValorDe/txtValorAte`), **cdMsg (multi)**, **Status (multi)**, **Finalidade (multi: IPAY Transferências / GSCB Troco / OTHR Saque)** (`getFinalidade()` :187-193), **CNPJ/CPF**, **Participante (ISPB multi + busca)** (`participanteFiltrado()` :195-201), **TxId**, **EndToEndId**, **Texto Genérico**; checkboxes **Créditos/Débitos/Não Financeira** (`chkChange` :203-211).
- Visualização list/grid/all (`changeViewMode` :608); abas Débitos/Créditos/Não Financeira com **totais por aba** (Total Créditos/Débitos + líquido `classTotal()` :160-165) e contagem.
- Seleção por checkbox (`selAll/selCrd/selDeb/selNF`), ação em lote.
- Ações linha: **Histórico** (`visHistorico` :714), **Reenviar Confirmação ao Legado** só PACS.008/004 (`reenviaConfirmacao` :718-754, alerta de duplicação), `detAlcada` no clique do status (:431-437 → mostra "Alçada(s) associada(s)").
- Ações lote/barra: **Incluir** (3022), **Aprovar** (`aprovarOper`→`aprovarAlcada(idsOperacoes, dsVisto)` :786-790 + service :419), **Rejeitar** (`rejeitarOper`→`rejeitarAlcada` :792-796 + service :428), **Cancelar** (3025, sem handler), **Excel** por aba (`ListaOper*` :213-368).
- Inclusão manual rica (`addPagto` :151, `addEcho` :133, `addIniciacaoPgto` :243, `devPagto` :215) — pagamento/echo/iniciação/devolução pela tela.
- Colunas: Data, Mensagem, Crédito, Débito, Status, ISPB Crédito, ISPB Débito, Nome Debitado, Documento Deb, Documento Cred, Data Operação (`.html:605-638`).

### 1.2 Nosso (prova)
`TransactionListView.vue`:
- Filtros: **E2E search** (`searchQuery` :102 só `end_to_end_id`), Status, Instrumento (MANU/DICT/QRES/QRDN :81-87), Direção (OUTBOUND/INBOUND), dateFrom/dateTo (:95-106).
- Colunas: e2e, direção, status, valor, pagador, recebedor, instrumento, data/hora (:414-527). Sem colunas deb/cred separadas na lista principal; sem totais deb/cred.
- Ações: `goToDetail` (:113), `goToCreate` (:117). Detalhe tem `TransactionActionsMenu.vue`: **Devolver** (`canReturn` só ACSC/STLD :53-55), **Anexar Infração**, **Ver Mensagens BACEN** (:108-135). Devoluções em `ReturnListView.vue` à parte.
- Criação: `TransactionCreateView.vue` (envio manual). Aprovar/Rejeitar de alçada não estão nesta tela — vivem em `AlcadaPendingView`.

### 1.3 Gaps
- **G1 (parcial, medio):** conjunto de filtros muito mais estreito — faltam Valor De/Até, CNPJ/CPF, TxId, Texto Genérico, Hora De/Até, Finalidade, cdMsg multi (só 4 instrumentos), Participante/ISPB. Legado: `lancamentos.component.ts:101-117`. Nosso: `TransactionListView.vue:95-106`.
- **G2 (ausente, baixo):** sem export Excel na lista. Legado `ListaOper*`/`kendoGridExcelCommand`; nosso não tem.
- **G3 (ausente, baixo):** sem abas Débitos/Créditos/Não Financeira com totais/líquido por natureza. Legado `.html:534-546`.
- **G4 (divergencia, baixo):** sem "Reenviar Confirmação ao Legado" (arquitetura diferente — não há legado a re-confirmar). Legado `.html:277`.
- **G5 (parcial, baixo):** aprovar/rejeitar alçada não estão no monitor de lançamentos (ficam em tela separada AlcadaPending); no legado é inline no mesmo grid com seleção em lote. Coberto por outra tela → parcial.

### 1.4 Coberto
- **C1 (coberto):** monitor de operações com detalhe, criação manual, devolução, ver XML/mensagens BACEN. `TransactionDetailView.vue`, `TransactionCreateView.vue`, `ActionsMenu`.

---

## 2. Monitoração > Integração / Não Integradas / Não Processadas-Clearing  ×  IntegrationMonitorView

### 2.1 Legado (prova)
`monitor_integracao.component.ts:128-206`: `TipoMonitor` 1 = Integradas (legado, `logIntegracao`), 2 = Não Integradas (legado, `logNaoIntegradas`), 3 = Não Processadas na Clearing (BACEN, `origem=2`), 4 = Retorno com Erro. Filtros: Data De/Até, **Sistema** (`cboSistema`), **cdMsg (multi)**. Colunas: dtHrEntrada, cdMsg, **dsTipoWorkerOrigem**, **messageId**, **endToEndId**, **metodoApi**, **tipoObjeto** (`.html:120-131`). Ação Histórico (`visHistorico`); Excel. Serviço bate em `SPI_ANG_API /api/Logs/logIntegracao` e `/logNaoIntegradas` (`monitor_integracao.service.ts:23,50`) — rastreia integração SPI↔legado/clearing.

### 2.2 Nosso (prova)
`IntegrationMonitorView.vue` + `services/monitors.ts:16-70`: os "eventos de integração" são **derivados de `/api/v1/audit/logs`** (o próprio comentário admite: "O backend nao expoe um endpoint dedicado de eventos de integracao; cada log e mapeado para IntegrationEvent"). Filtros: direção + status (`IntegrationMonitorView.vue:10-11`). Modos list/grid/timeline. Colunas: hora, direção, tipo(=action do audit), status(derivado do response_status), duração, detalhes.

### 2.3 Gaps
- **G6 (divergencia, alto):** o conceito legado "não integradas com o legado" e "não processadas na clearing" NÃO tem equivalente — nossa tela mostra LOG DE AUDITORIA, não falhas de integração com um core/clearing. Prova nosso: `services/monitors.ts:20` (fonte = audit logs). O análogo operacional real (DLQ/stuck outbound) existe em outros monitores mas não nesta visão por sistema.
- **G7 (parcial, medio):** faltam filtro por Sistema e por cdMsg, e as colunas messageId/metodoApi/tipoObjeto/worker de origem. Legado `.html:120-131`; nosso só direção/status.

---

## 3. Parametrizações > Alçadas  ×  alcada/*  (núcleo do dossiê)

### 3.1 Modelo do parâmetro
**Legado** — `crk_spi.SpiCadParamAlcada` (colunas verificadas AO VIVO no DB):
`IdAlcada, IdInstFinanc, NmAlcada, IdPeriodoVerificacao, NrQtdeVistos, UsuariosAlcada, GruposAlcada, IdSystemsAlcada, UsuariosAprovadores, GruposAprovadores, VlrMinimo, VlrMaximo, VlrDiario, HrInicioVerificacao, HrFimVerificacao, JsonMsgs, FlAtiva, FlEstendeLimites`. UI: `alcadas/create-edit/create-edit.component.ts:54-73` (todos os campos) + regras por mensagem com **8 operadores** (`operador$` :23-30: igual/diferente/maior/maior-igual/menor/menor-igual/contém/não-contém) e exceções por campo (`insereExcecao` :263). `IdPeriodoVerificacao` = Diariamente/DiasUteis/DiasNaoUteis (`.scratch/.../09:18`).

**Nosso** — `monetarie_spi.alcada_parameters` (`Shared.Schemas.Alcada.Parameter:13-28`):
`name, description, min_amount, max_amount, accumulated_amount, accumulated_period(daily/weekly/monthly), required_vistos, start_hour, end_hour, message_types[], is_active, priority`. UI: `AlcadaParametersView.vue:22-35`. **NÃO existe**: usuários/grupos/sistemas de escopo, usuários/grupos aprovadores, regras por campo/operador, período dias úteis/não úteis, EstendeLimites.

### 3.2 Motor de retenção (gate)
**Legado** (`.scratch/.../09:39-75`): `ValidacaoAlcadaUseCase.ValidaAlcada` roda na ENTRADA de TODA operação de IDA com valor, ANTES de enviar ao BACEN; retém em `PendenteAprovacao` até N vistos; alçada mais específica (mais regras) vence; acumulado diário por `DtBase+Cliente(CPF/CNPJ)+ISPB+Agencia+Conta+IdAlcada` (`SpiRegLimitesOperacao`); janela overnight + feriado + EstendeLimites; `NrQtdeVistos==0` auto-rejeita.

**Nosso** (`Shared.Alcada.SendGate`):
- `enabled?/0` default **DESLIGADO** (`ALCADA_PIPELINE_ENABLED`, :112-120).
- Aplica-se SÓ ao **envio MANUAL/admin** (Construir Mensagem + `POST /payments source=manual`); origens de sistema/automação são **isentas por construção** (`@system_sources` :81-83; doc :10-24) — o fluxo automático do Core NÃO passa pelo gate na cabine (é controlado no Core, Onda 1).
- Modelo: `[min_amount,max_amount]` + janela + message_type + acumulado do dia por message_type; `priority asc`; **fail-open** em erro (:161-170).
- Acumulado é por **message_type/dia-UTC global** (`accumulated_today/2` :229-249), NÃO por cliente/ISPB/agência/conta.
- Retém em `Shared.Schemas.Alcada.HeldMessage` `awaiting_approval` (`payment_controller.ex:212-234`, `message_controller.ex:205,270`).

### 3.3 Aprovação (o "visto")
**Legado** (`.scratch/.../09:79-88`, `SpiRegVistoAlcada` colunas: `IdRegistroAlcada, IdUsuario, DtHrVisto, IdStatusVisto, DsVisto`): só **aprovadores** (`UsuariosAprovadores/GruposAprovadores`) podem votar; **maker != checker** (autor não aprova); **1 voto por usuário**; **N vistos** para liberar; **1 rejeição é terminal**; e-mail automático aos aprovadores (`WorkerEnvioAlertaAlcada`).

**Nosso** — DOIS caminhos, e eles NÃO estão conectados:
1. `SpiService.Alcadas` (usado por `AlcadaPendingView` via `/alcada/registrations/:id/visto`): `add_visto` valida maker!=checker (`:cannot_self_approve` :123), status pending (:120), N vistos (`maybe_approve_registration` :154-170), 1 rejeição terminal (:137,172). 1-voto-por-usuário garantido por unique constraint `idx_alcada_vistos_user_reg` (`Visto:30`). **MAS aprovar aqui NÃO despacha/libera nada** — só marca a Registration `approved`.
2. `Shared.Alcada.HeldMessages` (o gate REAL): `approve/3` com CAS single-dispatch (`claim_transition` :274-288), maker!=checker (`authorize` :108-115), dispara `dispatch_fun` (funil canônico) só ao completar vistos. Exposto em `/messages/held/:id/approve` (`router.ex:775`) — **sem UI**.

### 3.4 Gaps (Alçada)
- **G-ALC-SCOPE (ausente, alto):** sem escopo por usuário/grupo/sistema (`UsuariosAlcada/GruposAlcada/IdSystemsAlcada`). Nossa alçada é global por valor/tipo. Legado: `SpiCadParamAlcada` cols; `create-edit.component.ts:63-65`. Nosso: `Parameter:13-28` (ausente).
- **G-ALC-APPROVERS (ausente, alto — segregação):** sem whitelist de aprovadores; qualquer usuário com `alcada.read` aprova. Legado: `UsuariosAprovadores/GruposAprovadores` + `ManAlcada` fail-closed (`.scratch/.../09:81`). Nosso: `alcada_controller.ex:89-110` (add_visto não checa aprovador), Sidebar único `alcada.read`.
- **G-ALC-FIELDRULES (ausente, medio):** sem regras por campo da mensagem com operadores (8 ops). Legado: `create-edit.component.ts:23-30,263-296`. Nosso: inexistente.
- **G-ALC-AUTOPATH (divergencia, medio):** o fluxo automático do Core (IB/Partner via CoreEventProcessor) NÃO passa pelo gate da cabine; legado gateia TODA operação de IDA. Justificado por desenho (ANS 1,6s; Core faz na Onda 1) — `send_gate.ex:10-24,81-83`. Risco: controle depende do Core.
- **G-ALC-FLAG-OFF (divergencia, alto):** gate default OFF (`ALCADA_PIPELINE_ENABLED=false`, `send_gate.ex:112-120`); sem ligar, NENHUMA retenção manual acontece. Legado sempre ativo.
- **G-ALC-UI-DISCONNECT (divergencia, alto):** a tela de aprovação `AlcadaPendingView` aprova `Registration` advisory (`/alcada/registrations/:id/visto`), que NÃO libera/despacha a mensagem retida do money-path; a liberação real é `/messages/held/:id/approve`, sem UI. Prova: `alcadas.ex:154-170` (marca approved, sem dispatch) vs `held_messages.ex:214-269` (dispatch) + ausência de UI (`grep messages/held` no front = vazio).
- **G-ALC-ACCUM-SCOPE (divergencia, medio):** acumulado por message_type/dia global, não por cliente/ISPB/agência/conta. Legado `SpiRegLimitesOperacao`; nosso `send_gate.ex:229-249`.
- **G-ALC-PERIOD (divergencia, medio):** período daily/weekly/monthly, sem Diariamente/DiasUteis/DiasNaoUteis + EstendeLimites/overnight. Legado `IdPeriodoVerificacao`+`FlEstendeLimites`; nosso `Parameter:19`.
- **G-ALC-HISTORY (parcial, medio):** `/alcada/registrations` retorna SÓ pending (`alcadas.ex:86-92`); a tela History (`AlcadaHistoryView.vue`) não consegue listar resolvidas (aprovadas/rejeitadas) — o próprio comentário admite (`AlcadaPendingView.vue:32`, `AlcadaHistoryView.vue:62`).
- **G-ALC-PERM (divergencia, medio):** permissão única `alcada.read` para ver/aprovar/rejeitar; legado separa Aprovar 3023 / Rejeitar 3024 / Cancelar 3025 (`lancamentos.component.html:160-166`).
- **G-ALC-EMAIL (ausente, baixo):** sem worker de e-mail aos aprovadores em pendência. Legado `WorkerEnvioAlertaAlcada` (`.scratch/.../09:91-93`).
- **G-ALC-CHECK-ACCUM (divergencia, baixo):** `SpiService.Alcadas.check_and_register` (o caminho do endpoint `/alcada/check`) IGNORA `accumulated_amount` e usa `Time.utc_now()` em UTC (não BRT) — `alcadas.ex:53-82,187`; o próprio SendGate documenta o defeito (`send_gate.ex:35`).

### 3.5 Coberto (Alçada)
- **C-ALC-4EYES (coberto):** maker != checker nos dois caminhos (`alcadas.ex:123`, `held_messages.ex:112`).
- **C-ALC-NVISTOS (coberto):** N vistos + 1-voto-por-usuário (unique constraint `Visto:30`) + 1-rejeição-terminal + CAS despacho único (`held_messages.ex:274-288`).
- **C-ALC-BASE (coberto, subset):** min/max + janela + message_type + acumulado + required_vistos + ativo (`Parameter:13-28`).
- **C-ALC-VISTO-JUST (coberto):** visto com justificativa (notes = DsVisto) + usuário + timestamp (`Visto:10-19`, `AlcadaPendingView.vue:394-403`).

---

## 4. Parametrizações > Alerta (Notificações)  ×  (sem equivalente)

### 4.1 Legado (prova)
`alerta.component.ts:22-30`: parametriza alerta por **mensagem + usuário + tipo** com 9 tipos: Mensagem Enviada / Erro no Envio / Mensagem Efetivada / Mensagem Rejeitada / Mensagem com Erro / Resposta Recebida / Mensagem Recebida / Movida para DeadLetter / Erro na Formatação. CRUD (`listParamAlerta`, `removeParamAlerta` :83-110). Tabela `crk_spi.SpiCadParamAlertaMsg` (verificada). Worker de e-mail `WorkerEnvioAlerta`.

### 4.2 Nosso
Sem tela de parametrização de notificação por evento de mensagem + usuário. O que existe: `WebhooksSection.vue` (webhooks de egress para parceiros — outro conceito), `balance/BalanceParametersView.vue:241` (thresholds SÓ de saldo), e categoria `notifications` no `SystemConfigView` (chaves genéricas). Prova busca: `grep notificaç/alertConfig` só retorna webhook/balance/systemConfig.

### 4.3 Gap
- **G-ALERTA (ausente, medio):** não há parametrização de alerta/notificação operacional por evento de mensagem (enviada/rejeitada/efetivada/deadletter...) por usuário. Legado `alerta.component.ts:22-30` + `SpiCadParamAlertaMsg`.

---

## 5. Parametrizações > Tarifas  ×  monitors/TariffMonitorView

### 5.1 Legado (prova)
`param_tarifas.service.ts:25-38` `ManutencaoTarifa(idParametroTarifa, dtInicioVigencia, **nrQtdeMsgs** (faixa por quantidade), vlrTarifa, **msgs[]** (por código de mensagem))`. Tabelas `crk_spi.SpiCadParamTarifa` + `SpiCadParamTarifaXMsg` (verificadas). Filtro por Data + cdMsg (`param_tarifas.component.ts:53-57`).

### 5.2 Nosso (prova)
`TariffMonitorView.vue`: CRUD de fee schedule com `name, feeType (enum transfer/qrcode/withdrawal/change/dict/billing), amount, effectiveDate, expirationDate, status` (:17-29,210-232). Backend `/fees/schedules`.

### 5.3 Gaps
- **G-TAR-BUG (divergencia, alto — quebrado):** criar/editar tarifa NÃO persiste — o front manda camelCase (`feeType/amount/effectiveDate/...`) e o changeset `FeeSchedule` só aceita snake_case (`fee_type/flat_fee/active/valid_from/valid_until`); o resto é descartado silenciosamente pelo Ecto.cast. Prova: `services/monitors.ts:110-115` (comentário) + `TariffMonitorView.vue:37-52` (comentário). Salvar tarifa por esta tela não grava valor/vigência/status.
- **G-TAR-BYMSG (divergencia, medio):** tarifa legada é por código(s) de mensagem + faixa por quantidade (`nrQtdeMsgs`); a nossa é por `feeType` enum, sem vínculo a cdMsg nem faixa por quantidade. Legado `param_tarifas.service.ts:25-38`.
- **G-TAR-MONITOR (ausente, medio):** o legado tem também um MONITOR de tarifas (`monitoracao/tarifas` MonitorTarifa `listPaged` — tarifas efetivamente aplicadas por mensagem) e RCO/TIR; não há monitor de tarifas aplicadas por mensagem do nosso lado (`grep MonitorTarifa/fee_transactions` no backend = vazio). RCO/TIR está coberto por `participants/RcoMonitorView.vue`.

### 5.4 Coberto
- **C-TAR (parcial):** conceito de agenda de tarifa com vigência existe; gestão de tarifas em `accounting/fees`.

---

## 6. Parametrizações > Participantes (indiretos)  ×  reda/RedaListView

### 6.1 Legado (prova)
`participantes.component.ts:38-87`: incluir/alterar/excluir participante INDIRETO (`regPartIndireto(CNPJ, nmParticipante)` / `excPartIndireto`, `lancamentos.service.ts:320-355` = REDA ao BACEN); lista por IF (`getPartIndireto`). Tabela indireto verificada (`%PartIndireto%`).

### 6.2 Nosso (prova)
`reda/RedaListView.vue`: "Participantes Indiretos (REDA)" com "Novo participante indireto" e ciclo de status PENDING/ACTIVE/REJECTED/DEREGISTERING/INACTIVE (:20-27). i18n `pt-BR.json:5303-5306`. Cobre o cadastro/baixa de participante indireto com ciclo mais rico. NOTA: `ParticipantsView.vue` (que o pista mapeou como "participants/*") é na verdade um VIEWER READ-ONLY do diretório BACEN de participantes (:22-53) — função DIFERENTE (extra), não a gestão de indiretos.

### 6.3 Coberto / info
- **C-PART (coberto):** cadastro/baixa de participante indireto existe (em `reda/`, não em `participants/`). Ciclo de status ≥ legado.
- **info:** `participants/ParticipantsView.vue` = diretório BACEN read-only (plus), não é a parametrização de indiretos.

---

## 7. Parametrizações > Legados  ×  participants/LegacyParametersView

### 7.1 Legado (prova)
`legados-parametrizacoes.component.ts`: em grande parte STUB — form com `idSpiSpb, cdSpiSpb, chkAtivarMultiliquidacao, txtURLMultiliquidacao` (:27-33); `filtro()` vazio (:64), `delete()` vazio (:45). Config fina de integração legada.

### 7.2 Nosso (prova)
`participants/LegacyParametersView.vue`: viewer READ-ONLY de parâmetros legados por sistema (key/value/dataType/isEncrypted/requiresRestart), degrada para vazio (:12-18); sem CRUD.

### 7.3 Gap
- **G-LEG (parcial, baixo):** ambos são finos; o legado é stub de UI, o nosso é viewer read-only sem CRUD. Paridade de baixo valor; nenhuma ação efetiva de config em nenhum dos dois pela tela.

---

## 8. Parametrizações > Gerais  ×  SystemConfigView

### 8.1 Legado (prova)
`parametrizacoes.component.ts:37-78` — form estruturado por grupos: saldo automático (chkSolAutoCrd/Deb, `txtValorMinPI/MaxPI`, `vlrPadraoCrd/Deb`), SPI-no-SPB (id/cd), **automação ECHO (PIBR001)** + horários (`incluirhoraeco` :479), **automação CAMT060** + horários (:497), multiliquidação (URL/token), download participantes SPI, download bancos, ambiente, log alerta sem mapeamento, URLs de extrato/subdir TIR, **config e-mail SMTP** (servidor/porta/SSL/usuário/senha/sender :290-295), **expurgo** (ativar + `txtQtdDiasManter` :286-288, validado > 1 :119-122), URLs das APIs. Grava via `SetParamGenerico` (:266) + `addLogAtividade(3013)`.

### 8.2 Nosso (prova)
`SystemConfigView.vue`: editor genérico key/value agrupado por categoria (general/limits/settlement/security/integration/notifications :26-34); edita valor por chave; chaves read-only (:39); backing store `monetarie_settlement.system_configs` (`SettlementService.SystemConfig:16-39`), com updatedBy/updatedAt.

### 8.3 Gaps
- **G-CFG-STRUCT (divergencia, medio):** sem formulários estruturados dos grupos do legado (agendas ECHO/CAMT com listas de horários, bloco SMTP, saldo auto min/max, expurgo, download participantes/bancos, multiliquidação). Só editor genérico key/value cujo efeito depende de seeds/workers, não do formulário. Legado `parametrizacoes.component.ts:266-345`.
- **info:** saldo min/max e automações agendadas existem em OUTRAS telas nossas (`balance/BalanceParametersView.vue` p/ thresholds de saldo; seção `automation` p/ mensagens agendadas), não nesta tela genérica.

### 8.4 Coberto
- **C-CFG (parcial):** store de configuração genérico com auditoria (updatedBy/updatedAt) e categorias existe.

---

## 9. Contabilização > Monitor  ×  accounting/AccountingMonitorView

### 9.1 Legado (prova)
`monitor-contabil.component.ts:59-67` (form): filtros **dtMovto, idEmpresa, idEvento, cdMsg, contaDeb, contaCre, layout (1=CRK / 2=CRKDinamico)**. `filtrar()` lista lançamentos com totais deb/cred (:93-98). **Gerar Arquivo** posicional (`openGerarArquivo`→`BaixaArquivo` :103-133). **Imprimir Sintético/Analítico** (`print('S'|'A')` :143-330, HTML com contas D1/D2/C1/C2, histórico). Bucket `idEvento==0` = **NÃO CONTABILIZADO** (:201). Cadastro em telas separadas (Plano de Contas, Histórico Padrão, Centro de Custo, Eventos Contábeis — `.scratch/.../04:101-105`).

### 9.2 Nosso (prova)
`accounting/AccountingMonitorView.vue`: lista read-only de lançamentos recentes (data, tipo, descrição, valor, status) + contagem total (:50-67). Sem filtros por data/evento/conta/mensagem; sem Gerar Arquivo; sem Imprimir S/A; sem totais deb/cred; sem bucket NÃO CONTABILIZADO. Cadastros existem em rotas separadas: chart-of-accounts, history (histórico padrão), cost-centers, events, reconciliation (`Sidebar.vue:224-233`).

### 9.3 Gaps
- **G-CONT-FILTERS (parcial, medio):** monitor contábil sem filtros por dtMovto/evento/mensagem/conta débito/crédito. Legado `monitor-contabil.component.ts:59-91`.
- **G-CONT-EXPORT (ausente, medio):** sem export de arquivo posicional (BaixaArquivo CRK/CRKDinamico) para importação no contábil externo. Legado `:103-133`. (Nossa arquitetura é journal-por-operação COSIF + reconciliação, modelo diferente do batch diário do legado.)
- **G-CONT-PRINT (ausente, baixo):** sem Diário Geral Sintético/Analítico impresso. Legado `:143-330`.
- **G-CONT-NAOCONTAB (parcial, medio):** sem bucket "NÃO CONTABILIZADO" no monitor (o análogo é a Reconciliação Contábil PIX em `accounting/reconciliation`, não nesta tela).

### 9.4 Coberto
- **C-CONT-CADASTRO (coberto):** Plano de Contas, Histórico Padrão, Centro de Custo, Eventos Contábeis existem como rotas próprias (`Sidebar.vue:229-232`).

---

## 10. Extras do nosso lado (sem equivalente no escopo legado)
- `monitoring/RealTimeMonitoringView.vue` — dashboard WebSocket de saúde/TPS ao vivo (plus; token de socket via `/auth/socket-token` :57).
- `monitors/FileMonitorView.vue` — equivale ao legado `monitor_arquivos`.
- `participants/RcoMonitorView.vue` + `ResponseTimeReportView.vue` + `ParticipantOperationsView.vue` + `MessageStatisticsView.vue` — cobrem RCO/TIR, tempo de resposta e operações por participante do legado.

---

## 11. Síntese de risco
- Alto: G-ALC-SCOPE, G-ALC-APPROVERS, G-ALC-FLAG-OFF, G-ALC-UI-DISCONNECT, G-TAR-BUG, G6 (integração).
- Médio: G-ALC-FIELDRULES, G-ALC-AUTOPATH, G-ALC-ACCUM-SCOPE, G-ALC-PERIOD, G-ALC-HISTORY, G-ALC-PERM, G-ALERTA, G-TAR-BYMSG, G-TAR-MONITOR, G-CFG-STRUCT, G-CONT-FILTERS, G-CONT-EXPORT, G-CONT-NAOCONTAB, G1, G7.
- Baixo: G2, G3, G4, G5, G-ALC-EMAIL, G-ALC-CHECK-ACCUM, G-LEG, G-CONT-PRINT.
- Coberto (confiança): 4-olhos (maker!=checker), N-vistos + 1-voto/usuário + rejeição terminal + CAS despacho único, modelo base de alçada (faixa+janela+tipo+acumulado), visto com justificativa, participante indireto (REDA) com ciclo de status, cadastros contábeis, RCO/tempo de resposta.
