QUERY PLAN
Aggregate (cost=700.88..700.89 rows=1 width=32)
-> Hash Join (cost=603.00..698.07 rows=374 width=96)
Hash Cond: (ord.sales_contract_id = t.id)
-> Seq Scan on tbl_erp_sales_orders ord (cost=0.00..87.15 rows=1121 width=4)
Filter: (NOT is_done)
-> Hash (cost=595.82..595.82 rows=575 width=100)
-> Hash Left Join (cost=504.50..595.82 rows=575 width=100)
Hash Cond: (t.id = settle.sales_contract_id)
Filter: (((sales.sales_contract_id IS NOT NULL) OR (settle.sales_contract_id IS NOT NULL)) AND (((COALESCE(sales.amount, '0'::numeric) - COALESCE((sum(esrps.total_amount)), '0'::numeric)) - COALESCE(settle.amount, '0'::numeric)) < '0'::numeric))
-> Hash Left Join (cost=282.88..369.65 rows=1725 width=72)
Hash Cond: (t.id = sales.sales_contract_id)
-> Merge Left Join (cost=135.63..217.86 rows=1725 width=36)
Merge Cond: (t.id = sc.id)
-> Index Only Scan using tbl_sales_contracts_pkey on tbl_sales_contracts t (cost=0.28..78.15 rows=1725 width=4)
-> GroupAggregate (cost=135.35..135.37 rows=1 width=36)
Group Key: sc.id
-> Sort (cost=135.35..135.35 rows=1 width=36)
Sort Key: sc.id
-> Nested Loop (cost=0.54..135.34 rows=1 width=36)
Join Filter: (esrps.erp_sales_return_id = t_1.id)
-> Nested Loop Left Join (cost=0.54..134.31 rows=1 width=40)
-> Seq Scan on tbl_erp_sales_return_products esrps (cost=0.00..1.01 rows=1 width=40)
-> Nested Loop Left Join (cost=0.54..133.29 rows=1 width=8)
-> Index Scan using tbl_erp_sales_outbound_spent_products_pkey on tbl_erp_sales_outbound_spent_products esips (cost=0.27..8.29 rows=1 width=8)
Index Cond: (id = esrps.erp_sales_outbound_spent_product_id)
-> Hash Right Join (cost=0.26..124.99 rows=1 width=8)
Hash Cond: (sc.from_project = pi.project_id)
-> Seq Scan on tbl_sales_contracts sc (cost=0.00..118.25 rows=1725 width=8)
-> Hash (cost=0.25..0.25 rows=1 width=8)
-> Index Scan using tbl_erp_sales_outbounds_pkey on tbl_erp_sales_outbounds pi (cost=0.14..0.25 rows=1 width=8)
Index Cond: (id = esips.erp_sales_outbound_id)
-> Seq Scan on tbl_erp_sales_returns t_1 (cost=0.00..1.01 rows=1 width=4)
Filter: ((created_at >= '2025-08-08 14:34:58+08'::timestamp with time zone) AND (status = 2))
-> Hash (cost=145.46..145.46 rows=143 width=36)
-> Subquery Scan on sales (cost=142.24..145.46 rows=143 width=36)
-> HashAggregate (cost=142.24..144.03 rows=143 width=36)
Group Key: sc_1.id
-> Hash Right Join (cost=11.07..141.53 rows=143 width=10)
Hash Cond: (sc_1.from_project = t_2.project_id)
-> Seq Scan on tbl_sales_contracts sc_1 (cost=0.00..118.25 rows=1725 width=8)
-> Hash (cost=9.28..9.28 rows=143 width=10)
-> Seq Scan on tbl_erp_sales_outbounds t_2 (cost=0.00..9.28 rows=143 width=10)
Filter: ((created_at >= '2025-08-08 14:34:58+08'::timestamp with time zone) AND (status = 2))
-> Hash (cost=219.19..219.19 rows=195 width=36)
-> Subquery Scan on settle (cost=214.80..219.19 rows=195 width=36)
-> HashAggregate (cost=214.80..217.24 rows=195 width=36)
Group Key: "*SELECT* 1".contract_id
-> Append (cost=103.37..213.82 rows=195 width=10)
-> Subquery Scan on "*SELECT* 1" (cost=103.37..146.80 rows=193 width=10)
-> Hash Join (cost=103.37..144.87 rows=193 width=106)
Hash Cond: (r.erp_collect_ticket_id = t_3.id)
-> Seq Scan on tbl_erp_collect_ticket_settles r (cost=0.00..35.83 rows=2154 width=14)
Filter: (sales_contract_id IS NOT NULL)
-> Hash (cost=100.91..100.91 rows=197 width=4)
-> Seq Scan on tbl_erp_collect_tickets t_3 (cost=0.00..100.91 rows=197 width=4)
Filter: ((created_at >= '2025-08-08 14:34:58+08'::timestamp with time zone) AND (status = 2))
-> Subquery Scan on "*SELECT* 2" (cost=0.29..9.34 rows=1 width=36)
-> Nested Loop (cost=0.29..9.33 rows=1 width=132)
-> Seq Scan on tbl_erp_cash_cost_ticket_sales_contract_settles r_1 (cost=0.00..1.01 rows=1 width=40)
Filter: (sales_contract_id IS NOT NULL)
-> Index Scan using tbl_erp_cash_cost_tickets_pkey on tbl_erp_cash_cost_tickets t_4 (cost=0.29..8.31 rows=1 width=4)
Index Cond: (id = r_1.erp_cash_cost_ticket_id)
Filter: (is_payment_settle AND (created_at >= '2025-08-08 14:34:58+08'::timestamp with time zone) AND (status = 2))
-> Subquery Scan on "*SELECT* 3" (cost=0.28..57.68 rows=1 width=36)
-> Nested Loop (cost=0.28..57.67 rows=1 width=132)
-> Seq Scan on tbl_erp_payment_ticket_settles r_2 (cost=0.00..41.01 rows=2 width=14)
Filter: (sales_contract_id IS NOT NULL)
-> Index Scan using tbl_erp_payment_tickets_pkey on tbl_erp_payment_tickets t_5 (cost=0.28..8.30 rows=1 width=4)
Index Cond: (id = r_2.erp_payment_ticket_id)
Filter: (is_payment_settle AND (created_at >= '2025-08-08 14:34:58+08'::timestamp with time zone) AND (status = 2))