Luma Payroll Gym
← Heatmap / GLM 5.3 Flash · Task 103
GLM 5.3 Flash · Single-turn · Task 103 (Calculation, at the tax-free line) 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 1117.86 1117.86 1117.86 1117.86
employee contribution 89.43 89.43 89.43 89.43
allowed deduction 128.44 128.44 128.44 128.44
taxable pay 899.99 899.99 899.99 899.99
income tax 0.00 0.00 0.00 0.00
net pay 899.99 899.99 899.99 899.99
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: {"b5456bfa466a21da-payroll": {"kind": "payroll", "record": {"gross_pay": "1117.86", "payroll_month": "2026-12", "allowed_deduction": "128.44"}}, "b5456bfa466a21da-contract": {"kind": "contract", "gross_pay": "1117.86"}}
Authoritative case reference schedule: {"first-half": {"rate": "0.04", "cap": "5000.00", "deduction": "400.00", "free": "1200.00", "upper": "3300.00", "middle_rate": "0.08", "upper_rate": "0.18"}, "second-half": {"rate": "0.08", "cap": "4000.00", "deduction": "400.00", "free": "900.00", "upper": "3000.00", "middle_rate": "0.08", "upper_rate": "0.24"}}
Rollouts
Rollout #1 100.0% passed · 4.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": "1117.86",
  "employee_contribution": "89.43",
  "allowed_deduction": "128.44",
  "taxable_pay": "899.99",
  "income_tax": "0.00",
  "net_pay": "899.99",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "2026-12 selects the second-half row of the case schedule. Contribution: 0.08 \u00d7 min(1117.86, 4000.00) = 89.43. Deduction 128.44 is within the 400.00 cap and below gross minus contribution (1028.43). Taxable pay: 1117.86 \u2212 89.43 \u2212 128.44 = 899.99, which is below the 900.00 tax-free amount, so income tax is 0.00. Net pay: 1117.86 \u2212 89.43 \u2212 128.44 \u2212 0.00 = 899.99. Contract gross pay matches the payroll record, so no amendment is needed."
}
Reasoning
Let me work through this payroll record.

Input:
- gross_pay: "1117.86"
- payroll_month: "2026-12"
- allowed_deduction: "128.44"
- contract gross_pay: "1117.86" (matches, no conflict)
- Case reference schedule: second-half row applies for 2026-07 through 2026-12:
  - rate: 0.08
  - cap: 4000.00
  - deduction: 400.00
  - free: 900.00
  - upper: 3000.00
  - middle_rate: 0.08
  - upper_rate: 0.24

Steps:
1. Employee contribution (R3): rate 0.08 × min(1117.86, 4000.00) = 0.08 × 1117.86 = 89.4288 → round to 89.43.
2. Allowed deduction check (R4): 128.44 ≤ 400.00 (cap) and ≤ gross − contribution = 1117.86 − 89.43 = 1028.43. 128.44 ≤ 1028.43. OK.
3. Taxable pay (R4): 1117.86 − 89.43 − 128.44 = 900. - wait: 1117.86 − 89.43 = 1028.43; 1028.43 − 128.44 = 899.99. Taxable pay = 899.99.
4. Income tax (R5): taxable 899.99 vs free 900.00. Taxable pay up to tax-free amount is untaxed. 899.99 ≤ 900.00, so tax = 0.00.
5. Net pay (R6): 1117.86 − 89.43 − 128.44 − 0.00 = 899.99.

Check: 1117.86 − 89.43 = 1028.43; 1028.43 − 128.44 = 899.99; − 0.00 = 899.99. Net pay = 899.99.

Citations: R1 (row selection, schedule), R2 (rounding), R3 (contribution), R4 (deduction and taxable pay), R5 (tax), R6 (net pay). No amendment needed since contract matches gross pay, so no R9.

Output JSON:
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "1117.86",
  "employee_contribution": "89.43",
  "allowed_deduction": "128.44",
  "taxable_pay": "899.99",
  "income_tax": "0.00",
  "net_pay": "899.99",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"]
}

Money as strings with two decimals. No markdown fences.
Rollout #2 100.0% passed · 4.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": "1117.86",
  "employee_contribution": "89.43",
  "allowed_deduction": "128.44",
  "taxable_pay": "899.99",
  "income_tax": "0.00",
  "net_pay": "899.99",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "2026-12 selects the case schedule's second-half row (rate 0.08, cap 4000.00, deduction cap 400.00, free 900.00). Contribution: 0.08 \u00d7 1117.86 = 89.43. Deduction 128.44 is within the 400.00 cap and within gross minus contribution (1028.43). Taxable pay: 1117.86 \u2212 89.43 \u2212 128.44 = 899.99, which is at or below the 900.00 tax-free amount, so income tax is 0.00. Net pay: 1117.86 \u2212 89.43 \u2212 128.44 \u2212 0.00 = 899.99. Contract gross matches the payroll record, so no amendment is needed."
}
Reasoning
Let me work through this payroll calculation.

