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