Luma Payroll Gym
← Heatmap / GLM 5.3 Flash · Task 96
GLM 5.3 Flash · Single-turn · Task 96 (Calculation, half-cent rounding tie) 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 2510.90 2510.90 2510.90 2510.90
employee contribution 125.55 125.55 125.55 125.55
allowed deduction 0.00 0.00 0.00 0.00
taxable pay 2385.35 2385.35 2385.35 2385.35
income tax 165.95 165.95 165.95 165.95
net pay 2219.40 2219.40 2219.40 2219.40
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: {"a84676d7d0d22839-payroll": {"kind": "payroll", "record": {"gross_pay": "2510.90", "payroll_month": "2026-11"}}}
Authoritative case reference schedule: {"first-half": {"rate": "0.04", "cap": "4500.00", "deduction": "400.00", "free": "900.00", "upper": "3600.00", "middle_rate": "0.12", "upper_rate": "0.24"}, "second-half": {"rate": "0.05", "cap": "3500.00", "deduction": "400.00", "free": "1200.00", "upper": "3000.00", "middle_rate": "0.14", "upper_rate": "0.20"}}
Rollouts
Rollout #1 100.0% passed · 6.6s · $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": "2510.90",
  "employee_contribution": "125.55",
  "allowed_deduction": "0.00",
  "taxable_pay": "2385.35",
  "income_tax": "165.95",
  "net_pay": "2219.40",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "Payroll month 2026-11 selects the case schedule's second-half row (rate 0.05, cap 3500.00, deduction cap 400.00, free 1200.00, upper 3000.00, middle 0.14, upper 0.20). Contribution = 0.05 \u00d7 min(2510.90, 3500.00) = 125.545 \u2192 125.55. Allowed deduction defaults to 0.00. Taxable pay = 2510.90 \u2212 125.55 \u2212 0.00 = 2385.35. Tax: first 1200.00 untaxed; 1185.35 \u00d7 0.14 = 165.949 \u2192 165.95 (below the 3000.00 upper boundary, so no upper-rate portion). Net pay = 2510.90 \u2212 125.55 \u2212 0.00 \u2212 165.95 = 2219.40."
}
Reasoning
Let me process this payroll record.

Input:
- gross_pay: "2510.90"
- payroll_month: "2026-11"

Case reference schedule (authoritative):
- second-half (2026-07 through 2026-12): rate "0.05", cap "3500.00", deduction "400.00", free "1200.00", upper "3000.00", middle_rate "0.14", upper_rate "0.20"

2026-11 is in the second half, so use the second-half row.

Step 1: Employee contribution (R3):
- rate = 0.05
- wage cap = 3500.00
- gross pay = 2510.90
- smaller of 2510.90 and 3500.00 = 2510.90
- contribution = 0.05 × 2510.90 = 125.545 → round half-up to 125.55? Wait, 125.545 rounds to 125.55 (round half-up at third decimal... actually we round to two decimals: 125.545 → 125.55? 125.545, the third decimal is 5, so round half-up gives 125.55). Wait: 125.545 to two decimals: look at third decimal digit = 5, round half up → 125.55.

Hmm, but let me double check: 0.05 × 2510.90 = 125.545. Yes. Round to 125.55.

Step 2: Allowed deduction (R4):
- Not provided, defaults to 0.00.
- Check: must not exceed deduction cap 400.00 or gross pay minus contribution = 2510.90 - 125.55 = 2385.35. Default 0.00 is fine.

Step 3: Taxable pay:
- 2510.90 - 125.55 - 0.00 = 2385.35

Step 4: Income tax (R5):
- Tax-free amount = 1200.00
- Upper bracket begins = 3000.00
- Taxable pay = 2385.35
- Portion up to 1200.00: untaxed.
- Portion above 1200.00 up to 3000.00: 2385.35 - 1200.00 = 1185.35 at middle rate 0.14 = 165.949
- Portion above 3000.00: 0 (taxable pay is below 3000)
- Total tax = 165.949 → round to 165.95

Wait: 1185.35 × 0.14 = 165.949. Round half-up to two decimals: 165.95.

Step 5: Net pay (R6):
- Net = 2510.90 - 125.55 - 0.00 - 165.95 = 2219.40

Let me verify: 2510.90 - 125.55 = 2385.35. 2385.35 - 165.95 = 2219.40. Yes.

Fields:
- decision: "calculate"
- currency: "LCR"
- gross_pay: "2510.90"
- employee_contribution: "125.55"
- allowed_deduction: "0.00"
- taxable_pay: "2385.35"
- income_tax: "165.95"
- net_pay: "2219.40"
- clauses: R1 (selecting row via schedule), R2 (rounding), R3 (contribution), R4 (deduction/taxable), R5 (tax), R6 (net pay/answer format)

No amendment, no contract gross pay, so no R9.

