feat: close autonomous operations for blocked products
This commit is contained in:
@@ -7,6 +7,7 @@ from datetime import datetime, timezone
|
||||
|
||||
from .ipi_auto_apply import ipi_write_decision
|
||||
from .runner import product_fingerprint
|
||||
from central.app.operational_state import classify_product_state, summarize_operational_states
|
||||
|
||||
|
||||
def now():
|
||||
@@ -27,6 +28,9 @@ def run_pipeline(products, decisions, state, firebird_writes, write_connection,
|
||||
"writes_failed": 0,
|
||||
"skipped_not_eligible": 0,
|
||||
"no_ops": 0,
|
||||
"product_states": [],
|
||||
"blocked_products": [],
|
||||
"resolved_products": [],
|
||||
}
|
||||
for product, decision in zip(products, decisions):
|
||||
code = product["CODIGO"]
|
||||
@@ -37,6 +41,22 @@ def run_pipeline(products, decisions, state, firebird_writes, write_connection,
|
||||
wd = ipi_write_decision(decision, current_ipi)
|
||||
decision_status = decision.get("status")
|
||||
ipi_status = decision.get("ipi_status")
|
||||
operational = classify_product_state(product, decision)
|
||||
summary["product_states"].append(operational)
|
||||
if operational["state"].startswith("BLOCKED_"):
|
||||
summary["blocked_products"].append({
|
||||
"company": product.get("COMPANY") or product.get("company") or "",
|
||||
"product_code": code,
|
||||
"gtin": product.get("GTIN") or product.get("EAN_GTIN"),
|
||||
"description": product.get("PRODUTO") or product.get("description"),
|
||||
"blocker_type": operational["state"],
|
||||
"field": "NCM",
|
||||
"reason_code": decision_status or "MISSING_EVIDENCE",
|
||||
"evidence_summary": {"decision_status": decision_status, "ipi_status": ipi_status},
|
||||
"input_fingerprint": fingerprint,
|
||||
})
|
||||
else:
|
||||
summary["resolved_products"].append(code)
|
||||
|
||||
if not firebird_writes:
|
||||
state.log_ipi_write(code, fingerprint, decision_status, ipi_status, "DRY_RUN_ONLY", current_ipi, wd["proposed_value"], None, wd["reason_code"], now())
|
||||
@@ -69,8 +89,11 @@ def run_pipeline(products, decisions, state, firebird_writes, write_connection,
|
||||
record = executor.execute_guarded_update(write_connection, database_path=database_path, proposal=proposal, now=now(), authorized_path=authorized_path)
|
||||
state.log_ipi_write(code, fingerprint, decision_status, ipi_status, "SUCCEEDED", record.before_value, record.after_value, f"rowcount={record.rowcount}", wd["reason_code"], now())
|
||||
summary["writes_succeeded"] += 1
|
||||
summary["product_states"][-1] = classify_product_state(product, decision, write_status="SUCCEEDED")
|
||||
except executor.WriteRefused as error:
|
||||
state.log_ipi_write(code, fingerprint, decision_status, ipi_status, "FAILED", current_ipi, wd["proposed_value"], str(error), wd["reason_code"], now())
|
||||
summary["writes_failed"] += 1
|
||||
summary["product_states"][-1] = classify_product_state(product, decision, write_status="FAILED")
|
||||
|
||||
summary["operational"] = summarize_operational_states(summary["product_states"])
|
||||
return summary
|
||||
|
||||
Reference in New Issue
Block a user