Functional Weave
Code in Rust

professional.wip-valuation@1.0.0

vectors.json

7,873 bytes · view raw

[
 {
  "name": "charge-out value of two entries with a 10% write-down",
  "args": [
   [
    {
     "minutes": 90,
     "costRate": {
      "minor": 6000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    },
    {
     "minutes": 45,
     "costRate": {
      "minor": 4000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 15000,
      "currency": "GBP"
     }
    }
   ],
   "charge-out",
   1000,
   "GBP"
  ],
  "expect": {
   "minutes": 135,
   "gross": {
    "minor": 41250,
    "currency": "GBP"
   },
   "writeDown": {
    "minor": 4125,
    "currency": "GBP"
   },
   "net": {
    "minor": 37125,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "the same time at cost, no write-down",
  "args": [
   [
    {
     "minutes": 90,
     "costRate": {
      "minor": 6000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    },
    {
     "minutes": 45,
     "costRate": {
      "minor": 4000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 15000,
      "currency": "GBP"
     }
    }
   ],
   "cost",
   0,
   "GBP"
  ],
  "expect": {
   "minutes": 135,
   "gross": {
    "minor": 12000,
    "currency": "GBP"
   },
   "writeDown": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 12000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "rounded per entry: two 7-minute entries at 100.00 an hour are 23.34, not 23.33",
  "args": [
   [
    {
     "minutes": 7,
     "costRate": {
      "minor": 5000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 10000,
      "currency": "GBP"
     }
    },
    {
     "minutes": 7,
     "costRate": {
      "minor": 5000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 10000,
      "currency": "GBP"
     }
    }
   ],
   "charge-out",
   0,
   "GBP"
  ],
  "expect": {
   "minutes": 14,
   "gross": {
    "minor": 2334,
    "currency": "GBP"
   },
   "writeDown": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 2334,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a write-down landing on half a penny rounds up",
  "args": [
   [
    {
     "minutes": 60,
     "costRate": {
      "minor": 12345,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    }
   ],
   "cost",
   5000,
   "GBP"
  ],
  "expect": {
   "minutes": 60,
   "gross": {
    "minor": 12345,
    "currency": "GBP"
   },
   "writeDown": {
    "minor": 6173,
    "currency": "GBP"
   },
   "net": {
    "minor": 6172,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a 100% write-down leaves nothing",
  "args": [
   [
    {
     "minutes": 90,
     "costRate": {
      "minor": 6000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    },
    {
     "minutes": 45,
     "costRate": {
      "minor": 4000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 15000,
      "currency": "GBP"
     }
    }
   ],
   "charge-out",
   10000,
   "GBP"
  ],
  "expect": {
   "minutes": 135,
   "gross": {
    "minor": 41250,
    "currency": "GBP"
   },
   "writeDown": {
    "minor": 41250,
    "currency": "GBP"
   },
   "net": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "no unbilled time values at zero in the named currency",
  "args": [
   [],
   "charge-out",
   1500,
   "EUR"
  ],
  "expect": {
   "minutes": 0,
   "gross": {
    "minor": 0,
    "currency": "EUR"
   },
   "writeDown": {
    "minor": 0,
    "currency": "EUR"
   },
   "net": {
    "minor": 0,
    "currency": "EUR"
   }
  }
 },
 {
  "name": "a zero-minute entry adds nothing",
  "args": [
   [
    {
     "minutes": 0,
     "costRate": {
      "minor": 6000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    },
    {
     "minutes": 30,
     "costRate": {
      "minor": 6000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    }
   ],
   "charge-out",
   0,
   "GBP"
  ],
  "expect": {
   "minutes": 30,
   "gross": {
    "minor": 10000,
    "currency": "GBP"
   },
   "writeDown": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 10000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "an entry at a zero cost rate (a trainee's pro bono time) is zero at cost",
  "args": [
   [
    {
     "minutes": 120,
     "costRate": {
      "minor": 0,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 9000,
      "currency": "GBP"
     }
    }
   ],
   "cost",
   0,
   "GBP"
  ],
  "expect": {
   "minutes": 120,
   "gross": {
    "minor": 0,
    "currency": "GBP"
   },
   "writeDown": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "in US dollars, 1 minute at 99.99 an hour rounds half-up to 1.67",
  "args": [
   [
    {
     "minutes": 1,
     "costRate": {
      "minor": 5000,
      "currency": "USD"
     },
     "chargeRate": {
      "minor": 9999,
      "currency": "USD"
     }
    }
   ],
   "charge-out",
   0,
   "USD"
  ],
  "expect": {
   "minutes": 1,
   "gross": {
    "minor": 167,
    "currency": "USD"
   },
   "writeDown": {
    "minor": 0,
    "currency": "USD"
   },
   "net": {
    "minor": 167,
    "currency": "USD"
   }
  }
 },
 {
  "name": "a write-down over 100% is an error",
  "args": [
   [
    {
     "minutes": 90,
     "costRate": {
      "minor": 6000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    },
    {
     "minutes": 45,
     "costRate": {
      "minor": 4000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 15000,
      "currency": "GBP"
     }
    }
   ],
   "cost",
   10001,
   "GBP"
  ],
  "expectError": "writeDownBasisPoints must be between 0 and 10000"
 },
 {
  "name": "a negative write-down is an error",
  "args": [
   [
    {
     "minutes": 90,
     "costRate": {
      "minor": 6000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    },
    {
     "minutes": 45,
     "costRate": {
      "minor": 4000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 15000,
      "currency": "GBP"
     }
    }
   ],
   "cost",
   -1,
   "GBP"
  ],
  "expectError": "writeDownBasisPoints must be between 0 and 10000"
 },
 {
  "name": "negative minutes are an error",
  "args": [
   [
    {
     "minutes": -6,
     "costRate": {
      "minor": 6000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    }
   ],
   "cost",
   0,
   "GBP"
  ],
  "expectError": "minutes must be a non-negative integer"
 },
 {
  "name": "a rate in another currency is an error",
  "args": [
   [
    {
     "minutes": 90,
     "costRate": {
      "minor": 6000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    },
    {
     "minutes": 45,
     "costRate": {
      "minor": 4000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 15000,
      "currency": "GBP"
     }
    }
   ],
   "cost",
   0,
   "EUR"
  ],
  "expectError": "currency mismatch"
 },
 {
  "name": "an unknown basis is an error",
  "args": [
   [
    {
     "minutes": 90,
     "costRate": {
      "minor": 6000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 20000,
      "currency": "GBP"
     }
    },
    {
     "minutes": 45,
     "costRate": {
      "minor": 4000,
      "currency": "GBP"
     },
     "chargeRate": {
      "minor": 15000,
      "currency": "GBP"
     }
    }
   ],
   "market",
   0,
   "GBP"
  ],
  "expectError": "unknown WIP basis"
 }
]