← Heatmap / GLM 5.3 Flash · Task 37
GLM 5.3 Flash · Single-turn · Task 37 (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 | 8070.19 | 8070.19 | 8070.19 | 8070.19 |
| employee contribution | 200.00 | 200.00 | 200.00 | 200.00 |
| allowed deduction | 287.02 | 287.02 | 287.02 | 287.02 |
| taxable pay | 7583.17 | 7583.17 | 7583.17 | 7583.17 |
| income tax | 1184.63 | 1184.63 | 1184.63 | 1184.63 |
| net pay | 6398.54 | 6398.54 | 6398.54 | 6398.54 |
| 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: {"4c09f376cdcad6f5-payroll": {"kind": "payroll", "record": {"gross_pay": "8070.19", "payroll_month": "2026-03", "allowed_deduction": "287.02"}}, "4c09f376cdcad6f5-contract": {"kind": "contract", "gross_pay": "8070.19"}}
Authoritative case reference schedule: {"first-half": {"rate": "0.04", "cap": "5000.00", "deduction": "400.00", "free": "900.00", "upper": "2800.00", "middle_rate": "0.12", "upper_rate": "0.20"}, "second-half": {"rate": "0.05", "cap": "4000.00", "deduction": "400.00", "free": "1100.00", "upper": "3600.00", "middle_rate": "0.08", "upper_rate": "0.22"}}
Rollouts
Rollout #1 100.0% passed · 6.1s · $0.0007
| Component | Score | Clauses |
|---|---|---|
| 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": "8070.19",
"employee_contribution": "200.00",
"allowed_deduction": "287.02",
"taxable_pay": "7583.17",
"income_tax": "1184.63",
"net_pay": "6398.54",
"clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
"explanation": "Payroll month 2026-03 selects the first-half row of the authoritative case schedule (rate 0.04, cap 5000.00, deduction cap 400.00, free 900.00, upper 2800.00, middle 0.12, upper 0.20). Contract gross pay matches the payroll record, so no amendment is needed. Contribution: 0.04 \u00d7 min(8070.19, 5000.00) = 200.00. Allowed deduction 287.02 is within the 400.00 cap and below gross minus contribution (7870.19). Taxable pay: 8070.19 \u2212 200.00 \u2212 287.02 = 7583.17. Tax: first 900.00 untaxed; next 1900.00 \u00d7 0.12 = 228.00; remaining 4783.17 \u00d7 0.20 = 956.634; summed then rounded = 1184.63. Net pay: 8070.19 \u2212 200.00 \u2212 287.02 \u2212 1184.63 = 6398.54."
}
Reasoning
Let me work through this payroll record. Inputs: - gross_pay: 8070.19 - payroll_month: 2026-03 - allowed_deduction: 287.02 - contract gross_pay: 8070.19 (matches, no conflict) Payroll month 2026-03 is in first-half (2026-01 through 2026-06). The authoritative case schedule replaces defaults. First-half row: - rate: 0.04 - cap: 5000.00 - deduction: 400.00 - free: 900.00 - upper: 2800.00 - middle_rate: 0.12 - upper_rate: 0.20 Employee contribution (R3): rate × min(gross, cap) = 0.04 × min(8070.19, 5000.00) = 0.04 × 5000.00 = 200.00. Rounded: 200.00. Allowed deduction check (R4): must not exceed deduction cap (400.00) or gross pay minus contribution = 8070.19 − 200.00 = 7870.19. Allowed deduction is 287.02, which is ≤ 400.00 and ≤ 7870.19. Valid. Taxable pay (R4): gross − contribution − deduction = 8070.19 − 200.00 − 287.02 = 7583.17. Income tax (R5), progressive marginal: - Tax-free amount: 900.00 - Upper bracket begins: 2800.00 - Middle rate: 0.12 - Upper rate: 0.20 Portion up to 900: 0 tax. Portion 900 to 2800: 1900.00 × 0.12 = 228.00. Portion above 2800: 7583.17 − 2800.00 = 4783.17 × 0.20 = 956.634 → but we sum products first then round: 228.00 + 956.634 = 1184.634 → round half-up to 1184.63. Wait, R2 says round monetary calculation results to two decimal places using round-half-up, and do not round intermediate bracket products separately before summing income tax. So total tax = 228.00 + 956.634 = 1184.634 → 1184.63. Net pay (R6): gross − contribution − deduction − tax = 8070.19 − 200.00 − 287.02 − 1184.63 = 6398.54. Let me verify: 8070.19 − 200.00 = 7870.19. 7870.19 − 287.02 = 7583.17. 7583.17 − 1184.63 = 6398.54. All fields: - decision: "calculate" - currency: "LCR" - gross_pay: "8070.19" - employee_contribution: "200.00" - allowed_deduction: "287.02" - taxable_pay: "7583.17" - income_tax: "1184.63" - net_pay: "6398.54" - clauses: R1, R2, R3, R4, R5, R6. Contract matches gross pay, so no amendment needed, no R9 citation. Citations: R1 (scope, selecting reference row, case schedule), R2 (money/arithmetic/rounding), R3 (contribution), R4 (deduction/taxable pay), R5 (tax), R6 (net pay/answer format). Output JSON without markdown fences.
Rollout #2 100.0% passed · 4.6s · $0.0005
| Component | Score | Clauses |
|---|---|---|
| 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": "8070.19",
"employee_contribution": "200.00",
"allowed_deduction": "287.02",
"taxable_pay": "7583.17",
"income_tax": "1184.63",
"net_pay": "6398.54",
"clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
"explanation": "Payroll month 2026-03 selects the case-supplied first-half schedule per R1. Employee contribution: 0.04 \u00d7 min(8070.19, 5000.00) = 200.00 (R3). Allowed deduction 287.02 is within the 400.00 cap and within available pay (R4). Taxable pay: 8070.19 \u2212 200.00 \u2212 287.02 = 7583.17. Income tax: first 900.00 untaxed, 1900.00 \u00d7 0.12 = 228.00, plus (7583.17 \u2212 2800.00) \u00d7 0.20 = 956.634; summed then rounded to 1184.63 (R5). Net pay: 8070.19 \u2212 200.00 \u2212 287.02 \u2212 1184.63 = 6398.54 (R6). Contract gross pay matches the payroll record, so no amendment is needed."
}
Reasoning
Let me process this payroll record. Inputs: - gross_pay: 8070.19 - payroll_month: 2026-03 - allowed_deduction: 287.02 - contract gross_pay: 8070.19 (matches, so no conflict) - Case reference schedule supplied (authoritative), first-half applies for 2026-01 through 2026-06. First-half schedule: - rate: 0.04 - cap: 5000.00 - deduction: 400.00 - free: 900.00 - upper: 2800.00 - middle_rate: 0.12 - upper_rate: 0.20 Step 1: Employee contribution (R3): rate × min(gross, cap) = 0.04 × min(8070.19, 5000.00) = 0.04 × 5000.00 = 200.00 Step 2: Allowed deduction check (R4): must not exceed deduction cap (400.00) or gross pay minus contribution (8070.19 − 200.00 = 7870.19). 287.02 ≤ 400.00 ✓ and ≤ 7870.19 ✓. So allowed_deduction = 287.02. Step 3: Taxable pay = gross − contribution − deduction = 8070.19 − 200.00 − 287.02 = 7583.17 Step 4: Income tax (R5): - Tax-free: 900.00 - Upper bracket begins: 2800.00 - Portion 0–900: untaxed - Portion 900–2800: 1900.00 × 0.12 = 228.00 - Portion above 2800: 7583.17 − 2800.00 = 4783.17 × 0.20 = 956.634 → but "do not round intermediate bracket products separately before summing income tax". So sum: 228.00 + 956.634 = 1184.634 → round to 1184.63. Let me recompute: 4783.17 × 0.20 = 956.634. 228.00 + 956.634 = 1184.634. Round half-up to two decimals: 1184.63. Step 5: Net pay = gross − contribution − deduction − tax = 8070.19 − 200.00 − 287.02 − 1184.63 = ? 8070.19 − 200.00 = 7870.19 7870.19 − 287.02 = 7583.17 7583.17 − 1184.63 = 6398.54 So: - gross_pay: "8070.19" - employee_contribution: "200.00" - allowed_deduction: "287.02" - taxable_pay: "7583.17" - income_tax: "1184.63" - net_pay: "6398.54" Clauses: R1 (selecting row, schedule), R2 (rounding), R3 (contribution), R4 (deduction, taxable), R5 (tax), R6 (net pay/answer format). No amendment needed since contract matches gross pay, so no R9. Contract gross pay 8070.19 matches payroll gross pay 8070.19, so no conflict — no R9 citation needed. Output JSON without markdown fences.
Rollout #3 100.0% passed · 6.1s · $0.0006
| Component | Score | Clauses |
|---|---|---|
| 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": "8070.19",
"employee_contribution": "200.00",
"allowed_deduction": "287.02",
"taxable_pay": "7583.17",
"income_tax": "1184.63",
"net_pay": "6398.54",
"clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
"explanation": "Payroll month 2026-03 selects the first-half row; the authoritative case schedule replaces the defaults (rate 0.04, cap 5000.00, deduction cap 400.00, free 900.00, upper 2800.00, middle 0.12, upper rate 0.20). Contribution = 0.04 \u00d7 min(8070.19, 5000.00) = 200.00. Deduction 287.02 is within the 400.00 cap and within gross minus contribution. Taxable pay = 8070.19 \u2212 200.00 \u2212 287.02 = 7583.17. Tax = 0 \u00d7 900.00 + 0.12 \u00d7 1900.00 + 0.20 \u00d7 4783.17 = 1184.634 \u2192 1184.63. Net pay = 8070.19 \u2212 200.00 \u2212 287.02 \u2212 1184.63 = 6398.54. Contract gross matches payroll gross, so no amendment is needed."
}
Reasoning
Let me work through this payroll calculation. Input: - gross_pay: 8070.19 - payroll_month: 2026-03 - allowed_deduction: 287.02 - contract gross_pay: 8070.19 (matches, no conflict) - Case reference schedule supplied: first-half: rate 0.04, cap 5000.00, deduction 400.00, free 900.00, upper 2800.00, middle_rate 0.12, upper_rate 0.20; second-half: rate 0.05, cap 4000.00, deduction 400.00, free 1100.00, upper 3600.00, middle_rate 0.08, upper_rate 0.22. Payroll month 2026-03 is in 2026-01 through 2026-06, so first-half row applies. Per R1, when a case schedule is supplied, its numeric values replace defaults. So use first-half schedule: - contribution rate: 0.04 - wage cap: 5000.00 - deduction cap: 400.00 - tax-free amount: 900.00 - upper bracket begins: 2800.00 - middle rate: 0.12 - upper rate: 0.20 Step 1: Employee contribution (R3): rate × min(gross, cap) = 0.04 × min(8070.19, 5000.00) = 0.04 × 5000.00 = 200.00. Rounded: 200.00. Step 2: Allowed deduction check (R4): allowed_deduction = 287.02. Must not exceed deduction cap 400.00 — OK. Must not exceed gross pay minus rounded contribution = 8070.19 − 200.00 = 7870.19 — OK. So allowed deduction = 287.02. Step 3: Taxable pay (R4): gross − contribution − deduction = 8070.19 − 200.00 − 287.02 = 7583.17. Step 4: Income tax (R5): progressive: - Tax-free: 900.00 → tax 0. - Middle band: from 900.00 to 2800.00 → 1900.00 × 0.12 = 228.00. - Upper band: above 2800.00 → 7583.17 − 2800.00 = 4783.17 × 0.20 = 956.634 → but don't round intermediate products separately before summing. Sum: 228.00 + 956.634 = 1184.634. Round half-up to two decimals: 1184.63. Wait: 4783.17 × 0.20 = 956.634. Total = 228.00 + 956.634 = 1184.634 → rounds to 1184.63. Step 5: Net pay (R6): gross − contribution − deduction − tax = 8070.19 − 200.00 − 287.02 − 1184.63 = 6398.54. Let me compute: 8070.19 − 200.00 = 7870.19. 7870.19 − 287.02 = 7583.17. 7583.17 − 1184.63 = 6398.54. Check: 7583.17 − 1184.63 = 6398.54. Yes. Fields: - decision: "calculate" - currency: "LCR" - gross_pay: "8070.19" - employee_contribution: "200.00" - allowed_deduction: "287.02" - taxable_pay: "7583.17" - income_tax: "1184.63" - net_pay: "6398.54" - clauses: R1, R2, R3, R4, R5, R6. Contract matches gross pay so no R9 needed. Explanation optional — I can include a brief one noting the case schedule replaced defaults for first-half. Output as one JSON object without Markdown fences.