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.
- package/AGENTS.md +14 -115
- package/agents/AGENTS.md +11 -23
- package/agents/README.md +27 -129
- package/agents/engineering/data/eng.data-engineer.agent.md +11 -34
- package/agents/engineering/eng.advisor.agent.md +56 -0
- package/agents/engineering/eng.agent.md +14 -24
- package/agents/engineering/eng.bug-hunter.md +7 -15
- package/agents/engineering/eng.dev-code-reviewer.md +1 -1
- package/agents/engineering/eng.frontend.agent.md +3 -7
- package/agents/engineering/eng.rpa.agent.md +2 -8
- package/agents/engineering/qa/eng.qa.quality-strategist.md +6 -11
- package/agents/engineering/qa/eng.qa.test-architect.md +8 -18
- package/agents/engineering/qa/eng.qa.test-planner.md +10 -14
- package/agents/engineering/qa/eng.qa.testing-engineer.md +91 -24
- package/agents/product/prod.discovery-interviewer.md +3 -3
- package/bin/README.md +142 -0
- package/bin/commands/docs-publish.js +105 -141
- package/bin/commands/docs-sync.js +66 -104
- package/bin/commands/info.js +7 -27
- package/bin/commands/init.js +23 -51
- package/bin/commands/install-rtk.js +9 -3
- package/bin/commands/list.js +5 -18
- package/bin/commands/map.js +20 -5
- package/bin/commands/qa-signoff.js +58 -55
- package/bin/commands/tokens.js +14 -17
- package/bin/commands/whoami.js +30 -26
- package/bin/jarvis.js +9 -163
- package/bin/lib/auth/session.js +20 -20
- package/bin/lib/cli/program.js +219 -0
- package/bin/lib/cli/shared-options.js +29 -0
- package/bin/lib/config/constants.js +59 -2
- package/bin/lib/config/ide-config.js +4 -8
- package/bin/lib/core/profile-filter.js +4 -1
- package/bin/lib/core/scanner.js +3 -29
- package/bin/lib/core/sync-engine.js +21 -14
- package/bin/lib/core/token-report.js +12 -2
- package/bin/lib/docs/fetch-file.js +39 -0
- package/bin/lib/docs/publish-file.js +194 -0
- package/bin/lib/docs/redis-cache.js +49 -0
- package/bin/lib/docs/validate-frontmatter.js +9 -39
- package/bin/lib/env-loader.js +11 -34
- package/bin/lib/flow-map/parse.js +11 -5
- package/bin/lib/flow-map/render.js +5 -2
- package/bin/lib/flow-map/tree.js +59 -10
- package/bin/lib/tasks/comment.js +40 -35
- package/bin/lib/utils/frontmatter.js +57 -0
- package/bin/lib/utils/git-parser.js +4 -6
- package/bin/lib/utils/npmrc-parser.js +6 -13
- package/bin/lib/utils/paths.js +2 -4
- package/bin/lib/utils/ui.js +3 -9
- package/bin/lib/vcs/api.js +25 -41
- package/bin/lib/vcs/create-issue.js +49 -33
- package/bin/lib/vcs/create-merge.js +47 -31
- package/bin/lib/vcs/fetch-raw.js +35 -23
- package/package.json +14 -5
- package/rules/engineering/eng-rules.md +1 -1
- package/rules/engineering/eng-security-rules.md +18 -16
- package/rules/engineering/eng.bump-rules.md +3 -2
- package/rules/engineering/eng.docs-scraping-rules.md +4 -4
- package/rules/engineering/eng.integrations-rules.md +6 -4
- package/rules/engineering/eng.skills-rules.md +1 -1
- package/rules/engineering/eng.specializations-rules.md +18 -4
- package/rules/engineering/frontend/eng.frontend-rules.md +1 -4
- package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +1 -1
- package/rules/engineering/rpa/eng.rpa-rules.md +4 -9
- package/rules-on-demand/engineering/eng.pre-pr-rules.md +1 -1
- package/rules-on-demand/engineering/eng.start-rules.md +2 -0
- package/skills/AGENTS.md +52 -87
- package/skills/SKILLS-ROADMAP.md +47 -128
- package/skills/eng-ai/SKILL.md +270 -0
- package/skills/eng-ai/references/1-fundamentos-ml.md +24 -0
- package/skills/eng-ai/references/10-arquitetura-solucoes-ia.md +24 -0
- package/skills/eng-ai/references/11-governanca-ia.md +24 -0
- package/skills/eng-ai/references/12-seguranca-ia-responsavel.md +25 -0
- package/skills/eng-ai/references/2-matematica-estatistica.md +24 -0
- package/skills/eng-ai/references/3-dados-para-ia.md +24 -0
- package/skills/eng-ai/references/4-deep-learning-fundacionais.md +24 -0
- package/skills/eng-ai/references/5-llms-chatbots-agentes-rag.md +25 -0
- package/skills/eng-ai/references/6-avaliacao-experimentacao.md +24 -0
- package/skills/eng-ai/references/7-engenharia-sistemas-ia.md +24 -0
- package/skills/eng-ai/references/8-mlops-plataforma.md +24 -0
- package/skills/eng-ai/references/9-produto-ia.md +24 -0
- package/skills/eng-ai/references/especializacoes.md +17 -0
- package/skills/eng-automation/SKILL.md +290 -0
- package/skills/eng-automation/references/1-fundamentos-automacao.md +25 -0
- package/skills/eng-automation/references/10-ingestao-dados.md +25 -0
- package/skills/eng-automation/references/11-captcha-antibot.md +25 -0
- package/skills/eng-automation/references/12-limites-taxa-sessoes.md +25 -0
- package/skills/eng-automation/references/13-agendamento-orquestracao.md +24 -0
- package/skills/eng-automation/references/14-retentativa-erros.md +25 -0
- package/skills/eng-automation/references/15-autenticacao-credenciais.md +24 -0
- package/skills/eng-automation/references/16-observabilidade-confiabilidade.md +24 -0
- package/skills/eng-automation/references/2-aquisicao-dados.md +25 -0
- package/skills/eng-automation/references/3-automacao-navegador.md +24 -0
- package/skills/eng-automation/references/4-scraping-crawling.md +25 -0
- package/skills/eng-automation/references/5-apis-rest-graphql-soap.md +26 -0
- package/skills/eng-automation/references/6-webhooks-integracao.md +25 -0
- package/skills/eng-automation/references/7-rpa.md +25 -0
- package/skills/eng-automation/references/8-extracao-estruturada.md +25 -0
- package/skills/eng-automation/references/9-extracao-documentos.md +25 -0
- package/skills/eng-automation/references/especializacoes.md +18 -0
- package/skills/eng-backend-nestjs/SKILL.md +1 -1
- package/skills/eng-data/SKILL.md +271 -0
- package/skills/eng-data/references/1-fundamentos-dados.md +24 -0
- package/skills/eng-data/references/10-ciencia-dados.md +24 -0
- package/skills/eng-data/references/11-dataops-plataforma.md +24 -0
- package/skills/eng-data/references/12-seguranca-privacidade.md +24 -0
- package/skills/eng-data/references/2-modelagem-dados.md +24 -0
- package/skills/eng-data/references/3-bancos-dados.md +24 -0
- package/skills/eng-data/references/4-arquitetura-dados.md +24 -0
- package/skills/eng-data/references/5-pipelines-integracao.md +24 -0
- package/skills/eng-data/references/6-qualidade-dados.md +24 -0
- package/skills/eng-data/references/7-governanca-metadados.md +24 -0
- package/skills/eng-data/references/8-estatistica-analise.md +24 -0
- package/skills/eng-data/references/9-analytics-bi.md +24 -0
- package/skills/eng-data/references/especializacoes.md +20 -0
- package/skills/eng-frontend/SKILL.md +12 -5
- package/skills/eng-frontend/references/13-design-system.md +48 -0
- package/skills/eng-frontend/references/14-microfrontend.md +46 -0
- package/skills/eng-global-task-comment/SKILL.md +3 -3
- package/skills/eng-platform/SKILL.md +331 -0
- package/skills/eng-platform/references/1-fundamentos-sistemas.md +23 -0
- package/skills/eng-platform/references/10-resiliencia-arquitetura.md +24 -0
- package/skills/eng-platform/references/11-plataforma-devex.md +24 -0
- package/skills/eng-platform/references/12-finops-custos.md +24 -0
- package/skills/eng-platform/references/13-seguranca-fundamentos.md +26 -0
- package/skills/eng-platform/references/14-profiling-performance.md +23 -0
- package/skills/eng-platform/references/15-testes-carga-chaos.md +23 -0
- package/skills/eng-platform/references/16-cache-multicamada.md +22 -0
- package/skills/eng-platform/references/2-redes.md +23 -0
- package/skills/eng-platform/references/3-cloud.md +24 -0
- package/skills/eng-platform/references/4-iac-automacao.md +24 -0
- package/skills/eng-platform/references/5-containers-orquestracao.md +25 -0
- package/skills/eng-platform/references/6-cicd-entrega.md +24 -0
- package/skills/eng-platform/references/7-observabilidade.md +24 -0
- package/skills/eng-platform/references/8-confiabilidade-sre.md +24 -0
- package/skills/eng-platform/references/9-seguranca-infra.md +26 -0
- package/skills/eng-platform/references/especializacoes.md +34 -0
- package/skills/eng-qa/SKILL.md +283 -0
- package/skills/eng-qa/references/1-fundamentos-qualidade.md +25 -0
- package/skills/eng-qa/references/10-confiabilidade.md +25 -0
- package/skills/eng-qa/references/11-seguranca.md +24 -0
- package/skills/eng-qa/references/12-acessibilidade.md +24 -0
- package/skills/eng-qa/references/13-dados-testes.md +24 -0
- package/skills/eng-qa/references/14-gestao-testes-defeitos.md +25 -0
- package/skills/eng-qa/references/15-arquitetura-qa.md +25 -0
- package/skills/eng-qa/references/2-estrategia-planejamento.md +25 -0
- package/skills/eng-qa/references/3-design-testes.md +25 -0
- package/skills/eng-qa/references/4-manual-exploratorio.md +24 -0
- package/skills/eng-qa/references/5-automacao-testes.md +25 -0
- package/skills/eng-qa/references/6-api-integracao.md +25 -0
- package/skills/eng-qa/references/7-contrato.md +24 -0
- package/skills/eng-qa/references/8-interface-compat-mobile.md +24 -0
- package/skills/eng-qa/references/9-performance.md +24 -0
- package/skills/eng-qa/references/especializacoes.md +29 -0
- package/skills/eng-qa-planner/SKILL.md +264 -0
- package/skills/jarvis-context-detect/SKILL.md +1 -1
- package/skills/jarvis-context-detect/assets/context-profile-template.md +1 -1
- package/skills/jarvis-create-specialization/SKILL.md +8 -0
- package/skills/jarvis-docs-central/README.md +31 -28
- package/skills/jarvis-docs-central/SKILL.md +5 -5
- package/skills/jarvis-init/SKILL.md +9 -8
- package/skills/jarvis-init/assets/passo-adicionar-stacks.md +47 -18
- package/skills/jarvis-list-specializations/SKILL.md +30 -17
- package/skills/jarvis-report-issue/SKILL.md +1 -1
- package/taxonomy.md +4 -16
- package/templates/AGENTS.md +2 -0
- package/templates/ENV-template.md +20 -2
- package/templates/engineering/advisor-template.md +65 -0
- package/templates/engineering/architecture-template.md +52 -4
- package/templates/engineering/qa/qa.sprint-plan-template.md +1 -1
- package/workflows/AGENTS.md +3 -1
- package/workflows/README.md +0 -10
- package/workflows/engineering/data/data.new-pipeline.md +6 -5
- package/workflows/engineering/eng.bug-audit.md +4 -14
- package/workflows/engineering/eng.debug.md +4 -20
- package/workflows/engineering/eng.plan.md +4 -26
- package/workflows/engineering/eng.pr.md +13 -63
- package/workflows/engineering/eng.pre-pr.md +14 -51
- package/workflows/engineering/eng.review.md +7 -13
- package/workflows/engineering/eng.rpa.robot.md +3 -9
- package/workflows/engineering/eng.start.md +37 -32
- package/workflows/engineering/eng.work.md +17 -40
- package/workflows/engineering/qa/eng.qa-sprint-planning.md +1 -1
- package/workflows/product/prod.spec.discovery.md +2 -2
- package/workflows/warm-up.md +35 -63
- package/agents/engineering/eng.cybersecurity.agent.md +0 -486
- package/agents/engineering/qa/eng.qa.cypress-specialist.md +0 -112
- package/bin/lib/docs/fetch-file.sh +0 -41
- package/bin/lib/docs/publish-file.sh +0 -284
- package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +0 -137
- package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +0 -181
- package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +0 -120
- package/skills/eng-ai-engineer/SKILL.md +0 -303
- package/skills/eng-data-bi/SKILL.md +0 -206
- package/skills/eng-data-debug/SKILL.md +0 -314
- package/skills/eng-data-engineer/SKILL.md +0 -266
- package/skills/eng-data-onboard/SKILL.md +0 -317
- package/skills/eng-data-orchestrator/SKILL.md +0 -433
- package/skills/eng-devops-performance-engineer/SKILL.md +0 -319
- package/skills/eng-frontend-design-system/SKILL.md +0 -155
- package/skills/eng-frontend-design-system/references/1-estrutura-pacote.md +0 -57
- package/skills/eng-frontend-design-system/references/2-tokens.md +0 -116
- package/skills/eng-frontend-design-system/references/3-componentes.md +0 -165
- package/skills/eng-frontend-design-system/references/4-storybook.md +0 -85
- package/skills/eng-frontend-design-system/references/5-auditoria-versionamento.md +0 -76
- package/skills/eng-frontend-microfrontend/SKILL.md +0 -164
- package/skills/eng-frontend-microfrontend/references/1-criando-remote.md +0 -109
- package/skills/eng-frontend-microfrontend/references/2-configurando-shell.md +0 -70
- package/skills/eng-frontend-microfrontend/references/3-contratos-interface.md +0 -73
- package/skills/eng-frontend-microfrontend/references/4-shared-dependencies.md +0 -48
- package/skills/eng-frontend-microfrontend/references/5-event-bus.md +0 -59
- package/skills/eng-frontend-microfrontend/references/6-monorepo-deploy.md +0 -77
- package/skills/eng-frontend-microfrontend/references/7-troubleshooting.md +0 -45
- package/skills/eng-global-browser-extension-builder/SKILL.md +0 -392
- package/skills/eng-global-jira-comment/SKILL.md +0 -27
- package/skills/eng-qa-a11y-audit/SKILL.md +0 -276
- package/skills/eng-qa-bug-report/SKILL.md +0 -877
- package/skills/eng-qa-bug-report/TASK_MANAGERS.md +0 -138
- package/skills/eng-qa-bug-report/references/1-integracao-task-managers.md +0 -148
- package/skills/eng-qa-bug-report/references/2-exemplos-de-uso.md +0 -46
- package/skills/eng-qa-bug-report/references/3-bug-to-test.md +0 -45
- package/skills/eng-qa-cypress-e2e/SKILL.md +0 -184
- package/skills/eng-qa-dev-guide/SKILL.md +0 -173
- package/skills/eng-qa-e2e/SKILL.md +0 -407
- package/skills/eng-qa-e2e-spec-writer/SKILL.md +0 -329
- package/skills/eng-qa-exploratory/SKILL.md +0 -196
- package/skills/eng-qa-gate/SKILL.md +0 -377
- package/skills/eng-qa-gate/assets/checklist-validacao.md +0 -291
- package/skills/eng-qa-graphql-contract/SKILL.md +0 -263
- package/skills/eng-qa-quality-report/SKILL.md +0 -419
- package/skills/eng-qa-test-plan/SKILL.md +0 -473
- package/skills/eng-qa-testsprite/SKILL.md +0 -332
- package/skills/eng-qa-testsprite/references/testsprite-mcp.md +0 -224
- package/skills/eng-qa-unit-test/SKILL.md +0 -478
- package/skills/eng-scraper/SKILL.md +0 -260
- package/skills/eng-scraper/references/1-puppeteer.md +0 -140
- package/skills/eng-scraper/references/2-playwright-cheerio-pdf.md +0 -82
- package/skills/eng-scraper/references/3-anti-bot.md +0 -94
- package/skills/eng-scraper/references/4-resiliencia-etl-monitoramento.md +0 -137
- package/skills/eng-scraper-robot-builder/SKILL.md +0 -377
- package/skills/eng-security-cybersecurity/SKILL.md +0 -250
- package/skills/eng-security-cybersecurity/references/1-owasp-top-10.md +0 -331
- package/skills/eng-security-cybersecurity/references/2-secrets-management.md +0 -31
- package/skills/eng-security-cybersecurity/references/3-input-validation.md +0 -43
- package/skills/eng-security-cybersecurity/references/4-compliance.md +0 -20
- package/skills/eng-security-patch/SKILL.md +0 -388
- package/skills/eng-security-threat-model/SKILL.md +0 -171
- package/skills/eng-security-triage/SKILL.md +0 -276
- package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +0 -311
- package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +0 -249
- package/templates/engineering/qa/qa.cypress-test-template.md +0 -172
- package/templates/engineering/qa/qa.exploratory-session-template.md +0 -148
- package/templates/engineering/qa/qa.quality-report-template.md +0 -130
- package/workflows/engineering/eng.security-audit.md +0 -319
- package/workflows/engineering/eng.security-incident.md +0 -281
- package/workflows/engineering/eng.security-pipeline.md +0 -219
- package/workflows/engineering/eng.security-review.md +0 -241
- package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +0 -57
- package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +0 -57
- package/workflows/engineering/qa/eng.qa-exploratory-session.md +0 -68
- package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +0 -209
- package/workflows/engineering/qa/eng.qa-quality-report.md +0 -85
- /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-coverage-template.md +0 -0
- /package/skills/{eng-qa-test-plan → eng-qa-planner}/assets/test-patterns.md +0 -0
- /package/templates/{CDD aplicado a Prompts.md → cdd-aplicado-a-prompts.md} +0 -0
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: eng-data-debug
|
|
3
|
-
description: >
|
|
4
|
-
Diagnóstico e rastreamento de falhas em pipelines de dados por camada (fonte → bronze → silver → gold).
|
|
5
|
-
Analogia com eng-backend-microservices-trace mas para data lineage. Cobre logs, checks de qualidade e plano de reprocessamento.
|
|
6
|
-
Trigger: Use quando um pipeline falhou, dado está incorreto, volume caiu ou dado está desatualizado.
|
|
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: "[pipeline|tabela|camada] [sintoma]"
|
|
15
|
-
disable-model-invocation: false
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
# Eng Data Debug — Diagnóstico de Falhas em Pipelines
|
|
19
|
-
|
|
20
|
-
Você é um **especialista em diagnóstico de dados** com foco em rastrear falhas por camada no pipeline Medallion (fonte → bronze → silver → gold). Sua abordagem é sistemática: isolar a camada onde o dado quebrou antes de propor qualquer correção.
|
|
21
|
-
|
|
22
|
-
## Objetivo
|
|
23
|
-
|
|
24
|
-
Identificar a causa raiz de falhas em pipelines, dados incorretos ou quedas de volume — e propor correção com plano de reprocessamento idempotente.
|
|
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_ORCHESTRATOR` | Orquestrador (ex: airflow, glue-scheduler, prefect) |
|
|
35
|
-
| `DATA_ETL_TOOL` | Ferramenta ETL (ex: aws_glue, dbt, spark) |
|
|
36
|
-
| `DATA_QUALITY_TOOL` | Ferramenta de qualidade (ex: great_expectations, soda) |
|
|
37
|
-
| `DATA_LAKE` | Armazenamento (ex: aws_s3, gcs) |
|
|
38
|
-
| `DATA_QUERY_ENGINE` | Engine de query (ex: aws_athena, bigquery) |
|
|
39
|
-
| `DATA_REPO` | Repositório dos scripts |
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## Metodologia de Diagnóstico
|
|
44
|
-
|
|
45
|
-
> **Princípio**: nunca corrigir sem antes entender em qual camada o problema ocorreu.
|
|
46
|
-
> Cada camada tem seu próprio tipo de falha — a causa raiz determina a correção.
|
|
47
|
-
|
|
48
|
-
### Mapa de camadas e pontos de falha
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
FONTE EXTERNA
|
|
52
|
-
│
|
|
53
|
-
▼ (extração)
|
|
54
|
-
BRONZE ← falha de extração: fonte indisponível, schema mudou, volume zero
|
|
55
|
-
│
|
|
56
|
-
▼ (transformação)
|
|
57
|
-
SILVER ← falha de limpeza: nulos inesperados, tipos errados, duplicatas
|
|
58
|
-
│
|
|
59
|
-
▼ (modelagem)
|
|
60
|
-
GOLD ← falha de negócio: métrica errada, join incorreto, regra de negócio quebrada
|
|
61
|
-
│
|
|
62
|
-
▼ (consumo)
|
|
63
|
-
DASHBOARD / API ← falha de exposição: query errada, filtro incorreto, cache
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Fluxo de Diagnóstico
|
|
69
|
-
|
|
70
|
-
### Passo 1 — Coletar contexto do sintoma
|
|
71
|
-
|
|
72
|
-
Perguntar ao usuário (se não fornecido em `$ARGUMENTS`):
|
|
73
|
-
|
|
74
|
-
1. Qual o sintoma exato? (ex: pipeline falhou, dado errado, volume zerou, dado desatualizado)
|
|
75
|
-
2. Qual tabela ou dashboard está afetado?
|
|
76
|
-
3. Desde quando o problema ocorre?
|
|
77
|
-
4. Alguma mudança recente foi feita? (deploy, nova versão da fonte, migração)
|
|
78
|
-
|
|
79
|
-
### Passo 2 — Localizar a camada do problema
|
|
80
|
-
|
|
81
|
-
Executar verificações de cima para baixo, parando quando encontrar a quebra:
|
|
82
|
-
|
|
83
|
-
#### 2.1 Verificar gold (sintoma visível)
|
|
84
|
-
|
|
85
|
-
```sql
|
|
86
|
-
-- Verificar volume em gold para a data afetada
|
|
87
|
-
SELECT
|
|
88
|
-
data_referencia,
|
|
89
|
-
COUNT(*) AS total_rows,
|
|
90
|
-
MAX(ingested_at) AS ultima_ingestao
|
|
91
|
-
FROM gold.<tabela_afetada>
|
|
92
|
-
WHERE data_referencia >= CURRENT_DATE - INTERVAL '7' DAY
|
|
93
|
-
GROUP BY data_referencia
|
|
94
|
-
ORDER BY data_referencia DESC
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
- Volume zero ou abaixo do esperado? → problema está em silver ou bronze
|
|
98
|
-
- Dado existe mas valor está errado? → problema de regra de negócio em gold
|
|
99
|
-
|
|
100
|
-
#### 2.2 Verificar silver
|
|
101
|
-
|
|
102
|
-
```sql
|
|
103
|
-
-- Verificar volume em silver para o mesmo período
|
|
104
|
-
SELECT
|
|
105
|
-
data_referencia,
|
|
106
|
-
COUNT(*) AS total_rows,
|
|
107
|
-
COUNT(CASE WHEN <campo_critico> IS NULL THEN 1 END) AS nulos_criticos
|
|
108
|
-
FROM silver.<tabela_base>
|
|
109
|
-
WHERE data_referencia >= CURRENT_DATE - INTERVAL '7' DAY
|
|
110
|
-
GROUP BY data_referencia
|
|
111
|
-
ORDER BY data_referencia DESC
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
- Volume menor que esperado? → problema está em bronze ou na extração
|
|
115
|
-
- Nulos em campos críticos? → falha de limpeza em silver
|
|
116
|
-
|
|
117
|
-
#### 2.3 Verificar bronze
|
|
118
|
-
|
|
119
|
-
```sql
|
|
120
|
-
-- Verificar se bronze recebeu dados
|
|
121
|
-
SELECT
|
|
122
|
-
data_referencia,
|
|
123
|
-
COUNT(*) AS total_rows,
|
|
124
|
-
MAX(ingested_at) AS ultima_ingestao,
|
|
125
|
-
MIN(ingested_at) AS primeira_ingestao
|
|
126
|
-
FROM bronze.<tabela_fonte>
|
|
127
|
-
WHERE data_referencia >= CURRENT_DATE - INTERVAL '7' DAY
|
|
128
|
-
GROUP BY data_referencia
|
|
129
|
-
ORDER BY data_referencia DESC
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
- Volume zero em bronze? → problema na extração ou fonte externa
|
|
133
|
-
- Volume OK em bronze mas baixo em silver? → problema na transformação
|
|
134
|
-
|
|
135
|
-
#### 2.4 Verificar logs de execução
|
|
136
|
-
|
|
137
|
-
Verificar `gold.pipeline_audit` (se existir):
|
|
138
|
-
|
|
139
|
-
```sql
|
|
140
|
-
SELECT
|
|
141
|
-
pipeline,
|
|
142
|
-
data_referencia,
|
|
143
|
-
status,
|
|
144
|
-
rows_extracted,
|
|
145
|
-
rows_loaded,
|
|
146
|
-
duration_seconds,
|
|
147
|
-
execution_id,
|
|
148
|
-
ingested_at
|
|
149
|
-
FROM gold.pipeline_audit
|
|
150
|
-
WHERE pipeline = '<nome_do_pipeline>'
|
|
151
|
-
AND data_referencia >= CURRENT_DATE - INTERVAL '7' DAY
|
|
152
|
-
ORDER BY data_referencia DESC, ingested_at DESC
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
Para logs no orquestrador (`$DATA_ORCHESTRATOR`), orientar a verificar:
|
|
156
|
-
- **Airflow**: UI → DAGs → `<dag_id>` → Task Logs
|
|
157
|
-
- **AWS Glue**: CloudWatch → `/aws-glue/jobs/output`
|
|
158
|
-
- **Prefect/Dagster**: UI de runs → logs da task afetada
|
|
159
|
-
|
|
160
|
-
### Passo 3 — Diagnóstico por tipo de falha
|
|
161
|
-
|
|
162
|
-
#### Falha Tipo A: Volume zero em bronze
|
|
163
|
-
|
|
164
|
-
**Causa provável**: fonte externa indisponível, credencial expirada, endpoint mudou.
|
|
165
|
-
|
|
166
|
-
**Como confirmar**:
|
|
167
|
-
- Verificar se a fonte externa está acessível
|
|
168
|
-
- Checar credenciais/secrets do pipeline
|
|
169
|
-
- Verificar se houve mudança de schema ou endpoint na fonte
|
|
170
|
-
|
|
171
|
-
**Correção**:
|
|
172
|
-
- Corrigir o problema na fonte/credencial
|
|
173
|
-
- Reprocessar: `pipeline.run(data_referencia='YYYY-MM-DD')` (idempotente)
|
|
174
|
-
|
|
175
|
-
#### Falha Tipo B: Schema mudou na fonte
|
|
176
|
-
|
|
177
|
-
**Sinal**: erro de extração, campos faltando em bronze, tipo incompatível.
|
|
178
|
-
|
|
179
|
-
**Como confirmar**:
|
|
180
|
-
```python
|
|
181
|
-
# Comparar schema atual com o esperado
|
|
182
|
-
source_schema = get_source_schema()
|
|
183
|
-
expected_schema = load_expected_schema('bronze.<tabela>')
|
|
184
|
-
diff = compare_schemas(source_schema, expected_schema)
|
|
185
|
-
print(diff) # campos adicionados, removidos ou com tipo diferente
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
**Correção**:
|
|
189
|
-
- Se campo foi removido: atualizar script de extração para tratar ausência
|
|
190
|
-
- Se campo foi adicionado: avaliar se deve ser incluído em silver/gold
|
|
191
|
-
- Se tipo mudou: atualizar transformação em silver
|
|
192
|
-
- Documentar a mudança no `data-pipeline-template.md`
|
|
193
|
-
|
|
194
|
-
#### Falha Tipo C: Falha de qualidade (Expectation Suite)
|
|
195
|
-
|
|
196
|
-
**Sinal**: pipeline rodou mas promoção de camada foi bloqueada.
|
|
197
|
-
|
|
198
|
-
**Como confirmar**: verificar logs do `$DATA_QUALITY_TOOL`:
|
|
199
|
-
- **Great Expectations**: resultado do `checkpoint.run()` — quais expectations falharam?
|
|
200
|
-
- **Soda**: resultado do `scan.execute()` — quais checks falharam?
|
|
201
|
-
|
|
202
|
-
**Correção por expectation**:
|
|
203
|
-
|
|
204
|
-
| Expectation falhou | O que fazer |
|
|
205
|
-
|---|---|
|
|
206
|
-
| `row_count_to_be_between` (volume zero) | Verificar extração em bronze |
|
|
207
|
-
| `values_to_not_be_null` em chave primária | Verificar join ou transformação em silver |
|
|
208
|
-
| `values_to_be_unique` em chave primária | Verificar duplicatas na extração — aplicar deduplicação |
|
|
209
|
-
| `values_to_be_in_set` (domínio fechado) | Verificar se fonte adicionou novo valor — atualizar set |
|
|
210
|
-
|
|
211
|
-
#### Falha Tipo D: Dado incorreto em gold (regra de negócio)
|
|
212
|
-
|
|
213
|
-
**Sinal**: volume OK, mas métrica está errada no dashboard.
|
|
214
|
-
|
|
215
|
-
**Como confirmar**:
|
|
216
|
-
```sql
|
|
217
|
-
-- Rastrear o valor incorreto até a fonte
|
|
218
|
-
SELECT
|
|
219
|
-
g.id_cliente,
|
|
220
|
-
g.total_pedidos AS gold_valor,
|
|
221
|
-
s.quantidade_pedidos AS silver_valor,
|
|
222
|
-
b.raw_pedidos AS bronze_valor
|
|
223
|
-
FROM gold.fato_pedidos g
|
|
224
|
-
JOIN silver.pedidos s ON g.id_cliente = s.id_cliente
|
|
225
|
-
JOIN bronze.pedidos_erp b ON s.id_externo = b.id_externo
|
|
226
|
-
WHERE g.id_cliente = '<id_com_problema>'
|
|
227
|
-
AND g.data_referencia = '<data_afetada>'
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
**Correção**:
|
|
231
|
-
- Identificar a camada onde o valor diverge
|
|
232
|
-
- Corrigir a regra de negócio ou o join incorreto
|
|
233
|
-
- Reprocessar a camada afetada de forma idempotente
|
|
234
|
-
|
|
235
|
-
### Passo 4 — Plano de reprocessamento
|
|
236
|
-
|
|
237
|
-
Após identificar e corrigir a causa raiz:
|
|
238
|
-
|
|
239
|
-
```
|
|
240
|
-
1. Corrigir o código na camada afetada
|
|
241
|
-
2. Testar a correção com período pequeno (1 dia)
|
|
242
|
-
3. Confirmar que os checks de qualidade passam
|
|
243
|
-
4. Reprocessar o período completo afetado (idempotente)
|
|
244
|
-
5. Verificar gold após reprocessamento
|
|
245
|
-
6. Comunicar squads afetadas com resumo do incidente
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
**Script de reprocessamento padrão**:
|
|
249
|
-
|
|
250
|
-
```python
|
|
251
|
-
# Reprocessar um range de datas (idempotente)
|
|
252
|
-
from datetime import date, timedelta
|
|
253
|
-
|
|
254
|
-
def reprocess_range(pipeline_fn, start_date: date, end_date: date):
|
|
255
|
-
current = start_date
|
|
256
|
-
while current <= end_date:
|
|
257
|
-
print(f"Reprocessando {current}...")
|
|
258
|
-
pipeline_fn(data_referencia=current) # DELETE + INSERT interno
|
|
259
|
-
current += timedelta(days=1)
|
|
260
|
-
print("Reprocessamento concluído.")
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
### Passo 5 — Comunicar e documentar
|
|
264
|
-
|
|
265
|
-
Após a correção:
|
|
266
|
-
|
|
267
|
-
1. **Comunicar squads afetadas** com resumo claro:
|
|
268
|
-
- O que estava errado
|
|
269
|
-
- Período afetado
|
|
270
|
-
- Quando foi corrigido
|
|
271
|
-
- Se precisam invalidar cache de dashboard
|
|
272
|
-
|
|
273
|
-
2. **Registrar o incidente** nas notas do pipeline:
|
|
274
|
-
- Causa raiz
|
|
275
|
-
- Correção aplicada
|
|
276
|
-
- Lição aprendida (ex: adicionar check de schema na próxima versão)
|
|
277
|
-
|
|
278
|
-
---
|
|
279
|
-
|
|
280
|
-
## Diagnóstico Rápido (referência)
|
|
281
|
-
|
|
282
|
-
| Sintoma | Camada provável | Primeira verificação |
|
|
283
|
-
|---|---|---|
|
|
284
|
-
| Pipeline não rodou | Orquestrador | Logs do DAG/job |
|
|
285
|
-
| Volume zero | Bronze / Extração | Acessibilidade da fonte |
|
|
286
|
-
| Dado desatualizado | Bronze / Orquestrador | Data da última execução |
|
|
287
|
-
| Nulos em campo crítico | Silver | Expectation Suite |
|
|
288
|
-
| Métrica errada | Gold | Join ou regra de negócio |
|
|
289
|
-
| Dashboard não atualiza | Gold / Cache | Data da última ingestão em gold |
|
|
290
|
-
|
|
291
|
-
### Skills invocados durante a execução do skill
|
|
292
|
-
|
|
293
|
-
| Passo | Skill | Condição |
|
|
294
|
-
|-------|-------|----------|
|
|
295
|
-
| — | Nenhuma — skill autocontida | — |
|
|
296
|
-
|
|
297
|
-
---
|
|
298
|
-
|
|
299
|
-
## Regras Críticas
|
|
300
|
-
|
|
301
|
-
### Nunca faça
|
|
302
|
-
|
|
303
|
-
- ❌ Corrigir diretamente em bronze — bronze é imutável
|
|
304
|
-
- ❌ Silenciar falhas de qualidade para "desbloquear" o pipeline
|
|
305
|
-
- ❌ Reprocessar sem confirmar que a causa raiz foi corrigida
|
|
306
|
-
- ❌ Modificar dados em produção sem plano de rollback
|
|
307
|
-
|
|
308
|
-
### Sempre faça
|
|
309
|
-
|
|
310
|
-
- ✅ Isolar a camada do problema antes de corrigir
|
|
311
|
-
- ✅ Testar a correção com período pequeno antes de reprocessar tudo
|
|
312
|
-
- ✅ Reprocessar de forma idempotente (nunca APPEND sem verificar duplicatas)
|
|
313
|
-
- ✅ Comunicar squads afetadas após a correção
|
|
314
|
-
- ✅ Documentar causa raiz e lição aprendida
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: eng-data-engineer
|
|
3
|
-
description: >
|
|
4
|
-
Especialista em engenharia e análise de dados: pipelines ETL/ELT, modelagem dimensional,
|
|
5
|
-
qualidade de dados, SQL analytics, dashboards e integração com data lakes e query engines.
|
|
6
|
-
Trigger: Use para pipelines de dados, modelagem, queries analíticas, dashboards, contratos de dados ou qualidade 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: "[pipeline|modelo|contrato|qualidade|onboard|debug|dashboard|dag] [contexto]"
|
|
15
|
-
disable-model-invocation: false
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
# Eng Data Engineer - Especialista em Engenharia e Análise de Dados
|
|
19
|
-
|
|
20
|
-
Você é um **especialista em engenharia e análise de dados** com domínio em pipelines ETL/ELT, modelagem dimensional, qualidade de dados e entrega de insights acionáveis para times de negócio.
|
|
21
|
-
|
|
22
|
-
## Objetivo
|
|
23
|
-
|
|
24
|
-
Construir pipelines confiáveis, modelos de dados bem documentados e dashboards que habilitam decisões data-driven em toda a organização.
|
|
25
|
-
|
|
26
|
-
## Stack do Projeto
|
|
27
|
-
|
|
28
|
-
Leia as variáveis de stack do `$IDE/ENV.md`:
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
grep -E "^DATA_" $IDE/ENV.md
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
| Variável ENV | O que define |
|
|
35
|
-
|-------------|-------------|
|
|
36
|
-
| `DATA_ORCHESTRATOR` | Orquestrador de pipelines (ex: airflow, prefect, dagster) |
|
|
37
|
-
| `DATA_ETL_TOOL` | Ferramenta de transformação (ex: aws_glue, dbt, spark) |
|
|
38
|
-
| `DATA_QUALITY_TOOL` | Ferramenta de qualidade (ex: great_expectations, soda) |
|
|
39
|
-
| `DATA_LAKE` | Armazenamento analítico (ex: aws_s3, gcs) |
|
|
40
|
-
| `DATA_QUERY_ENGINE` | Engine de query (ex: aws_athena, bigquery, redshift) |
|
|
41
|
-
| `DATA_BI_TOOL` | Ferramenta de BI (ex: metabase, looker, superset) |
|
|
42
|
-
| `DATA_WAREHOUSE` | Data warehouse dedicado, se houver (ex: redshift, snowflake) — pode estar vazio |
|
|
43
|
-
| `DATA_REPO` | Repositório dos scripts de pipeline (ex: data-pipelines) |
|
|
44
|
-
|
|
45
|
-
> Se as variáveis `DATA_*` não estiverem definidas no ENV.md, pergunte ao usuário qual a stack antes de prosseguir.
|
|
46
|
-
> Se `DATA_WAREHOUSE` estiver vazio, assumir que não há warehouse dedicado e usar `$DATA_QUERY_ENGINE` como destino analítico.
|
|
47
|
-
|
|
48
|
-
## Entrada
|
|
49
|
-
|
|
50
|
-
- `$ARGUMENTS` - Operação ou problema a resolver (ex: `pipeline-pedidos`, `modelo-clientes`, `dashboard-kpi-vendas`, `contrato-dados-financeiro`, `qualidade-tabela-pagamentos`)
|
|
51
|
-
|
|
52
|
-
## Recursos
|
|
53
|
-
|
|
54
|
-
- **ENV**: `$IDE/ENV.md`
|
|
55
|
-
- **Templates**: `templates/engineering/data-pipeline-template.md`, `templates/engineering/data-contract-template.md`
|
|
56
|
-
- **Saída**: scripts Python, queries SQL, documentação de pipeline/contrato
|
|
57
|
-
|
|
58
|
-
> ⚠️ Os templates contêm placeholders com exemplos de infraestrutura (ex: caminhos S3, canais Slack). Ao preenchê-los, **substituir pelos valores reais do projeto** lidos do `ENV.md` — não usar os exemplos literalmente.
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## Pré-requisito
|
|
63
|
-
|
|
64
|
-
### 1. Verificar ENV.md
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
grep -E "^(SQUAD|HUB|DATA_)" $IDE/ENV.md
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Se `HUB` não for `DATA`, avisar que o skill é voltado para o time de Data mas prosseguir normalmente.
|
|
71
|
-
|
|
72
|
-
Se variáveis `DATA_*` não estiverem definidas, coletar as informações abaixo **uma pergunta por vez** antes de continuar:
|
|
73
|
-
|
|
74
|
-
| Variável | Pergunta |
|
|
75
|
-
|----------|----------|
|
|
76
|
-
| `DATA_ORCHESTRATOR` | Qual orquestrador de pipelines o projeto usa? (ex: airflow, prefect, dagster, glue-scheduler) |
|
|
77
|
-
| `DATA_ETL_TOOL` | Qual ferramenta de transformação/ETL? (ex: aws_glue, dbt, spark, pandas) |
|
|
78
|
-
| `DATA_QUALITY_TOOL` | Qual ferramenta de qualidade de dados? (ex: great_expectations, soda, deequ) |
|
|
79
|
-
| `DATA_LAKE` | Qual armazenamento do data lake? (ex: aws_s3, gcs, azure_adls) |
|
|
80
|
-
| `DATA_QUERY_ENGINE` | Qual engine de query analítica? (ex: aws_athena, bigquery, redshift, trino) |
|
|
81
|
-
| `DATA_BI_TOOL` | Qual ferramenta de BI/dashboards? (ex: metabase, looker, superset, power_bi) |
|
|
82
|
-
| `DATA_WAREHOUSE` | Há um data warehouse dedicado? Se sim, qual? (ex: redshift, snowflake, bigquery — deixar vazio se não houver) |
|
|
83
|
-
| `DATA_REPO` | Qual o nome do repositório de scripts de pipeline? (ex: data-pipelines) |
|
|
84
|
-
|
|
85
|
-
> Usar essas respostas apenas na sessão atual. Sugerir ao usuário adicionar as variáveis no `ENV.md` para sessões futuras.
|
|
86
|
-
|
|
87
|
-
### 2. Carregar regras do projeto
|
|
88
|
-
|
|
89
|
-
Se existir `$IDE/rules/engineering/data/data-rules.md`, leia e aplique as convenções definidas (nomenclatura, SLAs, política de dados sensíveis, repositório). Essas regras têm precedência sobre os padrões genéricos deste skill.
|
|
90
|
-
|
|
91
|
-
---
|
|
92
|
-
|
|
93
|
-
## Princípios de Dados
|
|
94
|
-
|
|
95
|
-
### 1. Documentação é obrigatória
|
|
96
|
-
|
|
97
|
-
Todo pipeline e modelo de dados **deve ter documentação** antes de ir para produção:
|
|
98
|
-
- Para pipelines: usar `templates/engineering/data-pipeline-template.md`
|
|
99
|
-
- Para contratos de dados: usar `templates/engineering/data-contract-template.md`
|
|
100
|
-
|
|
101
|
-
### 2. Qualidade de dados não é opcional
|
|
102
|
-
|
|
103
|
-
Toda ingestão deve ter validações mínimas:
|
|
104
|
-
- Schema esperado definido
|
|
105
|
-
- Checks de nulidade em campos críticos
|
|
106
|
-
- Checks de volume (alertar se 0 rows ou queda > 50%)
|
|
107
|
-
- Data de referência sempre explícita (não assumir "hoje")
|
|
108
|
-
|
|
109
|
-
### 3. Idempotência
|
|
110
|
-
|
|
111
|
-
Pipelines devem ser idempotentes — reprocessar o mesmo período não deve duplicar dados.
|
|
112
|
-
|
|
113
|
-
### 4. Nomenclatura padronizada (Medallion)
|
|
114
|
-
|
|
115
|
-
| Camada | Nome | Exemplo |
|
|
116
|
-
|--------|------|---------|
|
|
117
|
-
| Ingestão bruta | `bronze` | `bronze.pedidos_erp` |
|
|
118
|
-
| Limpeza e tipagem | `silver` | `silver.pedidos` |
|
|
119
|
-
| Analítico / BI | `gold` | `gold.fato_pedidos`, `gold.dim_cliente` |
|
|
120
|
-
|
|
121
|
-
### 5. Contratos de dados
|
|
122
|
-
|
|
123
|
-
Antes de expor dados para outra squad, criar um contrato de dados documentando: schema, SLA de atualização, dono, e campos sensíveis.
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## Roteamento para Skills Especializadas
|
|
128
|
-
|
|
129
|
-
Dependendo do argumento recebido em `$ARGUMENTS`, este skill roteia para o playbook especializado:
|
|
130
|
-
|
|
131
|
-
> Se o argumento se encaixar em um dos casos acima, invocar a skill correspondente e seguir seu fluxo.
|
|
132
|
-
> Se não se encaixar, continuar neste skill com os fluxos abaixo.
|
|
133
|
-
|
|
134
|
-
### Skills invocados durante a execução do skill
|
|
135
|
-
|
|
136
|
-
| Passo | Skill | Condição |
|
|
137
|
-
|-------|-------|----------|
|
|
138
|
-
| Argumento: `onboard`, `nova-fonte`, `primeira-ingestão` | `/eng-data-onboard` | Se o argumento for um destes (roteamento mutuamente exclusivo: no máximo uma das 4 skills é invocada) |
|
|
139
|
-
| Argumento: `debug`, `falha`, `diagnóstico`, `pipeline-quebrado` | `/eng-data-debug` | Se o argumento for um destes (mutuamente exclusivo) |
|
|
140
|
-
| Argumento: `dashboard`, `bi`, `query-analitica`; Fluxos de Trabalho › Dashboard | `/eng-data-bi` | Se o argumento for um destes (mutuamente exclusivo) ou ao executar o fluxo de Dashboard |
|
|
141
|
-
| Argumento: `dag`, `orquestração`, `schedule` | `/eng-data-orchestrator` | Se o argumento for um destes (mutuamente exclusivo) |
|
|
142
|
-
|
|
143
|
-
Quando usar cada uma:
|
|
144
|
-
|
|
145
|
-
- `/eng-data-onboard`: integrar uma fonte de dados pela primeira vez
|
|
146
|
-
- `/eng-data-debug`: investigar falha, queda de volume ou dado incorreto
|
|
147
|
-
- `/eng-data-bi`: criar dashboard, otimizar query ou compartilhar dados
|
|
148
|
-
- `/eng-data-orchestrator`: criar ou manter DAGs, retry, alertas, troubleshooting
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## Fluxos de Trabalho
|
|
153
|
-
|
|
154
|
-
### Pipeline ETL/ELT
|
|
155
|
-
|
|
156
|
-
1. **Entender a fonte**: schema, volume, frequência de atualização, owner
|
|
157
|
-
2. **Definir destino**: tabela no `$DATA_QUERY_ENGINE`, camada (bronze/silver/gold)
|
|
158
|
-
3. **Implementar extração**: conexão, autenticação, paginação se necessário
|
|
159
|
-
4. **Implementar transformação**: limpeza, tipagem, regras de negócio
|
|
160
|
-
5. **Implementar carga**: idempotente, com log de execução
|
|
161
|
-
6. **Criar script em `$DATA_REPO/jobs/<camada>/<nome>.py`** seguindo o padrão de script Python abaixo
|
|
162
|
-
7. **Documentar**: preencher `templates/engineering/data-pipeline-template.md`
|
|
163
|
-
8. **Validar qualidade**: checks de schema, volume, nulidade via `$DATA_QUALITY_TOOL`
|
|
164
|
-
|
|
165
|
-
### Modelagem Dimensional
|
|
166
|
-
|
|
167
|
-
1. **Identificar granularidade**: qual é o grão do fato?
|
|
168
|
-
2. **Mapear dimensões**: cliente, produto, tempo, canal
|
|
169
|
-
3. **Definir métricas**: o que será medido?
|
|
170
|
-
4. **Criar tabela fato + dimensões**
|
|
171
|
-
5. **Documentar no contrato de dados**
|
|
172
|
-
|
|
173
|
-
### Dashboard ($DATA_BI_TOOL)
|
|
174
|
-
|
|
175
|
-
> Para dashboards, invocar a skill especializada: `eng-data-bi`
|
|
176
|
-
> Arquivo: `$IDE/skills/eng-data-bi/SKILL.md`
|
|
177
|
-
> Uso: `/eng-data-bi [dashboard|query|compartilhar|otimizar] [contexto]`
|
|
178
|
-
|
|
179
|
-
A skill `eng-data-bi` cobre: criação de dashboard, otimização de query lenta e compartilhamento de dados com squads.
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## Qualidade de Dados — Checklist mínimo
|
|
184
|
-
|
|
185
|
-
```python
|
|
186
|
-
def validate_pipeline_output(df, table_name: str, expected_min_rows: int = 1):
|
|
187
|
-
"""Validações mínimas obrigatórias para qualquer pipeline."""
|
|
188
|
-
assert len(df) >= expected_min_rows, f"{table_name}: 0 rows — pipeline vazio"
|
|
189
|
-
assert df.isnull().sum().sum() == 0 or check_nullability_rules(df), \
|
|
190
|
-
f"{table_name}: nulos em campos críticos"
|
|
191
|
-
assert 'data_referencia' in df.columns or 'created_at' in df.columns, \
|
|
192
|
-
f"{table_name}: sem coluna de data de referência"
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## Padrão de Script Python
|
|
198
|
-
|
|
199
|
-
```python
|
|
200
|
-
"""
|
|
201
|
-
Pipeline: <nome>
|
|
202
|
-
Descrição: <o que faz>
|
|
203
|
-
Fonte: <origem dos dados>
|
|
204
|
-
Destino: <tabela destino>
|
|
205
|
-
Frequência: <diário/semanal/etc>
|
|
206
|
-
Owner: <email do responsável>
|
|
207
|
-
"""
|
|
208
|
-
|
|
209
|
-
import logging
|
|
210
|
-
from datetime import date
|
|
211
|
-
|
|
212
|
-
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
|
|
213
|
-
logger = logging.getLogger(__name__)
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
def extract(data_referencia: date) -> list[dict]:
|
|
217
|
-
"""Extrai dados da fonte para a data de referência."""
|
|
218
|
-
logger.info(f"Extraindo dados para {data_referencia}")
|
|
219
|
-
# implementar
|
|
220
|
-
...
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
def transform(raw_data: list[dict]) -> list[dict]:
|
|
224
|
-
"""Aplica regras de limpeza e transformação."""
|
|
225
|
-
# implementar
|
|
226
|
-
...
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
def load(transformed_data: list[dict], data_referencia: date) -> None:
|
|
230
|
-
"""Carrega dados no destino de forma idempotente."""
|
|
231
|
-
logger.info(f"Carregando {len(transformed_data)} registros para {data_referencia}")
|
|
232
|
-
# DELETE WHERE data_referencia = ? antes de INSERT (idempotência)
|
|
233
|
-
...
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
def run(data_referencia: date = date.today()) -> None:
|
|
237
|
-
raw = extract(data_referencia)
|
|
238
|
-
transformed = transform(raw)
|
|
239
|
-
load(transformed, data_referencia)
|
|
240
|
-
logger.info(f"Pipeline concluído: {len(transformed)} registros processados")
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
if __name__ == "__main__":
|
|
244
|
-
run()
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
## Regras Críticas
|
|
250
|
-
|
|
251
|
-
### Nunca faça
|
|
252
|
-
|
|
253
|
-
- ❌ Hardcode de credenciais em scripts — sempre variáveis de ambiente
|
|
254
|
-
- ❌ `SELECT *` em produção — sempre listar campos explicitamente
|
|
255
|
-
- ❌ Pipeline sem log de execução (início, fim, volume processado)
|
|
256
|
-
- ❌ Modificar tabela bronze — bronze é imutável, transformações vão em silver/gold
|
|
257
|
-
- ❌ Expor dados sensíveis (CPF, dados pessoais) sem mascaramento
|
|
258
|
-
- ❌ Assumir que dados sempre chegam — sempre validar volume e schema
|
|
259
|
-
|
|
260
|
-
### Sempre faça
|
|
261
|
-
|
|
262
|
-
- ✅ Logs estruturados com data_referencia, volume e status
|
|
263
|
-
- ✅ Idempotência: reprocessar não duplica
|
|
264
|
-
- ✅ Documentar antes de entregar para outra squad
|
|
265
|
-
- ✅ Validar com a squad requisitante o que "correto" significa antes de implementar
|
|
266
|
-
- ✅ Versionar queries Athena significativas em arquivos `.sql`
|