@oondemand/create-central-oon 0.3.8 → 0.3.10

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.
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # @oondemand/create-central-oon
2
2
 
3
- 📖 **[Documentação completa → ooncoredoc.vercel.app](https://ooncoredoc.vercel.app)**
4
-
5
3
  Gerador de **Centrais Oon**. Cria, a partir do nome da Central, um `backend/` de domínio e um `frontend/` declarativo prontos para consumir o Core (`@oondemand/oon-core-back` e `@oondemand/oon-core-front`).
6
4
 
5
+ > A documentação pública pode existir para consulta, mas a fonte de verdade para codificação assistida fica dentro deste pacote npm, versionada junto com o gerador.
6
+
7
7
  Toda Central gerada nasce com o padrão visual e operacional consolidado na **Central Minexco**:
8
8
 
9
9
  - identidade visual Oon/CST com Poppins, azul `#0474AF` e fundo `#F8F9FA`;
@@ -36,6 +36,57 @@ Aliases: o binário também responde por `scaffold-central-oon`.
36
36
  | `--no-install` | Não roda `npm install` nos projetos gerados. |
37
37
  | `--list` | Lista os templates e sai. |
38
38
 
39
+ ## Documentação interna para Codex
40
+
41
+ O pacote inclui documentação canônica em `docs/`. Ela é publicada no npm junto com o gerador.
42
+
43
+ A referência completa das opções do manifesto front fica em:
44
+
45
+ ```txt
46
+ packages/create-central-oon/docs/FRONTEND_MANIFEST_REFERENCE.md
47
+ ```
48
+
49
+ Ao criar uma Central, o CLI gera uma pasta `.ooncore/` com um cache local da documentação da versão instalada:
50
+
51
+ ```txt
52
+ <central>/
53
+ └── .ooncore/
54
+ ├── CODEX.md
55
+ ├── context.generated.md
56
+ ├── manifest.json
57
+ └── docs/
58
+ ```
59
+
60
+ A pasta `.ooncore/` não é a fonte de verdade. Ela é apenas o contexto local para o Codex trabalhar sem depender de site externo.
61
+
62
+ ### Sincronizar documentação local
63
+
64
+ Na raiz da Central:
65
+
66
+ ```bash
67
+ npm run ooncore:docs
68
+ ```
69
+
70
+ ou diretamente:
71
+
72
+ ```bash
73
+ npx create-central-oon docs --sync
74
+ ```
75
+
76
+ ### Verificar se está atualizada
77
+
78
+ ```bash
79
+ npm run ooncore:docs:check
80
+ ```
81
+
82
+ ou diretamente:
83
+
84
+ ```bash
85
+ npx create-central-oon docs --check
86
+ ```
87
+
88
+ O check compara a versão e o hash da documentação local com a versão instalada do pacote.
89
+
39
90
  ## Templates funcionais
40
91
 
41
92
  Todos utilizam o mesmo frontend padrão Minexco.
@@ -55,6 +106,8 @@ Todos utilizam o mesmo frontend padrão Minexco.
55
106
  ```txt
56
107
  <central>/
57
108
  ├── README.md
109
+ ├── package.json # scripts de sync/check da documentação OonCore
110
+ ├── .ooncore/ # cache local gerado a partir do pacote instalado
58
111
  ├── backend/ # consome @oondemand/oon-core-back
59
112
  │ ├── central.config.js # identidade + módulos + paths de domínio
60
113
  │ ├── central.manifest.json # valores de deploy (render no Core)
@@ -70,8 +123,11 @@ Todos utilizam o mesmo frontend padrão Minexco.
70
123
  ## Próximos passos após gerar
71
124
 
72
125
  ```bash
73
- cd <central>/backend && cp .env.example .env && npm run dev
74
- cd ../frontend && cp .env.example .env && npm run dev
126
+ cd <central>
127
+ npm run ooncore:docs:check
128
+
129
+ cd backend && cp .env.example .env && npm run dev
130
+ cd ../frontend && cp .env.example .env && npm run dev
75
131
  ```
76
132
 
77
133
  Evoluir a Central significa criar models em `backend/src/models` e declarar as telas em `frontend/central.ui.json`. Menu, rotas, datagrids, formulários e esteiras são montados pelo Core mantendo o padrão Minexco.
package/bin/cli.js CHANGED
@@ -2,9 +2,11 @@
2
2
  "use strict";
3
3
 
4
4
  /**
5
- * CLI do create-central-oon (Fase 4 — Seção 5/25).
5
+ * CLI do create-central-oon.
6
6
  *
7
7
  * npx create-central-oon <nome-da-central> [opções]
8
+ * npx create-central-oon docs --sync
9
+ * npx create-central-oon docs --check
8
10
  *
9
11
  * Opções:
10
12
  * --template=<t> Template inicial (default: basic). Veja --list.
@@ -12,26 +14,62 @@
12
14
  * --force Sobrescreve pasta existente.
13
15
  * --no-install Não roda npm install nos projetos gerados.
14
16
  * --list Lista os templates disponíveis e sai.
17
+ *
18
+ * Documentação:
19
+ * docs --sync Gera/atualiza .ooncore/ com a documentação da versão instalada.
20
+ * docs --check Valida se .ooncore/ está sincronizado com a versão instalada.
15
21
  */
16
22
 
17
- const { run, listTemplates } = require("../src/index");
23
+ const { run, listTemplates, syncDocs, checkDocs } = require("../src/index");
18
24
 
19
25
  function parseArgs(argv) {
20
- const opts = { template: "basic", here: false, force: false, install: true, list: false };
26
+ const opts = {
27
+ command: null,
28
+ template: "basic",
29
+ here: false,
30
+ force: false,
31
+ install: true,
32
+ list: false,
33
+ docsSync: false,
34
+ docsCheck: false,
35
+ };
21
36
  const positionals = [];
22
- for (const arg of argv) {
37
+
38
+ for (let i = 0; i < argv.length; i += 1) {
39
+ const arg = argv[i];
40
+
23
41
  if (arg === "--here") opts.here = true;
24
42
  else if (arg === "--force") opts.force = true;
25
43
  else if (arg === "--no-install") opts.install = false;
26
44
  else if (arg === "--list") opts.list = true;
45
+ else if (arg === "--sync") opts.docsSync = true;
46
+ else if (arg === "--check") opts.docsCheck = true;
27
47
  else if (arg.startsWith("--template=")) opts.template = arg.slice("--template=".length);
28
- else if (arg === "--template") opts.template = argv[argv.indexOf(arg) + 1];
29
- else if (!arg.startsWith("-")) positionals.push(arg);
48
+ else if (arg === "--template") {
49
+ opts.template = argv[i + 1];
50
+ i += 1;
51
+ } else if (!arg.startsWith("-")) {
52
+ positionals.push(arg);
53
+ }
30
54
  }
31
- opts.name = positionals[0];
55
+
56
+ if (positionals[0] === "docs") {
57
+ opts.command = "docs";
58
+ } else {
59
+ opts.name = positionals[0];
60
+ }
61
+
32
62
  return opts;
33
63
  }
34
64
 
65
+ function printUsage() {
66
+ console.error("Uso:");
67
+ console.error(" npx create-central-oon <nome-da-central> [--template=basic]");
68
+ console.error(" npx create-central-oon --list");
69
+ console.error(" npx create-central-oon docs --sync");
70
+ console.error(" npx create-central-oon docs --check");
71
+ }
72
+
35
73
  async function main() {
36
74
  const opts = parseArgs(process.argv.slice(2));
37
75
 
@@ -41,13 +79,21 @@ async function main() {
41
79
  process.exit(0);
42
80
  }
43
81
 
44
- if (!opts.name) {
45
- console.error("Uso: npx create-central-oon <nome-da-central> [--template=basic]");
46
- console.error(" npx create-central-oon --list");
47
- process.exit(1);
48
- }
49
-
50
82
  try {
83
+ if (opts.command === "docs") {
84
+ if (opts.docsCheck) {
85
+ checkDocs();
86
+ } else {
87
+ syncDocs();
88
+ }
89
+ return;
90
+ }
91
+
92
+ if (!opts.name) {
93
+ printUsage();
94
+ process.exit(1);
95
+ }
96
+
51
97
  await run(opts);
52
98
  } catch (err) {
53
99
  console.error("\n✖", err.message);
@@ -0,0 +1,87 @@
1
+ # Padrões Backend
2
+
3
+ O backend da Central deve conter apenas domínio e extensões. Boot, infraestrutura, CRUD padrão, autenticação, RBAC e metadata pertencem ao `@oondemand/oon-core-back`.
4
+
5
+ ## Estrutura esperada
6
+
7
+ ```txt
8
+ backend/
9
+ ├── central.config.js
10
+ ├── central.manifest.json
11
+ └── src/
12
+ ├── models/
13
+ ├── validations/
14
+ ├── triggers/
15
+ ├── hooks/
16
+ ├── mappings/
17
+ ├── documents/
18
+ ├── pipelines/
19
+ ├── integrations/
20
+ ├── routes/
21
+ ├── controllers/
22
+ └── services/
23
+ ```
24
+
25
+ ## Models
26
+
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.
28
+
29
+ Boas práticas:
30
+
31
+ - use campos explícitos;
32
+ - defina tipos, obrigatoriedade e enums quando aplicável;
33
+ - preserve campos de status para esteiras;
34
+ - evite regras complexas diretamente no schema;
35
+ - evite dependência direta de frontend.
36
+
37
+ ## Validations
38
+
39
+ Use validations para regras de negócio síncronas e mensagens claras para o usuário.
40
+
41
+ Exemplos:
42
+
43
+ - campo obrigatório condicional;
44
+ - status permitido para transição;
45
+ - valor mínimo/máximo;
46
+ - combinação inválida de campos;
47
+ - bloqueio por permissão ou perfil.
48
+
49
+ ## Triggers e hooks
50
+
51
+ Use triggers e hooks para efeitos controlados depois ou antes de alterações.
52
+
53
+ Exemplos:
54
+
55
+ - criar ticket de integração;
56
+ - recalcular campos derivados;
57
+ - gerar histórico operacional;
58
+ - disparar conector;
59
+ - atualizar etapa da esteira.
60
+
61
+ Regras:
62
+
63
+ - trigger não deve esconder regra crítica sem validação;
64
+ - evite efeitos irreversíveis sem log;
65
+ - integração externa deve passar por camada de integração/conector;
66
+ - falhas de integração devem gerar status rastreável, não quebrar silenciosamente o processo.
67
+
68
+ ## Rotas customizadas
69
+
70
+ Crie rotas customizadas somente quando o CRUD/metadata do Core não resolver.
71
+
72
+ Toda rota customizada deve ter:
73
+
74
+ - autenticação;
75
+ - verificação de permissão;
76
+ - validação de entrada;
77
+ - tratamento de erro;
78
+ - resposta padronizada;
79
+ - ausência de segredo hardcoded.
80
+
81
+ ## Serviços
82
+
83
+ Use `services/` para regras reutilizáveis. Evite controllers grandes.
84
+
85
+ ## Segurança
86
+
87
+ Nunca confie no frontend para permissão, tenant, app ou perfil. O backend deve validar tudo que altera dados, dispara integrações ou expõe informações sensíveis.
@@ -0,0 +1,41 @@
1
+ # Checklist de Implementação
2
+
3
+ Use este checklist antes de concluir qualquer tarefa de codificação em uma Central Oon.
4
+
5
+ ## Contexto
6
+
7
+ - [ ] Rodei `npm run ooncore:docs:check`.
8
+ - [ ] Rodei `npm run ooncore:docs` se havia documentação desatualizada.
9
+ - [ ] Li `.ooncore/context.generated.md`.
10
+ - [ ] Entendi qual recurso do Core já resolve parte da necessidade.
11
+
12
+ ## Backend
13
+
14
+ - [ ] Usei model, validation, trigger, hook, mapping ou integration quando aplicável.
15
+ - [ ] Evitei recriar CRUD.
16
+ - [ ] Validei entrada.
17
+ - [ ] Validei permissão no backend.
18
+ - [ ] Tratei erros.
19
+ - [ ] Não hardcodei segredos.
20
+ - [ ] Mantive rastreabilidade.
21
+
22
+ ## Frontend
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.
27
+ - [ ] Não coloquei regra crítica apenas no frontend.
28
+
29
+ ## Integrações
30
+
31
+ - [ ] Usei camada de integração/conector.
32
+ - [ ] Modelei mapping.
33
+ - [ ] Registrei status de integração.
34
+ - [ ] Normalizei erros externos.
35
+ - [ ] Não expus credenciais.
36
+
37
+ ## Entrega
38
+
39
+ - [ ] A Central continua atualizável com novas versões do Core.
40
+ - [ ] A alteração é pequena, coesa e aderente à arquitetura.
41
+ - [ ] O comportamento esperado está documentado no README ou no próprio módulo quando necessário.
package/docs/CODEX.md ADDED
@@ -0,0 +1,46 @@
1
+ # CODEX.md — Regras de Codificação OonCore
2
+
3
+ Este arquivo é a porta de entrada para o Codex codificar uma Central Oon.
4
+
5
+ A fonte de verdade desta documentação é a versão instalada do pacote `@oondemand/create-central-oon`. A pasta `.ooncore/` gerada em cada Central é apenas um cache local, criado por `create-central-oon docs --sync`.
6
+
7
+ ## Antes de codificar
8
+
9
+ 1. Rode `npm run ooncore:docs:check` na raiz da Central.
10
+ 2. Se estiver desatualizado, rode `npm run ooncore:docs`.
11
+ 3. Leia `.ooncore/context.generated.md`.
12
+ 4. Identifique o recurso do Core que resolve a necessidade antes de criar código customizado.
13
+
14
+ ## Princípios obrigatórios
15
+
16
+ - Escreva apenas o domínio da Central.
17
+ - Use `@oondemand/oon-core-back` para boot, autenticação, RBAC, CRUD, metadata, auditoria e padrões de API.
18
+ - Use `@oondemand/oon-core-front` para shell, rotas, menu, datagrid, formulários, badges, ações e renderização por metadata.
19
+ - Não recrie infraestrutura que já existe no Core.
20
+ - Não crie autenticação paralela.
21
+ - Não duplique RBAC no frontend.
22
+ - Não hardcode tenant, app, usuário, perfil, permissões, URLs sensíveis ou segredos.
23
+ - Não exponha chaves em código, templates ou documentação gerada.
24
+ - Não altere arquivos gerados do Core se houver extensão declarativa disponível.
25
+ - Prefira models, validations, triggers, hooks, mappings, documents, pipelines, integrations e overrides declarativos.
26
+
27
+ ## Ordem de decisão
28
+
29
+ Ao implementar uma necessidade, siga esta ordem:
30
+
31
+ 1. Configuração existente do Core.
32
+ 2. Declaração em `central.config.js` ou `central.ui.json`.
33
+ 3. Model, validation, trigger, hook ou mapping no backend da Central.
34
+ 4. Override local pequeno e isolado.
35
+ 5. Código customizado somente quando o Core não oferecer extensão adequada.
36
+
37
+ ## Entrega segura
38
+
39
+ Toda alteração deve manter:
40
+
41
+ - rastreabilidade;
42
+ - validação de entrada;
43
+ - RBAC no backend;
44
+ - ausência de segredo hardcoded;
45
+ - separação entre domínio da Central e infraestrutura do Core;
46
+ - compatibilidade com atualização futura dos pacotes `@oondemand/*`.
@@ -0,0 +1,66 @@
1
+ # Coleções, Documentos e Esteiras
2
+
3
+ Coleções, documentos e esteiras são a base operacional da Central Oon.
4
+
5
+ ## Coleções
6
+
7
+ Use coleções para entidades de negócio:
8
+
9
+ - clientes;
10
+ - fornecedores;
11
+ - pedidos;
12
+ - pagamentos;
13
+ - documentos fiscais;
14
+ - serviços tomados;
15
+ - serviços prestados;
16
+ - integrações;
17
+ - tickets operacionais.
18
+
19
+ Cada coleção deve ter:
20
+
21
+ - model no backend;
22
+ - metadata para CRUD;
23
+ - campos de status quando participar de esteira;
24
+ - validações de negócio;
25
+ - configuração de tela no frontend.
26
+
27
+ ## Documentos
28
+
29
+ Use documentos para entidades que exigem governança documental, aprovação, anexos ou histórico específico.
30
+
31
+ Exemplos:
32
+
33
+ - NF;
34
+ - contrato;
35
+ - proposta;
36
+ - comprovante;
37
+ - ordem de serviço;
38
+ - pedido de compra.
39
+
40
+ ## Esteiras de processo
41
+
42
+ Use esteiras para fluxos operacionais com etapas claras.
43
+
44
+ Boas práticas:
45
+
46
+ - status/etapa deve estar no backend;
47
+ - transições devem ser validadas;
48
+ - ações devem registrar usuário e data;
49
+ - exceções devem ter status próprio;
50
+ - cada etapa deve representar uma decisão operacional real.
51
+
52
+ ## Esteiras de integração
53
+
54
+ Use esteiras de integração para acompanhar comunicação com sistemas externos.
55
+
56
+ Estados recomendados:
57
+
58
+ - pendente;
59
+ - em processamento;
60
+ - enviado;
61
+ - concluído;
62
+ - falha;
63
+ - aguardando retry;
64
+ - cancelado.
65
+
66
+ Integrações não devem ser caixas-pretas. O usuário operacional precisa enxergar o que aconteceu, qual erro ocorreu e qual ação pode ser tomada.
@@ -0,0 +1,66 @@
1
+ # Conectores e Integrações
2
+
3
+ Toda integração deve ser modelada como um processo rastreável, não como chamada solta dentro de controller.
4
+
5
+ ## Objetivo
6
+
7
+ Transformar cada integração em:
8
+
9
+ ```txt
10
+ configuração + mapping + execução + status + rastreabilidade
11
+ ```
12
+
13
+ ## Estrutura recomendada
14
+
15
+ ```txt
16
+ backend/src/integrations/
17
+ ├── <sistema>/
18
+ │ ├── client.js
19
+ │ ├── mappings/
20
+ │ ├── services/
21
+ │ └── README.md
22
+ ```
23
+
24
+ ## Client
25
+
26
+ O client deve concentrar:
27
+
28
+ - URL base;
29
+ - autenticação;
30
+ - headers;
31
+ - timeout;
32
+ - retry técnico;
33
+ - normalização de erro.
34
+
35
+ Não coloque regra de negócio no client.
36
+
37
+ ## Mapping
38
+
39
+ Mappings devem transformar dados entre a Central e o sistema externo.
40
+
41
+ Regras:
42
+
43
+ - mapping deve ser explícito;
44
+ - campos obrigatórios devem ser validados antes do envio;
45
+ - resposta externa deve ser normalizada;
46
+ - erros devem ser compreensíveis para operação.
47
+
48
+ ## Esteira de integração
49
+
50
+ Toda integração relevante deve gerar registro operacional com:
51
+
52
+ - origem;
53
+ - destino;
54
+ - payload resumido ou referência;
55
+ - status;
56
+ - tentativas;
57
+ - erro normalizado;
58
+ - data/hora;
59
+ - usuário ou processo responsável.
60
+
61
+ ## Segurança
62
+
63
+ - Nunca versionar app key, secret, token ou credencial.
64
+ - Não logar payloads sensíveis sem necessidade.
65
+ - Não expor credenciais no frontend.
66
+ - Usar `.env` e configuração de ambiente.
@@ -0,0 +1,27 @@
1
+ # Do and Don't
2
+
3
+ ## Faça
4
+
5
+ - Use o Core antes de criar código novo.
6
+ - Modele o domínio com clareza.
7
+ - Prefira configuração e metadata.
8
+ - Escreva validações explícitas.
9
+ - Mantenha regras críticas no backend.
10
+ - Use esteiras para processos com status.
11
+ - Use conectores para integrações.
12
+ - Registre erros de forma operacional.
13
+ - Mantenha compatibilidade com atualização dos pacotes.
14
+ - Atualize `.ooncore/` com `npm run ooncore:docs`.
15
+
16
+ ## Não faça
17
+
18
+ - Não recrie CRUD.
19
+ - Não recrie autenticação.
20
+ - Não duplique RBAC no frontend.
21
+ - Não criar um frontend inteiro se um override resolve.
22
+ - Não chamar APIs externas direto de qualquer lugar.
23
+ - Não hardcode tenant, app, usuário, URL sensível ou segredo.
24
+ - Não colocar regra crítica apenas no frontend.
25
+ - Não ignorar logs e rastreabilidade.
26
+ - Não editar `.ooncore/context.generated.md` manualmente.
27
+ - Não depender de documentação externa para codificar a arquitetura.