Model Bisnis Wincloth

Distribusi (Konsinyasi) — 46 Distributor

Barang dititipkan ke distributor. Masih milik FKC. Distributor bayar hanya setelah barang laku terjual. Kalau tidak laku, bisa dikembalikan (return). Resiko di pihak FKC.

Reseller (Beli Putus) — 273 Reseller

Reseller beli putus — ownership berpindah hanya setelah fulfillment / invoiced (reseller_sales). Sampai saat itu, stok di reseller_rack adalah RESERVED milik perusahaan (company-owned) until fulfilled/invoiced, bukan milik reseller, bukan revenue/receivable/cash. Ambil barang setiap hari Sabtu. Resiko pindah ke reseller setelah laku terjual & dibayar (cash) / tertagih (credit). Lihat Tiga Layer Stok & Money Intelligence Canon (OWNED = FREE_WAREHOUSE + CONSIGNMENT + RESERVED — lihat snapshot aktual di Stock/Owner Brief).

RESERVED vs FULFILLED: reseller_rack = RESERVED (allocated, company-owned); reseller_sales = FULFILLED/invoiced (milik reseller). Jangan samakan.

Tiga Layer Stok

Layer 1: Gudang Pusat — FREE_WAREHOUSE

Stok bebas ATS (product_stockcard) — sumber kebenaran paling atas. Besaran lihat snapshot aktual (Central Available live). Semua produk masuk ke sini dulu dari produksi. Central Available = FREE_WAREHOUSE.

Tabel: product_stockcard — company-owned, FREE

Layer 2: Distributor — CONSIGNMENT

Stok konsinyasi di rack distributor (distribusi_rack) — company-owned sampai terjual. Besaran lihat snapshot aktual. Bisa dikembalikan.

Tabel: distribusi_rack — company-owned

Layer 3: Reseller — RESERVED (Company-Owned)

Stok RESERVED FOR RESELLER di reseller_rack — milik perusahaan, allocated untuk reseller, bukan milik reseller, bukan revenue/receivable/cash sampai fulfilled/invoiced menjadi reseller_sales. Pisahkan RESERVED (reseller_rack) vs FULFILLED (reseller_sales). Canonical type: RESERVED vs FULFILLED — bessaran lihat snapshot aktual Stock / Owner Brief. Invariant: OWNED = FREE_WAREHOUSE + DISTRIBUTOR_CONSIGNMENT + RESERVED_RESELLER (SNAPSHOT, bukan PERIOD). Lihat Money Intelligence Canon (baca snapshot, bukan LIVE hardcode yang bisa basi).

Tabel: reseller_rack (RESERVED, company-owned until fulfilled) — bukan FULFILLED

Invariant: OWNED = FREE_WAREHOUSE + DISTRIBUTOR_CONSIGNMENT + RESERVED_RESELLER

Tipe Semantik — PERIOD / SNAPSHOT / HISTORICAL / PROXY / FLOW_INDICATOR

Tipe Arti Contoh Metrik Catatan
PERIOD FILTERED Agregasi qty/sales pada jendela periode filter aktif (startDate–endDate). Terpotong filter. Total Sales, Total Qty, Channel flow, Period Return Flow Kalau filter kosong = All Time. Bandingkan hanya dengan same predicate scope.
SNAPSHOT asOf Kondisi stok/customer saat ini (SUM rack / MAX all-time). Tidak terpotong period filter. Owned Physical, Central Available, Reserved, Dormant daysSinceLastSale Stok: OWNED = FREE_WAREHOUSE + DISTRIBUTOR_CONSIGNMENT + RESERVED_RESELLER (invariant PASS jika jumlah cocok). Dormant: actualLastSale = MAX(all-time) sampai asOf/current.
HISTORICAL CONTEXT Breakdown tahunan dari full history, tidak dipotong period filter aktif. Yearly by Channel, Yearly breakdown Jangan samakan dengan PERIOD — yearly tetap tampil semua tahun meski filter 30 hari.
PROXY PROXY / ESTIMASI Angka proxy/estimasi, bukan canonical. Wajib badge PROXY + dataQuality + hint. Period Return Flow Ratio, Forecast P80 (NORMAL_APPROX_P80) Period Return Flow Ratio = return qty period / sold qty same scope — lifecycle UNRESOLVED, bukan canonical Return Rate. P80 = mean + 0.84*std (asumsi normal, n kecil), tampilkan n/std/method.
FLOW_INDICATOR FLOW Selisih arus periode, bukan sisa stok fisik. Flow Gap = inboundQty(period) − soldQty(period) Flow Gap adalah period flow indicator, NOT physical WIP / stock on hand. Tanpa opening balance / batch linkage tidak prove sisa fisik.

Metrik Penjualan

Metrik Arti Bisnis Rumus Sumber Data
Total Sales Total omzet penjualan setelah diskon Σ (qty × price × (1 - disc)) dist_sales_detail + reseller_sales_detail
Total Transaksi Jumlah invoice unik COUNT(DISTINCT invoice_number) dist_sales + reseller_sales
Total Qty Jumlah unit produk terjual Σ qty dist_sales_detail + reseller_sales_detail
Gross Profit Laba kotor (sales - modal) Σ (qty × price × (1-disc)) - Σ (qty × hpp) sales_detail JOIN product
Gross Margin % Persentase laba kotor terhadap sales (gross_profit / total_sales) × 100% Dihitung dari gross profit & sales
AOV Rata-rata omzet per transaksi total_sales / total_transaksi Dihitung
UPT Rata-rata unit per transaksi total_qty / total_transaksi Dihitung

