Skip to content

Commit a6c9701

Browse files
committed
fix: CI yml simplificada + format/lint clean
1 parent 33a5c79 commit a6c9701

12 files changed

Lines changed: 3792 additions & 188 deletions

File tree

.commitlintrc.cjs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ module.exports = {
55
...base,
66
rules: {
77
...base.rules,
8-
'scope-enum': [2, 'always', ['data', 'schema', 'scripts', 'ci', 'deps', 'docs', 'lint', 'config']],
8+
'scope-enum': [
9+
2,
10+
'always',
11+
['data', 'schema', 'scripts', 'ci', 'deps', 'docs', 'lint', 'config'],
12+
],
913
},
1014
};

.github/workflows/ci.yml

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
name: CI/CD
2-
3-
# Orchestrator enxuto — datasus-parquet é repo scripts-only (não publica
4-
# npm, não tem site), então só rodamos checks em PRs e pushes.
5-
# Release do dataset (não de código) vive em refresh.yml.
1+
name: CI
62

73
on:
84
push:
@@ -11,24 +7,46 @@ on:
117
branches: [main]
128
workflow_dispatch:
139

14-
permissions:
15-
contents: read
16-
pull-requests: write
17-
models: read
18-
1910
concurrency:
2011
group: ${{ github.workflow }}-${{ github.ref }}
2112
cancel-in-progress: true
2213

2314
jobs:
24-
checks:
25-
uses: ./.github/workflows/_checks.yml
26-
secrets: inherit
15+
lint:
16+
runs-on: ubuntu-latest
17+
timeout-minutes: 10
18+
steps:
19+
- uses: actions/checkout@v4
20+
- uses: pnpm/action-setup@v4
21+
- uses: actions/setup-node@v4
22+
with:
23+
node-version: 22
24+
cache: 'pnpm'
25+
- run: pnpm install --frozen-lockfile
26+
- run: pnpm lint
27+
28+
typecheck:
29+
runs-on: ubuntu-latest
30+
timeout-minutes: 10
31+
steps:
32+
- uses: actions/checkout@v4
33+
- uses: pnpm/action-setup@v4
34+
- uses: actions/setup-node@v4
35+
with:
36+
node-version: 22
37+
cache: 'pnpm'
38+
- run: pnpm install --frozen-lockfile
39+
- run: pnpm typecheck
2740

28-
review:
29-
needs: checks
30-
if: github.event_name == 'pull_request'
31-
uses: ./.github/workflows/review.yml
32-
with:
33-
pr_number: ${{ github.event.pull_request.number }}
34-
secrets: inherit
41+
format:
42+
runs-on: ubuntu-latest
43+
timeout-minutes: 5
44+
steps:
45+
- uses: actions/checkout@v4
46+
- uses: pnpm/action-setup@v4
47+
- uses: actions/setup-node@v4
48+
with:
49+
node-version: 22
50+
cache: 'pnpm'
51+
- run: pnpm install --frozen-lockfile
52+
- run: pnpm format:check

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ lives in `package.json` under `"worktree"`. For quick reference:
3535

3636
| Field | Value |
3737
| ------------- | ------------------------------------------ |
38-
| Port registry | `/tmp/datasus-parquet-worktree-ports.json` |
38+
| Port registry | `/tmp/datasus-parquet-worktree-ports.json` |
3939
| Services | (filled in when the repo adds dev servers) |
4040

4141
Launch a dev server in a feature worktree:

docs/contributing.md

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ Cada dataset ocupa um "slot" em três lugares:
6060

6161
## Padrão de nomes nos scripts
6262

