Visão técnica e arquitetura
Stack, organização do monorepo, multi-tenant, segurança e como rodar/implantar.
Stack e organização
Monorepo pnpm. apps/api (NestJS + Drizzle ORM + PostgreSQL), apps/app (React + TanStack Router + React Query, Vite), apps/admin (painel do SaaS) e serviço de agentes em Python (Google ADK). Banco de dev: clinico_crm; de testes: clinico_crm_testes.
Multi-tenant e segurança
Toda query é org-scoped via TenantService (filtra organizationId); endpoints com RBAC (@Roles) e validação por DTO (class-validator). Ações sensíveis são auditadas (append-only). Segredos (chaves de IA, integrações) são cifrados com secret-box.
Como rodar localmente
Node 24. Subir API e front em dev; migrations via Drizzle.
- Instalar dependências:
pnpm install. - Aplicar migrations no dev:
pnpm --filter api db:migrate. - Subir a API:
pnpm --filter api dev. - Subir o front:
pnpm --filter app dev.
Qualidade (gates)
TDD: unit (Vitest) → integração (Testcontainers) → E2E (Playwright). Todo merge mantém typecheck limpo e a suíte verde.
IA sem vendor lock-in
Gateway OpenAI-compatible (OpenRouter), modelo “traga sua chave” (BYOK) cifrado por clínica. Modelo resolvido por atividade (copilot/clinical_summary/scheduling) com curadoria de custo×benefício. Catálogo de modelos atualizado ao vivo pelo gateway.
Esta documentação
Os manuais são gerados a partir de uma fonte única (docs/manuais/conteudo.mjs) por gerar.mjs; os prints reais são capturados via Playwright (apps/app/e2e/docs-capturas.spec.ts). Para regenerar, veja docs/manuais/README.md.
