@oondemand/create-central-oon 0.5.6 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +41 -89
  2. package/bin/cli.js +4 -17
  3. package/docs/ADVANCED_UX_PATTERNS.md +3 -2
  4. package/docs/AGENTS.md +3 -4
  5. package/docs/BACKEND_API.md +2 -4
  6. package/docs/BACKEND_PATTERNS.md +1 -2
  7. package/docs/BACKEND_PROCESS_MANIFEST.md +6 -6
  8. package/docs/CAPABILITIES.md +2 -3
  9. package/docs/CHECKLIST_IMPLEMENTACAO.md +4 -4
  10. package/docs/FRONTEND_API.md +20 -23
  11. package/docs/FRONTEND_CODE_FIRST.md +35 -0
  12. package/docs/FRONTEND_PATTERNS.md +13 -15
  13. package/docs/METADATA_CRUD_UI.md +1 -1
  14. package/docs/PORTAL_COCKPIT_PATTERNS.md +10 -145
  15. package/docs/REACTIVE_DOMAIN_FORMULAS.md +2 -2
  16. package/package.json +1 -1
  17. package/schemas/central.app.schema.json +2 -16
  18. package/src/conformance.js +42 -106
  19. package/src/index.js +4 -28
  20. package/src/render.js +4 -30
  21. package/templates/_base/README.md +7 -6
  22. package/templates/_base/backend/package.json +1 -1
  23. package/templates/_base/central.app.json +4 -9
  24. package/templates/_base/frontend/package.json +1 -1
  25. package/templates/_base/frontend/src/app/app.tsx +25 -0
  26. package/templates/_base/frontend/src/app/navigation.ts +5 -0
  27. package/templates/_base/frontend/src/app/routes.tsx +6 -0
  28. package/templates/_base/frontend/src/app/theme.ts +8 -0
  29. package/templates/_base/frontend/src/components/gitkeep +1 -0
  30. package/templates/_base/frontend/src/features/gitkeep +1 -0
  31. package/templates/_base/frontend/src/layouts/gitkeep +1 -0
  32. package/templates/_base/frontend/src/main.tsx +3 -8
  33. package/templates/_base/frontend/src/pages/HomePage.tsx +25 -0
  34. package/templates/_base/frontend/tsconfig.json +1 -1
  35. package/templates/_base/package.json +1 -1
  36. package/docs/CONNECTORS_AND_INTEGRATIONS.md +0 -66
  37. package/docs/FRONTEND_MANIFEST_REFERENCE.md +0 -487
  38. package/templates/_base/backend/src/integrations/gitkeep +0 -0
  39. package/templates/_base/frontend/central.ui.json +0 -58
  40. package/templates/_base/frontend/src/collections/gitkeep +0 -0
  41. package/templates/_base/frontend/src/dashboards/gitkeep +0 -0
  42. package/templates/_base/frontend/src/documents/gitkeep +0 -0
  43. package/templates/_base/frontend/src/overrides/gitkeep +0 -0
  44. package/templates/_base/frontend/src/pipelines/gitkeep +0 -0
  45. package/templates/basic/backend/src/models/Pessoa.js +0 -21
  46. package/templates/basic/frontend/central.ui.json +0 -8
  47. package/templates/documentos-fiscais/backend/central.config.js +0 -32
  48. package/templates/documentos-fiscais/backend/src/models/DocumentoFiscal.js +0 -23
  49. package/templates/documentos-fiscais/frontend/central.ui.json +0 -16
  50. package/templates/multi-moedas/backend/central.config.js +0 -32
  51. package/templates/multi-moedas/backend/src/models/Cotacao.js +0 -23
  52. package/templates/multi-moedas/backend/src/models/Moeda.js +0 -15
  53. package/templates/multi-moedas/frontend/central.ui.json +0 -11
  54. package/templates/omie-sidecar/backend/central.config.js +0 -33
  55. package/templates/omie-sidecar/backend/src/mappings/pessoa-cliente.js +0 -20
  56. package/templates/omie-sidecar/backend/src/models/Pessoa.js +0 -24
  57. package/templates/omie-sidecar/backend/src/triggers/Pessoa.js +0 -14
  58. package/templates/omie-sidecar/frontend/central.ui.json +0 -8
  59. package/templates/pedidos-marketplace/backend/central.config.js +0 -32
  60. package/templates/pedidos-marketplace/backend/src/models/Pedido.js +0 -22
  61. package/templates/pedidos-marketplace/backend/src/models/Produto.js +0 -16
  62. package/templates/pedidos-marketplace/frontend/central.ui.json +0 -10
  63. package/templates/servicos-prestados/backend/central.config.js +0 -32
  64. package/templates/servicos-prestados/backend/src/models/Cliente.js +0 -15
  65. package/templates/servicos-prestados/backend/src/models/ServicoPrestado.js +0 -22
  66. package/templates/servicos-prestados/frontend/central.ui.json +0 -10
  67. package/templates/servicos-tomados/backend/central.config.js +0 -32
  68. package/templates/servicos-tomados/backend/src/models/Pessoa.js +0 -15
  69. package/templates/servicos-tomados/backend/src/models/Servico.js +0 -22
  70. package/templates/servicos-tomados/frontend/central.ui.json +0 -10
