54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
import json
|
|
import os
|
|
from decimal import Decimal
|
|
from time import perf_counter
|
|
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
|
|
import django
|
|
|
|
django.setup()
|
|
from django.contrib.auth.models import User
|
|
from django.db import connection
|
|
|
|
from finance.analysis import analyze, default_preferences
|
|
from finance.models import Dataset
|
|
|
|
if connection.vendor != "postgresql":
|
|
raise SystemExit("Reconciliation requires PostgreSQL exact NUMERIC aggregation")
|
|
ds = Dataset.objects.get(sha256="98ef41e898c24f0929a9da6ec185b7331f69f0478b52056cbc7834e1ef5877ec")
|
|
member = User.objects.get(username="admin").membership
|
|
start = perf_counter()
|
|
result = analyze(
|
|
ds,
|
|
member,
|
|
{
|
|
"start": "2026-08",
|
|
"end": "2026-08",
|
|
"comparison": "yoy",
|
|
"group": "department",
|
|
"metric": "revenue",
|
|
"filters": {},
|
|
},
|
|
default_preferences(ds),
|
|
)
|
|
assert ds.row_count == 332830
|
|
assert result["summary"]["revenue"]["current"] == Decimal("152419115.348455502666069")
|
|
assert result["summary"]["revenue"]["baseline"] == Decimal("225550255.4187610638720")
|
|
assert result["summary"]["gross"]["current"] == Decimal("17868580.85186759073400145")
|
|
assert result["summary"]["gross"]["baseline"] == Decimal("24790335.405853982758000")
|
|
assert result["summary"]["customers"]["current"] == 38361
|
|
assert result["summary"]["customers"]["baseline"] == 33147
|
|
assert result["summary"]["roi"]["current"] is None
|
|
assert sum(r["values"]["revenue"]["delta"] for r in result["rows"]) == result["summary"]["revenue"]["delta"]
|
|
report = {
|
|
"status": "passed",
|
|
"source": ds.name,
|
|
"sha256": ds.sha256,
|
|
"rows": ds.row_count,
|
|
"query_seconds": round(perf_counter() - start, 3),
|
|
"summary": result["summary"],
|
|
"quality": ds.quality,
|
|
"groups": len(result["rows"]),
|
|
}
|
|
print(json.dumps(report, ensure_ascii=False, default=str, indent=2))
|