← Heatmap / GLM 5.3 Flash · Task 15
GLM 5.3 Flash · Single-turn · Task 15 (Calculation, half-cent rounding tie)
Mean 50.0%
| Field | Expected | Rollout #1 (100%) | Rollout #2 (-50%) | Rollout #3 (100%) |
|---|---|---|---|---|
| decision | calculate | calculate | (malformed) | calculate |
| currency | LCR | LCR | (malformed) | LCR |
| gross pay | 3872.25 | 3872.25 | (malformed) | 3872.25 |
| employee contribution | 232.34 | 232.34 | (malformed) | 232.34 |
| allowed deduction | 61.98 | 61.98 | (malformed) | 61.98 |
| taxable pay | 3577.93 | 3577.93 | (malformed) | 3577.93 |
| income tax | 388.70 | 388.70 | (malformed) | 388.70 |
| net pay | 3189.23 | 3189.23 | (malformed) | 3189.23 |
| clauses | R1 R2 R3 R4 R5 R6 | R1 R2 R3 R4 R5 R6 | (malformed) | 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: {"35d44967e5524da6-payroll": {"kind": "payroll", "record": {"gross_pay": "3872.25", "payroll_month": "2026-04", "allowed_deduction": "61.98"}}}
Authoritative case reference schedule: {"first-half": {"rate": "0.06", "cap": "4000.00", "deduction": "400.00", "free": "1000.00", "upper": "3300.00", "middle_rate": "0.14", "upper_rate": "0.24"}, "second-half": {"rate": "0.08", "cap": "4000.00", "deduction": "400.00", "free": "1100.00", "upper": "2800.00", "middle_rate": "0.14", "upper_rate": "0.18"}}
Rollouts
Rollout #1 100.0% passed · 9.0s · $0.0008
| 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": "3872.25",
"employee_contribution": "232.34",
"allowed_deduction": "61.98",
"taxable_pay": "3577.93",
"income_tax": "388.70",
"net_pay": "3189.23",
"clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
"explanation": "Payroll month 2026-04 selects the case schedule's first-half row (rate 0.06, cap 4000.00, deduction cap 400.00, tax-free 1000.00, upper boundary 3300.00, middle 0.14, upper 0.24). Contribution: 0.06 x 3872.25 = 232.335 -> 232.34. Allowed deduction 61.98 is within the 400.00 cap and gross minus contribution (3639.91). Taxable pay: 3872.25 - 232.34 - 61.98 = 3577.93. Tax: 2300.00 x 0.14 + 277.93 x 0.24 = 322.00 + 66.7032 = 388.7032 -> 388.70. Net pay: 3872.25 - 232.34 - 61.98 - 388.70 = 3189.23."
}
Reasoning
Let me process this payroll record. Input: - gross_pay: 3872.25 - payroll_month: 2026-04 - allowed_deduction: 61.98 Case reference schedule (authoritative, replaces defaults): - first-half (2026-01 through 2026-06): rate 0.06, cap 4000.00, deduction 400.00, free 1000.00, upper 3300.00, middle_rate 0.14, upper_rate 0.24 - second-half: rate 0.08, cap 4000.00, deduction 400.00, free 1100.00, upper 2800.00, middle_rate 0.14, upper_rate 0.18 Payroll month 2026-04 → first-half row. Employee contribution (R3): rate × min(gross, cap) = 0.06 × min(3872.25, 4000.00) = 0.06 × 3872.25 = 232.335 → round half-up to 232.34? Wait, 0.06 × 3872.25 = 232.335. Round to two decimals: 232.335 → 232.34 (round half up: third decimal is 5, so round up: 232.34). Actually 232.335 → the digit after second decimal is 5, round half up gives 232.34. Hmm, but decimal arithmetic: 3872.25 × 0.06 = 232.335 exactly. Round half-up → 232.34. Allowed deduction check (R4): must not exceed deduction cap (400.00) or gross pay minus rounded contribution = 3872.25 − 232.34 = 3639.91. 61.98 ≤ 400.00 and ≤ 3639.91. OK. Taxable pay = gross − contribution − deduction = 3872.25 − 232.34 − 61.98 = 3577.93. Let me compute: 3872.25 − 232.34 = 3639.91. 3639.91 − 61.98 = 3577.93. Income tax (R5), first-half row: free = 1000.00, upper boundary = 3300.00, middle_rate 0.14, upper_rate 0.24. Taxable pay 3577.93. - Portion up to 1000: untaxed. - Portion 1000.01–3300: 3300 − 1000 = 2300 × 0.14 = 322.00. - Portion above 3300: 3577.93 − 3300 = 277.93 × 0.24 = 66.7032. Total tax = 322.00 + 66.7032 = 388.7032 → round half-up → 388.70. Net pay (R6) = gross − contribution − deduction − tax = 3872.25 − 232.34 − 61.98 − 388.70 = ? 3872.25 − 232.34 = 3639.91. 3639.91 − 61.98 = 3577.93. 3577.93 − 388.70 = 3189.23. So: - gross_pay: "3872.25" - employee_contribution: "232.34" - allowed_deduction: "61.98" - taxable_pay: "3577.93" - income_tax: "388.70" - net_pay: "3189.23" Clauses: R1 (row selection, schedule), R2 (rounding), R3 (contribution), R4 (deduction/taxable), R5 (tax), R6 (net pay). No amendment needed. Let me double-check the tax computation. Upper bracket begins at 3300.00 per the schedule's "upper": "3300.00". Taxable pay 3577.93 > 3300. Middle band: from 1000 to 3300 = 2300 × 0.14 = 322.00. Upper band: 277.93 × 0.24 = 66.7032. Sum 388.7032 → 388.70. R2 says "Do not round intermediate bracket products separately before summing income tax." So sum then round: 388.7032 → 388.70. Correct. Net pay: 3577.93 − 388.70 = 3189.23. Correct. Output JSON with decision "calculate", currency "LCR", fields, clauses ["R1","R2","R3","R4","R5","R6"]. Maybe include an explanation. The rules say an optional explanation string is permitted. I'll include a brief one.
Rollout #2 -50.0% malformed · 4.9s · $0.0005
| Component | Score | Clauses |
|---|---|---|
| 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": "3872.25",
"employee_contribution": "232.34",
"allowed_deduction": "61.98",
"taxable_pay": "3577.93",
"income_tax": "388.70",
"net_pay": "3189.23",
"clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
"explanation": "Payroll month 2026-04 selects the case schedule's first-half row (rate 0.06, cap 4000.00, deduction cap 400.00, free 1000.00, upper 3300.00, middle 0.14, upper rate 0.24). Contribution: 0.06 x 3872.25 = 232.335 -> 232.34. Deduction 61.98 is within the 400.00 cap and within 3872.25 - 232.34 = 3639.91. Taxable pay: 3872.25 - 232.34 - 61.98 = 3577.93. Tax: 0 on first 1000.00, 2300.00 x 0.14 = 322.00, (3577.93 - 3300.00) x 0.24 = 66.7032; total 388.7032 -> 388.70. Net pay: 3872.25 - 232.34 - 61.98 - 388.70 = 3189.23."
}
```
Reasoning
Let me work through this. Payroll month: 2026-04 → first-half row of the case schedule. Case schedule first-half: rate 0.06, cap 4000.00, deduction 400.00, free 1000.00, upper 3300.00, middle_rate 0.14, upper_rate 0.24. Gross pay: 3872.25. Employee contribution: rate × min(gross, cap) = 0.06 × min(3872.25, 4000.00) = 0.06 × 3872.25 = 232.335 → round half up to 232.34? Wait, 232.335 rounds to 232.34 (round-half-up at 2 decimals: 232.335 → third decimal is 5, so round up: 232.34). Yes, 232.34. Allowed deduction: 61.98. Check: must not exceed deduction cap 400.00, and not exceed gross pay minus rounded contribution: 3872.25 − 232.34 = 3639.91. 61.98 ≤ both. OK. Taxable pay: 3872.25 − 232.34 − 61.98 = 3577.93. Income tax: brackets: free 1000.00, upper begins 3300.00. - 0–1000: 0 tax. - 1000–3300: 2300 × 0.14 = 322.00. - 3300–3577.93: 277.93 × 0.24 = 66.7032. Total = 322.00 + 66.7032 = 388.7032 → round to 388.70. Net pay: 3872.25 − 232.34 − 61.98 − 388.70 = ? 3872.25 − 232.34 = 3639.91. 3639.91 − 61.98 = 3577.93. 3577.93 − 388.70 = 3189.23. So net pay 3189.23. Note: the case schedule overrides defaults (default first-half has rate 0.05, cap 4000, deduction 300, free 1000, upper 3000, middle 0.10, upper 0.20). The schedule must be used: rate 0.06, deduction 400, upper 3300, middle 0.14, upper_rate 0.24. Citations: R1 (selecting row/schedule), R2 (rounding), R3 (contribution), R4 (deduction and taxable pay), R5 (tax), R6 (net pay/answer format). No amendment needed, so no R9. Output JSON with decision calculate, currency LCR, fields as strings with two decimals, clauses.
Rollout #3 100.0% passed · 5.9s · $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": "3872.25",
"employee_contribution": "232.34",
"allowed_deduction": "61.98",
"taxable_pay": "3577.93",
"income_tax": "388.70",
"net_pay": "3189.23",
"clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
"explanation": "Payroll month 2026-04 selects the authoritative case schedule's first-half row (rate 0.06, cap 4000.00, deduction cap 400.00, free 1000.00, upper 3300.00, middle 0.14, upper 0.24). Contribution: 3872.25 x 0.06 = 232.335 -> 232.34. Deduction 61.98 is within the 400.00 cap and below gross minus contribution, so it is allowed. Taxable pay: 3872.25 - 232.34 - 61.98 = 3577.93. Tax: first 1000.00 untaxed; 2300.00 x 0.14 = 322.00; (3577.93 - 3300.00) x 0.24 = 66.7032; total 388.7032 -> 388.70. Net pay: 3872.25 - 232.34 - 61.98 - 388.70 = 3189.23."
}
Reasoning
Let me work through this payroll calculation. Input: - gross_pay: 3872.25 - payroll_month: 2026-04 - allowed_deduction: 61.98 Payroll month 2026-04 is in first-half (2026-01 through 2026-06), so use the authoritative case schedule's "first-half" row: - rate: 0.06 - cap: 4000.00 - deduction cap: 400.00 - tax-free: 1000.00 - upper boundary: 3300.00 - middle rate: 0.14 - upper rate: 0.24 Step 1: Employee contribution (R3) - min(gross, cap) = min(3872.25, 4000.00) = 3872.25 - contribution = 3872.25 × 0.06 = 232.335 → round half up to 232.34? Wait, 232.335 rounds to 232.34 (round half up: 232.335 → third decimal is 5, so round up second decimal: 232.34). Actually 3872.25 × 0.06 = 232.335 exactly. Round to two decimals: 232.335 → 232.34 (half up). Hmm, let me double-check: 3872.25 × 0.06 = 232.335. Yes. Round-half-up gives 232.34. Step 2: Allowed deduction check (R4) - Deduction cap = 400.00, deduction = 61.98 ≤ 400.00 ✓ - Gross pay minus contribution = 3872.25 − 232.34 = 3639.91; deduction 61.98 ≤ 3639.91 ✓ - So allowed_deduction = 61.98 Step 3: Taxable pay (R4) - taxable = gross − contribution − deduction = 3872.25 − 232.34 − 61.98 = 3577.93 Let me compute: 3872.25 − 232.34 = 3639.91. 3639.91 − 61.98 = 3577.93. Step 4: Income tax (R5) - Tax-free amount: 1000.00 - Upper bracket begins: 3300.00 - Taxable pay = 3577.93 - Portion 0–1000: untaxed → 0 - Portion 1000–3300: 2300.00 × 0.14 = 322.00 - Portion above 3300: 3577.93 − 3300 = 277.93 × 0.24 = 66.7032 - Total tax = 322.00 + 66.7032 = 388.7032 → round to 388.70 Step 5: Net pay (R6) - net = gross − contribution − deduction − tax = 3872.25 − 232.34 − 61.98 − 388.70 - 3872.25 − 232.34 = 3639.91 - 3639.91 − 61.98 = 3577.93 - 3577.93 − 388.70 = 3189.23 Net pay = 3189.23 Fields: - decision: "calculate" - currency: "LCR" - gross_pay: "3872.25" - employee_contribution: "232.34" - allowed_deduction: "61.98" - taxable_pay: "3577.93" - income_tax: "388.70" - net_pay: "3189.23" - clauses: R1 (selecting row via schedule), R2 (rounding), R3 (contribution), R4 (deduction/taxable), R5 (tax), R6 (net pay/answer format) The schedule is authoritative per R1: "When supplied, its numeric values replace the defaults above for that case only." So I use the first-half schedule values. Clauses: ["R1", "R2", "R3", "R4", "R5", "R6"] No amendment needed, no conflict (no contract_gross_pay). Output JSON only, no markdown fences.