Pular para o conteúdo

Big Picture

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.2.1.2 LIVE (branch feature/mcp-first-pivot) — 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.