Correct zera TSO parsing

This commit is contained in:
Cesa-V
2026-06-15 16:03:33 -03:00
parent e7489c9c2a
commit 6289a7e1ad
4 changed files with 150 additions and 130 deletions

View File

@@ -33,16 +33,26 @@ def normalize_interval(value):
def parse_control_fields(tokens):
nivel_descricao = {
"B": "Base",
"P": "Parque",
"O": "Orgânico",
}
fields = {
"tso": "",
"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]
@@ -52,14 +62,24 @@ def parse_control_fields(tokens):
fields["duracao_unidade"] = "dias" if duracao_codigo == "D" else "horas"
if len(tokens) == 1:
fields["letra"] = tokens[0]
if tokens[0] in nivel_descricao:
fields["nivel"] = tokens[0]
else:
fields["letra"] = tokens[0]
elif len(tokens) >= 2:
fields["tso"] = tokens[0]
fields["letra"] = tokens[1]
if len(tokens) >= 3:
fields["nivel"] = tokens[2]
if len(tokens) >= 4:
fields["var_media"] = " ".join(tokens[3:])
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
@@ -122,8 +142,7 @@ def parse_record(record):
right_before_interval = INTERVAL_RE.split(right, maxsplit=1)[0].strip()
tokens = right_before_interval.split()
zera = tokens[0] if tokens else ""
controle_tokens = tokens[1:]
controle_tokens = tokens
controle = " ".join(controle_tokens)
control_fields = parse_control_fields(controle_tokens)
@@ -163,10 +182,10 @@ def parse_record(record):
"descricao_mnt": descricao,
"referencia": referencia,
"tipo_vencimento": "Término da Anterior",
"zera": zera,
"tso": control_fields["tso"],
"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"],
@@ -198,10 +217,10 @@ def main():
"descricao_mnt",
"referencia",
"tipo_vencimento",
"zera",
"tso",
"zera_tso",
"letra",
"nivel",
"nivel_descricao",
"var_media",
"duracao",
"duracao_valor",