The schedule must be used since it's authoritative and supplied. The second-half row: rate 0.05, cap 3500.00, deduction 400.00, free 1200.00, upper 3000.00, middle_rate 0.14, upper_rate 0.20. All required fields present (rate, cap, deduction, free, upper, middle_rate, upper_rate). Good.

Citations: R1 through R6. Include R1, R2, R3, R4, R5, R6.
Rollout #2 100.0% passed · 6.2s · $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": "2510.90",
  "employee_contribution": "125.55",
  "allowed_deduction": "0.00",
  "taxable_pay": "2385.35",
  "income_tax": "165.95",
  "net_pay": "2219.40",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "Payroll month 2026-11 selects the second-half row of the authoritative case schedule (rate 0.05, cap 3500.00, deduction cap 400.00, tax-free 1200.00, upper boundary 3000.00). Employee contribution: 0.05 x min(2510.90, 3500.00) = 125.545 -> 125.55. No allowed deduction supplied, so 0.00. Taxable pay: 2510.90 - 125.55 - 0.00 = 2385.35. Income tax: first 1200.00 untaxed; (2385.35 - 1200.00) x 0.14 = 165.949 -> 165.95 (taxable pay is below the 3000.00 upper boundary, so no upper-rate tax). Net pay: 2510.90 - 125.55 - 0.00 - 165.95 = 2219.40."
}
Reasoning
Let me process this payroll record.

Input:
- gross_pay: "2510.90"
- payroll_month: "2026-11"
- Case reference schedule supplied (authoritative):
  - first-half: rate 0.04, cap 4500.00, deduction 400.00, free 900.00, upper 3600.00, middle_rate 0.12, upper_rate 0.24
  - second-half: rate 0.05, cap 3500.00, deduction 400.00, free 1200.00, upper 3000.00, middle_rate 0.14, upper_rate 0.20

Payroll month 2026-11 is in the second half (2026-07 through 2026-12), so use second-half row:
- rate: 0.05
- cap: 3500.00
- deduction cap: 400.00
- tax-free: 1200.00
- upper begins: 3000.00
- middle rate: 0.14
- upper rate: 0.20

No allowed_deduction provided → defaults to 0.00.

Employee contribution (R3): rate × min(gross, cap) = 0.05 × min(2510.90, 3500.00) = 0.05 × 2510.90 = 125.545 → round half up to 125.55? Wait, 125.545 rounds to 125.55 (round half up at 2 decimals: 125.545 → the third decimal is 5, so round up → 125.55). Actually 0.05 × 2510.90 = 125.545. Round to two decimals: 125.55 (round half up).

Hmm, let me double-check: 2510.90 × 0.05 = 125.545. Yes. Round half up → 125.55.

Taxable pay (R4): gross − contribution − allowed_deduction = 2510.90 − 125.55 − 0.00 = 2385.35.

Income tax (R5): progressive:
- Tax-free amount: 1200.00 → untaxed.
- Portion above 1200.00 up to upper boundary 3000.00: taxable is 2385.35, which is below 3000. So middle bracket portion = 2385.35 − 1200.00 = 1185.35 at 0.14 = 165.949.
- Upper bracket: taxable is below 3000, so 0 at 0.20.

Total tax = 165.949 → round to 165.95.

Let me compute: 1185.35 × 0.14 = 165.949. Round half up → 165.95.

Net pay (R6): gross − contribution − deduction − tax = 2510.90 − 125.55 − 0.00 − 165.95 = 2219.40.

Check: 2510.90 − 125.55 = 2385.35. 2385.35 − 165.95 = 2219.40. Yes.

Note: "Do not round intermediate bracket products separately before summing income tax" — here only one bracket product, so fine.

Answer fields:
- decision: "calculate"
- currency: "LCR"
- gross_pay: "2510.90"
- employee_contribution: "125.55"
- allowed_deduction: "0.00"
- taxable_pay: "2385.35"
- income_tax: "165.95"
- net_pay: "2219.40"
- clauses: R1, R2, R3, R4, R5, R6

The schedule is supplied, so R1's schedule provision applies. Clauses: ["R1","R2","R3","R4","R5","R6"].

No amendment, no contract conflict.

Output JSON without markdown fences.
Rollout #3 100.0% passed · 8.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": "2510.90",
  "employee_contribution": "125.55",
  "allowed_deduction": "0.00",
  "taxable_pay": "2385.35",
  "income_tax": "165.95",
  "net_pay": "2219.40",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
  "explanation": "Payroll month 2026-11 selects the second-half row of the case reference schedule (rate 0.05, cap 3500.00, deduction cap 400.00, free 1200.00, upper 3000.00, middle 0.14, upper rate 0.20). Contribution = 0.05 x 2510.90 = 125.545 -> 125.55. No deduction supplied, so 0.00. Taxable pay = 2510.90 - 125.55 - 0.00 = 2385.35. Tax: first 1200.00 untaxed; 1185.35 x 0.14 = 165.949 -> 165.95 (below the 3000.00 upper boundary, so no upper-rate portion). Net pay = 2510.90 - 125.55 - 0.00 - 165.95 = 2219.40."
}
Reasoning
Let me work through this payroll calculation.

