MOPS Admin
M

Đang kiểm tra phiên đăng nhập...

Hệ thống quản trị nội bộ — MOPS Admin

MOPS Admin
M

Đang kiểm tra phiên đăng nhập...

shield_person

MOPS Admin

Hệ thống quản lý đơn hàng nội bộ

[[ loginError ]]
warning

Chưa cấu hình tài khoản ngân hàng nhận tiền — mọi đơn hàng mới sẽ không tạo được mã QR thanh toán.

Liên hệ quản trị viên (OWNER) để cấu hình
Bộ lọc báo cáo
progress_activity
error_outline

[[ overview.error ]]

[[ card.label ]]
[[ card.value ]]
account_balance_wallet[[ overviewNetProfitCard.label ]]
[[ overviewNetProfitCard.value ]]
[[ card.label ]]
[[ card.value ]]

Tỉ lệ đơn

Đã thanh toán [[ overviewOrderRatio.paidPct ]]%
Tổng đơn
[[ overviewOrderRatio.total ]]
Đã thanh toán
[[ overviewOrderRatio.paid ]]
Chờ xác nhận
[[ overviewOrderRatio.pending ]]
Kỳ Doanh thu Số đơn
[[ b.key ]] [[ formatMoney(b.revenue) ]] [[ b.order_count ]]
Chưa có dữ liệu trong khoảng lọc.
Chi nhánh Doanh thu Số đơn
[[ s.store ]] [[ formatMoney(s.revenue) ]] [[ s.order_count ]]
Chưa có dữ liệu trong khoảng lọc.
[[ s.name ]] ×[[ s.order_count ]] [[ formatMoney(s.revenue) ]]
Chưa có dữ liệu.
[[ c.name || c.phone || c.customer_id ]] ×[[ c.paid_count ]] [[ formatMoney(c.total_paid) ]]
Chưa có dữ liệu.
Nhân viên Đã xác nhận PAID Đã huỷ Đã hoàn tiền
[[ s.staff ]] [[ s.paid_confirmed_count ]] [[ s.cancelled_count ]] [[ s.refunded_count ]]
Chưa có dữ liệu (chỉ tính từ khi bản vá gán nhân viên được triển khai).
progress_activity
error_outline

[[ salesReport.error ]]

[[ o.order_type ]] ×[[ o.count ]] [[ formatMoney(o.revenue) ]]
Chưa có dữ liệu.
[[ s.source ]] ×[[ s.count ]] [[ formatMoney(s.revenue) ]]
Chưa có dữ liệu.
Lượt dùng Tổng tiền giảm
[[ c.code ]] [[ c.used_count ]] [[ formatMoney(c.total_discount_amount) ]]
Chưa có dữ liệu.
Nhân viên Số đơn giảm giá Tổng tiền giảm % giảm TB Hạn mức Role Số lần chạm hạn mức
[[ s.staff ]] [[ s.discount_order_count ]] [[ formatMoney(s.total_discount_amount) ]] [[ s.avg_discount_percent ]]% [[ s.max_discount_percent === null ? 'Không giới hạn' : s.max_discount_percent + '%' ]] [[ s.at_limit_count ]] 0
Chưa có dữ liệu.
progress_activity
error_outline

[[ customerReport.error ]]

[[ customerNewInRange ]]
Khách mới trong kỳ
Nhóm Số khách Doanh thu (kỳ) Giá trị đơn TB
[[ g.group ]] [[ g.customer_count ]] [[ formatMoney(g.revenue_in_range) ]] [[ formatMoney(g.avg_order_value) ]]
Chưa có dữ liệu.
[[ s.source ]] [[ s.customer_count ]]
Chưa có dữ liệu.
progress_activity
error_outline

[[ purchaseReport.error ]]

