Coverage for src\pncp\filtros.py: 100%
89 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-24 17:30 -0300
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-24 17:30 -0300
1from datetime import date, datetime
2from typing import Self
4from .tipos import Lista, ModeloBasico
5from .utils import get_many
7type IdStatus = str
8type IdInstrumentoConvocatorio = str
9type IdModalidadeDeContratacao = str
10type IdOrgao = str
11type IdUnidade = str
12type IdUnidadeDaFederacao = str
13type IdMunicipio = str
14type IdEsfera = str
15type IdPoder = str
18class Status(ModeloBasico):
19 id: IdStatus
20 nome: str
23class InstrumentoConvocatorio(ModeloBasico):
24 id: int
25 nome: str
26 descricao: str
27 obrigatoriedade_data_abertura_proposta_nome: str
28 obrigatoriedade_data_encerramento_proposta_nome: str
29 data_inclusao: datetime # ISO 8601 date-time string, e.g., "2025-05-21T11:36:41"
30 data_atualizacao: datetime # ISO 8601 date-time string, e.g., "2025-05-21T11:36:41"
31 status_ativo: bool
33 @classmethod
34 def listar(cls, status_ativo: bool = False) -> Lista[Self]:
35 url = "https://pncp.gov.br/api/pncp/v1/tipos-instrumentos-convocatorios"
36 params = {"status_ativo": status_ativo}
37 data = get_many(url, params=params)
38 return Lista(cls(**item) for item in data)
41class ModalidadeDeContratacao(ModeloBasico):
42 id: int
43 nome: str
44 descricao: str | None
45 data_inclusao: datetime # ISO 8601 date-time string, e.g., "2025-05-21T11:36:41"
46 data_atualizacao: datetime # ISO 8601 date-time string, e.g., "2025-05-21T11:36:41"
47 status_ativo: bool
49 @classmethod
50 def listar(cls, status_ativo: bool = False) -> Lista[Self]:
51 url = "https://pncp.gov.br/api/pncp/v1/modalidades"
52 params = {"statusAtivo": status_ativo}
53 data = get_many(url, params=params)
54 return Lista(cls(**item) for item in data)
57class Orgao(ModeloBasico):
58 cnpj: str
59 razao_social: str
60 nome_fantasia: str | None
61 codigo_natureza_juridica: str | None
62 situacao_cadastral: str | None
63 motivo_situacao_cadastral: str | None
64 data_situacao_cadastral: date | None # ISO 8601 date string, e.g., "2025-05-21"
65 poder_id: str
66 esfera_id: str
67 validado: bool
68 data_validacao: datetime | None # ISO 8601 date-time string, e.g., "2025-05-21T11:36:41"
69 data_inclusao: datetime # ISO 8601 date-time string, e.g., "2025-05-21T11:36:41"
70 data_atualizacao: datetime # ISO 8601 date-time string, e.g., "2025-05-21T11:36:41"
72 @classmethod
73 def listar(cls, razao_social: str | None = None) -> Lista[Self]:
74 base_url = "https://pncp.gov.br/api/pncp/v1/orgaos"
75 url = base_url + "/" if razao_social else base_url
76 params = {"razaoSocial": razao_social} if razao_social else None
77 data = get_many(url, params=params)
78 return Lista(cls(**item) for item in data)
81class Unidade(ModeloBasico):
82 id: IdUnidade
83 codigo: str
84 nome: str
85 total: int
86 codigo_nome: str
89class UnidadeDaFederacao(ModeloBasico):
90 id: IdUnidadeDaFederacao
91 total: int
94class Municipio(ModeloBasico):
95 id: IdMunicipio
96 nome: str
97 total: int
100class Esfera(ModeloBasico):
101 id: IdEsfera
102 nome: str
103 total: int
106class Poder(ModeloBasico):
107 id: IdPoder
108 nome: str
109 total: int
112class Ano(ModeloBasico):
113 ano: str
114 total: int