Coverage for src\pncp\filtros.py: 100%

1 from datetime import date, datetime

2 from typing import Self

3

4 from .tipos import Lista, ModeloBasico

5 from .utils import get_many

6

7 type IdStatus = str

8 type IdInstrumentoConvocatorio = str

9 type IdModalidadeDeContratacao = str

10 type IdOrgao = str

11 type IdUnidade = str

12 type IdUnidadeDaFederacao = str

13 type IdMunicipio = str

14 type IdEsfera = str

15 type IdPoder = str

16

17

18 class Status(ModeloBasico):

19 id: IdStatus

20 nome: str

21

22

23 class 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

32

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)

39

40

41 class 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

48

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)

55

56

57 class 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"

71

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)

79

80

81 class Unidade(ModeloBasico):

82 id: IdUnidade

83 codigo: str

84 nome: str

85 total: int

86 codigo_nome: str

87

88

89 class UnidadeDaFederacao(ModeloBasico):

90 id: IdUnidadeDaFederacao

91 total: int

92

93

94 class Municipio(ModeloBasico):

95 id: IdMunicipio

96 nome: str

97 total: int

98

99

100 class Esfera(ModeloBasico):

101 id: IdEsfera

102 nome: str

103 total: int

104

105

106 class Poder(ModeloBasico):

107 id: IdPoder

108 nome: str

109 total: int

110

111

112 class Ano(ModeloBasico):

113 ano: str

114 total: int