Tổng giá trị nhập (kỳ)
[[ formatMoney(purchaseKpi.total_purchase_amount_in_range) ]]
Số phiếu đã nhập (kỳ)
[[ purchaseKpi.po_count_in_range || 0 ]]
[[ s.supplier ]] ×[[ s.po_count ]] [[ formatMoney(s.total_amount) ]]
Chưa có dữ liệu.
[[ p.product_name ]] ×[[ p.total_qty ]] [[ formatMoney(p.total_cost) ]]
Chưa có dữ liệu.
[[ s.status ]] [[ s.count ]]
Chưa có dữ liệu.
progress_activity
error_outline

[[ inventoryReport.error ]]

[[ inventoryLowStock.length ]] sản phẩm
Sản phẩm Tồn hiện tại Ngưỡng tối thiểu
[[ p.product_name ]] [[ p.inventory_qty ]] [[ p.safety_stock_min ]]
Không có sản phẩm nào sắp hết hàng.
Sản phẩm Nhập Xuất
[[ m.product_name ]] +[[ m.in_qty ]] -[[ m.out_qty ]]
Chưa có dữ liệu.
progress_activity
error_outline

[[ financeReport.error ]]

[[ card.label ]]
[[ card.value ]]
[[ financeReport.missingReceipts.length ]] đơn
Đơn hàng Số tiền Thanh toán lúc Vấn đề
[[ m.order_id ]] [[ formatMoney(m.amount) ]] [[ formatDate(m.paid_at) ]] [[ m.issue ]]
Không có đơn nào thiếu Phiếu Thu.
Tài khoản Loại Số dư hiện tại
[[ a.name ]] ([[ a.branch || 'Chưa gắn chi nhánh' ]]) [[ a.type ]] [[ formatMoney(a.balance) ]]
Chưa có dữ liệu.
Mã Bill Tổng nợ Đã trả Còn nợ Trạng thái
[[ b.bill_id ]] [[ formatMoney(b.amount) ]] [[ formatMoney(b.paid_amount) ]] [[ formatMoney(b.remaining_amount) ]] [[ b.status ]]
Không còn công nợ nào chưa thanh toán.
Bộ lọc đơn hàng
expand_more
progress_activity
receipt_long

[[ ordersEmptyMessage ]]

Mã đơn Mã giao dịch Số tiền Thanh toán Xử lý đơn Giờ đặt Hết hạn

[[ orders.list.length ]] đơn hàng

Tạo vận đơn

[[ shipModal.order.shipping_address.receiver_name || '—' ]]

[[ formatAddress(shipModal.order.shipping_address.address, shipModal.order.shipping_address.ward, shipModal.order.shipping_address.province) ]]

Đơn chưa có địa chỉ giao — chỉ có thể chọn "Tự giao / hãng khác".
progress_activity Đang tải danh sách…
progress_activity
Bộ lọc đối soát
progress_activity
receipt_long

[[ shippingReconEmpty ]]

Mã phiếuĐối tácTrạng thái Thanh toánThực nhận/trảNgày tạo
[[ r.recon_id ]] [[ r.carrier_code ]] [[ r.status ]] [[ r.payment_status ]] [[ formatMoney(r.net_total) ]] [[ formatDate(r.created_at) ]] chevron_right

[[ shipping.reconList.length ]] phiếu đối soát

Phiếu [[ shipping.detail.recon_id ]] · [[ shipping.detail.carrier_code ]]

[[ shipping.detail.status ]] [[ shipping.detail.payment_status ]]
⚠️ Còn chênh lệch COD/Phí — sửa giá trị đối tác cho khớp (chênh lệch = 0) trước khi xác nhận.
COD đối tác
[[ formatMoney(shipping.detail.total_cod_partner) ]]
Phí đối tác
[[ formatMoney(shipping.detail.total_fee_partner) ]]
Phí khác
[[ formatMoney(shipping.detail.total_other) ]]
Thực nhận/trả
[[ formatMoney(shipping.detail.net_total) ]]
Mã vận đơn COD hệ thốngCOD đối tác Phí hệ thốngPhí đối tác Phí khácChênh lệch
[[ it.tracking_code ]]
[[ it.order_id ]]
[[ formatMoney(it.cod_system) ]] [[ formatMoney(it.cod_partner) ]] [[ formatMoney(it.fee_system) ]] [[ formatMoney(it.fee_partner) ]] [[ formatMoney(it.other_fee) ]] COD [[ formatMoney(it.cod_diff) ]]
Phí [[ formatMoney(it.fee_diff) ]] Khớp

