Skip to main content

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

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:

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 {% include note.html content='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. ' %}
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 Inspeção -> 
Tipo de inspeção -> 
Ano -> 2021
Número 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"}
Descrição da Inspeção -> 
Fiscal Responsável -> 
Fiscais -> []
Entidade da Inspeção -> []
UF/Município -> []
Serviços da Inspeção -> []
Horas de Preparação -> 
Horas de Deslocamento -> 
Horas de Execução -> 
Horas de Conclusão -> 
SAV -> 
PCDP -> 
Procedimentos -> []
Agrupamento -> 
AppFiscaliza -> 0
id_ACAO -> 52876
nome_ACAO -> ACAO_GR01_2021_0491
descrição_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 Inspeção -> Técnica
Tipo de inspeção -> Uso do Espectro - Monitoração
Ano -> 2021
178 -> 
Número 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"}
Descrição da Inspeção -> 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 Responsável -> Ronaldo da Silva Alves Batista
Fiscais -> ['Ronaldo da Silva Alves Batista']
Entidade da Inspeção -> ['{"valor":"30913990000110","texto":"SISTEMA TRANSRIO DE COMUNICACAO 
LTDA  (30913990000110)"}']
UF/Município -> ['RJ/Rio de Janeiro']
Serviços da Inspeção -> ['230 - COLETIVO - RADIODIFUSÃO SONORA EM FREQÜÊNCIA MODULADA']
Qnt. de emissões na faixa -> 1
Emissões não autorizadas/desc -> 0
Horas de Preparação -> 2
Horas de Deslocamento -> 0
Horas de Execução -> 32
Horas de Conclusão -> 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
Ação de risco à vida criada? -> Não
Frequência Inicial -> 105.1
Unidade da Frequência Inicial -> MHz
Frequência Final -> 750
Unidade da Frequência Final -> MHz
Agrupamento -> 
AppFiscaliza -> 0
596 -> 
598 -> 
id_ACAO -> 51803
nome_ACAO -> ACAO_GR01_2021_0456
descrição_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']

Dicionário de Dados

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 ou pickle .pkl 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 Inspeção'] = 'Técnica' # str

d['Tipo de inspeção'] = 'Uso do Espectro - Monitoração' #str

d['Descrição da Inspeção'] = '''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 Responsável'] = '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 Relatório'] = 1 # int 0 ou 1

d['Frequência Inicial']  = 54 #int ou float

d['Unidade da Frequência Inicial'] = 'MHz' #string

d['Frequência Final'] = 700 #int ou float

d['Unidade da Frequência Final'] = 'MHz' #string

d['Data de Início'] = '2021-03-19' #YYYY-MM-DD #string nesse formato

d['Data Limite'] = '2021-12-31'  #YYYY-MM-DD #string nesse formato

d['UF/Município'] = "SP/São Paulo" # string ou Lista de Strings: ["SP/São Paulo", "SP/Sorocaba"]

d['Serviços da Inspeção'] = ['230', '231', '800'] # String ou Lista de Strings

d['Qnt. de emissões na faixa'] = 12 # int

d['Emissões não autorizadas/desc'] = 70 # int

d['Horas de Preparação'] = 2 # int

d['Horas de Deslocamento'] = 0 # int

d['Horas de Execução'] = 32 # int

d['Horas de Conclusão'] = 6 # int

d['Latitude (coordenadas)'] = -22.94694 # float

d['Longitude (coordenadas)'] = -43.21944 # float

d['Uso de PF'] = 'Não se aplica PF - uso apenas de formulários' # string

d['Ação de risco à 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 Inspeção -> {'id': 89, 'value': '{"valor":"Técnica","texto":"Técnica"}'}
Tipo de inspeção -> {'id': 2, 'value': '{"valor":"Uso do Espectro - Monitoração","texto":"Uso
do Espectro - Monitoração"}'}
Descrição da Inspeção -> {'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 Responsável -> {'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&oacute;rio 
de\n\t\tatividades.\n\t</p>\n\n</body>\n\n</html>'}
Gerar Relatório -> {'id': 534, 'value': 1}
Frequência Inicial -> {'id': 156, 'value': 54}
Unidade da Frequência Inicial -> {'id': 157, 'value': 'MHz'}
Frequência Final -> {'id': 158, 'value': 700}
Unidade da Frequência Final -> {'id': 159, 'value': 'MHz'}
Data de Início -> 2021-03-19
Data Limite -> 2021-12-31
UF/Município -> {'id': 31, 'value': ['{"valor":"SP/São Paulo","texto":"SP/São Paulo"}']}
Serviços da Inspeção -> {'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 emissões na faixa -> {'id': 69, 'value': 12}
Emissões não autorizadas/desc -> {'id': 70, 'value': 70}
Horas de Preparação -> {'id': 91, 'value': 2}
Horas de Deslocamento -> {'id': 92, 'value': 0}
Horas de Execução -> {'id': 93, 'value': 32}
Horas de Conclusão -> {'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'}
Ação de risco à 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', 
'descrição_ACAO': 'Teste'}
Estado Atual: Aguardando Execução ❗

Sucesso ✨

Estado Atual: Em andamento ❗

Sucesso ✨


Assine o Relatório 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 para Aguardando Execução
  • Aguardando Execução para Em Andamento
  • Em Andamento para Relatando
  • Relatando para Relatada

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', 
'descrição_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 Inspeção': 'Técnica',
    'Tipo de inspeção': 'Uso do Espectro - Monitoração',
    'Ano': '2021',
    'Número 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"}',
    'Descrição da Inspeção': '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 Responsável': 'Ronaldo da Silva Alves Batista',
    'Fiscais': [
        'Ronaldo da Silva Alves Batista',
        'Paulo Diogo Costa',
        'Mario Augusto Volpini'
    ],
    'Entidade da Inspeção': [],
    'UF/Município': ['SP/São Paulo'],
    'Serviços da Inspeção': [
        '800 - COLETIVO - RETRANSMISSAO DE T.V.',
        '231 - COLETIVO - RADIODIFUSÃO COMUNITÁRIA',
        '230 - COLETIVO - RADIODIFUSÃO SONORA EM FREQÜÊNCIA MODULADA'
    ],
    'Qnt. de emissões na faixa': '12',
    'Emissões não autorizadas/desc': '70',
    'Horas de Preparação': '2',
    'Horas de Deslocamento': '0',
    'Horas de Execução': '32',
    'Horas de Conclusão': '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',
    'Ação de risco à vida criada?': 'Não',
    'Frequência Inicial': '54',
    'Unidade da Frequência Inicial': 'MHz',
    'Frequência Final': '700',
    'Unidade da Frequência Final': 'MHz',
    'Agrupamento': '',
    'AppFiscaliza': '0',
    'Relatório 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',
    'descrição_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fiscaliza-0.0.5.tar.gz (48.6 kB view hashes)

Uploaded Source

Built Distribution

fiscaliza-0.0.5-py3-none-any.whl (26.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page