# 🦷 Arquitetura ScoreOdonto CRM (Multi-Tenant) Este documento dita as regras exclusivas e as portas da arquitetura do **ScoreOdonto CRM**. **Nunca** misture essas configurações com as do Clube67. ## 🚀 Stack Tecnológica e Portas de Rede - **Frontend:** Next.js (React) - Porta de Produção/Dev: `3013` - **Backend:** Node.js + Prisma ORM - Porta de Produção/Dev: `8018` - **Banco de Dados (VPS 3):** PostgreSQL 18 - Porta Padrão: `5432` - Banco de Dados Isolado: `scoreodonto` - **Cache (VPS 3):** DragonflyDB - Porta Padrão: `6379` - Índice Isolado: `/1` (exclusivo para ScoreOdonto) - **Proxy Reverso (VPS 1):** Nginx / Traefik - Domínio: `scoreodonto.com` ## 🔄 Fluxo de Deploy Contínuo e Versionamento (+1) O webhook do ScoreOdonto deve rodar de forma isolada do NewWhats. - **Webhook Listener Port (VPS 4):** `9002` - O webhook escuta na porta 9002 e dispara o script de build/deploy exclusivo (`deploy-prod-scoreodonto.sh`). ### 📦 Regra Obrigatória de Incremento de Versão (Build Bump) Para garantir que o histórico de deploys (`deploys.json`) e o contador de builds (`version.json`) avancem automaticamente a cada alteração no sistema, os Agentes SRE DEVEM OBRIGATORIAMENTE garantir que: 1. O script `update-version.js` esteja configurado na raiz do projeto ScoreOdonto. 2. No arquivo `frontend/package.json`, o comando de compilação DEVE ser estritamente configurado para rodar o versionador antes do build do framework: ```json "scripts": { "build": "node ../update-version.js && next build" } ``` > [!TIP] > Sem a chamada `node ../update-version.js` antes do comando de build, o sistema de versionamento não fará a contagem e a versão exibida na interface ficará congelada. ## 🤖 Fluxo de Auto-Cura (Self-Healing) com Grafana/Gitea Para automatizar a geração de Issues no repositório `ruicesar/scoreodonto.com` quando ocorrerem falhas em produção (VPS 1), os Agentes/Administradores devem configurar as regras no Grafana estritamente desta forma: 1. Acesse o **Grafana** (Painel Central). 2. Vá em **Alerting** -> **Alert rules** e crie uma nova regra de alerta (ex: `sum(rate({container="scoreodontocom-scoreodonto-backend-1"} |= "error" [5m])) > 0`). 3. Na seção de **Labels (Custom Labels)**, é OBRIGATÓRIO adicionar: * **Chave:** `repo` * **Valor:** `scoreodonto.com` 4. Na seção **Notifications**, garanta que o alerta está roteado para o Contact Point `Gitea-Bridge`. > [!IMPORTANT] > A tag `repo="scoreodonto.com"` é vital. A Gitea-Bridge multi-tenant na VPS 1 lerá essa tag dinamicamente e fará o POST na API do Gitea criando a Issue de Auto-Cura automaticamente no repositório correto. Sem essa tag, a bridge tentará abrir no repositório padrão.