Tạo phiếu đối soát

Kéo mọi vận đơn Đã giao/Đã hoàn của đối tác trong khoảng thời gian, chưa nằm trong phiếu nào.

Bộ lọc báo cáo
progress_activity
local_shipping

Chưa có vận đơn nào trong khoảng thời gian này.

Tổng vận đơn
[[ shipping.report.total_waybills ]]
Tổng phí ship
[[ formatMoney(shipping.report.total_fee) ]]
Tổng COD
[[ formatMoney(shipping.report.total_cod) ]]
Phí TB/đơn
[[ formatMoney(shipping.report.avg_fee) ]]
% giao thành công
[[ shipping.report.success_rate ]]%
Đối tácVận đơnTỉ trọng VĐ Tổng phíTỉ trọng phí Phí TBPhí/COD% giao TC
[[ c.carrier ]] [[ c.waybills ]] [[ c.waybill_share ]]% [[ formatMoney(c.fee) ]] [[ c.fee_share ]]% [[ formatMoney(c.avg_fee) ]] [[ c.fee_cod_ratio ]] [[ c.success_rate ]]%

Chọn khoảng thời gian rồi bấm "Xem báo cáo".

GHN chỉ là 1 đầu mối — cấu hình chi tiết (Token/ShopID) ở tab Cấu hình → Vận chuyển GHN. Bật/tắt kết nối để hiện/ẩn khỏi lựa chọn khi tạo vận đơn.

progress_activity
TênPhân loạiCấu hìnhKết nối
[[ c.carrier_code ]] [[ c.name ]] [[ c.category ]] [[ c.has_config ? '✓ Đã cấu hình' : 'Chưa cấu hình' ]]

[[ card.label ]]

[[ card.value ]]

[[ card.icon ]]
Bộ lọc sản phẩm
search
Tên sản phẩm SKU Giá[[ products.sortDir === 'desc' ? 'arrow_downward' : 'arrow_upward' ]] Tồn kho[[ products.sortDir === 'desc' ? 'arrow_downward' : 'arrow_upward' ]] Sức bán[[ products.sortDir === 'desc' ? 'arrow_downward' : 'arrow_upward' ]] Trạng thái Hành động
inventory_2

[[ productsEmptyMessage ]]

image
[[ p.title || '—' ]] [[ p.variant_title ]] [[ stockBadge(p).text ]]
[[ p.handle ]]
Đã lưu MOPS Đã bật bán
[[ p.sku || '—' ]] [[ formatMoney(p.price) ]] warning[[ (p.inventory_qty || 0).toLocaleString('vi-VN') ]] [[ (p.sold_qty || 0).toLocaleString('vi-VN') ]] [[ productStatusBadge(p).text ]]

Hiển thị [[ productsPageFrom ]]-[[ productsPageTo ]] trên [[ productsFiltered.length ]] sản phẩm

Bộ lọc khách hàng
progress_activity
person_off

[[ customersEmptyMessage ]]

STT Số điện thoại Tên Nhóm khách Lần cuối đặt Tổng đơn Đã thanh toán
[[ index + 1 ]] [[ formatPhone(c.phone) ]] [[ c.name || '—' ]] Sỉ [[ c.default_discount_percent ]]% Lẻ [[ formatDate(c.last_order_at) ]] [[ c.order_count ]] [[ formatMoney(c.total_paid) ]] chevron_right

