summaryrefslogtreecommitdiff
path: root/finance/flow.py
diff options
context:
space:
mode:
Diffstat (limited to 'finance/flow.py')
-rw-r--r--finance/flow.py33
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