Metadata-Version: 2.3
Name: fiscaliza
Version: 1.0.1
Summary: Implementação de API python a instância do Redmine da Anatel: Fiscaliza
Author-email: "Ronaldo S.A. Batista" <ronaldokun@gmail.com>
License-File: LICENSE
Requires-Python: <3.12,>=3.11
Requires-Dist: certifi==2024.6.2
Requires-Dist: fastcore>=1.5.46
Requires-Dist: python-dotenv>=1.0.1
Requires-Dist: python-redmine==2.4.0
Requires-Dist: unidecode>=1.3.8
Requires-Dist: urllib3==2.2.2
Description-Content-Type: text/markdown

# API para relato no Fiscaliza da Anatel


<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

``` python
import os
import random
from random import randint
from dotenv import load_dotenv
from fiscaliza.main import Fiscaliza
from fiscaliza.constants import MUNICIPIOS, SERVICOS
from fiscaliza.attrs import FIELDS
load_dotenv(override=True)
```

    True

## Autenticação e Conexão com o servidor do Redmine

A classe `Fiscaliza` é somente para efetuar a conexão e autenticação com
o servidor do Redmine.

``` python
issue_id = "124182"
fiscaliza = Fiscaliza(os.environ["USERNAME"], os.environ["PASSWORD"], teste=True)
issue = fiscaliza.get_issue(issue_id)
```

## Conexão com dada inspeção

O método `get_issue` instancia e retorna um objeto do tipo `Issue`, este
que encapsula a funcionalidade principal de resgate de informações,
validação e formatação de informações e atualização de inspeção. O mesmo
objeto pode ser instanciado diretamente passando o `client` do objeto
`Fiscaliza` após autenticado e o `id` da inspeção.

    issue = Issue(fiscaliza.client, issue_id)

## Informações da Inspeção

Todas as informações principais da Inspeção estão disponíveis através do
atributo `attrs`

``` python
issue.attrs
```

    {'acao': {'type': 'acao_de_inspecao',
      'status': 'Em andamento',
      'name': 'ACAO_GR08_2024_0014',
      'description': '[PMEC 2024 Etapa 2] 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.\r\n'},
     'agrupamento': '',
     'allowed_statuses': '',
     'anexos': ['https://sistemasnethm/fiscaliza/attachments/download/9190/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9191/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9192/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9196/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9197/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9202/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9207/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9208/Info.json'],
     'ano_de_execucao': '2024',
     'app_fiscaliza': '0',
     'area_do_pacp': '4-Aduana',
     'assigned_to': 'Eric Magalhães Delgado',
     'atualizacao': 'Atualizada por Ronaldo da Silva Alves Batista em 27/07/2024 às 23:37:59',
     'author': 'Eric Magalhães Delgado',
     'changesets': '',
     'children': '',
     'classe_da_inspecao': 'Técnica',
     'closed_on': '',
     'cnpjcpf_da_entidade': '27865757000102',
     'coordenacao_responsavel': 'FI2',
     'created_on': '2024-04-18T12:38:03Z',
     'dadospacp': '',
     'data_de_inicio_efetivo': '2024-07-25',
     'description': '[PMEC 2024 Etapa 2] 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.\r\n',
     'documento_instaurador_do_pado': '0201235\n0201239\n0201237',
     'done_ratio': 0,
     'due_date': '2024-05-30',
     'endereco_da_inspecao': 'Rua Machado de Assis, 27 - Morro Grande, Rio de Janeiro - RJ',
     'entidade_com_cadastro_stel': 'Não',
     'estimated_hours': '',
     'horas_de_conclusao': '6',
     'horas_de_deslocamento': '2',
     'horas_de_execucao': '38',
     'horas_de_preparacao': '3',
     'houve_obice': '1',
     'id': 124182,
     'identificada_a_origem': '1',
     'irregularidade': [],
     'is_private': False,
     'latitude_coordenadas': '-16.0',
     'longitude_coordenadas': '-45.0',
     'no_fiscaliza_issue': {'numero': '124182',
      'link_acesso': 'https://sistemasnethm/fiscaliza/issues/124182'},
     'no_pcdp': '',
     'no_sav': 'Teste de Quebra\n de linha',
     'no_sei_do_oficio_ao_mctic': '',
     'no_sei_processo_fiscalizacao': "{'numero': '53554.000005/2024-18', 'link_acesso': 'https://seihm.anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1982134'}",
     'no_sei_relatorio_de_atividades': "{'numero': '0207709', 'link_acesso': 'https://seihm.anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1982134&id_documento=1984091'}",
     'nome_da_entidade': 'Globo S/A',
     'observacao_tecnica_amostral': 'Simulação com o HTZ',
     'precisa_reservar_instrumentos': '0',
     'priority': 'Normal',
     'procedimentos': ['Monitorado alterado', 'Não Lacrado - Impedimento'],
     'project': 'GR08',
     'qnt_produt_lacradosapreend': '0',
     'sanada_ou_mitigada': '',
     'servicos_da_inspecao': ['000 - Não Aplicável',
      '167 - COLETIVO - ESPECIAL DE TELEVISAO POR ASSINATURA'],
     'situacao_constatada': 'Irregular',
     'spent_hours': 0.0,
     'start_date': '2024-03-01',
     'status': 'Relatando',
     'subject': 'INSP_GR08_2024_0147',
     'subtema': ['Radiomonitoração Terrestre'],
     'tema': ['Uso do Espectro'],
     'time_entries': '',
     'tipo_de_inspecao': 'Certificação',
     'total_de_horas': '49.0',
     'total_estimated_hours': '',
     'total_spent_hours': 0.0,
     'tracker': 'Atividade de Inspeção',
     'ufmunicipio': ['PR/Pérola', 'PR/Santa Fé'],
     'updated_on': '2024-07-28T02:37:59Z',
     'utilizou_algum_instrumento': '0',
     'utilizou_tecnicas_amostrais': 'Não usou técnicas amostrais',
     'watchers': ''}

