Luma Payroll Gym
← Heatmap / MiMo V2.6 Pro · Task 51
MiMo V2.6 Pro · Tool use · Task 51 (Calculation, below 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 850.21 850.21 850.21 850.21
employee contribution 51.01 51.01 51.01 51.01
allowed deduction 125.58 125.58 125.58 125.58
taxable pay 673.62 673.62 673.62 673.62
income tax 0.00 0.00 0.00 0.00
net pay 673.62 673.62 673.62 673.62
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 · 5 tool calls · 15.3s · $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": "39d9a95cfc04fd53-payroll", "kind": "payroll"},
  {"id": "39d9a95cfc04fd53-contract", "kind": "contract"}
]
Assistant
read_document(document_id="39d9a95cfc04fd53-payroll")read_document(document_id="39d9a95cfc04fd53-contract")
Reasoning
Let me read both documents.
Tool
{
  "kind": "payroll",
  "record": {"gross_pay": "850.21", "payroll_month": "2026-01", "allowed_deduction": "125.58"}
}
Tool
{
  "kind": "contract",
  "gross_pay": "850.21"
}
Assistant
lookup_reference(reference="first-half")
Reasoning
Payroll month 2026-01, gross850.21, deduction 125.58. Contract matches. Get first-half reference.
Tool
{
  "reference": "first-half",
  "months": ["2026-01", "2026-06"],
  "rate": "0.06",
  "cap": "4500.00",
  "deduction": "400.00",
  "free": "1100.00",
  "upper": "2800.00",
  "middle_rate": "0.12",
  "upper_rate": "0.18"
}
Assistant
calculate(program="contribution = round(min(850.21, 4500.00) * 0.06, 2)\nallowed = min(125.58, 400.00, 850.21 - contribution)\ntaxable = 850.21 - contribution - allowed\ntaxable_for_tax = max(0.00, taxable - 1100.00)\nmiddle_part = min(taxable_for_tax, 2800.00 - 1100.00)\nupper_part = max(0.00, taxable - 2800.00)\nincome_tax = round(middle_part * 0.12 + upper_part * 0.18, 2)\nnet_pay = 850.21 - contribution - allowed - income_tax")
Reasoning
Contribution = 0.06 * min(850.21, 4500) = 51.0126 → 51.01.
Allowed deduction 125.58 ≤ 400 and ≤ 850.21 - 51.01 = 799.20. OK.
Taxable = 850.21 - 51.01 - 125.58 = 673.62. Below free 1100 → tax 0.
Net = 850.21 - 51.01 - 125.58 - 0 = 673.62.
Tool
{
  "results": {"contribution": "51.01", "allowed": "125.58", "taxable": "673.62", "taxable_for_tax": "0.00", "middle_part": "0.00", "upper_part": "0.00", "income_tax": "0.00", "net_pay": "673.62"}
}
Assistant
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "850.21",
  "employee_contribution": "51.01",
  "allowed_deduction": "125.58",
  "taxable_pay": "673.62",
  "income_tax": "0.00",
  "net_pay": "673.62",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"]
}
Reasoning
Return JSON with clauses R1-R6 (calculated answers cite R1 through R6). No amendment needed (contract matches).
Rollout #2 100.0% passed · 5 tool calls · 18.4s · $0.0015
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": "39d9a95cfc04fd53-payroll", "kind": "payroll"},
  {"id": "39d9a95cfc04fd53-contract", "kind": "contract"}
]
Assistant
read_document(document_id="39d9a95cfc04fd53-payroll")read_document(document_id="39d9a95cfc04fd53-contract")
Reasoning
Let me read both documents and look up reference rows.
Tool
{
  "kind": "payroll",
  "record": {"gross_pay": "850.21", "payroll_month": "2026-01", "allowed_deduction": "125.58"}
}
Tool
{
  "kind": "contract",
  "gross_pay": "850.21"
}
Assistant
lookup_reference(reference="first-half")
Reasoning
Payroll month 2026-01 → first-half reference row (2026 is covered; first-half presumably covers months 01-06). Let me look up both to be safe? The rules say lookup first-half or second-half. 2026-01 is first half. I'll look up first-half.

Contract gross pay matches payroll gross pay (850.21 = 850.21), so no conflict. No amendment needed.

