Estrutura do projeto
O que cada arquivo e pasta da Central gerada faz, o que é seu e o que pertence ao Core.
O gerador cria apenas a base estrutural _base. Rotas, menus, páginas, componentes, layouts e temas pertencem ao código do App e funcionam da mesma forma para todos os valores de appKind.
minha-central/
├── AGENTS.md # (opcional) instruções do seu projeto para Agents — preservado
├── central.app.json # manifesto do App: identidade, RBAC, capabilities, compatibilidade
├── oon.deploy.json # contrato de publicação: runtime, componentes, health, recursos
├── package.json # scripts: dev, check, ooncore:docs, ooncore:conformance
├── .github/workflows/
│ └── publish-dev.yml # ponte para solicitar publicação em Dev
├── .ooncore/ # cache da documentação do Core (gerado; não edite)
├── backend/
│ ├── central.config.js # extensões exclusivamente de runtime
│ ├── central.domain.json # (opcional) models, fórmulas e validações declarativas
│ ├── central.process.json # (opcional) esteiras, bindings, invariantes
│ ├── .env.example
│ └── src/
│ ├── models/ # defineModel(...) ← autocarregado
│ ├── validations/ # defineValidation(...) ← autocarregado
│ ├── triggers/ # defineTrigger(...) ← autocarregado
│ ├── routes/ # defineRoutes(...) ← autocarregado
│ ├── pipelines/ # definePipeline(...) ← autocarregado
│ ├── documents/ # defineDocument(...) ← autocarregado
│ ├── hooks/ # ← autocarregado
│ ├── services/ # regras reutilizáveis (importadas)
│ ├── controllers/ # (importados)
│ ├── mappings/ # (importados)
│ └── collections/ # (importados)
└── frontend/
├── index.html
├── vite.config.ts # 127.0.0.1:5173 + proxy /api → 127.0.0.1:4000
├── .env.example # VITE_API_URL=/api
└── src/
├── main.tsx # startOonApp(app)
├── app/
│ ├── app.tsx # defineOonApp({...})
│ ├── routes.tsx # defineOonRoutes([...])
│ ├── navigation.ts # defineOonNavigation([...])
│ └── theme.ts # createOonTheme({...})
├── pages/
├── components/
├── features/
└── layouts/
Arquivos da raiz
| Arquivo | Dono | Para que serve |
|---|---|---|
central.app.json |
App | Identidade (id, name, slug), tipo (appKind), arquitetura (tenancyModel, availability, accessMode, authorizationMode), módulos, capabilities, compatibilidade com o Core, ativação e RBAC. Veja Manifesto do App. |
oon.deploy.json |
App | Contrato lido pela publicação: appCode, runtime: "ooncore-node-react", componentes, resourceProfile, capabilities de infraestrutura (ex.: pdfRendering) e caminhos de health. |
.ooncore/ |
Core | Cópia versionada da documentação canônica do pacote instalado. Regenere com npm run ooncore:docs; nunca edite à mão. |
AGENTS.md |
App | Instruções próprias do projeto para IA. O gerador e o sync não sobrescrevem. |
Scripts da raiz
| Script | O que faz |
|---|---|
npm run dev |
Orquestrador local: backend em 127.0.0.1:4000, frontend em 127.0.0.1:5173, sessão local automática. |
npm run check |
Executa o doctor (versões, lockfiles, manifestos, docs check e conformance). |
npm run ooncore:docs |
Sincroniza .ooncore/ com a versão instalada. |
npm run ooncore:docs:check |
Valida versão e hashes do cache de documentação. |
npm run ooncore:conformance |
Verifica as fronteiras de segurança e de arquitetura do App. |
Autocarregamento do backend
O bootstrap carrega, nesta ordem:
central.config.js;central.domain.jsone depoiscentral.process.json;- arquivos
.js/.cjsrecursivos desrc/models,src/validations,src/triggers,src/routes,src/pipelines,src/documentsesrc/hooks.
Não é preciso exportar uma função de registro: basta executar defineModel, defineRoutes etc. no módulo carregado. Outros diretórios — src/services, src/assets — entram pelos require desses módulos; não são carregados só por existirem.
Onde colocar cada coisa
| Necessidade | Lugar |
|---|---|
| Nova entidade com CRUD | backend/src/models/ ou backend/central.domain.json |
| Campo calculado / regra entre campos | central.domain.json (computed, validations) |
| Etapas, bloqueios, agregações | backend/central.process.json |
| Regra de negócio em JavaScript | backend/src/validations/ |
| Efeito antes/depois de salvar | backend/src/triggers/ |
| Endpoint de ação ou integração | backend/src/routes/ + backend/src/services/ |
| Nova permissão ou perfil | central.app.json → rbac |
| Nova página | frontend/src/pages/ + app/routes.tsx + app/navigation.ts |
| Identidade visual | frontend/src/app/theme.ts |