[[ customersFiltered.length ]] / [[ customers.all.length ]] khách hàng

Bộ lọc sổ quỹ
progress_activity
error_outline

[[ finance.error ]]

[[ card.label ]]
[[ card.value ]]
insightsLợi nhuận gộp (kỳ)
Chỉ [[ financeGrossProfitCard.coveragePct ]]% doanh thu có dữ liệu giá vốn [[ financeGrossProfitCard.value ]]
Danh mục Số tiền Số giao dịch
[[ c.category ]] [[ formatMoney(c.amount) ]] [[ c.count ]]
Chưa có khoản chi nào trong khoảng lọc.
progress_activity

[[ finance.listError || 'Chưa có giao dịch thu chi thủ công nào trong khoảng lọc.' ]]

Ngày Loại Danh mục Số tiền Tài khoản Thao tác
[[ formatDate(tx.created_at) ]] Thu Chi [[ tx.category ]]
[[ financeTxSecondaryLine(tx) ]]
[[ tx.type === 'INCOME' ? '+' : '−' ]][[ formatMoney(tx.amount) ]] [[ tx.account || '—' ]]
[[ tx.created_by ]]
Đã huỷ
progress_activity

[[ financeCore.accounts.error ]]

[[ a.type ]]
[[ formatMoney(a.balance) ]]
[[ a.active ? 'Đang hoạt động' : 'Đã ẩn' ]][[ a.branch ? ' · ' + a.branch : '' ]]
Chưa có tài khoản nào — bấm "Thêm tài khoản" ở trên.
progress_activity

[[ financeCore.receipts.error || 'Chưa có Phiếu Thu nào.' ]]

Mã phiếu Nguồn Số tiền Trạng thái Ngày tạo Thao tác
[[ r.receipt_id ]] [[ r.source_type === 'SALES_AUTO' ? 'Tự động (đơn hàng)' : 'Thủ công' ]]
[[ r.note ]]
[[ formatMoney(r.total_amount) ]] [[ r.status ]] [[ formatDate(r.created_at) ]]
progress_activity

[[ financeCore.vouchers.error || 'Chưa có Phiếu Chi nào.' ]]

Mã phiếu Diễn giải Số tiền Trạng thái Người tạo / duyệt Thao tác
[[ v.voucher_id ]] [[ v.note || '—' ]] [[ formatMoney(v.total_amount) ]] [[ v.status ]] [[ v.created_by ]] → [[ v.approved_by ]]
progress_activity

[[ financeCore.transfers.error || 'Chưa có Chuyển quỹ nào.' ]]

Từ Đến Số tiền Trạng thái Thao tác
[[ t.transfer_id ]] [[ accountName(t.from_account_id) ]] [[ accountName(t.to_account_id) ]] [[ formatMoney(t.amount) ]] [[ t.status ]]
progress_activity

[[ financeCore.adjustments.error || 'Chưa có Điều chỉnh quỹ nào.' ]]

Tài khoản Số tiền Lý do Trạng thái Thao tác
[[ a.adjustment_id ]] [[ accountName(a.account_id) ]] [[ a.direction === 'INCREASE' ? 'Tăng' : 'Giảm' ]]
[[ a.direction === 'INCREASE' ? '+' : '−' ]][[ formatMoney(a.amount) ]]
[[ a.reason ]] [[ a.status ]]
progress_activity

[[ inventory.suppliers.error || 'Chưa có nhà cung cấp nào.' ]]

STT Tên Điện thoại Trạng thái Thao tác
[[ index + 1 ]] [[ s.name ]] [[ s.phone || '—' ]] Đang hợp tác Ngừng hợp tác
progress_activity

[[ inventory.purchaseOrders.error || 'Chưa có phiếu nhập hàng nào.' ]]

