Luma Payroll Gym
← Heatmap / GLM 5.3 Flash · Task 18
GLM 5.3 Flash · Single-turn · Task 18 (Calculation, at the upper bracket line) Mean 50.0%
Field Expected Rollout #1 (100%) Rollout #2 (100%) Rollout #3 (-50%)
decision calculate calculate calculate (malformed)
currency LCR LCR LCR (malformed)
gross pay 2978.74 2978.74 2978.74 (malformed)
employee contribution 178.72 178.72 178.72 (malformed)
allowed deduction 0.00 0.00 0.00 (malformed)
taxable pay 2800.02 2800.02 2800.02 (malformed)
income tax 224.00 224.00 224.00 (malformed)
net pay 2576.02 2576.02 2576.02 (malformed)
clauses R1 R2 R3 R4 R5 R6 R1 R2 R3 R4 R5 R6 R1 R2 R3 R4 R5 R6 (malformed)
Prompt
Process this monthly payroll record under the supplied rulebook. Return the R6 or R7 JSON answer.
Source documents: {"60299c2a6df8880c-payroll": {"kind": "payroll", "record": {"gross_pay": "2978.74", "payroll_month": "2026-07", "allowed_deduction": "0.00"}}}
Authoritative case reference schedule: {"first-half": {"rate": "0.07", "cap": "4000.00", "deduction": "400.00", "free": "900.00", "upper": "3300.00", "middle_rate": "0.08", "upper_rate": "0.22"}, "second-half": {"rate": "0.06", "cap": "4500.00", "deduction": "400.00", "free": "1200.00", "upper": "2800.00", "middle_rate": "0.14", "upper_rate": "0.20"}}
Rollouts
Rollout #1 100.0% passed · 5.1s · $0.0009
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": "2978.74",
  "employee_contribution": "178.72",
  "allowed_deduction": "0.00",
  "taxable_pay": "2800.02",
  "income_tax": "224.00",
  "net_pay": "2576.02",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "Payroll month 2026-07 selects the second-half row of the authoritative case schedule (R1). Contribution = 0.06 \u00d7 min(2978.74, 4500.00) = 178.72 (R3). Allowed deduction 0.00 is within the 400.00 cap and available pay (R4). Taxable pay = 2978.74 \u2212 178.72 \u2212 0.00 = 2800.02 (R4). Tax: first 1200.00 untaxed, 1600.00 \u00d7 0.14 = 224.00, plus 0.02 \u00d7 0.20 = 0.004; total 224.004 rounds to 224.00 (R5, R2). Net pay = 2978.74 \u2212 178.72 \u2212 0.00 \u2212 224.00 = 2576.02 (R6)."
}
Reasoning
Let me process this payroll record.

Input:
- gross_pay: "2978.74"
- payroll_month: "2026-07"
- allowed_deduction: "0.00"

Reference schedule (authoritative case schedule):
- second-half (2026-07 through 2026-12): rate 0.06, cap 4500.00, deduction 400.00, free 1200.00, upper 2800.00, middle_rate 0.14, upper_rate 0.20

Payroll month 2026-07 → second-half row.

Step 1: Employee contribution (R3):
- min(gross_pay, cap) = min(2978.74, 4500.00) = 2978.74
- contribution = 0.06 × 2978.74 = 178.7244 → round half up to 178.72

Wait: 2978.74 × 0.06 = 178.7244. Round to two decimals: 178.72 (since third decimal is 4, round down). Yes, 178.72.

Step 2: Allowed deduction check (R4):
- allowed_deduction = 0.00, which is ≤ 400.00 cap and ≤ gross_pay − contribution = 2978.74 − 178.72 = 2800.02. OK.

Step 3: Taxable pay (R4):
- taxable = gross − contribution − deduction = 2978.74 − 178.72 − 0.00 = 2800.02

Step 4: Income tax (R5), second-half row:
- tax-free amount: 1200.00
- upper bracket begins: 2800.00
- middle rate: 0.14
- upper rate: 0.20

Taxable pay = 2800.02
- Portion up to 1200.00: untaxed
- Portion 1200.00 to 2800.00: 1600.00 × 0.14 = 224.00
- Portion above 2800.00: 2800.02 − 2800.00 = 0.02 × 0.20 = 0.004

Total tax = 224.00 + 0.004 = 224.004 → round half up to 224.00

Wait, 224.004 rounds to 224.00 (third decimal is 4, rounds down). Yes.

Step 5: Net pay (R6):
- net = 2978.74 − 178.72 − 0.00 − 224.00 = 2576.02

