# Bounded Contexts — Mud Sentinel

**Documento:** `dominio/01-bounded-contexts.md`  
**Versão:** 1.0.0  
**Status:** Vigente

---

## Convenções

Para cada contexto: Responsabilidade, Dependências, Limites, Eventos publicados, Eventos consumidos, Regras, Interfaces públicas (contratos de domínio — não APIs HTTP).

Interfaces públicas são expressas como **comandos / queries / ports** de domínio.

---

## 1. Core

**Responsabilidade:** Resolução de identidade analítica (`Party`), identificadores, lineage (`SourceRecord`) e matching.

**Dependências:** ETL (publicações); Ontology (schemes); Search/Graph como consumidores.

**Limites:** Não modela contratos, sanções ou UI de caso. Não autentica usuários.

**Publica:** `core.party.*`, `core.identifier.*`, `core.source_record.*`, `core.entity_match.*`

**Consome:** `etl.ingest_run.published.v1`; decisões manuais de match.

**Regras:** Merge com redirect; sem fato sem SourceRecord; auto-merge só com limiares.

**Interfaces públicas:**
- Commands: `RegisterParty`, `AssertIdentifier`, `MergeParties`, `DecideMatch`
- Queries: `GetParty`, `ResolveByIdentifier`
- Port: `PartyDirectory`

---

## 2. Identity

**Responsabilidade:** Contas, sessões, papéis, convites, clientes API.

**Dependências:** Administration (Tenant existe); Notifications (convites).

**Limites:** Não armazena catálogo público; não calcula risco.

**Publica:** `identity.user_account.*`, `identity.session.*`, `identity.role.*`, `identity.invitation.*`, `identity.api_client.*`

**Consome:** `administration.tenant.created.v1`; quota de seats.

**Regras:** AuthZ no boundary; MFA admin; segredos hasheados.

**Interfaces:** `Authenticate`, `Authorize(permission)`, `InviteUser`, `IssueApiClient`

---

## 3. Administration

**Responsabilidade:** Tenants, workspaces, entitlements, quotas, AuditEvent store.

**Dependências:** Identity (actors); Analytics (uso).

**Limites:** Não implementa regras de integridade de contrapartes.

**Publica:** `administration.tenant.*`, `administration.workspace.*`, `administration.entitlement.*`, `administration.quota.*`

**Consome:** `analytics.usage_event.recorded.v1`; billing adapters.

**Regras:** Isolamento; falha de audit é severidade alta; closed tenant → retenção.

**Interfaces:** `ProvisionTenant`, `CheckEntitlement`, `ConsumeQuota`, `AppendAudit`

---

## 4. Settings

**Responsabilidade:** Políticas configuráveis do tenant (segurança, retenção, preferências institucionais).

**Dependências:** Administration, Identity.

**Limites:** Não é feature flag global de release (isso é ops/plataforma).

**Publica:** `settings.access_policy.updated.v1`

**Consome:** —

**Regras:** Schema por key; mudanças auditadas.

**Interfaces:** `GetPolicy`, `UpsertPolicy`

---

## 5. Companies

**Responsabilidade:** Empresas, snapshots cadastrais, participações societárias.

**Dependências:** Core (Party); Ontology; Maps (geo opcional).

**Limites:** Não possui contratos/licitações (só referencias por ID de Party).

**Publica:** `companies.company.*`, `companies.registration_snapshot.*`, `companies.shareholding.*`

**Consome:** `core.source_record.published.v1` (pipeline); ingest especializado.

**Regras:** QSA versionado; shareholding alimenta Graph via eventos.

**Interfaces:** `GetCompanyProfile`, `ListShareholders`, `ApplyCompanySnapshot`

---

## 6. People

**Responsabilidade:** Pessoas, perfis versionados, flags PEP.

**Dependências:** Core; Parliament/Sanctions como sinais correlatos.

**Limites:** Não é UserAccount; minimização LGPD.

**Publica:** `people.person.*`, `people.profile_snapshot.*`, `people.pep.*`

**Consome:** Publicações ETL; `parliament.mandate.*` (para PEP policies)

**Regras:** Homônimos via match; PEP com base/fonte.

**Interfaces:** `GetPersonProfile`, `FlagPep`, `ClearPep`

---

## 7. Government

**Responsabilidade:** Órgãos públicos como Parties especializados.