O atributo acima retorna um dicionário com atributos atuais da Inspeção
no Fiscaliza. Existem campos editáveis através da API ou da interface
Web e outros meramente informativos, além de alguns campos presentes no
`Redmine` mas sem uso na instância Fiscaliza da Anatel. Um exemplo
desses é o atributo `children`, sempre vazio.

## Campos editáveis

Os dados que são editáveis, tanto pela API quanto pela interface web
aparecem em `minúsculo` no dicionário. Para estes dados temos um outro
método mais informativo:

``` python
issue.editable_fields
```

    {'agrupamento': (value: ),
     'area_do_pacp': (value: 4-Aduana), <options>,
     'cnpjcpf_da_entidade': (value: 27865757000102),
     'coordenacao_responsavel': (value: FI2), <options>,
     'description': (value: [PMEC 2024 Etapa 2] 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.
     ) | <mandatory>,
     'documento_instaurador_do_pado': (value: 0201235
     0201239
     0201237),
     'due_date': (value: 2024-05-30) | <mandatory>,
     'endereco_da_inspecao': (value: Rua Machado de Assis, 27 - Morro Grande, Rio de Janeiro - RJ) | <mandatory>,
     'entidade_com_cadastro_stel': (value: Não) | <mandatory>, <options>, conditional,
     'fiscais': (value: ['Eric Magalhães Delgado', 'Ronaldo da Silva Alves Batista']) | <mandatory>, <multiple>, <options>,
     'fiscal_responsavel': (value: Eric Magalhães Delgado) | <mandatory>, <options>,
     'horas_de_conclusao': (value: 6) | <mandatory>,
     'horas_de_deslocamento': (value: 2) | <mandatory>,
     'horas_de_execucao': (value: 38) | <mandatory>,
     'horas_de_preparacao': (value: 3) | <mandatory>,
     'houve_obice': (value: 1) | <mandatory>, <options>,
     'identificada_a_origem': (value: 1) | <mandatory>, <options>, conditional,
     'irregularidade': (value: []), <multiple>, <options>,
     'latitude_coordenadas': (value: -16.0) | <mandatory>,
     'longitude_coordenadas': (value: -45.0) | <mandatory>,
     'no_pcdp': (value: ),
     'no_sav': (value: Teste de Quebra
      de linha),
     'no_sei_do_oficio_ao_mctic': (value: ),
     'no_sei_processo_fiscalizacao': (value: {'numero': '53554.000005/2024-18', 'link_acesso': 'https://seihm.anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1982134'}),
     'no_sei_relatorio_de_atividades': (value: {'numero': '0207709', 'link_acesso': 'https://seihm.anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1982134&id_documento=1984091'}),
     'nome_da_entidade': (value: Globo S/A) | <mandatory>,
     'observacao_tecnica_amostral': (value: Simulação com o HTZ) | <mandatory>,
     'precisa_reservar_instrumentos': (value: 0) | <mandatory>, <options>, conditional,
     'procedimentos': (value: ['Monitorado alterado', 'Não Lacrado - Impedimento']) | <mandatory>, <multiple>, <options>, conditional,
     'qnt_produt_lacradosapreend': (value: 0) | <mandatory>,
     'sanada_ou_mitigada': (value: ) | <mandatory>, <options>,
     'servicos_da_inspecao': (value: ['000 - Não Aplicável', '167 - COLETIVO - ESPECIAL DE TELEVISAO POR ASSINATURA']) | <mandatory>, <multiple>, <options>,
     'situacao_constatada': (value: Irregular) | <mandatory>, <options>,
     'start_date': (value: 2024-03-01) | <mandatory>,
     'status': (value: Relatando),
     'tipo_de_inspecao': (value: Certificação) | <mandatory>, <options>, conditional,
     'ufmunicipio': (value: ['PR/Pérola', 'PR/Santa Fé']) | <mandatory>, <multiple>, <options>,
     'utilizou_tecnicas_amostrais': (value: Não usou técnicas amostrais) | <mandatory>, <options>}

