@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,121 @@
1
+ module exemplos.permissao {
2
+ docs {
3
+ resumo: "Controle de acesso baseado em papeis e permissoes granulares."
4
+ }
5
+
6
+ entity Papel {
7
+ fields {
8
+ id: Id
9
+ nome: Texto
10
+ descricao: Texto
11
+ }
12
+ }
13
+
14
+ entity Permissao {
15
+ fields {
16
+ id: Id
17
+ recurso: Texto
18
+ acao: Texto
19
+ descricao: Texto
20
+ }
21
+ }
22
+
23
+ task atribuir_papel {
24
+ input {
25
+ usuario_id: Id required
26
+ papel_id: Id required
27
+ }
28
+ output {
29
+ atribuicao_id: Id
30
+ }
31
+ rules {
32
+ usuario_id deve_ser valido
33
+ papel_id deve_ser valido
34
+ }
35
+ effects {
36
+ consulta Usuario por usuario_id
37
+ consulta Papel por papel_id
38
+ persistencia AtribuicaoPapel
39
+ evento papel_atribuido criticidade = media
40
+ auditoria atribuicao_papel criticidade = alta
41
+ }
42
+ guarantees {
43
+ atribuicao_id existe
44
+ }
45
+ error {
46
+ usuario_nao_encontrado: "Usuario nao localizado."
47
+ papel_nao_encontrado: "Papel nao localizado."
48
+ atribuicao_duplicada: "Usuario ja possui este papel."
49
+ }
50
+ tests {
51
+ caso "atribui papel admin" {
52
+ given { usuario_id: "usr_1" papel_id: "papel_admin" }
53
+ expect { sucesso: verdadeiro }
54
+ }
55
+ }
56
+ }
57
+
58
+ task verificar_permissao {
59
+ input {
60
+ usuario_id: Id required
61
+ recurso: Texto required
62
+ acao: Texto required
63
+ }
64
+ output {
65
+ autorizado: Booleano
66
+ }
67
+ rules {
68
+ usuario_id deve_ser valido
69
+ recurso deve_ser preenchido
70
+ acao deve_ser preenchida
71
+ }
72
+ effects {
73
+ consulta AtribuicaoPapel por usuario_id
74
+ consulta PermissaoPapel por papel_id
75
+ auditoria verificacao_permissao
76
+ }
77
+ guarantees {
78
+ autorizado existe
79
+ }
80
+ tests {
81
+ caso "usuario autorizado" {
82
+ given { usuario_id: "usr_admin" recurso: "relatorios" acao: "exportar" }
83
+ expect { sucesso: verdadeiro }
84
+ }
85
+ caso "usuario sem permissao" {
86
+ given { usuario_id: "usr_basico" recurso: "admin" acao: "deletar" }
87
+ expect { sucesso: verdadeiro }
88
+ }
89
+ }
90
+ }
91
+
92
+ task revogar_papel {
93
+ input {
94
+ usuario_id: Id required
95
+ papel_id: Id required
96
+ motivo: Texto required
97
+ }
98
+ output {
99
+ protocolo: Id
100
+ }
101
+ rules {
102
+ usuario_id deve_ser valido
103
+ papel_id deve_ser valido
104
+ motivo deve_ser preenchido
105
+ }
106
+ effects {
107
+ persistencia AtribuicaoPapel
108
+ evento papel_revogado criticidade = alta
109
+ auditoria revogacao_papel criticidade = alta
110
+ }
111
+ guarantees {
112
+ protocolo existe
113
+ }
114
+ tests {
115
+ caso "revoga papel" {
116
+ given { usuario_id: "usr_1" papel_id: "papel_admin" motivo: "Saida da equipe" }
117
+ expect { sucesso: verdadeiro }
118
+ }
119
+ }
120
+ }
121
+ }
@@ -0,0 +1,86 @@
1
+ module exemplos.persistencia.vendor_first {
2
+ database principal_postgres {
3
+ engine: postgres
4
+ schema: public
5
+ consistency: forte
6
+ durability: alta
7
+ transaction_model: mvcc
8
+ query_model: sql
9
+ capabilities {
10
+ joins
11
+ views
12
+ }
13
+ table pedidos {
14
+ entity: Pedido
15
+ }
16
+ relationship pedido_cliente {
17
+ from: Pedido
18
+ to: Cliente
19
+ }
20
+ query buscar_pedidos {
21
+ mode: sql
22
+ }
23
+ }
24
+
25
+ database principal_mysql {
26
+ engine: mysql
27
+ consistency: forte
28
+ durability: alta
29
+ transaction_model: bloqueio
30
+ query_model: sql
31
+ table faturamento {
32
+ table: faturamento
33
+ }
34
+ query buscar_faturas {
35
+ mode: sql
36
+ }
37
+ }
38
+
39
+ database principal_sqlite {
40
+ engine: sqlite
41
+ consistency: snapshot
42
+ durability: media
43
+ transaction_model: single_thread
44
+ query_model: sql
45
+ table cache_local {
46
+ table: cache_local
47
+ }
48
+ retention limpeza_local {
49
+ retention: 7d
50
+ }
51
+ }
52
+
53
+ database principal_mongodb {
54
+ engine: mongodb
55
+ consistency: eventual
56
+ durability: alta
57
+ transaction_model: documento
58
+ query_model: documento
59
+ collection pedidos {
60
+ collection: pedidos
61
+ }
62
+ document pedido_snapshot {
63
+ entity: PedidoSnapshot
64
+ }
65
+ query pipeline_pedido {
66
+ mode: pipeline
67
+ }
68
+ }
69
+
70
+ database principal_redis {
71
+ engine: redis
72
+ consistency: eventual
73
+ durability: media
74
+ transaction_model: single_thread
75
+ query_model: chave_valor
76
+ keyspace cache_pedidos {
77
+ ttl: 300s
78
+ }
79
+ stream eventos_pedido {
80
+ surface: fila
81
+ }
82
+ retention expurgo_cache {
83
+ retention: 300s
84
+ }
85
+ }
86
+ }
@@ -0,0 +1,93 @@
1
+ module exemplos.relatorio {
2
+ docs {
3
+ resumo: "Geracao assincrona de relatorios com download e notificacao."
4
+ }
5
+
6
+ entity Relatorio {
7
+ fields {
8
+ id: Id
9
+ tipo: Texto
10
+ parametros: Objeto
11
+ status: Texto
12
+ url_download: Texto
13
+ solicitado_por: Id
14
+ criado_em: Timestamp
15
+ concluido_em: Timestamp
16
+ }
17
+ }
18
+
19
+ task solicitar_relatorio {
20
+ input {
21
+ tipo: Texto required
22
+ data_inicio: Data required
23
+ data_fim: Data required
24
+ formato: Texto
25
+ }
26
+ output {
27
+ relatorio_id: Id
28
+ }
29
+ rules {
30
+ tipo em [VENDAS, ESTOQUE, USUARIOS, FINANCEIRO]
31
+ data_inicio deve_ser anterior_a data_fim
32
+ formato em [PDF, CSV, XLSX]
33
+ }
34
+ effects {
35
+ persistencia Relatorio
36
+ evento relatorio_solicitado criticidade = baixa
37
+ auditoria solicitacao_relatorio
38
+ }
39
+ state ciclo_relatorio {
40
+ transitions {
41
+ PENDENTE -> EM_PROCESSAMENTO
42
+ }
43
+ }
44
+ guarantees {
45
+ relatorio_id existe
46
+ }
47
+ error {
48
+ tipo_invalido: "Tipo de relatorio nao suportado."
49
+ periodo_invalido: "Data de inicio deve ser anterior a data de fim."
50
+ limite_periodo: "Periodo maximo e de 12 meses."
51
+ }
52
+ tests {
53
+ caso "solicita relatorio de vendas" {
54
+ given { tipo: "VENDAS" data_inicio: "2025-01-01" data_fim: "2025-03-31" formato: "PDF" }
55
+ expect { sucesso: verdadeiro }
56
+ }
57
+ }
58
+ }
59
+
60
+ task concluir_relatorio {
61
+ input {
62
+ relatorio_id: Id required
63
+ url_download: Texto required
64
+ }
65
+ output {
66
+ protocolo: Id
67
+ }
68
+ rules {
69
+ relatorio_id deve_ser valido
70
+ url_download deve_ser preenchida
71
+ }
72
+ effects {
73
+ persistencia Relatorio
74
+ notificacao usuario relatorio_pronto criticidade = media
75
+ evento relatorio_concluido
76
+ auditoria conclusao_relatorio
77
+ }
78
+ state ciclo_relatorio {
79
+ transitions {
80
+ EM_PROCESSAMENTO -> CONCLUIDO
81
+ }
82
+ }
83
+ guarantees {
84
+ protocolo existe
85
+ }
86
+ tests {
87
+ caso "conclui relatorio" {
88
+ given { relatorio_id: "rel_1" url_download: "https://storage/rel_1.pdf" }
89
+ expect { sucesso: verdadeiro }
90
+ }
91
+ }
92
+ }
93
+ }
@@ -0,0 +1,160 @@
1
+ module exemplos.replica.analitica_erp {
2
+ docs {
3
+ resumo: "Exemplo publico neutro de replica analitica ERP para banco analytics: agente pode consultar a origem operacional em modo leitura e persistir apenas no destino analitico."
4
+ }
5
+
6
+ database erp_origem_mariadb {
7
+ engine: mysql
8
+ consistency: forte
9
+ durability: alta
10
+ transaction_model: bloqueio
11
+ query_model: sql
12
+ capabilities {
13
+ read_only
14
+ views
15
+ }
16
+ table vendas_operacionais {
17
+ entity: VendaOperacional
18
+ }
19
+ query extrair_vendas {
20
+ mode: sql
21
+ }
22
+ }
23
+
24
+ database analytics_postgres {
25
+ engine: postgres
26
+ schema: public
27
+ consistency: eventual
28
+ durability: alta
29
+ transaction_model: mvcc
30
+ query_model: sql
31
+ capabilities {
32
+ upsert
33
+ views
34
+ }
35
+ table vendas_analytics {
36
+ entity: VendaAnalitica
37
+ }
38
+ query carregar_vendas_analytics {
39
+ mode: sql
40
+ }
41
+ }
42
+
43
+ entity VendaOperacional {
44
+ fields {
45
+ id: Id
46
+ loja_id: Id
47
+ data_venda: Data
48
+ valor_total: Decimal
49
+ payload_origem: Objeto
50
+ }
51
+ invariants {
52
+ id existe
53
+ loja_id existe
54
+ data_venda existe
55
+ valor_total >= 0
56
+ }
57
+ }
58
+
59
+ entity VendaAnalitica {
60
+ fields {
61
+ id: Id
62
+ loja_id: Id
63
+ data_venda: Data
64
+ valor_total: Decimal
65
+ sincronizado_em: Timestamp
66
+ }
67
+ invariants {
68
+ id existe
69
+ loja_id existe
70
+ data_venda existe
71
+ valor_total >= 0
72
+ sincronizado_em existe
73
+ }
74
+ }
75
+
76
+ task sincronizar_vendas_erp_para_analytics {
77
+ input {
78
+ loja_id: Id required
79
+ periodo_inicio: Data required
80
+ periodo_fim: Data required
81
+ }
82
+ output {
83
+ registros_sincronizados: Inteiro
84
+ banco_producao_modificado: Booleano
85
+ sincronizado_em: Timestamp
86
+ }
87
+ authz {
88
+ escopo: analytics.replica.sincronizar
89
+ tenant: obrigatorio
90
+ }
91
+ dados {
92
+ classificacao_padrao: interno
93
+ redacao_log: obrigatoria
94
+ input {
95
+ loja_id: interno
96
+ periodo_inicio: interno
97
+ periodo_fim: interno
98
+ }
99
+ output {
100
+ registros_sincronizados: interno
101
+ banco_producao_modificado: interno
102
+ sincronizado_em: interno
103
+ }
104
+ }
105
+ audit {
106
+ evento: analytics.replica.erp_sincronizada
107
+ ator: sistema.analytics
108
+ correlacao: request_id
109
+ retencao: "180d"
110
+ motivo: obrigatorio
111
+ }
112
+ forbidden {
113
+ shell.exec
114
+ log.segredo
115
+ retorno.credencial
116
+ }
117
+ rules {
118
+ loja_id deve_ser valido
119
+ periodo_inicio deve_ser anterior_a periodo_fim
120
+ }
121
+ effects {
122
+ consulta erp_origem_mariadb criticidade = alta
123
+ persistencia analytics_postgres criticidade = media
124
+ auditoria sincronizacao_vendas criticidade = alta
125
+ }
126
+ vinculos {
127
+ recurso: erp_origem_mariadb
128
+ recurso: analytics_postgres
129
+ tabela: vendas_operacionais
130
+ tabela: vendas_analytics
131
+ }
132
+ execucao {
133
+ idempotencia: verdadeiro
134
+ timeout: "60s"
135
+ retry: "3x exponencial"
136
+ compensacao: "reexecutar_janela_analitica"
137
+ criticidade_operacional: alta
138
+ }
139
+ guarantees {
140
+ registros_sincronizados >= 0
141
+ banco_producao_modificado == falso
142
+ sincronizado_em existe
143
+ }
144
+ tests {
145
+ caso "sincroniza janela sem escrever na origem" {
146
+ given {
147
+ loja_id: "loja_001"
148
+ periodo_inicio: "2026-05-01"
149
+ periodo_fim: "2026-05-15"
150
+ }
151
+
152
+ expect {
153
+ sucesso: verdadeiro
154
+ registros_sincronizados: 42
155
+ banco_producao_modificado: falso
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
@@ -0,0 +1,45 @@
1
+ module exemplos.testes.embutidos {
2
+ task validar_documento {
3
+ input {
4
+ documento: Texto required
5
+ }
6
+ output {
7
+ valido: Booleano
8
+ motivo: Texto
9
+ }
10
+ rules {
11
+ documento deve_ser preenchido
12
+ }
13
+ effects {
14
+ auditoria validacao_documento
15
+ }
16
+ guarantees {
17
+ valido existe
18
+ motivo existe
19
+ }
20
+ tests {
21
+ caso "documento valido" {
22
+ given {
23
+ documento: 12345678900
24
+ }
25
+
26
+ expect {
27
+ sucesso: verdadeiro
28
+ }
29
+ }
30
+ caso "documento vazio" {
31
+ given {
32
+ documento: ""
33
+ }
34
+
35
+ expect {
36
+ sucesso: falso
37
+ }
38
+
39
+ error {
40
+ tipo: "entrada_invalida"
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,157 @@
1
+ module exemplos.tratamento.erro {
2
+ task executar_operacao_sensivel {
3
+ input {
4
+ chave: Texto required
5
+ }
6
+ output {
7
+ protocolo: Id
8
+ }
9
+ rules {
10
+ chave existe e chave deve_ser preenchida
11
+ }
12
+ effects {
13
+ consulta cofre
14
+ auditoria falha_operacao_sensivel
15
+ }
16
+ guarantees {
17
+ protocolo existe
18
+ }
19
+ error {
20
+ acesso_negado: "A chave informada nao tem permissao."
21
+ recurso_indisponivel: "O servico esta temporariamente indisponivel."
22
+ auditoria_obrigatoria: "Toda falha precisa ser registrada."
23
+ }
24
+ tests {
25
+ caso "falha por acesso negado" {
26
+ given {
27
+ chave: "sem_permissao"
28
+ }
29
+
30
+ expect {
31
+ sucesso: falso
32
+ }
33
+
34
+ error {
35
+ tipo: "acesso_negado"
36
+ }
37
+ }
38
+ }
39
+ }
40
+
41
+ task responder_acesso_negado {
42
+ input {
43
+ chave: Texto required
44
+ }
45
+ output {
46
+ protocolo_resposta: Id
47
+ }
48
+ effects {
49
+ notificacao cliente acesso_negado
50
+ auditoria acesso_negado
51
+ }
52
+ guarantees {
53
+ protocolo_resposta existe
54
+ }
55
+ tests {
56
+ caso "responde acesso negado" {
57
+ given {
58
+ chave: "sem_permissao"
59
+ }
60
+
61
+ expect {
62
+ sucesso: verdadeiro
63
+ }
64
+ }
65
+ }
66
+ }
67
+
68
+ task responder_retentativa {
69
+ input {
70
+ chave: Texto required
71
+ }
72
+ output {
73
+ protocolo_resposta: Id
74
+ }
75
+ effects {
76
+ notificacao cliente retentativa_programada
77
+ auditoria retentativa
78
+ }
79
+ guarantees {
80
+ protocolo_resposta existe
81
+ }
82
+ tests {
83
+ caso "agenda retentativa" {
84
+ given {
85
+ chave: "instavel"
86
+ }
87
+
88
+ expect {
89
+ sucesso: verdadeiro
90
+ }
91
+ }
92
+ }
93
+ }
94
+
95
+ task registrar_auditoria_falha {
96
+ input {
97
+ chave: Texto required
98
+ }
99
+ output {
100
+ auditoria_id: Id
101
+ }
102
+ effects {
103
+ auditoria falha_operacional
104
+ persistencia auditoria_falha
105
+ }
106
+ guarantees {
107
+ auditoria_id existe
108
+ }
109
+ tests {
110
+ caso "audita falha" {
111
+ given {
112
+ chave: "sem_permissao"
113
+ }
114
+
115
+ expect {
116
+ sucesso: verdadeiro
117
+ }
118
+ }
119
+ }
120
+ }
121
+
122
+ task registrar_sucesso {
123
+ input {
124
+ protocolo: Id required
125
+ }
126
+ output {
127
+ registro_id: Id
128
+ }
129
+ effects {
130
+ auditoria operacao_concluida
131
+ evento operacao_sensivel_concluida
132
+ }
133
+ guarantees {
134
+ registro_id existe
135
+ }
136
+ tests {
137
+ caso "registra sucesso" {
138
+ given {
139
+ protocolo: "prot_1"
140
+ }
141
+
142
+ expect {
143
+ sucesso: verdadeiro
144
+ }
145
+ }
146
+ }
147
+ }
148
+
149
+ flow resposta_segura {
150
+ chave: Texto
151
+ etapa tentar usa executar_operacao_sensivel com chave = chave em_sucesso concluir em_erro registrar_falha por_erro acesso_negado = tratar_acesso_negado, recurso_indisponivel = agendar_retentativa
152
+ etapa tratar_acesso_negado usa responder_acesso_negado com chave = chave depende_de tentar
153
+ etapa agendar_retentativa usa responder_retentativa com chave = chave depende_de tentar
154
+ etapa registrar_falha usa registrar_auditoria_falha com chave = chave depende_de tentar
155
+ etapa concluir usa registrar_sucesso com protocolo = tentar.protocolo depende_de tentar
156
+ }
157
+ }