Reorganiza dados e adiciona modelo OAMRP

This commit is contained in:
Cesa-V
2026-06-15 19:00:45 -03:00
parent 32ad7c9f23
commit 1131267ea2
14 changed files with 192 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
chave;status;tipo_ica;tipo_relatorio;nivel_ica;nivel_relatorio;intervalo_horas_ica;intervalo_horas_relatorio;intervalo_meses_ica;intervalo_meses_relatorio;duracao_ica;duracao_relatorio;hxh_ica;seq_relatorio;observacoes
PRE VOO;somente_ica;PRÉ VOO;;Base;;;;;;1 H;;1;;Não encontrada no relatório de ciclo
TRANSITO;somente_ica;TRÂNSITO;;Base;;;;;;1 H;;1;;Não encontrada no relatório de ciclo
DIARIA;somente_ica;DIÁRIA;;Base;;;;;;1 H;;1;;Não encontrada no relatório de ciclo
SERV 72H;somente_ica;SERV 72H;;Base;;72;;;;4 H;;16;;Não encontrada no relatório de ciclo
OPERACIONAL 300FH;divergente;OPERACIONAL 300FH;CHECK OPERACIONAL DE 300FH;Base;Orgânico;300;300;;;1 D;6 H;14;6;"nível ICA=Base relatório=Orgânico; duração ICA=1 D relatório=6 H"
OPERACIONAL 400FH;divergente;OPERACIONAL 400FH;CHECK OPERACIONAL DE 400FH;Base;Orgânico;400;400;;;1 D;6 H;14;7;"nível ICA=Base relatório=Orgânico; duração ICA=1 D relatório=6 H"
OPERACIONAL 600FH;somente_ica;OPERACIONAL 600FH;;Base;;600;;;;1 D;;14;;Não encontrada no relatório de ciclo
CHECK 1A;compatível;CHECK 1A;INSPEÇÃO CHECK 1A;Base;Base;300;300;8;8;3 D;3 D;16;2;
CHECK 2A;compatível;CHECK 2A;INSPEÇÃO CHECK 2A;Base;Base;600;600;16;16;4 D;4 D;28;3;
CHECK 3A;compatível;CHECK 3A;INSPEÇÃO CHECK 3A;Base;Base;900;900;24;24;5 D;5 D;76;4;
CHECK 1C;divergente;CHECK 1C;INSPEÇÃO CHECK 1C;Base;Parque;2400;2400;48;48;65 D;65 D;526;15;nível ICA=Base relatório=Parque
CHECK 2C;divergente;CHECK 2C;INSPEÇÃO GERAL CHECK 2C;Base;Parque;4800;4800;96;96;5 D;10 D;17;16;"nível ICA=Base relatório=Parque; duração ICA=5 D relatório=10 D"
CALENDARICA 2Y;compatível;CALENDÁRICA 2Y;INSPEÇÃO CALENDÁRICA DE 2 YEARS;Base;Base;;;24;24;5 D;5 D;30;5;
CALENDARICA 4Y;compatível;CALENDÁRICA 4Y;INSPEÇÃO CALENDÁRICA DE 4 YEARS;Parque;Parque;;;48;48;10 D;10 D;123;17;
CALENDARICA 8Y;compatível;CALENDÁRICA 8Y;INSPEÇÃO CALENDÁRICA DE 8 YEARS;Parque;Parque;;;96;96;20 D;20 D;336;14;
;somente_relatorio;;INSPEÇÃO AOL 295-019;;Base;;;;;;1 D;;8;Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
;somente_relatorio;;INSPEÇÃO AOL 295-019;;Base;;;;;;1 D;;9;Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
;somente_relatorio;;INSPEÇÃO AOL 295-019;;Base;;;;;;1 D;;10;Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
;somente_relatorio;;INSPEÇÃO DE 100 FH;;Orgânico;;100;;;;1 H;;18;Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
;somente_relatorio;;INPEÇÃO 2400FH;;Orgânico;;2400;;;;3 H;;19;Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
;somente_relatorio;;INSPEÇÃO 3000FH;;Base;;3000;;;;1 D;;20;Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
;somente_relatorio;;INPEÇÃO 1000FH;;Base;;1000;;;;1 D;;22;Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
;somente_relatorio;;INSPEÇÃO 50 FH;;Base;;50;;;;1 D;;23;Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
1 chave status tipo_ica tipo_relatorio nivel_ica nivel_relatorio intervalo_horas_ica intervalo_horas_relatorio intervalo_meses_ica intervalo_meses_relatorio duracao_ica duracao_relatorio hxh_ica seq_relatorio observacoes
2 PRE VOO somente_ica PRÉ VOO Base 1 H 1 Não encontrada no relatório de ciclo
3 TRANSITO somente_ica TRÂNSITO Base 1 H 1 Não encontrada no relatório de ciclo
4 DIARIA somente_ica DIÁRIA Base 1 H 1 Não encontrada no relatório de ciclo
5 SERV 72H somente_ica SERV 72H Base 72 4 H 16 Não encontrada no relatório de ciclo
6 OPERACIONAL 300FH divergente OPERACIONAL 300FH CHECK OPERACIONAL DE 300FH Base Orgânico 300 300 1 D 6 H 14 6 nível ICA=Base relatório=Orgânico; duração ICA=1 D relatório=6 H
7 OPERACIONAL 400FH divergente OPERACIONAL 400FH CHECK OPERACIONAL DE 400FH Base Orgânico 400 400 1 D 6 H 14 7 nível ICA=Base relatório=Orgânico; duração ICA=1 D relatório=6 H
8 OPERACIONAL 600FH somente_ica OPERACIONAL 600FH Base 600 1 D 14 Não encontrada no relatório de ciclo
9 CHECK 1A compatível CHECK 1A INSPEÇÃO CHECK 1A Base Base 300 300 8 8 3 D 3 D 16 2
10 CHECK 2A compatível CHECK 2A INSPEÇÃO CHECK 2A Base Base 600 600 16 16 4 D 4 D 28 3
11 CHECK 3A compatível CHECK 3A INSPEÇÃO CHECK 3A Base Base 900 900 24 24 5 D 5 D 76 4
12 CHECK 1C divergente CHECK 1C INSPEÇÃO CHECK 1C Base Parque 2400 2400 48 48 65 D 65 D 526 15 nível ICA=Base relatório=Parque
13 CHECK 2C divergente CHECK 2C INSPEÇÃO GERAL CHECK 2C Base Parque 4800 4800 96 96 5 D 10 D 17 16 nível ICA=Base relatório=Parque; duração ICA=5 D relatório=10 D
14 CALENDARICA 2Y compatível CALENDÁRICA 2Y INSPEÇÃO CALENDÁRICA DE 2 YEARS Base Base 24 24 5 D 5 D 30 5
15 CALENDARICA 4Y compatível CALENDÁRICA 4Y INSPEÇÃO CALENDÁRICA DE 4 YEARS Parque Parque 48 48 10 D 10 D 123 17
16 CALENDARICA 8Y compatível CALENDÁRICA 8Y INSPEÇÃO CALENDÁRICA DE 8 YEARS Parque Parque 96 96 20 D 20 D 336 14
17 somente_relatorio INSPEÇÃO AOL 295-019 Base 1 D 8 Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
18 somente_relatorio INSPEÇÃO AOL 295-019 Base 1 D 9 Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
19 somente_relatorio INSPEÇÃO AOL 295-019 Base 1 D 10 Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
20 somente_relatorio INSPEÇÃO DE 100 FH Orgânico 100 1 H 18 Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
21 somente_relatorio INPEÇÃO 2400FH Orgânico 2400 3 H 19 Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
22 somente_relatorio INSPEÇÃO 3000FH Base 3000 1 D 20 Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
23 somente_relatorio INPEÇÃO 1000FH Base 1000 1 D 22 Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação
24 somente_relatorio INSPEÇÃO 50 FH Base 50 1 D 23 Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação

