git-subtree-dir: fiscal git-subtree-mainline:d95165fc8fgit-subtree-split:102ba84500
35 lines
2.3 KiB
Python
35 lines
2.3 KiB
Python
"""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()
|