Mã phiếu Nhà cung cấp Sản phẩm Tổng tiền Trạng thái Thao tác
[[ po.purchase_order_id ]] [[ supplierName(po.supplier_id) ]] [[ po.items.length ]] sản phẩm [[ formatMoney(po.total_amount) ]] [[ po.status ]]
[[ po.payment_terms === 'DEPOSIT' ? 'Cọc ' + formatMoney(po.deposit_amount) : 'Trả đủ' ]]

Chi tiết phiếu nhập — [[ inventory.purchaseOrders.detailId ]]

[[ purchaseOrderDetailTarget.status ]] [[ formatDate(purchaseOrderDetailTarget.created_at) ]]

[[ supplierName(purchaseOrderDetailTarget.supplier_id) ]]

image
[[ it.product_name ]]
[[ formatMoney(it.unit_cost) ]] × [[ it.qty ]]
[[ formatMoney(it.line_total) ]]
Phí vận chuyển[[ formatMoney(purchaseOrderDetailTarget.shipping_cost) ]]
Phí lưu kho[[ formatMoney(purchaseOrderDetailTarget.storage_cost) ]]
Thuế VAT[[ formatMoney(purchaseOrderDetailTarget.vat_amount) ]]
Chiết khấu NCC-[[ formatMoney(purchaseOrderDetailTarget.discount_amount) ]]
Tổng giá trị nhập[[ formatMoney(purchaseOrderDetailTarget.total_amount) ]]
Điều khoản[[ purchaseOrderDetailTarget.payment_terms === 'DEPOSIT' ? 'Cọc ' + formatMoney(purchaseOrderDetailTarget.deposit_amount) : 'Trả đủ' ]]

[[ purchaseOrderDetailTarget.note ]]

progress_activity

[[ inventory.bills.error || 'Chưa có công nợ nhà cung cấp nào.' ]]

Mã Bill Nhà cung cấp Tổng nợ Đã trả Còn nợ Trạng thái
[[ b.bill_id ]] [[ supplierName(b.party_id) ]] [[ formatMoney(b.amount) ]] [[ formatMoney(b.paid_amount) ]] [[ formatMoney(b.remaining_amount) ]] [[ b.status ]]
Ma trận phân phối thông báo Chỉ đọc
Sự kiện Mô tả Nhận thông báo
ORDER_CREATED Đơn hàng mới được tạo ADMINSTAFF
PAYMENT_REPORTED Khách báo đã chuyển khoản ADMINACCOUNTANT
PAYMENT_CONFIRMED Thanh toán được xác nhận ADMINSTAFF
ORDER_CANCELLED Đơn hàng bị huỷ ADMINACCOUNTANT
PAYMENT_EXPIRED Hết hạn thanh toán (cron) ADMIN
PRODUCT_SYNC_FAILED Đồng bộ sản phẩm thất bại OWNERADMIN

Thông báo gửi qua Telegram cho các nhân viên đang hoạt động thuộc vai trò tương ứng và đã cấu hình Telegram Chat ID.

Bộ lọc thông báo
progress_activity
notifications_off

[[ notifications.error ]]

STT Mã đơn Sự kiện Kênh Trạng thái Thời gian gửi Lỗi
[[ index + 1 ]] [[ n.order_id || '—' ]] [[ notifLabel(n.event) ]] [[ n.channel || '—' ]] [[ statusMeta(n.status).label ]] [[ formatDate(n.sent_at || n.created_at) ]] ⚠ Chi tiết

[[ notifications.list.length ]] thông báo

Bộ lọc nhật ký
progress_activity
history

[[ auditEmptyMessage ]]

STT Loại Entity ID Hành động Thực hiện bởi Thời gian
[[ index + 1 ]] [[ log.entity_type ]] [[ log.entity_id || '—' ]] [[ log.action ]] [[ log.user || '—' ]] [[ formatDate(log.created_at) ]]

[[ audit.list.length ]] bản ghi

Bộ lọc nhân viên
progress_activity
badge

