@semacode/cli 1.5.11 → 1.5.16
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 +6 -1
- package/dist/index.js +446 -32
- package/package.json +23 -32
- package/semacode-cli-1.3.1.tgz +0 -0
- package/src/angular-consumer-standalone.ts +312 -0
- package/src/cpp-symbols.ts +82 -0
- package/src/docs.ts +535 -0
- package/src/dotnet-http.ts +355 -0
- package/src/drift.ts +4933 -0
- package/src/go-http.ts +118 -0
- package/src/importador.ts +3891 -0
- package/src/index.ts +5641 -0
- package/src/java-http.ts +247 -0
- package/src/lua-symbols.ts +114 -0
- package/src/php-symbols.ts +462 -0
- package/src/projeto.ts +862 -0
- package/src/python-http.ts +258 -0
- package/src/rust-http.ts +125 -0
- package/src/tipos.ts +24 -0
- package/src/typescript-http.ts +1076 -0
- package/tsconfig.json +20 -0
- package/AGENTS.md +0 -272
- package/LICENSE +0 -22
- package/SEMA_BRIEF.curto.txt +0 -9
- package/SEMA_BRIEF.md +0 -63
- package/SEMA_BRIEF.micro.txt +0 -7
- package/SEMA_INDEX.json +0 -799
- package/dist/angular-consumer-standalone.d.ts +0 -6
- package/dist/angular-consumer-standalone.js.map +0 -1
- package/dist/cpp-symbols.d.ts +0 -10
- package/dist/cpp-symbols.js.map +0 -1
- package/dist/docs.d.ts +0 -56
- package/dist/docs.js.map +0 -1
- package/dist/dotnet-http.d.ts +0 -23
- package/dist/dotnet-http.js.map +0 -1
- package/dist/drift.d.ts +0 -225
- package/dist/drift.js.map +0 -1
- package/dist/go-http.d.ts +0 -23
- package/dist/go-http.js.map +0 -1
- package/dist/importador.d.ts +0 -31
- package/dist/importador.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js.map +0 -1
- package/dist/java-http.d.ts +0 -23
- package/dist/java-http.js.map +0 -1
- package/dist/lua-symbols.d.ts +0 -10
- package/dist/lua-symbols.js.map +0 -1
- package/dist/php-symbols.d.ts +0 -24
- package/dist/php-symbols.js.map +0 -1
- package/dist/projeto.d.ts +0 -53
- package/dist/projeto.js.map +0 -1
- package/dist/python-http.d.ts +0 -23
- package/dist/python-http.js.map +0 -1
- package/dist/rust-http.d.ts +0 -23
- package/dist/rust-http.js.map +0 -1
- package/dist/tipos.d.ts +0 -3
- package/dist/tipos.js.map +0 -1
- package/dist/typescript-http.d.ts +0 -35
- package/dist/typescript-http.js.map +0 -1
- package/docs/AGENT_STARTER.md +0 -102
- package/docs/cli.md +0 -110
- package/docs/como-ensinar-a-sema-para-ia.md +0 -149
- package/docs/deploy.md +0 -70
- package/docs/documentacao.md +0 -63
- package/docs/env.md +0 -56
- package/docs/extensao-vscode.md +0 -45
- package/docs/fluxo-pratico-ia-sema.md +0 -177
- package/docs/instalacao-e-primeiro-uso.md +0 -112
- package/docs/integracao-com-ia.md +0 -101
- package/docs/mcp.md +0 -53
- package/docs/pagamento-ponta-a-ponta.md +0 -155
- package/docs/persistencia-vendor-first.md +0 -145
- package/docs/prompt-base-ia-sema.md +0 -104
- package/docs/rollback.md +0 -47
- package/docs/sintaxe.md +0 -244
- package/exemplos/agendamento.sema +0 -106
- package/exemplos/assinatura.sema +0 -136
- package/exemplos/auditoria.sema +0 -88
- package/exemplos/autenticacao.sema +0 -125
- package/exemplos/automacao.sema +0 -107
- package/exemplos/cadastro_usuario.sema +0 -54
- package/exemplos/calculadora.sema +0 -78
- package/exemplos/crud_simples.sema +0 -89
- package/exemplos/estoque.sema +0 -126
- package/exemplos/exportacao.sema +0 -94
- package/exemplos/fila.sema +0 -131
- package/exemplos/integracao_externa.sema +0 -94
- package/exemplos/multi_tenant.sema +0 -140
- package/exemplos/notificacao.sema +0 -98
- package/exemplos/operacao_estrategia.sema +0 -402
- package/exemplos/pagamento.sema +0 -222
- package/exemplos/pagamento_dominio.sema +0 -35
- package/exemplos/pedido.sema +0 -119
- package/exemplos/permissao.sema +0 -121
- package/exemplos/persistencia_vendor_first.sema +0 -86
- package/exemplos/relatorio.sema +0 -93
- package/exemplos/testes_embutidos.sema +0 -45
- package/exemplos/tratamento_erro.sema +0 -157
- package/exemplos/upload_arquivo.sema +0 -93
- package/exemplos/webhook.sema +0 -96
- package/llms-full.txt +0 -34
- package/llms.txt +0 -17
- package/node_modules/@sema/gerador-css/dist/index.d.ts +0 -3
- package/node_modules/@sema/gerador-css/dist/index.js +0 -592
- package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-css/package.json +0 -7
- package/node_modules/@sema/gerador-dart/dist/index.d.ts +0 -3
- package/node_modules/@sema/gerador-dart/dist/index.js +0 -44
- package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-dart/package.json +0 -7
- package/node_modules/@sema/gerador-html/dist/index.d.ts +0 -3
- package/node_modules/@sema/gerador-html/dist/index.js +0 -163
- package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-html/package.json +0 -7
- package/node_modules/@sema/gerador-javascript/dist/index.d.ts +0 -3
- package/node_modules/@sema/gerador-javascript/dist/index.js +0 -421
- package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-javascript/package.json +0 -7
- package/node_modules/@sema/gerador-lua/dist/index.d.ts +0 -3
- package/node_modules/@sema/gerador-lua/dist/index.js +0 -328
- package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-lua/package.json +0 -7
- package/node_modules/@sema/gerador-python/dist/index.d.ts +0 -6
- package/node_modules/@sema/gerador-python/dist/index.js +0 -729
- package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-python/package.json +0 -7
- package/node_modules/@sema/gerador-typescript/dist/index.d.ts +0 -6
- package/node_modules/@sema/gerador-typescript/dist/index.js +0 -793
- package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/package.json +0 -7
- package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +0 -123
- package/node_modules/@sema/nucleo/dist/ast/tipos.js +0 -2
- package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/index.d.ts +0 -21
- package/node_modules/@sema/nucleo/dist/diagnosticos/index.js +0 -12
- package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.d.ts +0 -9
- package/node_modules/@sema/nucleo/dist/formatador/index.js +0 -460
- package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/index.d.ts +0 -35
- package/node_modules/@sema/nucleo/dist/index.js +0 -96
- package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.d.ts +0 -5
- package/node_modules/@sema/nucleo/dist/ir/conversor.js +0 -883
- package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +0 -345
- package/node_modules/@sema/nucleo/dist/ir/modelos.js +0 -2
- package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/lexer/lexer.d.ts +0 -7
- package/node_modules/@sema/nucleo/dist/lexer/lexer.js +0 -122
- package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/lexer/tokens.d.ts +0 -8
- package/node_modules/@sema/nucleo/dist/lexer/tokens.js +0 -61
- package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.d.ts +0 -9
- package/node_modules/@sema/nucleo/dist/parser/parser.js +0 -771
- package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/persistencia/contratos.d.ts +0 -39
- package/node_modules/@sema/nucleo/dist/persistencia/contratos.js +0 -294
- package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +0 -57
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js +0 -1617
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +0 -104
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +0 -445
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/seguranca.d.ts +0 -91
- package/node_modules/@sema/nucleo/dist/semantico/seguranca.js +0 -258
- package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/util/arquivos.d.ts +0 -2
- package/node_modules/@sema/nucleo/dist/util/arquivos.js +0 -25
- package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
- package/node_modules/@sema/nucleo/package.json +0 -7
- package/node_modules/@sema/padroes/dist/index.d.ts +0 -25
- package/node_modules/@sema/padroes/dist/index.js +0 -316
- package/node_modules/@sema/padroes/dist/index.js.map +0 -1
- package/node_modules/@sema/padroes/package.json +0 -7
package/docs/rollback.md
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# Rollback
|
|
2
|
-
|
|
3
|
-
Rollback de release publica da Sema deve preservar rastreabilidade. NPM nao deve ser tratado como pasta temporaria: apagar versao publicada e medida extrema e limitada.
|
|
4
|
-
|
|
5
|
-
## Quando aplicar
|
|
6
|
-
|
|
7
|
-
- CLI ou MCP publicados quebram instalacao basica.
|
|
8
|
-
- VSIX publicada nao inicia ou quebra o Language Server.
|
|
9
|
-
- Instaladores baixam asset errado.
|
|
10
|
-
- Release notes ou checksums apontam para artefato invalido.
|
|
11
|
-
|
|
12
|
-
## Primeira resposta
|
|
13
|
-
|
|
14
|
-
1. Marque o problema no GitHub Release.
|
|
15
|
-
2. Reponte `latest` no NPM para a ultima versao boa, quando necessario:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
npm dist-tag add @semacode/cli@<versao-boa> latest
|
|
19
|
-
npm dist-tag add @semacode/mcp@<versao-boa> latest
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
3. Se o problema for so VSIX ou asset de release, substitua o asset no GitHub Release ou publique uma release patch.
|
|
23
|
-
4. Prefira publicar patch corretivo (`1.5.10`, por exemplo) quando o pacote ja saiu para usuarios.
|
|
24
|
-
|
|
25
|
-
## Validacao de rollback
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
npm view @semacode/cli dist-tags --json
|
|
29
|
-
npm view @semacode/mcp dist-tags --json
|
|
30
|
-
npm install -g @semacode/cli@latest
|
|
31
|
-
npm install -g @semacode/mcp@latest
|
|
32
|
-
sema --version
|
|
33
|
-
sema-mcp --help
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Git
|
|
37
|
-
|
|
38
|
-
Se o commit foi empurrado mas a release falhou antes de publicar NPM, corrija com novo commit. Evite reescrever `main` depois de push publico.
|
|
39
|
-
|
|
40
|
-
Se o tag foi criado errado e ainda nao existe release consumida:
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
git tag -d v<versao>
|
|
44
|
-
git push origin :refs/tags/v<versao>
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Use isso somente antes de usuarios consumirem o tag.
|
package/docs/sintaxe.md
DELETED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
# Sintaxe Canonica
|
|
2
|
-
|
|
3
|
-
A Sema usa blocos declarativos previsiveis para reduzir ambiguidade no parser, na IR, no drift e no contexto de IA.
|
|
4
|
-
|
|
5
|
-
## Regras basicas
|
|
6
|
-
|
|
7
|
-
- um arquivo `.sema` contem um `module` principal
|
|
8
|
-
- cada bloco abre com palavra-chave e fecha com `}`
|
|
9
|
-
- campos usam `nome: valor`
|
|
10
|
-
- blocos declarativos podem aparecer aninhados quando o contrato exigir
|
|
11
|
-
- `tests` usa blocos `caso`
|
|
12
|
-
|
|
13
|
-
## Blocos de primeira classe
|
|
14
|
-
|
|
15
|
-
- `module`
|
|
16
|
-
- `use`
|
|
17
|
-
- `database`
|
|
18
|
-
- `type`
|
|
19
|
-
- `entity`
|
|
20
|
-
- `enum`
|
|
21
|
-
- `state`
|
|
22
|
-
- `task`
|
|
23
|
-
- `flow`
|
|
24
|
-
- `route`
|
|
25
|
-
- `worker`
|
|
26
|
-
- `evento`
|
|
27
|
-
- `fila`
|
|
28
|
-
- `cron`
|
|
29
|
-
- `webhook`
|
|
30
|
-
- `cache`
|
|
31
|
-
- `storage`
|
|
32
|
-
- `policy`
|
|
33
|
-
- `tests`
|
|
34
|
-
- `docs`
|
|
35
|
-
- `comments`
|
|
36
|
-
|
|
37
|
-
## Subblocos comuns
|
|
38
|
-
|
|
39
|
-
- `input`
|
|
40
|
-
- `output`
|
|
41
|
-
- `rules`
|
|
42
|
-
- `effects`
|
|
43
|
-
- `auth`
|
|
44
|
-
- `authz`
|
|
45
|
-
- `dados`
|
|
46
|
-
- `audit`
|
|
47
|
-
- `segredos`
|
|
48
|
-
- `forbidden`
|
|
49
|
-
- `impl`
|
|
50
|
-
- `vinculos`
|
|
51
|
-
- `execucao`
|
|
52
|
-
- `guarantees`
|
|
53
|
-
- `error`
|
|
54
|
-
- `fields`
|
|
55
|
-
- `invariants`
|
|
56
|
-
- `transitions`
|
|
57
|
-
- `given`
|
|
58
|
-
- `when`
|
|
59
|
-
- `expect`
|
|
60
|
-
|
|
61
|
-
## Tipos compostos
|
|
62
|
-
|
|
63
|
-
```sema
|
|
64
|
-
input {
|
|
65
|
-
ids: Lista<Id> required
|
|
66
|
-
metadata: Mapa<Texto, Texto>
|
|
67
|
-
responsavel: Opcional<Usuario>
|
|
68
|
-
chave_publica: Texto|Id
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
Formas suportadas:
|
|
73
|
-
|
|
74
|
-
- `Lista<T>`
|
|
75
|
-
- `Mapa<K, V>`
|
|
76
|
-
- `Opcional<T>`
|
|
77
|
-
- `T1|T2`
|
|
78
|
-
- `T?`
|
|
79
|
-
|
|
80
|
-
## Persistencia vendor-first
|
|
81
|
-
|
|
82
|
-
O bloco `database` modela banco e recursos persistidos sem apagar as diferencas entre engines.
|
|
83
|
-
|
|
84
|
-
Estrutura base:
|
|
85
|
-
|
|
86
|
-
```sema
|
|
87
|
-
database principal_postgres {
|
|
88
|
-
engine: postgres
|
|
89
|
-
consistency: forte
|
|
90
|
-
durability: alta
|
|
91
|
-
transaction_model: mvcc
|
|
92
|
-
query_model: sql
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Recursos canonicamente suportados:
|
|
97
|
-
|
|
98
|
-
- `table`
|
|
99
|
-
- `index`
|
|
100
|
-
- `relationship`
|
|
101
|
-
- `query`
|
|
102
|
-
- `retention`
|
|
103
|
-
- `lock`
|
|
104
|
-
- `replication`
|
|
105
|
-
- `collection`
|
|
106
|
-
- `document`
|
|
107
|
-
- `keyspace`
|
|
108
|
-
- `stream`
|
|
109
|
-
- `capabilities`
|
|
110
|
-
|
|
111
|
-
Exemplo relacional:
|
|
112
|
-
|
|
113
|
-
```sema
|
|
114
|
-
database principal_postgres {
|
|
115
|
-
engine: postgres
|
|
116
|
-
schema: public
|
|
117
|
-
capabilities {
|
|
118
|
-
joins
|
|
119
|
-
views
|
|
120
|
-
foreign_keys
|
|
121
|
-
}
|
|
122
|
-
table pedidos {
|
|
123
|
-
entity: Pedido
|
|
124
|
-
}
|
|
125
|
-
relationship pedido_cliente {
|
|
126
|
-
from: Pedido
|
|
127
|
-
to: Cliente
|
|
128
|
-
}
|
|
129
|
-
query buscar_pedidos {
|
|
130
|
-
mode: sql
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
Exemplo documental:
|
|
136
|
-
|
|
137
|
-
```sema
|
|
138
|
-
database principal_mongodb {
|
|
139
|
-
engine: mongodb
|
|
140
|
-
query_model: documento
|
|
141
|
-
collection pedidos {
|
|
142
|
-
collection: pedidos
|
|
143
|
-
}
|
|
144
|
-
document pedido_snapshot {
|
|
145
|
-
entity: PedidoSnapshot
|
|
146
|
-
}
|
|
147
|
-
query pipeline_pedido {
|
|
148
|
-
mode: pipeline
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
Exemplo key-value:
|
|
154
|
-
|
|
155
|
-
```sema
|
|
156
|
-
database principal_redis {
|
|
157
|
-
engine: redis
|
|
158
|
-
query_model: chave_valor
|
|
159
|
-
keyspace cache_pedidos {
|
|
160
|
-
ttl: "300s"
|
|
161
|
-
}
|
|
162
|
-
stream eventos_pedido {
|
|
163
|
-
surface: fila
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
## Compatibilidade declarada
|
|
169
|
-
|
|
170
|
-
O IR de persistencia calcula compatibilidade por recurso com quatro estados:
|
|
171
|
-
|
|
172
|
-
- `nativo`
|
|
173
|
-
- `adaptado`
|
|
174
|
-
- `parcial`
|
|
175
|
-
- `invalido`
|
|
176
|
-
|
|
177
|
-
Isso existe para deixar explicito quando um contrato esta pedindo de um banco algo que ele nao entrega do mesmo jeito.
|
|
178
|
-
|
|
179
|
-
O mesmo principio vale para runtime de orquestracao. Superficies como `webhook`, `cron`, `worker`, `evento` e `fila` podem ser medidas contra familias como `n8n`, mas o contrato continua canonicamente modelado em Sema, sem rebaixar a linguagem para a sintaxe do adapter alvo.
|
|
180
|
-
|
|
181
|
-
## Interop e implementacao externa
|
|
182
|
-
|
|
183
|
-
`use` e `impl` aceitam origens de codigo vivo quando o contrato precisa rastrear runtime real. As origens semanticas suportadas sao:
|
|
184
|
-
|
|
185
|
-
- `ts`
|
|
186
|
-
- `py`
|
|
187
|
-
- `dart`
|
|
188
|
-
- `lua`
|
|
189
|
-
- `php`
|
|
190
|
-
- `cs`
|
|
191
|
-
- `java`
|
|
192
|
-
- `go`
|
|
193
|
-
- `rust`
|
|
194
|
-
- `cpp`
|
|
195
|
-
|
|
196
|
-
Exemplo com Lua:
|
|
197
|
-
|
|
198
|
-
```sema
|
|
199
|
-
module app.runtime {
|
|
200
|
-
use lua src.runtime
|
|
201
|
-
|
|
202
|
-
task processar_snapshot {
|
|
203
|
-
input {
|
|
204
|
-
payload: Json required
|
|
205
|
-
}
|
|
206
|
-
output {
|
|
207
|
-
resultado: Json
|
|
208
|
-
}
|
|
209
|
-
impl {
|
|
210
|
-
lua: src.runtime.RuntimeBridge.processSnapshot
|
|
211
|
-
}
|
|
212
|
-
guarantees {
|
|
213
|
-
resultado existe
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
Para Lua, o `drift` resolve funcoes declaradas como `function nome(...)`, `local function nome(...)`, `function Tabela.metodo(...)`, `function Tabela:metodo(...)` e atribuicoes `Tabela.metodo = function(...)`. A forma com `:` e normalizada para ponto no contrato.
|
|
220
|
-
|
|
221
|
-
Exemplo com PHP:
|
|
222
|
-
|
|
223
|
-
```sema
|
|
224
|
-
module app.php {
|
|
225
|
-
use php App.Http.Controllers.UserController
|
|
226
|
-
|
|
227
|
-
task criar_usuario {
|
|
228
|
-
input {
|
|
229
|
-
payload: Json required
|
|
230
|
-
}
|
|
231
|
-
output {
|
|
232
|
-
resultado: Json
|
|
233
|
-
}
|
|
234
|
-
impl {
|
|
235
|
-
php: App.Http.Controllers.UserController.store
|
|
236
|
-
}
|
|
237
|
-
guarantees {
|
|
238
|
-
resultado existe
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
Para PHP, o `drift` resolve namespaces, classes, traits, interfaces, enums, metodos, funcoes, closures atribuidas, rotas Laravel/Slim (`Route::get`, `Route::post`, `$app->get`) e atributos HTTP no estilo Symfony/PHP 8 (`#[Route]`, `#[Get]`, `#[Post]`). `Route::resource` e `Route::apiResource` sao expandidos para acoes REST canonicas.
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
module exemplos.agendamento {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Agendamento de tarefas recorrentes e unicas com controle de execucao."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
entity Agendamento {
|
|
7
|
-
fields {
|
|
8
|
-
id: Id
|
|
9
|
-
nome: Texto
|
|
10
|
-
tipo: Texto
|
|
11
|
-
expressao_cron: Texto
|
|
12
|
-
payload: Objeto
|
|
13
|
-
ativo: Booleano
|
|
14
|
-
ultima_execucao: Timestamp
|
|
15
|
-
proxima_execucao: Timestamp
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
entity ExecucaoAgendamento {
|
|
20
|
-
fields {
|
|
21
|
-
id: Id
|
|
22
|
-
agendamento_id: Id
|
|
23
|
-
status: Texto
|
|
24
|
-
iniciado_em: Timestamp
|
|
25
|
-
concluido_em: Timestamp
|
|
26
|
-
erro: Texto
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
task criar_agendamento {
|
|
31
|
-
input {
|
|
32
|
-
nome: Texto required
|
|
33
|
-
tipo: Texto required
|
|
34
|
-
expressao_cron: Texto required
|
|
35
|
-
payload: Objeto
|
|
36
|
-
}
|
|
37
|
-
output {
|
|
38
|
-
agendamento: Agendamento
|
|
39
|
-
}
|
|
40
|
-
rules {
|
|
41
|
-
nome deve_ser preenchido
|
|
42
|
-
expressao_cron deve_ser valida
|
|
43
|
-
tipo deve_ser registrado
|
|
44
|
-
}
|
|
45
|
-
effects {
|
|
46
|
-
persistencia Agendamento
|
|
47
|
-
evento agendamento_criado criticidade = baixa
|
|
48
|
-
auditoria criacao_agendamento
|
|
49
|
-
}
|
|
50
|
-
guarantees {
|
|
51
|
-
agendamento existe
|
|
52
|
-
agendamento.ativo == verdadeiro
|
|
53
|
-
}
|
|
54
|
-
error {
|
|
55
|
-
cron_invalido: "Expressao cron invalida."
|
|
56
|
-
tipo_nao_registrado: "Tipo de agendamento nao existe."
|
|
57
|
-
nome_duplicado: "Ja existe agendamento com este nome."
|
|
58
|
-
}
|
|
59
|
-
tests {
|
|
60
|
-
caso "cria agendamento diario" {
|
|
61
|
-
given { nome: "relatorio_diario" tipo: "gerar_relatorio" expressao_cron: "0 8 * * *" }
|
|
62
|
-
expect { sucesso: verdadeiro }
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
task executar_agendamento {
|
|
68
|
-
input {
|
|
69
|
-
agendamento_id: Id required
|
|
70
|
-
}
|
|
71
|
-
output {
|
|
72
|
-
execucao_id: Id
|
|
73
|
-
}
|
|
74
|
-
rules {
|
|
75
|
-
agendamento_id deve_ser valido
|
|
76
|
-
agendamento.ativo == verdadeiro
|
|
77
|
-
}
|
|
78
|
-
effects {
|
|
79
|
-
consulta Agendamento por agendamento_id
|
|
80
|
-
persistencia ExecucaoAgendamento
|
|
81
|
-
persistencia Agendamento
|
|
82
|
-
evento agendamento_executado criticidade = baixa
|
|
83
|
-
auditoria execucao_agendamento
|
|
84
|
-
}
|
|
85
|
-
state ciclo_execucao {
|
|
86
|
-
transitions {
|
|
87
|
-
PENDENTE -> EM_EXECUCAO
|
|
88
|
-
EM_EXECUCAO -> CONCLUIDO
|
|
89
|
-
EM_EXECUCAO -> FALHOU
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
guarantees {
|
|
93
|
-
execucao_id existe
|
|
94
|
-
}
|
|
95
|
-
error {
|
|
96
|
-
agendamento_inativo: "Agendamento esta desativado."
|
|
97
|
-
execucao_em_andamento: "Ja existe uma execucao em andamento para este agendamento."
|
|
98
|
-
}
|
|
99
|
-
tests {
|
|
100
|
-
caso "executa agendamento ativo" {
|
|
101
|
-
given { agendamento_id: "agd_1" }
|
|
102
|
-
expect { sucesso: verdadeiro }
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
package/exemplos/assinatura.sema
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
module exemplos.assinatura {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Gestao de assinaturas recorrentes com upgrade, downgrade e cancelamento."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
entity Assinatura {
|
|
7
|
-
fields {
|
|
8
|
-
id: Id
|
|
9
|
-
cliente_id: Id
|
|
10
|
-
plano_id: Id
|
|
11
|
-
status: Texto
|
|
12
|
-
inicio_em: Timestamp
|
|
13
|
-
proximo_vencimento: Timestamp
|
|
14
|
-
cancelada_em: Timestamp
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
task criar_assinatura {
|
|
19
|
-
input {
|
|
20
|
-
cliente_id: Id required
|
|
21
|
-
plano_id: Id required
|
|
22
|
-
token_pagamento: Texto required
|
|
23
|
-
}
|
|
24
|
-
output {
|
|
25
|
-
assinatura: Assinatura
|
|
26
|
-
}
|
|
27
|
-
rules {
|
|
28
|
-
cliente_id deve_ser valido
|
|
29
|
-
plano_id deve_ser valido
|
|
30
|
-
token_pagamento deve_ser valido
|
|
31
|
-
}
|
|
32
|
-
effects {
|
|
33
|
-
consulta Cliente por cliente_id
|
|
34
|
-
consulta Plano por plano_id
|
|
35
|
-
consulta gateway_pagamento criticidade = alta
|
|
36
|
-
persistencia Assinatura
|
|
37
|
-
evento assinatura_criada criticidade = alta
|
|
38
|
-
notificacao cliente confirmacao_assinatura criticidade = media
|
|
39
|
-
auditoria criacao_assinatura criticidade = alta
|
|
40
|
-
}
|
|
41
|
-
state ciclo_assinatura {
|
|
42
|
-
transitions {
|
|
43
|
-
PENDENTE -> ATIVA
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
guarantees {
|
|
47
|
-
assinatura existe
|
|
48
|
-
assinatura.status == ATIVA
|
|
49
|
-
}
|
|
50
|
-
error {
|
|
51
|
-
pagamento_recusado: "Pagamento inicial recusado."
|
|
52
|
-
cliente_ja_assina: "Cliente ja possui assinatura ativa."
|
|
53
|
-
plano_invalido: "Plano nao disponivel para assinatura."
|
|
54
|
-
}
|
|
55
|
-
tests {
|
|
56
|
-
caso "cria assinatura pro" {
|
|
57
|
-
given { cliente_id: "cli_1" plano_id: "plano_pro" token_pagamento: "tok_ok" }
|
|
58
|
-
expect { sucesso: verdadeiro }
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
task cancelar_assinatura {
|
|
64
|
-
input {
|
|
65
|
-
assinatura_id: Id required
|
|
66
|
-
motivo: Texto required
|
|
67
|
-
imediato: Booleano
|
|
68
|
-
}
|
|
69
|
-
output {
|
|
70
|
-
protocolo: Id
|
|
71
|
-
}
|
|
72
|
-
rules {
|
|
73
|
-
assinatura_id deve_ser valido
|
|
74
|
-
assinatura.status == ATIVA
|
|
75
|
-
motivo deve_ser preenchido
|
|
76
|
-
}
|
|
77
|
-
effects {
|
|
78
|
-
persistencia Assinatura
|
|
79
|
-
consulta gateway_pagamento criticidade = alta
|
|
80
|
-
evento assinatura_cancelada criticidade = alta
|
|
81
|
-
notificacao cliente confirmacao_cancelamento criticidade = media
|
|
82
|
-
auditoria cancelamento_assinatura criticidade = alta
|
|
83
|
-
}
|
|
84
|
-
state ciclo_assinatura {
|
|
85
|
-
transitions {
|
|
86
|
-
ATIVA -> CANCELADA
|
|
87
|
-
ATIVA -> PENDENTE_CANCELAMENTO
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
guarantees {
|
|
91
|
-
protocolo existe
|
|
92
|
-
}
|
|
93
|
-
error {
|
|
94
|
-
assinatura_ja_cancelada: "Assinatura ja foi cancelada."
|
|
95
|
-
}
|
|
96
|
-
tests {
|
|
97
|
-
caso "cancela assinatura ativa" {
|
|
98
|
-
given { assinatura_id: "asn_1" motivo: "Nao preciso mais" imediato: falso }
|
|
99
|
-
expect { sucesso: verdadeiro }
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
task renovar_assinatura {
|
|
105
|
-
input {
|
|
106
|
-
assinatura_id: Id required
|
|
107
|
-
}
|
|
108
|
-
output {
|
|
109
|
-
protocolo_cobranca: Id
|
|
110
|
-
}
|
|
111
|
-
rules {
|
|
112
|
-
assinatura_id deve_ser valido
|
|
113
|
-
assinatura.status == ATIVA
|
|
114
|
-
assinatura.proximo_vencimento <= hoje
|
|
115
|
-
}
|
|
116
|
-
effects {
|
|
117
|
-
consulta gateway_pagamento criticidade = alta
|
|
118
|
-
persistencia Assinatura
|
|
119
|
-
evento assinatura_renovada criticidade = media
|
|
120
|
-
auditoria renovacao_assinatura criticidade = alta
|
|
121
|
-
}
|
|
122
|
-
guarantees {
|
|
123
|
-
protocolo_cobranca existe
|
|
124
|
-
}
|
|
125
|
-
error {
|
|
126
|
-
pagamento_recusado: "Cobranca de renovacao recusada — assinatura sera suspensa."
|
|
127
|
-
assinatura_cancelada: "Nao e possivel renovar assinatura cancelada."
|
|
128
|
-
}
|
|
129
|
-
tests {
|
|
130
|
-
caso "renova assinatura no vencimento" {
|
|
131
|
-
given { assinatura_id: "asn_1" }
|
|
132
|
-
expect { sucesso: verdadeiro }
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
package/exemplos/auditoria.sema
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
module exemplos.auditoria {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Registro imutavel de acoes criticas com rastreabilidade completa."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
entity RegistroAuditoria {
|
|
7
|
-
fields {
|
|
8
|
-
id: Id
|
|
9
|
-
ator_id: Id
|
|
10
|
-
ator_tipo: Texto
|
|
11
|
-
acao: Texto
|
|
12
|
-
recurso: Texto
|
|
13
|
-
recurso_id: Id
|
|
14
|
-
dados_antes: Objeto
|
|
15
|
-
dados_depois: Objeto
|
|
16
|
-
ip_origem: Texto
|
|
17
|
-
timestamp: Timestamp
|
|
18
|
-
contexto: Objeto
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
task registrar_acao {
|
|
23
|
-
input {
|
|
24
|
-
ator_id: Id required
|
|
25
|
-
acao: Texto required
|
|
26
|
-
recurso: Texto required
|
|
27
|
-
recurso_id: Id required
|
|
28
|
-
dados_antes: Objeto
|
|
29
|
-
dados_depois: Objeto
|
|
30
|
-
ip_origem: Texto
|
|
31
|
-
}
|
|
32
|
-
output {
|
|
33
|
-
auditoria_id: Id
|
|
34
|
-
}
|
|
35
|
-
rules {
|
|
36
|
-
acao deve_ser preenchida
|
|
37
|
-
recurso deve_ser preenchido
|
|
38
|
-
ator_id deve_ser valido
|
|
39
|
-
}
|
|
40
|
-
effects {
|
|
41
|
-
persistencia RegistroAuditoria criticidade = alta
|
|
42
|
-
}
|
|
43
|
-
guarantees {
|
|
44
|
-
auditoria_id existe
|
|
45
|
-
RegistroAuditoria.imutavel == verdadeiro
|
|
46
|
-
}
|
|
47
|
-
error {
|
|
48
|
-
falha_persistencia: "Nao foi possivel registrar a auditoria — operacao bloqueada."
|
|
49
|
-
}
|
|
50
|
-
tests {
|
|
51
|
-
caso "registra acao critica" {
|
|
52
|
-
given { ator_id: "usr_1" acao: "deletar_usuario" recurso: "Usuario" recurso_id: "usr_2" }
|
|
53
|
-
expect { sucesso: verdadeiro }
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
task consultar_historico {
|
|
59
|
-
input {
|
|
60
|
-
recurso: Texto required
|
|
61
|
-
recurso_id: Id required
|
|
62
|
-
data_inicio: Data
|
|
63
|
-
data_fim: Data
|
|
64
|
-
}
|
|
65
|
-
output {
|
|
66
|
-
registros: Lista
|
|
67
|
-
total: Inteiro
|
|
68
|
-
}
|
|
69
|
-
rules {
|
|
70
|
-
recurso deve_ser preenchido
|
|
71
|
-
recurso_id deve_ser valido
|
|
72
|
-
}
|
|
73
|
-
effects {
|
|
74
|
-
consulta RegistroAuditoria por recurso e recurso_id
|
|
75
|
-
auditoria consulta_historico
|
|
76
|
-
}
|
|
77
|
-
guarantees {
|
|
78
|
-
registros existe
|
|
79
|
-
total >= 0
|
|
80
|
-
}
|
|
81
|
-
tests {
|
|
82
|
-
caso "consulta historico de usuario" {
|
|
83
|
-
given { recurso: "Usuario" recurso_id: "usr_1" }
|
|
84
|
-
expect { sucesso: verdadeiro }
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|