Luma Payroll Gym
← Heatmap / GLM 5.3 Flash · Task 7
GLM 5.3 Flash · Single-turn · Task 7 (Calculation, wage cap binds) Mean 100.0%
Field Expected Rollout #1 (100%) Rollout #2 (100%) Rollout #3 (100%)
decision calculate calculate calculate calculate
currency LCR LCR LCR LCR
gross pay 8370.45 8370.45 8370.45 8370.45
employee contribution 200.00 200.00 200.00 200.00
allowed deduction 370.62 370.62 370.62 370.62
taxable pay 7799.83 7799.83 7799.83 7799.83
income tax 1267.96 1267.96 1267.96 1267.96
net pay 6531.87 6531.87 6531.87 6531.87
clauses R1 R2 R3 R4 R5 R6 R1 R2 R3 R4 R5 R6 R1 R2 R3 R4 R5 R6 R1 R2 R3 R4 R5 R6
Prompt
Process this monthly payroll record under the supplied rulebook. Return the R6 or R7 JSON answer.
Source documents: {"9869ba945ef7380b-payroll": {"kind": "payroll", "record": {"gross_pay": "8370.45", "payroll_month": "2026-05", "allowed_deduction": "370.62"}}}
Authoritative case reference schedule: {"first-half": {"rate": "0.04", "cap": "5000.00", "deduction": "400.00", "free": "1000.00", "upper": "3600.00", "middle_rate": "0.10", "upper_rate": "0.24"}, "second-half": {"rate": "0.04", "cap": "4000.00", "deduction": "400.00", "free": "1000.00", "upper": "3600.00", "middle_rate": "0.12", "upper_rate": "0.22"}}
Rollouts
Rollout #1 100.0% passed · 7.1s · $0.0007
ComponentScoreClauses
decision 100.0% R1 R2 R3 R4 R5 R6
exact 100.0% R1 R2 R3 R4 R5 R6
field accuracy 100.0% R1 R2 R3 R4 R5 R6
citations 100.0% R1 R2 R3 R4 R5 R6
Assistant
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "8370.45",
  "employee_contribution": "200.00",
  "allowed_deduction": "370.62",
  "taxable_pay": "7799.83",
  "income_tax": "1267.96",
  "net_pay": "6531.87",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "Payroll month 2026-05 selects the first-half row of the authoritative case schedule. Contribution: 0.04 \u00d7 min(8370.45, 5000.00) = 200.00. Deduction 370.62 is within the 400.00 cap and within gross pay minus contribution. Taxable pay: 8370.45 \u2212 200.00 \u2212 370.62 = 7799.83. Tax: first 1000.00 untaxed; (3600.00 \u2212 1000.00) \u00d7 0.10 = 260.00; (7799.83 \u2212 3600.00) \u00d7 0.24 = 1007.9592; total 1267.9592 \u2192 1267.96. Net pay: 8370.45 \u2212 200.00 \u2212 370.62 \u2212 1267.96 = 6531.87."
}
Reasoning
Let me work through this payroll calculation.

Input:
- gross_pay: 8370.45
- payroll_month: 2026-05
- allowed_deduction: 370.62

Case reference schedule (authoritative, replaces defaults):
- first-half (2026-01 through 2026-06): rate 0.04, cap 5000.00, deduction 400.00, free 1000.00, upper 3600.00, middle_rate 0.10, upper_rate 0.24
- second-half: rate 0.04, cap 4000.00, deduction 400.00, free 1000.00, upper 3600.00, middle_rate 0.12, upper_rate 0.22

Payroll month 2026-05 → first-half row.

Step 1: Employee contribution (R3): rate 0.04 × min(8370.45, 5000.00) = 0.04 × 5000.00 = 200.00. Rounded: 200.00.

Step 2: Allowed deduction (R4): 370.62. Check cap: 400.00 — OK. Check gross pay minus contribution: 8370.45 − 200.00 = 8170.45 — 370.62 ≤ 8170.45 — OK.

Step 3: Taxable pay: 8370.45 − 200.00 − 370.62 = 7799.83.

Step 4: Income tax (R5), marginal:
- Tax-free: 1000.00 → 0 tax.
- Middle bracket: from 1000.00 to 3600.00 → 2600.00 × 0.10 = 260.00.
- Upper bracket: above 3600.00 → 7799.83 − 3600.00 = 4199.83 × 0.24 = 1007.9592.
- Total tax = 260.00 + 1007.9592 = 1267.9592 → round half-up to 1267.96.

Step 5: Net pay (R6): 8370.45 − 200.00 − 370.62 − 1267.96 = 6531.87.

Let me verify: 8370.45 − 200.00 = 8170.45. 8170.45 − 370.62 = 7799.83. 7799.83 − 1267.96 = 6531.87.