Nesse caso as chaves são os nomes dos campos e os valores são os objetos
que modelam o campo. Ao mostrar ou imprimir o dicionário, como mostrado
acima, é impresso o valor atual do campo entre parênteses.

    'tipo_de_inspecao': (value: Uso do Espectro - Não Outorgado) | <mandatory>, <options>, conditional

Separado pela barra vertical são mostrados alguns atributos do campo:

- `<mandatory>` Atributo booleano indicando se o campo é obrigatório;
- `<multiple>` Atributo booleano. `False`: Campo de valor único. `True`
  Campo aceita mais de um valor e por conseguinte deve ser fornecido uma
  lista em vez de um valor atômico ( `int`, `float`, `str` );
- `<options>` Atributo do tipo lista. Quando presente sinaliza que o
  campo é restrito e só aceita valores pré-definidos;
- `conditional` Esse não é um atributo, somente um sinalizador indicando
  que o campo é condicional e para dado valor preenchido neste campo,
  ficam disponíveis outros campos, estes podem ser obrigatórios e
  inclusive condicionais.

O valor em si do campo é guardado no atributo `value`, acessado através
da notação de ponto

``` python
issue.editable_fields['tipo_de_inspecao'].value
```

    'Certificação'

### Campos Obrigatórios e Condicionais

Os dois métodos a seguir filtram, dentre os campos editáveis, os campos
obrigatório e condicionais:

``` python
issue.mandatory_fields()
```

    {'description': (value: [PMEC 2024 Etapa 2] 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.
     ) | <mandatory>,
     'due_date': (value: 2024-05-30) | <mandatory>,
     'endereco_da_inspecao': (value: Rua Machado de Assis, 27 - Morro Grande, Rio de Janeiro - RJ) | <mandatory>,
     'entidade_com_cadastro_stel': (value: Não) | <mandatory>, <options>, conditional,
     'fiscais': (value: ['Eric Magalhães Delgado', 'Ronaldo da Silva Alves Batista']) | <mandatory>, <multiple>, <options>,
     'fiscal_responsavel': (value: Eric Magalhães Delgado) | <mandatory>, <options>,
     'horas_de_conclusao': (value: 6) | <mandatory>,
     'horas_de_deslocamento': (value: 2) | <mandatory>,
     'horas_de_execucao': (value: 38) | <mandatory>,
     'horas_de_preparacao': (value: 3) | <mandatory>,
     'houve_obice': (value: 1) | <mandatory>, <options>,
     'identificada_a_origem': (value: 1) | <mandatory>, <options>, conditional,
     'latitude_coordenadas': (value: -16.0) | <mandatory>,
     'longitude_coordenadas': (value: -45.0) | <mandatory>,
     'nome_da_entidade': (value: Globo S/A) | <mandatory>,
     'observacao_tecnica_amostral': (value: Simulação com o HTZ) | <mandatory>,
     'precisa_reservar_instrumentos': (value: 0) | <mandatory>, <options>, conditional,
     'procedimentos': (value: ['Monitorado alterado', 'Não Lacrado - Impedimento']) | <mandatory>, <multiple>, <options>, conditional,
     'qnt_produt_lacradosapreend': (value: 0) | <mandatory>,
     'sanada_ou_mitigada': (value: ) | <mandatory>, <options>,
     'servicos_da_inspecao': (value: ['000 - Não Aplicável', '167 - COLETIVO - ESPECIAL DE TELEVISAO POR ASSINATURA']) | <mandatory>, <multiple>, <options>,
     'situacao_constatada': (value: Irregular) | <mandatory>, <options>,
     'start_date': (value: 2024-03-01) | <mandatory>,
     'tipo_de_inspecao': (value: Certificação) | <mandatory>, <options>, conditional,
     'ufmunicipio': (value: ['PR/Pérola', 'PR/Santa Fé']) | <mandatory>, <multiple>, <options>,
     'utilizou_tecnicas_amostrais': (value: Não usou técnicas amostrais) | <mandatory>, <options>}

