[
{
"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"
}
]