Check upper bracket calculation: 4199.83 × 0.24 = 1007.9592. Yes. 0.24 × 4199.83 = 1007.9592. Total 1267.9592 → 1267.96.

Net pay: 6531.87.

Fields:
- decision: "calculate"
- currency: "LCR"
- gross_pay: "8370.45"
- employee_contribution: "200.00"
- allowed_deduction: "370.62"
- taxable_pay: "7799.83"
- income_tax: "1267.96"
- net_pay: "6531.87"
- clauses: R1 (row selection, schedule), R2 (rounding), R3 (contribution), R4 (deduction/taxable), R5 (tax), R6 (net pay/answer).

The schedule is authoritative per R1, so cite R1. No amendment needed.

Output JSON only, no markdown fences.
Rollout #2 100.0% passed · 13.9s · $0.0005
ComponentScoreClauses
decision 100.0% R1 R2 R3 R4 R5 R6
exact 100.0% R1 R2 R3 R4 R5 R6
field accuracy 100.0% R1 R2 R3 R4 R5 R6
citations 100.0% R1 R2 R3 R4 R5 R6
Assistant
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "8370.45",
  "employee_contribution": "200.00",
  "allowed_deduction": "370.62",
  "taxable_pay": "7799.83",
  "income_tax": "1267.96",
  "net_pay": "6531.87",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "Payroll month 2026-05 selects the first-half row of the authoritative case schedule (R1). Employee contribution = 0.04 \u00d7 min(8370.45, 5000.00) = 200.00 (R3). Allowed deduction 370.62 is within both the 400.00 cap and gross pay minus contribution (8170.45), so it stands (R4). Taxable pay = 8370.45 \u2212 200.00 \u2212 370.62 = 7799.83 (R4). Income tax: first 1000.00 untaxed, 2600.00 \u00d7 0.10 = 260.00, (7799.83 \u2212 3600.00) \u00d7 0.24 = 1007.9592; total 1267.9592 rounded to 1267.96 (R2, R5). Net pay = 8370.45 \u2212 200.00 \u2212 370.62 \u2212 1267.96 = 6531.87 (R6)."
}
Reasoning
Let me process this payroll record.

Input:
- gross_pay: 8370.45
- payroll_month: 2026-05
- allowed_deduction: 370.62

Payroll month 2026-05 is in first-half (2026-01 through 2026-06). There's an authoritative case reference schedule provided, so I use its first-half row:
- rate: 0.04
- cap: 5000.00
- deduction cap: 400.00
- tax-free: 1000.00
- upper bracket begins: 3600.00
- middle rate: 0.10
- upper rate: 0.24

Step 1: Employee contribution (R3):
contribution = rate × min(gross_pay, cap) = 0.04 × min(8370.45, 5000.00) = 0.04 × 5000.00 = 200.00
Rounded: 200.00

Step 2: Allowed deduction check (R4):
allowed_deduction = 370.62
- Must not exceed deduction cap: 400.00. 370.62 ≤ 400.00 ✓
- Must not exceed gross pay minus rounded employee contribution: 8370.45 − 200.00 = 8170.45. 370.62 ≤ 8170.45 ✓

So allowed_deduction = 370.62.

Step 3: Taxable pay (R4):
taxable_pay = gross_pay − employee_contribution − allowed_deduction = 8370.45 − 200.00 − 370.62 = 7799.83

Step 4: Income tax (R5):
- Tax-free amount: 1000.00
- Upper bracket begins: 3600.00
- Middle rate: 0.10
- Upper rate: 0.24

Portion up to 1000.00: untaxed.
Portion from 1000.00 to 3600.00: (3600.00 − 1000.00) × 0.10 = 2600.00 × 0.10 = 260.00
Portion above 3600.00: (7799.83 − 3600.00) × 0.24 = 4199.83 × 0.24 = 1007.9592

Total tax = 260.00 + 1007.9592 = 1267.9592
Round half-up to two decimals: 1267.96

Step 5: Net pay (R6):
net_pay = gross_pay − employee_contribution − allowed_deduction − income_tax
= 8370.45 − 200.00 − 370.62 − 1267.96
= 8370.45 − 200.00 = 8170.45
8170.45 − 370.62 = 7799.83
7799.83 − 1267.96 = 6531.87

Let me double check: 7799.83 − 1267.96 = 6531.87. Yes.

Fields:
- decision: "calculate"
- currency: "LCR"
- gross_pay: "8370.45"
- employee_contribution: "200.00"
- allowed_deduction: "370.62"
- taxable_pay: "7799.83"
- income_tax: "1267.96"
- net_pay: "6531.87"
- clauses: R1 (selecting row / schedule), R2 (rounding), R3 (contribution), R4 (deduction and taxable pay), R5 (income tax), R6 (net pay).

