Este documento descreve como os schemas da API e os tipos Pydantic do SDK são mantidos.
O contrato oficial da API CNPJá é publicado pela própria CNPJá em:
- Referência OpenAPI: https://cnpja.com/api/reference
O snapshot do OpenAPI não é versionado neste repositório (está no .gitignore como schemas/) porque:
- O artefato pertence à CNPJá — não queremos redistribuir IP sem autorização explícita.
- A fonte oficial é única (acima) — manter cópia local aumenta risco de drift silencioso.
- O
sdk-nodejssegue o mesmo padrão: o schema é obtido via fetch durante o codegen.
Quando a API CNPJá for atualizada (ou ao realinhar os DTOs):
- Baixar o OpenAPI atual para
schemas/openapi.json(diretório é gitignored):mkdir -p schemas curl -sSL <url-do-openapi-fornecida-pela-cnpja> -o schemas/openapi.json
- Comparar com
src/cnpja/types/e atualizar os DTOs manualmente (ou via codegen — ver seção abaixo). - Rodar os quality gates:
task qa
- Commitar as mudanças de tipos (sem incluir
schemas/):git commit -m "feat(types): atualiza DTOs para openapi $(date +%Y-%m-%d)"
TODO: formalizar pipeline automatizado.
Candidatos avaliados para geração automática a partir do OpenAPI:
datamodel-code-generator— gera modelos Pydantic v2 diretamente.openapi-python-client— gera client completo (requer mais ajuste no output).Enquanto o processo não está automatizado, alterações nos tipos devem ser feitas manualmente com revisão contra o schema baixado em
schemas/.
Alguns DTOs relaxam nullability em relação ao OpenAPI porque a API em produção retorna null onde o schema declara obrigatório. Esses relaxamentos são testes de regressão em tests/test_types.py:
MemberDto.since: str | NoneRfbMemberDto.since: str | NonePersonMemberDto.since: str | NonePersonDto.id: str | NonePersonBaseDto.id: str | NoneAddressDto.details: str | NoneSimplesSimeiDto.since: str | NoneSimplesSimeiHistoryDto.*(todos opcionais)OfficeDto.alias: str | NoneOfficeSuframaDto.since,approval_date: str | NoneRegistrationDto.status_date: str | NoneCccDto.updated: str | None
Se o OpenAPI for atualizado reforçando esses campos como obrigatórios, não regredir — a realidade da API em produção tem prioridade.