[[ staffEmptyMessage ]]

STT Tên hiển thị Username Vai trò Trạng thái Đăng nhập cuối Telegram Thao tác

[[ staffFiltered.length ]] / [[ staffMgmt.all.length ]] nhân viên

Bộ lọc chi nhánh
progress_activity
storefront

[[ branchesEmptyMessage ]]

STT Tên chi nhánh Điện thoại Địa chỉ Mặc định Trạng thái Thao tác
[[ index + 1 ]] [[ b.name_vi ]] [[ formatPhone(b.phone) ]] [[ formatAddress(b.address, b.ward, b.province) ]] Mặc định Đang hoạt động Ngừng hoạt động

[[ branchesFiltered.length ]] / [[ branches.all.length ]] chi nhánh

Bộ lọc mã giảm giá
progress_activity
sell

[[ couponsEmptyMessage ]]

Loại giảm Đơn tối thiểu Đã dùng / Tối đa Hiệu lực Trạng thái Thao tác
[[ c.code ]] [[ c.value_type === 'fixed' ? formatMoney(c.value) : c.value + '%' ]] [[ c.min_order_amount ? formatMoney(c.min_order_amount) : '—' ]] [[ c.used_count ]] / [[ c.max_uses || '∞' ]] [[ c.start_at ? formatDate(c.start_at) : '—' ]] → [[ c.expires_at ? formatDate(c.expires_at) : '—' ]] Bật Tắt

[[ couponsFiltered.length ]] / [[ couponsMgmt.all.length ]] mã giảm giá

Trạng thái hệ thống

Phiên bản hiện tại và chế độ bảo trì. Chỉ hiển thị với OWNER.

Phiên bản: [[ settings.appVersion || '—' ]] Môi trường: [[ settings.env || '—' ]]

Tài khoản ngân hàng

Cấu hình tài khoản nhận thanh toán QR cho các giao dịch đơn hàng tự động.

Ngân hàng [[ settings.bankCode || '—' ]]
Số tài khoản [[ maskedAccountNo ]]
Tên chủ tài khoản [[ settings.accountName || '—' ]]
info

Mã QR thanh toán được tạo tự động dựa trên 3 thông tin trên (chuẩn VietQR) — không cần cấu hình gì thêm.

SAPO API

Thông tin kết nối SAPO để đồng bộ sản phẩm (tab Sản phẩm).

lock
lock

Vận chuyển GHN

Giao Hàng Nhanh. Đăng ký sandbox tại 5sao.ghn.dev (Chủ cửa hàng → xem & sao chép Token/ShopID; cập nhật địa chỉ cửa hàng để lấy District/Ward gửi hàng). Token là bí mật — để trống nếu không đổi.

🔒 Đã cấu hình

Telegram

Gửi thông báo đơn hàng / thanh toán tới nhóm Telegram.

lock

Bảo mật hệ thống

Xác thực nâng cao cho vai trò OWNER.

verified_user

Xác thực 2 yếu tố (2FA)

Chưa khả dụng — sẽ có trong bản cập nhật sau

history [[ settings.lastSaved || 'Chưa có thay đổi nào được ghi nhận' ]]

Hồ sơ của tôi

Bỏ trống trường nào không muốn đổi — chỉ trường bạn điền mới được lưu.

Đổi mật khẩu (tuỳ chọn)

Thêm sản phẩm mới

Tạo sản phẩm cục bộ trong MOPS — không cần tồn tại trên SAPO. Dùng cho dịch vụ phát sinh hoặc khi chưa cấu hình đồng bộ SAPO.

[[ rightPanel.title || 'Chi tiết sản phẩm' ]]

image

[[ rightPanel.product.title || '—' ]]

[[ rightPanel.product.handle ]]
Giá bán [[ formatMoney(rightPanel.product.price) ]]
Giá gốc [[ formatMoney(rightPanel.product.compare_at_price) ]]
Tồn kho [[ rightPanel.product.inventory_qty ]]
Trạng thái SAPO Ngừng kinh doanh Đang bán

