jarvis-ai-framework 2.1.1 → 3.2.0

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 (266) hide show
  1. package/AGENTS.md +14 -115
  2. package/agents/AGENTS.md +11 -23
  3. package/agents/README.md +27 -129
  4. package/agents/engineering/data/eng.data-engineer.agent.md +11 -34
  5. package/agents/engineering/eng.advisor.agent.md +56 -0
  6. package/agents/engineering/eng.agent.md +14 -24
  7. package/agents/engineering/eng.bug-hunter.md +7 -15
  8. package/agents/engineering/eng.dev-code-reviewer.md +1 -1
  9. package/agents/engineering/eng.frontend.agent.md +3 -7
  10. package/agents/engineering/eng.rpa.agent.md +2 -8
  11. package/agents/engineering/qa/eng.qa.quality-strategist.md +6 -11
  12. package/agents/engineering/qa/eng.qa.test-architect.md +8 -18
  13. package/agents/engineering/qa/eng.qa.test-planner.md +10 -14
  14. package/agents/engineering/qa/eng.qa.testing-engineer.md +91 -24
  15. package/agents/product/prod.discovery-interviewer.md +3 -3
  16. package/bin/README.md +142 -0
  17. package/bin/commands/docs-publish.js +105 -141
  18. package/bin/commands/docs-sync.js +66 -104
  19. package/bin/commands/info.js +7 -27
  20. package/bin/commands/init.js +23 -51
  21. package/bin/commands/install-rtk.js +9 -3
  22. package/bin/commands/list.js +5 -18
  23. package/bin/commands/map.js +20 -5
  24. package/bin/commands/qa-signoff.js +58 -55
  25. package/bin/commands/tokens.js +14 -17
  26. package/bin/commands/whoami.js +30 -26
  27. package/bin/jarvis.js +9 -163
  28. package/bin/lib/auth/session.js +20 -20
  29. package/bin/lib/cli/program.js +219 -0
  30. package/bin/lib/cli/shared-options.js +29 -0
  31. package/bin/lib/config/constants.js +59 -2
  32. package/bin/lib/config/ide-config.js +4 -8
  33. package/bin/lib/core/profile-filter.js +4 -1
  34. package/bin/lib/core/scanner.js +3 -29
  35. package/bin/lib/core/sync-engine.js +21 -14
  36. package/bin/lib/core/token-report.js +12 -2
  37. package/bin/lib/docs/fetch-file.js +39 -0
  38. package/bin/lib/docs/publish-file.js +194 -0
  39. package/bin/lib/docs/redis-cache.js +49 -0
  40. package/bin/lib/docs/validate-frontmatter.js +9 -39
  41. package/bin/lib/env-loader.js +11 -34
  42. package/bin/lib/flow-map/parse.js +11 -5
  43. package/bin/lib/flow-map/render.js +5 -2
  44. package/bin/lib/flow-map/tree.js +59 -10
  45. package/bin/lib/tasks/comment.js +40 -35
  46. package/bin/lib/utils/frontmatter.js +57 -0
  47. package/bin/lib/utils/git-parser.js +4 -6
  48. package/bin/lib/utils/npmrc-parser.js +6 -13
  49. package/bin/lib/utils/paths.js +2 -4
  50. package/bin/lib/utils/ui.js +3 -9
  51. package/bin/lib/vcs/api.js +25 -41
  52. package/bin/lib/vcs/create-issue.js +49 -33
  53. package/bin/lib/vcs/create-merge.js +47 -31
  54. package/bin/lib/vcs/fetch-raw.js +35 -23
  55. package/package.json +14 -5
  56. package/rules/engineering/eng-rules.md +1 -1
  57. package/rules/engineering/eng-security-rules.md +18 -16
  58. package/rules/engineering/eng.bump-rules.md +3 -2
  59. package/rules/engineering/eng.docs-scraping-rules.md +4 -4
  60. package/rules/engineering/eng.integrations-rules.md +6 -4
  61. package/rules/engineering/eng.skills-rules.md +1 -1
  62. package/rules/engineering/eng.specializations-rules.md +18 -4
  63. package/rules/engineering/frontend/eng.frontend-rules.md +1 -4
  64. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +1 -1
  65. package/rules/engineering/rpa/eng.rpa-rules.md +4 -9
  66. package/rules-on-demand/engineering/eng.pre-pr-rules.md +1 -1
  67. package/rules-on-demand/engineering/eng.start-rules.md +2 -0
  68. package/skills/AGENTS.md +52 -87
  69. package/skills/SKILLS-ROADMAP.md +47 -128
  70. package/skills/eng-ai/SKILL.md +270 -0
  71. package/skills/eng-ai/references/1-fundamentos-ml.md +24 -0
  72. package/skills/eng-ai/references/10-arquitetura-solucoes-ia.md +24 -0
  73. package/skills/eng-ai/references/11-governanca-ia.md +24 -0
  74. package/skills/eng-ai/references/12-seguranca-ia-responsavel.md +25 -0
  75. package/skills/eng-ai/references/2-matematica-estatistica.md +24 -0
  76. package/skills/eng-ai/references/3-dados-para-ia.md +24 -0
  77. package/skills/eng-ai/references/4-deep-learning-fundacionais.md +24 -0
  78. package/skills/eng-ai/references/5-llms-chatbots-agentes-rag.md +25 -0
  79. package/skills/eng-ai/references/6-avaliacao-experimentacao.md +24 -0
  80. package/skills/eng-ai/references/7-engenharia-sistemas-ia.md +24 -0
  81. package/skills/eng-ai/references/8-mlops-plataforma.md +24 -0
  82. package/skills/eng-ai/references/9-produto-ia.md +24 -0
  83. package/skills/eng-ai/references/especializacoes.md +17 -0
  84. package/skills/eng-automation/SKILL.md +290 -0
  85. package/skills/eng-automation/references/1-fundamentos-automacao.md +25 -0
  86. package/skills/eng-automation/references/10-ingestao-dados.md +25 -0
  87. package/skills/eng-automation/references/11-captcha-antibot.md +25 -0
  88. package/skills/eng-automation/references/12-limites-taxa-sessoes.md +25 -0
  89. package/skills/eng-automation/references/13-agendamento-orquestracao.md +24 -0
  90. package/skills/eng-automation/references/14-retentativa-erros.md +25 -0
  91. package/skills/eng-automation/references/15-autenticacao-credenciais.md +24 -0
  92. package/skills/eng-automation/references/16-observabilidade-confiabilidade.md +24 -0
  93. package/skills/eng-automation/references/2-aquisicao-dados.md +25 -0
  94. package/skills/eng-automation/references/3-automacao-navegador.md +24 -0
  95. package/skills/eng-automation/references/4-scraping-crawling.md +25 -0
  96. package/skills/eng-automation/references/5-apis-rest-graphql-soap.md +26 -0
  97. package/skills/eng-automation/references/6-webhooks-integracao.md +25 -0
  98. package/skills/eng-automation/references/7-rpa.md +25 -0
  99. package/skills/eng-automation/references/8-extracao-estruturada.md +25 -0
  100. package/skills/eng-automation/references/9-extracao-documentos.md +25 -0
  101. package/skills/eng-automation/references/especializacoes.md +18 -0
  102. package/skills/eng-backend-nestjs/SKILL.md +1 -1
  103. package/skills/eng-data/SKILL.md +271 -0
  104. package/skills/eng-data/references/1-fundamentos-dados.md +24 -0
  105. package/skills/eng-data/references/10-ciencia-dados.md +24 -0
  106. package/skills/eng-data/references/11-dataops-plataforma.md +24 -0
  107. package/skills/eng-data/references/12-seguranca-privacidade.md +24 -0
  108. package/skills/eng-data/references/2-modelagem-dados.md +24 -0
  109. package/skills/eng-data/references/3-bancos-dados.md +24 -0
  110. package/skills/eng-data/references/4-arquitetura-dados.md +24 -0
  111. package/skills/eng-data/references/5-pipelines-integracao.md +24 -0
  112. package/skills/eng-data/references/6-qualidade-dados.md +24 -0
  113. package/skills/eng-data/references/7-governanca-metadados.md +24 -0
  114. package/skills/eng-data/references/8-estatistica-analise.md +24 -0
  115. package/skills/eng-data/references/9-analytics-bi.md +24 -0
  116. package/skills/eng-data/references/especializacoes.md +20 -0
  117. package/skills/eng-frontend/SKILL.md +12 -5
  118. package/skills/eng-frontend/references/13-design-system.md +48 -0
  119. package/skills/eng-frontend/references/14-microfrontend.md +46 -0
  120. package/skills/eng-global-task-comment/SKILL.md +3 -3
  121. package/skills/eng-platform/SKILL.md +331 -0
  122. package/skills/eng-platform/references/1-fundamentos-sistemas.md +23 -0
  123. package/skills/eng-platform/references/10-resiliencia-arquitetura.md +24 -0
  124. package/skills/eng-platform/references/11-plataforma-devex.md +24 -0
  125. package/skills/eng-platform/references/12-finops-custos.md +24 -0
  126. package/skills/eng-platform/references/13-seguranca-fundamentos.md +26 -0
  127. package/skills/eng-platform/references/14-profiling-performance.md +23 -0
  128. package/skills/eng-platform/references/15-testes-carga-chaos.md +23 -0
  129. package/skills/eng-platform/references/16-cache-multicamada.md +22 -0
  130. package/skills/eng-platform/references/2-redes.md +23 -0
  131. package/skills/eng-platform/references/3-cloud.md +24 -0
  132. package/skills/eng-platform/references/4-iac-automacao.md +24 -0
  133. package/skills/eng-platform/references/5-containers-orquestracao.md +25 -0
  134. package/skills/eng-platform/references/6-cicd-entrega.md +24 -0
  135. package/skills/eng-platform/references/7-observabilidade.md +24 -0
  136. package/skills/eng-platform/references/8-confiabilidade-sre.md +24 -0
  137. package/skills/eng-platform/references/9-seguranca-infra.md +26 -0
  138. package/skills/eng-platform/references/especializacoes.md +34 -0
  139. package/skills/eng-qa/SKILL.md +283 -0
  140. package/skills/eng-qa/references/1-fundamentos-qualidade.md +25 -0
  141. package/skills/eng-qa/references/10-confiabilidade.md +25 -0
  142. package/skills/eng-qa/references/11-seguranca.md +24 -0
  143. package/skills/eng-qa/references/12-acessibilidade.md +24 -0
  144. package/skills/eng-qa/references/13-dados-testes.md +24 -0
  145. package/skills/eng-qa/references/14-gestao-testes-defeitos.md +25 -0
  146. package/skills/eng-qa/references/15-arquitetura-qa.md +25 -0
  147. package/skills/eng-qa/references/2-estrategia-planejamento.md +25 -0
  148. package/skills/eng-qa/references/3-design-testes.md +25 -0
  149. package/skills/eng-qa/references/4-manual-exploratorio.md +24 -0
  150. package/skills/eng-qa/references/5-automacao-testes.md +25 -0
  151. package/skills/eng-qa/references/6-api-integracao.md +25 -0
  152. package/skills/eng-qa/references/7-contrato.md +24 -0
  153. package/skills/eng-qa/references/8-interface-compat-mobile.md +24 -0
  154. package/skills/eng-qa/references/9-performance.md +24 -0
  155. package/skills/eng-qa/references/especializacoes.md +29 -0
  156. package/skills/eng-qa-planner/SKILL.md +264 -0
  157. package/skills/jarvis-context-detect/SKILL.md +1 -1
  158. package/skills/jarvis-context-detect/assets/context-profile-template.md +1 -1
  159. package/skills/jarvis-create-specialization/SKILL.md +8 -0
  160. package/skills/jarvis-docs-central/README.md +31 -28
  161. package/skills/jarvis-docs-central/SKILL.md +5 -5
  162. package/skills/jarvis-init/SKILL.md +9 -8
  163. package/skills/jarvis-init/assets/passo-adicionar-stacks.md +47 -18
  164. package/skills/jarvis-list-specializations/SKILL.md +30 -17
  165. package/skills/jarvis-report-issue/SKILL.md +1 -1
  166. package/taxonomy.md +4 -16
  167. package/templates/AGENTS.md +2 -0
  168. package/templates/ENV-template.md +20 -2
  169. package/templates/engineering/advisor-template.md +65 -0
  170. package/templates/engineering/architecture-template.md +52 -4
  171. package/templates/engineering/qa/qa.sprint-plan-template.md +1 -1
  172. package/workflows/AGENTS.md +3 -1
  173. package/workflows/README.md +0 -10
  174. package/workflows/engineering/data/data.new-pipeline.md +6 -5
  175. package/workflows/engineering/eng.bug-audit.md +4 -14
  176. package/workflows/engineering/eng.debug.md +4 -20
  177. package/workflows/engineering/eng.plan.md +4 -26
  178. package/workflows/engineering/eng.pr.md +13 -63
  179. package/workflows/engineering/eng.pre-pr.md +14 -51
  180. package/workflows/engineering/eng.review.md +7 -13
  181. package/workflows/engineering/eng.rpa.robot.md +3 -9
  182. package/workflows/engineering/eng.start.md +37 -32
  183. package/workflows/engineering/eng.work.md +17 -40
  184. package/workflows/engineering/qa/eng.qa-sprint-planning.md +1 -1
  185. package/workflows/product/prod.spec.discovery.md +2 -2
  186. package/workflows/warm-up.md +35 -63
  187. package/agents/engineering/eng.cybersecurity.agent.md +0 -486
  188. package/agents/engineering/qa/eng.qa.cypress-specialist.md +0 -112
  189. package/bin/lib/docs/fetch-file.sh +0 -41
  190. package/bin/lib/docs/publish-file.sh +0 -284
  191. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +0 -137
  192. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +0 -181
  193. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +0 -120
  194. package/skills/eng-ai-engineer/SKILL.md +0 -303
  195. package/skills/eng-data-bi/SKILL.md +0 -206
  196. package/skills/eng-data-debug/SKILL.md +0 -314
  197. package/skills/eng-data-engineer/SKILL.md +0 -266
  198. package/skills/eng-data-onboard/SKILL.md +0 -317
  199. package/skills/eng-data-orchestrator/SKILL.md +0 -433
  200. package/skills/eng-devops-performance-engineer/SKILL.md +0 -319
  201. package/skills/eng-frontend-design-system/SKILL.md +0 -155
  202. package/skills/eng-frontend-design-system/references/1-estrutura-pacote.md +0 -57
  203. package/skills/eng-frontend-design-system/references/2-tokens.md +0 -116
  204. package/skills/eng-frontend-design-system/references/3-componentes.md +0 -165
  205. package/skills/eng-frontend-design-system/references/4-storybook.md +0 -85
  206. package/skills/eng-frontend-design-system/references/5-auditoria-versionamento.md +0 -76
  207. package/skills/eng-frontend-microfrontend/SKILL.md +0 -164
  208. package/skills/eng-frontend-microfrontend/references/1-criando-remote.md +0 -109
  209. package/skills/eng-frontend-microfrontend/references/2-configurando-shell.md +0 -70
  210. package/skills/eng-frontend-microfrontend/references/3-contratos-interface.md +0 -73
  211. package/skills/eng-frontend-microfrontend/references/4-shared-dependencies.md +0 -48
  212. package/skills/eng-frontend-microfrontend/references/5-event-bus.md +0 -59
  213. package/skills/eng-frontend-microfrontend/references/6-monorepo-deploy.md +0 -77
  214. package/skills/eng-frontend-microfrontend/references/7-troubleshooting.md +0 -45
  215. package/skills/eng-global-browser-extension-builder/SKILL.md +0 -392
  216. package/skills/eng-global-jira-comment/SKILL.md +0 -27
  217. package/skills/eng-qa-a11y-audit/SKILL.md +0 -276
  218. package/skills/eng-qa-bug-report/SKILL.md +0 -877
  219. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +0 -138
  220. package/skills/eng-qa-bug-report/references/1-integracao-task-managers.md +0 -148
  221. package/skills/eng-qa-bug-report/references/2-exemplos-de-uso.md +0 -46
  222. package/skills/eng-qa-bug-report/references/3-bug-to-test.md +0 -45
  223. package/skills/eng-qa-cypress-e2e/SKILL.md +0 -184
  224. package/skills/eng-qa-dev-guide/SKILL.md +0 -173
  225. package/skills/eng-qa-e2e/SKILL.md +0 -407
  226. package/skills/eng-qa-e2e-spec-writer/SKILL.md +0 -329
  227. package/skills/eng-qa-exploratory/SKILL.md +0 -196
  228. package/skills/eng-qa-gate/SKILL.md +0 -377
  229. package/skills/eng-qa-gate/assets/checklist-validacao.md +0 -291
  230. package/skills/eng-qa-graphql-contract/SKILL.md +0 -263
  231. package/skills/eng-qa-quality-report/SKILL.md +0 -419
  232. package/skills/eng-qa-test-plan/SKILL.md +0 -473
  233. package/skills/eng-qa-testsprite/SKILL.md +0 -332
  234. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +0 -224
  235. package/skills/eng-qa-unit-test/SKILL.md +0 -478
  236. package/skills/eng-scraper/SKILL.md +0 -260
  237. package/skills/eng-scraper/references/1-puppeteer.md +0 -140
  238. package/skills/eng-scraper/references/2-playwright-cheerio-pdf.md +0 -82
  239. package/skills/eng-scraper/references/3-anti-bot.md +0 -94
  240. package/skills/eng-scraper/references/4-resiliencia-etl-monitoramento.md +0 -137
  241. package/skills/eng-scraper-robot-builder/SKILL.md +0 -377
  242. package/skills/eng-security-cybersecurity/SKILL.md +0 -250
  243. package/skills/eng-security-cybersecurity/references/1-owasp-top-10.md +0 -331
  244. package/skills/eng-security-cybersecurity/references/2-secrets-management.md +0 -31
  245. package/skills/eng-security-cybersecurity/references/3-input-validation.md +0 -43
  246. package/skills/eng-security-cybersecurity/references/4-compliance.md +0 -20
  247. package/skills/eng-security-patch/SKILL.md +0 -388
  248. package/skills/eng-security-threat-model/SKILL.md +0 -171
  249. package/skills/eng-security-triage/SKILL.md +0 -276
  250. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +0 -311
  251. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +0 -249
  252. package/templates/engineering/qa/qa.cypress-test-template.md +0 -172
  253. package/templates/engineering/qa/qa.exploratory-session-template.md +0 -148
  254. package/templates/engineering/qa/qa.quality-report-template.md +0 -130
  255. package/workflows/engineering/eng.security-audit.md +0 -319
  256. package/workflows/engineering/eng.security-incident.md +0 -281
  257. package/workflows/engineering/eng.security-pipeline.md +0 -219
  258. package/workflows/engineering/eng.security-review.md +0 -241
  259. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +0 -57
  260. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +0 -57
  261. package/workflows/engineering/qa/eng.qa-exploratory-session.md +0 -68
  262. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +0 -209
  263. package/workflows/engineering/qa/eng.qa-quality-report.md +0 -85
  264. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-coverage-template.md +0 -0
  265. /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-patterns.md +0 -0
  266. /package/templates/{CDD aplicado a Prompts.md → cdd-aplicado-a-prompts.md} +0 -0
