Bảng kê giá & CTTL

Tính giá chốt 4 chương trình · —

1 Chọn chương trình

2 Chọn mức & thời gian

Bấm để xem bảng giá khi KH không đăng ký tích lũy / trưng bày — cttl = 0, không trừ 0,9%.
⚙ Độ lệch & tham số công thức
Sửa hệ số để đo độ lệch công thức. Base / Ontop / MPP của từng SP cũng sửa được ngay trong danh sách bên dưới.

3 Kết quả CTTL

CTTL áp dụng
0%
—

Mua đủ mức thì nhận bao nhiêu tiền

—

4 Bảng giá sản phẩm

0 SP
Mã SPSản phẩmSubcatQuy cách Đơn giá (VAT)Thành tiền Base %Ontop %MPP %CTTL Tổng CKGiá chốtChênh lệch
★ Bách chiến bách thắng ★

1 Khách mua gì, bao nhiêu

—
Mức tích lũy, trưng bày, vị trí lấy theo tab Tính giá. Mỗi dòng đổi ngày mua được, để mô phỏng khách mua nhiều đợt trong tháng.

2 Trả bao nhiêu — nhận lại bao nhiêu

Áp trần giai đoạn & sàn 25%
Tiền thưởng dự kiến
0
Chưa nhập sản lượng
Khách trả giá gốc có VAT trên hoá đơn. KM là hàng tặng nhận ngay lúc giao hàng, còn thưởng CTTL/CTTB cuối kỳ mới về — hai thời điểm khác nhau. Nên bảng trên tách 2 mốc: giá vốn ngay khi mua, và giá vốn cuối cùng sau khi thưởng về.

3 Giá vốn bình quân từng SKU

12 test case bắt buộc

#Tình huốngKỳ vọngApp tínhKQ
Chạy trực tiếp trên engine của app — mọi thay đổi công thức đều phải giữ 12/12 PASS.

Công thức đang dùng

don_gia    = gia_truoc_vat × VAT(1,08)
thanh_tien = don_gia × quy_cach
GIA_GOC    = don_gia (/lon: Cat A,B,D) | thanh_tien (/thùng: Cat C, SBPS, Mẹ&Bé)
gia_chot   = GIA_GOC × (1 − base − ontop − mpp − cttl)

V SHOP    cttl = %TL(nửa đầu +0,5% tiến độ | nửa sau) + %TB(Hot Zone|bất kỳ) − 0,9%
VNM SHOP  cttl = %giai đoạn(≤10: 1,6% | 11–20: 1,2% | 21–CT: 0,6%) + %đạt DS
                 + thưởng TB ÷ DS đăng ký của MỨC TÍCH LŨY − 0,9%   · loại trừ sữa 1L
SBPS SHOP cttl = %TL theo mốc ngày 15 (tuỳ chọn cộng Thưởng TT) − 0,9%  · chỉ SBPS_TE
MẸ & BÉ   cttl = %TL(theo nhóm ngành) + %TB(Hotzone|bất kỳ) + %CT quý − 0,9%
Không tham gia chương trình nào → cttl = 0 và không trừ 0,9%.

Cái này để làm gì

Thay cho file Excel bảng giá mà anh em vẫn mở ra dò mỗi lần khách hỏi. Chọn chương trình, chọn mức cửa hàng đang đăng ký, giá chốt hiện ra. Không phải kéo VLOOKUP, không sợ dò nhầm dòng, không sợ quên trừ 0,9%.

GIÁ CHỐT = GIÁ GỐC × (1 − Base − Ontop − MPP − CTTL)

Số liệu lấy nguyên từ file Bảng giá gốc, đã dò lại từng dòng cho khớp.

Bốn bước, chưa tới một phút

  1. Chọn chương trình — theo nhóm hàng đang chào. Chọn xong app chỉ hiện đúng những SP thuộc chương trình đó.
  2. Chọn mức của cửa hàng — mức tích lũy, mức trưng bày, vị trí. Mấy số này nằm trong DSKHTG bạn upload đầu tháng, mở ra coi rồi chọn theo.
  3. Ngó lại ngày — app lấy ngày hôm nay. Nếu đang tính cho đơn chốt hôm khác thì đổi ngày.
  4. Đọc cột Giá chốt — đó là số báo cho khách. Muốn biết nó ra từ đâu thì bấm "Chi tiết".

