@semacode/cli 1.5.17 → 1.5.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/AGENTS.md +268 -260
  2. package/LICENSE +22 -22
  3. package/README.md +93 -61
  4. package/SEMA_BRIEF.curto.txt +8 -6
  5. package/SEMA_BRIEF.md +71 -22
  6. package/SEMA_BRIEF.micro.txt +7 -5
  7. package/SEMA_INDEX.json +931 -193
  8. package/dist/controleComercialSupabase.d.ts +326 -0
  9. package/dist/controleComercialSupabase.js +310 -0
  10. package/dist/controleComercialSupabase.js.map +1 -0
  11. package/dist/docs.js +48 -20
  12. package/dist/docs.js.map +1 -1
  13. package/dist/drift.d.ts +5 -3
  14. package/dist/drift.js +119 -116
  15. package/dist/drift.js.map +1 -1
  16. package/dist/importador.d.ts +1 -1
  17. package/dist/importador.js +1 -200
  18. package/dist/importador.js.map +1 -1
  19. package/dist/index.js +1924 -493
  20. package/dist/index.js.map +1 -1
  21. package/dist/mcpRemoto.d.ts +32 -0
  22. package/dist/mcpRemoto.js +61 -0
  23. package/dist/mcpRemoto.js.map +1 -0
  24. package/dist/projeto.js +3 -21
  25. package/dist/projeto.js.map +1 -1
  26. package/dist/tipos.d.ts +1 -1
  27. package/docs/AGENT_STARTER.md +109 -102
  28. package/docs/cli.md +89 -33
  29. package/docs/como-ensinar-a-sema-para-ia.md +42 -36
  30. package/docs/deploy.md +231 -43
  31. package/docs/documentacao.md +61 -36
  32. package/docs/env.md +63 -14
  33. package/docs/extensao-vscode.md +12 -4
  34. package/docs/fluxo-pratico-ia-sema.md +45 -35
  35. package/docs/instalacao-e-primeiro-uso.md +52 -30
  36. package/docs/integracao-com-ia.md +44 -35
  37. package/docs/mcp.md +270 -31
  38. package/docs/pagamento-ponta-a-ponta.md +40 -24
  39. package/docs/persistencia-vendor-first.md +11 -5
  40. package/docs/prompt-base-ia-sema.md +18 -11
  41. package/docs/rollback.md +17 -15
  42. package/docs/sintaxe.md +37 -229
  43. package/exemplos/agendamento.sema +105 -106
  44. package/exemplos/assinatura.sema +133 -136
  45. package/exemplos/auditoria.sema +89 -88
  46. package/exemplos/autenticacao.sema +125 -125
  47. package/exemplos/author_obra_comum.sema +294 -0
  48. package/exemplos/author_tema_sensivel.sema +264 -0
  49. package/exemplos/automacao.sema +107 -107
  50. package/exemplos/cadastro_usuario.sema +54 -54
  51. package/exemplos/calculadora.sema +78 -78
  52. package/exemplos/crud_simples.sema +89 -89
  53. package/exemplos/estoque.sema +127 -126
  54. package/exemplos/exportacao.sema +94 -94
  55. package/exemplos/fila.sema +130 -131
  56. package/exemplos/integracao_externa.sema +94 -94
  57. package/exemplos/multi_tenant.sema +140 -140
  58. package/exemplos/notificacao.sema +149 -98
  59. package/exemplos/operacao_estrategia.sema +633 -402
  60. package/exemplos/pagamento.sema +434 -222
  61. package/exemplos/pagamento_dominio.sema +35 -35
  62. package/exemplos/pedido.sema +255 -119
  63. package/exemplos/permissao.sema +121 -121
  64. package/exemplos/persistencia_vendor_first.sema +86 -86
  65. package/exemplos/profile_game.sema +114 -0
  66. package/exemplos/profile_legal.sema +105 -0
  67. package/exemplos/profile_ops.sema +110 -0
  68. package/exemplos/profile_research.sema +104 -0
  69. package/exemplos/profile_software.sema +123 -0
  70. package/exemplos/profile_workflow_n8n.sema +99 -0
  71. package/exemplos/relatorio.sema +93 -93
  72. package/exemplos/replica_analitica_erp.sema +160 -0
  73. package/exemplos/testes_embutidos.sema +45 -45
  74. package/exemplos/tratamento_erro.sema +157 -157
  75. package/exemplos/upload_arquivo.sema +93 -93
  76. package/exemplos/webhook.sema +94 -96
  77. package/llms-full.txt +34 -34
  78. package/llms.txt +17 -17
  79. package/node_modules/@sema/gerador-css/dist/index.js +563 -563
  80. package/node_modules/@sema/gerador-css/package.json +1 -1
  81. package/node_modules/@sema/gerador-dart/package.json +1 -1
  82. package/node_modules/@sema/gerador-html/dist/index.js +90 -90
  83. package/node_modules/@sema/gerador-html/package.json +1 -1
  84. package/node_modules/@sema/gerador-javascript/dist/index.js +92 -92
  85. package/node_modules/@sema/gerador-javascript/package.json +1 -1
  86. package/node_modules/@sema/gerador-lua/dist/index.js +53 -53
  87. package/node_modules/@sema/gerador-lua/package.json +1 -1
  88. package/node_modules/@sema/gerador-python/dist/index.js +122 -96
  89. package/node_modules/@sema/gerador-python/dist/index.js.map +1 -1
  90. package/node_modules/@sema/gerador-python/package.json +1 -1
  91. package/node_modules/@sema/gerador-typescript/dist/index.js +153 -153
  92. package/node_modules/@sema/gerador-typescript/package.json +1 -1
  93. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +2 -4
  94. package/node_modules/@sema/nucleo/dist/formatador/index.js +26 -46
  95. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -1
  96. package/node_modules/@sema/nucleo/dist/ir/conversor.js +9 -204
  97. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
  98. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -35
  99. package/node_modules/@sema/nucleo/dist/lexer/tokens.js +0 -21
  100. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -1
  101. package/node_modules/@sema/nucleo/dist/parser/parser.js +0 -40
  102. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
  103. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +6 -5
  104. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +76 -307
  105. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -1
  106. package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +2 -0
  107. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +32 -2
  108. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +1 -1
  109. package/node_modules/@sema/nucleo/package.json +1 -1
  110. package/node_modules/@sema/padroes/package.json +1 -1
  111. package/package.json +15 -15