Sửa sản phẩm

Giá bán sẽ bị đồng bộ lại từ SAPO ở lần "Đồng bộ từ SAPO" kế tiếp. Giá gốc và Tồn kho do MOPS tự quản, không bị đồng bộ ghi đè.

Sản phẩm chưa "Kết nối" vào MOPS — chưa sửa được Đơn vị tính (thuộc ProductMappings, xem nút "Kết nối" bên dưới).

Tích hợp MOPS

Đã map dịch vụ [[ rightPanel.product.in_mops ? 'Có' : 'Chưa' ]]
Bật trong MOPS [[ rightPanel.product.mops_enabled ? 'Có' : 'Không' ]]
SKU[[ rightPanel.product.sku || '—' ]]
Thương hiệu[[ rightPanel.product.vendor || '—' ]]
Loại sản phẩm[[ rightPanel.product.product_type || '—' ]]
Đơn vị tính[[ rightPanel.product.unit || '—' ]]
Khối lượng[[ rightPanel.product.weight ? rightPanel.product.weight + ' kg' : '—' ]]
Mã vạch[[ rightPanel.product.barcode || '—' ]]
Cần vận chuyển[[ rightPanel.product.requires_shipping ? 'Có' : 'Không' ]]

Thêm giao dịch

Thêm tài khoản / quỹ

Lập Phiếu Thu

Lập Phiếu Chi

Chuyển quỹ giữa 2 tài khoản

Điều chỉnh quỹ

Dùng khi kiểm kê quỹ tiền mặt lệch thực tế. Luôn phải qua Gửi duyệt → Duyệt → Post — không có đường tắt.

Thêm chi nhánh

Sửa chi nhánh

Thêm nhà cung cấp

Sửa nhà cung cấp — [[ inventory.suppliers.editTarget && inventory.suppliers.editTarget.name ]]

Chi tiết nhà cung cấp

progress_activity
Không tải được chi tiết nhà cung cấp.

Thêm mã giảm giá

Thêm nhân viên mới

Quyền riêng (tuỳ chọn — cộng thêm ngoài Vai trò ở trên)

[[ grp.group ]]

Đặt lại mật khẩu

Nhân viên: [[ staffMgmt.resetTarget && staffMgmt.resetTarget.name ]] ([[ staffMgmt.resetTarget && staffMgmt.resetTarget.username ]])

Sửa nhân viên — [[ staffMgmt.editTarget && staffMgmt.editTarget.name ]]

Đổi mật khẩu dùng nút "Reset PW" riêng. Muốn đổi Role của chính bạn — nhờ 1 owner/admin khác.

Quyền — [[ staffMgmt.permsTarget && staffMgmt.permsTarget.name ]]

progress_activity
Vai trò (baseline): [[ (staffMgmt.permsTarget && staffMgmt.permsTarget.role || '').toUpperCase() ]] Toàn quyền hệ thống Chưa có quyền nào được cấu hình
  • [[ permLabel(p) ]]

Quyền riêng — cộng thêm cho cá nhân này (union với Role)

[[ grp.group ]]

[[ inventory.purchaseOrders.editingId ? 'Sửa phiếu nhập hàng — ' + inventory.purchaseOrders.editingId : 'Lập phiếu nhập hàng' ]]

✓ Đã chọn từ danh sách sản phẩm Sản phẩm mới, chưa có trong Products — giá vốn sẽ không tự tính khi bán qua MOPS

Chọn từ danh sách gợi ý để gán đúng ProductID (tính giá vốn chuẩn khi bán) — hoặc tự gõ tên nếu là sản phẩm mới chưa có trong SAPO/MOPS.

Bill công nợ NCC (khi Post) = Tổng giá trị nhập + Vận chuyển + Lưu kho + VAT − Chiết khấu.