63-
| Convenção | Exemplo |
64-
| --------------------- | ------------------------------------------ |
65-
| Script | `scripts/archive-<dataset>.ts` |
66-
| State | `state/<dataset>.json` |
67-
| Build output | `build/<dataset>/ano=YYYY/…` |
68-
| Provenance output | `build/<dataset>/provenance/ano=YYYY/…` |
69-
| Package script | `archive-<dataset>` em `package.json` |
63+
| Convenção | Exemplo |
64+
| ----------------- | --------------------------------------- |
65+
| Script | `scripts/archive-<dataset>.ts` |
66+
| State | `state/<dataset>.json` |
67+
| Build output | `build/<dataset>/ano=YYYY/…` |
68+
| Provenance output | `build/<dataset>/provenance/ano=YYYY/…` |
69+
| Package script | `archive-<dataset>` em `package.json` |
7070

7171
## Checklist de PR
7272

@@ -78,9 +78,8 @@ Um PR que adiciona um dataset novo deve incluir:
7878
- [ ] `state/<dataset>.json` inicial vazio
7979
- [ ] `docs/schema/<dataset>.md` completo
8080
- [ ] Atualização de `docs/datasets.md`
81-
- [ ] Teste manual: `pnpm archive-<dataset> -- --ufs AC --years 2023` deve
82-
emitir Parquet válido (`duckdb -c "DESCRIBE SELECT * FROM
83-
read_parquet('build/<dataset>/ano=2023/uf=AC/mes=01/part.parquet')"`)
81+
- [ ] Teste manual: `pnpm archive-<dataset> -- --ufs AC --years 2023`
82+
emite um Parquet válido que o DuckDB consegue abrir.
8483
- [ ] `pnpm typecheck` limpo
8584

8685
## Testes
@@ -90,7 +89,7 @@ recente. Depois confira:
9089

9190
```bash
9291
duckdb -c "SELECT COUNT(*) FROM read_parquet('build/<dataset>/ano=*/uf=*/mes=*/part.parquet', union_by_name=true);"
93-
duckdb -c "DESCRIBE SELECT * FROM read_parquet('build/<dataset>/ano=2024/uf=AC/mes=01/part.parquet');"
92+
duckdb -c "DESCRIBE SELECT * FROM read_parquet('build/<dataset>/ano=2023/uf=AC/mes=01/part.parquet')` emite Parquet válido.
9493
```
9594
9695
Compare linha-a-linha com uma query TabNet oficial (quando disponível)

docs/provenance.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ oficial agora. Se não bate, pode ser:
6363
emitir uma nova partição.
6464
- O arquivo no cache local foi corrompido. Re-baixe com
6565
`rm -rf ~/.cache/datasus-brasil/.../PAAC2401.dbc && pnpm archive-sia-pa
66-
-- --ufs AC --years 2024`.
66+
-- --ufs AC --years 2024`.
6767

6868
### Passo 2 — validar o Parquet emitido
6969

docs/schema/sia-pa.md

Lines changed: 62 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -13,68 +13,68 @@ arquivo "LAYOUT PA.pdf" ou equivalente na documentação do SIA-SUS.
1313
1414
## Colunas principais (presentes em praticamente todas as vintages)
1515