Hàng nào thì chương trình nào

Đang chào hàng gìChọnGiá tính theo
Sữa bột trẻ em (Cat A)V SHOPlon
Sữa nước (Cat C)VNM SHOPthùng
SBPS trẻ emSBPS SHOPthùng
Khách kênh Mẹ & BéMẸ & BÉthùng
Sữa đặc, sữa chua, Probi, SBPS người lớnChưa có chương trình — chiết khấu chỉ còn Base/Ontop
Muốn xem hết bảng giáTẤT CẢ SPchọn lon hay thùng tuỳ ý

Chọn xong mà không thấy SP mình cần thì gần như chắc là chọn nhầm chương trình. Bí quá thì chọn TẤT CẢ SP — ra nguyên bảng giá gốc, lọc được theo ngành hàng, tính theo lon hay thùng tuỳ bạn.

Ngày quan trọng hơn bạn tưởng

Cùng một cửa hàng, cùng một thùng sữa, chốt ngày 10 và chốt ngày 25 ra hai giá khác nhau. Đây là chỗ dễ báo hớ nhất.

Chương trìnhChuyện gì xảy ra
V SHOPTừ ngày 1 đến 14 được cộng thêm 0,5% tiến độ. Sang ngày 15 là mất.
VNM SHOPCàng để lâu càng ít: đến ngày 10 được 1,6%, ngày 11–20 còn 1,2%, từ 21 chỉ còn 0,6%.
SBPS SHOPNửa sau tháng % tích lũy thấp hơn nửa đầu.
MẸ & BÉKhông ăn theo ngày, lúc nào cũng như nhau.

Nên trước khi đọc giá cho khách, liếc ô Ngày áp dụng một cái.

Khách chưa đăng ký chương trình

Bấm nút 🚫 Cửa hàng không tham gia chương trình ở bước 2, hoặc chọn “— Không tham gia —” trong ô Mức tích lũy. Thẻ CTTL sẽ chuyển sang màu vàng cho dễ nhận ra.

Lúc này CTTL bằng 0 và không trừ 0,9% — chỗ này nhiều người làm sai, cứ tưởng vẫn phải trừ. Giá chốt chỉ còn giảm bởi khuyến mãi hàng hoá thông thường.

Khách chỉ đăng ký tích lũy mà không trưng bày thì để mức tích lũy bình thường, riêng ô trưng bày chọn "Không tham gia". Ngược lại, không đăng ký tích lũy thì dù có trưng bày CTTL vẫn bằng 0 — quy định chương trình là vậy.

Mấy chỗ dễ hố

  • Sữa 1L không nằm trong VNM SHOP. Mấy SKU 1L luôn hiện CTTL 0%, đừng tưởng app lỗi.
  • SBPS người lớn (Sure Prevent, Sure Gold Prisma, Sure Diecerna) không có chương trình, cũng không có Ontop.
  • V SHOP chỉ được một mức trưng bày. Trưng bày còn phải gom thành cụm và đủ số mặt đã đăng ký mới được tính.
  • Thưởng TT của SBPS mặc định không cộng, để khớp file Excel gốc. Cần thì tick ô "Cộng Thưởng TT".
  • Mẹ & Bé phải chọn đúng nhóm ngành (SBPS_TE / A1_SBTE / A3_BDD) vì % tích lũy mỗi nhóm một khác.

Mấy cột trong bảng nghĩa là gì

Đơn giáGiá một lon/hộp, đã có VAT
Thành tiềnGiá một thùng = đơn giá × quy cách
Base · Ontop · MPPKhuyến mãi của bản thân SKU, không liên quan chương trình
CTTLChiết khấu chương trình — phần app tính theo mức và ngày bạn chọn
Tổng CKCộng hết bốn khoản trên
Giá chốtSố báo cho khách
Chênh lệchKhách được lợi bao nhiêu tiền so với giá gốc