View File

@@ -0,0 +1,26 @@
# Comparação ICA 66-31/2023 x Relatório de Ciclo C-105 2805
Fonte ICA: `raw/ICA 66-31 2023.pdf`, Anexo D - Projeto C/SC-105.
Observação: a comparação foi feita com o Anexo D textual do PDF completo da ICA.
## Resumo
- `compatível`: 6
- `divergente`: 4
- `somente_ica`: 5
- `somente_relatorio`: 8
## Principais Achados
- `CHECK 1A`, `CHECK 2A`, `CHECK 3A`, `CALENDÁRICA 2Y`, `CALENDÁRICA 4Y` e `CALENDÁRICA 8Y` estão compatíveis nos intervalos e durações.
- `CHECK 1C` bate em intervalo e duração, mas diverge no nível: ICA indica Base na tabela D.2, enquanto o relatório de ciclo indica Parque.
- `CHECK 2C` diverge em nível e duração: ICA indica Base e 5 D; relatório de ciclo indica Parque e 10 D.
- `OPERACIONAL 300FH` e `OPERACIONAL 400FH` batem no intervalo de horas, mas divergem em nível e duração: ICA indica Base e 1 D; relatório de ciclo indica Orgânico e 6 H.
- `OPERACIONAL 600FH`, `PRÉ VOO`, `TRÂNSITO`, `DIÁRIA` e `SERV 72H` aparecem na ICA, mas não apareceram no relatório de ciclo processado.
- Inspeções como AOL, 50FH, 100FH, 1000FH, 2400FH e 3000FH aparecem no relatório de ciclo, mas não na tabela C/SC-105 da ICA usada na comparação.
## Arquivo Detalhado
- `pre_process\comparacao_ica_66_31_c105_2023\comparacao_ica_66_31_c105_2023_vs_relatorio_ciclo.csv`

View File