**Dependências:** Core.

**Limites:** Não gerencia editais/contratos internamente.

**Publica:** `government.body.*`

**Consome:** ETL institucional.

**Regras:** Esfera/jurisdição obrigatórias.

**Interfaces:** `GetGovernmentBody`, `RegisterBody`

---

## 8. Parliament

**Responsabilidade:** Membros, mandatos, proposições relevantes.

**Dependências:** People; Core; Knowledge (temas).

**Limites:** Não é rede social política; sem inferência de culpa.

**Publica:** `parliament.member.*`, `parliament.mandate.*`, `parliament.bill.*`

**Consome:** ETL legislativo.

**Regras:** Mandato temporal; afiliação versionada.

**Interfaces:** `ListMandates`, `GetMember`, `GetBill`

---

## 9. Contracts

**Responsabilidade:** Contratos públicos e aditivos.

**Dependências:** Government, Core/Companies/People (partes), Procurement (origem opcional).

**Limites:** Não executa pagamentos; não substitui sistemas oficiais.

**Publica:** `contracts.public_contract.*`, `contracts.amendment.*`

**Consome:** ETL; `procurement.bidding.awarded.v1` (link opcional)

**Regras:** Aditivos versionados; mudanças → Watch/Integrity.

**Interfaces:** `GetContract`, `ListContractsByParty`

---

## 10. Procurement

**Responsabilidade:** Licitações, lotes, propostas/bids.

**Dependências:** Government, Core Parties.

**Limites:** Não julga legalidade do certame.

**Publica:** `procurement.bidding.*`, `procurement.lot.*`, `procurement.bid.*`

**Consome:** ETL.

**Regras:** Histórico preservado em cancelamento.

**Interfaces:** `GetBidding`, `ListBids`

---

## 11. Transparency

**Responsabilidade:** Publicações de transparência e despesas.

**Dependências:** Government, Core.

**Limites:** Cobertura parcial e heterogeneidade são esperadas.

**Publica:** `transparency.publication.*`, `transparency.expense.*`

**Consome:** Crawler/ETL.

**Regras:** Retração marcada, não silent delete.

**Interfaces:** `ListExpenses`, `GetPublication`

---

## 12. Transfers

**Responsabilidade:** Transferências/convênios/fundos modelados.

**Dependências:** Core Parties, Government.

**Limites:** Prestação de contas completa é extensão.

**Publica:** `transfers.transfer.*`

**Consome:** ETL.

**Regras:** Tipagem obrigatória; currency explícita.

**Interfaces:** `GetTransfer`, `ListTransfersByParty`

---

## 13. Sanctions

**Responsabilidade:** Listas e entradas de sanção/impedimento + linkagem a Party.

**Dependências:** Core (match); Integrity/Watch consumidores.

**Limites:** Não determina efeito jurídico definitivo além do declarado na fonte.

**Publica:** `sanctions.list.*`, `sanctions.entry.*`

**Consome:** ETL; `core.entity_match.decided.v1`

**Regras:** match_status visível; lifting emite evento.

**Interfaces:** `ListSanctionsForParty`, `PublishSanctionList`

---

## 14. Cases

**Responsabilidade:** Dossiês tenant-scoped, notas, findings, links.

**Dependências:** Identity, Administration, Evidence, Documents; lê Core/outros por ID.

**Limites:** Não altera fatos públicos do catálogo.

**Publica:** `cases.case.*`, `cases.note.*`, `cases.finding.*`, `cases.case_entity.*`

**Consome:** Entitlements; políticas Settings.

**Regras:** State machine; isolamento tenant.

**Interfaces:** `CreateCase`, `TransitionCase`, `AddNote`, `AddFinding`, `LinkEntity`

---

## 15. Documents

**Responsabilidade:** Documentos e versões imutáveis (upload/espelho).

**Dependências:** Administration (tenant); RAG consumidor.

**Limites:** Não é DMS corporativo completo.

**Publica:** `documents.document.*`, `documents.document_version.*`

**Consome:** —

**Regras:** Hash; scan; isolamento.

**Interfaces:** `StoreDocumentVersion`, `GetDocument`

---

## 16. Evidence

**Responsabilidade:** EvidenceItems e manifests de export.

**Dependências:** Cases; refs a Core/Documents/Graph/AI.

