@semacode/cli 1.5.16 → 1.5.17

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 (175) hide show
  1. package/AGENTS.md +272 -0
  2. package/LICENSE +22 -0
  3. package/SEMA_BRIEF.curto.txt +9 -0
  4. package/SEMA_BRIEF.md +70 -0
  5. package/SEMA_BRIEF.micro.txt +7 -0
  6. package/SEMA_INDEX.json +921 -0
  7. package/dist/angular-consumer-standalone.d.ts +6 -0
  8. package/dist/angular-consumer-standalone.js.map +1 -0
  9. package/dist/cpp-symbols.d.ts +10 -0
  10. package/dist/cpp-symbols.js.map +1 -0
  11. package/dist/docs.d.ts +56 -0
  12. package/dist/docs.js.map +1 -0
  13. package/dist/dotnet-http.d.ts +23 -0
  14. package/dist/dotnet-http.js.map +1 -0
  15. package/dist/drift.d.ts +225 -0
  16. package/dist/drift.js.map +1 -0
  17. package/dist/go-http.d.ts +23 -0
  18. package/dist/go-http.js.map +1 -0
  19. package/dist/importador.d.ts +31 -0
  20. package/dist/importador.js.map +1 -0
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/java-http.d.ts +23 -0
  24. package/dist/java-http.js.map +1 -0
  25. package/dist/lua-symbols.d.ts +10 -0
  26. package/dist/lua-symbols.js.map +1 -0
  27. package/dist/php-symbols.d.ts +24 -0
  28. package/dist/php-symbols.js.map +1 -0
  29. package/dist/projeto.d.ts +53 -0
  30. package/dist/projeto.js.map +1 -0
  31. package/dist/python-http.d.ts +23 -0
  32. package/dist/python-http.js.map +1 -0
  33. package/dist/rust-http.d.ts +23 -0
  34. package/dist/rust-http.js.map +1 -0
  35. package/dist/tipos.d.ts +3 -0
  36. package/dist/tipos.js.map +1 -0
  37. package/dist/typescript-http.d.ts +35 -0
  38. package/dist/typescript-http.js.map +1 -0
  39. package/docs/AGENT_STARTER.md +102 -0
  40. package/docs/cli.md +119 -0
  41. package/docs/como-ensinar-a-sema-para-ia.md +149 -0
  42. package/docs/deploy.md +70 -0
  43. package/docs/documentacao.md +63 -0
  44. package/docs/env.md +56 -0
  45. package/docs/extensao-vscode.md +45 -0
  46. package/docs/fluxo-pratico-ia-sema.md +177 -0
  47. package/docs/instalacao-e-primeiro-uso.md +112 -0
  48. package/docs/integracao-com-ia.md +101 -0
  49. package/docs/mcp.md +53 -0
  50. package/docs/pagamento-ponta-a-ponta.md +155 -0
  51. package/docs/persistencia-vendor-first.md +145 -0
  52. package/docs/prompt-base-ia-sema.md +104 -0
  53. package/docs/rollback.md +47 -0
  54. package/docs/sintaxe.md +410 -0
  55. package/exemplos/agendamento.sema +106 -0
  56. package/exemplos/assinatura.sema +136 -0
  57. package/exemplos/auditoria.sema +88 -0
  58. package/exemplos/autenticacao.sema +125 -0
  59. package/exemplos/automacao.sema +107 -0
  60. package/exemplos/cadastro_usuario.sema +54 -0
  61. package/exemplos/calculadora.sema +78 -0
  62. package/exemplos/crud_simples.sema +89 -0
  63. package/exemplos/estoque.sema +126 -0
  64. package/exemplos/exportacao.sema +94 -0
  65. package/exemplos/fila.sema +131 -0
  66. package/exemplos/integracao_externa.sema +94 -0
  67. package/exemplos/multi_tenant.sema +140 -0
  68. package/exemplos/notificacao.sema +98 -0
  69. package/exemplos/operacao_estrategia.sema +402 -0
  70. package/exemplos/pagamento.sema +222 -0
  71. package/exemplos/pagamento_dominio.sema +35 -0
  72. package/exemplos/pedido.sema +119 -0
  73. package/exemplos/permissao.sema +121 -0
  74. package/exemplos/persistencia_vendor_first.sema +86 -0
  75. package/exemplos/relatorio.sema +93 -0
  76. package/exemplos/testes_embutidos.sema +45 -0
  77. package/exemplos/tratamento_erro.sema +157 -0
  78. package/exemplos/upload_arquivo.sema +93 -0
  79. package/exemplos/webhook.sema +96 -0
  80. package/llms-full.txt +34 -0
  81. package/llms.txt +17 -0
  82. package/node_modules/@sema/gerador-css/dist/index.d.ts +3 -0
  83. package/node_modules/@sema/gerador-css/dist/index.js +592 -0
  84. package/node_modules/@sema/gerador-css/dist/index.js.map +1 -0
  85. package/node_modules/@sema/gerador-css/package.json +7 -0
  86. package/node_modules/@sema/gerador-dart/dist/index.d.ts +3 -0
  87. package/node_modules/@sema/gerador-dart/dist/index.js +44 -0
  88. package/node_modules/@sema/gerador-dart/dist/index.js.map +1 -0
  89. package/node_modules/@sema/gerador-dart/package.json +7 -0
  90. package/node_modules/@sema/gerador-html/dist/index.d.ts +3 -0
  91. package/node_modules/@sema/gerador-html/dist/index.js +163 -0
  92. package/node_modules/@sema/gerador-html/dist/index.js.map +1 -0
  93. package/node_modules/@sema/gerador-html/package.json +7 -0
  94. package/node_modules/@sema/gerador-javascript/dist/index.d.ts +3 -0
  95. package/node_modules/@sema/gerador-javascript/dist/index.js +421 -0
  96. package/node_modules/@sema/gerador-javascript/dist/index.js.map +1 -0
  97. package/node_modules/@sema/gerador-javascript/package.json +7 -0
  98. package/node_modules/@sema/gerador-lua/dist/index.d.ts +3 -0
  99. package/node_modules/@sema/gerador-lua/dist/index.js +328 -0
  100. package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -0
  101. package/node_modules/@sema/gerador-lua/package.json +7 -0
  102. package/node_modules/@sema/gerador-python/dist/index.d.ts +6 -0
  103. package/node_modules/@sema/gerador-python/dist/index.js +729 -0
  104. package/node_modules/@sema/gerador-python/dist/index.js.map +1 -0
  105. package/node_modules/@sema/gerador-python/package.json +7 -0
  106. package/node_modules/@sema/gerador-typescript/dist/index.d.ts +6 -0
  107. package/node_modules/@sema/gerador-typescript/dist/index.js +793 -0
  108. package/node_modules/@sema/gerador-typescript/dist/index.js.map +1 -0
  109. package/node_modules/@sema/gerador-typescript/package.json +7 -0
  110. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +125 -0
  111. package/node_modules/@sema/nucleo/dist/ast/tipos.js +2 -0
  112. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +1 -0
  113. package/node_modules/@sema/nucleo/dist/diagnosticos/index.d.ts +21 -0
  114. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js +12 -0
  115. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +1 -0
  116. package/node_modules/@sema/nucleo/dist/formatador/index.d.ts +9 -0
  117. package/node_modules/@sema/nucleo/dist/formatador/index.js +488 -0
  118. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -0
  119. package/node_modules/@sema/nucleo/dist/index.d.ts +35 -0
  120. package/node_modules/@sema/nucleo/dist/index.js +96 -0
  121. package/node_modules/@sema/nucleo/dist/index.js.map +1 -0
  122. package/node_modules/@sema/nucleo/dist/ir/conversor.d.ts +5 -0
  123. package/node_modules/@sema/nucleo/dist/ir/conversor.js +1072 -0
  124. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -0
  125. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +377 -0
  126. package/node_modules/@sema/nucleo/dist/ir/modelos.js +2 -0
  127. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +1 -0
  128. package/node_modules/@sema/nucleo/dist/lexer/lexer.d.ts +7 -0
  129. package/node_modules/@sema/nucleo/dist/lexer/lexer.js +122 -0
  130. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +1 -0
  131. package/node_modules/@sema/nucleo/dist/lexer/tokens.d.ts +8 -0
  132. package/node_modules/@sema/nucleo/dist/lexer/tokens.js +82 -0
  133. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -0
  134. package/node_modules/@sema/nucleo/dist/parser/parser.d.ts +9 -0
  135. package/node_modules/@sema/nucleo/dist/parser/parser.js +807 -0
  136. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -0
  137. package/node_modules/@sema/nucleo/dist/persistencia/contratos.d.ts +39 -0
  138. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js +294 -0
  139. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +1 -0
  140. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +58 -0
  141. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1912 -0
  142. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -0
  143. package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +104 -0
  144. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +445 -0
  145. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +1 -0
  146. package/node_modules/@sema/nucleo/dist/semantico/seguranca.d.ts +91 -0
  147. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js +258 -0
  148. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +1 -0
  149. package/node_modules/@sema/nucleo/dist/util/arquivos.d.ts +2 -0
  150. package/node_modules/@sema/nucleo/dist/util/arquivos.js +25 -0
  151. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +1 -0
  152. package/node_modules/@sema/nucleo/package.json +7 -0
  153. package/node_modules/@sema/padroes/dist/index.d.ts +25 -0
  154. package/node_modules/@sema/padroes/dist/index.js +316 -0
  155. package/node_modules/@sema/padroes/dist/index.js.map +1 -0
  156. package/node_modules/@sema/padroes/package.json +7 -0
  157. package/package.json +35 -26
  158. package/semacode-cli-1.3.1.tgz +0 -0
  159. package/src/angular-consumer-standalone.ts +0 -312
  160. package/src/cpp-symbols.ts +0 -82
  161. package/src/docs.ts +0 -535
  162. package/src/dotnet-http.ts +0 -355
  163. package/src/drift.ts +0 -4933
  164. package/src/go-http.ts +0 -118
  165. package/src/importador.ts +0 -3891
  166. package/src/index.ts +0 -5641
  167. package/src/java-http.ts +0 -247
  168. package/src/lua-symbols.ts +0 -114
  169. package/src/php-symbols.ts +0 -462
  170. package/src/projeto.ts +0 -862
  171. package/src/python-http.ts +0 -258
  172. package/src/rust-http.ts +0 -125
  173. package/src/tipos.ts +0 -24
  174. package/src/typescript-http.ts +0 -1076
  175. package/tsconfig.json +0 -20