No amendment needed, no contract conflict (no contract_gross_pay present).

Citations: R1, R2, R3, R4, R5, R6.

Output as JSON without markdown fences.
Rollout #3 100.0% passed · 8.2s · $0.0006
ComponentScoreClauses
decision 100.0% R1 R2 R3 R4 R5 R6
exact 100.0% R1 R2 R3 R4 R5 R6
field accuracy 100.0% R1 R2 R3 R4 R5 R6
citations 100.0% R1 R2 R3 R4 R5 R6
Assistant
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "8370.45",
  "employee_contribution": "200.00",
  "allowed_deduction": "370.62",
  "taxable_pay": "7799.83",
  "income_tax": "1267.96",
  "net_pay": "6531.87",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "Payroll month 2026-05 selects the case schedule's first-half row (rate 0.04, cap 5000.00, deduction cap 400.00, free 1000.00, upper 3600.00, middle 0.10, upper rate 0.24). Contribution: 0.04 \u00d7 min(8370.45, 5000.00) = 200.00. Deduction 370.62 is within the 400.00 cap and within gross pay minus contribution. Taxable pay: 8370.45 \u2212 200.00 \u2212 370.62 = 7799.83. Tax: first 1000.00 untaxed; (3600.00 \u2212 1000.00) \u00d7 0.10 = 260.00; (7799.83 \u2212 3600.00) \u00d7 0.24 = 1007.9592; total 1267.9592 rounds to 1267.96. Net pay: 8370.45 \u2212 200.00 \u2212 370.62 \u2212 1267.96 = 6531.87."
}
Reasoning
Let me work through this payroll calculation.

Input:
- gross_pay: 8370.45
- payroll_month: 2026-05
- allowed_deduction: 370.62

Payroll month 2026-05 is in first-half (2026-01 through 2026-06), so use the case schedule's first-half row:
- rate: 0.04
- cap: 5000.00
- deduction cap: 400.00
- free: 1000.00
- upper: 3600.00
- middle_rate: 0.10
- upper_rate: 0.24

Step 1: Employee contribution (R3)
Contribution = rate × min(gross_pay, cap) = 0.04 × min(8370.45, 5000.00) = 0.04 × 5000.00 = 200.00

Step 2: Allowed deduction check (R4)
allowed_deduction = 370.62
- Must not exceed deduction cap (400.00): 370.62 ≤ 400.00 ✓
- Must not exceed gross pay minus rounded contribution: 8370.45 − 200.00 = 8170.45. 370.62 ≤ 8170.45 ✓

Step 3: Taxable pay (R4)
taxable_pay = gross_pay − contribution − allowed_deduction = 8370.45 − 200.00 − 370.62 = 7799.83

Step 4: Income tax (R5)
- Tax-free amount: 1000.00
- Upper bracket begins: 3600.00
- Middle rate: 0.10
- Upper rate: 0.24

Portion 1: 0 to 1000.00 → 1000.00 untaxed, tax = 0
Portion 2: 1000.00 to 3600.00 → 2600.00 × 0.10 = 260.00
Portion 3: above 3600.00 → 7799.83 − 3600.00 = 4199.83 × 0.24 = 1007.9592

Total tax = 260.00 + 1007.9592 = 1267.9592 → round half-up to 1267.96

Step 5: Net pay (R6)
net_pay = gross_pay − contribution − allowed_deduction − tax
= 8370.45 − 200.00 − 370.62 − 1267.96
= 8370.45 − 200.00 = 8170.45
8170.45 − 370.62 = 7799.83
7799.83 − 1267.96 = 6531.87

Check: 7799.83 − 1267.96 = 6531.87. Yes.

Fields:
- decision: "calculate"
- currency: "LCR"
- gross_pay: "8370.45"
- employee_contribution: "200.00"
- allowed_deduction: "370.62"
- taxable_pay: "7799.83"
- income_tax: "1267.96"
- net_pay: "6531.87"
- clauses: R1, R2, R3, R4, R5, R6

The case schedule exists, so I use its values (R1 says schedule replaces defaults). No amendment needed, no conflict.

Let me double-check the tax calculation:
7799.83 − 1000 = 6799.83 above free
Of that, up to 3600: 3600 − 1000 = 2600 at 0.10 = 260.00
Above 3600: 7799.83 − 3600 = 4199.83 at 0.24 = 1007.9592
Total: 1267.9592 → 1267.96 (round half up, but 0.0092 rounds down... 1267.9592 → third decimal is 9, so 1267.96). Correct.

Net pay: 6531.87.

Output JSON without markdown fences.