Skip to content

Stack e Interfaces

This content is not available in your language yet.

ADR-001: Domain Kernel em TypeScript puro + Emmett como event-sourcing kernel. ADR-002: Primary surface = MCP Server + MCP Apps em Open WebUI. Sem admin Next.js standalone até pós-v1.0.

Regra invariante: toda interface chama packages/app-services. Nenhuma interface bypassa o domain kernel, escreve direto no event store ou chama Drizzle para mutação.

Domain Kernel (packages/domain) — funções puras decide/evolve
↑ zero side effects
App Services (packages/app-services) — loads stream → decide → append → project
┌───────────────────────┬──────────────────┬──────────────┐
│ │ │ │
MCP Server REST/OpenAPI Worker/Jobs (sem admin
(apps/mcp) (apps/api) (apps/worker) Next.js)
│ │ │
MCP Apps Nível-4 TOTP, SNGPC, PDF,
(packages/ui-apps) federação, Email, BSPO
│ jurídico
Open WebUI sidecar
TecnologiaPapel
TypeScript (strict)packages/domain — funções puras decide/evolve
Emmett (event-driven-io)Event store (in-memory + Postgres), optimistic concurrency, test harness
VitestTestes GIVEN/WHEN/THEN, scenario coverage
ULID (ulid npm)IDs lexicograficamente ordenáveis para eventos e aggregates
TecnologiaPapel
MCP Server (@modelcontextprotocol/sdk)Tools (commands) + Resources (read models) + Apps (UI inline)
MCP Apps (ext-apps)Componentes UI interativos inline no chat — substituem 80+ telas CRUD
packages/ui-apps/Registry de apps: MemberQuotaCardApp, TraceabilityTimelineApp, DispensationFormApp
OAuth 2.1Autorização agente↔canna-br com escopo limitado
Open WebUI v0.9.6+Chat host primário — sidecar obrigatório
mcpo bridgeMCP-to-OpenAPI proxy para hosts que não falam MCP nativo
Fastify 5HTTP server fino — chama app-services, sem regra de negócio
Drizzle ORMApenas read models — sem mutação no event store
ZodValidação de schema HTTP em runtime
BullMQ + RedisSide effects assíncronos (SNGPC, PDF, email)
TecnologiaPapel
PostgreSQL 16 + pgAuditBanco principal + log de auditoria imutável
Redis 7Cache de sessão + filas BullMQ
MinIOS3-compatible self-hosted (laudos, docs)
Puppeteer headlessGeração de PDFs (relatórios, carteirinhas)
TecnologiaPapel
NATS JetStreamEvent log imutável — fonte da verdade do ledger
Formance Ledger (MIT) — candidatoEngine de dupla-entrada pronto — débito/crédito não se reimplementam
SurrealDBProjeções / read-models do ledger

Detalhes em Token-Ledger (arquitetura).

TecnologiaPapel
JWT (jose) + TOTP (speakeasy)Tokens stateless + 2FA sem SaaS externo
Kamal 2Deploy zero-downtime via Docker
CaddyReverse proxy + TLS automático (Let’s Encrypt)
Hetzner DEVPS GDPR-aligned (Frankfurt)
NívelDescriçãoQuando habilita
1 — Read-onlyConsulta sem efeito (get_inventory_summary, get_member_quota_summary)v0.3
2 — DraftPrepara sem executar; humano confirma (draft_dispensation)v0.4
3 — Escrita operacionalCria PendingAction; requer RBAC + confirmação (request_record_dispensation)v0.5
4 — Alto riscoNunca via MCP — exige TOTP REST direto (crypto-deletion, role change, recall)fora do MCP

Dados de saúde (LGPD Art. 5 II) em SaaS multi-tenant exigem RIPD, contratos com sub-processadores e cláusulas BCR para transferência internacional — responsabilidade solidária da diretoria em caso de vazamento. Self-hosted elimina todos esses vetores.

OpçãoSetupCusto
A — Hetzner + Kamal (recomendada)VPS Frankfurt GDPR + Caddy TLS auto + Restic → S3~€15–25/mês
B — Mini-PC + TailscaleHardware próprio + Docker + zero porta abertaHardware único
C — Multi-Tenant ManagedSchema isolation por associação + DPA LGPD pré-negociadoSaaS gerenciado
VersãoCapability
v0.2.1 (atual)MCP Tools Nível 1–3, MCP Apps iniciais, REST/OpenAPI, Open WebUI sidecar, OAuth 2.1
v0.3LGPD hardening, CSV import, MCP Apps adicionais, Auditor + Federation roles
v0.4Dossier template, BSPO trimestral, RIPD via RipdReviewApp, DPO view completa
v0.5SNGPC + SNCR real, retry/DLQ, REST API pública v1 estável
v1.0Cultivation + Processing + Lab + CPC 29 + multi-tenant + billing