Tổng giá trị nhập tạm tính từ Dòng sản phẩm: [[ formatMoney(poItemsSubtotal()) ]] — nhập số tiền cọc cụ thể, không tính theo %. Sau khi Lưu phiếu (Draft), dùng nút "Trả cọc NCC" ở danh sách để lập Phiếu Chi cọc trước — chưa cần chờ hàng về/Post.

[[ manualOrder.editingOrderId ? 'Sửa đơn ' + manualOrder.editingOrderId : 'Tạo đơn hàng thủ công' ]]

Dùng cho khách vãng lai / gọi điện — hệ thống vẫn sinh QR chuyển khoản như khách tự đặt.

warningĐơn ở trạng thái nhạy cảm — sửa vẫn được nhưng cần lưu ý:

  • [[ w ]]

Sản phẩm / dịch vụ

progress_activity Đang tải sản phẩm…

Gợi ý — mới cập nhật

Chưa có sản phẩm nào để gợi ý.

Thêm nhanh sản phẩm

image
[[ item.title ]]
[[ formatMoney(item.price) ]]
[[ item.qty ]]
Chưa có sản phẩm nào trong đơn.
Tạm tính[[ formatMoney(manualOrderAmounts.subtotal) ]]
[[ manualOrder.couponPreview.valid ? ('Đã áp dụng — giảm ' + formatMoney(manualOrder.couponPreview.discount_amount)) : manualOrder.couponPreview.error ]]
Giảm giá−[[ formatMoney(manualOrderAmounts.discount) ]]
Phí khác (ship...)
Tổng cộng[[ formatMoney(manualOrderAmounts.total) ]]

Loại đơn

Thông tin khách hàng

progress_activity Đang tải khách hàng…
✓ Khách Sỉ — tự động giảm [[ manualOrder.selectedCustomer.default_discount_percent ]]% ✓ Đã chọn khách có sẵn

SĐT là mã định danh khách — không sửa khi chỉnh đơn.

Chiết khấu tại quầy (tuỳ chọn — loại trừ với mã giảm giá)

* Đơn hàng có giảm giá cần ghi chú lý do bên dưới trước khi tạo đơn.

Đơn hàng có giảm giá cần ghi chú lý do để tiếp tục tạo đơn.

Thanh toán

Đang tải dữ liệu địa giới GHN…

Phí vận chuyển GHN dự kiến: [[ formatMoney(manualOrder.shippingFee) ]]

[[ manualOrder.error ]]
check_circle

Đã cập nhật đơn [[ manualOrder.result.order_id ]]

warningCần lưu ý sau khi sửa:

  • [[ w ]]

Đơn đã được cập nhật, không có cảnh báo nào.

check_circle

Đã tạo đơn [[ manualOrder.result.order_id ]]

QR chuyển khoản — bấm để phóng to
Số tiền[[ formatMoney(manualOrder.result.total_amount) ]]
Nội dung CK[[ manualOrder.result.transaction_ref || manualOrder.result.order_id ]]

Chi tiết khách hàng

progress_activity
Không tải được chi tiết khách hàng.

Sửa khách hàng — [[ customers.editTarget && customers.editTarget.name || 'Khách lẻ' ]]

Chính sách giá (docs/mops.md §16)

Khách Sỉ sẽ tự động áp % này khi thu ngân chọn khách ở form Tạo đơn thủ công — không cần gõ tay mỗi lần.

Cá nhân & Nguồn khách

Địa chỉ giao hàng mặc định

Loyalty (hạng thành viên set tay — chưa có công thức tự tính từ điểm)

QR chuyển khoản (phóng to)
PHARMA COSMETICS
HOÁ ĐƠN BÁN HÀNG
Mã đơn: --  |  Ngày: --
Khách hàng
--
Sản phẩm
Đơn giá SL Thành tiền
Tạm tính--
TỔNG THANH TOÁN--