16-
| Coluna | Tipo | Descrição |
17-
| -------------- | --------- | ------------------------------------------------------------------ |
18-
| `PA_CODUNI` | VARCHAR | CNES (Cadastro Nacional de Estabelecimentos) do prestador (7 díg.) |
19-
| `PA_GESTAO` | VARCHAR | Código IBGE do município gestor (6 díg.) |
20-
| `PA_CONDIC` | VARCHAR | Condição de gestão (E/M/D — Estadual/Municipal/Dupla) |
21-
| `PA_UFMUN` | VARCHAR | Código IBGE do município do prestador (6 díg., sem DV) |
22-
| `PA_REGCT` | VARCHAR | Código de região |
23-
| `PA_INCOUT` | VARCHAR | Incremento outros |
24-
| `PA_INCURG` | VARCHAR | Incremento urgência |
25-
| `PA_TPUPS` | VARCHAR | Tipo de estabelecimento (CNES) |
26-
| `PA_TIPPRE` | VARCHAR | Tipo de prestador |
27-
| `PA_MN_IND` | VARCHAR | Mantenedora (M) ou individual (I) |
28-
| `PA_CNPJCPF` | VARCHAR | CNPJ/CPF do estabelecimento |
29-
| `PA_CNPJMNT` | VARCHAR | CNPJ da mantenedora |
30-
| `PA_CNPJ_CC` | VARCHAR | CNPJ do cartão convênio |
31-
| `PA_MVM` | VARCHAR | Ano/mês do movimento (AAAAMM) |
32-
| `PA_CMP` | VARCHAR | Competência (AAAAMM) |
33-
| `PA_PROC_ID` | VARCHAR | Código SIGTAP do procedimento (10 díg.) |
34-
| `PA_TPFIN` | VARCHAR | Tipo de financiamento |
35-
| `PA_SUBFIN` | VARCHAR | Subtipo de financiamento |
36-
| `PA_NIVCPL` | VARCHAR | Complexidade |
37-
| `PA_DOCORIG` | VARCHAR | Documento de origem (BPA, APAC, etc.) |
38-
| `PA_AUTORIZ` | VARCHAR | Número da autorização |
39-
| `PA_CNSMED` | VARCHAR | CNS do profissional executante |
40-
| `PA_CBOCOD` | VARCHAR | CBO (Classificação Brasileira de Ocupações) do executante |
41-
| `PA_MOTSAI` | VARCHAR | Motivo de saída / permanência |
42-
| `PA_OBITO` | VARCHAR | Indicador de óbito (0/1) |
43-
| `PA_ENCERR` | VARCHAR | Encerramento |
44-
| `PA_PERMAN` | VARCHAR | Permanência |
45-
| `PA_ALTA` | VARCHAR | Alta |
46-
| `PA_TRANSF` | VARCHAR | Transferência |
47-
| `PA_CIDPRI` | VARCHAR | CID-10 principal |
48-
| `PA_CIDSEC` | VARCHAR | CID-10 secundário |
49-
| `PA_CIDCAS` | VARCHAR | CID-10 causas |
50-
| `PA_CATEND` | VARCHAR | Caráter de atendimento |
51-
| `PA_IDADE` | NUMERIC | Idade (valor) |
52-
| `IDADEMIN` | NUMERIC | Idade mínima do procedimento |
53-
| `IDADEMAX` | NUMERIC | Idade máxima do procedimento |
54-
| `PA_FLIDADE` | VARCHAR | Flag idade compatível |
55-
| `PA_SEXO` | VARCHAR | Sexo (M/F/I) |
56-
| `PA_RACACOR` | VARCHAR | Raça/cor (1–5, 99) — desde 2013 |
57-
| `PA_MUNPCN` | VARCHAR | Município de residência do paciente (6 díg.) |
58-
| `PA_QTDPRO` | NUMERIC | Quantidade produzida |
59-
| `PA_QTDAPR` | NUMERIC | Quantidade aprovada |
60-
| `PA_VALPRO` | NUMERIC | Valor produzido (em centavos) |
61-
| `PA_VALAPR` | NUMERIC | Valor aprovado (em centavos) |
62-
| `PA_UFDIF` | VARCHAR | Diferença UF executante / residência |
63-
| `PA_MNDIF` | VARCHAR | Diferença município executante / residência |
64-
| `PA_DIF_VAL` | NUMERIC | Diferença de valor |
65-
| `NU_VPATA` | NUMERIC | Valor pago |
66-
| `NU_PA_TOT` | NUMERIC | Total |
67-
| `PA_INDICA` | VARCHAR | Indicação |
68-
| `PA_CODOCO` | VARCHAR | Código ocorrência |
69-
| `PA_FLQT` | VARCHAR | Flag quantidade compatível |
70-
| `PA_FLER` | VARCHAR | Flag erro |
71-
| `PA_ETNIA` | VARCHAR | Etnia indígena |
72-
| `PA_VL_CF` | NUMERIC | Valor complemento federal |
73-
| `PA_VL_CL` | NUMERIC | Valor complemento local |
74-
| `PA_VL_INC` | NUMERIC | Valor incentivo |
75-
| `PA_SRV_C` | VARCHAR | Serviço classificado (vintages recentes) |
76-
| `PA_INE` | VARCHAR | Código INE |
77-
| `PA_NAT_JUR` | VARCHAR | Natureza jurídica |
16+
| Coluna | Tipo | Descrição |
17+
| ------------ | ------- | ------------------------------------------------------------------ |
18+
| `PA_CODUNI` | VARCHAR | CNES (Cadastro Nacional de Estabelecimentos) do prestador (7 díg.) |
19+
| `PA_GESTAO` | VARCHAR | Código IBGE do município gestor (6 díg.) |
20+
| `PA_CONDIC` | VARCHAR | Condição de gestão (E/M/D — Estadual/Municipal/Dupla) |
21+
| `PA_UFMUN` | VARCHAR | Código IBGE do município do prestador (6 díg., sem DV) |
22+
| `PA_REGCT` | VARCHAR | Código de região |
23+
| `PA_INCOUT` | VARCHAR | Incremento outros |
24+
| `PA_INCURG` | VARCHAR | Incremento urgência |
25+
| `PA_TPUPS` | VARCHAR | Tipo de estabelecimento (CNES) |
26+
| `PA_TIPPRE` | VARCHAR | Tipo de prestador |
27+
| `PA_MN_IND` | VARCHAR | Mantenedora (M) ou individual (I) |
28+
| `PA_CNPJCPF` | VARCHAR | CNPJ/CPF do estabelecimento |
29+
| `PA_CNPJMNT` | VARCHAR | CNPJ da mantenedora |
30+
| `PA_CNPJ_CC` | VARCHAR | CNPJ do cartão convênio |
31+
| `PA_MVM` | VARCHAR | Ano/mês do movimento (AAAAMM) |
32+
| `PA_CMP` | VARCHAR | Competência (AAAAMM) |
33+
| `PA_PROC_ID` | VARCHAR | Código SIGTAP do procedimento (10 díg.) |
34+
| `PA_TPFIN` | VARCHAR | Tipo de financiamento |
35+
| `PA_SUBFIN` | VARCHAR | Subtipo de financiamento |
36+
| `PA_NIVCPL` | VARCHAR | Complexidade |
37+
| `PA_DOCORIG` | VARCHAR | Documento de origem (BPA, APAC, etc.) |
38+
| `PA_AUTORIZ` | VARCHAR | Número da autorização |
39+
| `PA_CNSMED` | VARCHAR | CNS do profissional executante |
40+
| `PA_CBOCOD` | VARCHAR | CBO (Classificação Brasileira de Ocupações) do executante |
41+
| `PA_MOTSAI` | VARCHAR | Motivo de saída / permanência |
42+
| `PA_OBITO` | VARCHAR | Indicador de óbito (0/1) |
43+
| `PA_ENCERR` | VARCHAR | Encerramento |
44+
| `PA_PERMAN` | VARCHAR | Permanência |
45+
| `PA_ALTA` | VARCHAR | Alta |
46+
| `PA_TRANSF` | VARCHAR | Transferência |
47+
| `PA_CIDPRI` | VARCHAR | CID-10 principal |
48+
| `PA_CIDSEC` | VARCHAR | CID-10 secundário |
49+
| `PA_CIDCAS` | VARCHAR | CID-10 causas |
50+
| `PA_CATEND` | VARCHAR | Caráter de atendimento |
51+
| `PA_IDADE` | NUMERIC | Idade (valor) |
52+
| `IDADEMIN` | NUMERIC | Idade mínima do procedimento |
53+
| `IDADEMAX` | NUMERIC | Idade máxima do procedimento |
54+
| `PA_FLIDADE` | VARCHAR | Flag idade compatível |
55+
| `PA_SEXO` | VARCHAR | Sexo (M/F/I) |
56+
| `PA_RACACOR` | VARCHAR | Raça/cor (1–5, 99) — desde 2013 |
57+
| `PA_MUNPCN` | VARCHAR | Município de residência do paciente (6 díg.) |
58+
| `PA_QTDPRO` | NUMERIC | Quantidade produzida |
59+
| `PA_QTDAPR` | NUMERIC | Quantidade aprovada |
60+
| `PA_VALPRO` | NUMERIC | Valor produzido (em centavos) |
61+
| `PA_VALAPR` | NUMERIC | Valor aprovado (em centavos) |
62+
| `PA_UFDIF` | VARCHAR | Diferença UF executante / residência |
63+
| `PA_MNDIF` | VARCHAR | Diferença município executante / residência |
64+
| `PA_DIF_VAL` | NUMERIC | Diferença de valor |
65+
| `NU_VPATA` | NUMERIC | Valor pago |
66+
| `NU_PA_TOT` | NUMERIC | Total |
67+
| `PA_INDICA` | VARCHAR | Indicação |
68+
| `PA_CODOCO` | VARCHAR | Código ocorrência |
69+
| `PA_FLQT` | VARCHAR | Flag quantidade compatível |
70+
| `PA_FLER` | VARCHAR | Flag erro |
71+
| `PA_ETNIA` | VARCHAR | Etnia indígena |
72+
| `PA_VL_CF` | NUMERIC | Valor complemento federal |
73+
| `PA_VL_CL` | NUMERIC | Valor complemento local |
74+
| `PA_VL_INC` | NUMERIC | Valor incentivo |
75+
| `PA_SRV_C` | VARCHAR | Serviço classificado (vintages recentes) |
76+
| `PA_INE` | VARCHAR | Código INE |
77+
| `PA_NAT_JUR` | VARCHAR | Natureza jurídica |
7878