**Limites:** Não coleta crawling.

**Publica:** `evidence.item.*`, `evidence.manifest.*`

**Consome:** Pedidos de Reports.

**Regras:** Ref persistente; manifesto imutável.

**Interfaces:** `AddEvidence`, `BuildManifest`

---

## 17. Integrity

**Responsabilidade:** Regras de risco, fatores, scores, COI, membership interests.

**Dependências:** Consome eventos de Sanctions, People(PEP), Contracts, Graph, Procurement, Transfers…

**Limites:** Score ≠ sentença; sem write no catálogo além de projeções próprias.

**Publica:** `integrity.risk_rule.*`, `integrity.factor.*`, `integrity.score.*`, `integrity.coi_signal.*`, `integrity.membership_interest.*`

**Consome:** Eventos de fatos + Graph paths.

**Regras:** Explicabilidade; versionamento de método; dismiss auditado.

**Interfaces:** `EvaluateParty`, `ConfigureRule`, `GetScoreBreakdown`

---

## 18. Graph

**Responsabilidade:** Nós, arestas, paths, views — projeções navegáveis.

**Dependências:** Core + publishers de fatos (Companies, Contracts…).

**Limites:** Não é SoR dos fatos; limites de profundidade/quota.

**Publica:** `graph.node.*`, `graph.edge.*`, `graph.path.*`, `graph.view.*`

**Consome:** Shareholding, contracts, transfers, bids, sanctions link, party merge…

**Regras:** Taxonomia de edge types; path é estrutural.

**Interfaces:** `ExpandNode`, `FindPath`, `SaveView`, `UpsertEdgeProjection`

---

## 19. Timeline

**Responsabilidade:** Linha do tempo unificada de sujeitos.

**Dependências:** Praticamente todos os contextos de fatos + Cases.

**Limites:** Precisão temporal pode ser parcial.

**Publica:** `timeline.event.projected.v1`

**Consome:** Eventos de domínio com data.

**Regras:** precision flag; demupe por ref.

**Interfaces:** `GetTimeline(subject)`

---

## 20. Maps

**Responsabilidade:** GeoPlaces e camadas analíticas.

**Dependências:** Companies/Transparency opcionalmente; Cases.

**Limites:** Não é GIS completo.

**Publica:** `maps.geo_place.*`, `maps.layer.*`

**Consome:** ETL geocoding results.

**Regras:** Não inventar coordenadas.

**Interfaces:** `ResolvePlace`, `SaveLayer`

---

## 21. Watch

**Responsabilidade:** Watchlists, targets, regras de alerta, alerts.

**Dependências:** Notifications; eventos de Companies/Contracts/Sanctions/…; Cases (abrir caso).

**Limites:** Não reprocessa ETL.

**Publica:** `watch.watchlist.*`, `watch.target.*`, `watch.alert_rule.*`, `watch.alert.*`

**Consome:** Domain change events; PartyMerged.

**Regras:** Dedupe; quotas; ack auditável.

**Interfaces:** `AddTarget`, `RaiseAlert`, `AcknowledgeAlert`

---

## 22. AI

**Responsabilidade:** PromptTemplates, Completions, Citations — orquestração governada.

**Dependências:** RAG, Cases, Knowledge, Administration (quota), Evidence (pin).

**Limites:** Não cria Party/fatos; adapters de provider fora do domínio.

**Publica:** `ai.prompt_template.*`, `ai.completion.*`

**Consome:** Contexto montado (ports); `rag.retrieval.executed.v1`

**Regras:** Modes; versionamento; redaction.

**Interfaces:** `RequestCompletion`, `PinCompletionAsEvidence`

---

## 23. Reports

**Responsabilidade:** Templates, reports, export packages.

**Dependências:** Cases, Evidence, Notifications, Audit.

**Limites:** Render binário é adapter.

**Publica:** `reports.template.*`, `reports.report.*`, `reports.export_package.*`

**Consome:** `cases.case.finalized.v1` (opcional automação)

**Regras:** Hash; audit de download.

**Interfaces:** `EnqueueExport`, `GetExportPackage`

---

## 24. Notifications

**Responsabilidade:** Entrega multi-canal e preferências.

**Dependências:** Identity; Watch/Reports/Identity eventos.

**Limites:** Não decide regras de negócio de alerta.