@@ -0,0 +1,182 @@
import csv
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
RELATORIO_JSON = (
ROOT
/ "pre_process"
/ "relatorio_ciclo_inspecoes_c105_2805_2026-06-15"
/ "relatorio_ciclo_inspecoes_c105_2805_2026-06-15_inspecoes.json"
)
OUTPUT_DIR = Path(__file__).resolve().parent
CSV_PATH = OUTPUT_DIR / "comparacao_ica_66_31_c105_2023_vs_relatorio_ciclo.csv"
MD_PATH = OUTPUT_DIR / "comparacao_ica_66_31_c105_2023_vs_relatorio_ciclo.md"
ICA_C105 = [
{"chave": "PRE VOO", "tipo_ica": "PRÉ VOO", "nivel_ica": "Base", "intervalo_horas_ica": "", "intervalo_meses_ica": "", "duracao_ica": "1 H", "hxh_ica": 1},
{"chave": "TRANSITO", "tipo_ica": "TRÂNSITO", "nivel_ica": "Base", "intervalo_horas_ica": "", "intervalo_meses_ica": "", "duracao_ica": "1 H", "hxh_ica": 1},
{"chave": "DIARIA", "tipo_ica": "DIÁRIA", "nivel_ica": "Base", "intervalo_horas_ica": "", "intervalo_meses_ica": "", "duracao_ica": "1 H", "hxh_ica": 1},
{"chave": "SERV 72H", "tipo_ica": "SERV 72H", "nivel_ica": "Base", "intervalo_horas_ica": 72, "intervalo_meses_ica": "", "duracao_ica": "4 H", "hxh_ica": 16},
{"chave": "OPERACIONAL 300FH", "tipo_ica": "OPERACIONAL 300FH", "nivel_ica": "Base", "intervalo_horas_ica": 300, "intervalo_meses_ica": "", "duracao_ica": "1 D", "hxh_ica": 14},
{"chave": "OPERACIONAL 400FH", "tipo_ica": "OPERACIONAL 400FH", "nivel_ica": "Base", "intervalo_horas_ica": 400, "intervalo_meses_ica": "", "duracao_ica": "1 D", "hxh_ica": 14},
{"chave": "OPERACIONAL 600FH", "tipo_ica": "OPERACIONAL 600FH", "nivel_ica": "Base", "intervalo_horas_ica": 600, "intervalo_meses_ica": "", "duracao_ica": "1 D", "hxh_ica": 14},
{"chave": "CHECK 1A", "tipo_ica": "CHECK 1A", "nivel_ica": "Base", "intervalo_horas_ica": 300, "intervalo_meses_ica": 8, "duracao_ica": "3 D", "hxh_ica": 16},
{"chave": "CHECK 2A", "tipo_ica": "CHECK 2A", "nivel_ica": "Base", "intervalo_horas_ica": 600, "intervalo_meses_ica": 16, "duracao_ica": "4 D", "hxh_ica": 28},
{"chave": "CHECK 3A", "tipo_ica": "CHECK 3A", "nivel_ica": "Base", "intervalo_horas_ica": 900, "intervalo_meses_ica": 24, "duracao_ica": "5 D", "hxh_ica": 76},
{"chave": "CHECK 1C", "tipo_ica": "CHECK 1C", "nivel_ica": "Base", "intervalo_horas_ica": 2400, "intervalo_meses_ica": 48, "duracao_ica": "65 D", "hxh_ica": 526},
{"chave": "CHECK 2C", "tipo_ica": "CHECK 2C", "nivel_ica": "Base", "intervalo_horas_ica": 4800, "intervalo_meses_ica": 96, "duracao_ica": "5 D", "hxh_ica": 17},
{"chave": "CALENDARICA 2Y", "tipo_ica": "CALENDÁRICA 2Y", "nivel_ica": "Base", "intervalo_horas_ica": "", "intervalo_meses_ica": 24, "duracao_ica": "5 D", "hxh_ica": 30},
{"chave": "CALENDARICA 4Y", "tipo_ica": "CALENDÁRICA 4Y", "nivel_ica": "Parque", "intervalo_horas_ica": "", "intervalo_meses_ica": 48, "duracao_ica": "10 D", "hxh_ica": 123},
{"chave": "CALENDARICA 8Y", "tipo_ica": "CALENDÁRICA 8Y", "nivel_ica": "Parque", "intervalo_horas_ica": "", "intervalo_meses_ica": 96, "duracao_ica": "20 D", "hxh_ica": 336},
]
RELATORIO_KEYS = {
"CHECK 1A": "CHECK 1A",
"CHECK 2A": "CHECK 2A",
"CHECK 3A": "CHECK 3A",
"CHECK 1C": "CHECK 1C",
"CHECK 2C": "CHECK 2C",
"CALENDÁRICA DE 2 YEARS": "CALENDARICA 2Y",
"CALENDÁRICA DE 4 YEARS": "CALENDARICA 4Y",
"CALENDÁRICA DE 8 YEARS": "CALENDARICA 8Y",
"OPERACIONAL DE 300FH": "OPERACIONAL 300FH",
"OPERACIONAL DE 400FH": "OPERACIONAL 400FH",
}
def key_from_relatorio(row):
descricao = row["descricao_mnt"].upper()
for needle, key in RELATORIO_KEYS.items():
if needle in descricao:
return key
return ""
def equal_or_blank(left, right):
return left == "" or right == "" or left == right
def compare_row(ica, rel):
if rel is None:
return "somente_ica", ["Não encontrada no relatório de ciclo"]
issues = []
if not equal_or_blank(ica["nivel_ica"], rel["nivel_descricao"]):
issues.append(f"nível ICA={ica['nivel_ica']} relatório={rel['nivel_descricao']}")
if not equal_or_blank(ica["intervalo_horas_ica"], rel["intervalo_horas_voo_valor"]):
issues.append(f"horas ICA={ica['intervalo_horas_ica']} relatório={rel['intervalo_horas_voo_valor']}")
if not equal_or_blank(ica["intervalo_meses_ica"], rel["intervalo_meses_continuos_valor"]):
issues.append(f"meses ICA={ica['intervalo_meses_ica']} relatório={rel['intervalo_meses_continuos_valor']}")
if not equal_or_blank(ica["duracao_ica"], rel["duracao"]):
issues.append(f"duração ICA={ica['duracao_ica']} relatório={rel['duracao']}")
return ("divergente" if issues else "compatível"), issues
def main():
payload = json.loads(RELATORIO_JSON.read_text(encoding="utf-8"))
relatorio_by_key = {}
relatorio_unmatched = []
for row in payload["inspecoes"]:
key = key_from_relatorio(row)
if key:
relatorio_by_key[key] = row
else:
relatorio_unmatched.append(row)
rows = []
for ica in ICA_C105:
rel = relatorio_by_key.get(ica["chave"])
status, issues = compare_row(ica, rel)
rows.append(
{
"chave": ica["chave"],
"status": status,
"tipo_ica": ica["tipo_ica"],
"tipo_relatorio": rel["descricao_mnt"] if rel else "",
"nivel_ica": ica["nivel_ica"],
"nivel_relatorio": rel["nivel_descricao"] if rel else "",
"intervalo_horas_ica": ica["intervalo_horas_ica"],
"intervalo_horas_relatorio": rel["intervalo_horas_voo_valor"] if rel else "",
"intervalo_meses_ica": ica["intervalo_meses_ica"],
"intervalo_meses_relatorio": rel["intervalo_meses_continuos_valor"] if rel else "",
"duracao_ica": ica["duracao_ica"],
"duracao_relatorio": rel["duracao"] if rel else "",
"hxh_ica": ica["hxh_ica"],
"seq_relatorio": rel["seq"] if rel else "",
"observacoes": "; ".join(issues),
}
)
for rel in relatorio_unmatched:
rows.append(
{
"chave": "",
"status": "somente_relatorio",
"tipo_ica": "",
"tipo_relatorio": rel["descricao_mnt"],
"nivel_ica": "",
"nivel_relatorio": rel["nivel_descricao"],
"intervalo_horas_ica": "",
"intervalo_horas_relatorio": rel["intervalo_horas_voo_valor"],
"intervalo_meses_ica": "",
"intervalo_meses_relatorio": rel["intervalo_meses_continuos_valor"],
"duracao_ica": "",
"duracao_relatorio": rel["duracao"],
"hxh_ica": "",
"seq_relatorio": rel["seq"],
"observacoes": "Não encontrada na tabela C/SC-105 da ICA 66-31/2023 usada nesta comparação",
}
)
fields = list(rows[0].keys())
with CSV_PATH.open("w", newline="", encoding="utf-8-sig") as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fields, delimiter=";")
writer.writeheader()
writer.writerows(rows)
counts = {status: sum(1 for row in rows if row["status"] == status) for status in sorted({row["status"] for row in rows})}
lines = [
"# Comparação ICA 66-31/2023 x Relatório de Ciclo C-105 2805",
"",
"Fonte ICA: `raw/ICA 66-31 2023.pdf`, Anexo D - Projeto C/SC-105.",
"",
"Observação: a comparação foi feita com o Anexo D textual do PDF completo da ICA.",
"",
"## Resumo",
"",
]
for status, count in counts.items():
lines.append(f"- `{status}`: {count}")
lines.extend(
[
"",
"## Principais Achados",
"",
"- `CHECK 1A`, `CHECK 2A`, `CHECK 3A`, `CALENDÁRICA 2Y`, `CALENDÁRICA 4Y` e `CALENDÁRICA 8Y` estão compatíveis nos intervalos e durações.",
"- `CHECK 1C` bate em intervalo e duração, mas diverge no nível: ICA indica Base na tabela D.2, enquanto o relatório de ciclo indica Parque.",
"- `CHECK 2C` diverge em nível e duração: ICA indica Base e 5 D; relatório de ciclo indica Parque e 10 D.",
"- `OPERACIONAL 300FH` e `OPERACIONAL 400FH` batem no intervalo de horas, mas divergem em nível e duração: ICA indica Base e 1 D; relatório de ciclo indica Orgânico e 6 H.",
"- `OPERACIONAL 600FH`, `PRÉ VOO`, `TRÂNSITO`, `DIÁRIA` e `SERV 72H` aparecem na ICA, mas não apareceram no relatório de ciclo processado.",
"- Inspeções como AOL, 50FH, 100FH, 1000FH, 2400FH e 3000FH aparecem no relatório de ciclo, mas não na tabela C/SC-105 da ICA usada na comparação.",
"",
"## Arquivo Detalhado",
"",
f"- `{CSV_PATH.relative_to(ROOT)}`",
"",
]
)
MD_PATH.write_text("\n".join(lines) + "\n", encoding="utf-8")
print(f"Gerado: {CSV_PATH.relative_to(ROOT)}")
print(f"Gerado: {MD_PATH.relative_to(ROOT)}")
print(counts)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,267 @@
import csv
import json
import re
from pathlib import Path
import pdfplumber
ROOT = Path(__file__).resolve().parents[2]
BASE_NAME = "relatorio_ciclo_inspecoes_c105_2805_2026-06-15"
OUTPUT_DIR = Path(__file__).resolve().parent
PDF_PATH = ROOT / "raw" / f"{BASE_NAME}.pdf"
TXT_PATH = OUTPUT_DIR / f"{BASE_NAME}_texto.txt"
JSON_PATH = OUTPUT_DIR / f"{BASE_NAME}_inspecoes.json"
CSV_PATH = OUTPUT_DIR / f"{BASE_NAME}_inspecoes.csv"
ROW_START_RE = re.compile(r"^(?P<seq>\d+)\s+")
INTERVAL_RE = re.compile(
r"(?P<intervalo>\d+(?::\d+)?\s*(?:HORAS DE V[ÔO]O|MESES CONT[ÍI]NUOS|POUSOS))",
re.IGNORECASE,
)
def extract_text(pdf_path):
pages = []
with pdfplumber.open(pdf_path) as pdf:
for page in pdf.pages:
pages.append(page.extract_text(x_tolerance=1, y_tolerance=3) or "")
return "\n\n".join(pages).strip()
def normalize_interval(value):
return re.sub(r"\s+", " ", value.replace("VÔO", "VOO")).strip()
def interval_number(intervalo):
if not intervalo:
return ""
first_token = intervalo.split()[0]
if ":" in first_token:
return int(first_token.split(":", 1)[0])
if first_token.isdigit():
return int(first_token)
return ""
def parse_control_fields(tokens):
nivel_descricao = {
"B": "Base",
"P": "Parque",
"O": "Orgânico",
}
fields = {
"zera_tso": "",
"letra": "",
"nivel": "",
"nivel_descricao": "",
"var_media": "",
"duracao": "",
"duracao_valor": "",
"duracao_unidade": "",
}
if tokens:
fields["zera_tso"] = tokens[0]
tokens = tokens[1:]
if len(tokens) >= 2 and tokens[-1] in {"D", "H"} and tokens[-2].isdigit():
duracao_valor = tokens[-2]
duracao_codigo = tokens[-1]
tokens = tokens[:-2]
fields["duracao"] = f"{duracao_valor} {duracao_codigo}"
fields["duracao_valor"] = int(duracao_valor)
fields["duracao_unidade"] = "dias" if duracao_codigo == "D" else "horas"
if len(tokens) == 1:
if tokens[0] in nivel_descricao:
fields["nivel"] = tokens[0]
else:
fields["letra"] = tokens[0]
elif len(tokens) >= 2:
if tokens[1] in nivel_descricao:
fields["letra"] = tokens[0]
fields["nivel"] = tokens[1]
fields["var_media"] = " ".join(tokens[2:])
elif tokens[0] in nivel_descricao:
fields["nivel"] = tokens[0]
fields["var_media"] = " ".join(tokens[1:])
else:
fields["letra"] = tokens[0]
fields["nivel"] = tokens[1]
fields["var_media"] = " ".join(tokens[2:])
fields["nivel_descricao"] = nivel_descricao.get(fields["nivel"], "")
return fields
def split_records(text):
records = []
current = []
for raw_line in text.splitlines():
line = re.sub(r"\s+", " ", raw_line).strip()
if not line:
continue
if ROW_START_RE.match(line) and " Término da Anterior " in line:
if current:
records.append(" ".join(current))
current = [line]
elif current:
current.append(line)
if current:
records.append(" ".join(current))
return records
def parse_header(text):
header = {}
patterns = {
"data_relatorio": r"Data:\s*(\d{2}/\d{2}/\d{4})",
"hora_relatorio": r"Hora:\s*(\d{2}:\d{2}:\d{2})",
"pn": r"PN:\s*(.*?)\s+CFF:",
"cff": r"CFF:\s*(.*?)\s+Nomenclatura:",
"nomenclatura": r"Nomenclatura:\s*(.*?)\s+SN:",
"sn": r"SN:\s*(.*?)\s+Matrícula:",
"matricula": r"Matrícula:\s*(.*?)\s+Modelo:",
"modelo": r"Modelo:\s*(.*?)\s+Ciclo Atual:",
"ciclo_atual": r"Ciclo Atual:\s*(\S+)",
}
compact_text = re.sub(r"\s+", " ", text)
for key, pattern in patterns.items():
match = re.search(pattern, compact_text)
if match:
header[key] = match.group(1).strip()
return header
def parse_record(record):
record = record.replace("- Tipo D)", " - Tipo D)")
has_tipo_d = " - Tipo D)" in record
left, right = record.split(" Término da Anterior ", 1)
seq_match = ROW_START_RE.match(left)
seq = int(seq_match.group("seq"))
left_body = left[seq_match.end() :]
intervalos = [normalize_interval(m.group("intervalo")) for m in INTERVAL_RE.finditer(right)]
right_before_interval = INTERVAL_RE.split(right, maxsplit=1)[0].strip()
tokens = right_before_interval.split()
controle_tokens = tokens
controle = " ".join(controle_tokens)
control_fields = parse_control_fields(controle_tokens)
especial_marker = " Especial (a contar dela mesma"
if especial_marker in left_body:
before_ref, referencia = left_body.split(especial_marker, 1)
referencia = "Especial (a contar dela mesma"
if has_tipo_d:
referencia += " - Tipo D)"
else:
ref_match = re.search(r"(Última .*)$", left_body)
referencia = ref_match.group(1).strip() if ref_match else ""
before_ref = left_body[: ref_match.start()].strip() if ref_match else left_body
upper_before_ref = before_ref.upper()
desc_idx = upper_before_ref.find("INSPEÇÃO")
if desc_idx == -1:
desc_idx = upper_before_ref.find("INPEÇÃO")
if desc_idx == -1:
desc_idx = upper_before_ref.find("CHECK OPERACIONAL")
if desc_idx != -1:
sigla = before_ref[:desc_idx].strip()
descricao = before_ref[desc_idx:].strip()
else:
parts = before_ref.split(maxsplit=1)
sigla = parts[0] if parts else ""
descricao = parts[1] if len(parts) > 1 else ""
intervalo_horas_voo = next((item for item in intervalos if "HORAS DE VOO" in item), "")
intervalo_meses_continuos = next((item for item in intervalos if "MESES CONTÍNUOS" in item), "")
intervalo_pousos = next((item for item in intervalos if "POUSOS" in item), "")
return {
"seq": seq,
"sigla_mnt": sigla,
"descricao_mnt": descricao,
"referencia": referencia,
"tipo_vencimento": "Término da Anterior",
"zera_tso": control_fields["zera_tso"],
"letra": control_fields["letra"],
"nivel": control_fields["nivel"],
"nivel_descricao": control_fields["nivel_descricao"],
"var_media": control_fields["var_media"],
"duracao": control_fields["duracao"],
"duracao_valor": control_fields["duracao_valor"],
"duracao_unidade": control_fields["duracao_unidade"],
"controle_original": controle,
"intervalo_horas_voo": intervalo_horas_voo,
"intervalo_horas_voo_valor": interval_number(intervalo_horas_voo),
"intervalo_meses_continuos": intervalo_meses_continuos,
"intervalo_meses_continuos_valor": interval_number(intervalo_meses_continuos),
"intervalo_pousos": intervalo_pousos,
"intervalo_pousos_valor": interval_number(intervalo_pousos),
"intervalos": intervalos,
"linha_original": record,
}
def main():
text = extract_text(PDF_PATH)
TXT_PATH.write_text(text + "\n", encoding="utf-8")
payload = {
"fonte": str(PDF_PATH.relative_to(ROOT)),
"metadados": parse_header(text),
"inspecoes": [parse_record(record) for record in split_records(text)],
}
JSON_PATH.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
fields = [
"seq",
"sigla_mnt",
"descricao_mnt",
"referencia",
"tipo_vencimento",
"zera_tso",
"letra",
"nivel",
"nivel_descricao",
"var_media",
"duracao",
"duracao_valor",
"duracao_unidade",
"controle_original",
"intervalo_horas_voo",
"intervalo_horas_voo_valor",
"intervalo_meses_continuos",
"intervalo_meses_continuos_valor",
"intervalo_pousos",
"intervalo_pousos_valor",
"intervalos",
]
with CSV_PATH.open("w", newline="", encoding="utf-8-sig") as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fields, delimiter=";")
writer.writeheader()
for row in payload["inspecoes"]:
csv_row = {key: row[key] for key in fields}
csv_row["intervalos"] = " | ".join(row["intervalos"])
writer.writerow(csv_row)
print(f"Gerado: {TXT_PATH.relative_to(ROOT)}")
print(f"Gerado: {JSON_PATH.relative_to(ROOT)}")
print(f"Gerado: {CSV_PATH.relative_to(ROOT)}")
print(f"Inspeções extraídas: {len(payload['inspecoes'])}")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,19 @@
seq;sigla_mnt;descricao_mnt;referencia;tipo_vencimento;zera_tso;letra;nivel;nivel_descricao;var_media;duracao;duracao_valor;duracao_unidade;controle_original;intervalo_horas_voo;intervalo_horas_voo_valor;intervalo_meses_continuos;intervalo_meses_continuos_valor;intervalo_pousos;intervalo_pousos_valor;intervalos
2;INSP 1A;INSPEÇÃO CHECK 1A;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;A;B;Base;3;3 D;3;dias;N A B 3 3 D;300:00 HORAS DE VOO;300;8 MESES CONTÍNUOS;8;;;300:00 HORAS DE VOO | 8 MESES CONTÍNUOS
3;INSP 2A;INSPEÇÃO CHECK 2A;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;A;B;Base;10;4 D;4;dias;N A B 10 4 D;600:00 HORAS DE VOO;600;16 MESES CONTÍNUOS;16;;;600:00 HORAS DE VOO | 16 MESES CONTÍNUOS
4;INSP 3A;INSPEÇÃO CHECK 3A;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;A;B;Base;10;5 D;5;dias;N A B 10 5 D;900:00 HORAS DE VOO;900;24 MESES CONTÍNUOS;24;;;900:00 HORAS DE VOO | 24 MESES CONTÍNUOS
5;INSP 2Y;INSPEÇÃO CALENDÁRICA DE 2 YEARS;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;B;B;Base;5;5 D;5;dias;N B B 5 5 D;;;24 MESES CONTÍNUOS;24;;;24 MESES CONTÍNUOS
6;CHECK 300;CHECK OPERACIONAL DE 300FH;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;A;O;Orgânico;;6 H;6;horas;N A O 6 H;300:00 HORAS DE VOO;300;;;;;300:00 HORAS DE VOO
7;CHECK 400;CHECK OPERACIONAL DE 400FH;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;A;O;Orgânico;;6 H;6;horas;N A O 6 H;400:00 HORAS DE VOO;400;;;;;400:00 HORAS DE VOO
8;1-INSP AOL;INSPEÇÃO AOL 295-019;Última inspeção;Término da Anterior;N;;B;Base;;1 D;1;dias;N B 1 D;;;;;3800 POUSOS;3800;3800 POUSOS
9;2-INSP AOL;INSPEÇÃO AOL 295-019;Última Inspeção Específica 8 1-INSP AOL;Término da Anterior;N;;B;Base;;1 D;1;dias;N B 1 D;;;;;2000 POUSOS;2000;2000 POUSOS
10;3-INSP AOL;INSPEÇÃO AOL 295-019;Última Inspeção Específica 9 2-INSP AOL;Término da Anterior;N;;B;Base;;1 D;1;dias;N B 1 D;;;;;2000 POUSOS;2000;2000 POUSOS
14;INSP 8Y;INSPEÇÃO CALENDÁRICA DE 8 YEARS;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;B;P;Parque;15;20 D;20;dias;N B P 15 20 D;;;96 MESES CONTÍNUOS;96;;;96 MESES CONTÍNUOS
15;INSP 1C;INSPEÇÃO CHECK 1C;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;C;P;Parque;10;65 D;65;dias;N C P 10 65 D;2400:00 HORAS DE VOO;2400;48 MESES CONTÍNUOS;48;;;2400:00 HORAS DE VOO | 48 MESES CONTÍNUOS
16;INSP 2C;INSPEÇÃO GERAL CHECK 2C;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;C;P;Parque;60;10 D;10;dias;N C P 60 10 D;4800:00 HORAS DE VOO;4800;96 MESES CONTÍNUOS;96;;;4800:00 HORAS DE VOO | 96 MESES CONTÍNUOS
17;INSP 4Y;INSPEÇÃO CALENDÁRICA DE 4 YEARS;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;B;P;Parque;10;10 D;10;dias;N B P 10 10 D;;;48 MESES CONTÍNUOS;48;;;48 MESES CONTÍNUOS
18;INSP 100FH BR01;INSPEÇÃO DE 100 FH;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;;O;Orgânico;;1 H;1;horas;N O 1 H;100:00 HORAS DE VOO;100;;;;;100:00 HORAS DE VOO
19;INSP 2400F BR01;INPEÇÃO 2400FH;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;;O;Orgânico;;3 H;3;horas;N O 3 H;2400:00 HORAS DE VOO;2400;;;;;2400:00 HORAS DE VOO
20;INSP 3000F BR01;INSPEÇÃO 3000FH;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;;B;Base;;1 D;1;dias;N B 1 D;3000:00 HORAS DE VOO;3000;;;;;3000:00 HORAS DE VOO
22;INSP 1000F;INPEÇÃO 1000FH;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;;B;Base;;1 D;1;dias;N B 1 D;1000:00 HORAS DE VOO;1000;;;;;1000:00 HORAS DE VOO
23;INSP 50FH;INSPEÇÃO 50 FH;Especial (a contar dela mesma - Tipo D);Término da Anterior;N;;B;Base;;1 D;1;dias;N B 1 D;50:00 HORAS DE VOO;50;;;;;50:00 HORAS DE VOO
1 seq sigla_mnt descricao_mnt referencia tipo_vencimento zera_tso letra nivel nivel_descricao var_media duracao duracao_valor duracao_unidade controle_original intervalo_horas_voo intervalo_horas_voo_valor intervalo_meses_continuos intervalo_meses_continuos_valor intervalo_pousos intervalo_pousos_valor intervalos
2 2 INSP 1A INSPEÇÃO CHECK 1A Especial (a contar dela mesma - Tipo D) Término da Anterior N A B Base 3 3 D 3 dias N A B 3 3 D 300:00 HORAS DE VOO 300 8 MESES CONTÍNUOS 8 300:00 HORAS DE VOO | 8 MESES CONTÍNUOS
3 3 INSP 2A INSPEÇÃO CHECK 2A Especial (a contar dela mesma - Tipo D) Término da Anterior N A B Base 10 4 D 4 dias N A B 10 4 D 600:00 HORAS DE VOO 600 16 MESES CONTÍNUOS 16 600:00 HORAS DE VOO | 16 MESES CONTÍNUOS
4 4 INSP 3A INSPEÇÃO CHECK 3A Especial (a contar dela mesma - Tipo D) Término da Anterior N A B Base 10 5 D 5 dias N A B 10 5 D 900:00 HORAS DE VOO 900 24 MESES CONTÍNUOS 24 900:00 HORAS DE VOO | 24 MESES CONTÍNUOS
5 5 INSP 2Y INSPEÇÃO CALENDÁRICA DE 2 YEARS Especial (a contar dela mesma - Tipo D) Término da Anterior N B B Base 5 5 D 5 dias N B B 5 5 D 24 MESES CONTÍNUOS 24 24 MESES CONTÍNUOS
6 6 CHECK 300 CHECK OPERACIONAL DE 300FH Especial (a contar dela mesma - Tipo D) Término da Anterior N A O Orgânico 6 H 6 horas N A O 6 H 300:00 HORAS DE VOO 300 300:00 HORAS DE VOO
7 7 CHECK 400 CHECK OPERACIONAL DE 400FH Especial (a contar dela mesma - Tipo D) Término da Anterior N A O Orgânico 6 H 6 horas N A O 6 H 400:00 HORAS DE VOO 400 400:00 HORAS DE VOO
8 8 1-INSP AOL INSPEÇÃO AOL 295-019 Última inspeção Término da Anterior N B Base 1 D 1 dias N B 1 D 3800 POUSOS 3800 3800 POUSOS
9 9 2-INSP AOL INSPEÇÃO AOL 295-019 Última Inspeção Específica 8 1-INSP AOL Término da Anterior N B Base 1 D 1 dias N B 1 D 2000 POUSOS 2000 2000 POUSOS
10 10 3-INSP AOL INSPEÇÃO AOL 295-019 Última Inspeção Específica 9 2-INSP AOL Término da Anterior N B Base 1 D 1 dias N B 1 D 2000 POUSOS 2000 2000 POUSOS
11 14 INSP 8Y INSPEÇÃO CALENDÁRICA DE 8 YEARS Especial (a contar dela mesma - Tipo D) Término da Anterior N B P Parque 15 20 D 20 dias N B P 15 20 D 96 MESES CONTÍNUOS 96 96 MESES CONTÍNUOS
12 15 INSP 1C INSPEÇÃO CHECK 1C Especial (a contar dela mesma - Tipo D) Término da Anterior N C P Parque 10 65 D 65 dias N C P 10 65 D 2400:00 HORAS DE VOO 2400 48 MESES CONTÍNUOS 48 2400:00 HORAS DE VOO | 48 MESES CONTÍNUOS
13 16 INSP 2C INSPEÇÃO GERAL CHECK 2C Especial (a contar dela mesma - Tipo D) Término da Anterior N C P Parque 60 10 D 10 dias N C P 60 10 D 4800:00 HORAS DE VOO 4800 96 MESES CONTÍNUOS 96 4800:00 HORAS DE VOO | 96 MESES CONTÍNUOS
14 17 INSP 4Y INSPEÇÃO CALENDÁRICA DE 4 YEARS Especial (a contar dela mesma - Tipo D) Término da Anterior N B P Parque 10 10 D 10 dias N B P 10 10 D 48 MESES CONTÍNUOS 48 48 MESES CONTÍNUOS
15 18 INSP 100FH BR01 INSPEÇÃO DE 100 FH Especial (a contar dela mesma - Tipo D) Término da Anterior N O Orgânico 1 H 1 horas N O 1 H 100:00 HORAS DE VOO 100 100:00 HORAS DE VOO
16 19 INSP 2400F BR01 INPEÇÃO 2400FH Especial (a contar dela mesma - Tipo D) Término da Anterior N O Orgânico 3 H 3 horas N O 3 H 2400:00 HORAS DE VOO 2400 2400:00 HORAS DE VOO
17 20 INSP 3000F BR01 INSPEÇÃO 3000FH Especial (a contar dela mesma - Tipo D) Término da Anterior N B Base 1 D 1 dias N B 1 D 3000:00 HORAS DE VOO 3000 3000:00 HORAS DE VOO
18 22 INSP 1000F INPEÇÃO 1000FH Especial (a contar dela mesma - Tipo D) Término da Anterior N B Base 1 D 1 dias N B 1 D 1000:00 HORAS DE VOO 1000 1000:00 HORAS DE VOO
19 23 INSP 50FH INSPEÇÃO 50 FH Especial (a contar dela mesma - Tipo D) Término da Anterior N B Base 1 D 1 dias N B 1 D 50:00 HORAS DE VOO 50 50:00 HORAS DE VOO