Check: 2978.74 − 178.72 = 2800.02. 2800.02 − 224.00 = 2576.02. Yes.

Fields:
- decision: "calculate"
- currency: "LCR"
- gross_pay: "2978.74"
- employee_contribution: "178.72"
- allowed_deduction: "0.00"
- taxable_pay: "2800.02"
- income_tax: "224.00"
- net_pay: "2576.02"
- clauses: R1, R2, R3, R4, R5, R6

Note: the case schedule replaces defaults — the schedule's second-half values differ from defaults (free 1200 vs 1100, upper 2800 vs 3300, middle 0.14 vs 0.12, upper_rate 0.20 vs 0.22). I used the schedule values correctly per R1.

Citations: R1 (row selection, schedule authority), R2 (rounding), R3 (contribution), R4 (deduction and taxable), R5 (tax), R6 (net pay/answer format).

No amendment present, no conflict.
Rollout #2 100.0% passed · 7.3s · $0.0008
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": "2978.74",
  "employee_contribution": "178.72",
  "allowed_deduction": "0.00",
  "taxable_pay": "2800.02",
  "income_tax": "224.00",
  "net_pay": "2576.02",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "Payroll month 2026-07 selects the second-half row of the authoritative case schedule (R1): rate 0.06, cap 4500.00, deduction cap 400.00, tax-free 1200.00, upper bracket begins 2800.00, middle 0.14, upper 0.20. Contribution: 0.06 \u00d7 min(2978.74, 4500.00) = 178.7244 \u2192 178.72 (R3, R2). Allowed deduction 0.00 is within the cap and available pay (R4). Taxable pay: 2978.74 \u2212 178.72 \u2212 0.00 = 2800.02 (R4). Tax: first 1200.00 untaxed; 1600.00 \u00d7 0.14 = 224.00; 0.02 \u00d7 0.20 = 0.004; unrounded sum 224.004 \u2192 224.00 (R5, R2). Net pay: 2978.74 \u2212 178.72 \u2212 0.00 \u2212 224.00 = 2576.02 (R6)."
}
Reasoning
Let me work through this payroll calculation.

Input:
- gross_pay: 2978.74
- payroll_month: 2026-07
- allowed_deduction: 0.00

The authoritative case reference schedule is supplied, so per R1, its values replace defaults. Payroll month 2026-07 falls in second-half (2026-07 through 2026-12).

Second-half row:
- rate: 0.06
- cap: 4500.00
- deduction cap: 400.00
- tax-free: 1200.00
- upper bracket begins: 2800.00
- middle rate: 0.14
- upper rate: 0.20

Step 1: Employee contribution (R3)
= rate × min(gross_pay, cap)
= 0.06 × min(2978.74, 4500.00)
= 0.06 × 2978.74
= 178.7244
Round to two decimals (round-half-up): 178.72

Step 2: Allowed deduction (R4)
allowed_deduction = 0.00. Check: must not exceed cap (400.00) or gross pay minus rounded contribution (2978.74 − 178.72 = 2800.02). 0.00 is fine.

Step 3: Taxable pay
= gross_pay − employee_contribution − allowed_deduction
= 2978.74 − 178.72 − 0.00
= 2800.02

Step 4: Income tax (R5)
Tax-free amount: 1200.00
Upper bracket begins: 2800.00

Portion up to 1200.00: untaxed.
Portion 1200.00 to 2800.00: 2800.00 − 1200.00 = 1600.00 at 0.14 = 224.00
Portion above 2800.00: 2800.02 − 2800.00 = 0.02 at 0.20 = 0.004

Total tax = 224.00 + 0.004 = 224.004
Round to two decimals: 224.00

Note R2: "Do not round intermediate bracket products separately before summing income tax." So sum first: 224.004 → 224.00.

Step 5: Net pay (R6)
= gross_pay − employee_contribution − allowed_deduction − income_tax
= 2978.74 − 178.72 − 0.00 − 224.00
= 1576.02

Let me verify: 2978.74 − 178.72 = 2800.02. 2800.02 − 224.00 = 2576.02. Wait, let me recompute.

2978.74 − 178.72 = 2800.02
2800.02 − 0.00 = 2800.02
2800.02 − 224.00 = 2576.02

So net pay = 2576.02.

Let me double-check the contribution: 0.06 × 2978.74 = 178.7244. Round half up at two decimals: 178.72 (since third decimal is 4, rounds down). Correct.

Taxable pay: 2978.74 − 178.72 = 2800.02. Correct.

Tax: bracket 1: 0 to 1200 → 0. Bracket 2: 1200 to 2800 → 1600 × 0.14 = 224.00. Bracket 3: above 2800 → 0.02 × 0.20 = 0.004. Total = 224.004 → 224.00.

