Proposal: forecast-based reorder points and shortage allocation ("Replenishment Planner")
メンテナーはふだん 1 日以内に返信
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- 機能追加
- 明瞭さ
- 説明が足りない
- 活発さ
- 活発
- 領域
- analytics, data, full-stack
調査の方向性
Start by reading the proposal, the linked docs/replenishment.md write-up, and the prototype under app/services/replenishment/. Review the proposed service objects, controller, views, sidebar link, and specs, then seek maintainer decisions on scope and the PR breakdown. Done would mean an agreed feature direction and an approved, testable implementation plan.
索引モデルが issue の本文から書いたものです。
説明
Hi, I'm Arnav, a developer interested in Ruby for Good's mission. I've built a prototype feature on a fork and would love feedback on whether it's something Human Essentials would want, and how you'd like it broken into PRs.
Problem
Today banks set on_hand_minimum_quantity by hand and LowInventoryQuery flags items below it. That number doesn't update as demand changes, so slow items can have high minimums (cash and shelf space tied up) while fast movers have none (surprise stockouts). There's also no help deciding how to split an item across partners when requests exceed what's on hand.
What the prototype does
- Demand forecast per item: builds a monthly series from the last 24 complete months of distributions (or partner requests). It tries a few simple models (moving average, exponential smoothing, damped-trend Holt, seasonal naive) and picks the one with the lowest out-of-sample error on a rolling backtest.
- Reorder point + suggested order: a standard periodic-review inventory policy. Safety stock scales with forecast error, lead time and a chosen service level (e.g. 95%). Items are flagged "Order now / Reorder / OK", shown next to the bank's existing manual minimum for comparison.
- Shortage allocation: on an item page, if open requests exceed stock, it shows two suggested splits (proportional vs. max-min fair) with fill rates. It's advisory only and never changes requests or distributions.
It's read-only: no migrations, no changes to existing models or inventory events. New code lives in app/services/replenishment/, plus one controller, two views, a sidebar link, and specs.
- Write-up with the math: https://github.com/arnavt687/human-essentials/blob/main/docs/replenishment.md
- Code: https://github.com/arnavt687/human-essentials/tree/main/app/services/replenishment

Proposed PR plan (small pieces)
- Forecasting / reorder / allocation service objects + unit specs (no UI)
- Replenishment page behind a Flipper flag + request specs
- Item detail page with the allocation suggestion
Questions for maintainers
- Is this a direction you'd want in the app? Should it start behind a feature flag?
- Is there a better place in the nav (e.g. under Inventory or Reports)?
- Would any banks be willing to try it and give feedback?
- 主要言語
- Ruby
- スター
- 594
- フォーク
- 596
- 平均マージ
- 1日 10時間
- マージ済み PR(30日)
- 11
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
rubyforgood/human-essentials のほかの issue
-
Export button on annual report should revert to "Export Report" from "Please Wait..." once report generated.対応中かも @costajohnt が 16 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
rubyforgood/human-essentials#5691 · コメント 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
stale
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
rubyforgood/human-essentials#5603 · コメント 7 件 ·
メンテナーはふだん 1 日以内に返信
-
Fix typos in comments, docs and spec descriptions対応中かも @geographybuff が 4 日前に担当しました。 オープン
難易度 1/5 1時間未満 初心者へのやさしさ 25/100
rubyforgood/human-essentials#5741 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Ruby for Good 2026 DC stale
rubyforgood/human-essentials#5694 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
Add optional phone number to users (esp Partner Users)対応中かも @costajohnt が 21 日前に担当しました。 オープンDifficulty—Intermediate Ruby for Good 2026 DC
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
rubyforgood/human-essentials#5687 ·
メンテナーはふだん 1 日以内に返信
rubyforgood/human-essentials の issue をすべて見る
似ている issue
-
documentation
難易度 1/5 1時間未満 初心者へのやさしさ 86/100
bridgetownrb/bridgetown#1130 ·
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
stripe/stripe-ruby#1994 ·
メンテナーはふだん 1 日以内に返信
-
[Fehler]: /abdeckstift wirft 500 — part_type aus der Phonemreduction-Umbenennung nicht mitgezogenオープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
wort-schule/wort.schule#787 ·
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
lugassawan/swe-workbench#799 ·
メンテナーはふだん 1 日以内に返信
-
2.8.6: NoMethodError "undefined method 'first'" in profdata_coverage_dir whenever --scheme is usedオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
SlatherOrg/slather#586 · コメント 2 件 ·