@semacode/cli 1.5.18 → 1.5.19
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/AGENTS.md +268 -260
- package/LICENSE +22 -22
- package/README.md +144 -104
- package/SEMA_BRIEF.curto.txt +7 -5
- package/SEMA_BRIEF.md +60 -4
- package/SEMA_BRIEF.micro.txt +6 -4
- package/SEMA_INDEX.json +917 -41
- package/dist/controleComercialSupabase.d.ts +326 -0
- package/dist/controleComercialSupabase.js +310 -0
- package/dist/controleComercialSupabase.js.map +1 -0
- package/dist/docs.js +48 -20
- package/dist/docs.js.map +1 -1
- package/dist/drift.d.ts +5 -3
- package/dist/drift.js +123 -14
- package/dist/drift.js.map +1 -1
- package/dist/index.js +1889 -38
- package/dist/index.js.map +1 -1
- package/dist/mcpRemoto.d.ts +32 -0
- package/dist/mcpRemoto.js +61 -0
- package/dist/mcpRemoto.js.map +1 -0
- package/dist/projeto.js +3 -1
- package/dist/projeto.js.map +1 -1
- package/docs/AGENT_STARTER.md +103 -97
- package/docs/cli.md +175 -106
- package/docs/como-ensinar-a-sema-para-ia.md +41 -35
- package/docs/deploy.md +231 -43
- package/docs/documentacao.md +61 -36
- package/docs/env.md +105 -56
- package/docs/extensao-vscode.md +12 -4
- package/docs/fluxo-pratico-ia-sema.md +182 -176
- package/docs/instalacao-e-primeiro-uso.md +52 -30
- package/docs/integracao-com-ia.md +108 -101
- package/docs/mcp.md +292 -51
- package/docs/pagamento-ponta-a-ponta.md +34 -28
- package/docs/persistencia-vendor-first.md +11 -5
- package/docs/prompt-base-ia-sema.md +13 -7
- package/docs/rollback.md +17 -15
- package/docs/sintaxe.md +180 -174
- package/exemplos/agendamento.sema +105 -105
- package/exemplos/assinatura.sema +133 -133
- package/exemplos/auditoria.sema +89 -89
- package/exemplos/autenticacao.sema +125 -125
- package/exemplos/author_obra_comum.sema +294 -0
- package/exemplos/author_tema_sensivel.sema +264 -0
- package/exemplos/automacao.sema +107 -107
- package/exemplos/cadastro_usuario.sema +54 -54
- package/exemplos/calculadora.sema +78 -78
- package/exemplos/crud_simples.sema +89 -89
- package/exemplos/estoque.sema +127 -127
- package/exemplos/exportacao.sema +94 -94
- package/exemplos/fila.sema +130 -130
- package/exemplos/integracao_externa.sema +94 -94
- package/exemplos/multi_tenant.sema +140 -140
- package/exemplos/notificacao.sema +149 -149
- package/exemplos/operacao_estrategia.sema +633 -633
- package/exemplos/pagamento.sema +434 -434
- package/exemplos/pagamento_dominio.sema +35 -35
- package/exemplos/pedido.sema +255 -255
- package/exemplos/permissao.sema +121 -121
- package/exemplos/persistencia_vendor_first.sema +86 -86
- package/exemplos/profile_game.sema +114 -0
- package/exemplos/profile_legal.sema +105 -0
- package/exemplos/profile_ops.sema +110 -0
- package/exemplos/profile_research.sema +104 -0
- package/exemplos/profile_software.sema +123 -0
- package/exemplos/profile_workflow_n8n.sema +99 -0
- package/exemplos/relatorio.sema +93 -93
- package/exemplos/replica_analitica_erp.sema +160 -160
- package/exemplos/testes_embutidos.sema +45 -45
- package/exemplos/tratamento_erro.sema +157 -157
- package/exemplos/upload_arquivo.sema +93 -93
- package/exemplos/webhook.sema +94 -94
- package/llms-full.txt +34 -34
- package/llms.txt +17 -17
- package/node_modules/@sema/gerador-css/dist/index.js +563 -563
- package/node_modules/@sema/gerador-css/package.json +1 -1
- package/node_modules/@sema/gerador-dart/package.json +1 -1
- package/node_modules/@sema/gerador-html/dist/index.js +90 -90
- package/node_modules/@sema/gerador-html/package.json +1 -1
- package/node_modules/@sema/gerador-javascript/dist/index.js +92 -92
- package/node_modules/@sema/gerador-javascript/package.json +1 -1
- package/node_modules/@sema/gerador-lua/dist/index.js +53 -53
- package/node_modules/@sema/gerador-lua/package.json +1 -1
- package/node_modules/@sema/gerador-python/dist/index.js +122 -96
- package/node_modules/@sema/gerador-python/dist/index.js.map +1 -1
- package/node_modules/@sema/gerador-python/package.json +1 -1
- package/node_modules/@sema/gerador-typescript/dist/index.js +153 -153
- package/node_modules/@sema/gerador-typescript/package.json +1 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.js +12 -4
- package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -1
- package/node_modules/@sema/nucleo/package.json +1 -1
- package/node_modules/@sema/padroes/package.json +1 -1
- package/package.json +11 -11
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
module exemplos.calculadora {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Operacoes aritmeticas simples com garantias e testes."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
comments {
|
|
7
|
-
observacao: "Exemplo base para demonstrar tarefas semanticas puras."
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
task somar {
|
|
11
|
-
input {
|
|
12
|
-
a: Numero required
|
|
13
|
-
b: Numero required
|
|
14
|
-
}
|
|
15
|
-
output {
|
|
16
|
-
resultado: Numero
|
|
17
|
-
}
|
|
18
|
-
rules {
|
|
19
|
-
a deve_ser numero_valido
|
|
20
|
-
b deve_ser numero_valido
|
|
21
|
-
}
|
|
22
|
-
effects {
|
|
23
|
-
auditoria operacao soma
|
|
24
|
-
}
|
|
25
|
-
guarantees {
|
|
26
|
-
resultado existe
|
|
27
|
-
}
|
|
28
|
-
error {
|
|
29
|
-
entrada_invalida: "Os valores precisam ser numericos."
|
|
30
|
-
}
|
|
31
|
-
tests {
|
|
32
|
-
caso "soma basica" {
|
|
33
|
-
given {
|
|
34
|
-
a: 2
|
|
35
|
-
b: 3
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
expect {
|
|
39
|
-
sucesso: verdadeiro
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
task dividir {
|
|
46
|
-
input {
|
|
47
|
-
dividendo: Numero required
|
|
48
|
-
divisor: Numero required
|
|
49
|
-
}
|
|
50
|
-
output {
|
|
51
|
-
resultado: Numero
|
|
52
|
-
}
|
|
53
|
-
rules {
|
|
54
|
-
divisor deve_ser diferente_de_zero
|
|
55
|
-
}
|
|
56
|
-
effects {
|
|
57
|
-
auditoria operacao divisao
|
|
58
|
-
}
|
|
59
|
-
guarantees {
|
|
60
|
-
resultado existe
|
|
61
|
-
}
|
|
62
|
-
error {
|
|
63
|
-
divisor_zero: "Nao e permitido dividir por zero."
|
|
64
|
-
}
|
|
65
|
-
tests {
|
|
66
|
-
caso "divisao valida" {
|
|
67
|
-
given {
|
|
68
|
-
dividendo: 10
|
|
69
|
-
divisor: 2
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
expect {
|
|
73
|
-
sucesso: verdadeiro
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
1
|
+
module exemplos.calculadora {
|
|
2
|
+
docs {
|
|
3
|
+
resumo: "Operacoes aritmeticas simples com garantias e testes."
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
comments {
|
|
7
|
+
observacao: "Exemplo base para demonstrar tarefas semanticas puras."
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
task somar {
|
|
11
|
+
input {
|
|
12
|
+
a: Numero required
|
|
13
|
+
b: Numero required
|
|
14
|
+
}
|
|
15
|
+
output {
|
|
16
|
+
resultado: Numero
|
|
17
|
+
}
|
|
18
|
+
rules {
|
|
19
|
+
a deve_ser numero_valido
|
|
20
|
+
b deve_ser numero_valido
|
|
21
|
+
}
|
|
22
|
+
effects {
|
|
23
|
+
auditoria operacao soma
|
|
24
|
+
}
|
|
25
|
+
guarantees {
|
|
26
|
+
resultado existe
|
|
27
|
+
}
|
|
28
|
+
error {
|
|
29
|
+
entrada_invalida: "Os valores precisam ser numericos."
|
|
30
|
+
}
|
|
31
|
+
tests {
|
|
32
|
+
caso "soma basica" {
|
|
33
|
+
given {
|
|
34
|
+
a: 2
|
|
35
|
+
b: 3
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
expect {
|
|
39
|
+
sucesso: verdadeiro
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
task dividir {
|
|
46
|
+
input {
|
|
47
|
+
dividendo: Numero required
|
|
48
|
+
divisor: Numero required
|
|
49
|
+
}
|
|
50
|
+
output {
|
|
51
|
+
resultado: Numero
|
|
52
|
+
}
|
|
53
|
+
rules {
|
|
54
|
+
divisor deve_ser diferente_de_zero
|
|
55
|
+
}
|
|
56
|
+
effects {
|
|
57
|
+
auditoria operacao divisao
|
|
58
|
+
}
|
|
59
|
+
guarantees {
|
|
60
|
+
resultado existe
|
|
61
|
+
}
|
|
62
|
+
error {
|
|
63
|
+
divisor_zero: "Nao e permitido dividir por zero."
|
|
64
|
+
}
|
|
65
|
+
tests {
|
|
66
|
+
caso "divisao valida" {
|
|
67
|
+
given {
|
|
68
|
+
dividendo: 10
|
|
69
|
+
divisor: 2
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
expect {
|
|
73
|
+
sucesso: verdadeiro
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
module exemplos.crud.simples {
|
|
2
|
-
entity Produto {
|
|
3
|
-
fields {
|
|
4
|
-
id: Id
|
|
5
|
-
nome: Texto
|
|
6
|
-
preco: Decimal
|
|
7
|
-
ativo: Booleano
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
task criar_produto {
|
|
12
|
-
input {
|
|
13
|
-
nome: Texto required
|
|
14
|
-
preco: Decimal required
|
|
15
|
-
}
|
|
16
|
-
output {
|
|
17
|
-
produto: Produto
|
|
18
|
-
}
|
|
19
|
-
rules {
|
|
20
|
-
nome deve_ser preenchido
|
|
21
|
-
preco deve_ser positivo
|
|
22
|
-
}
|
|
23
|
-
effects {
|
|
24
|
-
persistencia Produto
|
|
25
|
-
auditoria produto_criado
|
|
26
|
-
}
|
|
27
|
-
guarantees {
|
|
28
|
-
produto existe
|
|
29
|
-
}
|
|
30
|
-
tests {
|
|
31
|
-
caso "cria produto" {
|
|
32
|
-
given {
|
|
33
|
-
nome: "Caneca"
|
|
34
|
-
preco: 39.9
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
expect {
|
|
38
|
-
sucesso: verdadeiro
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
task atualizar_produto {
|
|
45
|
-
input {
|
|
46
|
-
id: Id required
|
|
47
|
-
nome: Texto
|
|
48
|
-
preco: Decimal
|
|
49
|
-
}
|
|
50
|
-
output {
|
|
51
|
-
produto: Produto
|
|
52
|
-
}
|
|
53
|
-
rules {
|
|
54
|
-
id deve_ser valido
|
|
55
|
-
}
|
|
56
|
-
effects {
|
|
57
|
-
persistencia Produto
|
|
58
|
-
auditoria produto_atualizado
|
|
59
|
-
}
|
|
60
|
-
guarantees {
|
|
61
|
-
produto existe
|
|
62
|
-
}
|
|
63
|
-
tests {
|
|
64
|
-
caso "atualiza produto" {
|
|
65
|
-
given {
|
|
66
|
-
id: "prod_1"
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
expect {
|
|
70
|
-
sucesso: verdadeiro
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
route produtos {
|
|
77
|
-
metodo: POST
|
|
78
|
-
caminho: /produtos
|
|
79
|
-
task: criar_produto
|
|
80
|
-
finalidade: cadastro_produto
|
|
81
|
-
input {
|
|
82
|
-
nome: Texto
|
|
83
|
-
preco: Decimal
|
|
84
|
-
}
|
|
85
|
-
output {
|
|
86
|
-
produto: Produto
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
1
|
+
module exemplos.crud.simples {
|
|
2
|
+
entity Produto {
|
|
3
|
+
fields {
|
|
4
|
+
id: Id
|
|
5
|
+
nome: Texto
|
|
6
|
+
preco: Decimal
|
|
7
|
+
ativo: Booleano
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
task criar_produto {
|
|
12
|
+
input {
|
|
13
|
+
nome: Texto required
|
|
14
|
+
preco: Decimal required
|
|
15
|
+
}
|
|
16
|
+
output {
|
|
17
|
+
produto: Produto
|
|
18
|
+
}
|
|
19
|
+
rules {
|
|
20
|
+
nome deve_ser preenchido
|
|
21
|
+
preco deve_ser positivo
|
|
22
|
+
}
|
|
23
|
+
effects {
|
|
24
|
+
persistencia Produto
|
|
25
|
+
auditoria produto_criado
|
|
26
|
+
}
|
|
27
|
+
guarantees {
|
|
28
|
+
produto existe
|
|
29
|
+
}
|
|
30
|
+
tests {
|
|
31
|
+
caso "cria produto" {
|
|
32
|
+
given {
|
|
33
|
+
nome: "Caneca"
|
|
34
|
+
preco: 39.9
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
expect {
|
|
38
|
+
sucesso: verdadeiro
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
task atualizar_produto {
|
|
45
|
+
input {
|
|
46
|
+
id: Id required
|
|
47
|
+
nome: Texto
|
|
48
|
+
preco: Decimal
|
|
49
|
+
}
|
|
50
|
+
output {
|
|
51
|
+
produto: Produto
|
|
52
|
+
}
|
|
53
|
+
rules {
|
|
54
|
+
id deve_ser valido
|
|
55
|
+
}
|
|
56
|
+
effects {
|
|
57
|
+
persistencia Produto
|
|
58
|
+
auditoria produto_atualizado
|
|
59
|
+
}
|
|
60
|
+
guarantees {
|
|
61
|
+
produto existe
|
|
62
|
+
}
|
|
63
|
+
tests {
|
|
64
|
+
caso "atualiza produto" {
|
|
65
|
+
given {
|
|
66
|
+
id: "prod_1"
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
expect {
|
|
70
|
+
sucesso: verdadeiro
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
route produtos {
|
|
77
|
+
metodo: POST
|
|
78
|
+
caminho: /produtos
|
|
79
|
+
task: criar_produto
|
|
80
|
+
finalidade: cadastro_produto
|
|
81
|
+
input {
|
|
82
|
+
nome: Texto
|
|
83
|
+
preco: Decimal
|
|
84
|
+
}
|
|
85
|
+
output {
|
|
86
|
+
produto: Produto
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
package/exemplos/estoque.sema
CHANGED
|
@@ -1,127 +1,127 @@
|
|
|
1
|
-
module exemplos.estoque {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Controle de estoque com reserva, entrada e saida de produtos."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
entity ItemEstoque {
|
|
7
|
-
fields {
|
|
8
|
-
id: Id
|
|
9
|
-
produto_id: Id
|
|
10
|
-
quantidade: Inteiro
|
|
11
|
-
quantidade_reservada: Inteiro
|
|
12
|
-
localizacao: Texto
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
entity MovimentacaoEstoque {
|
|
17
|
-
fields {
|
|
18
|
-
id: Id
|
|
19
|
-
produto_id: Id
|
|
20
|
-
tipo: Texto
|
|
21
|
-
quantidade: Inteiro
|
|
22
|
-
motivo: Texto
|
|
23
|
-
realizada_em: Timestamp
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
task reservar_estoque {
|
|
28
|
-
input {
|
|
29
|
-
produto_id: Id required
|
|
30
|
-
quantidade: Inteiro required
|
|
31
|
-
pedido_id: Id required
|
|
32
|
-
}
|
|
33
|
-
output {
|
|
34
|
-
reserva_id: Id
|
|
35
|
-
quantidade_reservada: Inteiro
|
|
36
|
-
}
|
|
37
|
-
rules {
|
|
38
|
-
quantidade > 0
|
|
39
|
-
produto_id deve_ser valido
|
|
40
|
-
}
|
|
41
|
-
effects {
|
|
42
|
-
consulta ItemEstoque por produto_id criticidade = alta
|
|
43
|
-
persistencia ItemEstoque
|
|
44
|
-
persistencia MovimentacaoEstoque
|
|
45
|
-
evento estoque_reservado criticidade = media
|
|
46
|
-
auditoria reserva_estoque
|
|
47
|
-
}
|
|
48
|
-
guarantees {
|
|
49
|
-
reserva_id existe
|
|
50
|
-
quantidade_reservada existe
|
|
51
|
-
}
|
|
52
|
-
error {
|
|
53
|
-
estoque_insuficiente: "Quantidade solicitada indisponivel em estoque."
|
|
54
|
-
produto_nao_encontrado: "Produto nao localizado no estoque."
|
|
55
|
-
}
|
|
56
|
-
tests {
|
|
57
|
-
caso "reserva com estoque disponivel" {
|
|
58
|
-
given { produto_id: "prod_1" quantidade: 5 pedido_id: "ped_1" }
|
|
59
|
-
expect { sucesso: verdadeiro }
|
|
60
|
-
}
|
|
61
|
-
caso "reserva sem estoque" {
|
|
62
|
-
given { produto_id: "prod_sem" quantidade: 999 pedido_id: "ped_2" }
|
|
63
|
-
expect { sucesso: falso }
|
|
64
|
-
error { tipo: "estoque_insuficiente" }
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
task registrar_entrada {
|
|
70
|
-
input {
|
|
71
|
-
produto_id: Id required
|
|
72
|
-
quantidade: Inteiro required
|
|
73
|
-
motivo: Texto required
|
|
74
|
-
}
|
|
75
|
-
output {
|
|
76
|
-
movimentacao_id: Id
|
|
77
|
-
}
|
|
78
|
-
rules {
|
|
79
|
-
quantidade > 0
|
|
80
|
-
motivo deve_ser preenchido
|
|
81
|
-
}
|
|
82
|
-
effects {
|
|
83
|
-
persistencia ItemEstoque
|
|
84
|
-
persistencia MovimentacaoEstoque
|
|
85
|
-
evento estoque_reposto
|
|
86
|
-
auditoria entrada_estoque
|
|
87
|
-
}
|
|
88
|
-
guarantees {
|
|
89
|
-
movimentacao_id existe
|
|
90
|
-
}
|
|
91
|
-
tests {
|
|
92
|
-
caso "entrada valida" {
|
|
93
|
-
given { produto_id: "prod_1" quantidade: 100 motivo: "Reposicao mensal" }
|
|
94
|
-
expect { sucesso: verdadeiro }
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
task liberar_reserva {
|
|
100
|
-
input {
|
|
101
|
-
reserva_id: Id required
|
|
102
|
-
motivo: Texto required
|
|
103
|
-
}
|
|
104
|
-
output {
|
|
105
|
-
protocolo: Id
|
|
106
|
-
}
|
|
107
|
-
rules {
|
|
108
|
-
reserva_id deve_ser valido
|
|
109
|
-
motivo deve_ser preenchido
|
|
110
|
-
}
|
|
111
|
-
effects {
|
|
112
|
-
persistencia ItemEstoque
|
|
113
|
-
persistencia MovimentacaoEstoque
|
|
114
|
-
evento reserva_liberada
|
|
115
|
-
auditoria liberacao_reserva
|
|
116
|
-
}
|
|
117
|
-
guarantees {
|
|
118
|
-
protocolo existe
|
|
119
|
-
}
|
|
120
|
-
tests {
|
|
121
|
-
caso "libera reserva existente" {
|
|
122
|
-
given { reserva_id: "res_1" motivo: "Pedido cancelado" }
|
|
123
|
-
expect { sucesso: verdadeiro }
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
1
|
+
module exemplos.estoque {
|
|
2
|
+
docs {
|
|
3
|
+
resumo: "Controle de estoque com reserva, entrada e saida de produtos."
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
entity ItemEstoque {
|
|
7
|
+
fields {
|
|
8
|
+
id: Id
|
|
9
|
+
produto_id: Id
|
|
10
|
+
quantidade: Inteiro
|
|
11
|
+
quantidade_reservada: Inteiro
|
|
12
|
+
localizacao: Texto
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
entity MovimentacaoEstoque {
|
|
17
|
+
fields {
|
|
18
|
+
id: Id
|
|
19
|
+
produto_id: Id
|
|
20
|
+
tipo: Texto
|
|
21
|
+
quantidade: Inteiro
|
|
22
|
+
motivo: Texto
|
|
23
|
+
realizada_em: Timestamp
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
task reservar_estoque {
|
|
28
|
+
input {
|
|
29
|
+
produto_id: Id required
|
|
30
|
+
quantidade: Inteiro required
|
|
31
|
+
pedido_id: Id required
|
|
32
|
+
}
|
|
33
|
+
output {
|
|
34
|
+
reserva_id: Id
|
|
35
|
+
quantidade_reservada: Inteiro
|
|
36
|
+
}
|
|
37
|
+
rules {
|
|
38
|
+
quantidade > 0
|
|
39
|
+
produto_id deve_ser valido
|
|
40
|
+
}
|
|
41
|
+
effects {
|
|
42
|
+
consulta ItemEstoque por produto_id criticidade = alta
|
|
43
|
+
persistencia ItemEstoque
|
|
44
|
+
persistencia MovimentacaoEstoque
|
|
45
|
+
evento estoque_reservado criticidade = media
|
|
46
|
+
auditoria reserva_estoque
|
|
47
|
+
}
|
|
48
|
+
guarantees {
|
|
49
|
+
reserva_id existe
|
|
50
|
+
quantidade_reservada existe
|
|
51
|
+
}
|
|
52
|
+
error {
|
|
53
|
+
estoque_insuficiente: "Quantidade solicitada indisponivel em estoque."
|
|
54
|
+
produto_nao_encontrado: "Produto nao localizado no estoque."
|
|
55
|
+
}
|
|
56
|
+
tests {
|
|
57
|
+
caso "reserva com estoque disponivel" {
|
|
58
|
+
given { produto_id: "prod_1" quantidade: 5 pedido_id: "ped_1" }
|
|
59
|
+
expect { sucesso: verdadeiro }
|
|
60
|
+
}
|
|
61
|
+
caso "reserva sem estoque" {
|
|
62
|
+
given { produto_id: "prod_sem" quantidade: 999 pedido_id: "ped_2" }
|
|
63
|
+
expect { sucesso: falso }
|
|
64
|
+
error { tipo: "estoque_insuficiente" }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
task registrar_entrada {
|
|
70
|
+
input {
|
|
71
|
+
produto_id: Id required
|
|
72
|
+
quantidade: Inteiro required
|
|
73
|
+
motivo: Texto required
|
|
74
|
+
}
|
|
75
|
+
output {
|
|
76
|
+
movimentacao_id: Id
|
|
77
|
+
}
|
|
78
|
+
rules {
|
|
79
|
+
quantidade > 0
|
|
80
|
+
motivo deve_ser preenchido
|
|
81
|
+
}
|
|
82
|
+
effects {
|
|
83
|
+
persistencia ItemEstoque
|
|
84
|
+
persistencia MovimentacaoEstoque
|
|
85
|
+
evento estoque_reposto
|
|
86
|
+
auditoria entrada_estoque
|
|
87
|
+
}
|
|
88
|
+
guarantees {
|
|
89
|
+
movimentacao_id existe
|
|
90
|
+
}
|
|
91
|
+
tests {
|
|
92
|
+
caso "entrada valida" {
|
|
93
|
+
given { produto_id: "prod_1" quantidade: 100 motivo: "Reposicao mensal" }
|
|
94
|
+
expect { sucesso: verdadeiro }
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
task liberar_reserva {
|
|
100
|
+
input {
|
|
101
|
+
reserva_id: Id required
|
|
102
|
+
motivo: Texto required
|
|
103
|
+
}
|
|
104
|
+
output {
|
|
105
|
+
protocolo: Id
|
|
106
|
+
}
|
|
107
|
+
rules {
|
|
108
|
+
reserva_id deve_ser valido
|
|
109
|
+
motivo deve_ser preenchido
|
|
110
|
+
}
|
|
111
|
+
effects {
|
|
112
|
+
persistencia ItemEstoque
|
|
113
|
+
persistencia MovimentacaoEstoque
|
|
114
|
+
evento reserva_liberada
|
|
115
|
+
auditoria liberacao_reserva
|
|
116
|
+
}
|
|
117
|
+
guarantees {
|
|
118
|
+
protocolo existe
|
|
119
|
+
}
|
|
120
|
+
tests {
|
|
121
|
+
caso "libera reserva existente" {
|
|
122
|
+
given { reserva_id: "res_1" motivo: "Pedido cancelado" }
|
|
123
|
+
expect { sucesso: verdadeiro }
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|