Inputs:
- gross_pay: 1117.86
- payroll_month: 2026-12
- allowed_deduction: 128.44
- Contract gross_pay: 1117.86 (matches, no conflict)
- Case reference schedule: second-half row applies for 2026-12:
  - rate: 0.08
  - cap: 4000.00
  - deduction cap: 400.00
  - free: 900.00
  - upper: 3000.00
  - middle_rate: 0.08
  - upper_rate: 0.24

Steps:

R3: Employee contribution = rate × min(gross, cap) = 0.08 × min(1117.86, 4000.00) = 0.08 × 1117.86 = 89.4288 → round half up to 89.43.

R4: allowed_deduction = 128.44. Check: must not exceed deduction cap 400.00 (yes, 128.44 ≤ 400.00), and must not exceed gross pay minus rounded employee contribution = 1117.86 − 89.43 = 1028.43. 128.44 ≤ 1028.43, OK.

Taxable pay = gross − contribution − deduction = 1117.86 − 89.43 − 128.44 = 899.99.

Let me compute: 1117.86 − 89.43 = 1028.43. 1028.43 − 128.44 = 899.99.

R5: Income tax:
- Taxable pay 899.99 ≤ free 900.00, so all untaxed. Tax = 0.00.

R6: Net pay = gross − contribution − deduction − tax = 1117.86 − 89.43 − 128.44 − 0.00 = 899.99.

Fields:
- decision: calculate
- currency: LCR
- gross_pay: "1117.86"
- employee_contribution: "89.43"
- allowed_deduction: "128.44"
- taxable_pay: "899.99"
- income_tax: "0.00"
- net_pay: "899.99"
- clauses: R1, R2, R3, R4, R5, R6 (and R1 for selecting the row via schedule). No amendment needed since contract matches gross pay, so no R9.

Explanation optional — I can include a brief one. The instructions say an optional explanation string is permitted. I'll include a short one.

Output as JSON without markdown fences.
Rollout #3 100.0% passed · 4.4s · $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": "1117.86",
  "employee_contribution": "89.43",
  "allowed_deduction": "128.44",
  "taxable_pay": "899.99",
  "income_tax": "0.00",
  "net_pay": "899.99",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "Payroll month 2026-12 selects the second-half row of the case schedule (R1). Contribution = 0.08 \u00d7 min(1117.86, 4000.00) = 89.4288 \u2192 89.43 (R3, R2). Allowed deduction 128.44 is within the 400.00 cap and below gross minus contribution (1028.43), so it is valid (R4). Taxable pay = 1117.86 \u2212 89.43 \u2212 128.44 = 899.99 (R4). Taxable pay 899.99 does not exceed the 900.00 tax-free amount, so income tax is 0.00 (R5). Net pay = 1117.86 \u2212 89.43 \u2212 128.44 \u2212 0.00 = 899.99 (R6). Contract gross pay matches the payroll record, so no amendment is needed."
}
Reasoning
Let me work through this payroll case.

Inputs:
- gross_pay: 1117.86
- payroll_month: 2026-12
- allowed_deduction: 128.44
- contract gross_pay: 1117.86 (matches, no conflict)
- Case reference schedule supplied: second-half row applies for 2026-12.

Second-half schedule:
- rate: 0.08
- cap: 4000.00
- deduction: 400.00
- free: 900.00
- upper: 3000.00
- middle_rate: 0.08
- upper_rate: 0.24

Step 1: Employee contribution (R3): rate × min(gross, cap) = 0.08 × min(1117.86, 4000.00) = 0.08 × 1117.86 = 89.4288 → round to 89.43.

Step 2: Allowed deduction check (R4): deduction cap 400.00; gross minus rounded contribution = 1117.86 − 89.43 = 1028.43. Allowed deduction 128.44 ≤ 400.00 and ≤ 1028.43. OK.

Step 3: Taxable pay (R4): gross − contribution − deduction = 1117.86 − 89.43 − 128.44 = 899.99.

Let me compute: 1117.86 − 89.43 = 1028.43. 1028.43 − 128.44 = 899.99.

Step 4: Income tax (R5): taxable 899.99 ≤ free 900.00, so all untaxed. Tax = 0.00.

Step 5: Net pay (R6): gross − contribution − deduction − tax = 1117.86 − 89.43 − 128.44 − 0.00 = 899.99.

Fields:
- decision: calculate
- currency: LCR
- gross_pay: "1117.86"
- employee_contribution: "89.43"
- allowed_deduction: "128.44"
- taxable_pay: "899.99"
- income_tax: "0.00"
- net_pay: "899.99"
- clauses: R1 (row selection/schedule), R2 (rounding), R3 (contribution), R4 (deduction/taxable), R5 (tax), R6 (net pay). No amendment needed since contract matches.

Output as one JSON object, no markdown fences.