**Publica:** `notifications.notification.*`, `notifications.preference.*`

**Consome:** `watch.alert.raised.v1`, `reports.export_package.ready.v1`, `identity.invitation.sent.v1`

**Regras:** Preferences; mandatory categories.

**Interfaces:** `Notify`, `UpdatePreference`

---

## 25. Analytics

**Responsabilidade:** UsageEvents para metering e produto.

**Dependências:** Quotas em Administration; produtores Search/Graph/AI/Reports.

**Limites:** Não é warehouse analítico completo (BI futuro separado).

**Publica:** `analytics.usage_event.recorded.v1`

**Consome:** Sinais de uso (comandos localmente contabilizam e publicam).

**Regras:** Idempotência; sem PII.

**Interfaces:** `RecordUsage`, `GetUsageSummary`

---

## 26. ETL

**Responsabilidade:** SourceSystems, RawPayload, TransformJob, IngestRun, DataQualityIssue — publicação canônica.

**Dependências:** Crawler/Plugins; Core e contextos de fatos como destinatários.

**Limites:** Não renderiza UI analítica.

**Publica:** `etl.source_system.*`, `etl.raw_payload.*`, `etl.transform_job.*`, `etl.ingest_run.*`, `etl.data_quality_issue.*`

**Consome:** `crawler.crawl_job.completed.v1`; schedules.

**Regras:** Idempotência; outbox; qualidade bloqueante.

**Interfaces:** `StartIngestRun`, `PublishIngestRun`, `RegisterSourceSystem`

---

## 27. Crawler

**Responsabilidade:** CrawlTarget e CrawlJob — aquisição bruta.

**Dependências:** Plugins/SourceSystem; ETL.

**Limites:** Anti-corrupção: parsing de negócio no ETL/plugin normalize, não no crawl genérico.

**Publica:** `crawler.crawl_target.*`, `crawler.crawl_job.*`

**Consome:** Scheduler / PluginInstallation.

**Regras:** Rate limit; ToS; secrets seguros.

**Interfaces:** `EnqueueCrawl`, `ReportCrawlResult`

---

## 28. Search

**Responsabilidade:** Indexação e consulta free-text/facetas.

**Dependências:** Core e fatos; Integrity signals opcionais; Analytics.

**Limites:** Não SoR.

**Publica:** `search.document.indexed.v1` (integração)

**Consome:** `etl.ingest_run.published.v1`, `core.party.merged.v1`, scores

**Regras:** Reindex pós-merge; quotas de query.

**Interfaces:** `IndexDocument`, `Search(query)`

---

## 29. RAG

**Responsabilidade:** Chunks e retrieval para grounding.

**Dependências:** Documents, Knowledge, AI.

**Limites:** Não gera linguagem natural final.

**Publica:** `rag.chunk.*`, `rag.retrieval.*`

**Consome:** Document/Knowledge publish events.

**Regras:** Isolamento tenant; model_version.

**Interfaces:** `IndexChunk`, `Retrieve`

---

## 30. Knowledge Base

**Responsabilidade:** OntologyTerm + KnowledgeArticle.

**Dependências:** Usado transversalmente; RAG/AI.

**Limites:** Não substitui glossário de processo (docs), mas alinha códigos.

**Publica:** `knowledge.ontology_term.*`, `knowledge.article.*`

**Consome:** —

**Regras:** Deprecação controlada.

**Interfaces:** `ResolveTerm`, `GetArticle`

---

## 31. Plugins

**Responsabilidade:** ConnectorPlugin e PluginInstallation — extensibilidade de fontes.

**Dependências:** Crawler/ETL; Administration (ops).

**Limites:** Sem execução de código não confiável no MVP marketplace.

**Publica:** `plugins.connector_plugin.*`, `plugins.plugin_installation.*`

**Consome:** —

**Regras:** Semver; contrato de saída; secrets em vault.

**Interfaces:** `RegisterPlugin`, `EnableInstallation`

---

## Nota sobre “Core” vs Shared Kernel

O contexto **Core** (Party/Identifier/SourceRecord) é o **core domain de identidade de atores**.  
O **Shared Kernel** técnico mínimo (`TenantId`, `ActorId`, `CorrelationId`) não é um bounded context de negócio — é suporte transversal documentado na arquitetura.