Now get reference row.
Tool
{
  "reference": "first-half",
  "months": ["2026-01", "2026-06"],
  "rate": "0.06",
  "cap": "4500.00",
  "deduction": "400.00",
  "free": "1100.00",
  "upper": "2800.00",
  "middle_rate": "0.12",
  "upper_rate": "0.18"
}
Assistant
calculate(program="contribution = round(min(850.21, 4500.00) * 0.06, 2)\nallowed = min(125.58, 400.00, 850.21 - contribution)\ntaxable = 850.21 - contribution - allowed\ntax = round(min(taxable, 1100.00) * 0 + max(0.00, min(taxable, 2800.00) - 1100.00) * 0.12 + max(0.00, taxable - 2800.00) * 0.18, 2)\nnet = 850.21 - contribution - allowed - tax")
Reasoning
Payroll month 2026-01 is in first-half (months 2026-01 through 2026-06). Row: rate 0.06, cap 4500.00, deduction cap 400.00, free 1100.00, upper 2800.00, middle_rate 0.12, upper_rate 0.18.

gross_pay = 850.21
employee_contribution = round(min(850.21, 4500.00) * 0.06, 2) = round(51.0126, 2) = 51.01
allowed_deduction = 125.58. Must not exceed deduction cap 400.00, and must not exceed gross - contribution = 850.21 - 51.01 = 799.20. 125.58 ≤ 400 and ≤ 799.20. OK.
taxable_pay = 850.21 - 51.01 - 125.58 = 673.62
Taxable pay 673.62 ≤ free 1100.00 → income tax = 0.00
net_pay = 850.21 - 51.01 - 125.58 - 0.00 = 673.62

Let me use calculate to verify.
Tool
{
  "results": {"contribution": "51.01", "allowed": "125.58", "taxable": "673.62", "tax": "0.00", "net": "673.62"}
}
Assistant
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "850.21",
  "employee_contribution": "51.01",
  "allowed_deduction": "125.58",
  "taxable_pay": "673.62",
  "income_tax": "0.00",
  "net_pay": "673.62",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"]
}
Reasoning
All values confirmed. Return JSON.
Rollout #3 100.0% passed · 5 tool calls · 15.6s · $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 list documents first.
Tool
[
  {"id": "39d9a95cfc04fd53-payroll", "kind": "payroll"},
  {"id": "39d9a95cfc04fd53-contract", "kind": "contract"}
]
Assistant
read_document(document_id="39d9a95cfc04fd53-payroll")read_document(document_id="39d9a95cfc04fd53-contract")
Reasoning
Read both documents.
Tool
{
  "kind": "payroll",
  "record": {"gross_pay": "850.21", "payroll_month": "2026-01", "allowed_deduction": "125.58"}
}
Tool
{
  "kind": "contract",
  "gross_pay": "850.21"
}
Assistant
lookup_reference(reference="first-half")
Reasoning
Gross pay 850.21, month 2026-01 (first-half row), allowed deduction 125.58. Contract matches gross pay, no conflict. Get reference first-half.
Tool
{
  "reference": "first-half",
  "months": ["2026-01", "2026-06"],
  "rate": "0.06",
  "cap": "4500.00",
  "deduction": "400.00",
  "free": "1100.00",
  "upper": "2800.00",
  "middle_rate": "0.12",
  "upper_rate": "0.18"
}
Assistant
calculate(program="contribution = round(min(850.21, 4500.00) * 0.06, 2)\ntaxable = 850.21 - contribution - 125.58\nmiddle_portion = max(0.00, min(taxable, 2800.00) - 1100.00)\nupper_portion = max(0.00, taxable - 2800.00)\nincome_tax = round(middle_portion * 0.12 + upper_portion * 0.18, 2)\nnet_pay = 850.21 - contribution - 125.58 - income_tax")
Reasoning
Now calculate. gross=850.21, rate=0.06, cap=4500. min(850.21, 4500)=850.21. contribution=round(850.21*0.06,2)=51.0126→51.01.

Allowed deduction 125.58 ≤ 400.00, and ≤ gross - contribution = 850.21-51.01=799.20. OK.

Taxable = 850.21-51.01-125.58 = 673.62. Free=1100, so taxable below free → tax 0.00.

Net = 850.21-51.01-125.58-0 = 673.62.

Let me use calculate for exactness.
Tool
{
  "results": {"contribution": "51.01", "taxable": "673.62", "middle_portion": "0.00", "upper_portion": "0.00", "income_tax": "0.00", "net_pay": "673.62"}
}
Assistant
{
  "decision": "calculate",
  "currency": "LCR",
  "gross_pay": "850.21",
  "employee_contribution": "51.01",
  "allowed_deduction": "125.58",
  "taxable_pay": "673.62",
  "income_tax": "0.00",
  "net_pay": "673.62",
  "clauses": ["R1", "R2", "R3", "R4", "R5", "R6"]
}
Reasoning
Contract gross pay matches payroll gross pay (850.21), no conflict. No amendment needed. Clauses R1-R6.