47 lines
2.4 KiB
Python
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()
|