``` python
issue.conditional_fields()
```

    {'entidade_com_cadastro_stel': (value: Não) | <mandatory>, <options>, conditional,
     'identificada_a_origem': (value: 1) | <mandatory>, <options>, conditional,
     'precisa_reservar_instrumentos': (value: 0) | <mandatory>, <options>, conditional,
     'procedimentos': (value: ['Monitorado alterado', 'Não Lacrado - Impedimento']) | <mandatory>, <multiple>, <options>, conditional,
     'tipo_de_inspecao': (value: Certificação) | <mandatory>, <options>, conditional}

> O conjunto de valores para os campos com opções pré-definidas estão
> relacionados no atributo `.options`

``` python
issue.editable_fields['tipo_de_inspecao'].options
```

    ['',
     'Bloqueio Administrativo',
     'Certificação',
     'Medição de CEMRF (RNI)',
     'Outorga - Aspectos não Técnicos',
     'Outorga - Aspectos Técnicos',
     'Uso do Espectro - Interferência',
     'Uso do Espectro - Monitoração',
     'Uso do Espectro - Não Outorgado']

``` python
issue.editable_fields['procedimentos'].options
```

    ['Nenhum',
     'Lacração',
     'Apreensão',
     'Interrupção',
     'Não Cadastrado',
     'Notificado',
     'A Notificar',
     'Liberação/Desinterrupção',
     'Orientação ao Usuário',
     'Comunicado',
     'Deslacrado',
     'Vistoriado',
     'Emissão Termo Violação de Lacre',
     'Apoio a busca e apreensão',
     'Investigação/Pesquisa',
     'Não Lacrado - Impedimento',
     'Não Lacrado - Amparo Judicial',
     'Não Lacrado - Responsável Ausente',
     'Não Lacrado - Local Fechado',
     'Constatação Violação Lacre/Relacrado',
     'Constatação Violação Lacre/Impedimento',
     'Notícia Crime',
     'Monitorado alterado',
     'Constatação Encerramento - Informe',
     'Levantamento de Dados',
     'Análise/coleta de Dados',
     'Monitorado',
     'Não Lacrado - Desativado',
     'Devolução de Produto(s)',
     'Outros']

## Atualizando os campos editáveis da Inspeção

Dada a existência de campos condicionais, para obtermos todos os campos
editáveis para dado tipo de inspeção, é preciso fornecer um dicionário
de dados para que os campos sejam atualizados de acordo com os valores
fornecidos para os campos condicionais.

``` python
dados = {
    "tipo_de_inspecao": "Certificação",
    "precisa_reservar_instrumentos": "0",
    "utilizou_algum_instrumento": "0",
    "procedimentos": "Lacração",
}
```

A atualização dos campos é feita passando o dicionário para o método
`update_fields`.

``` python
issue.update_fields(dados)
```

Depois de atualizado os campos com o método acima, checamos novamente o
atributo `editable_fields`

