@semacode/cli 1.5.16 → 1.5.18

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 (181) hide show
  1. package/AGENTS.md +272 -0
  2. package/LICENSE +22 -0
  3. package/README.md +104 -112
  4. package/SEMA_BRIEF.curto.txt +9 -0
  5. package/SEMA_BRIEF.md +63 -0
  6. package/SEMA_BRIEF.micro.txt +7 -0
  7. package/SEMA_INDEX.json +783 -0
  8. package/dist/angular-consumer-standalone.d.ts +6 -0
  9. package/dist/angular-consumer-standalone.js.map +1 -0
  10. package/dist/cpp-symbols.d.ts +10 -0
  11. package/dist/cpp-symbols.js.map +1 -0
  12. package/dist/docs.d.ts +56 -0
  13. package/dist/docs.js.map +1 -0
  14. package/dist/dotnet-http.d.ts +23 -0
  15. package/dist/dotnet-http.js.map +1 -0
  16. package/dist/drift.d.ts +225 -0
  17. package/dist/drift.js +5 -111
  18. package/dist/drift.js.map +1 -0
  19. package/dist/go-http.d.ts +23 -0
  20. package/dist/go-http.js.map +1 -0
  21. package/dist/importador.d.ts +31 -0
  22. package/dist/importador.js +1 -200
  23. package/dist/importador.js.map +1 -0
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.js +59 -479
  26. package/dist/index.js.map +1 -0
  27. package/dist/java-http.d.ts +23 -0
  28. package/dist/java-http.js.map +1 -0
  29. package/dist/lua-symbols.d.ts +10 -0
  30. package/dist/lua-symbols.js.map +1 -0
  31. package/dist/php-symbols.d.ts +24 -0
  32. package/dist/php-symbols.js.map +1 -0
  33. package/dist/projeto.d.ts +53 -0
  34. package/dist/projeto.js +0 -20
  35. package/dist/projeto.js.map +1 -0
  36. package/dist/python-http.d.ts +23 -0
  37. package/dist/python-http.js.map +1 -0
  38. package/dist/rust-http.d.ts +23 -0
  39. package/dist/rust-http.js.map +1 -0
  40. package/dist/tipos.d.ts +3 -0
  41. package/dist/tipos.js.map +1 -0
  42. package/dist/typescript-http.d.ts +35 -0
  43. package/dist/typescript-http.js.map +1 -0
  44. package/docs/AGENT_STARTER.md +103 -0
  45. package/docs/cli.md +106 -0
  46. package/docs/como-ensinar-a-sema-para-ia.md +149 -0
  47. package/docs/deploy.md +70 -0
  48. package/docs/documentacao.md +63 -0
  49. package/docs/env.md +56 -0
  50. package/docs/extensao-vscode.md +45 -0
  51. package/docs/fluxo-pratico-ia-sema.md +181 -0
  52. package/docs/instalacao-e-primeiro-uso.md +112 -0
  53. package/docs/integracao-com-ia.md +103 -0
  54. package/docs/mcp.md +51 -0
  55. package/docs/pagamento-ponta-a-ponta.md +165 -0
  56. package/docs/persistencia-vendor-first.md +145 -0
  57. package/docs/prompt-base-ia-sema.md +105 -0
  58. package/docs/rollback.md +47 -0
  59. package/docs/sintaxe.md +212 -0
  60. package/exemplos/agendamento.sema +105 -0
  61. package/exemplos/assinatura.sema +133 -0
  62. package/exemplos/auditoria.sema +89 -0
  63. package/exemplos/autenticacao.sema +125 -0
  64. package/exemplos/automacao.sema +107 -0
  65. package/exemplos/cadastro_usuario.sema +54 -0
  66. package/exemplos/calculadora.sema +78 -0
  67. package/exemplos/crud_simples.sema +89 -0
  68. package/exemplos/estoque.sema +127 -0
  69. package/exemplos/exportacao.sema +94 -0
  70. package/exemplos/fila.sema +130 -0
  71. package/exemplos/integracao_externa.sema +94 -0
  72. package/exemplos/multi_tenant.sema +140 -0
  73. package/exemplos/notificacao.sema +149 -0
  74. package/exemplos/operacao_estrategia.sema +633 -0
  75. package/exemplos/pagamento.sema +434 -0
  76. package/exemplos/pagamento_dominio.sema +35 -0
  77. package/exemplos/pedido.sema +255 -0
  78. package/exemplos/permissao.sema +121 -0
  79. package/exemplos/persistencia_vendor_first.sema +86 -0
  80. package/exemplos/relatorio.sema +93 -0
  81. package/exemplos/replica_analitica_erp.sema +160 -0
  82. package/exemplos/testes_embutidos.sema +45 -0
  83. package/exemplos/tratamento_erro.sema +157 -0
  84. package/exemplos/upload_arquivo.sema +93 -0
  85. package/exemplos/webhook.sema +94 -0
  86. package/llms-full.txt +34 -0
  87. package/llms.txt +17 -0
  88. package/node_modules/@sema/gerador-css/dist/index.d.ts +3 -0
  89. package/node_modules/@sema/gerador-css/dist/index.js +592 -0
  90. package/node_modules/@sema/gerador-css/dist/index.js.map +1 -0
  91. package/node_modules/@sema/gerador-css/package.json +7 -0
  92. package/node_modules/@sema/gerador-dart/dist/index.d.ts +3 -0
  93. package/node_modules/@sema/gerador-dart/dist/index.js +44 -0
  94. package/node_modules/@sema/gerador-dart/dist/index.js.map +1 -0
  95. package/node_modules/@sema/gerador-dart/package.json +7 -0
  96. package/node_modules/@sema/gerador-html/dist/index.d.ts +3 -0
  97. package/node_modules/@sema/gerador-html/dist/index.js +163 -0
  98. package/node_modules/@sema/gerador-html/dist/index.js.map +1 -0
  99. package/node_modules/@sema/gerador-html/package.json +7 -0
  100. package/node_modules/@sema/gerador-javascript/dist/index.d.ts +3 -0
  101. package/node_modules/@sema/gerador-javascript/dist/index.js +421 -0
  102. package/node_modules/@sema/gerador-javascript/dist/index.js.map +1 -0
  103. package/node_modules/@sema/gerador-javascript/package.json +7 -0
  104. package/node_modules/@sema/gerador-lua/dist/index.d.ts +3 -0
  105. package/node_modules/@sema/gerador-lua/dist/index.js +328 -0
  106. package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -0
  107. package/node_modules/@sema/gerador-lua/package.json +7 -0
  108. package/node_modules/@sema/gerador-python/dist/index.d.ts +6 -0
  109. package/node_modules/@sema/gerador-python/dist/index.js +729 -0
  110. package/node_modules/@sema/gerador-python/dist/index.js.map +1 -0
  111. package/node_modules/@sema/gerador-python/package.json +7 -0
  112. package/node_modules/@sema/gerador-typescript/dist/index.d.ts +6 -0
  113. package/node_modules/@sema/gerador-typescript/dist/index.js +793 -0
  114. package/node_modules/@sema/gerador-typescript/dist/index.js.map +1 -0
  115. package/node_modules/@sema/gerador-typescript/package.json +7 -0
  116. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +123 -0
  117. package/node_modules/@sema/nucleo/dist/ast/tipos.js +2 -0
  118. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +1 -0
  119. package/node_modules/@sema/nucleo/dist/diagnosticos/index.d.ts +21 -0
  120. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js +12 -0
  121. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +1 -0
  122. package/node_modules/@sema/nucleo/dist/formatador/index.d.ts +9 -0
  123. package/node_modules/@sema/nucleo/dist/formatador/index.js +460 -0
  124. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -0
  125. package/node_modules/@sema/nucleo/dist/index.d.ts +35 -0
  126. package/node_modules/@sema/nucleo/dist/index.js +96 -0
  127. package/node_modules/@sema/nucleo/dist/index.js.map +1 -0
  128. package/node_modules/@sema/nucleo/dist/ir/conversor.d.ts +5 -0
  129. package/node_modules/@sema/nucleo/dist/ir/conversor.js +877 -0
  130. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -0
  131. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +345 -0
  132. package/node_modules/@sema/nucleo/dist/ir/modelos.js +2 -0
  133. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +1 -0
  134. package/node_modules/@sema/nucleo/dist/lexer/lexer.d.ts +7 -0
  135. package/node_modules/@sema/nucleo/dist/lexer/lexer.js +122 -0
  136. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +1 -0
  137. package/node_modules/@sema/nucleo/dist/lexer/tokens.d.ts +8 -0
  138. package/node_modules/@sema/nucleo/dist/lexer/tokens.js +61 -0
  139. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -0
  140. package/node_modules/@sema/nucleo/dist/parser/parser.d.ts +9 -0
  141. package/node_modules/@sema/nucleo/dist/parser/parser.js +767 -0
  142. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -0
  143. package/node_modules/@sema/nucleo/dist/persistencia/contratos.d.ts +39 -0
  144. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js +294 -0
  145. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +1 -0
  146. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +59 -0
  147. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1681 -0
  148. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -0
  149. package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +106 -0
  150. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +475 -0
  151. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +1 -0
  152. package/node_modules/@sema/nucleo/dist/semantico/seguranca.d.ts +91 -0
  153. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js +258 -0
  154. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +1 -0
  155. package/node_modules/@sema/nucleo/dist/util/arquivos.d.ts +2 -0
  156. package/node_modules/@sema/nucleo/dist/util/arquivos.js +25 -0
  157. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +1 -0
  158. package/node_modules/@sema/nucleo/package.json +7 -0
  159. package/node_modules/@sema/padroes/dist/index.d.ts +25 -0
  160. package/node_modules/@sema/padroes/dist/index.js +316 -0
  161. package/node_modules/@sema/padroes/dist/index.js.map +1 -0
  162. package/node_modules/@sema/padroes/package.json +7 -0
  163. package/package.json +32 -23
  164. package/semacode-cli-1.3.1.tgz +0 -0
  165. package/src/angular-consumer-standalone.ts +0 -312
  166. package/src/cpp-symbols.ts +0 -82
  167. package/src/docs.ts +0 -535
  168. package/src/dotnet-http.ts +0 -355
  169. package/src/drift.ts +0 -4933
  170. package/src/go-http.ts +0 -118
  171. package/src/importador.ts +0 -3891
  172. package/src/index.ts +0 -5641
  173. package/src/java-http.ts +0 -247
  174. package/src/lua-symbols.ts +0 -114
  175. package/src/php-symbols.ts +0 -462
  176. package/src/projeto.ts +0 -862
  177. package/src/python-http.ts +0 -258
  178. package/src/rust-http.ts +0 -125
  179. package/src/tipos.ts +0 -24
  180. package/src/typescript-http.ts +0 -1076
  181. package/tsconfig.json +0 -20
