def compute_dividend_entitlement(position_qty, cash_per_share):
gross = round(position_qty * cash_per_share, 2)
return {"type": "CASH", "gross": gross}
def build_evidence_pack(entitlement, citations,
model_version, rulepack_version):
return {
"entitlement": entitlement,
"citations": citations,
"meta": {
"model_version": model_version,
"rulepack_version": rulepack_version
}
}def match_score(rule_score, semantic_score, amount_delta):
amt_penalty = max(0, 1 - min(amount_delta, 1000)/1000)
return 0.5*rule_score + 0.35*semantic_score + 0.15*amt_penaltyexport function buildSlaSummary(tickets: any[]) {
const breaches = tickets.filter(t => t.slaBreached).length;
return {
total: tickets.length,
breaches,
compliance: 1 - breaches / tickets.length
};
}def utilization_penalty(util):
if util > 1.0:
return (util-1.0)*10
if util < 0.6:
return (0.6-util)*2
return 0def je_allowed(amount, restricted):
return abs(amount) <= 5000 and not restricteddef meets_criterion(facts, key):
return key in facts and facts[key] is not None