@@ -0,0 +1,123 @@
1
+ module exemplos.profile.software {
2
+ docs {
3
+ resumo: "Starter do Profile Software: contrato primeiro. Criar, editar ou remover contrato antes de qualquer acao; depois codigo vivo, drift, impacto, vinculos rastreaveis, arquivo, simbolo, validar, verificar, checks e testes."
4
+ }
5
+
6
+ type MudancaSoftware {
7
+ fields {
8
+ contrato: Texto
9
+ codigo_vivo: Texto
10
+ drift: Texto
11
+ impacto: Texto
12
+ checks: Lista
13
+ }
14
+ invariants {
15
+ contrato existe
16
+ codigo_vivo existe
17
+ drift existe
18
+ impacto existe
19
+ checks existe
20
+ }
21
+ }
22
+
23
+ task declarar_mudanca_contract_first {
24
+ input {
25
+ contrato: Texto required
26
+ codigo_vivo: Texto required
27
+ arquivo: Texto required
28
+ simbolo: Texto required
29
+ vinculos: Texto
30
+ impl: Texto
31
+ }
32
+ output {
33
+ mudanca: MudancaSoftware
34
+ pode_editar: Booleano
35
+ }
36
+ rules {
37
+ contrato deve_ser preenchido
38
+ codigo_vivo deve_ser declarado
39
+ arquivo deve_ser rastreavel
40
+ simbolo deve_ser rastreavel
41
+ vinculos deve_ser explicitos
42
+ impl deve_ser coerente
43
+ }
44
+ effects {
45
+ auditoria profile_software_mudanca criticidade = media
46
+ }
47
+ forbidden {
48
+ codigo_sem_contrato
49
+ editar_sem_drift
50
+ finalizar_sem_checks
51
+ }
52
+ execucao {
53
+ idempotencia: verdadeiro
54
+ timeout: "10s"
55
+ criticidade_operacional: media
56
+ }
57
+ guarantees {
58
+ mudanca existe
59
+ pode_editar == verdadeiro
60
+ }
61
+ tests {
62
+ caso "mudanca pronta para codigo" {
63
+ given {
64
+ contrato: "contrato validado"
65
+ codigo_vivo: "implementacao existente"
66
+ arquivo: "src/pedidos.ts"
67
+ simbolo: "criarPedido"
68
+ }
69
+
70
+ expect {
71
+ sucesso: verdadeiro
72
+ pode_editar: verdadeiro
73
+ }
74
+ }
75
+ }
76
+ }
77
+
78
+ task fechar_mudanca_com_verificacao {
79
+ input {
80
+ drift: Texto required
81
+ impacto: Texto required
82
+ validar: Texto required
83
+ verificar: Texto required
84
+ testes: Lista required
85
+ checks: Lista
86
+ }
87
+ output {
88
+ concluida: Booleano
89
+ bloqueios: Lista
90
+ }
91
+ rules {
92
+ drift deve_ser executado
93
+ impacto deve_ser mapeado
94
+ validar deve_ser executado
95
+ verificar deve_ser executado
96
+ testes deve_ser nao_vazio
97
+ checks deve_ser completos
98
+ }
99
+ effects {
100
+ auditoria profile_software_fechamento criticidade = media
101
+ }
102
+ guarantees {
103
+ concluida existe
104
+ bloqueios existe
105
+ }
106
+ tests {
107
+ caso "fecha com checks completos" {
108
+ given {
109
+ drift: "sem divergencia"
110
+ impacto: "mapa calculado"
111
+ validar: "sema validar"
112
+ verificar: "sema verificar"
113
+ testes: "npm test"
114
+ }
115
+
116
+ expect {
117
+ sucesso: verdadeiro
118
+ concluida: verdadeiro
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
@@ -0,0 +1,99 @@
1
+ module exemplos.profile.workflow_n8n {
2
+ docs {
3
+ resumo: "Starter do Profile Workflow para n8n: contrato primeiro. Criar, editar ou remover contrato antes de qualquer acao; depois runtime workflow como alvo de compatibilidade, adapter adaptado, scorecard parcial, webhook, cron, HTTP, branching, transformacao, authz, audit, compensacao e guarantees."
4
+ }
5
+
6
+ type RuntimeN8n {
7
+ fields {
8
+ runtime: Texto
9
+ adapter: Texto
10
+ compatibilidade: Texto
11
+ scorecard: Texto
12
+ lacunas: Lista
13
+ }
14
+ invariants {
15
+ runtime existe
16
+ adapter existe
17
+ compatibilidade existe
18
+ scorecard existe
19
+ lacunas existe
20
+ }
21
+ }
22
+
23
+ task validar_workflow_n8n {
24
+ input {
25
+ runtime: Texto required
26
+ adapter: Texto required
27
+ scorecard: Texto required
28
+ compatibilidade: Texto
29
+ webhook: Texto
30
+ cron: Texto
31
+ http: Texto
32
+ branching: Texto
33
+ transformacao: Texto
34
+ authz: Texto
35
+ audit: Texto
36
+ compensacao: Texto
37
+ guarantees: Texto
38
+ }
39
+ output {
40
+ runtime_validado: RuntimeN8n
41
+ aprovado: Booleano
42
+ }
43
+ rules {
44
+ runtime deve_ser workflow
45
+ adapter deve_ser n8n
46
+ compatibilidade deve_ser parcial
47
+ scorecard deve_ser calculado
48
+ webhook deve_ser mapeado
49
+ cron deve_ser mapeado
50
+ http deve_ser mapeado
51
+ branching deve_ser mapeado
52
+ transformacao deve_ser mapeada
53
+ authz deve_ser declarado
54
+ audit deve_ser declarado
55
+ compensacao deve_ser declarada
56
+ guarantees deve_ser declaradas
57
+ }
58
+ effects {
59
+ auditoria workflow_n8n_scorecard criticidade = media
60
+ }
61
+ forbidden {
62
+ equivalencia_total_falsa
63
+ n8n_como_linguagem_canonica
64
+ node_sem_contrato
65
+ }
66
+ execucao {
67
+ idempotencia: verdadeiro
68
+ timeout: "10s"
69
+ compensacao: "bloquear_publicacao_do_workflow"
70
+ criticidade_operacional: media
71
+ }
72
+ guarantees {
73
+ runtime_validado existe
74
+ aprovado existe
75
+ }
76
+ tests {
77
+ caso "n8n e adapter honesto" {
78
+ given {
79
+ runtime: "workflow n8n"
80
+ adapter: "adapter adaptado"
81
+ scorecard: "webhook cron HTTP branching transformacao nativos; authz audit compensacao guarantees parciais"
82
+ }
83
+
84
+ expect {
85
+ sucesso: verdadeiro
86
+ aprovado: verdadeiro
87
+ }
88
+ }
89
+ }
90
+ }
91
+
92
+ flow onboarding_por_n8n {
93
+ lead_id: Id
94
+ email: Email
95
+ etapa receber usa validar_workflow_n8n com runtime = "workflow n8n", adapter = "n8n", scorecard = "webhook cron HTTP branching transformacao com lacunas authz audit compensacao guarantees" em_sucesso concluir em_erro bloquear
96
+ etapa concluir usa validar_workflow_n8n com runtime = "workflow n8n", adapter = "n8n", scorecard = "compatibilidade parcial" depende_de receber
97
+ etapa bloquear usa validar_workflow_n8n com runtime = "workflow n8n", adapter = "n8n", scorecard = "bloqueio por lacuna" depende_de receber
98
+ }
99
+ }
@@ -1,93 +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
- }
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
+ }
@@ -1,45 +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
- }
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
+ }