"""Run the agent against a sanitized sample only after an explicit fingerprint gate.""" import argparse, json, os, sys from pathlib import Path sys.path.insert(0, str(Path(__file__).parents[1] / "src")) from gti_fiscal_agent.client import HubClient from gti_fiscal_agent.runner import run_sample from gti_fiscal_agent.state import AgentState FIELDS = "CODIGO,PRODUTO,NCM,CLASSIFICACAO_FISCAL,CFOP,CFOP_ENTRADA,CST,CST_ENTRADA,ALIQUOTA,CEST,CSOSN,COD_ENTRADA_COFINS,COD_SAIDA_COFINS,ALIQ_COFINS,COD_ENTRADA_PIS,COD_SAIDA_PIS,ALIQ_PIS,ALIQ_IPI,CST_IPI,ORIGEM,IAT,INCIDENCIA_PISCOFINS,IPPT,ULTIMA_ALTERACAO" def read_firebird_products(codes): import fdb connection = fdb.connect(database=os.environ["FIREBIRD_DATABASE_PATH"], user=os.environ["FB_USER"], password=os.environ["FB_PASSWORD"], fb_library_name=os.environ.get("FIREBIRD_CLIENT_LIBRARY"), isolation_level=fdb.ISOLATION_LEVEL_READ_COMMITED_RO) try: cursor = connection.cursor(); cursor.execute(f"SELECT {FIELDS} FROM C000025 WHERE CODIGO IN ({','.join('?' for _ in codes)}) ORDER BY CODIGO", tuple(codes)) names = [column[0].strip() for column in cursor.description] return [dict(zip(names, row)) for row in cursor.fetchall()] finally: connection.close() def main(): parser = argparse.ArgumentParser(); parser.add_argument("--sample", required=True); parser.add_argument("--output", required=True); parser.add_argument("--schema-fingerprint", default="") args = parser.parse_args(); sample = json.loads(Path(args.sample).read_text(encoding="utf-8")) codes = [item["CODIGO"] for item in sample.get("sample_without_ncm", [])[:20]] products = read_firebird_products(codes) result = run_sample(products, HubClient(os.getenv("HUB_URL", "http://localhost:8000"), os.getenv("AGENT_DEV_TOKEN", "")), AgentState(Path(args.output).with_suffix(".sqlite")), args.schema_fingerprint) result["products_requested"] = len(products); result["firebird_products_read"] = len(products); result["firebird_access"] = "READ_ONLY_SELECT" output = Path(args.output) if result["results"]: output.write_text(json.dumps(result, indent=2, default=str), encoding="utf-8") elif not output.exists(): output.write_text(json.dumps(result, indent=2, default=str), encoding="utf-8") print(json.dumps(result, indent=2)) if __name__ == "__main__": main()