#? #инвентарь @rf
Как вы менеджите мелкооптовые закупки расходников? Нужно какое-то решение которое будет пинать меня когда у меня будут подходить к концу вещи типа витаминок, которые расходуются абсолютно предсказуемо, но заказывать нужно сильно заранее их исчерпания чтобы не возникло проблем из-за тормознутого магазина/почты/таможни/контрабандиста. Такое можно наговнякать за полчаса на любимом ЯП, но вдруг уже что-то готовое есть? Бонусные очки если оно умеет из истории реального расхода предсказывать когда запас иссякнет.
@L29Ah@qoto.org @rf@mastodon.ml два сосуда. Один кончился - докупай.
@L29Ah это звучит как что-то, чему имело бы смысл быть в https://grocy.info, но по-моему сейчас нет; там можно задать инвентарный минимум и когда чего-то становится меньше, его строчка в таблице приобретает другой цвет, а в список покупок можно быстро добавлять всё, что "пора". Но чтобы это нормально работало, надо поддерживать там актуальность инвентаря – скажем, фиксировать кончившиеся пачки и регистрировать купленные. Для чего можно к этой системе привинтить сканер штрихкодов. Теоретически. Мне для моих условий это показалось перебором.
А ещё там есть "chores", для которых он считает среднюю частоту выполнения и на основании этого прикидывает, когда очередное. Если расходники закупаются и расходуются примерно пропорционально, хватит и этого.
Я же обычно следую тому же методу "инвентарного минимума", но в голове: стараюсь держать одну запасную пачку, и когда эта пачка идёт в эксплуатацию, заношу задачу купить ещё. Всё.
@dside фу вэбня
@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]