7979
## Charset / encoding
8080

package.json

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
"version": "0.0.1",
44
"private": true,
55
"description": "Public archive of DATASUS microdata in Parquet (1:1 DBC→Parquet, provenance-first).",
6-
"type": "module",
7-
"license": "Apache-2.0",
86
"repository": "github:Precisa-Saude/datasus-parquet",
7+
"license": "Apache-2.0",
8+
"type": "module",
99
"scripts": {
1010
"archive-sia-pa": "tsx scripts/archive-sia-pa.ts",
1111
"build-manifest": "tsx scripts/build-manifest.ts",
@@ -15,8 +15,19 @@
1515
"format:check": "prettier --check .",
1616
"lint": "eslint scripts/ --max-warnings 0",
1717
"prepare": "husky",
18+
"test": "echo 'no tests yet — scripts-only repo'",
19+
"test:coverage": "echo 'no tests yet — scripts-only repo'",
1820
"typecheck": "tsc --noEmit"
1921
},
22+
"lint-staged": {
23+
"*.{ts,tsx}": [
24+
"prettier --write",
25+
"eslint --fix --max-warnings 0 --no-warn-ignored"
26+
],
27+
"*.{js,jsx,json,md,css,yml,yaml}": [
28+
"prettier --write"
29+
]
30+
},
2031
"dependencies": {
2132
"@precisa-saude/datasus": "^1.1.0",
2233
"@precisa-saude/datasus-dbc": "^1.1.0",
@@ -40,15 +51,6 @@
4051
"tsx": "^4.21.0",
4152
"typescript": "~5.7.3"
4253
},
43-
"lint-staged": {
44-
"*.{ts,tsx}": [
45-
"prettier --write",
46-
"eslint --fix --max-warnings 0 --no-warn-ignored"
47-
],
48-
"*.{js,jsx,json,md,css,yml,yaml}": [
49-
"prettier --write"
50-
]
51-
},
5254
"engines": {
5355
"node": ">=22"
5456
}

0 commit comments

Comments
 (0)