业绩明细备注:撤销「订单实付未减退款」(价保扣款类回归通用档「订单实付未减冲减」,该档 = 订单实付=收入+优惠 → 差额=冲减金额)

This commit is contained in:
qiuxiang 2026-10-16 10:02:16 +08:00
parent 422497cfcc
commit e064492a95
2 changed files with 1 additions and 39 deletions

View File

@ -296,11 +296,6 @@ class Pages extends Controller
$jdSofiaGuobu = '(' . $jdSofiaPay . ' - COALESCE(income_amount, 0)) > 0.005';
$rules['差额=订单实付包含商家承担优惠和以旧换新国补'] = $jdSofiaGuard . ' AND ' . $jdSofiaGuobu;
$rules['差额=订单实付包含商家承担优惠'] = $jdSofiaGuard . ' AND NOT (' . $jdSofiaGuobu . ')';
// 京东「价保扣款」负差额:差额=该单账单「价保扣款」合计(价保按退款收回的性质)→「订单实付未减退款」。
$jiabaoRefund = 'COALESCE((SELECT ROUND(SUM(b.expense), 2) FROM jd_daily_bill_rows b'
. " WHERE b.order_no = store_receipt_order_match_rows.online_order_no AND b.bill_item LIKE '价保扣款%'), 0)";
$rules['订单实付未减退款'] = "platform = '京东账单' AND " . $effective . ' < -0.005'
. ' AND ABS(ROUND(ABS(' . $effective . ') - ' . $jiabaoRefund . ', 2)) <= 0.02';
// C 方案:这三条是"通用等式档"——口径(卖家实收 / 应付已付)能对上账单的行让位给口径兜底
// (归零 + 口径标识),只有口径也对不上时才显示这三档,避免把口径差标成一堆"未减优惠/冲减"。
$notBasisMarked = "COALESCE(remark, '') NOT IN ('订单实付按卖家实收核对', '订单实付按应付/已付核对')";
@ -369,32 +364,6 @@ class Pages extends Controller
return ($payCache[$orderNo] - $income) > 0.005;
}
/**
* 该单账单里「价保扣款」合计(元),无相关行时为 0。
*
* 与 receiptDifferenceRemarkConditions() 里的价保扣款子查询同口径;按单号缓存,避免逐行查询。
*/
private static function receiptJdJiabaoRefundSum(string $orderNo): float
{
static $cache = [];
$orderNo = trim($orderNo);
if ($orderNo === '') {
return 0.0;
}
if (! array_key_exists($orderNo, $cache)) {
$row = DB::connection((string) config('upstream_mirrors.connection', 'business_mirror'))
->table('jd_daily_bill_rows')
->where('order_no', $orderNo)
->where('bill_item', 'like', '价保扣款%')
->selectRaw('ROUND(SUM(expense), 2) as s')
->first();
$cache[$orderNo] = (float) ($row->s ?? 0);
}
return $cache[$orderNo];
}
/** 单行的「差额异常备注」(与筛选条件同一套口径,页面与导出共用)。 */
/**
* 页面口径的「有效差额」SQL:口径兜底行(备注为空、但能对上实收/应付)按 0 计。
@ -482,13 +451,6 @@ class Pages extends Controller
? '差额=订单实付包含商家承担优惠和以旧换新国补'
: '差额=订单实付包含商家承担优惠';
}
// 京东「价保扣款」负差额:差额=该单账单「价保扣款」合计(价保按退款收回的性质)→「订单实付未减退款」。
if (($row->platform ?? '') === '京东账单' && $difference < -0.005) {
$jiabaoRefund = self::receiptJdJiabaoRefundSum((string) ($row->online_order_no ?? ''));
if ($jiabaoRefund > 0.005 && abs(round(abs($difference) - $jiabaoRefund, 2)) <= 0.02) {
return '订单实付未减退款';
}
}
// C 方案:口径标识行让位给口径兜底,这三条通用等式档只对"口径也对不上"的行生效。
$basisMarked = in_array(
trim((string) ($row->remark ?? '')),

View File

@ -807,7 +807,7 @@ $navigation = [
'directory' => [
'icon' => 'receipt_long',
'status' => '共享镜像',
'description' => '覆盖店铺收款账户账单各平台页签(总账备注=订单收入),按「店铺 + 订单号」匹配订单侧商品金额与订单实付金额;一行 = 一个店铺的一个订单,商品金额只挂一次。「商品金额」只取主单(拆单子单不参与,整单没有主单时退化为取全部行),并排除虚拟条码(X0000x:信誉订单 / 虚拟订单)明细行;「订单实付金额」取订单级实付(拆单取主单)再减去虚拟条码行实付。「优惠金额」「冲减金额」另取总账备注=优惠收入 / 冲减收入的账单金额,不计入收入金额;「退款金额」另取总账备注=退款的账单金额,只单独列示,不计入收入金额、也不参与差额;「种菜金额」是订单号在种菜明细表或聚水潭订单标签明细(是否种菜订单=是)任意一边出现过时,该订单的收入金额(两个条件是或的关系),只是收入金额里的一部分,不参与差额;差额=(收入金额+优惠金额+冲减金额)−订单实付金额,匹配状态与差额异常备注同样按订单实付金额判定,未匹配到订单实付金额的行按订单实付金额=0 计入差额,只反映真正对不上的部分。挂不到订单行的优惠/冲减会补成一行(收入/商品留空)。「差额异常备注」只说明差额为什么产生,按顺序自动判定:订单实付未匹配(未匹配到订单实付金额,具体原因看「未匹配原因」列);订单实付取数为0(种菜)(订单实付=0 且是种菜单)、订单实付取数为0(订单实付=0 但不是种菜单)、订单实付未减冲减(订单实付=收入+优惠 → 差额=冲减金额)、订单实付未减优惠(订单实付=收入+冲减 → 差额=优惠金额)、订单实付未减优惠和冲减(订单实付=收入 → 差额=优惠+冲减)、订单实付含已退款部分(仅抖音负差额:聚水潭退款单/取消子单金额≈差额,或退款合计+账单退款净额≈实付−收入,或整单全退(退款合计≈实付)对上才标注)、订单实付未减联合营销费(仅得物负差额:联合营销费未让利尾数对上才标注)、订单实付取供货价(仅京喜正差额:差额=该单直营服务费(供货模式净收)时标注)、差额=直营补贴款(待开票结算)(仅京喜账单·出类拔萃店负差额且无退款:京东直营补贴款待开票结算时标注)、差额=直营补贴款(订单退款已冲回)(同店负差额但订单已退款:补贴款已随退款冲回)、差额=订单实付包含商家承担优惠和以旧换新国补(仅京东账单·索菲亚客厅/办公/书房/功能、亿家达全屋、朴美家居店负差额、且该单含国补(聚水潭应付−账单收入>0):差额为商家承担优惠(店铺东券/单品折扣等)与以旧换新国补之和,已用营销对账逐单核实)、差额=订单实付包含商家承担优惠(同店负差额但不含国补的单:差额即商家承担优惠)、订单实付未减退款(仅京东账单负差额:差额=该单账单「价保扣款」合计(价保按退款收回的性质)时标注);都不满足则留空。「未匹配原因」单独一列,取值:账单无单号 / 账单无单号(采销收款)/ 单号格式异常 / 订单表无此单 / 1688采销收款(非销售单)/ 订单无实付金额 / 无收款账单(「采销收款」两档专指「支付宝-1688采销专用」账户:该账户收的是采销/供货结算款,不是店铺销售单收款,不按丢单处理)。',
'description' => '覆盖店铺收款账户账单各平台页签(总账备注=订单收入),按「店铺 + 订单号」匹配订单侧商品金额与订单实付金额;一行 = 一个店铺的一个订单,商品金额只挂一次。「商品金额」只取主单(拆单子单不参与,整单没有主单时退化为取全部行),并排除虚拟条码(X0000x:信誉订单 / 虚拟订单)明细行;「订单实付金额」取订单级实付(拆单取主单)再减去虚拟条码行实付。「优惠金额」「冲减金额」另取总账备注=优惠收入 / 冲减收入的账单金额,不计入收入金额;「退款金额」另取总账备注=退款的账单金额,只单独列示,不计入收入金额、也不参与差额;「种菜金额」是订单号在种菜明细表或聚水潭订单标签明细(是否种菜订单=是)任意一边出现过时,该订单的收入金额(两个条件是或的关系),只是收入金额里的一部分,不参与差额;差额=(收入金额+优惠金额+冲减金额)−订单实付金额,匹配状态与差额异常备注同样按订单实付金额判定,未匹配到订单实付金额的行按订单实付金额=0 计入差额,只反映真正对不上的部分。挂不到订单行的优惠/冲减会补成一行(收入/商品留空)。「差额异常备注」只说明差额为什么产生,按顺序自动判定:订单实付未匹配(未匹配到订单实付金额,具体原因看「未匹配原因」列);订单实付取数为0(种菜)(订单实付=0 且是种菜单)、订单实付取数为0(订单实付=0 但不是种菜单)、订单实付未减冲减(订单实付=收入+优惠 → 差额=冲减金额)、订单实付未减优惠(订单实付=收入+冲减 → 差额=优惠金额)、订单实付未减优惠和冲减(订单实付=收入 → 差额=优惠+冲减)、订单实付含已退款部分(仅抖音负差额:聚水潭退款单/取消子单金额≈差额,或退款合计+账单退款净额≈实付−收入,或整单全退(退款合计≈实付)对上才标注)、订单实付未减联合营销费(仅得物负差额:联合营销费未让利尾数对上才标注)、订单实付取供货价(仅京喜正差额:差额=该单直营服务费(供货模式净收)时标注)、差额=直营补贴款(待开票结算)(仅京喜账单·出类拔萃店负差额且无退款:京东直营补贴款待开票结算时标注)、差额=直营补贴款(订单退款已冲回)(同店负差额但订单已退款:补贴款已随退款冲回)、差额=订单实付包含商家承担优惠和以旧换新国补(仅京东账单·索菲亚客厅/办公/书房/功能、亿家达全屋、朴美家居店负差额、且该单含国补(聚水潭应付−账单收入>0):差额为商家承担优惠(店铺东券/单品折扣等)与以旧换新国补之和,已用营销对账逐单核实)、差额=订单实付包含商家承担优惠(同店负差额但不含国补的单:差额即商家承担优惠);都不满足则留空。「未匹配原因」单独一列,取值:账单无单号 / 账单无单号(采销收款)/ 单号格式异常 / 订单表无此单 / 1688采销收款(非销售单)/ 订单无实付金额 / 无收款账单(「采销收款」两档专指「支付宝-1688采销专用」账户:该账户收的是采销/供货结算款,不是店铺销售单收款,不按丢单处理)。',
'empty' => '店铺收款匹配订单明细尚未同步,请先执行 store-receipt:order-match:sync。',
'fields' => [
['name' => 'platform', 'label' => '平台'],