跳至內容
Astera Technology

逾期發票扣除收款及退款後,還欠多少?

按已完成收款及退款計剩餘款項,再找出已過到期日而仍未付清的發票。

先訂清楚要判斷甚麼,再準備資料

先逐筆付款合計已完成退款,再按發票計淨收款。把發票、付款及每筆退款一次過連接,可能令金額互相重複。例子只選到期日早於截數日的發票,當日到期仍不算逾期。

以下全部是假設資料。請在新的 SQLite 測試資料庫建立各表,再執行唯讀查詢。數量以件計,金額以港元的分作整數儲存;顯示港元時除以 100。

假設輸入節錄;完整相關資料見下方 SQL
編號金額(分)到期日狀態代碼
I11000002026-10-01issued
I2500002026-10-20issued
I3200002026-10-02issued
I4300002026-09-01void
下載可編輯 CSV ↓
可直接執行的完整假設資料(SQLite)
CREATE TABLE customers(id TEXT PRIMARY KEY, name TEXT);
CREATE TABLE invoices(id TEXT PRIMARY KEY, customer_id TEXT, amount_cents INTEGER, due_on TEXT, status TEXT);
CREATE TABLE payments(id TEXT PRIMARY KEY, invoice_id TEXT, amount_cents INTEGER, status TEXT);
CREATE TABLE refunds(id TEXT PRIMARY KEY, payment_id TEXT, amount_cents INTEGER, status TEXT);
INSERT INTO customers VALUES ('C1','Acorn'),('C2','Birch');
INSERT INTO invoices VALUES ('I1','C1',100000,'2026-10-01','issued'),('I2','C2',50000,'2026-10-20','issued'),('I3','C9',20000,'2026-10-02','issued'),('I4','C1',30000,'2026-09-01','void');
INSERT INTO payments VALUES ('P1','I1',40000,'settled'),('P2','I1',20000,'settled'),('P3','I2',50000,'settled'),('P4','I3',20000,'failed');
INSERT INTO refunds VALUES ('R1','P1',10000,'completed'),('R2','P1',5000,'pending'),('R3','P3',50000,'completed');

執行查詢,核對實際結果

SQLite 唯讀查詢
WITH refunded AS (
 SELECT payment_id,SUM(amount_cents) AS cents FROM refunds
 WHERE status='completed' GROUP BY payment_id
), paid AS (
 SELECT p.invoice_id,SUM(p.amount_cents-COALESCE(r.cents,0)) AS cents
 FROM payments p LEFT JOIN refunded r ON r.payment_id=p.id
 WHERE p.status='settled' GROUP BY p.invoice_id
)
SELECT i.id,i.due_on,i.amount_cents-COALESCE(p.cents,0) AS outstanding_cents
FROM invoices i LEFT JOIN paid p ON p.invoice_id=i.id
WHERE i.status='issued' AND i.due_on<'2026-10-10'
 AND i.amount_cents-COALESCE(p.cents,0)>0 ORDER BY i.id;
以上 SQLite 假設資料的查詢結果
編號到期日尚欠(分)
I12026-10-0150000
I32026-10-0220000
下載可編輯 CSV ↓

I1 尚欠 HK$500.00:發票 HK$1,000.00,已收 HK$600.00,再加回已退的 HK$100.00。I3 的付款失敗,HK$200.00 全數仍欠。I2 雖然全額退款後仍有未付餘額,但未到期,所以不列入逾期表。

按資料範圍使用結果

此例把退款加回未付餘額。有些系統用貸項單減少發票金額,便須另訂計法。模型未處理稅務、逾期費或貨幣兌換。

本例的建表、資料及結果已在 SQLite 執行。套用時先在系統測試副本調整欄位及狀態規則,再與流程負責人核對預期結果。其他資料庫平台未經測試。

相關資源