[ { "name": "100 ha of winter wheat: grain and straw less seed, fertiliser, sprays and sundries", "args": [ [ { "name": "grain", "amount": { "minor": 23000000, "currency": "GBP" } }, { "name": "straw", "amount": { "minor": 800000, "currency": "GBP" } } ], [ { "name": "seed", "amount": { "minor": 750000, "currency": "GBP" } }, { "name": "fertiliser", "amount": { "minor": 2200000, "currency": "GBP" } }, { "name": "sprays", "amount": { "minor": 1800000, "currency": "GBP" } }, { "name": "other", "amount": { "minor": 450000, "currency": "GBP" } } ], "hectare", 100, "GBP" ], "expect": { "output": { "minor": 23800000, "currency": "GBP" }, "variableCosts": { "minor": 5200000, "currency": "GBP" }, "grossMargin": { "minor": 18600000, "currency": "GBP" }, "outputPerUnit": { "minor": 238000, "currency": "GBP" }, "variableCostsPerUnit": { "minor": 52000, "currency": "GBP" }, "grossMarginPerUnit": { "minor": 186000, "currency": "GBP" }, "marginBasisPoints": 7815 } }, { "name": "a 500-ewe flock per ewe", "args": [ [ { "name": "lamb sales", "amount": { "minor": 5000000, "currency": "GBP" } }, { "name": "wool", "amount": { "minor": 50000, "currency": "GBP" } } ], [ { "name": "feed", "amount": { "minor": 1200000, "currency": "GBP" } }, { "name": "vet and med", "amount": { "minor": 250000, "currency": "GBP" } }, { "name": "other", "amount": { "minor": 300000, "currency": "GBP" } } ], "head", 500, "GBP" ], "expect": { "output": { "minor": 5050000, "currency": "GBP" }, "variableCosts": { "minor": 1750000, "currency": "GBP" }, "grossMargin": { "minor": 3300000, "currency": "GBP" }, "outputPerUnit": { "minor": 10100, "currency": "GBP" }, "variableCostsPerUnit": { "minor": 3500, "currency": "GBP" }, "grossMarginPerUnit": { "minor": 6600, "currency": "GBP" }, "marginBasisPoints": 6535 } }, { "name": "the margin per head is the margin divided once (1667), not output per head less costs per head (1666)", "args": [ [ { "name": "sales", "amount": { "minor": 10000, "currency": "GBP" } } ], [ { "name": "feed", "amount": { "minor": 5000, "currency": "GBP" } } ], "head", 3, "GBP" ], "expect": { "output": { "minor": 10000, "currency": "GBP" }, "variableCosts": { "minor": 5000, "currency": "GBP" }, "grossMargin": { "minor": 5000, "currency": "GBP" }, "outputPerUnit": { "minor": 3333, "currency": "GBP" }, "variableCostsPerUnit": { "minor": 1667, "currency": "GBP" }, "grossMarginPerUnit": { "minor": 1667, "currency": "GBP" }, "marginBasisPoints": 5000 } }, { "name": "a loss-making enterprise has a negative margin", "args": [ [ { "name": "sales", "amount": { "minor": 100000, "currency": "GBP" } } ], [ { "name": "costs", "amount": { "minor": 150000, "currency": "GBP" } } ], "hectare", 10, "GBP" ], "expect": { "output": { "minor": 100000, "currency": "GBP" }, "variableCosts": { "minor": 150000, "currency": "GBP" }, "grossMargin": { "minor": -50000, "currency": "GBP" }, "outputPerUnit": { "minor": 10000, "currency": "GBP" }, "variableCostsPerUnit": { "minor": 15000, "currency": "GBP" }, "grossMarginPerUnit": { "minor": -5000, "currency": "GBP" }, "marginBasisPoints": -5000 } }, { "name": "no output: margin share is null and a negative half penny rounds away from zero", "args": [ [], [ { "name": "seed", "amount": { "minor": 5, "currency": "GBP" } } ], "hectare", 2, "GBP" ], "expect": { "output": { "minor": 0, "currency": "GBP" }, "variableCosts": { "minor": 5, "currency": "GBP" }, "grossMargin": { "minor": -5, "currency": "GBP" }, "outputPerUnit": { "minor": 0, "currency": "GBP" }, "variableCostsPerUnit": { "minor": 3, "currency": "GBP" }, "grossMarginPerUnit": { "minor": -3, "currency": "GBP" }, "marginBasisPoints": null } }, { "name": "a part hectare area", "args": [ [ { "name": "potatoes", "amount": { "minor": 1250000, "currency": "GBP" } } ], [ { "name": "seed", "amount": { "minor": 250000, "currency": "GBP" } } ], "hectare", 12.5, "GBP" ], "expect": { "output": { "minor": 1250000, "currency": "GBP" }, "variableCosts": { "minor": 250000, "currency": "GBP" }, "grossMargin": { "minor": 1000000, "currency": "GBP" }, "outputPerUnit": { "minor": 100000, "currency": "GBP" }, "variableCostsPerUnit": { "minor": 20000, "currency": "GBP" }, "grossMarginPerUnit": { "minor": 80000, "currency": "GBP" }, "marginBasisPoints": 8000 } }, { "name": "a negative output line (a clawback) reduces output", "args": [ [ { "name": "milk", "amount": { "minor": 2000000, "currency": "GBP" } }, { "name": "quota clawback", "amount": { "minor": -100000, "currency": "GBP" } } ], [ { "name": "feed", "amount": { "minor": 900000, "currency": "GBP" } } ], "head", 10, "GBP" ], "expect": { "output": { "minor": 1900000, "currency": "GBP" }, "variableCosts": { "minor": 900000, "currency": "GBP" }, "grossMargin": { "minor": 1000000, "currency": "GBP" }, "outputPerUnit": { "minor": 190000, "currency": "GBP" }, "variableCostsPerUnit": { "minor": 90000, "currency": "GBP" }, "grossMarginPerUnit": { "minor": 100000, "currency": "GBP" }, "marginBasisPoints": 5263 } }, { "name": "no lines at all is zero everywhere", "args": [ [], [], "head", 1, "EUR" ], "expect": { "output": { "minor": 0, "currency": "EUR" }, "variableCosts": { "minor": 0, "currency": "EUR" }, "grossMargin": { "minor": 0, "currency": "EUR" }, "outputPerUnit": { "minor": 0, "currency": "EUR" }, "variableCostsPerUnit": { "minor": 0, "currency": "EUR" }, "grossMarginPerUnit": { "minor": 0, "currency": "EUR" }, "marginBasisPoints": null } }, { "name": "a fractional head count is an error", "args": [ [ { "name": "sales", "amount": { "minor": 100, "currency": "GBP" } } ], [], "head", 2.5, "GBP" ], "expectError": "units must be a whole number of head from 1 to 10000000" }, { "name": "zero hectares is an error", "args": [ [ { "name": "sales", "amount": { "minor": 100, "currency": "GBP" } } ], [], "hectare", 0, "GBP" ], "expectError": "units must be a finite number of hectares greater than 0" }, { "name": "less than a square metre is an error", "args": [ [ { "name": "sales", "amount": { "minor": 100, "currency": "GBP" } } ], [], "hectare", 1e-05, "GBP" ], "expectError": "units must be at least 0.0001 hectares" }, { "name": "an unknown basis is an error", "args": [ [ { "name": "sales", "amount": { "minor": 100, "currency": "GBP" } } ], [], "acre", 1, "GBP" ], "expectError": "unknown basis \"acre\"" }, { "name": "a cost in another currency is an error", "args": [ [ { "name": "sales", "amount": { "minor": 100, "currency": "GBP" } } ], [ { "name": "seed", "amount": { "minor": 10, "currency": "EUR" } } ], "head", 1, "GBP" ], "expectError": "currency mismatch" }, { "name": "totals beyond 900 billion minor units are refused", "args": [ [ { "name": "sales", "amount": { "minor": 900000000001, "currency": "GBP" } } ], [], "head", 1, "GBP" ], "expectError": "totals must be within 900000000000 minor units" } ]