← Heatmap / GLM 5.3 Flash · Task 19
GLM 5.3 Flash · Single-turn · Task 19 (Calculation, upper bracket)
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 | 4326.01 | 4326.01 | (malformed) | 4326.01 |
| employee contribution | 302.82 | 302.82 | (malformed) | 302.82 |
| allowed deduction | 386.64 | 386.64 | (malformed) | 386.64 |
| taxable pay | 3636.55 | 3636.55 | (malformed) | 3636.55 |
| income tax | 198.58 | 198.58 | (malformed) | 198.58 |
| net pay | 3437.97 | 3437.97 | (malformed) | 3437.97 |
| 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: {"f8d9f5fe0eb33c57-payroll": {"kind": "payroll", "record": {"gross_pay": "4326.01", "payroll_month": "2026-03", "allowed_deduction": "386.64"}}}
Authoritative case reference schedule: {"first-half": {"rate": "0.07", "cap": "4500.00", "deduction": "400.00", "free": "1200.00", "upper": "3600.00", "middle_rate": "0.08", "upper_rate": "0.18"}, "second-half": {"rate": "0.05", "cap": "4500.00", "deduction": "400.00", "free": "1200.00", "upper": "3600.00", "middle_rate": "0.08", "upper_rate": "0.22"}}
Rollouts
Rollout #1 100.0% passed · 5.5s · $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": "4326.01",
"employee_contribution": "302.82",
"allowed_deduction": "386.64",
"taxable_pay": "3636.55",
"income_tax": "198.58",
"net_pay": "3437.97",
"clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
"explanation": "Payroll month 2026-03 selects the first-half reference row, and the authoritative case schedule replaces the defaults: rate 0.07, wage cap 4500.00, deduction cap 400.00, tax-free 1200.00, upper bracket 3600.00, middle rate 0.08, upper rate 0.18. Employee contribution = 0.07 \u00d7 min(4326.01, 4500.00) = 302.8207 \u2192 302.82 (R3). Allowed deduction 386.64 is within the 400.00 cap and within gross pay minus contribution (4023.19), so it is valid (R4). Taxable pay = 4326.01 \u2212 302.82 \u2212 386.64 = 3636.55 (R4). Income tax is marginal: 0 on the first 1200.00; 2400.00 \u00d7 0.08 = 192.00; (3636.55 \u2212 3600.00) \u00d7 0.18 = 6.579; total 198.579 \u2192 198.58 rounded half-up (R2, R5). Net pay = 4326.01 \u2212 302.82 \u2212 386.64 \u2212 198.58 = 3437.97 (R6)."
}
Reasoning
Let me process this payroll record. Payroll month: 2026-03 → first-half row (2026-01 through 2026-06). The case provides an authoritative reference schedule. Per R1: "A case may include an authoritative `reference_tables` schedule for first-half and second-half. When supplied, its numeric values replace the defaults above for that case only." Wait — the schedule here doesn't include "rate" ... let me check. The schedule includes: rate, cap, deduction, free, upper, middle_rate, upper_rate. First-half: rate "0.07", cap "4500.00", deduction "400.00", free "1200.00", upper "3600.00", middle_rate "0.08", upper_rate "0.18". Second-half: rate "0.05", cap "4500.00", deduction "400.00", free "1200.00", upper "3600.00", middle_rate "0.08", upper_rate "0.22". Yes, all required fields present. So for 2026-03 (first-half): - Contribution rate: 0.07 - Wage cap: 4500.00 - Deduction cap: 400.00 - Tax-free amount: 1200.00 - Upper bracket begins: 3600.00 - Middle rate: 0.08 - Upper rate: 0.18 Gross pay: 4326.01 Allowed deduction: 386.64 Step 1: Employee contribution = 0.07 × min(4326.01, 4500.00) = 0.07 × 4326.01 = 302.8207 → round to 302.82. Step 2: Allowed deduction check: must not exceed deduction cap (400.00) or gross pay minus rounded contribution: 4326.01 − 302.82 = 4023.19. 386.64 ≤ 400.00 and ≤ 4023.19. Valid. Step 3: Taxable pay = 4326.01 − 302.82 − 386.64 = 3636.55. Let me compute: 4326.01 − 302.82 = 4023.19. 4023.19 − 386.64 = 3636.55. Step 4: Income tax (marginal): - Up to 1200.00: 0 tax. - 1200.00 to 3600.00: 2400.00 × 0.08 = 192.00. - Above 3600.00: 3636.55 − 3600.00 = 36.55 × 0.18 = 6.579 → 6.579. Total = 192.00 + 6.579 = 198.579 → round half-up to 198.58. Step 5: Net pay = 4326.01 − 302.82 − 386.64 − 198.58 = ? 4326.01 − 302.82 = 4023.19. 4023.19 − 386.64 = 3636.55. 3636.55 − 198.58 = 3437.97. So: - gross_pay: "4326.01" - employee_contribution: "302.82" - allowed_deduction: "386.64" - taxable_pay: "3636.55" - income_tax: "198.58" - net_pay: "3437.97" - currency: "LCR" - decision: "calculate" - clauses: R1, R2, R3, R4, R5, R6 (and R9 not needed since no amendment/conflict; no contract_gross_pay present). Per R6: "Provide clause references supporting the calculation." Calculated answers cite R1 through R6. So clauses: ["R1","R2","R3","R4","R5","R6"]. No contract gross pay present, so no conflict. Output JSON without Markdown fences. Include explanation optionally. Keep required fields only.
Rollout #2 -50.0% malformed · 6.8s · $0.0009
| 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": "4326.01",
"employee_contribution": "302.82",
"allowed_deduction": "386.64",
"taxable_pay": "3636.55",
"income_tax": "198.58",
"net_pay": "3437.97",
"clauses": ["R1", "R2", "R3", "R4", "R5", "R6"]
}
```
Reasoning
Let me process this payroll record. Input: - gross_pay: 4326.01 - payroll_month: 2026-03 - allowed_deduction: 386.64 The case has an authoritative reference schedule: - first-half (2026-01 through 2026-06): rate 0.07, cap 4500.00, deduction 400.00, free 1200.00, upper 3600.00, middle_rate 0.08, upper_rate 0.18 - second-half (2026-07 through 2026-12): rate 0.05, cap 4500.00, deduction 400.00, free 1200.00, upper 3600.00, middle_rate 0.08, upper_rate 0.22 Payroll month 2026-03 → first-half row. Per R1: the authoritative case schedule replaces defaults. So for 2026-03 (first-half): - Contribution rate: 0.07 - Wage cap: 4500.00 - Deduction cap: 400.00 - Tax-free amount: 1200.00 - Upper bracket begins: 3600.00 - Middle rate: 0.08 - Upper rate: 0.18 Step 1: Employee contribution (R3): min(gross, cap) = min(4326.01, 4500.00) = 4326.01 Contribution = 4326.01 × 0.07 = 302.8207 Round half-up to two decimals: 302.82 Let me compute precisely: 4326.01 × 0.07 = 302.8207. Round to 302.82. Step 2: Allowed deduction (R4): Check: allowed_deduction ≤ deduction cap (400.00): 386.64 ≤ 400.00 ✓ Check: allowed_deduction ≤ gross pay minus rounded employee contribution: 4326.01 − 302.82 = 4023.19. 386.64 ≤ 4023.19 ✓ Step 3: Taxable pay (R4): Taxable = gross − contribution − deduction = 4326.01 − 302.82 − 386.64 = 3636.55 Let me compute: 4326.01 − 302.82 = 4023.19. 4023.19 − 386.64 = 3636.55. Step 4: Income tax (R5): Progressive with first-half schedule: - Tax-free amount: 1200.00 - Upper bracket begins: 3600.00 - Middle rate: 0.08 - Upper rate: 0.18 Taxable pay = 3636.55. Portion up to 1200.00: untaxed → 0 Portion from 1200.00 to 3600.00: 3600.00 − 1200.00 = 2400.00 at middle rate 0.08 → 2400.00 × 0.08 = 192.00 Portion above 3600.00: 3636.55 − 3600.00 = 36.55 at upper rate 0.18 → 36.55 × 0.18 = 6.579 → 6.579 Total tax = 192.00 + 6.579 = 198.579 → round half-up → 198.58 Let me verify: 36.55 × 0.18 = 6.579. 192 + 6.579 = 198.579. Rounded to two decimals: 198.58. Do not round intermediate bracket products separately before summing (R2). So 2400.00 × 0.08 = 192.00 exactly; 36.55 × 0.18 = 6.579. Sum = 198.579 → 198.58. Step 5: Net pay (R6): Net = gross − contribution − deduction − tax = 4326.01 − 302.82 − 386.64 − 198.58 4326.01 − 302.82 = 4023.19 4023.19 − 386.64 = 3636.55 3636.55 − 198.58 = 3437.97 Net pay = 3437.97 Check: taxable pay − tax + deduction = net? 3636.55 − 198.58 = 3437.97. Yes, matches (net = taxable − tax, since deduction is withheld from take-home as well). Wait: net = gross − contribution − deduction − tax. Taxable = gross − contribution − deduction. So net = taxable − tax = 3636.55 − 198.58 = 3437.97. ✓ Answer fields: - decision: "calculate" - currency: "LCR" - gross_pay: "4326.01" - employee_contribution: "302.82" - allowed_deduction: "386.64" - taxable_pay: "3636.55" - income_tax: "198.58" - net_pay: "3437.97" - clauses: ["R1", "R2", "R3", "R4", "R5", "R6"] — R9 not needed since no contract conflict/amendment. The instructions say clauses should only contain clauses that directly govern the answer. Calculated answers cite R1 through R6. No amendment needed, so no R9. Let me double-check contribution rounding: 4326.01 × 0.07: 4326.01 × 0.07 = 4326.01 × 7 / 100 = 30282.07 / 100 = 302.8207. Round half-up to two decimals: third decimal is 0 in 302.8207? 302.8207 — digits: 302.82|07. The part beyond two decimals is 0.007, which is ≥ 0.005, so rounds up the second decimal: 302.82 remains 302.82? Let's be careful: 302.8207. Two decimals: 302.82, third decimal digit is 0 (digits: 8,2,0,7). Actually 302.8207 = 302.82 + 0.0007. Third decimal is 0, fourth is 7. Round half-up: look at digits beyond second decimal: 0.0007 < 0.005, so round down → 302.82. Yes, 302.82. Wait: 4326.01 × 0.07. 4326.01 × 7 = 30282.07. Divided by 100: 302.8207. Yes. Two decimals: 302.82 (since 302.8207 → the fraction beyond .82 is .0007 < .005). Correct: 302.82. Income tax check: 36.55 × 0.18 = 6.579. Sum 198.579 → rounds to 198.58 (third decimal 9 ≥ 5 → round up 198.58). Yes. Everything checks out. Format JSON with two-decimal strings.
Rollout #3 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": "4326.01",
"employee_contribution": "302.82",
"allowed_deduction": "386.64",
"taxable_pay": "3636.55",
"income_tax": "198.58",
"net_pay": "3437.97",
"clauses": ["R1", "R2", "R3", "R4", "R5", "R6"],
"explanation": "Payroll month 2026-03 selects the authoritative first-half schedule row (rate 0.07, cap 4500.00, deduction cap 400.00, free 1200.00, upper 3600.00, middle 0.08, upper rate 0.18). Contribution = 0.07 \u00d7 min(4326.01, 4500.00) = 302.82. Deduction 386.64 is within the 400.00 cap and within available pay (4326.01 \u2212 302.82 = 4023.19). Taxable pay = 4326.01 \u2212 302.82 \u2212 386.64 = 3636.55. Tax = 192.00 (2400.00 \u00d7 0.08) + 6.579 (36.55 \u00d7 0.18) = 198.579 \u2192 198.58. Net pay = 4326.01 \u2212 302.82 \u2212 386.64 \u2212 198.58 = 3437.97."
}
Reasoning
Let me work through this payroll calculation. Input: - gross_pay: "4326.01" - payroll_month: "2026-03" - allowed_deduction: "386.64" Case reference schedule (authoritative, supplied for this case): - first-half (2026-01 through 2026-06): rate 0.07, cap 4500.00, deduction 400.00, free 1200.00, upper 3600.00, middle_rate 0.08, upper_rate 0.18 - second-half (2026-07 through 2026-12): rate 0.05, cap 4500.00, deduction 400.00, free 1200.00, upper 3600.00, middle_rate 0.08, upper_rate 0.22 Payroll month is 2026-03, which is in first half (2026-01 through 2026-06). So use: - contribution rate: 0.07 - wage cap: 4500.00 - deduction cap: 400.00 - tax-free amount: 1200.00 - upper bracket begins: 3600.00 - middle rate: 0.08 - upper rate: 0.18 Step 1: Employee contribution (R3): min(gross_pay, cap) = min(4326.01, 4500.00) = 4326.01 Contribution = 0.07 × 4326.01 = 302.8207 → round to 302.82 Step 2: Allowed deduction check (R4): allowed_deduction = 386.64 Check: must not exceed deduction cap (400.00) — 386.64 ≤ 400.00 ✓ Must not exceed gross pay minus rounded contribution: 4326.01 − 302.82 = 4023.19 — 386.64 ≤ 4023.19 ✓ Step 3: Taxable pay (R4): taxable_pay = gross_pay − contribution − allowed_deduction = 4326.01 − 302.82 − 386.64 = 3636.55 Let me compute: 4326.01 − 302.82 = 4023.19; 4023.19 − 386.64 = 3636.55. Step 4: Income tax (R5): First-half row: free = 1200.00, upper = 3600.00, middle rate 0.08, upper rate 0.18. Taxable pay = 3636.55 Portion up to 1200.00: untaxed. Portion from 1200.00 to 3600.00: 3600.00 − 1200.00 = 2400.00 at 0.08 = 192.00 Portion above 3600.00: 3636.55 − 3600.00 = 36.55 at 0.18 = 6.579 → 6.58 (but do not round intermediate products before summing? R2 says "Do not round intermediate bracket products separately before summing income tax." So sum: 192.00 + 6.579 = 198.579 → round to 198.58. Total income tax = 198.58. Step 5: Net pay (R6): net_pay = gross_pay − contribution − allowed_deduction − income_tax = 4326.01 − 302.82 − 386.64 − 198.58 = 4326.01 − 302.82 = 4023.19 4023.19 − 386.64 = 3636.55 3636.55 − 198.58 = 3437.97 Answer fields: - decision: "calculate" - currency: "LCR" - gross_pay: "4326.01" - employee_contribution: "302.82" - allowed_deduction: "386.64" - taxable_pay: "3636.55" - income_tax: "198.58" - net_pay: "3437.97" - clauses: which clauses govern? R1 (selecting the reference row, schedule), R2 (money and rounding), R3 (contribution), R4 (deduction and taxable pay), R5 (income tax), R6 (net pay). No amendment needed, so not R9. Clauses: ["R1", "R2", "R3", "R4", "R5", "R6"]. Explanation optional; maybe include a brief one. The instructions say an optional explanation string is permitted. I'll include a short one noting the case schedule replaces defaults. Output as a single JSON object without markdown fences.