Luma Payroll Gym
← Heatmap / MiMo V2.6 Pro · Task 78
MiMo V2.6 Pro · Tool use · Task 78 (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 948.45 948.45 948.45 948.45
employee contribution 47.42 47.42 47.42 47.42
allowed deduction 1.03 1.03 1.03 1.03
taxable pay 900.00 900.00 900.00 900.00
income tax 0.00 0.00 0.00 0.00
net pay 900.00 900.00 900.00 900.00
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.
Retrieve the case inputs with list_documents and read_document. Reference rows are available only through lookup_reference. Use calculate for exact decimal arithmetic.
Rollouts
Rollout #1 100.0% passed · 4 tool calls · 31.5s · $0.0012
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
list_documents()
Reasoning
Let me list documents first.
Tool
[
  {"id": "5178404fc18b0e41-payroll", "kind": "payroll"}
]
Assistant
read_document(document_id="5178404fc18b0e41-payroll")
Reasoning
Read the payroll document.
Tool
{
  "kind": "payroll",
  "record": {"gross_pay": "948.45", "payroll_month": "2026-05", "allowed_deduction": "1.03"}
}
Assistant
lookup_reference(reference="first-half")
Reasoning
Payroll month 2026-05 → first-half row. Lookup reference.
Tool
{
  "reference": "first-half",
  "months": ["2026-01", "2026-06"],
  "rate": "0.05",
  "cap": "4500.00",
  "deduction": "400.00",
  "free": "900.00",
  "upper": "3300.00",
  "middle_rate": "0.08",
  "upper_rate": "0.18"
}
Assistant
calculate(program="contribution = round(min(948.45, 4500.00) * 0.05, 2)\nallowed = min(1.03, 400.00, 948.45 - contribution)\ntaxable = 948.45 - contribution - allowed\nmiddle_part = max(0.00, min(taxable, 3300.00) - 900.00)\nupper_part = max(0.00, taxable - 3300.00)\nincome_tax = round(middle_part * 0.08 + upper_part * 0.18, 2)\nnet = 948.45 - contribution - allowed - income_tax")
Reasoning
Gross pay 948.45. Contribution = 0.05 * min(948.45, 4500) = 0.05 * 948.45 = 47.4225 → 47.42.

Allowed deduction 1.03 ≤ min(400, 948.45 - 47.42 = 901.03) → OK.

Taxable pay = 948.45 - 47.42 - 1.03 = 900.00.

Tax: free 900. Taxable 900.00 → up to 900 untaxed. Portion above 900 up to 3300 at 8% = 0. Income tax = 0.00.

Net pay = 948.45 - 47.42 - 1.03 - 0 = 900.00.

Calculate with tool.
Tool
{
  "results": {"contribution": "47.42", "allowed": "1.03", "taxable": "900.00", "middle_part": "0.00", "upper_part": "0.00", "income_tax": "0.00", "net": "900.00"}
}
Assistant
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "948.45",
  "employee_contribution": "47.42",
  "allowed_deduction": "1.03",
  "taxable_pay": "900.00",
  "income_tax": "0.00",
  "net_pay": "900.00",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"]
}
Reasoning
Return JSON.
Rollout #2 100.0% passed · 4 tool calls · 21.6s · $0.0011
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
list_documents()
Reasoning
Let me list documents first.
Tool
[
  {"id": "5178404fc18b0e41-payroll", "kind": "payroll"}
]
Assistant
read_document(document_id="5178404fc18b0e41-payroll")
Reasoning
Read it.
Tool
{
  "kind": "payroll",
  "record": {"gross_pay": "948.45", "payroll_month": "2026-05", "allowed_deduction": "1.03"}
}
Assistant
lookup_reference(reference="first-half")
Reasoning
Payroll month 2026-05 → first-half row. Lookup reference.
Tool
{
  "reference": "first-half",
  "months": ["2026-01", "2026-06"],
  "rate": "0.05",
  "cap": "4500.00",
  "deduction": "400.00",
  "free": "900.00",
  "upper": "3300.00",
  "middle_rate": "0.08",
  "upper_rate": "0.18"
}
Assistant
calculate(program="contribution = round(min(948.45, 4500.00) * 0.05, 2)\ntaxable_pay = 948.45 - contribution - 1.03\ntax_middle = round(max(0.00, min(taxable_pay, 3300.00) - 900.00) * 0.08, 2)\ntax_upper = round(max(0.00, taxable_pay - 3300.00) * 0.18, 2)\nincome_tax = round(tax_middle + tax_upper, 2)\nnet_pay = 948.45 - contribution - 1.03 - income_tax")
Reasoning
Compute: contribution = round(min(948.45, 4500)*0.05, 2) = round(47.4225,2)=47.42. Allowed deduction 1.03 ≤ 400 and ≤ 948.45-47.42=901.03. OK. Taxable = 948.45 - 47.42 - 1.03 = 900.00. Tax: free 900 → taxable 900.00 is exactly at free amount → tax = 0.00. Net = 948.45 - 47.42 - 1.03 - 0 = 900.00.