Metrik Stok

Metrik Arti Bisnis Rumus Sumber Data
Stok Saat Ini Jumlah unit tersedia Σ qty dari stockcard/rack product_stockcard / distribusi_rack / reseller_rack
Stok Cover Estimasi stok cukup untuk berapa bulan stok_saat_ini / rata_rata_penjualan_bulanan Dihitung dari stok & sales
Hari Sejak Pergerakan Berapa hari stok tidak bergerak (masuk/keluar) hari_ini - tanggal_pergerakan_terakhir product_stockcard / distribusi_rack / reseller_rack
Inventory Turnover Berapa kali stok berputar dalam periode COGS_terjual / rata_rata_nilai_stok Dihitung dari sales & stok
Est. Modal Stok Nilai modal yang tertahan di stok stok × hpp product.hpp × qty stok

Metrik Customer (Distributor & Reseller)

Metrik Arti Bisnis Rumus Sumber Data
Hari Terakhir Beli Jumlah hari sejak transaksi terakhir. Semakin besar = semakin lama tidak aktif hari_ini - tanggal_transaksi_terakhir MAX(sales_date) dari dist_sales / reseller_sales
Dormant Distributor Distributor tidak ada transaksi >30 hari (actualLastSale MAX all-time sampai asOf/current — bukan period-filtered) daysSinceLastSale > 30 — actualLastSale = MAX(all-time sales_date sampai asOf/current) MAX(all-time) dari dist_sales — CURRENT SNAPSHOT asOf/current, bukan period filter
Dormant Reseller Reseller tidak ada transaksi >30 hari (actualLastSale MAX all-time sampai asOf/current — bukan period-filtered) daysSinceLastSale > 30 — actualLastSale = MAX(all-time sales_date sampai asOf/current) MAX(all-time) dari reseller_sales — CURRENT SNAPSHOT asOf/current, bukan period filter
Recency (R) Seberapa baru customer terakhir belanja hari_ini - tanggal_transaksi_terakhir MAX(sales_date)
Frequency (F) Seberapa sering customer belanja COUNT(DISTINCT invoice_number) dist_sales / reseller_sales
Monetary (M) Total nilai belanja customer Σ total_sales per customer dist_sales_detail + reseller_sales_detail
Period Return Flow Ratio PROXY bukan canonical PROXY — return qty period / sold qty same predicate scope & same period — lifecycle UNRESOLVED (DATA SHAPE 16492 qty-only Jan–Jul proven, BUSINESS SEMANTICS UNRESOLVED) — NOT canonical Return Rate SUM(return qty in period, scoped articleCode/productSearch via JOIN product) / SUM(sold qty same scope & same period) × 100% — null→UNKNOWN jika denominator 0 dist_return_detail + reseller_sales_return_detail (numerator scoped via JOIN product) vs dist_sales_detail + reseller_sales_detail (denominator same scope)

Kuadran Produk

Champion Margin tinggi + volume tinggi. Produk andalan — pertahankan stok & promosi.
Sleeper Margin tinggi + volume rendah. Produk tersembunyi — tingkatkan visibilitas.
Demoting Margin rendah + volume tinggi. Traffic builder — evaluasi harga & diskon.
Problem Margin rendah + volume rendah. Perlu perhatian — clearance atau bundling.

Klasifikasi Pergerakan Stok

Kategori Kriteria Tindakan
Fast Moving Qty terjual tinggi, stok cepat habis Jaga stok, prioritaskan restock
Normal Qty terjual sedang, stok bergerak normal Monitor rutin
Slow Moving Qty terjual rendah, stok lama bergerak Evaluasi harga, promo, bundling
Dead Stock legacy heuristic 0 penjualan dalam 90 hari terakhir (heuristic) Clearance, markdown, atau return — review dulu
Stok Tanpa Penjualan ZERO_SALES_WITH_STOCK Stok tersedia >0 tetapi qty terjual =0 pada periode filter aktif — proven (stock ∪ sales) Review aging/cover/demand/periode sebelum tindakan — bukan segera clearance/markdown
Flow Gap FLOW_INDICATOR NOT physical WIP inboundQty(period) − soldQty(period) — selisih arus periode, bisa negatif jika sold > inbound. Period flow indicator, NOT physical WIP / stock on hand. Jangan anggap sisa fisik tanpa opening balance / batch linkage / reconciliation.
Forecast P80 NORMAL_APPROX_P80 PROXY P80 ≈ mean(last N bulan) + 0.84 × std — proxy asumsi distribusi normal Estimasi proxy, bukan persentil empiris. Tampilkan n/std/method/dataQuality + median P50. N kecil = confidence rendah.

Level Alert

⚠ Critical Kritis

Perlu tindakan segera. Margin di bawah 15%, dead stock banyak, atau customer bernilai tinggi sudah lama tidak aktif.

⚠ Warning Waspada

Perlu perhatian. Margin 15-25%, beberapa dead stock, atau customer dormant perlu follow-up.

✓ Healthy Sehat

Kondisi baik. Margin ≥25%, stok terkendali, customer aktif.

Glosarium Lengkap

Istilah Penjelasan
Memuat glosarium...