package/README.md CHANGED
@@ -1,141 +1,93 @@
1
1
  # @oondemand/create-central-oon
2
2
 
3
- Gerador de **Centrais Oon declarativas**. Cria backend e frontend prontos para consumir `@oondemand/oon-core-back` e `@oondemand/oon-core-front`, sem copiar shell, autenticação, páginas genéricas ou infraestrutura para a Central.
3
+ Gerador estrutural de Apps Oon. Ele cria backend e frontend code-first prontos
4
+ para consumir `@oondemand/oon-core-back` e `@oondemand/oon-core-front`.
4
5
 
5
6
  ## Uso
6
7
 
7
8
  ```bash
8
9
  npx create-central-oon central-transtour
9
- npx create-central-oon central-transtour --template=servicos-tomados
10
- npx create-central-oon --list
11
10
  ```
12
11
 
13
- Aliases: o binário também responde por `scaffold-central-oon`.
12
+ O gerador possui uma única base `_base`. Não há seleção ou catálogo de
13
+ templates funcionais. O binário também responde por `scaffold-central-oon`.
14
14
 
15
15
  ## Contrato `central.app.json`
16
16
 
17
- Toda Central gerada possui um manifesto raiz com identidade e capabilities:
18
-
19
17
  ```json
20
18
  {
21
19
  "$schema": "./node_modules/@oondemand/create-central-oon/schemas/central.app.schema.json",
22
- "schemaVersion": 1,
20
+ "schemaVersion": 2,
23
21
  "id": "central-exemplo",
24
22
  "name": "Central Exemplo",
25
23
  "slug": "central-exemplo",
26
24
  "appKind": "member-central",
25
+ "accessMode": "private",
26
+ "authorization": { "mode": "tenant_members" },
27
27
  "modules": {
28
- "collections": true,
28
+ "collections": false,
29
29
  "documents": false,
30
30
  "pipelines": false,
31
- "integrations": false,
32
- "omie": false,
33
31
  "assistants": false,
34
32
  "currencies": false
35
33
  },
36
- "capabilities": ["core.collections"],
34
+ "capabilities": [],
37
35
  "compatibility": {
38
36
  "core": {
39
- "minVersion": "0.5.0",
40
- "maxVersionExclusive": "0.6.0"
37
+ "minVersion": "0.6.0",
38
+ "maxVersionExclusive": "0.7.0"
41
39
  }
42
40
  }
43
41
  }
44
42
  ```
45
43
 
46
- O schema versionado é publicado no pacote em:
44
+ O manifesto contém identidade, política de acesso, capacidades de plataforma e
45
+ compatibilidade. Rotas, menus, páginas, componentes, layouts e temas ficam no
46
+ código do frontend, para qualquer `appKind`.
47
+
48
+ ## Estrutura gerada
47
49
 
48
50
  ```txt
49
- @oondemand/create-central-oon/schemas/central.app.schema.json
51
+ <app>/
52
+ ├── central.app.json
53
+ ├── package.json
54
+ ├── backend/
55
+ │ ├── central.config.js
56
+ │ ├── central.domain.json
57
+ │ └── src/{validations,triggers,hooks,mappings,rules}/
58
+ └── frontend/
59
+ └── src/
60
+ ├── main.tsx
61
+ ├── app/{app,routes,navigation,theme}.tsx
62
+ ├── pages/
63
+ ├── components/
64
+ ├── features/
65
+ └── layouts/
50
66
  ```
51
67
 
52
- Responsabilidades do manifesto:
53
-
54
- - identidade estável (`id`, `name`, `slug`);
55
- - perfil arquitetural (`appKind`);
56
- - módulos e capabilities habilitados;
57
- - faixa compatível do OonCore;
58
- - metadados declarativos de ativação.
59
-
60
- `backend/central.config.js` fica reservado a extensões excepcionais de runtime. Em Centrais `member-central` e `portal-cockpit`, identidade, módulos e autenticação não podem ser reintroduzidos nesse arquivo. O desenvolvimento local usa sessão aleatória HttpOnly; tokens fixos são reprovados pela conformidade.
68
+ O bootstrap gerado chama `startOonApp(app)`. A composição é feita com
69
+ `defineOonApp`, `defineOonRoutes` e `defineOonNavigation`.
61
70
 
62
- ## Verificação de conformidade
63
-
64
- Na raiz da Central:
71
+ ## Conformidade
65
72
 
66
73
  ```bash
67
74
  npm run ooncore:conformance
68
- ```
69
-
70
- ou:
71
-
72
- ```bash
73
- npx create-central-oon conformance
74
75
  npx create-central-oon conformance --json
75
76
  ```
76
77
 
