[
{
"name": "\u00a31,000 at 12% over 12 months, half-up",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
1200,
12,
12,
"half-up"
],
"expect": {
"payment": {
"minor": 8885,
"currency": "GBP"
},
"rows": [
{
"period": 1,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 1000,
"currency": "GBP"
},
"principal": {
"minor": 7885,
"currency": "GBP"
},
"balance": {
"minor": 92115,
"currency": "GBP"
}
},
{
"period": 2,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 921,
"currency": "GBP"
},
"principal": {
"minor": 7964,
"currency": "GBP"
},
"balance": {
"minor": 84151,
"currency": "GBP"
}
},
{
"period": 3,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 842,
"currency": "GBP"
},
"principal": {
"minor": 8043,
"currency": "GBP"
},
"balance": {
"minor": 76108,
"currency": "GBP"
}
},
{
"period": 4,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 761,
"currency": "GBP"
},
"principal": {
"minor": 8124,
"currency": "GBP"
},
"balance": {
"minor": 67984,
"currency": "GBP"
}
},
{
"period": 5,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 680,
"currency": "GBP"
},
"principal": {
"minor": 8205,
"currency": "GBP"
},
"balance": {
"minor": 59779,
"currency": "GBP"
}
},
{
"period": 6,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 598,
"currency": "GBP"
},
"principal": {
"minor": 8287,
"currency": "GBP"
},
"balance": {
"minor": 51492,
"currency": "GBP"
}
},
{
"period": 7,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 515,
"currency": "GBP"
},
"principal": {
"minor": 8370,
"currency": "GBP"
},
"balance": {
"minor": 43122,
"currency": "GBP"
}
},
{
"period": 8,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 431,
"currency": "GBP"
},
"principal": {
"minor": 8454,
"currency": "GBP"
},
"balance": {
"minor": 34668,
"currency": "GBP"
}
},
{
"period": 9,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 347,
"currency": "GBP"
},
"principal": {
"minor": 8538,
"currency": "GBP"
},
"balance": {
"minor": 26130,
"currency": "GBP"
}
},
{
"period": 10,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 261,
"currency": "GBP"
},
"principal": {
"minor": 8624,
"currency": "GBP"
},
"balance": {
"minor": 17506,
"currency": "GBP"
}
},
{
"period": 11,
"payment": {
"minor": 8885,
"currency": "GBP"
},
"interest": {
"minor": 175,
"currency": "GBP"
},
"principal": {
"minor": 8710,
"currency": "GBP"
},
"balance": {
"minor": 8796,
"currency": "GBP"
}
},
{
"period": 12,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 88,
"currency": "GBP"
},
"principal": {
"minor": 8796,
"currency": "GBP"
},
"balance": {
"minor": 0,
"currency": "GBP"
}
}
],
"totalInterest": {
"minor": 6619,
"currency": "GBP"
},
"totalPaid": {
"minor": 106619,
"currency": "GBP"
}
}
},
{
"name": "rounded up, the final payment is smaller",
"args": [
{
"minor": 200000,
"currency": "GBP"
},
999,
12,
12,
"up"
],
"expect": {
"payment": {
"minor": 17583,
"currency": "GBP"
},
"rows": [
{
"period": 1,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 1665,
"currency": "GBP"
},
"principal": {
"minor": 15918,
"currency": "GBP"
},
"balance": {
"minor": 184082,
"currency": "GBP"
}
},
{
"period": 2,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 1532,
"currency": "GBP"
},
"principal": {
"minor": 16051,
"currency": "GBP"
},
"balance": {
"minor": 168031,
"currency": "GBP"
}
},
{
"period": 3,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 1399,
"currency": "GBP"
},
"principal": {
"minor": 16184,
"currency": "GBP"
},
"balance": {
"minor": 151847,
"currency": "GBP"
}
},
{
"period": 4,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 1264,
"currency": "GBP"
},
"principal": {
"minor": 16319,
"currency": "GBP"
},
"balance": {
"minor": 135528,
"currency": "GBP"
}
},
{
"period": 5,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 1128,
"currency": "GBP"
},
"principal": {
"minor": 16455,
"currency": "GBP"
},
"balance": {
"minor": 119073,
"currency": "GBP"
}
},
{
"period": 6,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 991,
"currency": "GBP"
},
"principal": {
"minor": 16592,
"currency": "GBP"
},
"balance": {
"minor": 102481,
"currency": "GBP"
}
},
{
"period": 7,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 853,
"currency": "GBP"
},
"principal": {
"minor": 16730,
"currency": "GBP"
},
"balance": {
"minor": 85751,
"currency": "GBP"
}
},
{
"period": 8,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 714,
"currency": "GBP"
},
"principal": {
"minor": 16869,
"currency": "GBP"
},
"balance": {
"minor": 68882,
"currency": "GBP"
}
},
{
"period": 9,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 573,
"currency": "GBP"
},
"principal": {
"minor": 17010,
"currency": "GBP"
},
"balance": {
"minor": 51872,
"currency": "GBP"
}
},
{
"period": 10,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 432,
"currency": "GBP"
},
"principal": {
"minor": 17151,
"currency": "GBP"
},
"balance": {
"minor": 34721,
"currency": "GBP"
}
},
{
"period": 11,
"payment": {
"minor": 17583,
"currency": "GBP"
},
"interest": {
"minor": 289,
"currency": "GBP"
},
"principal": {
"minor": 17294,
"currency": "GBP"
},
"balance": {
"minor": 17427,
"currency": "GBP"
}
},
{
"period": 12,
"payment": {
"minor": 17572,
"currency": "GBP"
},
"interest": {
"minor": 145,
"currency": "GBP"
},
"principal": {
"minor": 17427,
"currency": "GBP"
},
"balance": {
"minor": 0,
"currency": "GBP"
}
}
],
"totalInterest": {
"minor": 10985,
"currency": "GBP"
},
"totalPaid": {
"minor": 210985,
"currency": "GBP"
}
}
},
{
"name": "rounded down, the final payment is larger",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
1200,
12,
12,
"down"
],
"expect": {
"payment": {
"minor": 8884,
"currency": "GBP"
},
"rows": [
{
"period": 1,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 1000,
"currency": "GBP"
},
"principal": {
"minor": 7884,
"currency": "GBP"
},
"balance": {
"minor": 92116,
"currency": "GBP"
}
},
{
"period": 2,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 921,
"currency": "GBP"
},
"principal": {
"minor": 7963,
"currency": "GBP"
},
"balance": {
"minor": 84153,
"currency": "GBP"
}
},
{
"period": 3,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 842,
"currency": "GBP"
},
"principal": {
"minor": 8042,
"currency": "GBP"
},
"balance": {
"minor": 76111,
"currency": "GBP"
}
},
{
"period": 4,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 761,
"currency": "GBP"
},
"principal": {
"minor": 8123,
"currency": "GBP"
},
"balance": {
"minor": 67988,
"currency": "GBP"
}
},
{
"period": 5,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 680,
"currency": "GBP"
},
"principal": {
"minor": 8204,
"currency": "GBP"
},
"balance": {
"minor": 59784,
"currency": "GBP"
}
},
{
"period": 6,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 598,
"currency": "GBP"
},
"principal": {
"minor": 8286,
"currency": "GBP"
},
"balance": {
"minor": 51498,
"currency": "GBP"
}
},
{
"period": 7,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 515,
"currency": "GBP"
},
"principal": {
"minor": 8369,
"currency": "GBP"
},
"balance": {
"minor": 43129,
"currency": "GBP"
}
},
{
"period": 8,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 431,
"currency": "GBP"
},
"principal": {
"minor": 8453,
"currency": "GBP"
},
"balance": {
"minor": 34676,
"currency": "GBP"
}
},
{
"period": 9,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 347,
"currency": "GBP"
},
"principal": {
"minor": 8537,
"currency": "GBP"
},
"balance": {
"minor": 26139,
"currency": "GBP"
}
},
{
"period": 10,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 261,
"currency": "GBP"
},
"principal": {
"minor": 8623,
"currency": "GBP"
},
"balance": {
"minor": 17516,
"currency": "GBP"
}
},
{
"period": 11,
"payment": {
"minor": 8884,
"currency": "GBP"
},
"interest": {
"minor": 175,
"currency": "GBP"
},
"principal": {
"minor": 8709,
"currency": "GBP"
},
"balance": {
"minor": 8807,
"currency": "GBP"
}
},
{
"period": 12,
"payment": {
"minor": 8895,
"currency": "GBP"
},
"interest": {
"minor": 88,
"currency": "GBP"
},
"principal": {
"minor": 8807,
"currency": "GBP"
},
"balance": {
"minor": 0,
"currency": "GBP"
}
}
],
"totalInterest": {
"minor": 6619,
"currency": "GBP"
},
"totalPaid": {
"minor": 106619,
"currency": "GBP"
}
}
},
{
"name": "\u00a35,000 at 6% over 6 months",
"args": [
{
"minor": 500000,
"currency": "GBP"
},
600,
6,
12,
"half-up"
],
"expect": {
"payment": {
"minor": 84798,
"currency": "GBP"
},
"rows": [
{
"period": 1,
"payment": {
"minor": 84798,
"currency": "GBP"
},
"interest": {
"minor": 2500,
"currency": "GBP"
},
"principal": {
"minor": 82298,
"currency": "GBP"
},
"balance": {
"minor": 417702,
"currency": "GBP"
}
},
{
"period": 2,
"payment": {
"minor": 84798,
"currency": "GBP"
},
"interest": {
"minor": 2089,
"currency": "GBP"
},
"principal": {
"minor": 82709,
"currency": "GBP"
},
"balance": {
"minor": 334993,
"currency": "GBP"
}
},
{
"period": 3,
"payment": {
"minor": 84798,
"currency": "GBP"
},
"interest": {
"minor": 1675,
"currency": "GBP"
},
"principal": {
"minor": 83123,
"currency": "GBP"
},
"balance": {
"minor": 251870,
"currency": "GBP"
}
},
{
"period": 4,
"payment": {
"minor": 84798,
"currency": "GBP"
},
"interest": {
"minor": 1259,
"currency": "GBP"
},
"principal": {
"minor": 83539,
"currency": "GBP"
},
"balance": {
"minor": 168331,
"currency": "GBP"
}
},
{
"period": 5,
"payment": {
"minor": 84798,
"currency": "GBP"
},
"interest": {
"minor": 842,
"currency": "GBP"
},
"principal": {
"minor": 83956,
"currency": "GBP"
},
"balance": {
"minor": 84375,
"currency": "GBP"
}
},
{
"period": 6,
"payment": {
"minor": 84797,
"currency": "GBP"
},
"interest": {
"minor": 422,
"currency": "GBP"
},
"principal": {
"minor": 84375,
"currency": "GBP"
},
"balance": {
"minor": 0,
"currency": "GBP"
}
}
],
"totalInterest": {
"minor": 8787,
"currency": "GBP"
},
"totalPaid": {
"minor": 508787,
"currency": "GBP"
}
}
},
{
"name": "interest-free: the pennies left over go on the last payment",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
0,
12,
12,
"down"
],
"expect": {
"payment": {
"minor": 8333,
"currency": "GBP"
},
"rows": [
{
"period": 1,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 91667,
"currency": "GBP"
}
},
{
"period": 2,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 83334,
"currency": "GBP"
}
},
{
"period": 3,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 75001,
"currency": "GBP"
}
},
{
"period": 4,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 66668,
"currency": "GBP"
}
},
{
"period": 5,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 58335,
"currency": "GBP"
}
},
{
"period": 6,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 50002,
"currency": "GBP"
}
},
{
"period": 7,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 41669,
"currency": "GBP"
}
},
{
"period": 8,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 33336,
"currency": "GBP"
}
},
{
"period": 9,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 25003,
"currency": "GBP"
}
},
{
"period": 10,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 16670,
"currency": "GBP"
}
},
{
"period": 11,
"payment": {
"minor": 8333,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8333,
"currency": "GBP"
},
"balance": {
"minor": 8337,
"currency": "GBP"
}
},
{
"period": 12,
"payment": {
"minor": 8337,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 8337,
"currency": "GBP"
},
"balance": {
"minor": 0,
"currency": "GBP"
}
}
],
"totalInterest": {
"minor": 0,
"currency": "GBP"
},
"totalPaid": {
"minor": 100000,
"currency": "GBP"
}
}
},
{
"name": "rounded up, a tiny interest-free loan clears three payments early",
"args": [
{
"minor": 25,
"currency": "GBP"
},
0,
12,
12,
"up"
],
"expect": {
"payment": {
"minor": 3,
"currency": "GBP"
},
"rows": [
{
"period": 1,
"payment": {
"minor": 3,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 3,
"currency": "GBP"
},
"balance": {
"minor": 22,
"currency": "GBP"
}
},
{
"period": 2,
"payment": {
"minor": 3,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 3,
"currency": "GBP"
},
"balance": {
"minor": 19,
"currency": "GBP"
}
},
{
"period": 3,
"payment": {
"minor": 3,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 3,
"currency": "GBP"
},
"balance": {
"minor": 16,
"currency": "GBP"
}
},
{
"period": 4,
"payment": {
"minor": 3,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 3,
"currency": "GBP"
},
"balance": {
"minor": 13,
"currency": "GBP"
}
},
{
"period": 5,
"payment": {
"minor": 3,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 3,
"currency": "GBP"
},
"balance": {
"minor": 10,
"currency": "GBP"
}
},
{
"period": 6,
"payment": {
"minor": 3,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 3,
"currency": "GBP"
},
"balance": {
"minor": 7,
"currency": "GBP"
}
},
{
"period": 7,
"payment": {
"minor": 3,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 3,
"currency": "GBP"
},
"balance": {
"minor": 4,
"currency": "GBP"
}
},
{
"period": 8,
"payment": {
"minor": 3,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 3,
"currency": "GBP"
},
"balance": {
"minor": 1,
"currency": "GBP"
}
},
{
"period": 9,
"payment": {
"minor": 1,
"currency": "GBP"
},
"interest": {
"minor": 0,
"currency": "GBP"
},
"principal": {
"minor": 1,
"currency": "GBP"
},
"balance": {
"minor": 0,
"currency": "GBP"
}
}
],
"totalInterest": {
"minor": 0,
"currency": "GBP"
},
"totalPaid": {
"minor": 25,
"currency": "GBP"
}
}
},
{
"name": "a single annual payment",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
1000,
12,
1,
"half-up"
],
"expect": {
"payment": {
"minor": 110000,
"currency": "GBP"
},
"rows": [
{
"period": 1,
"payment": {
"minor": 110000,
"currency": "GBP"
},
"interest": {
"minor": 10000,
"currency": "GBP"
},
"principal": {
"minor": 100000,
"currency": "GBP"
},
"balance": {
"minor": 0,
"currency": "GBP"
}
}
],
"totalInterest": {
"minor": 10000,
"currency": "GBP"
},
"totalPaid": {
"minor": 110000,
"currency": "GBP"
}
}
},
{
"name": "quarterly over two years at 8%",
"args": [
{
"minor": 1000000,
"currency": "GBP"
},
800,
24,
4,
"half-up"
],
"expect": {
"payment": {
"minor": 136510,
"currency": "GBP"
},
"rows": [
{
"period": 1,
"payment": {
"minor": 136510,
"currency": "GBP"
},
"interest": {
"minor": 20000,
"currency": "GBP"
},
"principal": {
"minor": 116510,
"currency": "GBP"
},
"balance": {
"minor": 883490,
"currency": "GBP"
}
},
{
"period": 2,
"payment": {
"minor": 136510,
"currency": "GBP"
},
"interest": {
"minor": 17670,
"currency": "GBP"
},
"principal": {
"minor": 118840,
"currency": "GBP"
},
"balance": {
"minor": 764650,
"currency": "GBP"
}
},
{
"period": 3,
"payment": {
"minor": 136510,
"currency": "GBP"
},
"interest": {
"minor": 15293,
"currency": "GBP"
},
"principal": {
"minor": 121217,
"currency": "GBP"
},
"balance": {
"minor": 643433,
"currency": "GBP"
}
},
{
"period": 4,
"payment": {
"minor": 136510,
"currency": "GBP"
},
"interest": {
"minor": 12869,
"currency": "GBP"
},
"principal": {
"minor": 123641,
"currency": "GBP"
},
"balance": {
"minor": 519792,
"currency": "GBP"
}
},
{
"period": 5,
"payment": {
"minor": 136510,
"currency": "GBP"
},
"interest": {
"minor": 10396,
"currency": "GBP"
},
"principal": {
"minor": 126114,
"currency": "GBP"
},
"balance": {
"minor": 393678,
"currency": "GBP"
}
},
{
"period": 6,
"payment": {
"minor": 136510,
"currency": "GBP"
},
"interest": {
"minor": 7874,
"currency": "GBP"
},
"principal": {
"minor": 128636,
"currency": "GBP"
},
"balance": {
"minor": 265042,
"currency": "GBP"
}
},
{
"period": 7,
"payment": {
"minor": 136510,
"currency": "GBP"
},
"interest": {
"minor": 5301,
"currency": "GBP"
},
"principal": {
"minor": 131209,
"currency": "GBP"
},
"balance": {
"minor": 133833,
"currency": "GBP"
}
},
{
"period": 8,
"payment": {
"minor": 136510,
"currency": "GBP"
},
"interest": {
"minor": 2677,
"currency": "GBP"
},
"principal": {
"minor": 133833,
"currency": "GBP"
},
"balance": {
"minor": 0,
"currency": "GBP"
}
}
],
"totalInterest": {
"minor": 92080,
"currency": "GBP"
},
"totalPaid": {
"minor": 1092080,
"currency": "GBP"
}
}
},
{
"name": "a small loan where rounding dominates",
"args": [
{
"minor": 1000,
"currency": "GBP"
},
1999,
12,
12,
"half-up"
],
"expect": {
"payment": {
"minor": 93,
"currency": "GBP"
},
"rows": [
{
"period": 1,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 17,
"currency": "GBP"
},
"principal": {
"minor": 76,
"currency": "GBP"
},
"balance": {
"minor": 924,
"currency": "GBP"
}
},
{
"period": 2,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 15,
"currency": "GBP"
},
"principal": {
"minor": 78,
"currency": "GBP"
},
"balance": {
"minor": 846,
"currency": "GBP"
}
},
{
"period": 3,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 14,
"currency": "GBP"
},
"principal": {
"minor": 79,
"currency": "GBP"
},
"balance": {
"minor": 767,
"currency": "GBP"
}
},
{
"period": 4,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 13,
"currency": "GBP"
},
"principal": {
"minor": 80,
"currency": "GBP"
},
"balance": {
"minor": 687,
"currency": "GBP"
}
},
{
"period": 5,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 11,
"currency": "GBP"
},
"principal": {
"minor": 82,
"currency": "GBP"
},
"balance": {
"minor": 605,
"currency": "GBP"
}
},
{
"period": 6,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 10,
"currency": "GBP"
},
"principal": {
"minor": 83,
"currency": "GBP"
},
"balance": {
"minor": 522,
"currency": "GBP"
}
},
{
"period": 7,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 9,
"currency": "GBP"
},
"principal": {
"minor": 84,
"currency": "GBP"
},
"balance": {
"minor": 438,
"currency": "GBP"
}
},
{
"period": 8,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 7,
"currency": "GBP"
},
"principal": {
"minor": 86,
"currency": "GBP"
},
"balance": {
"minor": 352,
"currency": "GBP"
}
},
{
"period": 9,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 6,
"currency": "GBP"
},
"principal": {
"minor": 87,
"currency": "GBP"
},
"balance": {
"minor": 265,
"currency": "GBP"
}
},
{
"period": 10,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 4,
"currency": "GBP"
},
"principal": {
"minor": 89,
"currency": "GBP"
},
"balance": {
"minor": 176,
"currency": "GBP"
}
},
{
"period": 11,
"payment": {
"minor": 93,
"currency": "GBP"
},
"interest": {
"minor": 3,
"currency": "GBP"
},
"principal": {
"minor": 90,
"currency": "GBP"
},
"balance": {
"minor": 86,
"currency": "GBP"
}
},
{
"period": 12,
"payment": {
"minor": 87,
"currency": "GBP"
},
"interest": {
"minor": 1,
"currency": "GBP"
},
"principal": {
"minor": 86,
"currency": "GBP"
},
"balance": {
"minor": 0,
"currency": "GBP"
}
}
],
"totalInterest": {
"minor": 110,
"currency": "GBP"
},
"totalPaid": {
"minor": 1110,
"currency": "GBP"
}
}
},
{
"name": "dollars, monthly for three years at 7.5%",
"args": [
{
"minor": 1500000,
"currency": "USD"
},
750,
36,
12,
"half-up"
],
"expect": {
"payment": {
"minor": 46659,
"currency": "USD"
},
"rows": [
{
"period": 1,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 9375,
"currency": "USD"
},
"principal": {
"minor": 37284,
"currency": "USD"
},
"balance": {
"minor": 1462716,
"currency": "USD"
}
},
{
"period": 2,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 9142,
"currency": "USD"
},
"principal": {
"minor": 37517,
"currency": "USD"
},
"balance": {
"minor": 1425199,
"currency": "USD"
}
},
{
"period": 3,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 8907,
"currency": "USD"
},
"principal": {
"minor": 37752,
"currency": "USD"
},
"balance": {
"minor": 1387447,
"currency": "USD"
}
},
{
"period": 4,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 8672,
"currency": "USD"
},
"principal": {
"minor": 37987,
"currency": "USD"
},
"balance": {
"minor": 1349460,
"currency": "USD"
}
},
{
"period": 5,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 8434,
"currency": "USD"
},
"principal": {
"minor": 38225,
"currency": "USD"
},
"balance": {
"minor": 1311235,
"currency": "USD"
}
},
{
"period": 6,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 8195,
"currency": "USD"
},
"principal": {
"minor": 38464,
"currency": "USD"
},
"balance": {
"minor": 1272771,
"currency": "USD"
}
},
{
"period": 7,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 7955,
"currency": "USD"
},
"principal": {
"minor": 38704,
"currency": "USD"
},
"balance": {
"minor": 1234067,
"currency": "USD"
}
},
{
"period": 8,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 7713,
"currency": "USD"
},
"principal": {
"minor": 38946,
"currency": "USD"
},
"balance": {
"minor": 1195121,
"currency": "USD"
}
},
{
"period": 9,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 7470,
"currency": "USD"
},
"principal": {
"minor": 39189,
"currency": "USD"
},
"balance": {
"minor": 1155932,
"currency": "USD"
}
},
{
"period": 10,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 7225,
"currency": "USD"
},
"principal": {
"minor": 39434,
"currency": "USD"
},
"balance": {
"minor": 1116498,
"currency": "USD"
}
},
{
"period": 11,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 6978,
"currency": "USD"
},
"principal": {
"minor": 39681,
"currency": "USD"
},
"balance": {
"minor": 1076817,
"currency": "USD"
}
},
{
"period": 12,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 6730,
"currency": "USD"
},
"principal": {
"minor": 39929,
"currency": "USD"
},
"balance": {
"minor": 1036888,
"currency": "USD"
}
},
{
"period": 13,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 6481,
"currency": "USD"
},
"principal": {
"minor": 40178,
"currency": "USD"
},
"balance": {
"minor": 996710,
"currency": "USD"
}
},
{
"period": 14,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 6229,
"currency": "USD"
},
"principal": {
"minor": 40430,
"currency": "USD"
},
"balance": {
"minor": 956280,
"currency": "USD"
}
},
{
"period": 15,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 5977,
"currency": "USD"
},
"principal": {
"minor": 40682,
"currency": "USD"
},
"balance": {
"minor": 915598,
"currency": "USD"
}
},
{
"period": 16,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 5722,
"currency": "USD"
},
"principal": {
"minor": 40937,
"currency": "USD"
},
"balance": {
"minor": 874661,
"currency": "USD"
}
},
{
"period": 17,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 5467,
"currency": "USD"
},
"principal": {
"minor": 41192,
"currency": "USD"
},
"balance": {
"minor": 833469,
"currency": "USD"
}
},
{
"period": 18,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 5209,
"currency": "USD"
},
"principal": {
"minor": 41450,
"currency": "USD"
},
"balance": {
"minor": 792019,
"currency": "USD"
}
},
{
"period": 19,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 4950,
"currency": "USD"
},
"principal": {
"minor": 41709,
"currency": "USD"
},
"balance": {
"minor": 750310,
"currency": "USD"
}
},
{
"period": 20,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 4689,
"currency": "USD"
},
"principal": {
"minor": 41970,
"currency": "USD"
},
"balance": {
"minor": 708340,
"currency": "USD"
}
},
{
"period": 21,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 4427,
"currency": "USD"
},
"principal": {
"minor": 42232,
"currency": "USD"
},
"balance": {
"minor": 666108,
"currency": "USD"
}
},
{
"period": 22,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 4163,
"currency": "USD"
},
"principal": {
"minor": 42496,
"currency": "USD"
},
"balance": {
"minor": 623612,
"currency": "USD"
}
},
{
"period": 23,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 3898,
"currency": "USD"
},
"principal": {
"minor": 42761,
"currency": "USD"
},
"balance": {
"minor": 580851,
"currency": "USD"
}
},
{
"period": 24,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 3630,
"currency": "USD"
},
"principal": {
"minor": 43029,
"currency": "USD"
},
"balance": {
"minor": 537822,
"currency": "USD"
}
},
{
"period": 25,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 3361,
"currency": "USD"
},
"principal": {
"minor": 43298,
"currency": "USD"
},
"balance": {
"minor": 494524,
"currency": "USD"
}
},
{
"period": 26,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 3091,
"currency": "USD"
},
"principal": {
"minor": 43568,
"currency": "USD"
},
"balance": {
"minor": 450956,
"currency": "USD"
}
},
{
"period": 27,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 2818,
"currency": "USD"
},
"principal": {
"minor": 43841,
"currency": "USD"
},
"balance": {
"minor": 407115,
"currency": "USD"
}
},
{
"period": 28,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 2544,
"currency": "USD"
},
"principal": {
"minor": 44115,
"currency": "USD"
},
"balance": {
"minor": 363000,
"currency": "USD"
}
},
{
"period": 29,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 2269,
"currency": "USD"
},
"principal": {
"minor": 44390,
"currency": "USD"
},
"balance": {
"minor": 318610,
"currency": "USD"
}
},
{
"period": 30,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 1991,
"currency": "USD"
},
"principal": {
"minor": 44668,
"currency": "USD"
},
"balance": {
"minor": 273942,
"currency": "USD"
}
},
{
"period": 31,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 1712,
"currency": "USD"
},
"principal": {
"minor": 44947,
"currency": "USD"
},
"balance": {
"minor": 228995,
"currency": "USD"
}
},
{
"period": 32,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 1431,
"currency": "USD"
},
"principal": {
"minor": 45228,
"currency": "USD"
},
"balance": {
"minor": 183767,
"currency": "USD"
}
},
{
"period": 33,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 1149,
"currency": "USD"
},
"principal": {
"minor": 45510,
"currency": "USD"
},
"balance": {
"minor": 138257,
"currency": "USD"
}
},
{
"period": 34,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 864,
"currency": "USD"
},
"principal": {
"minor": 45795,
"currency": "USD"
},
"balance": {
"minor": 92462,
"currency": "USD"
}
},
{
"period": 35,
"payment": {
"minor": 46659,
"currency": "USD"
},
"interest": {
"minor": 578,
"currency": "USD"
},
"principal": {
"minor": 46081,
"currency": "USD"
},
"balance": {
"minor": 46381,
"currency": "USD"
}
},
{
"period": 36,
"payment": {
"minor": 46671,
"currency": "USD"
},
"interest": {
"minor": 290,
"currency": "USD"
},
"principal": {
"minor": 46381,
"currency": "USD"
},
"balance": {
"minor": 0,
"currency": "USD"
}
}
],
"totalInterest": {
"minor": 179736,
"currency": "USD"
},
"totalPaid": {
"minor": 1679736,
"currency": "USD"
}
}
},
{
"name": "a zero principal is refused",
"args": [
{
"minor": 0,
"currency": "GBP"
},
500,
12,
12,
"half-up"
],
"expectError": "principal must be greater than zero"
},
{
"name": "a term that is not a whole number of payments",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
500,
7,
4,
"half-up"
],
"expectError": "is not a whole number of payments"
},
{
"name": "a negative rate is refused",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
-50,
12,
12,
"half-up"
],
"expectError": "annualRateBasisPoints must be between 0 and 100000"
}
]