View File

@@ -0,0 +1,489 @@
{
"fonte": "raw\\relatorio_ciclo_inspecoes_c105_2805_2026-06-15.pdf",
"metadados": {
"data_relatorio": "15/06/2026",
"hora_relatorio": "13:23:38",
"pn": "ANV C-105",
"cff": "0117B",
"nomenclatura": "AERONAVE, ASA FIXA, CASA 295 (C-105 AMAZONAS)",
"sn": "038",
"matricula": "2805",
"modelo": "C-105",
"ciclo_atual": "3650007082"
},
"inspecoes": [
{
"seq": 2,
"sigla_mnt": "INSP 1A",
"descricao_mnt": "INSPEÇÃO CHECK 1A",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "A",
"nivel": "B",
"nivel_descricao": "Base",
"var_media": "3",
"duracao": "3 D",
"duracao_valor": 3,
"duracao_unidade": "dias",
"controle_original": "N A B 3 3 D",
"intervalo_horas_voo": "300:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 300,
"intervalo_meses_continuos": "8 MESES CONTÍNUOS",
"intervalo_meses_continuos_valor": 8,
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"300:00 HORAS DE VOO",
"8 MESES CONTÍNUOS"
],
"linha_original": "2 INSP 1A INSPEÇÃO CHECK 1A Especial (a contar dela mesma Término da Anterior N A B 3 3 D 300:00 HORAS DE VÔO - Tipo D) 8 MESES CONTÍNUOS"
},
{
"seq": 3,
"sigla_mnt": "INSP 2A",
"descricao_mnt": "INSPEÇÃO CHECK 2A",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "A",
"nivel": "B",
"nivel_descricao": "Base",
"var_media": "10",
"duracao": "4 D",
"duracao_valor": 4,
"duracao_unidade": "dias",
"controle_original": "N A B 10 4 D",
"intervalo_horas_voo": "600:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 600,
"intervalo_meses_continuos": "16 MESES CONTÍNUOS",
"intervalo_meses_continuos_valor": 16,
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"600:00 HORAS DE VOO",
"16 MESES CONTÍNUOS"
],
"linha_original": "3 INSP 2A INSPEÇÃO CHECK 2A Especial (a contar dela mesma Término da Anterior N A B 10 4 D 600:00 HORAS DE VÔO - Tipo D) 16 MESES CONTÍNUOS"
},
{
"seq": 4,
"sigla_mnt": "INSP 3A",
"descricao_mnt": "INSPEÇÃO CHECK 3A",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "A",
"nivel": "B",
"nivel_descricao": "Base",
"var_media": "10",
"duracao": "5 D",
"duracao_valor": 5,
"duracao_unidade": "dias",
"controle_original": "N A B 10 5 D",
"intervalo_horas_voo": "900:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 900,
"intervalo_meses_continuos": "24 MESES CONTÍNUOS",
"intervalo_meses_continuos_valor": 24,
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"900:00 HORAS DE VOO",
"24 MESES CONTÍNUOS"
],
"linha_original": "4 INSP 3A INSPEÇÃO CHECK 3A Especial (a contar dela mesma Término da Anterior N A B 10 5 D 900:00 HORAS DE VÔO - Tipo D) 24 MESES CONTÍNUOS"
},
{
"seq": 5,
"sigla_mnt": "INSP 2Y",
"descricao_mnt": "INSPEÇÃO CALENDÁRICA DE 2 YEARS",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "B",
"nivel": "B",
"nivel_descricao": "Base",
"var_media": "5",
"duracao": "5 D",
"duracao_valor": 5,
"duracao_unidade": "dias",
"controle_original": "N B B 5 5 D",
"intervalo_horas_voo": "",
"intervalo_horas_voo_valor": "",
"intervalo_meses_continuos": "24 MESES CONTÍNUOS",
"intervalo_meses_continuos_valor": 24,
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"24 MESES CONTÍNUOS"
],
"linha_original": "5 INSP 2Y INSPEÇÃO CALENDÁRICA DE 2 YEARS Especial (a contar dela mesma Término da Anterior N B B 5 5 D 24 MESES CONTÍNUOS - Tipo D)"
},
{
"seq": 6,
"sigla_mnt": "CHECK 300",
"descricao_mnt": "CHECK OPERACIONAL DE 300FH",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "A",
"nivel": "O",
"nivel_descricao": "Orgânico",
"var_media": "",
"duracao": "6 H",
"duracao_valor": 6,
"duracao_unidade": "horas",
"controle_original": "N A O 6 H",
"intervalo_horas_voo": "300:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 300,
"intervalo_meses_continuos": "",
"intervalo_meses_continuos_valor": "",
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"300:00 HORAS DE VOO"
],
"linha_original": "6 CHECK 300 CHECK OPERACIONAL DE 300FH Especial (a contar dela mesma Término da Anterior N A O 6 H 300:00 HORAS DE VÔO - Tipo D)"
},
{
"seq": 7,
"sigla_mnt": "CHECK 400",
"descricao_mnt": "CHECK OPERACIONAL DE 400FH",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "A",
"nivel": "O",
"nivel_descricao": "Orgânico",
"var_media": "",
"duracao": "6 H",
"duracao_valor": 6,
"duracao_unidade": "horas",
"controle_original": "N A O 6 H",
"intervalo_horas_voo": "400:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 400,
"intervalo_meses_continuos": "",
"intervalo_meses_continuos_valor": "",
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"400:00 HORAS DE VOO"
],
"linha_original": "7 CHECK 400 CHECK OPERACIONAL DE 400FH Especial (a contar dela mesma Término da Anterior N A O 6 H 400:00 HORAS DE VÔO - Tipo D)"
},
{
"seq": 8,
"sigla_mnt": "1-INSP AOL",
"descricao_mnt": "INSPEÇÃO AOL 295-019",
"referencia": "Última inspeção",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "",
"nivel": "B",
"nivel_descricao": "Base",
"var_media": "",
"duracao": "1 D",
"duracao_valor": 1,
"duracao_unidade": "dias",
"controle_original": "N B 1 D",
"intervalo_horas_voo": "",
"intervalo_horas_voo_valor": "",
"intervalo_meses_continuos": "",
"intervalo_meses_continuos_valor": "",
"intervalo_pousos": "3800 POUSOS",
"intervalo_pousos_valor": 3800,
"intervalos": [
"3800 POUSOS"
],
"linha_original": "8 1-INSP AOL INSPEÇÃO AOL 295-019 Última inspeção Término da Anterior N B 1 D 3800 POUSOS"
},
{
"seq": 9,
"sigla_mnt": "2-INSP AOL",
"descricao_mnt": "INSPEÇÃO AOL 295-019",
"referencia": "Última Inspeção Específica 8 1-INSP AOL",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "",
"nivel": "B",
"nivel_descricao": "Base",
"var_media": "",
"duracao": "1 D",
"duracao_valor": 1,
"duracao_unidade": "dias",
"controle_original": "N B 1 D",
"intervalo_horas_voo": "",
"intervalo_horas_voo_valor": "",
"intervalo_meses_continuos": "",
"intervalo_meses_continuos_valor": "",
"intervalo_pousos": "2000 POUSOS",
"intervalo_pousos_valor": 2000,
"intervalos": [
"2000 POUSOS"
],
"linha_original": "9 2-INSP AOL INSPEÇÃO AOL 295-019 Última Inspeção Específica 8 1-INSP AOL Término da Anterior N B 1 D 2000 POUSOS"
},
{
"seq": 10,
"sigla_mnt": "3-INSP AOL",
"descricao_mnt": "INSPEÇÃO AOL 295-019",
"referencia": "Última Inspeção Específica 9 2-INSP AOL",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "",
"nivel": "B",
"nivel_descricao": "Base",
"var_media": "",
"duracao": "1 D",
"duracao_valor": 1,
"duracao_unidade": "dias",
"controle_original": "N B 1 D",
"intervalo_horas_voo": "",
"intervalo_horas_voo_valor": "",
"intervalo_meses_continuos": "",
"intervalo_meses_continuos_valor": "",
"intervalo_pousos": "2000 POUSOS",
"intervalo_pousos_valor": 2000,
"intervalos": [
"2000 POUSOS"
],
"linha_original": "10 3-INSP AOL INSPEÇÃO AOL 295-019 Última Inspeção Específica 9 2-INSP AOL Término da Anterior N B 1 D 2000 POUSOS"
},
{
"seq": 14,
"sigla_mnt": "INSP 8Y",
"descricao_mnt": "INSPEÇÃO CALENDÁRICA DE 8 YEARS",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "B",
"nivel": "P",
"nivel_descricao": "Parque",
"var_media": "15",
"duracao": "20 D",
"duracao_valor": 20,
"duracao_unidade": "dias",
"controle_original": "N B P 15 20 D",
"intervalo_horas_voo": "",
"intervalo_horas_voo_valor": "",
"intervalo_meses_continuos": "96 MESES CONTÍNUOS",
"intervalo_meses_continuos_valor": 96,
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"96 MESES CONTÍNUOS"
],
"linha_original": "14 INSP 8Y INSPEÇÃO CALENDÁRICA DE 8 YEARS Especial (a contar dela mesma Término da Anterior N B P 15 20 D 96 MESES CONTÍNUOS - Tipo D)"
},
{
"seq": 15,
"sigla_mnt": "INSP 1C",
"descricao_mnt": "INSPEÇÃO CHECK 1C",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "C",
"nivel": "P",
"nivel_descricao": "Parque",
"var_media": "10",
"duracao": "65 D",
"duracao_valor": 65,
"duracao_unidade": "dias",
"controle_original": "N C P 10 65 D",
"intervalo_horas_voo": "2400:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 2400,
"intervalo_meses_continuos": "48 MESES CONTÍNUOS",
"intervalo_meses_continuos_valor": 48,
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"2400:00 HORAS DE VOO",
"48 MESES CONTÍNUOS"
],
"linha_original": "15 INSP 1C INSPEÇÃO CHECK 1C Especial (a contar dela mesma Término da Anterior N C P 10 65 D 2400:00 HORAS DE VÔO - Tipo D) 48 MESES CONTÍNUOS"
},
{
"seq": 16,
"sigla_mnt": "INSP 2C",
"descricao_mnt": "INSPEÇÃO GERAL CHECK 2C",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "C",
"nivel": "P",
"nivel_descricao": "Parque",
"var_media": "60",
"duracao": "10 D",
"duracao_valor": 10,
"duracao_unidade": "dias",
"controle_original": "N C P 60 10 D",
"intervalo_horas_voo": "4800:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 4800,
"intervalo_meses_continuos": "96 MESES CONTÍNUOS",
"intervalo_meses_continuos_valor": 96,
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"4800:00 HORAS DE VOO",
"96 MESES CONTÍNUOS"
],
"linha_original": "16 INSP 2C INSPEÇÃO GERAL CHECK 2C Especial (a contar dela mesma Término da Anterior N C P 60 10 D 4800:00 HORAS DE VÔO - Tipo D) 96 MESES CONTÍNUOS"
},
{
"seq": 17,
"sigla_mnt": "INSP 4Y",
"descricao_mnt": "INSPEÇÃO CALENDÁRICA DE 4 YEARS",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "B",
"nivel": "P",
"nivel_descricao": "Parque",
"var_media": "10",
"duracao": "10 D",
"duracao_valor": 10,
"duracao_unidade": "dias",
"controle_original": "N B P 10 10 D",
"intervalo_horas_voo": "",
"intervalo_horas_voo_valor": "",
"intervalo_meses_continuos": "48 MESES CONTÍNUOS",
"intervalo_meses_continuos_valor": 48,
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"48 MESES CONTÍNUOS"
],
"linha_original": "17 INSP 4Y INSPEÇÃO CALENDÁRICA DE 4 YEARS Especial (a contar dela mesma Término da Anterior N B P 10 10 D 48 MESES CONTÍNUOS - Tipo D)"
},
{
"seq": 18,
"sigla_mnt": "INSP 100FH BR01",
"descricao_mnt": "INSPEÇÃO DE 100 FH",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "",
"nivel": "O",
"nivel_descricao": "Orgânico",
"var_media": "",
"duracao": "1 H",
"duracao_valor": 1,
"duracao_unidade": "horas",
"controle_original": "N O 1 H",
"intervalo_horas_voo": "100:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 100,
"intervalo_meses_continuos": "",
"intervalo_meses_continuos_valor": "",
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"100:00 HORAS DE VOO"
],
"linha_original": "18 INSP 100FH BR01 INSPEÇÃO DE 100 FH Especial (a contar dela mesma Término da Anterior N O 1 H 100:00 HORAS DE VÔO - Tipo D)"
},
{
"seq": 19,
"sigla_mnt": "INSP 2400F BR01",
"descricao_mnt": "INPEÇÃO 2400FH",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "",
"nivel": "O",
"nivel_descricao": "Orgânico",
"var_media": "",
"duracao": "3 H",
"duracao_valor": 3,
"duracao_unidade": "horas",
"controle_original": "N O 3 H",
"intervalo_horas_voo": "2400:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 2400,
"intervalo_meses_continuos": "",
"intervalo_meses_continuos_valor": "",
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"2400:00 HORAS DE VOO"
],
"linha_original": "19 INSP 2400F BR01 INPEÇÃO 2400FH Especial (a contar dela mesma Término da Anterior N O 3 H 2400:00 HORAS DE VÔO - Tipo D)"
},
{
"seq": 20,
"sigla_mnt": "INSP 3000F BR01",
"descricao_mnt": "INSPEÇÃO 3000FH",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "",
"nivel": "B",
"nivel_descricao": "Base",
"var_media": "",
"duracao": "1 D",
"duracao_valor": 1,
"duracao_unidade": "dias",
"controle_original": "N B 1 D",
"intervalo_horas_voo": "3000:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 3000,
"intervalo_meses_continuos": "",
"intervalo_meses_continuos_valor": "",
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"3000:00 HORAS DE VOO"
],
"linha_original": "20 INSP 3000F BR01 INSPEÇÃO 3000FH Especial (a contar dela mesma Término da Anterior N B 1 D 3000:00 HORAS DE VÔO - Tipo D)"
},
{
"seq": 22,
"sigla_mnt": "INSP 1000F",
"descricao_mnt": "INPEÇÃO 1000FH",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "",
"nivel": "B",
"nivel_descricao": "Base",
"var_media": "",
"duracao": "1 D",
"duracao_valor": 1,
"duracao_unidade": "dias",
"controle_original": "N B 1 D",
"intervalo_horas_voo": "1000:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 1000,
"intervalo_meses_continuos": "",
"intervalo_meses_continuos_valor": "",
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"1000:00 HORAS DE VOO"
],
"linha_original": "22 INSP 1000F INPEÇÃO 1000FH Especial (a contar dela mesma Término da Anterior N B 1 D 1000:00 HORAS DE VÔO - Tipo D)"
},
{
"seq": 23,
"sigla_mnt": "INSP 50FH",
"descricao_mnt": "INSPEÇÃO 50 FH",
"referencia": "Especial (a contar dela mesma - Tipo D)",
"tipo_vencimento": "Término da Anterior",
"zera_tso": "N",
"letra": "",
"nivel": "B",
"nivel_descricao": "Base",
"var_media": "",
"duracao": "1 D",
"duracao_valor": 1,
"duracao_unidade": "dias",
"controle_original": "N B 1 D",
"intervalo_horas_voo": "50:00 HORAS DE VOO",
"intervalo_horas_voo_valor": 50,
"intervalo_meses_continuos": "",
"intervalo_meses_continuos_valor": "",
"intervalo_pousos": "",
"intervalo_pousos_valor": "",
"intervalos": [
"50:00 HORAS DE VOO"
],
"linha_original": "23 INSP 50FH INSPEÇÃO 50 FH Especial (a contar dela mesma Término da Anterior N B 1 D 50:00 HORAS DE VÔO - Tipo D)"
}
]
}

