Files
GTI_GERENCIADOR_FISCAL/central/scripts/import_bootstrap_v1_extra.py
T

47 lines
2.4 KiB
Python

"""Promote CFOP/FCP/ANP/NCM_UTRIB/RTC_BIOFUEL_INDEX/RTC_CCREDPRES from the
official spreadsheets the operator placed in sources/raw/bootstrap_v1/ after
the Portal NF-e/SPED downloads were session-blocked. No network fetch.
"""
import json
from datetime import datetime, timezone
from pathlib import Path
from central.app.datasets import bootstrap_v1_extra as parsers
from central.app.datasets.service import DatasetService
from central.app.db import SessionLocal
ROOT = Path("sources/raw/bootstrap_v1")
JOBS = [
("CFOP", ROOT / "IT_2023_002_v2_10_Tabela_CFOP_Descrição.xlsx", parsers.parse_cfop, "import_cfop"),
("FCP", ROOT / "Tabela_Alíquotas_FCP_por_UF_2025-02_07.xlsx", parsers.parse_fcp, "import_fcp"),
("ANP", ROOT / "Tabela_Codigo_Produto_ANP-20241118.xlsx", parsers.parse_anp, "import_anp"),
("NCM_UTRIB", ROOT / "IT2024.001v2.40 - Tabela NCM 2022 com Utrib_Comércio Exterior_vigência 01.10.26.xlsx", parsers.parse_ncm_utrib, "import_ncm_utrib"),
("RTC_BIOFUEL_INDEX", ROOT / "IT 2025.004 v.1.20 - Tabela de Índice.xlsx", parsers.parse_rtc_biofuel_index, "import_rtc_biofuel_index"),
("RTC_CCREDPRES", ROOT / "cCredPres_2026-06-22.xlsx", parsers.parse_rtc_cred_pres, "import_rtc_cred_pres"),
("RTC_CCLASSTRIB", ROOT / "cClassTrib 2026-06-22.xlsx", parsers.parse_rtc_cclasstrib, "import_rtc_cclasstrib"),
("RTC_CBS_RATES", ROOT / "IT 2026.002 v.1.00 - Aliquotas da CBS.xlsx", parsers.parse_rtc_cbs_rates, "import_rtc_cbs_rates"),
]
def main():
results = {}
with SessionLocal() as session:
service = DatasetService(session)
for domain, path, parse_fn, method_name in JOBS:
try:
if not path.exists():
results[domain] = {"status": "MISSING_BOOTSTRAP_FILE", "path": str(path)}
continue
payload = parse_fn(path.read_bytes())
dataset = getattr(service, method_name)(payload, f"file://{path.name}", datetime.now(timezone.utc))
results[domain] = {"status": dataset.status, "dataset_id": dataset.id, "sha256": dataset.sha256, "record_count": dataset.record_count}
except Exception as error: # noqa: BLE001 — isolate one domain's failure from the rest
results[domain] = {"status": "FAILED", "reason": f"{type(error).__name__}: {error}"}
print(json.dumps(results, indent=2, ensure_ascii=False))
if __name__ == "__main__":
main()