Extend Rules Engine: Aggregate Trip-Level Policies
Context
You previously built an expense policy engine that evaluates per-expense rules (e.g., "a single meal cannot exceed $50"). Extend that system to support aggregate, trip-level rules that operate over groups of expenses for the same trip.
Assume each expense has at least: expenseId, tripId, employeeId, category, amount, currency, incurredAt. Currency normalization to a policy currency (e.g., USD) is available.
Requirements
Add support for aggregate rules including (but not limited to):
-
A trip’s total expenses cannot exceed $2,000.
-
Total meal expenses per trip cannot exceed $200.
In the provided sample, trip "002" violates both rules. Update the design and the evaluateRules return type so the output includes per-trip violations alongside per-expense violations.
Describe:
-
Grouping/aggregation strategy (how expenses are grouped and metrics computed)
-
Evaluation order (per-expense vs. per-trip and how updates flow)
-
Explainability for aggregates (what evidence is returned and how it’s human-readable)
-
Performance considerations (throughput, latency, incremental updates)
-
How these results integrate into the expenses API used by many companies
Provide:
-
Updated component design for aggregate rules
-
A precise return type/schema for evaluateRules that includes per-trip violations
-
A short, concrete example showing trip "002" violating both aggregates