feat(plsql): CUI strict search + country filter for ANAF
PL/SQL cauta_partener_dupa_cod_fiscal gains p_strict_search param: - strict (=1): search only exact CUI form (ANAF-determined) - dual (NULL): search all forms (existing anti-dedup behavior) Skip denomination fallback when strict to force new partner creation. Python: country filter excludes foreign companies from ANAF batch, anaf_strict flag threaded sync→import→PL/SQL, normalize RO-space in cod_fiscal_adjusted comparison to eliminate false positives. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -653,10 +653,11 @@ async def run_sync(id_pol: int = None, id_sectie: int = None, run_id: str = None
|
||||
_log_line(run_id, f"ANAF pre-populare eroare: {e}")
|
||||
logger.warning(f"ANAF cache pre-population failed: {e}")
|
||||
|
||||
# Step 4: ANAF batch verification for company CUIs
|
||||
# Step 4: ANAF batch verification for company CUIs (RO companies only)
|
||||
company_cuis = set()
|
||||
for order in truly_importable:
|
||||
if order.billing.is_company and order.billing.company_code:
|
||||
is_ro = (order.billing.country or "").strip().lower() == "romania"
|
||||
if order.billing.is_company and order.billing.company_code and is_ro:
|
||||
raw_cf = import_service.clean_web_text(order.billing.company_code) or ""
|
||||
bare = anaf_service.strip_ro_prefix(raw_cf)
|
||||
if anaf_service.validate_cui(bare):
|
||||
@@ -709,11 +710,19 @@ async def run_sync(id_pol: int = None, id_sectie: int = None, run_id: str = None
|
||||
_log_line(run_id, f"#{order.number} CUI corectat: {raw_cf} → {correct_cf}")
|
||||
cod_fiscal_override = correct_cf
|
||||
|
||||
# Determine strict search mode: only when RO company + ANAF data available
|
||||
is_ro_company = (order.billing.is_company
|
||||
and (order.billing.country or "").strip().lower() == "romania")
|
||||
anaf_strict = None
|
||||
if is_ro_company and anaf_data_for_order and anaf_data_for_order.get("scpTVA") is not None:
|
||||
anaf_strict = 1 # ANAF data available → strict search
|
||||
|
||||
result = await asyncio.to_thread(
|
||||
import_service.import_single_order,
|
||||
order, id_pol=id_pol, id_sectie=id_sectie,
|
||||
app_settings=app_settings, id_gestiuni=id_gestiuni,
|
||||
cod_fiscal_override=cod_fiscal_override
|
||||
cod_fiscal_override=cod_fiscal_override,
|
||||
anaf_strict=anaf_strict
|
||||
)
|
||||
|
||||
# Build order items data for storage (R9)
|
||||
@@ -770,7 +779,12 @@ async def run_sync(id_pol: int = None, id_sectie: int = None, run_id: str = None
|
||||
"denumire_roa": result.get("denumire_roa"),
|
||||
"anaf_platitor_tva": (1 if anaf_data_for_order.get("scpTVA") else 0) if anaf_data_for_order and anaf_data_for_order.get("scpTVA") is not None else None,
|
||||
"anaf_checked_at": anaf_data_for_order.get("checked_at") if anaf_data_for_order else None,
|
||||
"anaf_cod_fiscal_adjusted": 1 if cod_fiscal_override and cod_fiscal_override != raw_cf else 0,
|
||||
"anaf_cod_fiscal_adjusted": 1 if (
|
||||
cod_fiscal_override
|
||||
and result.get("cod_fiscal_roa")
|
||||
and anaf_service.strip_ro_prefix(result["cod_fiscal_roa"]) == anaf_service.strip_ro_prefix(raw_cf)
|
||||
and result["cod_fiscal_roa"].strip().upper().replace("RO ", "RO") != raw_cf.strip().upper().replace("RO ", "RO")
|
||||
) else 0,
|
||||
"adresa_livrare_gomag": json.dumps({"address": order.shipping.address, "city": order.shipping.city, "region": order.shipping.region}) if order.shipping else None,
|
||||
"adresa_facturare_gomag": json.dumps({"address": order.billing.address, "city": order.billing.city, "region": order.billing.region}),
|
||||
"adresa_livrare_roa": json.dumps(result.get("adresa_livrare_roa")) if result.get("adresa_livrare_roa") else None,
|
||||
|
||||
Reference in New Issue
Block a user