@@ -0,0 +1,106 @@
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
+ }
@@ -0,0 +1,136 @@
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
+ }
@@ -0,0 +1,88 @@
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
+ }
@@ -0,0 +1,125 @@
1
+ module exemplos.autenticacao {
2
+ docs {
3
+ resumo: "Login, logout e renovacao de sessao com tokens."
4
+ }
5
+
6
+ entity Sessao {
7
+ fields {
8
+ id: Id
9
+ usuario_id: Id
10
+ token: Texto
11
+ refresh_token: Texto
12
+ expira_em: Timestamp
13
+ ativo: Booleano
14
+ }
15
+ }
16
+
17
+ task fazer_login {
18
+ input {
19
+ email: Email required
20
+ senha: Texto required
21
+ }
22
+ output {
23
+ token: Texto
24
+ refresh_token: Texto
25
+ expira_em: Timestamp
26
+ }
27
+ rules {
28
+ email deve_ser email_valido
29
+ senha deve_ser preenchida
30
+ }
31
+ effects {
32
+ consulta Usuario por email
33
+ persistencia Sessao
34
+ auditoria login_realizado
35
+ evento sessao_iniciada
36
+ }
37
+ state ciclo_sessao {
38
+ transitions {
39
+ INATIVA -> ATIVA
40
+ }
41
+ }
42
+ guarantees {
43
+ token existe
44
+ refresh_token existe
45
+ }
46
+ error {
47
+ credenciais_invalidas: "Email ou senha incorretos."
48
+ conta_bloqueada: "Esta conta foi temporariamente bloqueada."
49
+ conta_inativa: "Esta conta nao esta ativa."
50
+ }
51
+ tests {
52
+ caso "login valido" {
53
+ given { email: "user@app.com" senha: "senha123" }
54
+ expect { sucesso: verdadeiro }
55
+ }
56
+ caso "senha errada" {
57
+ given { email: "user@app.com" senha: "errada" }
58
+ expect { sucesso: falso }
59
+ error { tipo: "credenciais_invalidas" }
60
+ }
61
+ }
62
+ }
63
+
64
+ task renovar_token {
65
+ input {
66
+ refresh_token: Texto required
67
+ }
68
+ output {
69
+ token: Texto
70
+ expira_em: Timestamp
71
+ }
72
+ rules {
73
+ refresh_token deve_ser valido
74
+ refresh_token deve_ser nao_expirado
75
+ }
76
+ effects {
77
+ consulta Sessao por refresh_token
78
+ persistencia Sessao
79
+ auditoria token_renovado
80
+ }
81
+ guarantees {
82
+ token existe
83
+ }
84
+ error {
85
+ refresh_invalido: "Token de renovacao invalido ou expirado."
86
+ }
87
+ tests {
88
+ caso "renova com token valido" {
89
+ given { refresh_token: "valid_refresh" }
90
+ expect { sucesso: verdadeiro }
91
+ }
92
+ }
93
+ }
94
+
95
+ task fazer_logout {
96
+ input {
97
+ token: Texto required
98
+ }
99
+ output {
100
+ protocolo: Id
101
+ }
102
+ rules {
103
+ token deve_ser valido
104
+ }
105
+ effects {
106
+ persistencia Sessao
107
+ auditoria logout_realizado
108
+ evento sessao_encerrada
109
+ }
110
+ state ciclo_sessao {
111
+ transitions {
112
+ ATIVA -> INATIVA
113
+ }
114
+ }
115
+ guarantees {
116
+ protocolo existe
117
+ }
118
+ tests {
119
+ caso "logout valido" {
120
+ given { token: "valid_token" }
121
+ expect { sucesso: verdadeiro }
122
+ }
123
+ }
124
+ }
125
+ }
@@ -0,0 +1,107 @@
1
+ module exemplos.automacao {
2
+ state onboarding_status {
3
+ origem: automacao
4
+ fields {
5
+ lead_id: Id
6
+ etapa_atual: Texto
7
+ concluido: Booleano
8
+ }
9
+ }
10
+
11
+ task executar_onboarding {
12
+ input {
13
+ lead_id: Id required
14
+ email: Email required
15
+ }
16
+ output {
17
+ protocolo: Id
18
+ }
19
+ rules {
20
+ lead_id deve_ser valido
21
+ email deve_ser email_valido
22
+ }
23
+ effects {
24
+ consulta crm
25
+ persistencia conta
26
+ notificacao email detalhe_boas_vindas
27
+ auditoria onboarding
28
+ }
29
+ guarantees {
30
+ protocolo existe
31
+ persistencia concluida
32
+ }
33
+ tests {
34
+ caso "onboarding completo" {
35
+ given {
36
+ lead_id: "lead_1"
37
+ email: "cliente@empresa.com"
38
+ }
39
+
40
+ expect {
41
+ sucesso: verdadeiro
42
+ }
43
+ }
44
+ }
45
+ }
46
+
47
+ task registrar_auditoria {
48
+ input {
49
+ protocolo: Id required
50
+ }
51
+ output {
52
+ auditoria_id: Id
53
+ }
54
+ effects {
55
+ auditoria onboarding
56
+ }
57
+ guarantees {
58
+ auditoria_id existe
59
+ }
60
+ tests {
61
+ caso "auditoria registrada" {
62
+ given {
63
+ protocolo: "prot_1"
64
+ }
65
+
66
+ expect {
67
+ sucesso: verdadeiro
68
+ }
69
+ }
70
+ }
71
+ }
72
+
73
+ task registrar_falha_onboarding {
74
+ input {
75
+ lead_id: Id required
76
+ }
77
+ output {
78
+ protocolo_falha: Id
79
+ }
80
+ effects {
81
+ auditoria falha_onboarding
82
+ persistencia onboarding_falha
83
+ }
84
+ guarantees {
85
+ protocolo_falha existe
86
+ }
87
+ tests {
88
+ caso "falha registrada" {
89
+ given {
90
+ lead_id: "lead_1"
91
+ }
92
+
93
+ expect {
94
+ sucesso: verdadeiro
95
+ }
96
+ }
97
+ }
98
+ }
99
+
100
+ flow onboarding_cliente {
101
+ lead_id: Id
102
+ email: Email
103
+ etapa receber usa executar_onboarding com lead_id = lead_id, email = email quando (sucesso existe ou persistencia concluida) em_sucesso auditar em_erro registrar_falha
104
+ etapa auditar usa registrar_auditoria com protocolo = receber.protocolo depende_de receber
105
+ etapa registrar_falha usa registrar_falha_onboarding com lead_id = lead_id depende_de receber
106
+ }
107
+ }
@@ -0,0 +1,54 @@
1
+ module exemplos.cadastro.usuario {
2
+ docs {
3
+ resumo: "Cadastro de usuario com entidade,validacoes e persistencia declarada."
4
+ }
5
+
6
+ entity Usuario {
7
+ fields {
8
+ id: Id
9
+ nome: Texto
10
+ email: Email
11
+ ativo: Booleano
12
+ }
13
+ }
14
+
15
+ task criar_usuario {
16
+ input {
17
+ nome: Texto required
18
+ email: Email required
19
+ }
20
+ output {
21
+ usuario: Usuario
22
+ }
23
+ rules {
24
+ nome deve_ser preenchido
25
+ email deve_ser email_valido
26
+ email deve_ser unico em Usuario.email
27
+ }
28
+ effects {
29
+ persistencia Usuario
30
+ evento usuario_criado
31
+ auditoria cadastro_usuario
32
+ }
33
+ guarantees {
34
+ usuario existe
35
+ persistencia concluida
36
+ }
37
+ error {
38
+ email_duplicado: "Ja existe usuario com este email."
39
+ entrada_invalida: "Os dados informados nao atendem as regras."
40
+ }
41
+ tests {
42
+ caso "cria usuario valido" {
43
+ given {
44
+ nome: "Ana"
45
+ email: "ana@empresa.com"
46
+ }
47
+
48
+ expect {
49
+ sucesso: verdadeiro
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
@@ -0,0 +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
+ }