--- type: rule name: fronteiras-monorepo description: Define a convenção de pacotes e regras de importação entre módulos do monorepo scope: global trigger: always_on updatedAt: "2026-06-01" --- # Regra: Fronteiras de Pacote no Monorepo ## Contexto Cada módulo SaaS do ecossistema é organizado em até 4 pacotes dentro de um monorepo. O agente **deve** respeitar as fronteiras de importação entre pacotes para evitar acoplamento indevido. ## Convenção de Pacotes Cada módulo segue a estrutura: ``` -back ← Servidor: rotas, serviços, filas, CRON -front ← Interface: páginas Vue, componentes, composables -comuns ← Compartilhado: tipos, schemas Zod, enums, utils puros -migracao ← Banco de dados: migrations, seeds, scripts de carga ``` Nem todo módulo terá os 4 pacotes. O mínimo funcional é `back` + `front` + `comuns`. ## Regras de Importação ### Permitido ✅ ``` -front → pode importar de → -comuns -back → pode importar de → -comuns -migracao → pode importar de → -comuns ``` ### Proibido ❌ ``` -front ✗ nunca importar de → -back -back ✗ nunca importar de → -front -migracao ✗ nunca importar de → -front -front ✗ nunca importar de → -back ✗ nunca importar de → -back (direto) ``` ### Comunicação entre módulos Módulos diferentes **nunca** importam código um do outro diretamente. Comunicação entre módulos deve ocorrer via: - **API HTTP** (chamada de serviço entre backs) - **Fila** (BullMQ, Redis) para processamento assíncrono - **Banco compartilhado** com schemas/tabelas separados por módulo - **Pacote `*-comuns` compartilhado** apenas para tipos e schemas de contrato ## O que vive em cada pacote ### `-comuns` O pacote comuns é a **única fonte de verdade** para tipos e schemas compartilhados: ``` -comuns/src/ ├── tabelas/ ← schemas Zod por entidade (zEntidadeCriar, etc.) ├── enums/ ← enums de domínio do módulo ├── tipos/ ← tipos derivados dos schemas └── utils/ ← funções puras sem side-effect ``` **Proibido** no comuns: - Componentes Vue ou React - Código com `import` de Node.js (`fs`, `path`, `http`) - Código com `import` de bibliotecas de frontend (`vue`, `vuetify`) - Lógica de negócio que depende de banco ou serviço externo ### `-back` ``` -back/src/ ├── rotas/ ← endpoints Express/Fastify ├── servicos/ ← lógica de negócio ├── banco/ ← queries (Knex, Prisma, etc.) ├── filas/ ← processadores de fila ├── cron/ ← tarefas agendadas └── utils/ ← helpers exclusivos do back ``` ### `-front` ``` -front/src/ ├── paginas/ ← páginas/views por rota ├── componentes/ ← componentes reutilizáveis do módulo ├── composables/ ← lógica reutilizável (use*.ts) └── utils/ ← helpers exclusivos do front ``` ### `-migracao` ``` -migracao/src/ ├── migrations/ ← criação/alteração de tabelas ├── seeds/ ← dados iniciais └── scripts/ ← scripts de carga/transformação ``` ## Impacto Sem esta regra: - Front importa serviço de back (quebra em build de produção) - Módulo A acessa tabelas do Módulo B diretamente (acoplamento oculto) - Schemas ficam duplicados entre back e front - Mudança em um módulo quebra outro sem aviso ## Referências - Rule: `global/rules/zod-validacao-padrao` (schemas no `*-comuns`) - Skill: `global/skills/mapear-codigo-fonte/SKILL`