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 issues ( Ação, Inspeção, Reserva de Instrumentos etc..) 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`**:"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`**:"Indica se o relato será de teste"=*`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 57824
login = getuser()
senha = getpass()
··········
inspecao = '57824'
detalhes = detalhar_inspecao(inspecao, login, senha)
console.print(detalhes)
{ 'id': '57824', 'subject': 'INSP_GR01_2021_0518', '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://sei hm.anatel.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' ], 'Modificado': 'Atualizado por Ronaldo da Silva Alves Batista em 2021-05-25 às 18:16:42' }
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
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['start_date'] = '2021-03-19' #YYYY-MM-DD #string nesse formato
d['due_date'] = '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['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", **`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`*, **`save_path`**:"Caminho para salvar o dicionário formatado"=*`None`*)
Valida as informações de data_dict e as formata como exigido pela API do Redmine.
Opcionalmente salva o dicionário serializado como .json caso seja passado um `save_path` válido
Returns: dicionário com os dados formatados
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': 887}
Fiscais -> {'id': 26, 'value': [887, 607, 165]}
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'}
start_date -> 2021-03-19
due_date -> 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 -> {'id': 170, 'value': -22.94694}
Longitude -> {'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
(**`inspecao`**:"Número da Inspeção a ser relatada", **`login`**:"Login Anatel do Usuário", **`senha`**:"Senha Utilizada nos Sistemas Interativos da Anatel", **`dados`**:"Dicionário já validado 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`
relatar_inspecao(login, senha, inspecao, dados=dados, teste=True)
Usuário Autenticado com Sucesso 👍
Inspeção 57824 vinculada à Ação {'id_ACAO': 52876, 'nome_ACAO': 'ACAO_GR01_2021_0491', 'descricao_ACAO': 'Teste'}
Estado Atual: Rascunho ❗
Sucesso ✨
Estado Atual: Aguardando Execução ❗
Sucesso ✨
Estado Atual: Em andamento ❗
Sucesso ✨
Estado Atual: Relatando ❗
✒ Assine o Relatorio_de_Monitoramento: {"numero"=>"0190660", "link_acesso"=>"https://seihm.an atel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1962455&id_docume nto=1962947"} e chame a função novamente ❗
{'id': '57824',
'subject': 'INSP_GR01_2021_0518',
'status': 'Relatando',
'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://seihm.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"=>"0190660", "link_acesso"=>"https://seihm.anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1962455&id_documento=1962947"}',
'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'],
'Modificado': 'Atualizado por Ronaldo da Silva Alves Batista em 2021-05-25 às 19:01:49'}
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 57824 vinculada à Ação {'id_ACAO': 52876, 'nome_ACAO': 'ACAO_GR01_2021_0491', 'descricao_ACAO': 'Teste'}
Estado Atual: Relatando ❗
Sucesso ✨
Estado Atual: Relatada ❗
Inspeção Relatada 😎
Os mesmos passos acima podem ser efetuados no Fiscaliza de produção, bastando passar o argumento teste=False
nas funções acima
inspecao = '51849'
detalhes = detalhar_inspecao(inspecao, login, senha, teste=False)
console.print(detalhes)
{ 'id': '51849', 'subject': 'INSP_GR01_2021_0456', 'status': 'Rascunho', 'priority': 'Normal', 'start_date': '2021-03-09', 'due_date': '2021-06-30', 'Classe_da_Inspecao': 'Técnica', 'Tipo_de_Inspecao': 'Uso do Espectro - Monitoração', 'Ano': '2021', 'Coordenacao': 'FI3', 'Numero_Sei_do_Processo': '{"numero"=>"53504.001879/2021-35", "link_acesso"=>"https://sei .anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=7542104"}', 'Descricao_da_Inspecao': '[PMEC 2021] GR01. Etapa 1.', 'Fiscal_Responsavel': 'Arthur Pisaruk', 'Fiscais': [], 'Entidade_da_Inspecao': [], 'UF_Municipio': ['SP/São Paulo'], 'Servicos_da_Inspecao': [], 'Qnt_de_emissoes_na_faixa': '', 'Emissoes_nao_autorizadas': '', 'Horas_de_Preparacao': '', 'Horas_de_Deslocamento': '', 'Horas_de_Execucao': '', 'Horas_de_Conclusao': '', 'SAV': '', 'PCDP': '', 'Procedimentos': [], 'Latitude': '', 'Longitude': '', 'Uso_de_PF': '', 'Acao_de_risco_a_vida_criada': '', 'Frequencia_Inicial': '12.29', 'Unidade_da_Frequencia_Inicial': 'MHz', 'Frequencia_Final': '5460', 'Unidade_da_Frequencia_Final': 'MHz', 'Agrupamento': '[PMEC 2021] GR01. Etapa 1.', 'AppFiscaliza': '0', 'Reservar_Instrumentos': '', 'Utilizou_algum_instrumento': '', 'id_ACAO': 47823, 'nome_ACAO': 'ACAO_GR01_2021_0338', 'descricao_ACAO': '[PMEC 2021] Monitorar canais e faixas de frequências relacionados às aplicações críticas (como, por exemplo, radionavegação e radiocomunicação aeronáutica e canais de emergência) na forma a ser estabelecida no Plano de Ação de Fiscalização GR08FI2 (SEI nº 6383328).', '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' ], 'Modificado': 'Atualizado por Ronaldo da Silva Alves Batista em 2021-05-24 às 13:12:32' }
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.25-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 83fe31002a0089285f518950cbaea42de0514dbbf5b4d4609af3f3e527dde0f3 |
|
MD5 | 66cc5e6371fb058beb7c3e609eb06501 |
|
BLAKE2b-256 | 86d5e718190e994b1561bab9fb6c1542b4fbbd35da3ca48844ae43530bb1d6d9 |