Skip to content

Big Picture

This content is not available in your language yet.

O canna-br e um sistema de gestao para associacoes canabicas brasileiras operando sob a RDC 1.014/2023. O nucleo nao e uma plataforma SaaS — e um Domain Kernel auditavel que expoe capacidades via MCP Server, colocando o agente de IA como surface primaria em vez de um admin Next.js.

A decisao arquitetural central (cf. ADR-002): ferramenta MCP = tela. Cada capability que seria uma tela CRUD vira um MCP Tool + MCP App — UI inline no chat, sem deploy de frontend separado.

AtorPapelSurface primaria
MembroRecebe dispensacoes; consulta quota e prontuarioMCP App via Open WebUI
DispensadorRegistra dispensacoes no balcaoMCP Tool (nivel 3)
Responsavel TecnicoAprova laudos COA; assina BSPOMCP Tool (nivel 4 → REST TOTP)
CultivadorRegistra plantas, avanca estagiosMCP Tool
AuditorLeitura completa, zero escritaResources MCP (read-only)
AdminGestao de usuarios e configuracao do tenantREST direto (TOTP)
Agente IA (coordenador)Orquestra flows multi-step, interpreta regulacaoFerramenta MCP
Membro valido + Receita vigente + Lote AVAILABLE
→ RecordDispensation (MCP Tool nivel 3)
→ decide() verifica quota + estoque
→ append atomico: DispensationRecorded
+ MemberQuotaConsumed
+ LotQuantityDeducted
→ BullMQ async: SNGPC XML + PDF recibo + email

Optimistic concurrency no stream do lote impede duplo gasto sem 2PC.

cultivation_batch
└── plants[] (ULID permanente — tag fisica QR)
└── harvest_batches
└── processing_runs
└── lab_samples → laudo PDF MinIO
└── inventory_lots
└── dispensations
└── SNGPC XML (batch diario)

Cada vinculo e auditavel. Nenhum material entra no estoque sem inventory_lot ligado a harvest_batch ligado a plants.

ContextoAggregate RootNucleo
MembershipMemberConsentimento + prescricao validos antes de dispensar
CultivationCultivationBatchProgressao de estagio forward-only
ProcessingHarvestBatchAprovacao COA pelo RT; hash imutavel
InventoryInventoryLotLiberacao requer LabSampleApproved
DispensationDispensationImutavel apos criacao
ComplianceRead modelZero commands; so projections
FinanceFinancialStatementCPC 29 valoracao biologica automatica
Identity & AccessUserTOTP para roles criticos; segregacao RDC 1.014

Para detalhe completo: Domain Model.

Dados de saude (LGPD Art. 5 II) em SaaS multi-tenant exigem RIPD, contratos com sub-processadores e clausulas BCR para transferencia internacional — responsabilidade solidaria da diretoria em caso de vazamento. Self-hosted elimina todos esses vetores.

v0.1.0 (sistema usável live) — 154/154 testes, 12 workspaces ativos, MCP Server operacional com Tools nivel 1-3, Open WebUI sidecar em webui.fonsecagabriel.com.br.

Proximas fases: Cronograma | Questoes em aberto: Abertas.