@rf Наговнякал по-быстрому:
#!/usr/bin/runhaskell
import Data.Maybe
import Data.Time.Calendar.OrdinalDate
import Data.Time.Format.ISO8601
data Stock = Stock
{ name :: String
, perDay :: Double
, startingDay :: Day
, stockItems :: Word
} deriving (Show)
dayOut :: Stock -> Day
dayOut s = toEnum (fromEnum (startingDay s) + floor ((fromIntegral $ stockItems s) / (perDay s)))
runsOut :: Stock -> String
runsOut s = name s ++ " runs out at " ++ show (dayOut s)
vitA = Stock
"Vitamin A"
(1 / 3.5) -- twice a week (10kIU capsules)
(fromJust $ iso8601ParseM "2025-12-22")
(floor $ 81 / 0.6) -- 600mg brutto per capsule
vitB = Stock
"Vitamin B"
(1 / 3.5)
(fromJust $ iso8601ParseM "2025-12-22")
73
vitK = Stock
"Vitamin K"
(4 / 7) -- about once every two days (200μg tablets MK-7)
(fromJust $ iso8601ParseM "2025-12-24")
(floor $ 27 / 0.108)
main = putStr $ unlines $ map runsOut [vitA, vitB, vitK]
@L29Ah @rf Уже Hledger замечательно справляется с этим учётом, можно ему функцию для записи проводки пополнения написать, и будет отлично. С уведами в заметках будет хорошо работать