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

1from datetime import date, datetime 

2from typing import Self 

3 

4from .tipos import Lista, ModeloBasico 

5from .utils import get_many 

6 

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 

16 

17 

18class Status(ModeloBasico): 

19 id: IdStatus 

20 nome: str 

21 

22 

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 

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 

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 

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 

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" 

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 

81class Unidade(ModeloBasico): 

82 id: IdUnidade 

83 codigo: str 

84 nome: str 

85 total: int 

86 codigo_nome: str 

87 

88 

89class UnidadeDaFederacao(ModeloBasico): 

90 id: IdUnidadeDaFederacao 

91 total: int 

92 

93 

94class Municipio(ModeloBasico): 

95 id: IdMunicipio 

96 nome: str 

97 total: int 

98 

99 

100class Esfera(ModeloBasico): 

101 id: IdEsfera 

102 nome: str 

103 total: int 

104 

105 

106class Poder(ModeloBasico): 

107 id: IdPoder 

108 nome: str 

109 total: int 

110 

111 

112class Ano(ModeloBasico): 

113 ano: str 

114 total: int