Muốn thử phương án khác

Ba ô Base / Ontop / MPP của từng SP sửa được ngay trong danh sách, ô nào sửa rồi thì nền vàng. Bấm ↺ Xoá sửa tay để trả lại số gốc.

Muốn vọc sâu hơn thì mở ⚙ Độ lệch & tham số công thức ở bước 2, đổi được VAT, hệ số trừ 0,9%, tiến độ 0,5%. Sửa gì cũng chỉ nằm trên máy bạn, không ảnh hưởng ai.

Cần đưa vào Excel thì bấm ⬇ CSV, file giữ nguyên bộ lọc và những ô bạn vừa sửa.

Hay gặp

Sao không thấy sản phẩm nào?

Hoặc chọn nhầm chương trình, hoặc ô tìm kiếm còn sót chữ. Xoá ô tìm kiếm trước đã.

Một SKU hiện 0% trong khi mấy SKU kia có?

Sữa 1L hoặc SBPS người lớn. Hai nhóm này bị loại khỏi chương trình.

Giá không giống file Excel?

Coi lại theo thứ tự: ngày áp dụng → mức tích lũy → mức trưng bày. Chín trên mười lần là lệch ngày.

Bảng giá cũ, thiếu SP mới ra?

Báo người quản trị app cập nhật lại bảng giá tháng.

Dùng trên điện thoại có xem đủ không?

Đủ. Giá chốt nằm ngay bên phải mỗi dòng, không phải kéo ngang. Thanh dưới cùng luôn hiện CTTL đang áp dụng.

Giá tham khảo nội bộ — kiểm lại trước khi báo khách

Cây thư mục dữ liệu

vnm/
├─ Bảng giá gốc.xlsx        ← FILE NGUỒN, sửa giá ở đây
├─ SYNC.ps1                 ← chạy 1 lệnh: cài + theo dõi tự sync
│
├─ web/                     ← CHỈ THƯ MỤC NÀY LÊN NETLIFY
│   ├─ index.html
│   ├─ app/{app.<hash>.css, app.<hash>.js, xlsx.min.js}
│   ├─ fonts/{VNM Sans Display, VNM Sans Std}
│   └─ data/{products, programs, mapping_km, mapping}.json
│
├─ tools/                   ← build.mjs · build_data.py · build_seed_sql.py
│   └─ lib-excel.mjs · sync.mjs · watch.mjs
├─ db/                      ← schema.sql · seed_core.sql · seed_mapping.sql
├─ src/                     ← nguồn giao diện (sửa ở đây rồi build)
├─ build/                   ← bản 1 file offline + bản artifact
└─ docs/                    ← đặc tả CTTL · hướng dẫn
File nguồn, công cụ và dữ liệu tách riêng khỏi web/ — deploy Netlify chỉ đưa web/ lên mạng, file Excel và key không bao giờ lộ ra ngoài.

⇪ Sync bảng giá lên Supabase

Key service_role lấy ở Supabase → Project Settings → API. Key chỉ nằm trong trình duyệt của máy này, không gửi đi đâu khác và không nằm trong code deploy. Chỉ dùng trên máy riêng của bạn.

Nguồn dữ liệu đang nạp

Bật Supabase

// assets/app.js — đã cấu hình sẵn
const SUPABASE_URL  = "https://gtnexuvdeqvydvyndqcj.supabase.co";
const SUPABASE_KEYS = [ "sb_publishable_…", "eyJhbGci…(anon JWT dự phòng)" ];
// Đọc bảng vnm_products / vnm_programs — lỗi mạng hoặc chưa seed → tự fallback /data/*.json
Key public chỉ đọc (RLS chặn ghi) nên để trong code an toàn. Schema + seed SQL nằm trong thư mục supabase/.
Nguồn: Bảng giá gốc.xlsx (COST A→H · Mapping KM · Mapping) + đặc tả CTTL.
Giá tham khảo nội bộ — kiểm tra lại trước khi báo khách.
CTTL
0%
—