| 例 | 期間の販売上限数 | 日別の販売上限数 | 実質の制約 |
|---|---|---|---|
| ほうれん草(日持ちしない) | 常時・上限なし | あり | 日別 |
| 玉ねぎ(保管品) | 7/13〜8/13・900 | なし | 期間の上限 |
| じゃがいも(両方) | 7/15〜8/31・400 | あり(30/日) | 両方 |
| ギフト直送 | 7/20〜8/10・300 | — 直送は持たない | 期間の上限 |
日持ちする商品に日別だけを持たせると同じ在庫を月・水・金で3回売れてしまいますが、期間の販売上限数が外側にあるので防げます。
sales_offer_daily は倉庫経由のSKUだけ──日別上限は「その日に倉庫から出せる量」という在庫由来の制約なので、在庫を持たない直送SKUには対応するものがありません。
注文を受ける期間(締切)は持ちません。当面は商品名の右の公開ON/OFFで運用します(D24)。
お客さまに届く日。倉庫経由は出荷日で保持していますが、表示のときにリードタイムを足してお届けベースに直しています。 期間は数週間あるので、販売先ごとのLT差(0〜2日)は誤差として飲みます(D24)。
倉庫からモノが出る日。こちらは換算しません。「その日に倉庫から出せる量」という日ごとの制約が本体なので、 お届け日に直すと意味が壊れます。お客さまに届くのは 0〜2日あとです。
すべての商品がここに出ます。倉庫経由も直送も同じ列で並びます(日付を「お届けできる期間」に揃えたため)。 見るのは「あといくつ売れるか」の一点。
※ 「常時」= from_date/to_date が NULL。期間の販売上限数を置かず、日別だけで運用している商品です。
※ 「新米」は在庫が無いのに期間枠の例(予約販売)。期間枠=在庫引当ではありません。いまは非公開にしてあります。
①で「日別あり」にした商品だけが並びます。1セルは 受注数 / 販売上限数 の1行。入力するのは右(販売上限数)だけで、左は入っている受注数です。 見込(在庫+入荷予定)は販売上限数と違うときだけ小さく上に出ます。同じ数字を2つ並べても情報が増えないためです。 ①で設定した期間の外は塗られて入力できません——これが「期間が外枠」の見え方です。
※ じゃがいもの売り枠は 7/15 出荷からなので、7/13(月)が期間外で塗られます。 ※ 実際のグリッドは2週ぶん(14列)ですが、モックは読みやすさのため1週にしています。
出荷日1本が、販売先ごとに違う納品日になります(1販売先=1届け先なので LT は販売先の属性1つ)。
生産者と倉庫/直送は product に。売り枠は
sales_offer(期間の販売上限数)と
sales_offer_daily(出荷日・上限)の親子2テーブル。
product id P01 item / spec / count_by / base_weight_kg supplier_id NULL ← 束ねて売る fulfillment 倉庫 ← 在庫と出荷可能を持つ
product id P30 item / spec / count_by / base_weight_kg supplier_id PR4 海辺やさい組合 fulfillment 直送 ← 在庫も出荷可能も持たない
sales_offer id SO-3 product_id P21a じゃがいも(北山) is_published true ← 公開ON/OFF from_date 2026-07-15 ← 倉庫なので出荷日 to_date 2026-08-31 (画面はお届けに換算) offer_qty 400 ← 期間ぜんぶの販売上限数 unit_price 210 ※ 常時なら from_date / to_date は NULL ※ 期間では絞らないなら offer_qty は NULL
sales_offer_daily id SOD-11 sales_offer_id SO-3 ship_date 2026-07-15 ← 出荷日(換算しない) cap_qty 30 sales_offer_daily sales_offer_id SO-3 ship_date 2026-07-17 cap_qty 30 ※ 倉庫経由のSKUだけが持つ
残の計算は2本。期間の販売上限数なら offer_qty − 期間内の受注済合計、日別なら cap_qty − その出荷日の受注済。両方あれば両方効きます。
sales_offer は supplier_id も fulfillment も持ちません(どちらも product で決まる=D23)。
受注締切も持ちません(is_published の ON/OFF で運用=D24)。
納品曜日 − LT なので──
LT0 の販売先 → 月・水・金 に出荷 LT1 の販売先 → 日・火・木 に出荷 LT2 の販売先 → 土・月・水 に出荷結局ほぼ毎日、出荷日の列が立ちます。いまの販売設定は納品曜日以外を灰色で潰していますが、出荷日軸ではそれができません。列数と見せ方の判断が要ります。
販売上限数900・受注200 → 22% 塗られる ↓ 入荷したので販売上限数を1200に更新 販売上限数1200・受注200 → 17% ← 何も取り消していないのにバーが戻る逆に販売上限数を減らすとバーが進みます。進捗として読めるものにならないので、数字だけにしました。 「あといくつ」が大きく出ていれば、埋まり具合は
受注 640 / 販売上限数 900 の並びで足ります。
shelf_life_days 等)… 混在する商品があると破綻するうえ、ユーザーから見て「この商品はどっちの設定画面か」を覚える必要が出る。期間を必ず持たせて日別を任意にすれば、その区別自体が要らない。
②期間も出荷日で表示する… 直送は出荷日を持てないので、列の意味が行ごとに変わる。
③期間・日別で別々の日付列を並べる(出荷/納品の2列)… どの行も片方が空欄になり、結局「この行はどっちを見るのか」が残る。
④日別の販売上限数を sales_offer に持たせる(1レコード=1日)… 期間と日別の上限が同じ列を共有することになり、「この行は期間なのか日なのか」が読めない。親子2テーブルに分けた。
unit_price を持つだけにしてあります。