View File

@@ -0,0 +1,46 @@
SISTEMA INTEGRADO DE LOGÍSTICA DE MATERIAL E DE SERVIÇOS Pág.: 1 de 1
BASE AÉREA DE MANAUS Data: 15/06/2026
Hora: 13:23:38
RELATÓRIO DE CICLO DE INSPEÇÕES DO EQUIPAMENTO
CTR0142R v.10.5
PN: ANV C-105 CFF: 0117B Nomenclatura: AERONAVE, ASA FIXA, CASA 295 (C-105 AMAZONAS)
SN: 038 Matrícula: 2805 Modelo: C-105 Ciclo Atual: 3650007082
Seq. Sigla da MNT Descrição da MNT Referência Referência Tipo"E" Vencimento Zera TSO Letra Nível Var. Média Duração Intervalo Controle
2 INSP 1A INSPEÇÃO CHECK 1A Especial (a contar dela mesma Término da Anterior N A B 3 3 D 300:00 HORAS DE VÔO
- Tipo D)
8 MESES CONTÍNUOS
3 INSP 2A INSPEÇÃO CHECK 2A Especial (a contar dela mesma Término da Anterior N A B 10 4 D 600:00 HORAS DE VÔO
- Tipo D)
16 MESES CONTÍNUOS
4 INSP 3A INSPEÇÃO CHECK 3A Especial (a contar dela mesma Término da Anterior N A B 10 5 D 900:00 HORAS DE VÔO
- Tipo D)
24 MESES CONTÍNUOS
5 INSP 2Y INSPEÇÃO CALENDÁRICA DE 2 YEARS Especial (a contar dela mesma Término da Anterior N B B 5 5 D 24 MESES CONTÍNUOS
- Tipo D)
6 CHECK 300 CHECK OPERACIONAL DE 300FH Especial (a contar dela mesma Término da Anterior N A O 6 H 300:00 HORAS DE VÔO
- Tipo D)
7 CHECK 400 CHECK OPERACIONAL DE 400FH Especial (a contar dela mesma Término da Anterior N A O 6 H 400:00 HORAS DE VÔO
- Tipo D)
8 1-INSP AOL INSPEÇÃO AOL 295-019 Última inspeção Término da Anterior N B 1 D 3800 POUSOS
9 2-INSP AOL INSPEÇÃO AOL 295-019 Última Inspeção Específica 8 1-INSP AOL Término da Anterior N B 1 D 2000 POUSOS
10 3-INSP AOL INSPEÇÃO AOL 295-019 Última Inspeção Específica 9 2-INSP AOL Término da Anterior N B 1 D 2000 POUSOS
14 INSP 8Y INSPEÇÃO CALENDÁRICA DE 8 YEARS Especial (a contar dela mesma Término da Anterior N B P 15 20 D 96 MESES CONTÍNUOS
- Tipo D)
15 INSP 1C INSPEÇÃO CHECK 1C Especial (a contar dela mesma Término da Anterior N C P 10 65 D 2400:00 HORAS DE VÔO
- Tipo D)
48 MESES CONTÍNUOS
16 INSP 2C INSPEÇÃO GERAL CHECK 2C Especial (a contar dela mesma Término da Anterior N C P 60 10 D 4800:00 HORAS DE VÔO
- Tipo D)
96 MESES CONTÍNUOS
17 INSP 4Y INSPEÇÃO CALENDÁRICA DE 4 YEARS Especial (a contar dela mesma Término da Anterior N B P 10 10 D 48 MESES CONTÍNUOS
- Tipo D)
18 INSP 100FH BR01 INSPEÇÃO DE 100 FH Especial (a contar dela mesma Término da Anterior N O 1 H 100:00 HORAS DE VÔO
- Tipo D)
19 INSP 2400F BR01 INPEÇÃO 2400FH Especial (a contar dela mesma Término da Anterior N O 3 H 2400:00 HORAS DE VÔO
- Tipo D)
20 INSP 3000F BR01 INSPEÇÃO 3000FH Especial (a contar dela mesma Término da Anterior N B 1 D 3000:00 HORAS DE VÔO
- Tipo D)
22 INSP 1000F INPEÇÃO 1000FH Especial (a contar dela mesma Término da Anterior N B 1 D 1000:00 HORAS DE VÔO
- Tipo D)
23 INSP 50FH INSPEÇÃO 50 FH Especial (a contar dela mesma Término da Anterior N B 1 D 50:00 HORAS DE VÔO
- Tipo D)