Input:
- gross_pay: "2510.90"
- payroll_month: "2026-11"

Payroll month 2026-11 is in the second half (2026-07 through 2026-12). The authoritative case reference schedule supplies:
- second-half: rate 0.05, cap 3500.00, deduction 400.00, free 1200.00, upper 3000.00, middle_rate 0.14, upper_rate 0.20

Per R1, when a case schedule is supplied, its numeric values replace the defaults for that case only. So I use the second-half row from the schedule.

Step 1: Employee contribution (R3):
- Contribution rate = 0.05
- Wage cap = 3500.00
- min(gross_pay, cap) = min(2510.90, 3500.00) = 2510.90
- Contribution = 0.05 × 2510.90 = 125.545 → round half-up to two decimals = 125.55? Wait, 125.545 rounds to 125.55 (round half-up: 125.545 → the third decimal is 5, so round up the second decimal: 125.54 → 125.55). Actually 125.545: two decimal places means we look at the third decimal digit which is 5, round half up → 125.55.

Hmm, but wait — R2 says "Do not round intermediate bracket products separately before summing income tax." For the contribution, R3 says "Round the contribution under R2." So contribution = 125.55? Let me double check: 0.05 × 2510.90 = 125.545. Round half up at two decimals: 125.545 → 125.55 (since the digit after the second decimal is 5, we round up). Yes, 125.55.

Hmm, but actually let me reconsider. 2510.90 × 0.05 = 125.545 exactly. Round half-up to 2 decimals: 125.55.

Step 2: Allowed deduction (R4):
- allowed_deduction defaults to 0.00 when omitted. It's omitted here, so 0.00.
- Check: must not exceed deduction cap (400.00) or gross pay minus rounded contribution (2510.90 − 125.55 = 2385.35). 0.00 is fine.

Step 3: Taxable pay (R4):
- taxable = gross − contribution − deduction = 2510.90 − 125.55 − 0.00 = 2385.35

Step 4: Income tax (R5):
- Tax-free amount = 1200.00
- Upper bracket begins at 3000.00
- Middle rate = 0.14, upper rate = 0.20

Taxable pay = 2385.35.
- Portion up to 1200.00: untaxed → 0
- Portion above 1200.00 up to 3000.00: 2385.35 − 1200.00 = 1185.35 at 0.14 = 165.949
- Portion above 3000.00: 0 (taxable pay is below 3000)

Total tax = 165.949 → round half-up to two decimals = 165.95.

Wait: 1185.35 × 0.14 = 165.949. Round: third decimal is 9, so 165.95. Yes.

Note R2 says do not round intermediate bracket products separately before summing. Here there's only one bracket product, so no issue. Sum = 165.949 → 165.95.

Step 5: Net pay (R6):
- Net = gross − contribution − deduction − tax = 2510.90 − 125.55 − 0.00 − 165.95 = 2219.40

Let me verify: 2510.90 − 125.55 = 2385.35. 2385.35 − 165.95 = 2219.40. Yes.

Fields:
- decision: "calculate"
- currency: "LCR"
- gross_pay: "2510.90"
- employee_contribution: "125.55"
- allowed_deduction: "0.00"
- taxable_pay: "2385.35"
- income_tax: "165.95"
- net_pay: "2219.40"
- clauses: R1 (selecting row/schedule), R2 (rounding), R3 (contribution), R4 (deduction/taxable), R5 (tax), R6 (net pay/answer format)

No amendment or contract conflict present, so no R9.

The schedule is supplied directly in the prompt (not tool mode), so I use it. The schedule must include rate, cap, deduction, free, upper, middle_rate, upper_rate — it does for both rows.

Let me double-check the contribution rounding once more. 2510.90 × 0.05: 2510.90 × 0.05 = 125.545. Round half up: 125.545 → look at third decimal 5 → round up second decimal from 4 to 5 → 125.55. Correct.

Taxable pay uses the rounded contribution per R4 ("gross pay minus the rounded employee contribution"). 2510.90 − 125.55 = 2385.35.

Tax: 2385.35 − 1200.00 = 1185.35 in middle bracket (since 2385.35 ≤ 3000.00). 1185.35 × 0.14 = 165.949 → 165.95.

Net: 2510.90 − 125.55 − 0.00 − 165.95 = 2219.40.

All good. Clauses: ["R1", "R2", "R3", "R4", "R5", "R6"].

Output JSON without markdown fences, no prose.