77
- O comando falha quando encontra, entre outros desvios:
78
-
79
- - ausência ou incompatibilidade de `central.app.json`;
80
- - transformações ou registries no bootstrap do frontend;
81
- - páginas genéricas e extensões executáveis locais;
82
- - identidade ou autenticação reintroduzida em `central.config.js`;
83
- - models técnicos de integração;
84
- - workers, runtimes, locks, clients Omie ou registries locais;
85
- - patches de métodos do Mongoose;
86
- - arquivos com extensões fora da allowlist.
87
-
88
- A CI de uma Central deve executar o comando antes do build e da publicação.
78
+ A verificação exige schema v2 e bootstrap code-first, protege rotas reservadas,
79
+ guards de segurança e imports internos, e rejeita código remoto, segredos no
80
+ bundle e dependências fora do frontend.
89
81
 
90
- ## Documentação distribuída para IA/Agents
82
+ ## Documentação
91
83
 
92
- O pacote inclui documentação canônica em `docs/`. Ao criar uma Central, o CLI gera `.ooncore/` como cache local da documentação da versão instalada.
84
+ O pacote distribui documentação canônica em `docs/`. O comando abaixo atualiza
85
+ o cache `.ooncore/` usado por ferramentas de desenvolvimento:
93
86
 
94
87
  ```bash
95
88
  npm run ooncore:docs
96
89
  npm run ooncore:docs:check
97
90
  ```
98
91
 
99
- `.ooncore/AGENTS.md` é a entrada neutra e `.ooncore/docs/` contém os contratos completos de backend, frontend e capacidades. A pasta pode ser regenerada a partir do pacote npm sem sobrescrever o `AGENTS.md` da raiz.
100
-
101
- ## Templates funcionais
102
-
103
- | Template | O que gera |
104
- | --- | --- |
105
- | `basic` | Uma coleção dinâmica (`Pessoa`). |
106
- | `omie-sidecar` | Estrutura declarativa inicial para mapping Omie. |
107
- | `servicos-tomados` | Prestadores e esteira por status. |
108
- | `servicos-prestados` | Clientes e esteira por etapa. |
109
- | `pedidos-marketplace` | Catálogo e esteira de pedidos. |
110
- | `documentos-fiscais` | Documento fiscal com aprovação. |
111
- | `multi-moedas` | Moedas e cotações. |
112
-
113
- ## Estrutura gerada
114
-
115
- ```txt
116
- <central>/
117
- ├── central.app.json # identidade, appKind, módulos e capabilities
118
- ├── package.json # docs, conformance e comandos locais
119
- ├── .ooncore/ # cache regenerável da documentação
120
- ├── backend/
121
- │ ├── central.config.js # somente extensão excepcional de runtime
122
- │ ├── central.domain.json # domínio declarativo
123
- │ └── src/{validations,triggers,hooks,mappings,rules}/
124
- └── frontend/
125
- ├── central.ui.json # telas, formulários, grids e esteiras
126
- └── src/main.tsx # bootstrap mínimo gerado
127
- ```
128
-
129
- O bootstrap gerado importa `central.app.json` e `central.ui.json` e chama `startCentralFromManifest`. Não deve transformar manifestos, registrar componentes padrão nem conhecer regras de um cliente.
130
-
131
- ## Próximos passos
132
-
133
- ```bash
134
- cd <central>
135
- npm run check
136
- cp backend/.env.example backend/.env
137
- cp frontend/.env.example frontend/.env
138
- npm run dev
139
- ```
92
+ Consulte `docs/FRONTEND_CODE_FIRST.md` para o contrato completo.
140
93
 
141
- Evoluir a Central significa declarar domínio, UI, mappings e regras específicas. O OonCore implementa como a aplicação funciona.
package/bin/cli.js CHANGED
@@ -1,17 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
 
4
- const { run, listTemplates, syncDocs, checkDocs, runLocalDevelopment } = require("../src/index");
4
+ const { run, syncDocs, checkDocs, runLocalDevelopment } = require("../src/index");
5
5
  const { checkConformance } = require("../src/conformance");
6
6
 
