"""Gate Firebird reads on the registered schema fingerprint.""" import hashlib, json REFERENCE_SCHEMA_V1 = "1198f89897532b643439f06b729e93b189018f56e7d478e95095f8f56977005b" def product_fingerprint(product): fields = ("PRODUTO", "EAN_GTIN", "NCM", "CLASSIFICACAO_FISCAL", "CFOP", "CST", "ALIQUOTA", "CEST", "CSOSN") return hashlib.sha256(json.dumps({key: product.get(key) for key in fields}, sort_keys=True, default=str).encode()).hexdigest() def to_hub_product(product): # C000025 has NCM empty and stores the confirmed eight-digit NCM in CLASSIFICACAO_FISCAL. return {"product_id": product["CODIGO"], "description": product.get("PRODUTO", ""), "gtin": product.get("EAN_GTIN"), "current_ncm": product.get("CLASSIFICACAO_FISCAL")} def run_sample(products, client, state, schema_fingerprint): if schema_fingerprint != REFERENCE_SCHEMA_V1: return {"status": "SCHEMA_UNKNOWN", "results": [], "firebird_writes": 0} outbound = [] for product in products: fingerprint = product_fingerprint(product) if state.enqueue(product["CODIGO"], fingerprint, "pending", "0.1.0"): outbound.append((product, fingerprint)) if not outbound: return {"status": "OK", "results": [], "firebird_writes": 0, "api_requests": 0} try: results = client.classify_batch([to_hub_product(product) for product, _ in outbound]) except Exception: for product, _ in outbound: state.retry(product["CODIGO"]) return {"status": "API_UNAVAILABLE", "results": [], "firebird_writes": 0} for (product, fingerprint), result in zip(outbound, results): state.result_received(product["CODIGO"], fingerprint, result["dataset_versions"].get("ncm") or "none", result["engine_version"]) return {"status": "OK", "results": results, "firebird_writes": 0, "api_requests": 1}