@@ -0,0 +1,434 @@
1
+ module exemplos.pagamento {
2
+ docs {
3
+ resumo: "Vertical oficial de pagamento IA-first: contrato operacional para agente governar cobranca, estado, erro, efeito, seguranca e retry sem inventar comportamento."
4
+ }
5
+
6
+ use exemplos.pagamento.dominio
7
+
8
+ task processar_pagamento {
9
+ input {
10
+ pagamento_id: Id required
11
+ valor: Decimal required
12
+ token: Texto required
13
+ }
14
+ output {
15
+ pagamento: Pagamento
16
+ status: StatusPagamento
17
+ }
18
+ authz {
19
+ escopo: pagamentos.processar
20
+ tenant: obrigatorio
21
+ }
22
+ dados {
23
+ classificacao_padrao: financeiro
24
+ redacao_log: obrigatoria
25
+ input {
26
+ pagamento_id: interno
27
+ valor: financeiro
28
+ token: segredo
29
+ }
30
+ output {
31
+ pagamento: financeiro
32
+ status: interno
33
+ }
34
+ }
35
+ audit {
36
+ evento: pagamento.processado
37
+ ator: auth.usuario
38
+ correlacao: request_id
39
+ retencao: "180d"
40
+ motivo: obrigatorio
41
+ }
42
+ segredos {
43
+ gateway_pagamento_token {
44
+ origem: vault
45
+ escopo: runtime
46
+ acesso: gateway_pagamento
47
+ rotacao: "30d"
48
+ nao_logar: verdadeiro
49
+ nao_retornar: verdadeiro
50
+ mascarar: verdadeiro
51
+ }
52
+ }
53
+ forbidden {
54
+ shell.exec
55
+ log.segredo
56
+ retorno.credencial
57
+ }
58
+ rules {
59
+ valor > 0
60
+ token existe
61
+ token deve_ser valido
62
+ }
63
+ effects {
64
+ consulta gateway_pagamento criticidade = alta
65
+ persistencia Pagamento criticidade = alta
66
+ evento pagamento_autorizado criticidade = media
67
+ notificacao cliente comprovante_pagamento criticidade = media
68
+ auditoria pagamento criticidade = alta
69
+ }
70
+ vinculos {
71
+ recurso: gateway_pagamento
72
+ tabela: pagamentos
73
+ evento: pagamento_autorizado
74
+ }
75
+ execucao {
76
+ idempotencia: verdadeiro
77
+ timeout: "15s"
78
+ retry: "2x exponencial"
79
+ compensacao: "registrar_falha_pagamento"
80
+ criticidade_operacional: alta
81
+ }
82
+ state ciclo_pagamento {
83
+ transitions {
84
+ PENDENTE -> AUTORIZADO
85
+ AUTORIZADO -> PROCESSADO
86
+ }
87
+ }
88
+ guarantees {
89
+ pagamento existe
90
+ status em [AUTORIZADO, PROCESSADO]
91
+ pagamento.status == status
92
+ }
93
+ error {
94
+ autorizacao_negada: "A operacao foi recusada pelo gateway."
95
+ saldo_insuficiente: "O saldo nao cobre o valor da cobranca."
96
+ timeout_gateway: "O gateway nao respondeu em tempo habil."
97
+ }
98
+ tests {
99
+ caso "pagamento autorizado" {
100
+ given {
101
+ pagamento_id: "pag_1"
102
+ valor: 199.9
103
+ token: "tok_ok"
104
+ }
105
+
106
+ expect {
107
+ sucesso: verdadeiro
108
+ status: "AUTORIZADO"
109
+ pagamento: "pag_1"
110
+ }
111
+ }
112
+ caso "pagamento recusado por autorizacao" {
113
+ given {
114
+ pagamento_id: "pag_erro"
115
+ valor: 10
116
+ token: "tok_recusado"
117
+ }
118
+
119
+ expect {
120
+ sucesso: falso
121
+ }
122
+
123
+ error {
124
+ tipo: "autorizacao_negada"
125
+ }
126
+ }
127
+ caso "pagamento falha por timeout" {
128
+ given {
129
+ pagamento_id: "pag_timeout"
130
+ valor: 10
131
+ token: "tok_timeout"
132
+ }
133
+
134
+ expect {
135
+ sucesso: falso
136
+ }
137
+
138
+ error {
139
+ tipo: "timeout_gateway"
140
+ }
141
+ }
142
+ }
143
+ }
144
+
145
+ task confirmar_pagamento {
146
+ input {
147
+ pagamento_id: Id required
148
+ }
149
+ output {
150
+ status: StatusPagamento
151
+ }
152
+ authz {
153
+ escopo: pagamentos.confirmar
154
+ tenant: obrigatorio
155
+ }
156
+ dados {
157
+ classificacao_padrao: financeiro
158
+ redacao_log: obrigatoria
159
+ input {
160
+ pagamento_id: interno
161
+ }
162
+ output {
163
+ status: interno
164
+ }
165
+ }
166
+ audit {
167
+ evento: pagamento.confirmado
168
+ ator: sistema.pagamentos
169
+ correlacao: request_id
170
+ retencao: "180d"
171
+ motivo: obrigatorio
172
+ }
173
+ forbidden {
174
+ shell.exec
175
+ log.segredo
176
+ }
177
+ rules {
178
+ pagamento_id existe
179
+ }
180
+ effects {
181
+ consulta gateway_pagamento criticidade = alta
182
+ persistencia Pagamento criticidade = alta
183
+ evento pagamento_confirmado criticidade = media
184
+ auditoria conciliacao_pagamento criticidade = alta
185
+ }
186
+ vinculos {
187
+ recurso: gateway_pagamento
188
+ tabela: pagamentos
189
+ evento: pagamento_confirmado
190
+ }
191
+ execucao {
192
+ idempotencia: verdadeiro
193
+ timeout: "15s"
194
+ retry: "2x exponencial"
195
+ compensacao: "registrar_timeout_pagamento"
196
+ criticidade_operacional: alta
197
+ }
198
+ state ciclo_pagamento {
199
+ transitions {
200
+ AUTORIZADO -> PROCESSADO
201
+ }
202
+ }
203
+ guarantees {
204
+ status == PROCESSADO
205
+ }
206
+ tests {
207
+ caso "confirma pagamento autorizado" {
208
+ given {
209
+ pagamento_id: "pag_1"
210
+ }
211
+
212
+ expect {
213
+ sucesso: verdadeiro
214
+ status: "PROCESSADO"
215
+ }
216
+ }
217
+ }
218
+ }
219
+
220
+ task notificar_falha_pagamento {
221
+ input {
222
+ pagamento_id: Id required
223
+ motivo: Texto required
224
+ }
225
+ output {
226
+ protocolo_notificacao: Id
227
+ }
228
+ authz {
229
+ escopo: pagamentos.notificar_falha
230
+ tenant: obrigatorio
231
+ }
232
+ dados {
233
+ classificacao_padrao: interno
234
+ redacao_log: obrigatoria
235
+ input {
236
+ pagamento_id: interno
237
+ motivo: interno
238
+ }
239
+ output {
240
+ protocolo_notificacao: interno
241
+ }
242
+ }
243
+ audit {
244
+ evento: pagamento.falha_notificada
245
+ ator: sistema.pagamentos
246
+ correlacao: request_id
247
+ retencao: "180d"
248
+ motivo: obrigatorio
249
+ }
250
+ forbidden {
251
+ shell.exec
252
+ log.segredo
253
+ }
254
+ effects {
255
+ notificacao cliente falha_pagamento criticidade = alta
256
+ auditoria falha_pagamento criticidade = media
257
+ }
258
+ vinculos {
259
+ evento: falha_pagamento
260
+ recurso: canal_notificacao
261
+ }
262
+ execucao {
263
+ idempotencia: verdadeiro
264
+ timeout: "10s"
265
+ retry: "3x exponencial"
266
+ compensacao: "registrar_auditoria_falha"
267
+ criticidade_operacional: alta
268
+ }
269
+ guarantees {
270
+ protocolo_notificacao existe
271
+ }
272
+ tests {
273
+ caso "notifica falha por recusa" {
274
+ given {
275
+ pagamento_id: "pag_erro"
276
+ motivo: "autorizacao_negada"
277
+ }
278
+
279
+ expect {
280
+ sucesso: verdadeiro
281
+ protocolo_notificacao: "notif_1"
282
+ }
283
+ }
284
+ }
285
+ }
286
+
287
+ task registrar_timeout_pagamento {
288
+ input {
289
+ pagamento_id: Id required
290
+ }
291
+ output {
292
+ auditoria_id: Id
293
+ }
294
+ authz {
295
+ escopo: pagamentos.registrar_timeout
296
+ tenant: obrigatorio
297
+ }
298
+ dados {
299
+ classificacao_padrao: interno
300
+ redacao_log: obrigatoria
301
+ input {
302
+ pagamento_id: interno
303
+ }
304
+ output {
305
+ auditoria_id: interno
306
+ }
307
+ }
308
+ audit {
309
+ evento: pagamento.timeout_registrado
310
+ ator: sistema.pagamentos
311
+ correlacao: request_id
312
+ retencao: "180d"
313
+ motivo: obrigatorio
314
+ }
315
+ forbidden {
316
+ shell.exec
317
+ log.segredo
318
+ }
319
+ effects {
320
+ auditoria timeout_gateway criticidade = alta
321
+ persistencia incidente_pagamento criticidade = media
322
+ }
323
+ vinculos {
324
+ tabela: incidentes_pagamento
325
+ evento: timeout_gateway
326
+ }
327
+ execucao {
328
+ idempotencia: verdadeiro
329
+ timeout: "10s"
330
+ retry: "nenhum"
331
+ compensacao: "notificar_operacao"
332
+ criticidade_operacional: alta
333
+ }
334
+ guarantees {
335
+ auditoria_id existe
336
+ }
337
+ tests {
338
+ caso "registra timeout" {
339
+ given {
340
+ pagamento_id: "pag_timeout"
341
+ }
342
+
343
+ expect {
344
+ sucesso: verdadeiro
345
+ auditoria_id: "aud_1"
346
+ }
347
+ }
348
+ }
349
+ }
350
+
351
+ flow orquestracao_pagamento {
352
+ pagamento_id: Id
353
+ valor: Decimal
354
+ token: Texto
355
+ etapa autorizar usa processar_pagamento com pagamento_id = pagamento_id, valor = valor, token = token em_sucesso confirmar em_erro registrar_falha por_erro autorizacao_negada = notificar_falha, timeout_gateway = registrar_timeout
356
+ etapa confirmar usa confirmar_pagamento com pagamento_id = pagamento_id depende_de autorizar
357
+ etapa notificar_falha usa notificar_falha_pagamento com pagamento_id = pagamento_id, motivo = "autorizacao_negada" depende_de autorizar
358
+ etapa registrar_timeout usa registrar_timeout_pagamento com pagamento_id = pagamento_id depende_de autorizar
359
+ etapa registrar_falha usa registrar_timeout_pagamento com pagamento_id = pagamento_id depende_de autorizar
360
+ effects {
361
+ auditoria fluxo_pagamento criticidade = alta
362
+ evento pagamento_em_processamento criticidade = media
363
+ }
364
+ }
365
+
366
+ route processar_pagamento_publico {
367
+ metodo: POST
368
+ caminho: /pagamentos/processar
369
+ task: processar_pagamento
370
+ auth {
371
+ modo: obrigatorio
372
+ principal: usuario
373
+ origem: publica
374
+ }
375
+ authz {
376
+ escopo: pagamentos.processar
377
+ tenant: obrigatorio
378
+ }
379
+ dados {
380
+ classificacao_padrao: financeiro
381
+ redacao_log: obrigatoria
382
+ input {
383
+ pagamento_id: interno
384
+ valor: financeiro
385
+ token: segredo
386
+ }
387
+ output {
388
+ pagamento: financeiro
389
+ status: interno
390
+ }
391
+ }
392
+ audit {
393
+ evento: pagamento.processado.publico
394
+ ator: auth.usuario
395
+ correlacao: request_id
396
+ retencao: "180d"
397
+ motivo: obrigatorio
398
+ }
399
+ segredos {
400
+ gateway_pagamento_token {
401
+ origem: vault
402
+ escopo: runtime
403
+ acesso: gateway_pagamento
404
+ rotacao: "30d"
405
+ nao_logar: verdadeiro
406
+ nao_retornar: verdadeiro
407
+ mascarar: verdadeiro
408
+ }
409
+ }
410
+ forbidden {
411
+ shell.exec
412
+ log.segredo
413
+ retorno.credencial
414
+ }
415
+ input {
416
+ pagamento_id: Id required
417
+ valor: Decimal required
418
+ token: Texto required
419
+ }
420
+ output {
421
+ pagamento: Pagamento required
422
+ status: StatusPagamento required
423
+ }
424
+ effects {
425
+ auditoria pagamento_publico criticidade = alta
426
+ evento pagamento_requisitado criticidade = media
427
+ }
428
+ error {
429
+ autorizacao_negada: "Erro publico quando o gateway recusa a operacao."
430
+ saldo_insuficiente: "Erro publico quando nao ha saldo suficiente."
431
+ timeout_gateway: "Erro publico quando o gateway nao responde."
432
+ }
433
+ }
434
+ }
@@ -0,0 +1,35 @@
1
+ module exemplos.pagamento.dominio {
2
+ docs {
3
+ resumo: "Contratos de dominio compartilhados pelo vertical oficial de pagamento da Sema 0.5."
4
+ }
5
+
6
+ entity Pagamento {
7
+ fields {
8
+ id: Id
9
+ valor: Decimal
10
+ status: StatusPagamento
11
+ }
12
+ }
13
+
14
+ enum StatusPagamento {
15
+ PENDENTE,
16
+ AUTORIZADO,
17
+ RECUSADO,
18
+ PROCESSADO
19
+ }
20
+
21
+ state ciclo_pagamento {
22
+ fields {
23
+ status: StatusPagamento
24
+ conciliado: Booleano
25
+ }
26
+ invariants {
27
+ status existe
28
+ }
29
+ transitions {
30
+ PENDENTE -> AUTORIZADO
31
+ AUTORIZADO -> PROCESSADO
32
+ PENDENTE -> RECUSADO
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,255 @@
1
+ module exemplos.pedido {
2
+ docs {
3
+ resumo: "Ciclo completo de pedido IA-first com dependencias explicitas para pagamento e estoque."
4
+ }
5
+
6
+ use exemplos.pagamento
7
+ use exemplos.estoque
8
+
9
+ enum StatusPedido {
10
+ RASCUNHO,
11
+ AGUARDANDO_PAGAMENTO,
12
+ APROVADO,
13
+ CANCELADO,
14
+ ENVIADO,
15
+ ENTREGUE
16
+ }
17
+
18
+ state ciclo_pedido {
19
+ fields {
20
+ status: StatusPedido
21
+ }
22
+ invariants {
23
+ status em [RASCUNHO, AGUARDANDO_PAGAMENTO, APROVADO, CANCELADO, ENVIADO, ENTREGUE]
24
+ }
25
+ transitions {
26
+ RASCUNHO -> AGUARDANDO_PAGAMENTO
27
+ AGUARDANDO_PAGAMENTO -> APROVADO
28
+ AGUARDANDO_PAGAMENTO -> CANCELADO
29
+ APROVADO -> CANCELADO
30
+ APROVADO -> ENVIADO
31
+ ENVIADO -> ENTREGUE
32
+ }
33
+ }
34
+
35
+ entity Pedido {
36
+ fields {
37
+ id: Id
38
+ cliente_id: Id
39
+ status: StatusPedido
40
+ total: Decimal
41
+ criado_em: Timestamp
42
+ }
43
+ }
44
+
45
+ entity ItemPedido {
46
+ fields {
47
+ id: Id
48
+ pedido_id: Id
49
+ produto_id: Id
50
+ quantidade: Inteiro
51
+ preco_unitario: Decimal
52
+ }
53
+ }
54
+
55
+ task criar_pedido {
56
+ input {
57
+ cliente_id: Id required
58
+ itens: Lista required
59
+ }
60
+ output {
61
+ pedido: Pedido
62
+ status: StatusPedido
63
+ }
64
+ authz {
65
+ escopo: pedidos.criar
66
+ tenant: obrigatorio
67
+ }
68
+ dados {
69
+ classificacao_padrao: interno
70
+ redacao_log: obrigatoria
71
+ input {
72
+ cliente_id: pii
73
+ itens: interno
74
+ }
75
+ output {
76
+ pedido: financeiro
77
+ status: interno
78
+ }
79
+ }
80
+ audit {
81
+ evento: pedido.criado
82
+ ator: auth.usuario
83
+ correlacao: request_id
84
+ retencao: "180d"
85
+ motivo: obrigatorio
86
+ }
87
+ forbidden {
88
+ shell.exec
89
+ log.segredo
90
+ retorno.credencial
91
+ }
92
+ rules {
93
+ itens deve_ser nao_vazio
94
+ cliente_id deve_ser valido
95
+ }
96
+ effects {
97
+ consulta Cliente por cliente_id criticidade = media
98
+ consulta Produto por cada item.produto_id criticidade = media
99
+ persistencia Pedido criticidade = alta
100
+ persistencia ItemPedido criticidade = alta
101
+ evento pedido_criado criticidade = media
102
+ auditoria criacao_pedido criticidade = media
103
+ }
104
+ vinculos {
105
+ tabela: pedidos
106
+ tabela: itens_pedido
107
+ evento: pedido_criado
108
+ }
109
+ execucao {
110
+ idempotencia: verdadeiro
111
+ timeout: "10s"
112
+ retry: "nenhum"
113
+ compensacao: "cancelar_pedido"
114
+ criticidade_operacional: alta
115
+ }
116
+ state ciclo_pedido {
117
+ transitions {
118
+ RASCUNHO -> AGUARDANDO_PAGAMENTO
119
+ }
120
+ }
121
+ guarantees {
122
+ pedido existe
123
+ status == AGUARDANDO_PAGAMENTO
124
+ }
125
+ error {
126
+ cliente_invalido: "Cliente nao encontrado."
127
+ item_invalido: "Um ou mais produtos nao existem."
128
+ carrinho_vazio: "O pedido deve ter ao menos um item."
129
+ }
130
+ tests {
131
+ caso "cria pedido valido" {
132
+ given {
133
+ cliente_id: "cli_1"
134
+ itens: "prod_1:2"
135
+ }
136
+
137
+ expect {
138
+ sucesso: verdadeiro
139
+ status: "AGUARDANDO_PAGAMENTO"
140
+ pedido: "ped_1"
141
+ }
142
+ }
143
+ }
144
+ }
145
+
146
+ task cancelar_pedido {
147
+ input {
148
+ pedido_id: Id required
149
+ status_atual: StatusPedido required
150
+ motivo: Texto required
151
+ }
152
+ output {
153
+ protocolo: Id
154
+ status: StatusPedido
155
+ }
156
+ authz {
157
+ escopo: pedidos.cancelar
158
+ tenant: obrigatorio
159
+ }
160
+ dados {
161
+ classificacao_padrao: interno
162
+ redacao_log: obrigatoria
163
+ input {
164
+ pedido_id: interno
165
+ status_atual: interno
166
+ motivo: interno
167
+ }
168
+ output {
169
+ protocolo: interno
170
+ status: interno
171
+ }
172
+ }
173
+ audit {
174
+ evento: pedido.cancelado
175
+ ator: auth.usuario
176
+ correlacao: request_id
177
+ retencao: "180d"
178
+ motivo: obrigatorio
179
+ }
180
+ forbidden {
181
+ shell.exec
182
+ log.segredo
183
+ }
184
+ rules {
185
+ pedido_id deve_ser valido
186
+ status_atual em [AGUARDANDO_PAGAMENTO, APROVADO]
187
+ motivo deve_ser preenchido
188
+ }
189
+ effects {
190
+ persistencia Pedido criticidade = alta
191
+ evento pedido_cancelado criticidade = alta
192
+ notificacao cliente pedido_cancelado criticidade = media
193
+ auditoria cancelamento_pedido criticidade = media
194
+ }
195
+ vinculos {
196
+ tabela: pedidos
197
+ evento: pedido_cancelado
198
+ }
199
+ execucao {
200
+ idempotencia: verdadeiro
201
+ timeout: "10s"
202
+ retry: "nenhum"
203
+ compensacao: "notificar_operacao"
204
+ criticidade_operacional: alta
205
+ }
206
+ state ciclo_pedido {
207
+ transitions {
208
+ AGUARDANDO_PAGAMENTO -> CANCELADO
209
+ APROVADO -> CANCELADO
210
+ }
211
+ }
212
+ guarantees {
213
+ protocolo existe
214
+ status == CANCELADO
215
+ }
216
+ error {
217
+ pedido_nao_cancelavel: "Pedido ja enviado ou entregue nao pode ser cancelado."
218
+ }
219
+ tests {
220
+ caso "cancela pedido pendente" {
221
+ given {
222
+ pedido_id: "ped_1"
223
+ status_atual: "AGUARDANDO_PAGAMENTO"
224
+ motivo: "Desistencia do cliente"
225
+ }
226
+
227
+ expect {
228
+ sucesso: verdadeiro
229
+ protocolo: "cancel_1"
230
+ status: "CANCELADO"
231
+ }
232
+ }
233
+ }
234
+ }
235
+
236
+ flow aprovacao_pedido {
237
+ pedido_id: Id
238
+ valor: Decimal
239
+ produto_id: Id
240
+ quantidade: Inteiro
241
+ token_pagamento: Texto
242
+ itens_reservados: Texto
243
+ status_cancelamento: StatusPedido
244
+ motivo_pagamento_recusado: Texto
245
+ motivo_estoque_insuficiente: Texto
246
+ etapa pagar usa processar_pagamento com pagamento_id = pedido_id, valor = valor, token = token_pagamento em_sucesso reservar em_erro cancelar_por_pagamento
247
+ etapa reservar usa reservar_estoque com produto_id = produto_id, quantidade = quantidade, pedido_id = pedido_id depende_de pagar em_sucesso aprovar em_erro cancelar_por_estoque
248
+ etapa aprovar usa criar_pedido com cliente_id = pedido_id, itens = itens_reservados depende_de reservar
249
+ etapa cancelar_por_pagamento usa cancelar_pedido com pedido_id = pedido_id, status_atual = status_cancelamento, motivo = motivo_pagamento_recusado depende_de pagar
250
+ etapa cancelar_por_estoque usa cancelar_pedido com pedido_id = pedido_id, status_atual = status_cancelamento, motivo = motivo_estoque_insuficiente depende_de reservar
251
+ effects {
252
+ auditoria fluxo_aprovacao_pedido criticidade = alta
253
+ }
254
+ }
255
+ }