``` python
issue.editable_fields
```

    {'agrupamento': (value: ),
     'area_do_pacp': (value: 4-Aduana), <options>,
     'cnpjcpf_da_entidade': (value: 27865757000102),
     'coordenacao_responsavel': (value: FI2), <options>,
     'description': (value: [PMEC 2024 Etapa 2] 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.
     ) | <mandatory>,
     'documento_instaurador_do_pado': (value: 0201235
     0201239
     0201237),
     'due_date': (value: 2024-05-30) | <mandatory>,
     'endereco_da_inspecao': (value: Rua Machado de Assis, 27 - Morro Grande, Rio de Janeiro - RJ) | <mandatory>,
     'entidade_com_cadastro_stel': (value: Não) | <mandatory>, <options>, conditional,
     'fiscais': (value: ['Eric Magalhães Delgado', 'Ronaldo da Silva Alves Batista']) | <mandatory>, <multiple>, <options>,
     'fiscal_responsavel': (value: Eric Magalhães Delgado) | <mandatory>, <options>,
     'horas_de_conclusao': (value: 6) | <mandatory>,
     'horas_de_deslocamento': (value: 2) | <mandatory>,
     'horas_de_execucao': (value: 38) | <mandatory>,
     'horas_de_preparacao': (value: 3) | <mandatory>,
     'houve_obice': (value: 1) | <mandatory>, <options>,
     'identificada_a_origem': (value: 1) | <mandatory>, <options>, conditional,
     'irregularidade': (value: []), <multiple>, <options>,
     'latitude_coordenadas': (value: -16.0) | <mandatory>,
     'longitude_coordenadas': (value: -45.0) | <mandatory>,
     'no_pcdp': (value: ),
     'no_sav': (value: Teste de Quebra
      de linha),
     'no_sei_do_oficio_ao_mctic': (value: ),
     'no_sei_processo_fiscalizacao': (value: {'numero': '53554.000005/2024-18', 'link_acesso': 'https://seihm.anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1982134'}),
     'no_sei_relatorio_de_atividades': (value: {'numero': '0207709', 'link_acesso': 'https://seihm.anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1982134&id_documento=1984091'}),
     'nome_da_entidade': (value: Globo S/A) | <mandatory>,
     'observacao_tecnica_amostral': (value: Simulação com o HTZ) | <mandatory>,
     'precisa_reservar_instrumentos': (value: 0) | <mandatory>, <options>, conditional,
     'procedimentos': (value: ['Lacração']) | <mandatory>, <multiple>, <options>, conditional,
     'qnt_produt_lacradosapreend': (value: 0) | <mandatory>,
     'sanada_ou_mitigada': (value: ) | <mandatory>, <options>,
     'servicos_da_inspecao': (value: ['000 - Não Aplicável', '167 - COLETIVO - ESPECIAL DE TELEVISAO POR ASSINATURA']) | <mandatory>, <multiple>, <options>,
     'situacao_constatada': (value: Irregular) | <mandatory>, <options>,
     'start_date': (value: 2024-03-01) | <mandatory>,
     'status': (value: Relatando),
     'tipo_de_inspecao': (value: Certificação) | <mandatory>, <options>, conditional,
     'ufmunicipio': (value: ['PR/Pérola', 'PR/Santa Fé']) | <mandatory>, <multiple>, <options>,
     'utilizou_tecnicas_amostrais': (value: Não usou técnicas amostrais) | <mandatory>, <options>,
     'no_do_lacre': (value: ) | <mandatory>,
     'motivo_de_lai': (value: []) | <mandatory>, <multiple>, <options>,
     'no_sei_do_aviso_lai': (value: ) | <mandatory>,
     'no_sei_do_plaiguarda': (value: ),
     'gerar_plai': (value: ), <options>, conditional}

Caso o conjunto de dados já seja conhecido para dado tipo de inspeção,
basta passar o dicionário diretamente para o método `update`.
Internamente os métodos mostrados anteriormente de atualização dos
campos são chamados.

## Exemplo completo

O dicionário a seguir contém valores misturados de diversos tipos de
inspeção distintos, além de valores aleatorizados. A API simplesmente
filtra os valores que se aplicam para o tipo de inspeção solicitada e o
valor do dado fornecido para os campos condicionais. As demais chaves
que não se aplicam são ignoradas.

<details class="code-fold">
<summary>Code</summary>

``` python
dados = {
    "endereco_da_inspecao": "Rua Machado de Assis, 27 - Morro Grande, Rio de Janeiro - RJ",
    "campo_eletrico__pico_vm": randint(50, 100),
    "campo_eletrico_rms_vm": randint(20, 100),
    "coordenacao_responsavel": "FI2",
    "cnpjcpf_da_entidade": "27865757000102",
    "entidade_com_cadastro_stel": "Não",
    "entidade_outorgada": randint(0, 1),
    "esta_em_operacao": randint(0, 1),
    "numero_da_estacao": "1493671",
    "fiscais": ["Eric Magalhães Delgado", "Ronaldo da Silva Alves Batista"],
    "fiscal_responsavel": "Eric Magalhães Delgado",
    "foi_constatada_interferencia": randint(0, 1),
    "frequencia_inicial": randint(70, 110),
    "frequencia_final": randint(110, 117),
    "gerar_relatorio": '0',
    "gerar_plai": randint(0, 1),
    "tipo_do_processo_plai": random.choice(FIELDS["tipo_do_processo_plai"].options),
    "coord_fi_plai": random.choice(FIELDS["coord_fi_plai"].options),
    "html_path": "/mnt/c/Users/rsilva/code/fiscaliza/tests/Report_2024.02.18_T11.30.55_123456.html",
    "uploads": [
        {
            "path": "/mnt/c/Users/rsilva/code/fiscaliza/tests/Report_2024.02.18_T11.30.55_123456.json",
            "filename": "Info.json",
        }
    ],
    "identificada_a_origem": str(randint(0, 1)),
    "unidade_da_frequencia_final": "MHz",
    "unidade_da_frequencia_inicial": "MHz",
    "horas_de_conclusao": randint(1, 8),
    "horas_de_deslocamento": randint(1, 8),
    "horas_de_execucao": randint(8, 40),
    "horas_de_preparacao": randint(1, 8),
    "houve_obice": random.randint(0, 1),
    "houve_interferencia": random.choice(["Sim", "Não"]),
    "latitude_coordenadas": -randint(0, 33),
    "longitude_coordenadas": -randint(34, 73),
    "latitude_da_estacao": -randint(0, 33),
    "longitude_da_estacao": -randint(34, 73),
    "nome_da_entidade": "Globo S/A",
    "numero_do_pai": "123456",
    "observacao_tecnica_amostral": "Simulação com o HTZ",
    "pai_instaurado_pela_anatel": random.choice(["Sim", "Não"]),
    "precisa_reservar_instrumentos": "0",  #
    "procedimentos": random.choices(FIELDS["procedimentos"].options[1:], k=2),  #
    "qnt_produt_lacradosapreend": "0",
    "reserva_de_instrumentos": "0",
    "no_sav": "Teste de Quebra\n de linha",
    "documento_instaurador_do_pado": "0201235\n0201239\n0201237",
    "no_do_lacre": "50",
    "motivo_de_lai": random.choice(FIELDS["motivo_de_lai"].options),
    "no_sei_do_aviso_lai": "",
    "sanada_ou_mitigada": random.choice(["0", "1"]),
    "servicos_da_inspecao": random.choices(list(SERVICOS.values()), k=2),
    "situacao_constatada": "Irregular",
    "situacao_de_risco_a_vida": "Sim",
    "tipo_de_inspecao": random.choice(FIELDS["tipo_de_inspecao"].options[1:]),
    "ufmunicipio": random.choices(MUNICIPIOS, k=2),
    "uso_de_produto_homologado": random.choice(["0", "1"]),
    "utilizou_algum_instrumento": "0",
    "utilizou_apoio_policial": random.choice(FIELDS["utilizou_apoio_policial"].options),
    "utilizou_tecnicas_amostrais": random.choice(
        FIELDS["utilizou_tecnicas_amostrais"].options
    ),
    "description": "[PMEC 2024 Etapa 2] 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.\r\n",
    "start_date": "2024-03-01",
    "due_date": "2024-05-30",
}
```