@@ -1,317 +0,0 @@
1
- ---
2
- name: eng-data-onboard
3
- description: >
4
- Guia para primeira ingestão de uma fonte de dados nova: schema discovery, amostragem,
5
- criação da camada bronze, Expectation Suite mínima e documentação obrigatória.
6
- Trigger: Use quando precisar integrar uma fonte de dados nova ao pipeline de dados.
7
- license: AGPL-3.0
8
- compatibility: Designed for Claude Code (or similar products)
9
- allowed-tools: Read Write Edit Glob Grep Bash
10
- metadata:
11
- author: jarvis-team
12
- version: "1.0"
13
- area: data
14
- argument-hint: "[nome-da-fonte] [tipo: api|db|arquivo|stream]"
15
- disable-model-invocation: false
16
- ---
17
-
18
- # Eng Data Onboard — Integração de Fonte Nova
19
-
20
- Você é um **especialista em integração de fontes de dados** com foco em onboarding seguro: entender a fonte antes de ingerir, documentar antes de expor, e garantir qualidade desde o primeiro dado em bronze.
21
-
22
- ## Objetivo
23
-
24
- Integrar uma fonte de dados nova de forma segura e documentada — criando a camada bronze, a Expectation Suite mínima e a documentação de pipeline antes de promover para silver/gold.
25
-
26
- ## Stack do Projeto
27
-
28
- ```bash
29
- grep -E "^DATA_" $IDE/ENV.md
30
- ```
31
-
32
- | Variável ENV | O que define |
33
- |-------------|-------------|
34
- | `DATA_ETL_TOOL` | Ferramenta ETL (ex: aws_glue, dbt, spark, pandas) |
35
- | `DATA_QUALITY_TOOL` | Ferramenta de qualidade (ex: great_expectations, soda) |
36
- | `DATA_LAKE` | Armazenamento (ex: aws_s3, gcs) |
37
- | `DATA_QUERY_ENGINE` | Engine de query (ex: aws_athena, bigquery) |
38
- | `DATA_REPO` | Repositório dos scripts |
39
- | `DATA_ORCHESTRATOR` | Orquestrador (ex: airflow, prefect, glue-scheduler) |
40
-
41
- ---
42
-
43
- ## Fases de Onboarding
44
-
45
- ### Fase 1 — Entender a Fonte
46
-
47
- Antes de escrever qualquer código, coletar as informações abaixo **uma por vez** se não fornecidas:
48
-
49
- | Informação | Pergunta |
50
- |---|---|
51
- | Nome da fonte | Como será chamada? (ex: `erp_pedidos`, `crm_clientes`) |
52
- | Tipo | API REST, banco relacional, arquivo (CSV/Parquet), stream? |
53
- | Frequência | Ingestão diária, horária, sob demanda? |
54
- | Volume estimado | Quantos registros por execução? |
55
- | Owner na fonte | Quem é o responsável pelo dado na origem? |
56
- | Campos disponíveis | Quais colunas existem? Qual é a chave primária? |
57
- | Campos sensíveis | Há CPF, dados bancários, localização, dados pessoais? |
58
- | SLA esperado | Até quando o dado precisa estar disponível em gold? |
59
-
60
- ### Fase 2 — Schema Discovery (amostragem)
61
-
62
- Antes de ingerir tudo, amostrar a fonte para entender o schema real:
63
-
64
- #### Para API REST
65
-
66
- ```python
67
- import requests
68
- import json
69
-
70
- def sample_api(endpoint: str, params: dict, n_samples: int = 100) -> list[dict]:
71
- """Amostra N registros da API para análise de schema."""
72
- response = requests.get(
73
- endpoint,
74
- params={**params, 'limit': n_samples},
75
- headers={'Authorization': f"Bearer {os.getenv('SOURCE_API_TOKEN')}"}
76
- )
77
- response.raise_for_status()
78
- return response.json()
79
-
80
- # Analisar schema
81
- sample = sample_api(endpoint, params)
82
- print(f"Total campos: {len(sample[0].keys())}")
83
- print(f"Campos: {list(sample[0].keys())}")
84
-
85
- # Verificar nulos por campo
86
- import pandas as pd
87
- df_sample = pd.DataFrame(sample)
88
- print(df_sample.isnull().sum() / len(df_sample) * 100) # % de nulos por campo
89
- ```
90
-
91
- #### Para banco relacional
92
-
93
- ```sql
94
- -- Amostrar e inspecionar schema
95
- SELECT *
96
- FROM <schema>.<tabela>
97
- LIMIT 100;
98
-
99
- -- Verificar cardinalidade dos campos candidatos a chave primária
100
- SELECT
101
- <campo_candidato>,
102
- COUNT(*) AS ocorrencias
103
- FROM <schema>.<tabela>
104
- GROUP BY <campo_candidato>
105
- HAVING COUNT(*) > 1
106
- LIMIT 10; -- se retornar registros → não é chave primária única
107
-
108
- -- Verificar nulos em campos críticos
109
- SELECT
110
- COUNT(*) AS total,
111
- COUNT(<campo_critico>) AS nao_nulos,
112
- COUNT(*) - COUNT(<campo_critico>) AS nulos
113
- FROM <schema>.<tabela>;
114
- ```
115
-
116
- #### Para arquivo (CSV/Parquet)
117
-
118
- ```python
119
- import pandas as pd
120
-
121
- df = pd.read_csv('amostra.csv', nrows=1000) # ou read_parquet
122
- print(df.dtypes) # tipos inferidos
123
- print(df.isnull().sum()) # nulos por coluna
124
- print(df.describe()) # estatísticas básicas
125
- print(df.nunique()) # cardinalidade por coluna
126
- ```
127
-
128
- ### Fase 3 — Documentar o Pipeline (antes de implementar)
129
-
130
- Preencher `templates/engineering/data-pipeline-template.md` com o que foi descoberto na Fase 2.
131
-
132
- **Campos obrigatórios antes de continuar**:
133
- - Nome do pipeline
134
- - Fonte (sistema, endpoint ou tabela)
135
- - Schema mapeado (campos, tipos, chave primária)
136
- - Campos sensíveis identificados e como serão tratados
137
- - Frequência de execução
138
- - Destino bronze (nome da tabela no `$DATA_QUERY_ENGINE`)
139
-
140
- > ⚠️ **Não iniciar a implementação sem o doc de pipeline preenchido.**
141
- > O doc é a fonte de verdade — se mudar algo durante a implementação, atualizar o doc.
142
-
143
- ### Fase 4 — Implementar Extração para Bronze
144
-
145
- Criar o script de extração seguindo o padrão do projeto:
146
-
147
- ```python
148
- """
149
- Pipeline: bronze_<nome_fonte>
150
- Descrição: Ingestão bruta de <fonte> para bronze
151
- Fonte: <sistema_origem> — <endpoint_ou_tabela>
152
- Destino: bronze.<nome_fonte>
153
- Frequência: <diária/horária/sob demanda>
154
- Owner: <email>
155
- """
156
- import logging
157
- from datetime import date
158
-
159
- logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
160
- logger = logging.getLogger(__name__)
161
-
162
-
163
- def extract(data_referencia: date) -> list[dict]:
164
- """Extrai dados brutos da fonte para a data de referência."""
165
- logger.info(f"Extraindo {data_referencia} de <fonte>")
166
- # implementar: API call, DB query, leitura de arquivo
167
- ...
168
-
169
-
170
- def load_bronze(raw_data: list[dict], data_referencia: date) -> None:
171
- """
172
- Carrega dados brutos em bronze de forma idempotente.
173
- Bronze = dados exatamente como vieram da fonte, sem transformação.
174
- Adiciona apenas campos de auditoria: ingested_at, source_system, data_referencia.
175
- """
176
- import pandas as pd
177
- from datetime import datetime
178
-
179
- df = pd.DataFrame(raw_data)
180
-
181
- # Campos de auditoria obrigatórios (data-rules.md seção 1)
182
- df['ingested_at'] = datetime.utcnow()
183
- df['source_system'] = '<nome_fonte>'
184
- df['data_referencia'] = data_referencia
185
-
186
- logger.info(f"Carregando {len(df)} registros em bronze.<nome_fonte> para {data_referencia}")
187
-
188
- # Idempotência: DELETE + INSERT por partição
189
- # (implementar com o $DATA_ETL_TOOL do projeto)
190
- delete_partition('bronze.<nome_fonte>', 'data_referencia', str(data_referencia))
191
- insert(df, 'bronze.<nome_fonte>')
192
-
193
- logger.info(f"Bronze carregado: {len(df)} registros")
194
-
195
-
196
- def run(data_referencia: date = date.today()) -> None:
197
- raw = extract(data_referencia)
198
- if not raw:
199
- logger.warning(f"Nenhum dado extraído para {data_referencia} — verificar fonte")
200
- return
201
- load_bronze(raw, data_referencia)
202
- logger.info(f"Pipeline bronze_<nome_fonte> concluído: {len(raw)} registros")
203
-
204
-
205
- if __name__ == "__main__":
206
- run()
207
- ```
208
-
209
- **Regras de bronze**:
210
- - ✅ Dados exatamente como vieram da fonte — sem transformação de conteúdo
211
- - ✅ Apenas campos de auditoria adicionados: `ingested_at`, `source_system`, `data_referencia`
212
- - ✅ Idempotência: DELETE por partição antes do INSERT
213
- - ❌ Nunca aplicar regras de negócio em bronze — isso é silver
214
-
215
- ### Fase 5 — Criar Expectation Suite Mínima
216
-
217
- Criar a suite de qualidade antes de usar os dados em downstream:
218
-
219
- ```python
220
- import great_expectations as ge
221
-
222
- def create_bronze_suite(datasource_name: str, table_name: str) -> None:
223
- """Cria Expectation Suite mínima para tabela bronze."""
224
- context = ge.get_context()
225
- suite = context.add_expectation_suite(f"bronze.{table_name}.min")
226
- validator = context.get_validator(
227
- datasource_name=datasource_name,
228
- data_asset_name=table_name
229
- )
230
-
231
- # Checks obrigatórios (data-rules.md seção 2)
232
- validator.expect_table_row_count_to_be_between(min_value=1)
233
- validator.expect_column_values_to_not_be_null(column="<chave_primaria>")
234
- validator.expect_column_values_to_not_be_null(column="data_referencia")
235
- validator.expect_column_values_to_be_unique(column="<chave_primaria>")
236
-
237
- # Campos sensíveis: verificar que não estão expostos sem mascaramento
238
- # (adicionar se houver campos sensíveis identificados na Fase 1)
239
-
240
- validator.save_expectation_suite()
241
- print(f"Suite criada: bronze.{table_name}.min")
242
- ```
243
-
244
- > Se o projeto usa `$DATA_QUALITY_TOOL` diferente de Great Expectations, adaptar a sintaxe mantendo os mesmos checks.
245
-
246
- ### Fase 6 — Testar e Validar
247
-
248
- Antes de considerar o onboarding completo:
249
-
250
- **Checklist de validação**:
251
-
252
- ```
253
- [ ] Script de extração executa sem erro para 1 data de teste
254
- [ ] Bronze recebe os dados com campos de auditoria corretos
255
- [ ] Expectation Suite passa para o período de teste
256
- [ ] Volume extraído é compatível com o esperado (fase 1)
257
- [ ] Campos sensíveis estão mascarados ou ausentes em bronze
258
- [ ] Script é idempotente (reprocessar 2x não duplica)
259
- [ ] Log registra: data_referencia, rows_extracted, rows_loaded, status
260
- [ ] Documentação de pipeline preenchida e salva
261
- ```
262
-
263
- ### Fase 7 — Próximos passos (silver/gold)
264
-
265
- Após bronze validado, orientar os próximos passos:
266
-
267
- ```
268
- Bronze concluído ✅
269
-
270
- Próximos passos recomendados:
271
- 1. Criar script silver_<fonte>: limpeza, tipagem e deduplicação
272
- 2. Expandir Expectation Suite para silver (checks de tipo e domínio)
273
- 3. Avaliar se há caso de uso para gold (analytics, BI, contrato de dados)
274
- 4. Se expor para outra squad → criar contrato via data.contract.md
275
- ```
276
-
277
- ### Skills invocados durante a execução do skill
278
-
279
- | Passo | Skill | Condição |
280
- |-------|-------|----------|
281
- | — | Nenhuma — skill autocontida | — |
282
-
283
- ---
284
-
285
- ## Tratamento de Campos Sensíveis
286
-
287
- Se a Fase 1 identificou campos sensíveis (CPF, dados bancários, localização, etc.):
288
-
289
- | Campo sensível | Tratamento em bronze | Tratamento em silver/gold |
290
- |---|---|---|
291
- | CPF / RG / CNH | Manter no bronze com acesso IAM restrito | Mascarar: `SHA256(cpf)` ou remover |
292
- | Dados bancários | Manter no bronze com acesso IAM restrito | Remover ou mascarar |
293
- | Localização em tempo real | Manter no bronze com acesso IAM restrito | Agregar (ex: cidade, estado) |
294
- | Telefone / Endereço | Manter no bronze com acesso IAM restrito | Remover se não necessário |
295
-
296
- > Qualquer exposição de dado sensível em gold exige contrato de dados aprovado (ver `data-rules.md` seção 5).
297
-
298
- ---
299
-
300
- ## Regras Críticas
301
-
302
- ### Nunca faça
303
-
304
- - ❌ Iniciar implementação sem documentar o pipeline primeiro
305
- - ❌ Aplicar transformações em bronze — bronze é imutável e bruto
306
- - ❌ Ignorar campos sensíveis identificados na análise
307
- - ❌ Usar APPEND sem verificar duplicatas (quebra idempotência)
308
- - ❌ Promover para silver sem Expectation Suite passando
309
-
310
- ### Sempre faça
311
-
312
- - ✅ Amostrar antes de ingerir tudo — entender o schema real
313
- - ✅ Documentar o pipeline antes de implementar
314
- - ✅ Identificar campos sensíveis na fase de análise
315
- - ✅ Garantir idempotência desde o primeiro script
316
- - ✅ Criar Expectation Suite mínima antes de considerar bronze pronto
317
- - ✅ Testar com período pequeno antes de reprocessar histórico