diff options
Diffstat (limited to 'finance/flow.py')
-rw-r--r-- | finance/flow.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/finance/flow.py b/finance/flow.py new file mode 100644 index 0000000..fb28228 --- /dev/null +++ b/finance/flow.py @@ -0,0 +1,33 @@ +import dataclasses +from datetime import datetime +from decimal import Decimal + + +@dataclasses.dataclass(kw_only=True, frozen=True) +class Flow: + """Time-discrete flow of money paid on the first day of a month""" + + amount: Decimal + + def integrate(self, start: datetime, end: datetime) -> Decimal: + """Integrate the flow between two dates to an amount of money""" + + retval = Decimal(0.0) + + current = datetime(start.year, start.month, 1) + + if start == current: + retval += self.amount + + while True: + if current.month == 12: + current = datetime(current.year + 1, 1, 1) + else: + current = datetime(current.year, current.month + 1, 1) + + if current <= end: + retval += self.amount + else: + break + + return retval |