</details>

``` python
issue.update(dados)
```

    'A Inspeção nº 124182 foi atualizada. O seu estado atual é "Relatando".'

## Gerar Relatório de Atividades

Para as inspeções de `Certificação` e `Uso do Espectro - Monitoração` é
possível gerar o relatório de atividades no SEI por meio do Fiscaliza,
para tal basta fornecer o valor:

    dados['gerar_relatório'] = '1'

``` python
dados['Uso de Espectro - Monitoração']
dados['gerar_relatorio'] = '1'
issue.update(dados)
```

    Atualizado para o status Relatando

``` python
issue.attrs
```

    {'acao': {'type': 'acao_de_inspecao',
      'status': 'Em andamento',
      'name': 'ACAO_GR08_2024_0014',
      'description': '[PMEC 2024 Etapa 2] 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.\r\n'},
     'agrupamento': '',
     'allowed_statuses': '',
     'anexos': ['https://sistemasnethm/fiscaliza/attachments/download/9190/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9191/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9192/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9196/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9197/Info.json'],
     'ano_de_execucao': 2024,
     'app_fiscaliza': 0,
     'assigned_to': 'Eric Magalhães Delgado',
     'atualizacao': 'Atualizada por Ronaldo da Silva Alves Batista em 26/07/2024 às 07:14:07',
     'author': 'Eric Magalhães Delgado',
     'changesets': '',
     'children': '',
     'classe_da_inspecao': 'Técnica',
     'closed_on': '',
     'cnpjcpf_da_entidade': 27865757000102,
     'coordenacao_responsavel': 'FI2',
     'created_on': '2024-04-18T12:38:03Z',
     'data_de_inicio_efetivo': '2024-07-25',
     'description': '[PMEC 2024 Etapa 2] 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.\r\n',
     'done_ratio': 0,
     'due_date': '2024-05-30',
     'entidade_com_cadastro_stel': 'Não',
     'estimated_hours': '',
     'fiscais': ['Eric Magalhães Delgado', 'Ronaldo da Silva Alves Batista'],
     'fiscal_responsavel': 'Eric Magalhães Delgado',
     'frequencias': '',
     'horas_de_conclusao': 3,
     'horas_de_deslocamento': 7,
     'horas_de_execucao': 11,
     'horas_de_preparacao': 3,
     'houve_interferencia': 'Sim',
     'id': 124182,
     'identificacao_da_nao_outorgada': '',
     'identificada_a_origem': '',
     'irregularidade': [],
     'is_private': False,
     'latitude_coordenadas': -16.0,
     'longitude_coordenadas': -61.0,
     'membros': ['Gilmar Ferreira do Nascimento',
      'Luis Fernando Camelier de Queiroz',
      'Michel Kulhavy Cerqueira',
      'Iulo de Araújo Lima Lobo',
      'Carlos Fernando Muniz Santos',
      'Isabel Cristina Cruz Soares e Souza',
      'Alessandro Vasconcelos Fernandes',
      'Anecy Oliveira de Freitas',
      'Wilton Machado de Oliveira',
      'Ilva Perla Monteiro Ferreira',
      'Lin Yu Wan',
      'Alexnaldo Cerqueira da Silva',
      'Jorgean Ferreira Leal',
      'José Mauricio Leite Araújo',
      'Arildo Oliva Franca Filho',
      'Leonardo Lago Araújo',
      'Brasilio Rios Leite',
      'Fiscal UD',
      'José Ivan Gomes',
      'Jaqueline Cesario da Silva',
      'Eric Magalhães Delgado',
      'Ronaldo da Silva Alves Batista'],
     'no_fiscaliza_issue': {'numero': '124182',
      'link_acesso': 'https://sistemasnethm/fiscaliza/issues/124182'},
     'no_pcdp': '',
     'no_sav': 'Teste de Quebra\n de linha',
     'no_sei_do_oficio_ao_mctic': '',
     'no_sei_processo_fiscalizacao': "{'numero': '53554.000005/2024-18', 'link_acesso': 'https://seihm.anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1982134'}",
     'nome_da_entidade': 'Globo S/A',
     'observacao_tecnica_amostral': 'Simulação com o HTZ',
     'potencia_medida': '',
     'precisa_reservar_instrumentos': 0,
     'priority': 'Normal',
     'procedimentos': ['Não Lacrado - Amparo Judicial',
      'Não Lacrado - Desativado'],
     'project': 'GR08',
     'qnt_produt_lacradosapreend': 0,
     'servicos_da_inspecao': ['728 - RESTRITO - ESPECIAL DE REPETICAO DE TELEVISAO',
      '043 - COLETIVO - ESPECIAL DE RADIORRECADO'],
     'situacao_constatada': 'Irregular',
     'situacao_de_risco_a_vida': 'Sim',
     'spent_hours': 0.0,
     'start_date': '2024-03-01',
     'status': 'Relatando',
     'subject': 'INSP_GR08_2024_0147',
     'subtema': ['Radiomonitoração Terrestre'],
     'tema': ['Uso do Espectro'],
     'time_entries': '',
     'tipificacao_da_infracao': '',
     'tipo_de_inspecao': 'Uso do Espectro - Não Outorgado',
     'total_de_horas': 24.0,
     'total_estimated_hours': '',
     'total_spent_hours': 0.0,
     'tracker': 'Atividade de Inspeção',
     'ufmunicipio': ['PR/Lindoeste', 'RS/Canoas'],
     'unidade_de_frequencia': '',
     'unidade_de_potencia': '',
     'updated_on': '2024-07-26T10:14:06Z',
     'uso_de_produto_homologado': 0,
     'utilizou_algum_instrumento': 0,
     'utilizou_apoio_policial': 'Polícia Civil',
     'utilizou_tecnicas_amostrais': 'Não usou técnicas amostrais',
     'watchers': ''}

