← 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
| 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": "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
| 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": "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
| 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": "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.