Essa biblioteca utiliza a API do Redmine para extrair informações da plataforma Fiscaliza da Anatel e atualizar inspeções
Project description
Fiscaliza
Scripts para baixar informações sobre inspeções no Sistema Fiscaliza da Anatel e atualizar inspeções por meio da API do Redmine.
from nbdev.showdoc import show_doc
from getpass import getuser, getpass
from fiscaliza.redmine import detalhar_inspecao, validar_dicionario, relatar_inspecao
from rich.console import Console
console = Console()
Instalação
Como boa prática é sugerido a criação de um ambiente virtual para encapsular o ambiente python no qual você irá instalar a biblioteca
Utilizando o conda
:
conda create -n fiscaliza python=3.8
conda activate fiscaliza
python -m pip install fiscaliza
Utilizando somente python:
Windows
python -m venv <pasta onde criar o ambiente virtual>
<pasta onde criou o ambiente virtual>\Scripts\activate.bat
python -m pip install fiscaliza
Linux:
python -m venv <pasta onde criar o ambiente virtual>
source <pasta onde criou o ambiente virtual>/Scripts/activate
python -m pip install fiscaliza
Caso não desejar utilizar um ambiente virtual basta rodar:
pip install fiscaliza
Como utilizar
O Fiscaliza
da Anatel é um sistema web que utiliza a plataforma Redmine. É basicamente um softaware de gerenciamento e atividades.
O Fiscaliza possui 2 módulos para os fiscais utilizarem:
- Módulo de Teste ( Homologação ) : "https://sistemashm.anatel.gov.br/fiscaliza"
- Módulo de Produção: "https://sistemas.anatel.gov.br/fiscaliza/"
Ambos módulos precisam de um usuário e senha com acesso autorizado, em geral somente servidores da Anatel.
O Escopo desse módulo basicamente está encapsulado em 3 funções básicas:
- detalhar_inspecao - Retorna as informações do estado atual da Issue ( Inspeção )
- validar_dicionario - Para dado dicionário de dados, formata-o para a API do Redmine
- relatar_inspecao - Atualiza e Issue com o dicionário de dados passado
O escopo da terceira função relatar_inspecao
possui escopo limitado. Atualmente somente é formatado e relatado Inspeções ( Issue ) to tipo "Uso do Espectro - Monitoração". Essa inspeção é a principal utilizada para as atividades de monitoração da Anatel e foi o que motivou a criação da presente biblioteca. Outras inspeções possuem campos distintos e assim exigem formatação distinta. Versões futuras poderão abarcar o relato de diferentes inspeções.
Detalhar Inspeção
show_doc(detalhar_inspecao)
detalhar_inspecao
[source]
> detalhar_inspecao
(**`inspecao`**:`str`, **`login`**:`str`=*`None`*, **`senha`**:`str`=*`None`*, **`fiscaliza`**:`Redmine`=*`None`*, **`teste`**:`bool`=*`True`*)
Recebe número da inspeção `inspecao`, o login e senha ou opcionalmente objeto Redmine logado `fiscaliza`
inspecao: str - Número da Inspeção a ser relatada
login: str - Login Anatel do Usuário
senha: str - Senha Utilizada nos Sistemas Interativos da
fiscaliza: Redmine - Objeto Redmine logado, opcional ao login e senha
teste: bool - Caso verdadeiro o Fiscaliza de Teste ( Homologação ) é utilizado
Returns: dict: Retorna um dicionário com a Situação Atual e campos preenchidos da Inspeção
Vamos exemplificar a Inspeção de Teste 57684
login = getuser()
senha = getpass()
inspecao = '57684'
··········
detalhes = detalhar_inspecao(inspecao, login, senha)
for k,v in detalhes.items():
console.print(f'[red]{k} [blue]-> [green]{v}')
id -> 57684
subject -> INSP_GR01_2021_0504
status -> Rascunho
priority -> Normal
start_date ->
due_date ->
Classe_da_Inspecao ->
Tipo_de_Inspecao ->
Ano -> 2021
Numero_Sei_do_Processo -> {"numero"=>"53504.000007/2021-50", "link_acesso"=>"https://seihm.an atel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1962455"}
Descricao_da_Inspecao ->
Fiscal_Responsavel ->
Fiscais -> []
Entidade_da_Inspecao -> []
UF_Municipio -> []
Servicos_da_Inspecao -> []
Horas_de_Preparacao ->
Horas_de_Deslocamento ->
Horas_de_Execucao ->
Horas_de_Conclusao ->
SAV ->
PCDP ->
Procedimentos -> []
Agrupamento ->
AppFiscaliza -> 0
id_ACAO -> 52876
nome_ACAO -> ACAO_GR01_2021_0491
descricao_ACAO -> Teste
Users -> ['Alexandre Elias de Andrade Oliveira', 'Alexandre Freitas de Lima', 'Alexandre Inacio', 'Alexandre Junzo Hamada', 'Alfredo de Andrade Filho', 'Ananias Pereira', 'Antonio Carlos Cardoso de Mello', 'Aparecido Sebastiao da Silva', 'Arthur Pisaruk', 'Carlos Augusto de Carvalho', 'Carlos Eduardo Guimaraes Silveira', 'Carlos da Paixao Filho', 'Celio Yukio Takahashi', 'Celso Luiz Maximino', 'Diogo Caldeira', 'Ediceu Beraldi', 'Eduardo Narkevicius', 'Elcio Maehara', 'Eustaquio Lages Duarte', 'Fiscal UD', 'Gauber Albuquerque', 'Gilson Ponce Ayres Filho', 'Helio Lopes de Carvalho Filho', 'Higor Paz Melo', 'Hugo Santana Lima', 'Humberto Barbosa Vinagre', 'Jamilson Evangelista', 'Joao Yokoyama', 'Joaquim Miranda', 'José Antônio S. Sanches', 'Julio Cesar de Assis Santos', 'Kiyotomo Kawamura', 'Laert Calil Junior', 'Lannei Vilela Moraes', 'Luis Lagomes', 'Luiz Vinicios Mielniczuk Seelig', 'Marcelo Augusto Scacabarozi', 'Marcio Costa', 'Marcio Rodrigues Maciel', 'Marcos Antônio Rodrigues', 'Marcos Juliano Valim da Silva', 'Maria Teresa Flosi Garrafa', 'Mario Augusto Volpini', 'Murilo Amaro', 'Osnir Lopes', 'Paulo Diogo Costa', 'Pedro Arai', 'Renato Sadao Kushioyada', 'Ricardo Santos Marques', 'Ricardo da Silva e Souza', 'Roberto Carlos Soares Campos', 'Roberto Ferreira dos Santos', 'Roberto Takata', 'Rodrigo Barbosa de Paula', 'Rogerio Zambotto', 'Ronaldo da Silva Alves Batista', 'Sergio Pereira', 'Thiago Silva', 'Thomaz Honma Ishida', 'Vinicius Paiva de Oliveira', 'Vitor Zelada', 'Wellington Devechi Piauilino', 'Wladimir Senise', 'marcio colazingari']
Agora vamos testar o retorno de informações para um Inspeção no Fiscaliza de produção teste=False
.
inspecao = '51804'
detalhes = detalhar_inspecao(inspecao, login, senha, teste=False)
for k,v in detalhes.items():
console.print(f'[blue]{k} [red]-> [green]{v}')
id -> 51804
subject -> INSP_GR01_2021_0449
status -> Conferida
priority -> Normal
start_date -> 2020-10-22
due_date -> 2021-03-31
Classe_da_Inspecao -> Técnica
Tipo_de_Inspecao -> Uso do Espectro - Monitoração
Ano -> 2021
178 ->
Numero_Sei_do_Processo -> {"numero"=>"53504.006733/2020-03", "link_acesso"=>"https://sei.anat el.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=6892566"}
Descricao_da_Inspecao -> Atendimento da Denúncia AC202010213075425 (6104512), verificação da Potência e Intensidade de Campo Elétrico da Frequência 105.1MHz e seus harmônicos, além da checagem de Intermodulação e Espúrios nas frequências 450.3MHz e 750MHz.
Fiscal_Responsavel -> Ronaldo da Silva Alves Batista
Fiscais -> ['Ronaldo da Silva Alves Batista']
Entidade_da_Inspecao -> ['{"valor":"30913990000110","texto":"SISTEMA TRANSRIO DE COMUNICACAO LTDA (30913990000110)"}']
UF_Municipio -> ['RJ/Rio de Janeiro']
Servicos_da_Inspecao -> ['230 - COLETIVO - RADIODIFUSÃO SONORA EM FREQÜÊNCIA MODULADA']
Qnt_de_emissoes_na_faixa -> 1
Emissoes_nao_autorizadas -> 0
Horas_de_Preparacao -> 2
Horas_de_Deslocamento -> 0
Horas_de_Execucao -> 32
Horas_de_Conclusao -> 6
SAV ->
PCDP ->
Procedimentos -> []
Latitude (coordenadas) -> -22.94694
Longitude (coordenadas) -> -43.21944
Uso_de_PF -> Não se aplica PF - uso apenas de formulários
Acao_de_risco_a_vida_criada -> Não
Frequencia_Inicial -> 105.1
Unidade_da_Frequencia_Inicial -> MHz
Frequencia_Final -> 750
Unidade_da_Frequencia_Final -> MHz
Agrupamento ->
AppFiscaliza -> 0
596 ->
598 ->
id_ACAO -> 51803
nome_ACAO -> ACAO_GR01_2021_0456
descricao_ACAO -> Atendimento à Denúncia AC202010213075425 (6104512)
Users -> ['Alexandre Elias de Andrade Oliveira', 'Alexandre Freitas de Lima', 'Alexandre Inacio', 'Alexandre Junzo Hamada', 'Alfredo de Andrade Filho', 'Ananias Pereira', 'Antonio Carlos Cardoso de Mello', 'Aparecido Sebastiao da Silva', 'Arthur Pisaruk', 'Carlos Augusto de Carvalho', 'Carlos Eduardo Guimaraes Silveira', 'Carlos da Paixao Filho', 'Celio Yukio Takahashi', 'Celso Luiz Maximino', 'Diogo Caldeira', 'Ediceu Beraldi', 'Eduardo Narkevicius', 'Elcio Maehara', 'Eustaquio Lages Duarte', 'Fiscal UD', 'Gauber Albuquerque', 'Gilson Ponce Ayres Filho', 'Helio Lopes de Carvalho Filho', 'Higor da Paz Melo', 'Hugo Santana Lima', 'Humberto Barbosa Vinagre', 'Jamilson Evangelista', 'Joao Yokoyama', 'Joaquim Miranda', 'José Antônio S. Sanches', 'Julio Cesar de Assis Santos', 'Kiyotomo Kawamura', 'Laert Calil Junior', 'Lannei Vilela Moraes', 'Luis Lagomes', 'Luiz Vinicios Mielniczuk Seelig', 'Marcelo Augusto Scacabarozi', 'Marcelo Vaz Netto', 'Marcio Colazingari', 'Marcio Costa', 'Marcio Rodrigues Maciel', 'Marcos Antônio Rodrigues', 'Marcos Juliano Valim da Silva', 'Maria Teresa Flosi Garrafa', 'Mario Augusto Volpini', 'Murilo Amaro', 'Osnir Lopes', 'Paulo Diogo Costa', 'Pedro Arai', 'Renato Sadao Kushioyada', 'Ricardo Santos Marques', 'Ricardo da Silva e Souza', 'Roberto Carlos Soares Campos', 'Roberto Ferreira dos Santos', 'Roberto Takata', 'Rodrigo Barbosa de Paula', 'Rogerio Zambotto', 'Ronaldo da Silva Alves Batista', 'Sergio Pereira', 'Thiago Silva', 'Thomaz Honma Ishida', 'Vinicius Paiva de Oliveira', 'Vitor Zelada', 'Wellington Devechi Piauilino', 'Wladimir Senise']
Validação de Dados e Formatação para submeter à API
A função anterior somente retorna as informações já constantes em dada Inspeção ( Issue ) do Fiscaliza. Para alterarmos ou atualizarmos dada inspeção, precisamos passar um dicionário de dados ou um caminho para um arquivo .json
onde conste esse dicionário de dados serializado. O exemplo seguinte mostra um dicionário de dados com as informações básicas constantes de uma monitoração e a formatação que elas são validadas:
d = {}
d['Classe_da_Inspecao'] = 'Técnica' # str
d['Tipo_de_Inspecao'] = 'Uso do Espectro - Monitoração' #str
d['Descricao_da_Inspecao'] = '''Atendimento da Denúncia AC202010213075425 (6104512),
verificação da Potência e Intensidade de Campo Elétrico da Frequência 105.1MHz e seus harmônicos,
além da checagem de Intermodulação e Espúrios nas frequências 450.3MHz e 750MHz.''' #str
d['Fiscal_Responsavel'] = 'Ronaldo da Silva Alves Batista' #str
d['Fiscais'] = ['Ronaldo da Silva Alves Batista', 'Paulo Diogo Costa', 'Mario Augusto Volpini'] #string ou lista de strings
# Windows
d['Html'] = 'D:\\OneDrive - ANATEL\\Monitoramento\\Processos\\53504.0005432021-55\\Guarulhos.html' #str
#ou
#Unix d['Html'] = '/d/OneDrive - ANATEL/Monitoramento/53504.0005432021-55/Guarulhos.html' #str
d['Gerar_Relatorio'] = 1 # int 0 ou 1
d['Frequencia_Inicial'] = 54 #int ou float
d['Unidade_da_Frequencia_Inicial'] = 'MHz' #string
d['Frequencia_Final'] = 700 #int ou float
d['Unidade_da_Frequencia_Final'] = 'MHz' #string
d['Data_de_Inicio'] = '2021-03-19' #YYYY-MM-DD #string nesse formato
d['Data_Limite'] = '2021-12-31' #YYYY-MM-DD #string nesse formato
d['UF_Municipio'] = "SP/São Paulo" # string ou Lista de Strings: ["SP/São Paulo", "SP/Sorocaba"]
d['Servicos_da_Inspecao'] = ['230', '231', '800'] # String ou Lista de Strings
d['Qnt_de_emissoes_na_faixa'] = 12 # int
d['Emissoes_nao_autorizadas'] = 70 # int
d['Horas_de_Preparacao'] = 2 # int
d['Horas_de_Deslocamento'] = 0 # int
d['Horas_de_Execucao'] = 32 # int
d['Horas_de_Conclusao'] = 6 # int
d['Latitude'] = -22.94694 # float
d['Longitude'] = -43.21944 # float
d['Uso_de_PF'] = 'Não se aplica PF - uso apenas de formulários' # string
d['Acao_de_risco_a_vida_criada'] = 'Não' # string Sim | Não
d['Impossibilidade_acesso_online'] = '0' # string '0' | '1'
d['Reservar_Instrumentos'] = '0' #string '0' = Não | '1' = 'Sim'
d['Utilizou_algum_instrumento'] = '0'
#d['Reserva_de_Instrumentos'] = ''
d['Notes'] = "Não foi constatada irregularidade no Período monitorado" # string
# No caso de uma tabela, string formatada como csv
d['Notes'] = """Faixa, Classe Especial, Classe A, Classe B, Classe C
VHF-L,0,5,7,5
VHF-H,0,12,1,0
UHF,1,1,2,4
FM,5,1,0,0
RADCOM,0,0,0,0
Outorgadas com indícios de irregularidades,1,2,3,4
"""
A API do Redmine possui formatos específicos de como esses campos devem ser submetidos, validar os formatos acima e fazer essa formatação exigida pela API do Redmine é o papel da função validar_dicionario
.
show_doc(validar_dicionario)
validar_dicionario
[source]
> validar_dicionario
(**`data_dict`**:"Dicionário de Dados ou Caminho para o arquivo .json ou .pkl", **`inspecao`**:"Número da Inspeção a ser relatada", **`login`**:"Login Anatel do Usuário"=*`None`*, **`senha`**:"Senha Utilizada nos Sistemas Interativos da Anatel"=*`None`*, **`fiscaliza`**:"Objeto Redmine logado, opcional ao login e senha"=*`None`*, **`teste`**:"Caso verdadeiro o Fiscaliza de Teste ( Homologação ) é utilizado"=*`True`*)
inspecao = '57684'
dados = validar_dicionario(d, inspecao, login, senha)
for k,v in dados.items():
if k == "Html":
v = str(v)
v = v[:100] + '\n...\n' + v[-100:]
console.print(f'[blue]{k} [red]-> [green]{v}')
Classe_da_Inspecao -> {'id': 89, 'value': '{"valor":"Técnica","texto":"Técnica"}'}
Tipo_de_Inspecao -> {'id': 2, 'value': '{"valor":"Uso do Espectro - Monitoração","texto":"Uso do Espectro - Monitoração"}'}
Descricao_da_Inspecao -> {'id': 22, 'value': 'Atendimento da Denúncia AC202010213075425 (6104512), \nverificação da Potência e Intensidade de Campo Elétrico da Frequência 105.1MHz e seus harmônicos, \nalém da checagem de Intermodulação e Espúrios nas frequências 450.3MHz e 750MHz.'}
Fiscal_Responsavel -> {'id': 25, 'value': 'Ronaldo da Silva Alves Batista'}
Fiscais -> {'id': 26, 'value': ['Ronaldo da Silva Alves Batista', 'Paulo Diogo Costa', 'Mario Augusto Volpini']}
Html -> {'id': 537, 'value': '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/ ... nte do exposto, conclui-se este relatório de\n\t\tatividades.\n\t</p>\n\n</body>\n\n</html>'}
Gerar_Relatorio -> {'id': 534, 'value': 1}
Frequencia_Inicial -> {'id': 156, 'value': 54}
Unidade_da_Frequencia_Inicial -> {'id': 157, 'value': 'MHz'}
Frequencia_Final -> {'id': 158, 'value': 700}
Unidade_da_Frequencia_Final -> {'id': 159, 'value': 'MHz'}
Data_de_Inicio -> 2021-03-19
Data_Limite -> 2021-12-31
UF_Municipio -> {'id': 31, 'value': ['{"valor":"SP/São Paulo","texto":"SP/São Paulo"}']}
Servicos_da_Inspecao -> {'id': 57, 'value': ['{"valor":"230 - COLETIVO - RADIODIFUSÃO SONORA EM FREQÜÊNCIA MODULADA","texto":"230 - COLETIVO - RADIODIFUSÃO SONORA EM FREQÜÊNCIA MODULADA"}', '{"valor":"231 - COLETIVO - RADIODIFUSÃO COMUNITÁRIA","texto":"231 - COLETIVO - RADIODIFUSÃO COMUNITÁRIA"}', '{"valor":"800 - COLETIVO - RETRANSMISSAO DE T.V.","texto":"800 - COLETIVO - RETRANSMISSAO DE T.V."}']}
Qnt_de_emissoes_na_faixa -> {'id': 69, 'value': 12}
Emissoes_nao_autorizadas -> {'id': 70, 'value': 70}
Horas_de_Preparacao -> {'id': 91, 'value': 2}
Horas_de_Deslocamento -> {'id': 92, 'value': 0}
Horas_de_Execucao -> {'id': 93, 'value': 32}
Horas_de_Conclusao -> {'id': 94, 'value': 6}
Latitude (coordenadas) -> {'id': 170, 'value': -22.94694}
Longitude (coordenadas) -> {'id': 171, 'value': -43.21944}
Uso_de_PF -> {'id': 151, 'value': 'Não se aplica PF - uso apenas de formulários'}
Acao_de_risco_a_vida_criada -> {'id': 154, 'value': 'Não'}
Impossibilidade_acesso_online -> {'id': 450, 'value': '0'}
Reservar_Instrumentos -> {'id': 658, 'value': '0'}
Utilizou_algum_instrumento -> {'id': 660, 'value': '0'}
Notes -> |_. Faixa |_. Classe Especial |_. Classe A |_. Classe B |_. Classe C | |<. VHF-L |>. 0 |>. 5 |>. 7 |>. 5 | |<. VHF-H |>. 0 |>. 12 |>. 1 |>. 0 | |<. UHF |>. 1 |>. 1 |>. 2 |>. 4 | |<. FM |>. 5 |>. 1 |>. 0 |>. 0 | |<. RADCOM |>. 0 |>. 0 |>. 0 |>. 0 | |<. Outorgadas com indícios de irregularidades |>. 1 |>. 2 |>. 3 |>. 4 |
Relatar Inspeção
A função a seguir é a mais importante do módulo porque ela de fato altera os dados na plataforma Fiscaliza.
show_doc(relatar_inspecao)
relatar_inspecao
[source]
> relatar_inspecao
(**`login`**:"Login Anatel do Usuário", **`senha`**:"Senha Utilizada nos Sistemas Interativos da Anatel", **`inspecao`**:"Número da Inspeção a ser relatada", **`dados`**:"Dicionário com os Dados a serem relatados", **`teste`**:"Indica se o relato será de teste"=*`True`*)
Relata a inspeção `inspecao` com os dados constantes no dicionário `dados`
inspecao = '57684'
relatar_inspecao(login, senha, inspecao, dados=dados, teste=True)
Usuário Autenticado com Sucesso 👍
Inspeção 57684 vinculada à Ação {'id_ACAO': 52876, 'nome_ACAO': 'ACAO_GR01_2021_0491', 'descricao_ACAO': 'Teste'}
Estado Atual: Aguardando Execução ❗
Sucesso ✨
Estado Atual: Em andamento ❗
Sucesso ✨
Assine o Relatorio_de_Monitoramento: {"numero"=>"0190565", "link_acesso"=>"https://seihm.anat el.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1962455&id_document o=1962827"} e chame a função novamente ❗
O dicionário de dados possui os dados completos obrigatórios para o relato, no entanto o relato é feito em algumas etapas, utilizando somente algumas das informações do dicionário:
Rascunho
paraAguardando Execução
Aguardando Execução
paraEm Andamento
Em Andamento
paraRelatando
Relatando
paraRelatada
Na terceira etapa é gerado um relatório da monitoração no Sistema Eletrônico de Informações - SEI. Para executar a quarta etapa é preciso que esse relatório da terceira etapa esteja assinado. Por essa razão a função para na terceira etapa e informa da necessidade do relatório estar assinado.
Após o relatório ser assinado basta chamar a função com os mesmos argumentos para que a etapa final seja realizada.
estado = relatar_inspecao(login, senha, inspecao, dados=dados, teste=True)
Usuário Autenticado com Sucesso 👍
Inspeção 57684 vinculada à Ação {'id_ACAO': 52876, 'nome_ACAO': 'ACAO_GR01_2021_0491', 'descricao_ACAO': 'Teste'}
Sucesso ✨
Estado Atual: Relatada ❗
Inspeção Relatada 😎
{ 'id': '57684', 'subject': 'INSP_GR01_2021_0504', 'status': 'Relatada', 'priority': 'Normal', 'start_date': '2021-03-19', 'due_date': '2021-12-31', 'Classe_da_Inspecao': 'Técnica', 'Tipo_de_Inspecao': 'Uso do Espectro - Monitoração', 'Ano': '2021', 'Numero_Sei_do_Processo': '{"numero"=>"53504.000007/2021-50", "link_acesso"=>"https://sei hm.anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1962455"}', 'Descricao_da_Inspecao': 'Atendimento da Denúncia AC202010213075425 (6104512), \nverificação da Potência e Intensidade de Campo Elétrico da Frequência 105.1MHz e seus harmônicos, \nalém da checagem de Intermodulação e Espúrios nas frequências 450.3MHz e 750MHz.', 'Fiscal_Responsavel': 'Ronaldo da Silva Alves Batista', 'Fiscais': [ 'Ronaldo da Silva Alves Batista', 'Paulo Diogo Costa', 'Mario Augusto Volpini' ], 'Entidade_da_Inspecao': [], 'UF_Municipio': ['SP/São Paulo'], 'Servicos_da_Inspecao': [ '800 - COLETIVO - RETRANSMISSAO DE T.V.', '231 - COLETIVO - RADIODIFUSÃO COMUNITÁRIA', '230 - COLETIVO - RADIODIFUSÃO SONORA EM FREQÜÊNCIA MODULADA' ], 'Qnt_de_emissoes_na_faixa': '12', 'Emissoes_nao_autorizadas': '70', 'Horas_de_Preparacao': '2', 'Horas_de_Deslocamento': '0', 'Horas_de_Execucao': '32', 'Horas_de_Conclusao': '6', 'SAV': '', 'PCDP': '', 'Procedimentos': [], 'Latitude': '-22.94694', 'Longitude': '-43.21944', 'Uso_de_PF': 'Não se aplica PF - uso apenas de formulários', 'Acao_de_risco_a_vida_criada': 'Não', 'Frequencia_Inicial': '54', 'Unidade_da_Frequencia_Inicial': 'MHz', 'Frequencia_Final': '700', 'Unidade_da_Frequencia_Final': 'MHz', 'Agrupamento': '', 'AppFiscaliza': '0', 'Relatorio_de_Monitoramento': '{"numero"=>"0190565", "link_acesso"=>"https://seihm.anatel .gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1962455&id_documento= 1962827"}', 'Reservar_Instrumentos': '0', 'Utilizou_algum_instrumento': '0', 'id_ACAO': 52876, 'nome_ACAO': 'ACAO_GR01_2021_0491', 'descricao_ACAO': 'Teste', 'Users': [ 'Alexandre Elias de Andrade Oliveira', 'Alexandre Freitas de Lima', 'Alexandre Inacio', 'Alexandre Junzo Hamada', 'Alfredo de Andrade Filho', 'Ananias Pereira', 'Antonio Carlos Cardoso de Mello', 'Aparecido Sebastiao da Silva', 'Arthur Pisaruk', 'Carlos Augusto de Carvalho', 'Carlos Eduardo Guimaraes Silveira', 'Carlos da Paixao Filho', 'Celio Yukio Takahashi', 'Celso Luiz Maximino', 'Diogo Caldeira', 'Ediceu Beraldi', 'Eduardo Narkevicius', 'Elcio Maehara', 'Eustaquio Lages Duarte', 'Fiscal UD', 'Gauber Albuquerque', 'Gilson Ponce Ayres Filho', 'Helio Lopes de Carvalho Filho', 'Higor Paz Melo', 'Hugo Santana Lima', 'Humberto Barbosa Vinagre', 'Jamilson Evangelista', 'Joao Yokoyama', 'Joaquim Miranda', 'José Antônio S. Sanches', 'Julio Cesar de Assis Santos', 'Kiyotomo Kawamura', 'Laert Calil Junior', 'Lannei Vilela Moraes', 'Luis Lagomes', 'Luiz Vinicios Mielniczuk Seelig', 'Marcelo Augusto Scacabarozi', 'Marcio Costa', 'Marcio Rodrigues Maciel', 'Marcos Antônio Rodrigues', 'Marcos Juliano Valim da Silva', 'Maria Teresa Flosi Garrafa', 'Mario Augusto Volpini', 'Murilo Amaro', 'Osnir Lopes', 'Paulo Diogo Costa', 'Pedro Arai', 'Renato Sadao Kushioyada', 'Ricardo Santos Marques', 'Ricardo da Silva e Souza', 'Roberto Carlos Soares Campos', 'Roberto Ferreira dos Santos', 'Roberto Takata', 'Rodrigo Barbosa de Paula', 'Rogerio Zambotto', 'Ronaldo da Silva Alves Batista', 'Sergio Pereira', 'Thiago Silva', 'Thomaz Honma Ishida', 'Vinicius Paiva de Oliveira', 'Vitor Zelada', 'Wellington Devechi Piauilino', 'Wladimir Senise', 'marcio colazingari' ] }
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for fiscaliza-0.0.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ea7b2bafc1ea295f49e0f3b241a2100c71cf8bd8ddf8553ad7e8eae62b3c658 |
|
MD5 | 14fc035d96585238cfab854992c30408 |
|
BLAKE2b-256 | e492201cbb32be9f8a284799dbda8a16cb30defc36b48d3ac3fdf38e0d834bc3 |