7
7
  function parseArgs(argv) {
8
8
  const opts = {
9
9
  command: null,
10
- template: "basic",
11
10
  here: false,
12
11
  force: false,
13
12
  install: true,
14
- list: false,
15
13
  docsSync: false,
16
14
  docsCheck: false,
17
15
  json: false,
@@ -24,15 +22,13 @@ function parseArgs(argv) {
24
22
  if (arg === "--here") opts.here = true;
25
23
  else if (arg === "--force") opts.force = true;
26
24
  else if (arg === "--no-install") opts.install = false;
27
- else if (arg === "--list") opts.list = true;
28
25
  else if (arg === "--sync") opts.docsSync = true;
29
26
  else if (arg === "--check") opts.docsCheck = true;
30
27
  else if (arg === "--json") opts.json = true;
31
28
  else if (arg.startsWith("--root=")) opts.root = arg.slice("--root=".length);
32
29
  else if (arg === "--root") { opts.root = argv[i + 1]; i += 1; }
33
- else if (arg.startsWith("--template=")) opts.template = arg.slice("--template=".length);
34
- else if (arg === "--template") { opts.template = argv[i + 1]; i += 1; }
35
30
  else if (!arg.startsWith("-")) positionals.push(arg);
31
+ else throw new Error(`Opção desconhecida: ${arg}.`);
36
32
  }
37
33
 
38
34
  if (["docs", "conformance", "dev"].includes(positionals[0])) {
@@ -45,24 +41,15 @@ function parseArgs(argv) {
45
41
 
46
42
  function printUsage() {
47
43
  console.error("Uso:");
48
- console.error(" npx create-central-oon <nome-da-central> [--template=basic]");
49
- console.error(" npx create-central-oon --list");
44
+ console.error(" npx create-central-oon <nome-do-app>");
50
45
  console.error(" npx create-central-oon docs sync|check");
51
46
  console.error(" npx create-central-oon conformance [--root .] [--json]");
52
47
  console.error(" npx create-central-oon dev");
53
48
  }
54
49
 
55
50
  async function main() {
56
- const opts = parseArgs(process.argv.slice(2));
57
- if (opts.list) {
58
- console.log("Templates disponíveis:\n");
59
- for (const template of listTemplates()) {
60
- console.log(` ${template.id.padEnd(20)} ${template.description}`);
61
- }
62
- return;
63
- }
64
-
65
51
  try {
52
+ const opts = parseArgs(process.argv.slice(2));
66
53
  if (opts.command === "docs") {
67
54
  if (opts.docsCheck) checkDocs();
68
55
  else syncDocs();
@@ -1,6 +1,7 @@
1
1
  # ADVANCED_UX_PATTERNS.md — UX Avançada Declarativa no OonCore
2
2
 
3
- Este documento orienta Agents a usarem o máximo de recursos do OonCore antes de criar telas customizadas. O foco é transformar padrões recorrentes de sistemas operacionais em **manifesto declarativo** e componentes reutilizáveis.
3
+ Este documento orienta Agents a usarem os componentes públicos do OonCore e a
4
+ composição code-first antes de recriar padrões operacionais.
4
5
 
5
6
  ## Objetivo
6
7
 
@@ -22,7 +23,7 @@ Caso de referência: `OrcamentoProjeto -> OrcamentoItem -> Pagamento`.
22
23
 
23
24
  Antes de criar uma página React customizada, verifique se a necessidade pode ser resolvida por:
24
25
 
25
- 1. `collections[]` no `central.ui.json`.
26
+ 1. Views `collection` em `defineOonApp({ ui })`.
26
27
  2. `list.filters` e `list.rowActions`.
27
28
  3. `detailModal.tabs`.
28
29
  4. `form.groups`.
package/docs/AGENTS.md CHANGED
@@ -8,7 +8,7 @@ Este arquivo é o contrato inicial neutro para Codex, ChatGPT, Kimi, Manus e out
8
8
  2. Confirme `schemaVersion`, `version`, `docsHash` e `entrypointsHash` em `.ooncore/manifest.json`.
9
9
  3. Rode `npm run ooncore:docs:check`; se falhar, rode `npm run ooncore:docs` e verifique novamente.
10
10
  4. Consulte `docs/CAPABILITIES.md` antes de criar código.
11
- 5. Leia os contratos de backend, frontend, runtime, RBAC ou integração indicados abaixo.
11
+ 5. Leia os contratos de backend, frontend, runtime ou RBAC indicados abaixo.
12
12
  6. Leia a documentação de domínio do projeto consumidor.
13
13
 
14
14
  O `AGENTS.md` da raiz pertence ao projeto e nunca pode ser sobrescrito pelo scaffold ou pelo sync do Core.
@@ -18,17 +18,16 @@ O `AGENTS.md` da raiz pertence ao projeto e nunca pode ser sobrescrito pelo scaf
18
18
  | Tarefa | Leitura obrigatória |
19
19
  |---|---|
20
20
  | Domínio, models, validações e fórmulas | `BACKEND_API.md`, `BACKEND_DOMAIN_MANIFEST.md`, `BACKEND_PATTERNS.md`, `REACTIVE_DOMAIN_FORMULAS.md` |
21
- | CRUD, metadata e UI | `METADATA_CRUD_UI.md`, `FRONTEND_API.md`, `FRONTEND_MANIFEST_REFERENCE.md` |
21
+ | CRUD, metadata e UI | `METADATA_CRUD_UI.md`, `FRONTEND_API.md`, `FRONTEND_CODE_FIRST.md` |
22
22
  | Auth, ativação, tenant ou permissões | `AUTH_ACTIVATION_RBAC.md`, `RBAC_SECURITY.md`, `DO_AND_DONT.md` |
23
23
  | Execução local | `RUNTIME_MODES.md`, `LOCAL_DEVELOPMENT.md`, `LOCAL_SECURITY_BOUNDARY.md` |
24
24
  | Rotas, hooks, jobs e filas | `ROUTES_HOOKS_WORKERS.md`, `BACKEND_PATTERNS.md` |
25
- | Integrações | `CONNECTORS_AND_INTEGRATIONS.md`, `LOCAL_SECURITY_BOUNDARY.md` |
26
25
  | Upgrade do Core | `CORE_UPGRADE.md`, `TESTING_CONFORMANCE.md`, `releases/0.5.0.md` |
27
26
  | UX avançada | `ADVANCED_UX_PATTERNS.md`, `DETAIL_MODAL_AND_RELATED_GRIDS.md`, `PORTAL_COCKPIT_PATTERNS.md` |
28
27
 
29
28
  ## Fronteira obrigatória
30
29
 
31
- - A Central declara domínio e experiência; o Core fornece bootstrap, autenticação, ativação, RBAC, tenant, CRUD, metadata, shell, componentes genéricos, integração operacional e deployment.
30
+ - O App declara domínio e experiência em código; o Core fornece bootstrap, autenticação, ativação, RBAC, tenant, CRUD, metadata, shell, componentes genéricos e deployment.
32
31
  - Use somente exports públicos documentados. Arquivos internos de `src/` não são contrato de extensão.
33
32
  - Autorização, tenant e regras que alteram dados são sempre validados no backend.
34
33
  - Não crie autenticação, ativação, RBAC, CRUD, shell, registry ou infraestrutura paralelos.
@@ -7,7 +7,7 @@ Importe exclusivamente de `@oondemand/oon-core-back`. Caminhos internos não tê
7
7
  - `start(options)`: carrega a Central, conecta Mongo, inicializa capabilities e inicia HTTP. `options.listen=false` devolve somente o app.
8
8
  - `createApp()`: cria o Express já protegido e com rotas do Core.
9
9
  - `activate()`: fluxo legado de ativação; não é usado no runtime local.
10
- - `defineCentral`, `defineModel`, `defineCollection`, `defineDocument`, `definePipeline`, `defineOmieMapping`, `defineRoutes`, `defineValidation`, `defineTrigger`: extensões imperativas suportadas.
10
+ - `defineCentral`, `defineModel`, `defineCollection`, `defineDocument`, `definePipeline`, `defineRoutes`, `defineValidation`, `defineTrigger`: extensões imperativas suportadas.
11
11
  - `fields`: factories de campos compatíveis com schema e metadata.
12
12
  - `registry`: registry do processo; use APIs `define*`, não mutações internas.
13
13
 
@@ -27,10 +27,8 @@ Importe exclusivamente de `@oondemand/oon-core-back`. Caminhos internos não tê
27
27
 
28
28
  Erros de manifesto carregam `code`, `statusCode` e `issues[]` com `path` e `message`.
29
29
 
30
- ## Integrações e capabilities
30
+ ## Capabilities
31
31
 
32
- - `integrations`, `registerIntegrationProvider`, `enqueueIntegration`, `receiveIntegrationWebhook`.
33
- - `omie`, `omieModule`, `createOmieClient`, `OmieApiError`, `enqueueOmieCall`, `ensureOmieProviderRegistered`, `collectOmieDefinitions`, `describeOmieDefinitions`, `saveOmieConfiguration`, `listOmieConfigurations`, `testOmieConnection`.
34
32
  - `capabilities`, `PdfRenderingError`, `TransactionalEmailError`.
35
33
  - `operationalRequestHeaders(options)`: headers de identidade do Deployment. Retorna `LOCAL_OPERATION_NOT_SUPPORTED` no runtime local; nunca improvise identidade local.
36
34
 
@@ -16,7 +16,6 @@ backend/
16
16
  ├── mappings/
17
17
  ├── documents/
18
18
  ├── pipelines/
19
- ├── integrations/
20
19
  ├── routes/
21
20
  ├── controllers/
22
21
  └── services/
@@ -24,7 +23,7 @@ backend/
24
23
 
25
24
  ## Models
26
25
 
27
- Use models para declarar entidades de negócio. Cada model deve ser pequeno, com nomes claros e campos compatíveis com as telas e integrações.
26
+ Use models para declarar entidades de negócio. Cada model deve ser pequeno, com nomes claros e campos compatíveis com as telas e processos.
28
27
 
29
28
  Boas práticas:
30
29
 
@@ -6,7 +6,7 @@ Ele complementa:
6
6
 
7
7
  - `central.app.json`: identidade, módulos e capabilities da aplicação;
8
8
  - `backend/central.domain.json`: models, campos, fórmulas do próprio registro e validações locais;
9
- - `frontend/central.ui.json`: projeção visual, coleções, esteiras e ações exibidas.
9
+ - `frontend/src/app`: composição code-first de coleções, esteiras e ações exibidas.
10
10
 
11
11
  O manifesto de processos é carregado **depois** do domínio. Por isso, toda model e todo campo citados precisam existir em `central.domain.json`.
12
12
 
@@ -51,16 +51,16 @@ O runtime não executa JavaScript, `eval`, nomes de funções ou módulos inform
51
51
  }
52
52
  ],
53
53
  "lockedFieldsByStage": {
54
- "Enviado para Omie": ["valor", "projetoId", "projetoItemId"],
54
+ "Enviado para pagamento": ["valor", "projetoId", "projetoItemId"],
55
55
  "Pagamento Ok": ["valor", "projetoId", "projetoItemId"]
56
56
  },
57
57
  "lockedMessage": "Os dados de negócio ficam bloqueados nesta etapa.",
58
58
  "onEnter": [
59
59
  {
60
- "stage": "Enviado para Omie",
60
+ "stage": "Enviado para pagamento",
61
61
  "set": {
62
62
  "statusTrabalho": "Trabalhando",
63
- "omieStatusIntegracao": "Pendente"
63
+ "statusPagamento": "Pendente"
64
64
  }
65
65
  }
66
66
  ],
@@ -69,7 +69,7 @@ O runtime não executa JavaScript, `eval`, nomes de funções ou módulos inform
69
69
  "when": {
70
70
  "op": "eq",
71
71
  "args": [
72
- { "field": "omieLiquidado" },
72
+ { "field": "pagamentoLiquidado" },
73
73
  { "value": true }
74
74
  ]
75
75
  },
@@ -253,4 +253,4 @@ Permanece na Central:
253
253
  - integrações e mapeamentos particulares;
254
254
  - mensagens e condições próprias do processo.
255
255
 
256
- A Central declara essas particularidades usando o contrato; não reimplementa o mecanismo.
256
+ A Central declara essas particularidades usando o contrato; não reimplementa o mecanismo.
@@ -4,7 +4,7 @@ Consulte este catálogo antes de criar infraestrutura ou componentes customizado
4
4
 
5
5
  | Capacidade | Backend | Frontend | Declaração/extensão | Local | Plataforma |
6
6
  |---|---|---|---|---|---|
7
- | Models e CRUD | `defineModel`, domain manifest, `/core/*` | `CoreCollection`, hooks de API | `central.domain.json`, `central.ui.json` | Sim | Sim |
7
+ | Models e CRUD | `defineModel`, domain manifest, `/core/*` | `CoreCollection`, hooks de API | `central.domain.json`, composição code-first | Sim | Sim |
8
8
  | Metadata | registry e `/core/metadata` | `useCoreMetadata`, renderers | models/domain manifest | Sim | Sim |
9
9
  | Validações e fórmulas | `defineValidation`, domain rules | prévia reativa | domain manifest/validation | Sim | Sim |
10
10
  | Esteiras | process manifest/runtime | `CorePipeline` | `central.process.json`, UI manifest | Sim | Sim |
@@ -14,8 +14,7 @@ Consulte este catálogo antes de criar infraestrutura ou componentes customizado
14
14
  | Tenant e escopo | access context e scope helpers | `TenantProvider` | `central.app.json` | Contexto técnico | Contexto autorizado |
15
15
  | Auditoria | CRUD e request context | headers do SDK | automática/extensão | Local | Operacional |
16
16
  | Rotas customizadas | `defineRoutes` | página/ação declarada | `backend/src/routes` | Sim | Sim |
17
- | Jobs e workers | process/integration workers | status operacional | manifestos/hooks | Sim | Sim |
18
- | Integrações | runtime/provider registry | `CoreIntegration` | mapping/provider suportado | Dublê ou credencial local | Credencial operacional |
17
+ | Jobs e workers | process workers | status operacional | manifestos/hooks | Sim | Sim |
19
18
  | E-mail transacional | capability nativa | `CoreTransactionalEmail` | capability settings | Dublê/local | Provider configurado |
20
19
  | PDF | capability nativa | consumo por ação | capability contract | Dublê/local | Provider configurado |
21
20
  | Publicação/promoção | contratos de delivery | indisponível no App | CLI/ponte pública | Não | Sim |
@@ -11,7 +11,7 @@ Use este checklist antes de concluir qualquer tarefa de codificação em uma Cen
11
11
 
12
12
  ## Backend
13
13
 
14
- - [ ] Usei model, validation, trigger, hook, mapping ou integration quando aplicável.
14
+ - [ ] Usei model, validation, trigger, hook ou mapping quando aplicável.
15
15
  - [ ] Evitei recriar CRUD.
16
16
  - [ ] Validei entrada.
17
17
  - [ ] Validei permissão no backend.
@@ -21,9 +21,9 @@ Use este checklist antes de concluir qualquer tarefa de codificação em uma Cen
21
21
 
22
22
  ## Frontend
23
23
 
24
- - [ ] Usei `central.ui.json` antes de criar componente customizado.
25
- - [ ] Evitei recriar shell, rotas, menu, datagrid ou form.
26
- - [ ] Usei override apenas quando necessário.
24
+ - [ ] Defini o App com `defineOonApp` e `startOonApp`.
25
+ - [ ] Reutilizei shell, guards, primitives e padrões públicos do Core.
26
+ - [ ] Mantive rotas, navegação, páginas, layouts e temas no código do App.
27
27
  - [ ] Não coloquei regra crítica apenas no frontend.
28
28
 
29
29
  ## Integrações
@@ -1,34 +1,31 @@
1
1
  # API pública do `@oondemand/oon-core-front`
2
2
 
3
- Importe exclusivamente da raiz do pacote.
3
+ O contrato principal do frontend é code-first.
4
4
 
5
- ## Bootstrap e manifestos
5
+ ## Bootstrap
6
6
 
7
- - `start`, `oonCoreFront.start`: inicialização com configuração completa.
8
- - `startFromManifest`, `startCentralFromManifest`, `manifestToConfig`: caminho preferencial para uma Central declarativa.
9
- - Tipos: `CentralUiManifest`, `CentralAppManifest`, `CentralManifestBundle`, `CentralUiOnlyManifest`, `ManifestRuntime`.
10
- - `ManifestRuntime.runtimeMode`: `local` usa sessão HttpOnly; `platform` usa o contrato de autenticação publicado.
7
+ - `defineOonApp`: define identidade, API, rotas, navegação, shell, layouts, páginas, componentes e temas.
8
+ - `startOonApp`: valida e monta o App React.
9
+ - `defineOonRoutes`, `defineOonNavigation`: helpers tipados para composição local.
11
10
 
12
- ## Views e componentes
11
+ ## Subpaths públicos
13
12
 
14
- - Definições: `defineCollectionView`, `defineDocumentView`, `definePipelineView`, `defineDashboard`, `defineOonModule`.
15
- - Componentes: `CoreCollection`, `CoreDocument`, `CorePipeline`, `CoreIntegration`, `CoreCurrency`, `CoreAssistant`, `CoreDashboard`, `CoreUsersAccess`, `CoreTransactionalEmail`, `CorePage`.
16
- - Primitivas UI v2: `CorePageHeader`, `CoreToolbar`, `CoreDataGrid`, `CoreCards`, `CoreForm`, `CoreField`, `CoreRelationField`, `CoreActions`, `CoreEmptyState`, `CoreLoadingState`.
17
- - Registre componentes customizados por chave em `registry`; não serialize React no JSON.
13
+ - `/ui`: primitives, padrões e componentes de domínio;
14
+ - `/routing`: rotas, navegação e helpers;
15
+ - `/theme`: temas, tokens e seleção em runtime;
16
+ - `/hooks`: hooks de autenticação, tenant, API e metadata;
17
+ - `/testing`: utilitários de teste.
18
18
 
19
- ## Hooks, sessão e autorização
19
+ ## Segurança
20
20
 
21
- - `useOonAuth`, `can`, `PermissionGate`, `Can`: experiência baseada em permissões já resolvidas pelo backend.
22
- - `useOonTenant`, `createTenantStorage`: seleção de tenant; o backend continua sendo a autoridade.
23
- - `useOonApi`, `useOonResource`, `useCoreMetadata`, `useModelSchema`: acesso HTTP/metadata padronizado.
24
- - O runtime local não grava bearer no `localStorage`, envia cookie com `withCredentials` e usa CSRF double-submit nas mutações.
21
+ - `useOonAuth`, `can`, `PermissionGate`, `Can`: permissões resolvidas pelo backend;
22
+ - `useOonTenant`, `createTenantStorage`: contexto tenant quando aplicável;
23
+ - `useOonApi`, `useOonResource`, `useCoreMetadata`, `useModelSchema`: acesso padronizado;
24
+ - rotas reservadas e guards obrigatórios pertencem ao Core.
25
25
 
26
- ## Domínio reativo
26
+ ## Domínio e UI
27
27
 
28
- - `DomainExpressionError`, `evaluateDomainExpression`, `applyReactiveFormulas`, `buildDomainMutationPayload`, `coerceDomainFormValue`.
29
- - Tipos `OonDomainExpression`, `OonComputedFieldDefinition`, `OonReactiveFormField` e `ReactiveFormulaResult`.
30
- - A prévia do frontend nunca substitui o recálculo e a validação do backend.
28
+ Views declarativas continuam disponíveis como composição opcional dentro do
29
+ objeto App. Componentes, páginas e layouts locais podem ser usados em qualquer
30
+ `appKind`. Consulte `FRONTEND_CODE_FIRST.md`.
31
31
 
32
- ## Tipos públicos
33
-
34
- Os tipos exportados incluem config, app, auth, runtime, módulos, rotas, menus, UI v1/v2, layout, registry, páginas, blocos, ações, views, campos, metadata, paginação, erros e usuário. Consulte `dist/index.d.ts` da versão instalada quando precisar da assinatura exata; ele faz parte do pacote público.
@@ -0,0 +1,35 @@
1
+ # Frontend code-first
2
+
3
+ O frontend de todo App Oon é composto em TypeScript/React. O `appKind` não
4
+ limita páginas, componentes, layouts ou temas locais.
5
+
6
+ ```tsx
7
+ import { defineOonApp, startOonApp } from "@oondemand/oon-core-front";
8
+ import { defineOonNavigation, defineOonRoutes } from "@oondemand/oon-core-front/routing";
9
+ import { HomePage } from "./pages/HomePage";
10
+
11
+ const routes = defineOonRoutes([{ path: "/", element: <HomePage /> }]);
12
+ const navigation = defineOonNavigation([{ id: "home", label: "Início", to: "/" }]);
13
+
14
+ startOonApp(defineOonApp({
15
+ app: { id: "meu-app", name: "Meu App" },
16
+ api: { baseUrl: import.meta.env.VITE_API_URL },
17
+ routes,
18
+ navigation,
19
+ }));
20
+ ```
21
+
22
+ Rotas aceitam `element`, `component`, `lazy`, `layout`, `permissions` e
23
+ `capabilities`. Rotas de autenticação e estados de ativação são reservadas.
24
+
25
+ Use os subpaths públicos:
26
+
27
+ - `@oondemand/oon-core-front/ui` para primitives e padrões;
28
+ - `@oondemand/oon-core-front/routing` para rotas e navegação;
29
+ - `@oondemand/oon-core-front/theme` para temas;
30
+ - `@oondemand/oon-core-front/hooks` para hooks;
31
+ - `@oondemand/oon-core-front/testing` para testes.
32
+
33
+ Não carregue código remoto, não desative guards, não exponha segredos no bundle
34
+ e não importe arquivos internos do pacote. Rode `npm run ooncore:conformance`.
35
+
@@ -1,27 +1,28 @@
1
1
  # Padrões Frontend
2
2
 
3
- O frontend da Central deve ser declarativo. Shell, providers, rotas, menu, datagrid, formulários, documentos, esteiras, modais de detalhe e grids relacionados pertencem ao `@oondemand/oon-core-front`.
3
+ O frontend do App é code-first. Shell, providers e guards pertencem ao
4
+ `@oondemand/oon-core-front`; rotas, navegação, páginas, componentes, layouts e
5
+ temas são compostos localmente com as APIs públicas do Core.
4
6
 
5
- Para a lista completa de opções do manifesto, use `FRONTEND_MANIFEST_REFERENCE.md`.
7
+ Para o contrato completo, use `FRONTEND_CODE_FIRST.md`.
6
8
  Para UX avançada com abas e itens relacionados, use também `ADVANCED_UX_PATTERNS.md` e `DETAIL_MODAL_AND_RELATED_GRIDS.md`.
7
9
 
8
10
  ## Estrutura esperada
9
11
 
10
12
  ```txt
11
13
  frontend/
12
- ├── central.ui.json
13
14
  └── src/
14
15
  ├── main.tsx
15
- ├── collections/
16
- ├── documents/
17
- ├── pipelines/
18
- ├── dashboards/
19
- └── overrides/
16
+ ├── app/{app,routes,navigation,theme}.tsx
17
+ ├── pages/
18
+ ├── components/
19
+ ├── features/
20
+ └── layouts/
20
21
  ```
21
22
 
22
- ## central.ui.json
23
+ ## Composição
23
24
 
24
- Use `central.ui.json` como entrada principal para declarar:
25
+ Use o objeto criado por `defineOonApp` para compor:
25
26
 
26
27
  - menu;
27
28
  - coleções;
@@ -43,11 +44,8 @@ Use `central.ui.json` como entrada principal para declarar:
43
44
  - edição inline;
44
45
  - ações por linha.
45
46
 
46
- ## Manifesto v1 e v2
47
-
48
- - Manifesto sem `schemaVersion` mantém compatibilidade v1.
49
- - Manifesto com `schemaVersion: 2` habilita composição por `layout`, `navigation`, `pages`, `blocks`, coleções avançadas e componentes declarativos.
50
- - Componentes React não devem ser serializados no JSON; use chaves e registre os componentes no `registry` em TypeScript.
47
+ Views e blocos declarativos continuam opcionais para telas simples, dentro do
48
+ objeto code-first. Componentes React são registrados diretamente em TypeScript.
51
49
 
52
50
  ## Padrão de tela operacional
53
51
 
@@ -3,7 +3,7 @@
3
3
  1. `central.domain.json` ou `defineModel` registra model, campos, CRUD, roles e metadata.
4
4
  2. O backend expõe `/core/metadata`, `/core/models` e o router CRUD do `basePath`.
5
5
  3. Escopo de tenant/usuário, validação, fórmulas, referência, auditoria e triggers são aplicados no servidor.
6
- 4. `central.ui.json` declara coleções, formulários, filtros, relações, esteiras, documentos e dashboards.
6
+ 4. O objeto code-first do App compõe coleções, formulários, filtros, relações, esteiras, documentos e dashboards.
7
7
  5. O frontend consulta metadata e monta componentes do Core.
8
8
 
9
9
  O CRUD padrão inclui listagem paginada, leitura, criação, atualização parcial, exclusão e import/export quando habilitados. Use rota customizada somente quando a operação não puder ser representada por CRUD, ação declarativa ou processo.