Abrir o sistema →
Técnico

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.

  1. Instalar dependências: pnpm install.
  2. Aplicar migrations no dev: pnpm --filter api db:migrate.
  3. Subir a API: pnpm --filter api dev.
  4. Subir o front: pnpm --filter app dev.
Dica: Testes E2E rodam isolados no banco clinico_crm_testes (portas 3001/5174).

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.