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,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
|