Use calculate.
Tool
{
  "results": {"contribution": "47.42", "taxable_pay": "900.00", "tax_middle": "0.00", "tax_upper": "0.00", "income_tax": "0.00", "net_pay": "900.00"}
}
Assistant
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "948.45",
  "employee_contribution": "47.42",
  "allowed_deduction": "1.03",
  "taxable_pay": "900.00",
  "income_tax": "0.00",
  "net_pay": "900.00",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"]
}
Reasoning
Return JSON. Note: R2 says do not round intermediate bracket products separately before summing income tax. Here both are zero anyway, fine.
Rollout #3 100.0% passed · 5 tool calls · 22.3s · $0.0013
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
list_documents()
Reasoning
Let me start by listing documents.
Tool
[
  {"id": "5178404fc18b0e41-payroll", "kind": "payroll"}
]
Assistant
read_document(document_id="5178404fc18b0e41-payroll")
Reasoning
Read the payroll document.
Tool
{
  "kind": "payroll",
  "record": {"gross_pay": "948.45", "payroll_month": "2026-05", "allowed_deduction": "1.03"}
}
Assistant
lookup_reference(reference="first-half")lookup_reference(reference="second-half")
Reasoning
Payroll month 2026-05 → first-half reference (assume first-half covers months 01-06). Let me look up.
Tool
{
  "reference": "first-half",
  "months": ["2026-01", "2026-06"],
  "rate": "0.05",
  "cap": "4500.00",
  "deduction": "400.00",
  "free": "900.00",
  "upper": "3300.00",
  "middle_rate": "0.08",
  "upper_rate": "0.18"
}
Tool
{
  "reference": "second-half",
  "months": ["2026-07", "2026-12"],
  "rate": "0.06",
  "cap": "3500.00",
  "deduction": "400.00",
  "free": "1100.00",
  "upper": "2800.00",
  "middle_rate": "0.10",
  "upper_rate": "0.22"
}
Assistant
calculate(program="employee_contribution = round(min(948.45, 4500.00) * 0.05, 2)\nallowed_deduction = 1.03\ntaxable_pay = 948.45 - employee_contribution - allowed_deduction\ntax_middle = round(max(0.00, min(taxable_pay, 3300.00) - 900.00) * 0.08, 2)\ntax_upper = round(max(0.00, taxable_pay - 3300.00) * 0.18, 2)\nincome_tax = round(tax_middle + tax_upper, 2)\nnet_pay = 948.45 - employee_contribution - allowed_deduction - income_tax")
Reasoning
2026-05 → first-half row applies. rate 0.05, cap 4500, deduction cap 400, free 900, upper 3300, middle 0.08, upper 0.18.

gross_pay = 948.45
employee_contribution = round(min(948.45, 4500) * 0.05, 2) = round(47.4225, 2) = 47.42
allowed_deduction = 1.03, must not exceed 400 or gross - contribution = 948.45 - 47.42 = 901.03. OK.
taxable_pay = 948.45 - 47.42 - 1.03 = 900.00
income_tax: taxable 900.00, free 900 → portion up to 900 untaxed. Above 900 up to 3300 at 0.08: 0. Total tax = 0.00
net_pay = 948.45 - 47.42 - 1.03 - 0.00 = 900.00

Use calculate for exactness.
Tool
{
  "results": {"employee_contribution": "47.42", "allowed_deduction": "1.03", "taxable_pay": "900.00", "tax_middle": "0.00", "tax_upper": "0.00", "income_tax": "0.00", "net_pay": "900.00"}
}
Assistant
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "948.45",
  "employee_contribution": "47.42",
  "allowed_deduction": "1.03",
  "taxable_pay": "900.00",
  "income_tax": "0.00",
  "net_pay": "900.00",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"]
}
Reasoning
Note R2 says "Do not round intermediate bracket products separately before summing income tax." My approach rounded bracket products separately. But here both are zero so total is the same. However for correctness of my own computation, it doesn't matter. Actually let me verify: tax = (min(900,3300)-900)*0.08 + max(0,900-3300)*0.18 = 0 + 0 = 0. Fine.

Output JSON with clauses R1-R6.