@semacode/cli 1.5.18 → 1.5.25
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 +61 -5
- package/SEMA_BRIEF.micro.txt +6 -4
- package/SEMA_INDEX.json +991 -47
- 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
package/exemplos/exportacao.sema
CHANGED
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
module exemplos.exportacao {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Exportacao de dados em multiplos formatos com controle de acesso e rastreamento."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
entity ExportacaoDados {
|
|
7
|
-
fields {
|
|
8
|
-
id: Id
|
|
9
|
-
tipo: Texto
|
|
10
|
-
formato: Texto
|
|
11
|
-
filtros: Objeto
|
|
12
|
-
total_registros: Inteiro
|
|
13
|
-
url_arquivo: Texto
|
|
14
|
-
status: Texto
|
|
15
|
-
solicitado_por: Id
|
|
16
|
-
expira_em: Timestamp
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
task solicitar_exportacao {
|
|
21
|
-
input {
|
|
22
|
-
tipo: Texto required
|
|
23
|
-
formato: Texto required
|
|
24
|
-
filtros: Objeto
|
|
25
|
-
}
|
|
26
|
-
output {
|
|
27
|
-
exportacao_id: Id
|
|
28
|
-
}
|
|
29
|
-
rules {
|
|
30
|
-
tipo em [USUARIOS, PEDIDOS, FINANCEIRO, ESTOQUE]
|
|
31
|
-
formato em [CSV, XLSX, JSON]
|
|
32
|
-
}
|
|
33
|
-
effects {
|
|
34
|
-
persistencia ExportacaoDados
|
|
35
|
-
evento exportacao_solicitada criticidade = media
|
|
36
|
-
auditoria solicitacao_exportacao criticidade = media
|
|
37
|
-
}
|
|
38
|
-
state ciclo_exportacao {
|
|
39
|
-
transitions {
|
|
40
|
-
PENDENTE -> EM_PROCESSAMENTO
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
guarantees {
|
|
44
|
-
exportacao_id existe
|
|
45
|
-
}
|
|
46
|
-
error {
|
|
47
|
-
tipo_invalido: "Tipo de exportacao nao suportado."
|
|
48
|
-
formato_invalido: "Formato de arquivo nao suportado."
|
|
49
|
-
permissao_negada: "Sem permissao para exportar este tipo de dado."
|
|
50
|
-
}
|
|
51
|
-
tests {
|
|
52
|
-
caso "solicita exportacao de usuarios em csv" {
|
|
53
|
-
given { tipo: "USUARIOS" formato: "CSV" }
|
|
54
|
-
expect { sucesso: verdadeiro }
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
task concluir_exportacao {
|
|
60
|
-
input {
|
|
61
|
-
exportacao_id: Id required
|
|
62
|
-
url_arquivo: Texto required
|
|
63
|
-
total_registros: Inteiro required
|
|
64
|
-
}
|
|
65
|
-
output {
|
|
66
|
-
protocolo: Id
|
|
67
|
-
}
|
|
68
|
-
rules {
|
|
69
|
-
exportacao_id deve_ser valido
|
|
70
|
-
url_arquivo deve_ser preenchida
|
|
71
|
-
total_registros >= 0
|
|
72
|
-
}
|
|
73
|
-
effects {
|
|
74
|
-
persistencia ExportacaoDados
|
|
75
|
-
notificacao usuario exportacao_pronta criticidade = media
|
|
76
|
-
evento exportacao_concluida
|
|
77
|
-
auditoria conclusao_exportacao
|
|
78
|
-
}
|
|
79
|
-
state ciclo_exportacao {
|
|
80
|
-
transitions {
|
|
81
|
-
EM_PROCESSAMENTO -> DISPONIVEL
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
guarantees {
|
|
85
|
-
protocolo existe
|
|
86
|
-
}
|
|
87
|
-
tests {
|
|
88
|
-
caso "conclui exportacao" {
|
|
89
|
-
given { exportacao_id: "exp_1" url_arquivo: "https://storage/exp_1.csv" total_registros: 1500 }
|
|
90
|
-
expect { sucesso: verdadeiro }
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
1
|
+
module exemplos.exportacao {
|
|
2
|
+
docs {
|
|
3
|
+
resumo: "Exportacao de dados em multiplos formatos com controle de acesso e rastreamento."
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
entity ExportacaoDados {
|
|
7
|
+
fields {
|
|
8
|
+
id: Id
|
|
9
|
+
tipo: Texto
|
|
10
|
+
formato: Texto
|
|
11
|
+
filtros: Objeto
|
|
12
|
+
total_registros: Inteiro
|
|
13
|
+
url_arquivo: Texto
|
|
14
|
+
status: Texto
|
|
15
|
+
solicitado_por: Id
|
|
16
|
+
expira_em: Timestamp
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
task solicitar_exportacao {
|
|
21
|
+
input {
|
|
22
|
+
tipo: Texto required
|
|
23
|
+
formato: Texto required
|
|
24
|
+
filtros: Objeto
|
|
25
|
+
}
|
|
26
|
+
output {
|
|
27
|
+
exportacao_id: Id
|
|
28
|
+
}
|
|
29
|
+
rules {
|
|
30
|
+
tipo em [USUARIOS, PEDIDOS, FINANCEIRO, ESTOQUE]
|
|
31
|
+
formato em [CSV, XLSX, JSON]
|
|
32
|
+
}
|
|
33
|
+
effects {
|
|
34
|
+
persistencia ExportacaoDados
|
|
35
|
+
evento exportacao_solicitada criticidade = media
|
|
36
|
+
auditoria solicitacao_exportacao criticidade = media
|
|
37
|
+
}
|
|
38
|
+
state ciclo_exportacao {
|
|
39
|
+
transitions {
|
|
40
|
+
PENDENTE -> EM_PROCESSAMENTO
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
guarantees {
|
|
44
|
+
exportacao_id existe
|
|
45
|
+
}
|
|
46
|
+
error {
|
|
47
|
+
tipo_invalido: "Tipo de exportacao nao suportado."
|
|
48
|
+
formato_invalido: "Formato de arquivo nao suportado."
|
|
49
|
+
permissao_negada: "Sem permissao para exportar este tipo de dado."
|
|
50
|
+
}
|
|
51
|
+
tests {
|
|
52
|
+
caso "solicita exportacao de usuarios em csv" {
|
|
53
|
+
given { tipo: "USUARIOS" formato: "CSV" }
|
|
54
|
+
expect { sucesso: verdadeiro }
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
task concluir_exportacao {
|
|
60
|
+
input {
|
|
61
|
+
exportacao_id: Id required
|
|
62
|
+
url_arquivo: Texto required
|
|
63
|
+
total_registros: Inteiro required
|
|
64
|
+
}
|
|
65
|
+
output {
|
|
66
|
+
protocolo: Id
|
|
67
|
+
}
|
|
68
|
+
rules {
|
|
69
|
+
exportacao_id deve_ser valido
|
|
70
|
+
url_arquivo deve_ser preenchida
|
|
71
|
+
total_registros >= 0
|
|
72
|
+
}
|
|
73
|
+
effects {
|
|
74
|
+
persistencia ExportacaoDados
|
|
75
|
+
notificacao usuario exportacao_pronta criticidade = media
|
|
76
|
+
evento exportacao_concluida
|
|
77
|
+
auditoria conclusao_exportacao
|
|
78
|
+
}
|
|
79
|
+
state ciclo_exportacao {
|
|
80
|
+
transitions {
|
|
81
|
+
EM_PROCESSAMENTO -> DISPONIVEL
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
guarantees {
|
|
85
|
+
protocolo existe
|
|
86
|
+
}
|
|
87
|
+
tests {
|
|
88
|
+
caso "conclui exportacao" {
|
|
89
|
+
given { exportacao_id: "exp_1" url_arquivo: "https://storage/exp_1.csv" total_registros: 1500 }
|
|
90
|
+
expect { sucesso: verdadeiro }
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
package/exemplos/fila.sema
CHANGED
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
module exemplos.fila {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Processamento de jobs em fila com retentativa e dead letter."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
entity Job {
|
|
7
|
-
fields {
|
|
8
|
-
id: Id
|
|
9
|
-
tipo: Texto
|
|
10
|
-
payload: Objeto
|
|
11
|
-
status: Texto
|
|
12
|
-
tentativas: Inteiro
|
|
13
|
-
max_tentativas: Inteiro
|
|
14
|
-
agendado_para: Timestamp
|
|
15
|
-
processado_em: Timestamp
|
|
16
|
-
erro: Texto
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
task enfileirar_job {
|
|
21
|
-
input {
|
|
22
|
-
tipo: Texto required
|
|
23
|
-
payload: Objeto required
|
|
24
|
-
agendado_para: Timestamp
|
|
25
|
-
max_tentativas: Inteiro
|
|
26
|
-
}
|
|
27
|
-
output {
|
|
28
|
-
job_id: Id
|
|
29
|
-
}
|
|
30
|
-
rules {
|
|
31
|
-
tipo deve_ser preenchido
|
|
32
|
-
max_tentativas <= 10
|
|
33
|
-
}
|
|
34
|
-
effects {
|
|
35
|
-
persistencia Job
|
|
36
|
-
evento job_enfileirado criticidade = baixa
|
|
37
|
-
auditoria enfileiramento_job
|
|
38
|
-
}
|
|
39
|
-
state ciclo_job {
|
|
40
|
-
transitions {
|
|
41
|
-
CRIADO -> PENDENTE
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
guarantees {
|
|
45
|
-
job_id existe
|
|
46
|
-
}
|
|
47
|
-
error {
|
|
48
|
-
tipo_invalido: "Tipo de job nao registrado."
|
|
49
|
-
fila_cheia: "Fila atingiu capacidade maxima."
|
|
50
|
-
}
|
|
51
|
-
tests {
|
|
52
|
-
caso "enfileira job valido" {
|
|
53
|
-
given { tipo: "envio_email" payload: "destinatario:a@b.com" }
|
|
54
|
-
expect { sucesso: verdadeiro }
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
task processar_job {
|
|
60
|
-
input {
|
|
61
|
-
job_id: Id required
|
|
62
|
-
}
|
|
63
|
-
output {
|
|
64
|
-
resultado: Objeto
|
|
65
|
-
}
|
|
66
|
-
rules {
|
|
67
|
-
job_id deve_ser valido
|
|
68
|
-
}
|
|
69
|
-
effects {
|
|
70
|
-
persistencia Job
|
|
71
|
-
evento job_processado criticidade = baixa
|
|
72
|
-
auditoria processamento_job
|
|
73
|
-
}
|
|
74
|
-
state ciclo_job {
|
|
75
|
-
transitions {
|
|
76
|
-
PENDENTE -> EM_EXECUCAO
|
|
77
|
-
EM_EXECUCAO -> CONCLUIDO
|
|
78
|
-
EM_EXECUCAO -> FALHOU
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
guarantees {
|
|
82
|
-
resultado existe
|
|
83
|
-
}
|
|
84
|
-
error {
|
|
85
|
-
job_nao_encontrado: "Job nao localizado na fila."
|
|
86
|
-
job_ja_processado: "Este job ja foi executado."
|
|
87
|
-
execucao_falhou: "Falha durante a execucao do job."
|
|
88
|
-
}
|
|
89
|
-
tests {
|
|
90
|
-
caso "processa job pendente" {
|
|
91
|
-
given { job_id: "job_1" }
|
|
92
|
-
expect { sucesso: verdadeiro }
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
task mover_para_dead_letter {
|
|
98
|
-
input {
|
|
99
|
-
job_id: Id required
|
|
100
|
-
motivo: Texto required
|
|
101
|
-
}
|
|
102
|
-
output {
|
|
103
|
-
protocolo: Id
|
|
104
|
-
}
|
|
105
|
-
rules {
|
|
106
|
-
job_id deve_ser valido
|
|
107
|
-
motivo deve_ser preenchido
|
|
108
|
-
}
|
|
109
|
-
effects {
|
|
110
|
-
persistencia Job
|
|
111
|
-
evento job_dead_letter criticidade = alta
|
|
112
|
-
notificacao operacao falha_critica_job criticidade = alta
|
|
113
|
-
auditoria dead_letter criticidade = alta
|
|
114
|
-
}
|
|
115
|
-
state ciclo_job {
|
|
116
|
-
transitions {
|
|
117
|
-
FALHOU -> DEAD_LETTER
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
guarantees {
|
|
121
|
-
protocolo existe
|
|
122
|
-
}
|
|
123
|
-
tests {
|
|
124
|
-
caso "move job esgotado" {
|
|
125
|
-
given { job_id: "job_esgotado" motivo: "Timeout repetido" }
|
|
126
|
-
expect { sucesso: verdadeiro }
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
1
|
+
module exemplos.fila {
|
|
2
|
+
docs {
|
|
3
|
+
resumo: "Processamento de jobs em fila com retentativa e dead letter."
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
entity Job {
|
|
7
|
+
fields {
|
|
8
|
+
id: Id
|
|
9
|
+
tipo: Texto
|
|
10
|
+
payload: Objeto
|
|
11
|
+
status: Texto
|
|
12
|
+
tentativas: Inteiro
|
|
13
|
+
max_tentativas: Inteiro
|
|
14
|
+
agendado_para: Timestamp
|
|
15
|
+
processado_em: Timestamp
|
|
16
|
+
erro: Texto
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
task enfileirar_job {
|
|
21
|
+
input {
|
|
22
|
+
tipo: Texto required
|
|
23
|
+
payload: Objeto required
|
|
24
|
+
agendado_para: Timestamp
|
|
25
|
+
max_tentativas: Inteiro
|
|
26
|
+
}
|
|
27
|
+
output {
|
|
28
|
+
job_id: Id
|
|
29
|
+
}
|
|
30
|
+
rules {
|
|
31
|
+
tipo deve_ser preenchido
|
|
32
|
+
max_tentativas <= 10
|
|
33
|
+
}
|
|
34
|
+
effects {
|
|
35
|
+
persistencia Job
|
|
36
|
+
evento job_enfileirado criticidade = baixa
|
|
37
|
+
auditoria enfileiramento_job
|
|
38
|
+
}
|
|
39
|
+
state ciclo_job {
|
|
40
|
+
transitions {
|
|
41
|
+
CRIADO -> PENDENTE
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
guarantees {
|
|
45
|
+
job_id existe
|
|
46
|
+
}
|
|
47
|
+
error {
|
|
48
|
+
tipo_invalido: "Tipo de job nao registrado."
|
|
49
|
+
fila_cheia: "Fila atingiu capacidade maxima."
|
|
50
|
+
}
|
|
51
|
+
tests {
|
|
52
|
+
caso "enfileira job valido" {
|
|
53
|
+
given { tipo: "envio_email" payload: "destinatario:a@b.com" }
|
|
54
|
+
expect { sucesso: verdadeiro }
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
task processar_job {
|
|
60
|
+
input {
|
|
61
|
+
job_id: Id required
|
|
62
|
+
}
|
|
63
|
+
output {
|
|
64
|
+
resultado: Objeto
|
|
65
|
+
}
|
|
66
|
+
rules {
|
|
67
|
+
job_id deve_ser valido
|
|
68
|
+
}
|
|
69
|
+
effects {
|
|
70
|
+
persistencia Job
|
|
71
|
+
evento job_processado criticidade = baixa
|
|
72
|
+
auditoria processamento_job
|
|
73
|
+
}
|
|
74
|
+
state ciclo_job {
|
|
75
|
+
transitions {
|
|
76
|
+
PENDENTE -> EM_EXECUCAO
|
|
77
|
+
EM_EXECUCAO -> CONCLUIDO
|
|
78
|
+
EM_EXECUCAO -> FALHOU
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
guarantees {
|
|
82
|
+
resultado existe
|
|
83
|
+
}
|
|
84
|
+
error {
|
|
85
|
+
job_nao_encontrado: "Job nao localizado na fila."
|
|
86
|
+
job_ja_processado: "Este job ja foi executado."
|
|
87
|
+
execucao_falhou: "Falha durante a execucao do job."
|
|
88
|
+
}
|
|
89
|
+
tests {
|
|
90
|
+
caso "processa job pendente" {
|
|
91
|
+
given { job_id: "job_1" }
|
|
92
|
+
expect { sucesso: verdadeiro }
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
task mover_para_dead_letter {
|
|
98
|
+
input {
|
|
99
|
+
job_id: Id required
|
|
100
|
+
motivo: Texto required
|
|
101
|
+
}
|
|
102
|
+
output {
|
|
103
|
+
protocolo: Id
|
|
104
|
+
}
|
|
105
|
+
rules {
|
|
106
|
+
job_id deve_ser valido
|
|
107
|
+
motivo deve_ser preenchido
|
|
108
|
+
}
|
|
109
|
+
effects {
|
|
110
|
+
persistencia Job
|
|
111
|
+
evento job_dead_letter criticidade = alta
|
|
112
|
+
notificacao operacao falha_critica_job criticidade = alta
|
|
113
|
+
auditoria dead_letter criticidade = alta
|
|
114
|
+
}
|
|
115
|
+
state ciclo_job {
|
|
116
|
+
transitions {
|
|
117
|
+
FALHOU -> DEAD_LETTER
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
guarantees {
|
|
121
|
+
protocolo existe
|
|
122
|
+
}
|
|
123
|
+
tests {
|
|
124
|
+
caso "move job esgotado" {
|
|
125
|
+
given { job_id: "job_esgotado" motivo: "Timeout repetido" }
|
|
126
|
+
expect { sucesso: verdadeiro }
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
module exemplos.integracao.externa {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Integracao com API externa com circuit breaker e fallback."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
entity ChamadaExterna {
|
|
7
|
-
fields {
|
|
8
|
-
id: Id
|
|
9
|
-
servico: Texto
|
|
10
|
-
endpoint: Texto
|
|
11
|
-
metodo: Texto
|
|
12
|
-
status_http: Inteiro
|
|
13
|
-
duracao_ms: Inteiro
|
|
14
|
-
sucesso: Booleano
|
|
15
|
-
realizada_em: Timestamp
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
task consultar_cep {
|
|
20
|
-
input {
|
|
21
|
-
cep: Texto required
|
|
22
|
-
}
|
|
23
|
-
output {
|
|
24
|
-
logradouro: Texto
|
|
25
|
-
bairro: Texto
|
|
26
|
-
cidade: Texto
|
|
27
|
-
estado: Texto
|
|
28
|
-
}
|
|
29
|
-
rules {
|
|
30
|
-
cep deve_ser formato_cep_valido
|
|
31
|
-
}
|
|
32
|
-
effects {
|
|
33
|
-
consulta api_cep criticidade = media
|
|
34
|
-
persistencia ChamadaExterna
|
|
35
|
-
auditoria consulta_cep
|
|
36
|
-
}
|
|
37
|
-
guarantees {
|
|
38
|
-
logradouro existe
|
|
39
|
-
cidade existe
|
|
40
|
-
estado existe
|
|
41
|
-
}
|
|
42
|
-
error {
|
|
43
|
-
cep_nao_encontrado: "CEP nao localizado."
|
|
44
|
-
servico_indisponivel: "API de CEP temporariamente indisponivel."
|
|
45
|
-
formato_invalido: "CEP deve ter 8 digitos numericos."
|
|
46
|
-
}
|
|
47
|
-
tests {
|
|
48
|
-
caso "consulta cep valido" {
|
|
49
|
-
given { cep: "01310100" }
|
|
50
|
-
expect { sucesso: verdadeiro }
|
|
51
|
-
}
|
|
52
|
-
caso "rejeita cep invalido" {
|
|
53
|
-
given { cep: "00000000" }
|
|
54
|
-
expect { sucesso: falso }
|
|
55
|
-
error { tipo: "cep_nao_encontrado" }
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
task consultar_cnpj {
|
|
61
|
-
input {
|
|
62
|
-
cnpj: Texto required
|
|
63
|
-
}
|
|
64
|
-
output {
|
|
65
|
-
razao_social: Texto
|
|
66
|
-
situacao: Texto
|
|
67
|
-
atividade_principal: Texto
|
|
68
|
-
}
|
|
69
|
-
rules {
|
|
70
|
-
cnpj deve_ser formato_cnpj_valido
|
|
71
|
-
cnpj deve_ser digitos_validos
|
|
72
|
-
}
|
|
73
|
-
effects {
|
|
74
|
-
consulta api_receita criticidade = media
|
|
75
|
-
persistencia ChamadaExterna
|
|
76
|
-
auditoria consulta_cnpj
|
|
77
|
-
}
|
|
78
|
-
guarantees {
|
|
79
|
-
razao_social existe
|
|
80
|
-
situacao existe
|
|
81
|
-
}
|
|
82
|
-
error {
|
|
83
|
-
cnpj_nao_encontrado: "CNPJ nao localizado na Receita Federal."
|
|
84
|
-
servico_indisponivel: "Servico da Receita Federal indisponivel."
|
|
85
|
-
formato_invalido: "CNPJ invalido."
|
|
86
|
-
}
|
|
87
|
-
tests {
|
|
88
|
-
caso "consulta cnpj valido" {
|
|
89
|
-
given { cnpj: "11222333000181" }
|
|
90
|
-
expect { sucesso: verdadeiro }
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
1
|
+
module exemplos.integracao.externa {
|
|
2
|
+
docs {
|
|
3
|
+
resumo: "Integracao com API externa com circuit breaker e fallback."
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
entity ChamadaExterna {
|
|
7
|
+
fields {
|
|
8
|
+
id: Id
|
|
9
|
+
servico: Texto
|
|
10
|
+
endpoint: Texto
|
|
11
|
+
metodo: Texto
|
|
12
|
+
status_http: Inteiro
|
|
13
|
+
duracao_ms: Inteiro
|
|
14
|
+
sucesso: Booleano
|
|
15
|
+
realizada_em: Timestamp
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
task consultar_cep {
|
|
20
|
+
input {
|
|
21
|
+
cep: Texto required
|
|
22
|
+
}
|
|
23
|
+
output {
|
|
24
|
+
logradouro: Texto
|
|
25
|
+
bairro: Texto
|
|
26
|
+
cidade: Texto
|
|
27
|
+
estado: Texto
|
|
28
|
+
}
|
|
29
|
+
rules {
|
|
30
|
+
cep deve_ser formato_cep_valido
|
|
31
|
+
}
|
|
32
|
+
effects {
|
|
33
|
+
consulta api_cep criticidade = media
|
|
34
|
+
persistencia ChamadaExterna
|
|
35
|
+
auditoria consulta_cep
|
|
36
|
+
}
|
|
37
|
+
guarantees {
|
|
38
|
+
logradouro existe
|
|
39
|
+
cidade existe
|
|
40
|
+
estado existe
|
|
41
|
+
}
|
|
42
|
+
error {
|
|
43
|
+
cep_nao_encontrado: "CEP nao localizado."
|
|
44
|
+
servico_indisponivel: "API de CEP temporariamente indisponivel."
|
|
45
|
+
formato_invalido: "CEP deve ter 8 digitos numericos."
|
|
46
|
+
}
|
|
47
|
+
tests {
|
|
48
|
+
caso "consulta cep valido" {
|
|
49
|
+
given { cep: "01310100" }
|
|
50
|
+
expect { sucesso: verdadeiro }
|
|
51
|
+
}
|
|
52
|
+
caso "rejeita cep invalido" {
|
|
53
|
+
given { cep: "00000000" }
|
|
54
|
+
expect { sucesso: falso }
|
|
55
|
+
error { tipo: "cep_nao_encontrado" }
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
task consultar_cnpj {
|
|
61
|
+
input {
|
|
62
|
+
cnpj: Texto required
|
|
63
|
+
}
|
|
64
|
+
output {
|
|
65
|
+
razao_social: Texto
|
|
66
|
+
situacao: Texto
|
|
67
|
+
atividade_principal: Texto
|
|
68
|
+
}
|
|
69
|
+
rules {
|
|
70
|
+
cnpj deve_ser formato_cnpj_valido
|
|
71
|
+
cnpj deve_ser digitos_validos
|
|
72
|
+
}
|
|
73
|
+
effects {
|
|
74
|
+
consulta api_receita criticidade = media
|
|
75
|
+
persistencia ChamadaExterna
|
|
76
|
+
auditoria consulta_cnpj
|
|
77
|
+
}
|
|
78
|
+
guarantees {
|
|
79
|
+
razao_social existe
|
|
80
|
+
situacao existe
|
|
81
|
+
}
|
|
82
|
+
error {
|
|
83
|
+
cnpj_nao_encontrado: "CNPJ nao localizado na Receita Federal."
|
|
84
|
+
servico_indisponivel: "Servico da Receita Federal indisponivel."
|
|
85
|
+
formato_invalido: "CNPJ invalido."
|
|
86
|
+
}
|
|
87
|
+
tests {
|
|
88
|
+
caso "consulta cnpj valido" {
|
|
89
|
+
given { cnpj: "11222333000181" }
|
|
90
|
+
expect { sucesso: verdadeiro }
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|