Functional Weave
Code in Python

legal.retainer-drawdown@1.0.0

vectors.json

8,451 bytes · view raw

[
 {
  "name": "2,000 on account pays the first bill and part of the second",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   [
    {
     "reference": "INV-1",
     "amount": {
      "minor": 120000,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-2",
     "amount": {
      "minor": 150000,
      "currency": "GBP"
     }
    }
   ]
  ],
  "expect": {
   "bills": [
    {
     "reference": "INV-1",
     "billed": {
      "minor": 120000,
      "currency": "GBP"
     },
     "applied": {
      "minor": 120000,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 0,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-2",
     "billed": {
      "minor": 150000,
      "currency": "GBP"
     },
     "applied": {
      "minor": 80000,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 70000,
      "currency": "GBP"
     }
    }
   ],
   "applied": {
    "minor": 200000,
    "currency": "GBP"
   },
   "outstanding": {
    "minor": 70000,
    "currency": "GBP"
   },
   "balance": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "more on account than billed leaves a balance",
  "args": [
   {
    "minor": 500000,
    "currency": "GBP"
   },
   [
    {
     "reference": "INV-1",
     "amount": {
      "minor": 120000,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-2",
     "amount": {
      "minor": 150000,
      "currency": "GBP"
     }
    }
   ]
  ],
  "expect": {
   "bills": [
    {
     "reference": "INV-1",
     "billed": {
      "minor": 120000,
      "currency": "GBP"
     },
     "applied": {
      "minor": 120000,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 0,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-2",
     "billed": {
      "minor": 150000,
      "currency": "GBP"
     },
     "applied": {
      "minor": 150000,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 0,
      "currency": "GBP"
     }
    }
   ],
   "applied": {
    "minor": 270000,
    "currency": "GBP"
   },
   "outstanding": {
    "minor": 0,
    "currency": "GBP"
   },
   "balance": {
    "minor": 230000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "exactly enough leaves nothing either way",
  "args": [
   {
    "minor": 270000,
    "currency": "GBP"
   },
   [
    {
     "reference": "INV-1",
     "amount": {
      "minor": 120000,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-2",
     "amount": {
      "minor": 150000,
      "currency": "GBP"
     }
    }
   ]
  ],
  "expect": {
   "bills": [
    {
     "reference": "INV-1",
     "billed": {
      "minor": 120000,
      "currency": "GBP"
     },
     "applied": {
      "minor": 120000,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 0,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-2",
     "billed": {
      "minor": 150000,
      "currency": "GBP"
     },
     "applied": {
      "minor": 150000,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 0,
      "currency": "GBP"
     }
    }
   ],
   "applied": {
    "minor": 270000,
    "currency": "GBP"
   },
   "outstanding": {
    "minor": 0,
    "currency": "GBP"
   },
   "balance": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "the order decides which bill is paid: newest first here",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   [
    {
     "reference": "INV-2",
     "amount": {
      "minor": 150000,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-1",
     "amount": {
      "minor": 120000,
      "currency": "GBP"
     }
    }
   ]
  ],
  "expect": {
   "bills": [
    {
     "reference": "INV-2",
     "billed": {
      "minor": 150000,
      "currency": "GBP"
     },
     "applied": {
      "minor": 150000,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 0,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-1",
     "billed": {
      "minor": 120000,
      "currency": "GBP"
     },
     "applied": {
      "minor": 50000,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 70000,
      "currency": "GBP"
     }
    }
   ],
   "applied": {
    "minor": 200000,
    "currency": "GBP"
   },
   "outstanding": {
    "minor": 70000,
    "currency": "GBP"
   },
   "balance": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "nothing on account pays nothing",
  "args": [
   {
    "minor": 0,
    "currency": "GBP"
   },
   [
    {
     "reference": "INV-1",
     "amount": {
      "minor": 9999,
      "currency": "GBP"
     }
    }
   ]
  ],
  "expect": {
   "bills": [
    {
     "reference": "INV-1",
     "billed": {
      "minor": 9999,
      "currency": "GBP"
     },
     "applied": {
      "minor": 0,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 9999,
      "currency": "GBP"
     }
    }
   ],
   "applied": {
    "minor": 0,
    "currency": "GBP"
   },
   "outstanding": {
    "minor": 9999,
    "currency": "GBP"
   },
   "balance": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "no bills keep all the money on account",
  "args": [
   {
    "minor": 75000,
    "currency": "EUR"
   },
   []
  ],
  "expect": {
   "bills": [],
   "applied": {
    "minor": 0,
    "currency": "EUR"
   },
   "outstanding": {
    "minor": 0,
    "currency": "EUR"
   },
   "balance": {
    "minor": 75000,
    "currency": "EUR"
   }
  }
 },
 {
  "name": "a zero bill takes nothing and does not stop later bills being paid",
  "args": [
   {
    "minor": 100,
    "currency": "GBP"
   },
   [
    {
     "reference": "NIL",
     "amount": {
      "minor": 0,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-1",
     "amount": {
      "minor": 60,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-2",
     "amount": {
      "minor": 60,
      "currency": "GBP"
     }
    }
   ]
  ],
  "expect": {
   "bills": [
    {
     "reference": "NIL",
     "billed": {
      "minor": 0,
      "currency": "GBP"
     },
     "applied": {
      "minor": 0,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 0,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-1",
     "billed": {
      "minor": 60,
      "currency": "GBP"
     },
     "applied": {
      "minor": 60,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 0,
      "currency": "GBP"
     }
    },
    {
     "reference": "INV-2",
     "billed": {
      "minor": 60,
      "currency": "GBP"
     },
     "applied": {
      "minor": 40,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 20,
      "currency": "GBP"
     }
    }
   ],
   "applied": {
    "minor": 100,
    "currency": "GBP"
   },
   "outstanding": {
    "minor": 20,
    "currency": "GBP"
   },
   "balance": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a single penny short",
  "args": [
   {
    "minor": 99999,
    "currency": "GBP"
   },
   [
    {
     "reference": "INV-1",
     "amount": {
      "minor": 100000,
      "currency": "GBP"
     }
    }
   ]
  ],
  "expect": {
   "bills": [
    {
     "reference": "INV-1",
     "billed": {
      "minor": 100000,
      "currency": "GBP"
     },
     "applied": {
      "minor": 99999,
      "currency": "GBP"
     },
     "outstanding": {
      "minor": 1,
      "currency": "GBP"
     }
    }
   ],
   "applied": {
    "minor": 99999,
    "currency": "GBP"
   },
   "outstanding": {
    "minor": 1,
    "currency": "GBP"
   },
   "balance": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a negative amount on account is an error",
  "args": [
   {
    "minor": -1,
    "currency": "GBP"
   },
   []
  ],
  "expectError": "onAccount must not be negative"
 },
 {
  "name": "a credit note passed as a bill is an error",
  "args": [
   {
    "minor": 1000,
    "currency": "GBP"
   },
   [
    {
     "reference": "CN-1",
     "amount": {
      "minor": -500,
      "currency": "GBP"
     }
    }
   ]
  ],
  "expectError": "bill \"CN-1\" must not be negative"
 },
 {
  "name": "a bill in another currency is an error",
  "args": [
   {
    "minor": 1000,
    "currency": "GBP"
   },
   [
    {
     "reference": "INV-1",
     "amount": {
      "minor": 500,
      "currency": "EUR"
     }
    }
   ]
  ],
  "expectError": "currency mismatch"
 }
]