"""Compara setul operational de conturi cu parteneri cu snapshot-ul CONFIG_CONT_IREG. RAPORTEAZA divergentele, nu le aplica: nu scrie nimic in config/conturi_parteneri.csv si nu se conecteaza la Oracle. Snapshot-ul vine din sql/export_config_cont_ireg.sql sau, in lipsa unei rulari pe Oracle, din config/config_cont_ireg_snapshot.csv. Rulare: py tools/divergenta_parteneri.py config/config_cont_ireg_snapshot.csv """ import csv import os import sys RADACINA = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) CONFIG = os.path.join(RADACINA, "config", "conturi_parteneri.csv") def citeste_config(path=CONFIG): """Conturile cu parteneri tinute de noi (coloana cont din config).""" if not os.path.exists(path): raise SystemExit("lipseste configuratorul de parteneri: %s" % path) conturi = set() with open(path, encoding="utf-8-sig", newline="") as f: for r in csv.DictReader(f): cont = (r.get("cont") or "").strip() if cont: conturi.add(cont) return conturi def citeste_snapshot(path): """Conturile CU_INREGISTRARI = 1 din snapshot; ignora comentariile si antetul.""" if not os.path.exists(path): raise SystemExit("lipseste snapshot-ul: %s" % path) conturi = set() primul = True with open(path, encoding="utf-8-sig") as f: for linie in f: linie = linie.strip() if not linie or linie.startswith("#"): continue valoare = linie.split(",")[0].strip().strip('"').strip() if primul and valoare.lower() == "cont": primul = False continue primul = False if valoare: conturi.add(valoare) return conturi def main(argv): if len(argv) != 2: raise SystemExit("Utilizare: py tools/divergenta_parteneri.py ") noi = citeste_config() oracle = citeste_snapshot(argv[1]) doar_oracle = sorted(oracle - noi) doar_noi = sorted(noi - oracle) print("Conturi comparate: la noi %d, in Oracle %d" % (len(noi), len(oracle))) print("In Oracle, nu la noi (%d): %s" % (len(doar_oracle), ", ".join(doar_oracle) if doar_oracle else "(niciunul)")) print("La noi, nu in Oracle (%d): %s" % (len(doar_noi), ", ".join(doar_noi) if doar_noi else "(niciunul)")) return 0 if __name__ == "__main__": sys.exit(main(sys.argv))