> Para substituir o relatório de atividades, basta refazer a chamada
> fornecendo o valor `1` para a chave `gerar_relatorio`.

``` python
dados["Certificação"]
dados["gerar_relatorio"] = "1"
issue.update(dados)
```

    Atualizado para o status Relatando

``` python
issue.attrs
```

    {'acao': {'type': 'acao_de_inspecao',
      'status': 'Em andamento',
      'name': 'ACAO_GR08_2024_0014',
      'description': '[PMEC 2024 Etapa 2] 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.\r\n'},
     'agrupamento': '',
     'allowed_statuses': '',
     'anexos': ['https://sistemasnethm/fiscaliza/attachments/download/9190/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9191/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9192/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9196/Info.json',
      'https://sistemasnethm/fiscaliza/attachments/download/9197/Info.json'],
     'ano_de_execucao': 2024,
     'app_fiscaliza': 0,
     'assigned_to': 'Eric Magalhães Delgado',
     'atualizacao': 'Atualizada por Ronaldo da Silva Alves Batista em 26/07/2024 às 07:14:21',
     'author': 'Eric Magalhães Delgado',
     'changesets': '',
     'children': '',
     'classe_da_inspecao': 'Técnica',
     'closed_on': '',
     'cnpjcpf_da_entidade': 27865757000102,
     'coordenacao_responsavel': 'FI2',
     'created_on': '2024-04-18T12:38:03Z',
     'data_de_inicio_efetivo': '2024-07-25',
     'description': '[PMEC 2024 Etapa 2] 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.\r\n',
     'done_ratio': 0,
     'due_date': '2024-05-30',
     'entidade_com_cadastro_stel': 'Não',
     'estimated_hours': '',
     'fiscais': ['Eric Magalhães Delgado', 'Ronaldo da Silva Alves Batista'],
     'fiscal_responsavel': 'Eric Magalhães Delgado',
     'frequencias': '',
     'horas_de_conclusao': 3,
     'horas_de_deslocamento': 7,
     'horas_de_execucao': 11,
     'horas_de_preparacao': 3,
     'houve_interferencia': 'Sim',
     'id': 124182,
     'identificacao_da_nao_outorgada': '',
     'identificada_a_origem': 0,
     'irregularidade': [],
     'is_private': False,
     'latitude_coordenadas': -16.0,
     'longitude_coordenadas': -61.0,
     'membros': ['Gilmar Ferreira do Nascimento',
      'Luis Fernando Camelier de Queiroz',
      'Michel Kulhavy Cerqueira',
      'Iulo de Araújo Lima Lobo',
      'Carlos Fernando Muniz Santos',
      'Isabel Cristina Cruz Soares e Souza',
      'Alessandro Vasconcelos Fernandes',
      'Anecy Oliveira de Freitas',
      'Wilton Machado de Oliveira',
      'Ilva Perla Monteiro Ferreira',
      'Lin Yu Wan',
      'Alexnaldo Cerqueira da Silva',
      'Jorgean Ferreira Leal',
      'José Mauricio Leite Araújo',
      'Arildo Oliva Franca Filho',
      'Leonardo Lago Araújo',
      'Brasilio Rios Leite',
      'Fiscal UD',
      'José Ivan Gomes',
      'Jaqueline Cesario da Silva',
      'Eric Magalhães Delgado',
      'Ronaldo da Silva Alves Batista'],
     'no_fiscaliza_issue': {'numero': '124182',
      'link_acesso': 'https://sistemasnethm/fiscaliza/issues/124182'},
     'no_pcdp': '',
     'no_sav': 'Teste de Quebra\n de linha',
     'no_sei_do_oficio_ao_mctic': '',
     'no_sei_processo_fiscalizacao': "{'numero': '53554.000005/2024-18', 'link_acesso': 'https://seihm.anatel.gov.br/sei/controlador.php?acao=procedimento_trabalhar&id_procedimento=1982134'}",
     'nome_da_entidade': 'Globo S/A',
     'observacao_tecnica_amostral': 'Simulação com o HTZ',
     'potencia_medida': '',
     'precisa_reservar_instrumentos': 0,
     'priority': 'Normal',
     'procedimentos': ['Não Lacrado - Amparo Judicial',
      'Não Lacrado - Desativado'],
     'project': 'GR08',
     'qnt_produt_lacradosapreend': 0,
     'servicos_da_inspecao': ['728 - RESTRITO - ESPECIAL DE REPETICAO DE TELEVISAO',
      '043 - COLETIVO - ESPECIAL DE RADIORRECADO'],
     'situacao_constatada': 'Irregular',
     'situacao_de_risco_a_vida': 'Sim',
     'spent_hours': 0.0,
     'start_date': '2024-03-01',
     'status': 'Relatando',
     'subject': 'INSP_GR08_2024_0147',
     'subtema': ['Radiomonitoração Terrestre'],
     'tema': ['Uso do Espectro'],
     'time_entries': '',
     'tipificacao_da_infracao': '',
     'tipo_de_inspecao': 'Uso do Espectro - Não Outorgado',
     'total_de_horas': 24.0,
     'total_estimated_hours': '',
     'total_spent_hours': 0.0,
     'tracker': 'Atividade de Inspeção',
     'ufmunicipio': ['PR/Lindoeste', 'RS/Canoas'],
     'unidade_de_frequencia': '',
     'unidade_de_potencia': '',
     'updated_on': '2024-07-26T10:14:21Z',
     'uso_de_produto_homologado': 0,
     'utilizou_algum_instrumento': 0,
     'utilizou_apoio_policial': 'Polícia Civil',
     'utilizou_tecnicas_amostrais': 'Não usou técnicas amostrais',
     'watchers': ''}

> Caso o intuito seja somente editar o campo `Relatório de Atividades`,
> basta fornecer o valor para a chave `relatorio_de_atividades` e não
> esquecer de fornecer o valor `0` para a chave `gerar_relatório` ou
> simplesmente excluí-la.

``` python
dados['relatorio_de_atividades'] = '0206885'
dados['gerar_relatorio'] = '0'
issue.update(dados)
```

    Atualizado para o status Relatando