Net pay: 2978.74 − 178.72 − 0.00 − 224.00 = 2576.02.

Clauses: R1 (row selection, schedule override), R2 (rounding), R3 (contribution), R4 (deduction/taxable pay), R5 (tax), R6 (net pay/answer format).

No amendment needed, no conflict.

Output JSON:
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "2978.74",
  "employee_contribution": "178.72",
  "allowed_deduction": "0.00",
  "taxable_pay": "2800.02",
  "income_tax": "224.00",
  "net_pay": "2576.02",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"]
}

Optionally an explanation. I'll include a brief one.
Rollout #3 -50.0% malformed · 5.0s · $0.0009
ComponentScoreClauses
decision 0.0% R1 R2 R3 R4 R5 R6
exact 0.0% R1 R2 R3 R4 R5 R6
field accuracy 0.0% R1 R2 R3 R4 R5 R6
citations 0.0% R1 R2 R3 R4 R5 R6
Assistant
```json
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "2978.74",
  "employee_contribution": "178.72",
  "allowed_deduction": "0.00",
  "taxable_pay": "2800.02",
  "income_tax": "224.00",
  "net_pay": "2576.02",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "Payroll month 2026-07 selects the second-half row of the authoritative case schedule (rate 0.06, cap 4500.00, deduction 400.00, free 1200.00, upper 2800.00, middle 0.14, upper_rate 0.20). Employee contribution = 0.06 × 2978.74 = 178.7244 → 178.72 (R3, R2). Allowed deduction 0.00 is within the 400.00 cap and available pay (R4). Taxable pay = 2978.74 − 178.72 − 0.00 = 2800.02 (R4). Income tax: first 1200.00 untaxed; 1600.00 × 0.14 = 224.00; 0.02 × 0.20 = 0.004; unrounded sum 224.004 → 224.00 (R5, R2). Net pay = 2978.74 − 178.72 − 0.00 − 224.00 = 2576.02 (R6)."
}
```
Reasoning
We need to process payroll for 2026-07, gross pay 2978.74, allowed_deduction 0.00.

The authoritative case reference schedule is supplied. For 2026-07, we use second-half row: rate 0.06, cap 4500.00, deduction 400.00, free 1200.00, upper 2800.00, middle_rate 0.14, upper_rate 0.20.

Employee contribution: rate * min(gross, cap) = 0.06 * 2978.74 = 178.7244 → round to 178.72 (round half up: 178.7244 → 178.72).

Allowed deduction: 0.00, must not exceed cap 400.00 or gross minus contribution = 2978.74 - 178.72 = 2800.02. 0.00 is fine.

Taxable pay = 2978.74 - 178.72 - 0.00 = 2800.02.

Income tax: tax-free amount 1200.00; upper bracket begins at 2800.00.

Portion up to 1200: untaxed.
Portion 1200.01? Actually portion above 1200 up to 2800: (2800 - 1200) = 1600 at 14% = 224.00.
Portion above 2800: 2800.02 - 2800 = 0.02 at 20% = 0.004.

Total = 224.00 + 0.004 = 224.004 → round half up to 224.00.

Wait, R2 says "Do not round intermediate bracket products separately before summing income tax." So sum = 224.004, round to 224.00.

Net pay = 2978.74 - 178.72 - 0.00 - 224.00 = 2576.02.

Check: 2978.74 - 178.72 = 2800.02; 2800.02 - 224.00 = 2576.02.

Fields: decision calculate, currency LCR, gross_pay "2978.74", employee_contribution "178.72", allowed_deduction "0.00", taxable_pay "2800.02", income_tax "224.00", net_pay "2576.02".

Clauses: R1 (row selection, schedule), R2 (rounding), R3 (contribution), R4 (deduction, taxable pay), R5 (tax), R6 (net pay/answer).

The schedule is authoritative, replacing defaults. Second-half row: rate 0.06, cap 4500, deduction 400, free 1200, upper 2800, middle 0.14, upper 0.20.

Contribution: 0.06 * 2978.74 = 178.7244 → 178.72.

Taxable: 2800.02.

Tax: (2800.02 - 1200) = 1600.02 above free. Of that, up to upper boundary 2800: 1600 at 0.14 = 224.00. Above 2800: 0.02 at 0.20 = 0.004. Total 224.004 → 224.00.

Net: 2978.74 - 178.72 - 0.00 - 224.00 = 2576.02.

Output JSON without markdown fences. Include clauses: ["R1","R2","R3","R4","R5","R6"]. Maybe add explanation.