快递应付 → 快递报价 下新增「快递入驻」页:生成入驻二维码发给快递方,
对方免登录在手机上填写主体、联系人、e签宝签署人、结算账户、报价并上传资质,
内部对接人初审、管理员财务复审后生成首版报价,并自动生成报价确认单 PDF
推送到快递填写的 e签宝账号,签署归档后开通。
- 新增三张表 business_courier_onboardings / _files / _events(纯新增,不改旧表)
- 免登录填报页 /onboarding/courier/{token}:40 位随机 token,可暂存、提交、退回后补件,
链接有效期可延长、可作废;银行账号加密存储;附件存 uploads 盘
- 新增 COURIER_ONBOARDING_PUBLIC_URL 配置二维码里的站点地址(留空用当前访问地址)
- 内置纯 PHP 二维码生成(App\Support\QrCode,SVG 输出,无新增依赖)
- 生成二维码时必须定好系统快递名称(唯一,快递方不可见);财务复审沿用该名称,快递所填报价写成报价管理的 CourierQuoteVersion,
复用 CourierQuoteSignatureService 生成报价确认单并推送 e签宝(失败可重推/同步状态);初审人默认不能复审(COURIER_ONBOARDING_ALLOW_SAME_REVIEWER=true 可在测试环境放开)
- 支持公司 / 个人两种入驻:个人填姓名+身份证号(加密)、传身份证和银行卡,报价确认单按个人身份在 e签宝签署
- 扫码先选入驻方式;证件改为 营业执照 / 法人身份证正反面 / 银行卡正反面 各一张(个人营业执照选填),手机端上传前自动压缩,超限回到填报页提示
- 报价支持 4 种计费方式(面单+费率 / 首重+续重 / 按重量段一口价 / 小重量一口价+超出另算,费率可分段)+「其他」上传报价表;附加规则:计泡、起算重量、取整、每票加收(CourierQuoteStructure)
- 不再要求上传盖章报价单,至少填写一行在线报价
- 开通:报价确认单签署归档、或匹配到已签署协议、或填写线下签署说明
- 生成二维码前必填「快递公司代码」(自动大写、不可重复),入驻信息按代码对齐快递资料
- 公司入驻对公(营业执照主体)+ 对私(法定代表人)两个打款账户必填并自动核对;个人入驻对私必填、对公选填
- 变价:报价管理里后台改价 → 审核 → 自动推送快递 e签宝 → 回签;回签单导出 xlsx/zip;误发版本可作废
- 短期(临时)变价:变价单/报价版本加选填「结束日期」(end_date);按日期取价,期间用临时价,到期次日自动恢复原长期报价,
不用重签;报价管理显示 生效中(临时)/ 暂停中 / 已到期,确认单写明执行期间和到期后恢复的版本,审核提醒期间重叠
- 快递资料分四类:快递资料 / 网点 / 打款信息 / 操作日志,支持查询、导出、重置、编辑;
财务系统入驻的快递直接作为快递资料行,合同起止取协议签署里已签署的合作合同;
点开一行在下方看该快递的网点 / 打款信息(完整账号)/ 操作日志
- 编辑存财务系统覆盖值(business_courier_profiles,不回写工作平台),改动记操作日志(business_courier_profile_events)
- 打款信息新增 / 变更(business_courier_payment_accounts,账号加密)保存后跳到协议签署,自动预填收款账户证明 / 收款账户变更,
按签署状态显示 待推送协议 / 签署中 / 已生效;入口在快递资料明细和「打款信息」页签(表格每个账户可直接「变更」)
- ERP 开通:入驻开通后标「待 ERP 开通」,可手动补录(钉钉「新建快递」流程同步待接入)
- 新增 CourierOnboardingWorkflowTest(8 个用例),更新快递报价目录顺序断言
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019gzfsnV3fJ89CoUy1D9V9g
1038 lines
62 KiB
PHP
1038 lines
62 KiB
PHP
<?php
|
||
|
||
$navigation = [
|
||
[
|
||
'slug' => 'company-management',
|
||
'title' => '公司管理',
|
||
'icon' => 'business',
|
||
'pages' => [
|
||
[
|
||
'slug' => 'subject-operating-report',
|
||
'title' => '主体维度经营报表',
|
||
'directory' => [
|
||
'icon' => 'query_stats',
|
||
'status' => '收入汇总',
|
||
'description' => '按主体生效、失效日期归属账单收入;当前页面一行一个主体,收入来自 SQLite bills.income。',
|
||
'empty' => '经营报表尚未同步。完成店铺主体和销量镜像接入后,这里会显示可追溯的主体数据。',
|
||
'fields' => [
|
||
['name' => 'city', 'label' => '市'],
|
||
['name' => 'entity', 'label' => '主体'],
|
||
['name' => 'company_type', 'label' => '公司类型'],
|
||
['name' => 'rolling_12m_income', 'label' => '最近12个月累计收入', 'kind' => 'number'],
|
||
...array_map(static fn (int $month): array => ['name' => sprintf('income_%02d', $month), 'label' => $month . '月收入', 'kind' => 'number'], range(1, 12)),
|
||
['name' => 'can_change_entity', 'label' => '能否变更主体'],
|
||
['name' => 'plan', 'label' => '规划'],
|
||
['name' => 'new_entity', 'label' => '新主体(变更流程同步新主体)'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'company-cost-arrangement',
|
||
'title' => '公司成本安排',
|
||
'directory' => [
|
||
'icon' => 'account_balance_wallet',
|
||
'status' => '报表待定义',
|
||
'description' => '按公司主体查看当月收入、成本缺口及成本费用安排。',
|
||
'empty' => '公司成本安排尚未同步数据。',
|
||
'fields' => [
|
||
['name' => 'company', 'label' => '公司'],
|
||
['name' => 'company_type', 'label' => '公司类型'],
|
||
['name' => 'invoice_type', 'label' => '发票类型'],
|
||
['name' => 'current_month_income_forecast', 'label' => '当月收入预测', 'kind' => 'number'],
|
||
['name' => 'historical_cost_gap', 'label' => '往期成本缺口', 'kind' => 'number'],
|
||
['name' => 'supplier_cost_arrangement', 'label' => '供应商成本安排', 'kind' => 'number'],
|
||
['name' => 'courier_cost_arrangement', 'label' => '快递成本安排', 'kind' => 'number'],
|
||
['name' => 'current_month_tax_forecast', 'label' => '当月税金预测', 'kind' => 'number'],
|
||
['name' => 'labor_cost_forecast', 'label' => '人工成本预测', 'kind' => 'number'],
|
||
['name' => 'other_expense_forecast', 'label' => '其他费用预测', 'kind' => 'number'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'tax-forecast',
|
||
'title' => '税金预测表',
|
||
'directory' => [
|
||
'icon' => 'calculate',
|
||
'status' => '字段已定义',
|
||
'index_label' => '序号',
|
||
'description' => '按公司主体预测当月税金:先按公司税务类型、工商类型和征收方式确定口径,再计算增值税及附加、印花税和所得税;取数公式见 docs/税金预测表需求说明.md。',
|
||
'empty' => '税金预测表尚未接入取数:工商类型、征收方式(查账征收/核定征收)确认并补齐数据来源后开始计算。',
|
||
'fields' => [
|
||
['name' => 'company_name', 'label' => '公司名称'],
|
||
['name' => 'taxpayer_type', 'label' => '公司税务类型'],
|
||
['name' => 'business_registration_type', 'label' => '工商类型'],
|
||
['name' => 'collection_method', 'label' => '征收方式'],
|
||
['name' => 'assessed_income_rate', 'label' => '核定应税所得率(%)', 'kind' => 'number'],
|
||
['name' => 'forecast_month', 'label' => '预测月份'],
|
||
['name' => 'revenue_incl_tax', 'label' => '当月含税收入预测', 'kind' => 'number'],
|
||
['name' => 'revenue_excl_tax', 'label' => '当月不含税收入', 'kind' => 'number'],
|
||
['name' => 'quarter_sales_excl_tax', 'label' => '季度累计销售额(不含税)', 'kind' => 'number'],
|
||
['name' => 'cost_forecast', 'label' => '当月成本费用预测', 'kind' => 'number'],
|
||
['name' => 'taxable_income', 'label' => '预计应纳税所得额', 'kind' => 'number'],
|
||
['name' => 'vat_rate', 'label' => '增值税征收率/税率'],
|
||
['name' => 'vat_payable', 'label' => '预计增值税', 'kind' => 'number'],
|
||
['name' => 'urban_maintenance_tax', 'label' => '城建税', 'kind' => 'number'],
|
||
['name' => 'education_surcharge', 'label' => '教育费附加', 'kind' => 'number'],
|
||
['name' => 'local_education_surcharge', 'label' => '地方教育附加', 'kind' => 'number'],
|
||
['name' => 'stamp_duty', 'label' => '印花税', 'kind' => 'number'],
|
||
['name' => 'income_tax', 'label' => '企业所得税/经营所得个税', 'kind' => 'number'],
|
||
['name' => 'total_tax', 'label' => '税金合计', 'kind' => 'number'],
|
||
['name' => 'tax_burden_rate', 'label' => '综合税负率(%)', 'kind' => 'number'],
|
||
['name' => 'notes', 'label' => '备注'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'basic-information',
|
||
'title' => '公司基础信息',
|
||
'directory' => [
|
||
'icon' => 'business',
|
||
'status' => '既有只读上游',
|
||
'description' => '优先读取共享业务镜像中的公司资料;未匹配的城市等字段保留为空。',
|
||
'empty' => '尚未读取到公司基础资料。请检查共享镜像或上游同步状态。',
|
||
'fields' => [
|
||
['name' => 'unified_social_credit_code', 'label' => '统一社会信用代码'],
|
||
['name' => 'company_name', 'label' => '公司名称'],
|
||
['name' => 'taxpayer_type', 'label' => '纳税人类型', 'source' => 'taxpayer_category'],
|
||
['name' => 'company_status', 'label' => '公司状态'],
|
||
['name' => 'subscribed_capital', 'label' => '认缴注册资本(万元)', 'kind' => 'number'],
|
||
['name' => 'registered_at', 'label' => '注册时间', 'kind' => 'date', 'source' => 'establishment_date'],
|
||
['name' => 'legal_representative', 'label' => '法人'],
|
||
['name' => 'shareholders', 'label' => '股东'],
|
||
['name' => 'supervisor', 'label' => '监事'],
|
||
['name' => 'billing_officer', 'label' => '开票员', 'source' => 'financial_officer'],
|
||
['name' => 'city', 'label' => '城市'],
|
||
['name' => 'registered_address', 'label' => '注册地址'],
|
||
['name' => 'business_scope', 'label' => '经营范围'],
|
||
['name' => 'basic_deposit_account', 'label' => '基本存款账户信息', 'source' => 'basic_deposit_account_number', 'kind' => 'secret'],
|
||
['name' => 'subscribed_at', 'label' => '认缴时间'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'personnel-inventory',
|
||
'title' => '人员盘点表',
|
||
'directory' => [
|
||
'icon' => 'group',
|
||
'status' => '尚未同步',
|
||
'description' => '固定人员、任职和公司承载量盘点字段;身份证、税务账号和密码只保留字段契约,不在空页面填充。',
|
||
'empty' => '人员盘点数据尚未同步。接入人员和任职关系后,这里会显示盘点结果。',
|
||
'fields' => [
|
||
['name' => 'person_name', 'label' => '人员名称'],
|
||
['name' => 'alias', 'label' => '花名'],
|
||
['name' => 'position', 'label' => '职位'],
|
||
['name' => 'tag', 'label' => '标签'],
|
||
['name' => 'tax_account', 'label' => '税务局账号'],
|
||
['name' => 'tax_password', 'label' => '税务局密码', 'kind' => 'secret'],
|
||
['name' => 'department', 'label' => '部门'],
|
||
['name' => 'department_manager', 'label' => '部门负责人'],
|
||
['name' => 'id_number', 'label' => '身份证号码', 'kind' => 'secret'],
|
||
['name' => 'verified_mobile', 'label' => '实名手机号', 'kind' => 'secret'],
|
||
['name' => 'sim_card_keeper', 'label' => '电话卡保管人'],
|
||
['name' => 'id_address', 'label' => '身份证地址', 'kind' => 'secret'],
|
||
['name' => 'company_type', 'label' => '公司类型'],
|
||
['name' => 'total_company_count', 'label' => '合计担任公司数量', 'kind' => 'number'],
|
||
['name' => 'retained_company_count', 'label' => '保留担任公司数量', 'kind' => 'number'],
|
||
['name' => 'available_company_count', 'label' => '可担任公司数量', 'kind' => 'number'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'company-progress',
|
||
'title' => '公司进度表',
|
||
'directory' => [
|
||
'icon' => 'timeline',
|
||
'status' => '字段待定义',
|
||
'description' => 'Excel 目录包含该页面,但未提供对应子表或表头。当前只建立页面位置,不猜测公司流程字段。',
|
||
'empty' => '公司进度表字段尚未定义,补充子表表头后再接入流程数据。',
|
||
'fields' => [],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'trademark-management',
|
||
'title' => '商标管理',
|
||
'icon' => 'verified',
|
||
'pages' => [
|
||
[
|
||
'slug' => 'information',
|
||
'title' => '商标基础信息',
|
||
'directory' => [
|
||
'icon' => 'verified',
|
||
'status' => '既有只读上游',
|
||
'description' => '优先读取共享业务镜像中的商标权属、有效期和保管资料。',
|
||
'empty' => '尚未读取到商标基础资料。请检查共享镜像或上游同步状态。',
|
||
'fields' => [
|
||
['name' => 'trademark_name', 'label' => '商标名称'],
|
||
['name' => 'trademark_number', 'label' => '商标号'],
|
||
['name' => 'trademark_status', 'label' => '商标状态'],
|
||
['name' => 'registration_date', 'label' => '注册时间', 'kind' => 'date'],
|
||
['name' => 'expiry_date', 'label' => '有效期', 'kind' => 'date'],
|
||
['name' => 'international_classification', 'label' => '国际分类', 'source' => 'trademark_type'],
|
||
['name' => 'approved_goods', 'label' => '核定使用商品'],
|
||
['name' => 'final_holder', 'label' => '最终持有人'],
|
||
['name' => 'registered_address', 'label' => '注册地址'],
|
||
['name' => 'custody_department', 'label' => '保管部门'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'trademark-progress',
|
||
'title' => '商标进度表',
|
||
'directory' => [
|
||
'icon' => 'timeline',
|
||
'status' => '尚未同步',
|
||
'description' => '按 Excel 固定注册、变更、续展等业务的办理进度字段;流程数据接入前不显示伪造记录。',
|
||
'empty' => '商标进度数据尚未同步。',
|
||
'fields' => [
|
||
['name' => 'trademark_name', 'label' => '商标名称'],
|
||
['name' => 'trademark_number', 'label' => '商标号'],
|
||
['name' => 'business', 'label' => '业务'],
|
||
['name' => 'progress', 'label' => '进度'],
|
||
['name' => 'completed', 'label' => '是否完成'],
|
||
['name' => 'completed_at', 'label' => '完成时间', 'kind' => 'date'],
|
||
['name' => 'handler', 'label' => '办理人'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'rules-information',
|
||
'title' => '规则信息',
|
||
'directory' => [
|
||
'icon' => 'rule',
|
||
'status' => '规则待定义',
|
||
'description' => '规则信息分组,包含主体商标规则和店铺变更规则。',
|
||
'empty' => '请选择下方具体规则页面。',
|
||
'fields' => [],
|
||
],
|
||
'children' => [
|
||
[
|
||
'slug' => 'subject-trademark-rules',
|
||
'title' => '主体商标规则',
|
||
'directory' => [
|
||
'icon' => 'rule',
|
||
'status' => '规则待定义',
|
||
'description' => '主体商标规则页面位置已建立,待补充正式规则字段和业务数据。',
|
||
'empty' => '主体商标规则尚未定义或同步。',
|
||
'fields' => [],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'store-change-rules',
|
||
'title' => '店铺变更规则',
|
||
'directory' => [
|
||
'icon' => 'rule',
|
||
'status' => '规则待定义',
|
||
'description' => '店铺变更规则页面位置已建立,待补充正式规则字段和业务数据。',
|
||
'empty' => '店铺变更规则尚未定义或同步。',
|
||
'fields' => [],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'store-report-data-logic',
|
||
'title' => '店铺维度报表逻辑配置',
|
||
],
|
||
[
|
||
'slug' => 'tax-forecast-data-logic',
|
||
'title' => '税金预测表逻辑配置',
|
||
],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'store-management',
|
||
'title' => '店铺管理',
|
||
'icon' => 'storefront',
|
||
'pages' => [
|
||
[
|
||
'slug' => 'store-report',
|
||
'title' => '店铺维度报表',
|
||
'directory' => [
|
||
'icon' => 'query_stats',
|
||
'status' => '共享镜像',
|
||
'description' => '店铺资料、主体生效区间和平台账单统一读取团队共享业务镜像;销量按账单收入汇总。',
|
||
'empty' => '店铺维度报表尚未完成共享数据导入。',
|
||
'fields' => [
|
||
['name' => 'erp_store_name', 'label' => 'ERP系统店铺名称'],
|
||
['name' => 'store_name', 'label' => '店铺名称'],
|
||
['name' => 'store_id', 'label' => '店铺ID(唯一值)'],
|
||
['name' => 'profit_center', 'label' => '店铺所属利润中心'],
|
||
['name' => 'store_manager', 'label' => '店铺负责人'],
|
||
['name' => 'department_manager', 'label' => '部门负责人'],
|
||
['name' => 'opened_at', 'label' => '开店时间', 'kind' => 'date'],
|
||
['name' => 'status', 'label' => '状态'],
|
||
['name' => 'can_change', 'label' => '能否变更'],
|
||
['name' => 'entity', 'label' => '主体'],
|
||
['name' => 'company_type', 'label' => '公司类型'],
|
||
['name' => 'effective_at', 'label' => '生效时间', 'kind' => 'date'],
|
||
['name' => 'invalid_at', 'label' => '失效时间', 'kind' => 'date'],
|
||
['name' => 'period_sales', 'label' => '期间销量', 'kind' => 'number'],
|
||
...array_map(static fn (int $month): array => [
|
||
'name' => sprintf('sales_%02d', $month),
|
||
'label' => sprintf('%d月销量', $month),
|
||
'kind' => 'number',
|
||
], range(1, 12)),
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'internal-flow-report',
|
||
'title' => '内部流转报表',
|
||
'directory' => [
|
||
'icon' => 'swap_horiz',
|
||
'status' => '共享镜像',
|
||
'description' => '按《一般纳税人内部流转》工作簿导入:一行一个抬头,展示预计销量、开票、所需进项成本、收票来源与剩余缺口。',
|
||
'empty' => '内部流转数据尚未导入。导入工作簿后这里会显示明细。',
|
||
'fields' => [
|
||
['name' => 'company_name', 'label' => '抬头'],
|
||
['name' => 'tag', 'label' => '标签'],
|
||
['name' => 'projected_sales', 'label' => '预计9月销量', 'kind' => 'number'],
|
||
['name' => 'invoiced_to_buyer', 'label' => '开票-给买家开票', 'kind' => 'number'],
|
||
['name' => 'internal_invoiced', 'label' => '开票-内部开票', 'kind' => 'number'],
|
||
['name' => 'required_input_cost', 'label' => '所需进项成本', 'kind' => 'number'],
|
||
['name' => 'receipt_from_supplier', 'label' => '收票-供应商', 'kind' => 'number'],
|
||
['name' => 'receipt_from_suofeiya', 'label' => '收票-索菲亚', 'kind' => 'number'],
|
||
['name' => 'receipt_from_gujia', 'label' => '收票-顾家', 'kind' => 'number'],
|
||
['name' => 'internal_transfer_1', 'label' => '收票-内部流转(来源)1', 'kind' => 'number'],
|
||
['name' => 'internal_transfer_2', 'label' => '收票-内部流转(来源)2', 'kind' => 'number'],
|
||
['name' => 'internal_transfer_3', 'label' => '收票-内部流转(来源)3', 'kind' => 'number'],
|
||
['name' => 'receipt_total', 'label' => '收票-合计', 'kind' => 'number'],
|
||
['name' => 'remaining_gap', 'label' => '剩余缺口', 'kind' => 'number'],
|
||
['name' => 'invoicing_ratio', 'label' => '开票比例'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'basic-information',
|
||
'title' => '店铺基础信息',
|
||
'directory' => [
|
||
'icon' => 'storefront',
|
||
'status' => '既有只读上游',
|
||
'description' => '优先读取共享业务镜像中的店铺资料、店铺 ID 和续签时间;提现账户仅显示配置状态。',
|
||
'empty' => '尚未读取到店铺基础资料。请检查共享镜像或上游同步状态。',
|
||
'fields' => [
|
||
['name' => 'platform', 'label' => '平台'],
|
||
['name' => 'store_id', 'label' => '店铺ID'],
|
||
['name' => 'store_name', 'label' => '店铺名称', 'source' => 'erp_store_name'],
|
||
['name' => 'store_entity', 'label' => '店铺主体', 'source' => 'company_name'],
|
||
['name' => 'store_status', 'label' => '店铺状态'],
|
||
['name' => 'trademark', 'label' => '商标', 'source' => 'trademark_name'],
|
||
['name' => 'trademark_number', 'label' => '商标号'],
|
||
['name' => 'business_department', 'label' => '业务部门', 'source' => 'profit_center'],
|
||
['name' => 'store_manager', 'label' => '店铺负责人'],
|
||
['name' => 'department_manager', 'label' => '部门负责人'],
|
||
['name' => 'opened_at', 'label' => '开店时间', 'kind' => 'date'],
|
||
['name' => 'renewed_at', 'label' => '续签时间'],
|
||
['name' => 'withdrawal_account', 'label' => '提现账户', 'kind' => 'secret'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'store-accounts',
|
||
'title' => '店铺账号密码',
|
||
'directory' => [
|
||
'icon' => 'key',
|
||
'status' => '共享镜像',
|
||
'description' => '账号资料来自共享镜像。拥有本页面权限的用户可直接查看当前页密码,密码不会随表格导出。',
|
||
'empty' => '共享镜像中暂未读取到店铺账号数据,请检查账号数据同步状态。',
|
||
'fields' => [
|
||
['name' => 'store_name', 'label' => '店铺名称'],
|
||
['name' => 'operation_owner', 'label' => '店铺运营负责人'],
|
||
['name' => 'operation_department_head', 'label' => '店铺运营部门负责人'],
|
||
['name' => 'operation_director', 'label' => '店铺运营总监'],
|
||
['name' => 'profit_center', 'label' => '店铺所属利润中心'],
|
||
['name' => 'account_type', 'label' => '账号类型'],
|
||
['name' => 'account', 'label' => '账号'],
|
||
['name' => 'password_configured', 'label' => '密码', 'kind' => 'secret_status'],
|
||
['name' => 'bound_phone', 'label' => '绑定手机号'],
|
||
['name' => 'verification_contact', 'label' => '手机号验证码对接人'],
|
||
['name' => 'account_group_name', 'label' => '账号分组名称'],
|
||
['name' => 'authorization_status', 'label' => '授权状态'],
|
||
['name' => 'store_status', 'label' => '店铺状态'],
|
||
['name' => 'flow_type', 'label' => '流程类型'],
|
||
['name' => 'approval_status', 'label' => '审批状态'],
|
||
['name' => 'created_at', 'label' => '店铺创建时间', 'kind' => 'date'],
|
||
['name' => 'updated_at', 'label' => '店铺修改时间', 'kind' => 'date'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'change-progress',
|
||
'title' => '店铺变更进度表',
|
||
'directory' => [
|
||
'icon' => 'sync_alt',
|
||
'status' => '尚未同步',
|
||
'description' => '按 Excel 固定店铺主体变更的账号、接替公司、进度和办理留痕字段。',
|
||
'empty' => '店铺变更进度数据尚未同步。',
|
||
'fields' => [
|
||
['name' => 'company_name', 'label' => '公司名称'],
|
||
['name' => 'erp_store_name', 'label' => 'ERP系统店铺名称'],
|
||
['name' => 'department', 'label' => '部门'],
|
||
['name' => 'store_manager', 'label' => '店铺负责人'],
|
||
['name' => 'department_manager', 'label' => '部门负责人'],
|
||
['name' => 'account', 'label' => '账号'],
|
||
['name' => 'password', 'label' => '密码', 'kind' => 'secret'],
|
||
['name' => 'successor_company', 'label' => '接替公司'],
|
||
['name' => 'progress', 'label' => '进度'],
|
||
['name' => 'completed', 'label' => '是否完成'],
|
||
['name' => 'completed_at', 'label' => '完成时间', 'kind' => 'date'],
|
||
['name' => 'handler', 'label' => '办理人'],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'basic-data',
|
||
'title' => '基础数据',
|
||
'icon' => 'folder',
|
||
'pages' => [],
|
||
],
|
||
[
|
||
'slug' => 'product-inventory',
|
||
'title' => '商品价格管理',
|
||
'icon' => 'inventory_2',
|
||
'pages' => [
|
||
['slug' => 'normal-products', 'title' => '普通商品资料'],
|
||
['slug' => 'online-daifa-price', 'title' => '线上代发价格'],
|
||
[
|
||
'slug' => 'monthly-weighted-average-price',
|
||
'title' => '商品月加权平均单价',
|
||
'directory' => [
|
||
'icon' => 'calculate',
|
||
'status' => '共享镜像',
|
||
'description' => '商品月加权平均单价页面入口已建立;接入数据前需确认采购入库范围、金额字段和退货处理口径。',
|
||
'empty' => '商品月加权平均单价尚未同步。确认取数规则后再接入经营分析副本库数据。',
|
||
'fields' => [
|
||
['name' => 'month', 'label' => '月份', 'kind' => 'date'],
|
||
['name' => 'barcode_warehouse', 'label' => '条码+仓库'],
|
||
['name' => 'warehouse_short_name', 'label' => '仓库简称'],
|
||
['name' => 'supplier', 'label' => '供应商'],
|
||
['name' => 'product_code', 'label' => '商品编码'],
|
||
['name' => 'product_name', 'label' => '商品名称'],
|
||
['name' => 'opening_quantity', 'label' => '原始数量', 'kind' => 'number', 'group' => '期初数据'],
|
||
['name' => 'opening_unit_price', 'label' => '原始价格', 'kind' => 'number', 'group' => '期初数据'],
|
||
['name' => 'opening_original_amount', 'label' => '原始期初金额', 'kind' => 'number', 'group' => '期初数据'],
|
||
['name' => 'opening_adjusted_price', 'label' => '更改价格', 'kind' => 'number', 'group' => '期初数据'],
|
||
['name' => 'opening_amount', 'label' => '期初金额', 'kind' => 'number', 'group' => '期初数据'],
|
||
['name' => 'purchase_quantity', 'label' => '采购数量', 'kind' => 'number', 'group' => '入库数据'],
|
||
['name' => 'purchase_unit_price', 'label' => '采购单价', 'kind' => 'number', 'group' => '入库数据'],
|
||
['name' => 'purchase_amount', 'label' => '入库金额', 'kind' => 'number', 'group' => '入库数据'],
|
||
['name' => 'weighted_average_unit_price', 'label' => '加权平均单价', 'kind' => 'number'],
|
||
['name' => 'pricing_status', 'label' => '定价状态'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'inventory-report',
|
||
'title' => '进销存报表',
|
||
'directory' => [
|
||
'icon' => 'inventory',
|
||
'status' => '共享镜像',
|
||
'description' => '复用“应付款项 → 快递应付 → 三方仓进销存”的已确认流水、库存锚点和业务类型口径,按所有仓库、商品和月份汇总。',
|
||
'empty' => '进销存共享镜像尚未完成首次同步。',
|
||
'fields' => [
|
||
['name' => 'owner', 'label' => '货主'],
|
||
['name' => 'month', 'label' => '月份', 'kind' => 'date'],
|
||
['name' => 'warehouse_provider', 'label' => '仓储方'],
|
||
['name' => 'warehouse', 'label' => '仓库'],
|
||
['name' => 'warehouse_short_name', 'label' => '仓库简称'],
|
||
['name' => 'product_code', 'label' => '商品编码'],
|
||
['name' => 'category', 'label' => '分类'],
|
||
['name' => 'opening_quantity', 'label' => '期初数量', 'kind' => 'integer'],
|
||
['name' => 'closing_quantity', 'label' => '期末数量', 'kind' => 'integer'],
|
||
['name' => 'processing_in', 'label' => '加工进仓', 'kind' => 'integer'],
|
||
['name' => 'processing_out', 'label' => '加工出仓', 'kind' => 'integer'],
|
||
['name' => 'purchase_in', 'label' => '采购进仓', 'kind' => 'integer'],
|
||
['name' => 'purchase_return', 'label' => '采购退货', 'kind' => 'integer'],
|
||
['name' => 'other_in', 'label' => '其它进仓', 'kind' => 'integer'],
|
||
['name' => 'other_return', 'label' => '其它退货', 'kind' => 'integer'],
|
||
['name' => 'sales_out', 'label' => '销售出仓', 'kind' => 'integer'],
|
||
['name' => 'sales_return', 'label' => '销售退货', 'kind' => 'integer'],
|
||
['name' => 'stocktake', 'label' => '盘点', 'kind' => 'integer'],
|
||
['name' => 'transfer_out', 'label' => '调拨出', 'kind' => 'integer'],
|
||
['name' => 'transfer_in', 'label' => '调拨入', 'kind' => 'integer'],
|
||
['name' => 'opening', 'label' => '期初', 'kind' => 'integer'],
|
||
['name' => 'other_out', 'label' => '其它出库', 'kind' => 'integer'],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'fund-management',
|
||
'title' => '资金管理',
|
||
'icon' => 'account_balance_wallet',
|
||
'pages' => [
|
||
[
|
||
'slug' => 'store-receiving-accounts',
|
||
'title' => '店铺收款账户',
|
||
'tabs' => [
|
||
['slug' => 'taobao', 'title' => '淘宝', 'icon' => 'shopping_bag'],
|
||
['slug' => 'jd', 'title' => '京东', 'icon' => 'account_balance_wallet'],
|
||
['slug' => 'douyin', 'title' => '抖音小店', 'icon' => 'smart_display'],
|
||
['slug' => 'pinduoduo', 'title' => '拼多多', 'icon' => 'storefront'],
|
||
],
|
||
],
|
||
['slug' => 'bank-accounts', 'title' => '银行账户'],
|
||
['slug' => 'shared-company-accounts', 'title' => '公司公用账户'],
|
||
['slug' => 'fund-forecast', 'title' => '资金预测表'],
|
||
['slug' => 'withdrawal-management', 'title' => '提现管理'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'billing-transactions',
|
||
'title' => '账单流水数据',
|
||
'icon' => 'receipt_long',
|
||
'pages' => [
|
||
['slug' => 'bank-transactions', 'title' => '银行账户流水'],
|
||
[
|
||
'slug' => 'store-receiving-bills',
|
||
'title' => '店铺收款账户账单',
|
||
'tabs' => [
|
||
['slug' => 'taobao-alipay', 'title' => '淘系支付宝账户'],
|
||
['slug' => 'taobao-wechat', 'title' => '淘系微信账户'],
|
||
['slug' => 'pinduoduo', 'title' => '拼多多账户'],
|
||
['slug' => 'jd-wallet', 'title' => '京东网银钱包账户'],
|
||
['slug' => 'jd-transactions', 'title' => '京东账单'],
|
||
['slug' => 'jingxi', 'title' => '京喜账单'],
|
||
['slug' => 'douyin', 'title' => '抖音账户'],
|
||
['slug' => 'dewu', 'title' => '得物账户'],
|
||
['slug' => 'vipshop', 'title' => '唯品会MP账户'],
|
||
['slug' => 'vipshop-jx', 'title' => '唯品会JX账户'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'marketing-account-bills',
|
||
'title' => '店铺营销账户账单',
|
||
'tabs' => [
|
||
['slug' => 'taobao-alipay', 'title' => '淘系支付宝账户'],
|
||
['slug' => 'taobao-wechat', 'title' => '淘系微信账户'],
|
||
['slug' => 'pinduoduo', 'title' => '拼多多账户'],
|
||
['slug' => 'jd-wallet', 'title' => '京东网银钱包账户'],
|
||
['slug' => 'jd-promotion', 'title' => '京东京准通'],
|
||
['slug' => 'douyin-promotion', 'title' => '抖音千川'],
|
||
['slug' => 'dewu-promotion', 'title' => '得物推广账户'],
|
||
['slug' => 'vip-promotion', 'title' => '唯品会推广流水'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'deposit-account-bills',
|
||
'title' => '店铺保证金账户账单',
|
||
'tabs' => [
|
||
['slug' => 'taobao-alipay', 'title' => '淘系支付宝账户'],
|
||
['slug' => 'taobao-wechat', 'title' => '淘系微信账户'],
|
||
['slug' => 'pinduoduo', 'title' => '拼多多账户'],
|
||
['slug' => 'jd-wallet', 'title' => '京东网银钱包账户'],
|
||
['slug' => 'douyin', 'title' => '抖音账户'],
|
||
['slug' => 'dewu', 'title' => '得物账户'],
|
||
['slug' => 'vipshop', 'title' => '唯品会MP账户'],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'planting-data',
|
||
'title' => '种菜数据汇总',
|
||
'icon' => 'grass',
|
||
'pages' => [
|
||
['slug' => 'planting-details', 'title' => '种菜明细表'],
|
||
['slug' => 'jst-order-labels', 'title' => '聚水潭订单标签明细'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'account-balance-data',
|
||
'title' => '账单余额数据',
|
||
'icon' => 'account_balance_wallet',
|
||
'pages' => [
|
||
['slug' => 'bank-balance', 'title' => '银行账户余额'],
|
||
['slug' => 'store-receiving-balance', 'title' => '店铺收款账户余额'],
|
||
[
|
||
'slug' => 'marketing-account-balance',
|
||
'title' => '店铺营销账户余额',
|
||
'tabs' => [
|
||
['slug' => 'taobao-alipay', 'title' => '淘系账户'],
|
||
['slug' => 'taobao-wechat', 'title' => '阿里巴巴账户'],
|
||
['slug' => 'pinduoduo', 'title' => '拼多多账户'],
|
||
['slug' => 'jd-wallet', 'title' => '京东账户'],
|
||
['slug' => 'douyin', 'title' => '抖音账户'],
|
||
['slug' => 'dewu', 'title' => '得物账户'],
|
||
['slug' => 'vipshop', 'title' => '唯品会MP账户'],
|
||
],
|
||
],
|
||
['slug' => 'deposit-account-balance', 'title' => '店铺保证金账户余额'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'invoice-management',
|
||
'title' => '票务管理',
|
||
'icon' => 'request_quote',
|
||
'pages' => [
|
||
['slug' => 'automatic-invoicing', 'title' => '自动开票'],
|
||
['slug' => 'basic-information', 'title' => '发票基础信息'],
|
||
[
|
||
'slug' => 'invoice-reports',
|
||
'title' => '发票数据报表',
|
||
'tabs' => [
|
||
['slug' => 'input', 'title' => '进项报表', 'icon' => 'download'],
|
||
['slug' => 'output', 'title' => '销项报表', 'icon' => 'upload'],
|
||
],
|
||
],
|
||
['slug' => 'store-backend-invoicing', 'title' => '店铺后台开票'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'order-data',
|
||
'title' => '订单数据',
|
||
'icon' => 'receipt_long',
|
||
'pages' => [
|
||
[
|
||
'slug' => 'raw-data',
|
||
'title' => '原始数据',
|
||
'tabs' => [
|
||
['slug' => 'after-sales-expenses', 'title' => '订单售后费用明细'],
|
||
['slug' => 'promotion-expenses', 'title' => '商品推广费用明细'],
|
||
],
|
||
],
|
||
['slug' => 'bill-offset', 'title' => '账单冲减'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'refunds',
|
||
'title' => '退款数据',
|
||
'icon' => 'assignment_return',
|
||
'pages' => [
|
||
['slug' => 'jingxi-refund-data', 'title' => '京喜退款数据'],
|
||
['slug' => 'non-jingxi-refund-data', 'title' => '售后(退货退款)'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'store-receivables',
|
||
'title' => '店铺应收账款',
|
||
'icon' => 'payments',
|
||
'pages' => [
|
||
['slug' => 'actual-reconciliation', 'title' => '真实应收对账'],
|
||
['slug' => 'zhongcai-reconciliation', 'title' => '种菜应收对账'],
|
||
['slug' => 'order-receivables-report', 'title' => '订单应收报表'],
|
||
['slug' => 'deposit-reconciliation', 'title' => '保证金应收对账'],
|
||
['slug' => 'deposit-receivables-report', 'title' => '保证金应收报表'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'supplier-payables-final',
|
||
'title' => '供应商应付(终版)',
|
||
'icon' => 'local_shipping',
|
||
'pages' => [
|
||
['slug' => 'product-prices', 'title' => '商品价格'],
|
||
['slug' => 'payment-reconciliation', 'title' => '货款对账'],
|
||
['slug' => 'return-reconciliation', 'title' => '退货对账'],
|
||
['slug' => 'invoice-deductions', 'title' => '发票扣款'],
|
||
['slug' => 'board-deductions', 'title' => '板材扣款'],
|
||
['slug' => 'compensation-details', 'title' => '赔偿明细'],
|
||
['slug' => 'advance-details', 'title' => '借支明细'],
|
||
['slug' => 'sample-deductions', 'title' => '样品扣款'],
|
||
['slug' => 'other-adjustments', 'title' => '其他扣款补款'],
|
||
[
|
||
'slug' => 'unpriced-details',
|
||
'title' => '未定价明细',
|
||
'children' => [
|
||
['slug' => 'delivery-unpriced', 'title' => '送货未定价'],
|
||
['slug' => 'return-unpriced', 'title' => '退货未定价'],
|
||
],
|
||
],
|
||
['slug' => 'dropshipping-express', 'title' => '代发快递'],
|
||
['slug' => 'supplier-payables-report', 'title' => '供应商应付表'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'courier-payables-final',
|
||
'title' => '快递应付(终版)',
|
||
'icon' => 'local_shipping',
|
||
'pages' => [
|
||
['slug' => 'quote-management', 'title' => '报价管理'],
|
||
['slug' => 'courier-information', 'title' => '快递资料'],
|
||
['slug' => 'agreement-signing', 'title' => '协议签署'],
|
||
['slug' => 'freight-reconciliation', 'title' => '运费对账'],
|
||
['slug' => 'shipping-data', 'title' => '发货数据'],
|
||
['slug' => 'third-party-warehouse-storage', 'title' => '三方仓进销存'],
|
||
['slug' => 'bookkeeping-details', 'title' => '记账明细'],
|
||
['slug' => 'compensation-details', 'title' => '赔偿明细'],
|
||
['slug' => 'advance-details', 'title' => '借支明细'],
|
||
['slug' => 'other-adjustments', 'title' => '其他扣款补款'],
|
||
['slug' => 'courier-surcharge', 'title' => '附加费报价维护'],
|
||
['slug' => 'payable-cloud-warehouse-vehicle-fee', 'title' => '应付云仓车费'],
|
||
['slug' => 'courier-payables-report', 'title' => '快递应付表'],
|
||
['slug' => 'freight-difference', 'title' => '运费差'],
|
||
['slug' => 'other-surcharge-summary', 'title' => '其他附加费汇总'],
|
||
['slug' => 'return-fee', 'title' => '退件费'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'supplier-payables',
|
||
'title' => '供应商应付',
|
||
'icon' => 'local_shipping',
|
||
'pages' => [
|
||
['slug' => 'supplier-management', 'title' => '供应商管理'],
|
||
['slug' => 'product-prices', 'title' => '商品价格'],
|
||
['slug' => 'payment-reconciliation', 'title' => '货款对账'],
|
||
['slug' => 'return-reconciliation', 'title' => '退货对账'],
|
||
['slug' => 'invoice-deductions', 'title' => '发票扣款'],
|
||
['slug' => 'board-deductions', 'title' => '板材扣款'],
|
||
['slug' => 'compensation-details', 'title' => '赔偿明细'],
|
||
['slug' => 'advance-details', 'title' => '借支明细'],
|
||
['slug' => 'sample-deductions', 'title' => '样品扣款'],
|
||
['slug' => 'other-adjustments', 'title' => '其他扣款补款'],
|
||
[
|
||
'slug' => 'unpriced-details',
|
||
'title' => '未定价明细',
|
||
'children' => [
|
||
['slug' => 'delivery-unpriced', 'title' => '送货未定价'],
|
||
['slug' => 'return-unpriced', 'title' => '退货未定价'],
|
||
],
|
||
],
|
||
['slug' => 'dropshipping-express', 'title' => '代发快递'],
|
||
['slug' => 'supplier-payables-report', 'title' => '供应商应付表'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'courier-payables',
|
||
'title' => '快递应付',
|
||
'icon' => 'local_shipping',
|
||
'pages' => [
|
||
[
|
||
'slug' => 'courier-quote',
|
||
'title' => '快递报价',
|
||
'children' => [
|
||
['slug' => 'quote-management', 'title' => '报价管理'],
|
||
['slug' => 'courier-onboarding', 'title' => '快递入驻'],
|
||
['slug' => 'courier-information', 'title' => '快递资料'],
|
||
['slug' => 'agreement-signing', 'title' => '协议签署'],
|
||
[
|
||
'slug' => 'courier-surcharge',
|
||
'title' => '附加费报价维护',
|
||
'tabs' => [
|
||
['slug' => 'quotes', 'title' => '附加费报价'],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
['slug' => 'freight-reconciliation', 'title' => '运费对账'],
|
||
['slug' => 'shipping-data', 'title' => '发货数据'],
|
||
['slug' => 'return-pickup-management', 'title' => '退货取件管理'],
|
||
['slug' => 'third-party-warehouse-storage', 'title' => '三方仓进销存'],
|
||
['slug' => 'warehouse-freight', 'title' => '仓储费'],
|
||
['slug' => 'bookkeeping-details', 'title' => '记账明细'],
|
||
['slug' => 'compensation-details', 'title' => '赔偿明细'],
|
||
['slug' => 'advance-details', 'title' => '借支明细'],
|
||
['slug' => 'other-adjustments', 'title' => '其他扣款补款'],
|
||
['slug' => 'payable-cloud-warehouse-vehicle-fee', 'title' => '应付云仓车费'],
|
||
['slug' => 'courier-payables-report', 'title' => '快递应付表'],
|
||
['slug' => 'freight-difference', 'title' => '运费差'],
|
||
['slug' => 'other-surcharge-summary', 'title' => '其他附加费汇总'],
|
||
['slug' => 'return-fee', 'title' => '退件费'],
|
||
['slug' => 'courier-surcharge-settlement', 'title' => '附加费结算'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'raw-board-payables',
|
||
'title' => '原材料-素板应付',
|
||
'icon' => 'view_module',
|
||
'pages' => [
|
||
['slug' => 'board-prices', 'title' => '素板价格'],
|
||
['slug' => 'board-reconciliation', 'title' => '素板对账'],
|
||
['slug' => 'compensation-details', 'title' => '赔付明细'],
|
||
['slug' => 'board-payables-report', 'title' => '素板应付表'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'lamination-factory-payables',
|
||
'title' => '原材料-压贴厂应付',
|
||
'icon' => 'factory',
|
||
'pages' => [
|
||
['slug' => 'lamination-prices', 'title' => '压贴费价格'],
|
||
['slug' => 'finished-board-prices', 'title' => '成品板价格'],
|
||
['slug' => 'lamination-fees', 'title' => '压贴费'],
|
||
['slug' => 'finished-board-freight', 'title' => '成品板运费'],
|
||
['slug' => 'paper-stock-in', 'title' => '入库纸张'],
|
||
['slug' => 'paper-stock-out', 'title' => '出库纸张'],
|
||
['slug' => 'factory-raw-boards', 'title' => '压贴厂的素板'],
|
||
['slug' => 'raw-board-freight', 'title' => '素板运费'],
|
||
['slug' => 'invoice-tax-points', 'title' => '发票(税点)'],
|
||
['slug' => 'factory-compensation', 'title' => '赔付明细(压贴厂)'],
|
||
['slug' => 'factory-payables-details', 'title' => '压贴厂应付明细表'],
|
||
['slug' => 'factory-payables-report', 'title' => '压贴厂应付表'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'paper-materials',
|
||
'title' => '原材料-纸张',
|
||
'icon' => 'article',
|
||
'pages' => [
|
||
['slug' => 'paper-prices', 'title' => '纸张价格'],
|
||
['slug' => 'paper-details', 'title' => '纸张明细(入库纸张)'],
|
||
['slug' => 'penalty-details', 'title' => '赔付明细(违约金)'],
|
||
['slug' => 'paper-factory-payables', 'title' => '纸厂应付表'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'edge-banding-materials',
|
||
'title' => '原材料-封边条',
|
||
'icon' => 'straighten',
|
||
'pages' => [
|
||
['slug' => 'edge-banding-prices', 'title' => '封边条价格'],
|
||
['slug' => 'details', 'title' => '明细数据'],
|
||
['slug' => 'compensation', 'title' => '赔偿'],
|
||
['slug' => 'edge-banding-payables', 'title' => '封边条应付表'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'inventory-management',
|
||
'title' => '原材料-库存管理',
|
||
'icon' => 'inventory_2',
|
||
'pages' => [
|
||
['slug' => 'board-inventory-details', 'title' => '板材库存明细'],
|
||
['slug' => 'board-inventory-analysis', 'title' => '板材库存分析'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'financial-operations',
|
||
'title' => '财务经营报表',
|
||
'icon' => 'analytics',
|
||
'pages' => [
|
||
[
|
||
'slug' => 'performance-details',
|
||
'title' => '业绩明细',
|
||
'directory' => [
|
||
'icon' => 'receipt_long',
|
||
'status' => '共享镜像',
|
||
'description' => '覆盖店铺收款账户账单各平台页签(总账备注=订单收入),按「店铺 + 订单号」匹配订单侧商品金额与订单实付金额;一行 = 一个店铺的一个订单,商品金额只挂一次。「商品金额」只取主单(拆单子单不参与,整单没有主单时退化为取全部行),并排除虚拟条码(X0000x:信誉订单 / 虚拟订单)明细行;「订单实付金额」取订单级实付(拆单取主单)再减去虚拟条码行实付。「优惠金额」「冲减金额」另取总账备注=优惠收入 / 冲减收入的账单金额,不计入收入金额;「退款金额」另取总账备注=退款的账单金额,只单独列示,不计入收入金额、也不参与差额;「种菜金额」是订单号在种菜明细表或聚水潭订单标签明细(是否种菜订单=是)任意一边出现过时,该订单的收入金额(两个条件是或的关系),只是收入金额里的一部分,不参与差额;差额=(收入金额+优惠金额+冲减金额)−订单实付金额,匹配状态与差额异常备注同样按订单实付金额判定,未匹配到订单实付金额的行按订单实付金额=0 计入差额,只反映真正对不上的部分。挂不到订单行的优惠/冲减会补成一行(收入/商品留空)。「差额异常备注」只说明差额为什么产生,按顺序自动判定:订单实付未匹配(未匹配到订单实付金额,具体原因看「未匹配原因」列);订单实付取数为0(种菜)(订单实付=0 且是种菜单)、订单实付取数为0(订单实付=0 但不是种菜单)、订单实付未减冲减(订单实付=收入+优惠 → 差额=冲减金额)、订单实付未减优惠(订单实付=收入+冲减 → 差额=优惠金额)、订单实付未减优惠和冲减(订单实付=收入 → 差额=优惠+冲减)、订单实付含已退款部分(仅抖音负差额:聚水潭退款单/取消子单金额≈差额,或退款合计+账单退款净额≈实付−收入,或整单全退(退款合计≈实付)对上才标注)、订单实付未减联合营销费(仅得物负差额:联合营销费未让利尾数对上才标注)、订单实付取供货价(仅京喜正差额:差额=该单直营服务费(供货模式净收)时标注);都不满足则留空。「未匹配原因」单独一列,取值:账单无单号 / 账单无单号(采销收款)/ 单号格式异常 / 订单表无此单 / 1688采销收款(非销售单)/ 订单无实付金额 / 无收款账单(「采销收款」两档专指「支付宝-1688采销专用」账户:该账户收的是采销/供货结算款,不是店铺销售单收款,不按丢单处理)。',
|
||
'empty' => '店铺收款匹配订单明细尚未同步,请先执行 store-receipt:order-match:sync。',
|
||
'fields' => [
|
||
['name' => 'platform', 'label' => '平台'],
|
||
['name' => 'occurred_date', 'label' => '发生时间', 'kind' => 'date'],
|
||
['name' => 'store_name', 'label' => '店铺名称'],
|
||
['name' => 'online_order_no', 'label' => '线上单号'],
|
||
['name' => 'income_amount', 'label' => '收入金额', 'kind' => 'number'],
|
||
['name' => 'discount_amount', 'label' => '优惠金额', 'kind' => 'number'],
|
||
['name' => 'offset_amount', 'label' => '冲减金额', 'kind' => 'number'],
|
||
['name' => 'refund_amount', 'label' => '退款金额', 'kind' => 'number'],
|
||
['name' => 'planting_amount', 'label' => '种菜金额', 'kind' => 'number'],
|
||
['name' => 'product_amount', 'label' => '商品金额', 'kind' => 'number'],
|
||
['name' => 'paid_amount', 'label' => '订单实付金额', 'kind' => 'number'],
|
||
['name' => 'difference', 'label' => '差额', 'kind' => 'number'],
|
||
['name' => 'remark', 'label' => '差额异常备注'],
|
||
['name' => 'match_status', 'label' => '匹配状态'],
|
||
['name' => 'unmatched_reason', 'label' => '未匹配原因'],
|
||
],
|
||
],
|
||
],
|
||
['slug' => 'billing-details', 'title' => '账单明细'],
|
||
['slug' => 'product-costs', 'title' => '商品成本'],
|
||
[
|
||
'slug' => 'courier-freight',
|
||
'title' => '快递运费',
|
||
'directory' => [
|
||
'icon' => 'local_shipping',
|
||
'status' => '本地导入',
|
||
'description' => '快递方提供的成本运费明细(来源 / 成品配件 / 交易单号 / 快递单号 / 条形码 / 店铺名称 / 提供成本运费 / 运费差 / 结算运费 / 其他附加费汇总 / 退件费),由「财务系统运费整理.xlsx」等原始表导入;成品配件含「成品运费」「配件运费」两类;结算运费 = 提供成本运费 + 运费差,由页面按行计算;运费差 / 其他附加费汇总 / 退件费按交易单号分别取自「应付款项 › 快递应付 › 运费差 / 其他附加费汇总 / 退件费」的汇总数据;可按来源(月份)与交易单号查询、导出。',
|
||
'empty' => '快递运费明细尚未导入,请先执行 courier-freight:import。',
|
||
'fields' => [
|
||
['name' => 'source', 'label' => '来源'],
|
||
['name' => 'part', 'label' => '成品配件'],
|
||
['name' => 'transaction_no', 'label' => '交易单号'],
|
||
['name' => 'express_no', 'label' => '快递单号'],
|
||
['name' => 'barcode', 'label' => '条形码'],
|
||
['name' => 'shop_name', 'label' => '店铺名称'],
|
||
['name' => 'freight_amount', 'label' => '提供成本运费', 'kind' => 'number'],
|
||
['name' => 'freight_difference', 'label' => '运费差', 'kind' => 'number'],
|
||
['name' => 'settled_freight', 'label' => '结算运费', 'kind' => 'number'],
|
||
['name' => 'other_surcharge_amount', 'label' => '其他附加费汇总', 'kind' => 'number'],
|
||
['name' => 'return_fee_amount', 'label' => '退件费', 'kind' => 'number'],
|
||
],
|
||
],
|
||
],
|
||
['slug' => 'installation-details', 'title' => '安装明细'],
|
||
['slug' => 'promotion-expenses', 'title' => '推广费用'],
|
||
['slug' => 'advertising-expenses', 'title' => '广告费用'],
|
||
['slug' => 'marketing-expenses', 'title' => '营销费用'],
|
||
['slug' => 'after-sales-expenses', 'title' => '售后费用'],
|
||
['slug' => 'small-payment-work-orders', 'title' => '小额打款'],
|
||
['slug' => 'management-expenses', 'title' => '管理费用'],
|
||
['slug' => 'labor-expenses', 'title' => '人工费用'],
|
||
['slug' => 'bookkeeping-details', 'title' => '记账明细'],
|
||
['slug' => 'non-operating-expenses', 'title' => '营业外支出'],
|
||
['slug' => 'financial-analysis', 'title' => '财务经营分析表'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'financial-risk-control',
|
||
'title' => '财务经营风险管控',
|
||
'icon' => 'security',
|
||
'pages' => [
|
||
['slug' => 'store-violation-alert', 'title' => '店铺违规信息预警'],
|
||
['slug' => 'preview-statistics', 'title' => '预览统计'],
|
||
[
|
||
'slug' => 'process-statistics',
|
||
'title' => '流程统计',
|
||
'directory' => [
|
||
'icon' => 'timeline',
|
||
'status' => '共享镜像',
|
||
'description' => '店铺申请流程(开店 / 变更 / 关店)明细,数据来自共享业务镜像,只读展示。',
|
||
'empty' => '共享镜像中暂未读取到店铺申请流程数据,请检查镜像同步状态。',
|
||
'fields' => [
|
||
['name' => 'flow_id', 'label' => '单据编号'],
|
||
['name' => 'flow_type', 'label' => '流程类型'],
|
||
['name' => 'approval_status', 'label' => '审批状态'],
|
||
['name' => 'current_approver', 'label' => '当前审批人'],
|
||
['name' => 'shop_name', 'label' => '店铺名称'],
|
||
['name' => 'platform', 'label' => '平台'],
|
||
['name' => 'shop_head', 'label' => '店铺运营负责人'],
|
||
['name' => 'customer_manager', 'label' => '店铺客服负责人'],
|
||
['name' => 'responsible_department', 'label' => '利润中心'],
|
||
['name' => 'erp_shop_name', 'label' => 'ERP店铺名称'],
|
||
['name' => 'apply_user', 'label' => '申请人'],
|
||
['name' => 'apply_time', 'label' => '申请日期', 'kind' => 'date'],
|
||
['name' => 'trademark_number', 'label' => '商标号'],
|
||
['name' => 'change_reason', 'label' => '变更原因'],
|
||
['name' => 'close_reason', 'label' => '关店原因'],
|
||
['name' => 'expected_closing_time', 'label' => '预计关店时间', 'kind' => 'date'],
|
||
['name' => 'refund_type', 'label' => '退回类型'],
|
||
['name' => 'refund_amount', 'label' => '退回金额', 'kind' => 'number'],
|
||
['name' => 'change_successful', 'label' => '是否完成', 'kind' => 'boolean'],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'financial-sw',
|
||
'title' => '财务SW报表',
|
||
'icon' => 'query_stats',
|
||
'pages' => [
|
||
['slug' => 'planning', 'title' => '财务SW规划表'],
|
||
['slug' => 'actual-statistics', 'title' => '实际SW统计表'],
|
||
],
|
||
],
|
||
// 注意:新分组要放在 financial-sw 之后。
|
||
// NavigationTest 断言 financial-risk-control 的下一个分组必须是 financial-sw,
|
||
// 插在它俩之间会让既有测试失败(等于改动了别人的页面顺序)。
|
||
[
|
||
'slug' => 'financial-rules',
|
||
'title' => '财务规则',
|
||
'icon' => 'rule',
|
||
'pages' => [
|
||
['slug' => 'account-mapping', 'title' => '科目映射表'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'data-monitoring',
|
||
'title' => '数据监控',
|
||
'icon' => 'analytics',
|
||
'pages' => [
|
||
['slug' => 'business-process-statistics', 'title' => '业务流程统计表'],
|
||
['slug' => 'payment-process-statistics', 'title' => '付款流程统计表'],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'other',
|
||
'title' => '其他',
|
||
'icon' => 'more_horiz',
|
||
'pages' => [
|
||
[
|
||
'slug' => 'todos',
|
||
'title' => '待办事项',
|
||
'directory' => [
|
||
'icon' => 'task_alt',
|
||
'status' => '尚未同步',
|
||
'description' => '预警、审批、定时任务和人工创建事项共用一套待办字段,形成责任分派与处理留痕。',
|
||
'empty' => '待办事项尚未同步。完成任务来源和处理流程接入后,这里会显示待办记录。',
|
||
'fields' => [
|
||
['name' => 'todo_number', 'label' => '待办编号'],
|
||
['name' => 'source_type', 'label' => '来源类型'],
|
||
['name' => 'business_type', 'label' => '业务类型'],
|
||
['name' => 'related_object', 'label' => '关联店铺/主体'],
|
||
['name' => 'task_content', 'label' => '任务内容'],
|
||
['name' => 'owner', 'label' => '责任人'],
|
||
['name' => 'collaborator', 'label' => '协同人'],
|
||
['name' => 'due_at', 'label' => '截止日期', 'kind' => 'date'],
|
||
['name' => 'priority', 'label' => '优先级'],
|
||
['name' => 'current_node', 'label' => '当前节点'],
|
||
['name' => 'result', 'label' => '处理结果'],
|
||
['name' => 'attachment', 'label' => '附件'],
|
||
['name' => 'overdue', 'label' => '是否逾期'],
|
||
['name' => 'closed_by', 'label' => '关闭人'],
|
||
['name' => 'closed_at', 'label' => '关闭日期', 'kind' => 'date'],
|
||
],
|
||
],
|
||
],
|
||
[
|
||
'slug' => 'warnings',
|
||
'title' => '预警页面',
|
||
'directory' => [
|
||
'icon' => 'warning',
|
||
'status' => '尚未同步',
|
||
'description' => '集中展示销量、税务、主体、人员、商标和续签风险,并可关联待办编号追踪处理结果。',
|
||
'empty' => '预警数据尚未同步。完成规则引擎和预警来源接入后,这里会显示风险记录。',
|
||
'fields' => [
|
||
['name' => 'warning_number', 'label' => '预警编号'],
|
||
['name' => 'warning_type', 'label' => '预警类型'],
|
||
['name' => 'risk_level', 'label' => '风险等级'],
|
||
['name' => 'related_object', 'label' => '关联对象'],
|
||
['name' => 'risk_description', 'label' => '风险描述'],
|
||
['name' => 'impact_amount', 'label' => '影响金额', 'kind' => 'number'],
|
||
['name' => 'trigger_rule', 'label' => '触发规则'],
|
||
['name' => 'triggered_at', 'label' => '触发时间', 'kind' => 'date'],
|
||
['name' => 'owner', 'label' => '责任人'],
|
||
['name' => 'collaborator', 'label' => '协同人'],
|
||
['name' => 'due_at', 'label' => '截止时间', 'kind' => 'date'],
|
||
['name' => 'todo_number', 'label' => '待办编号'],
|
||
['name' => 'status', 'label' => '处理状态'],
|
||
['name' => 'evidence', 'label' => '处理证据'],
|
||
['name' => 'closed_by_date', 'label' => '关闭人/日期'],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
],
|
||
];
|
||
|
||
// Keep the requested finance-data sections together while preserving every other section's order.
|
||
$requestedSectionOrder = [
|
||
'basic-data',
|
||
'invoice-management',
|
||
'fund-management',
|
||
'order-data',
|
||
'refunds',
|
||
'billing-transactions',
|
||
'planting-data',
|
||
'account-balance-data',
|
||
'product-inventory',
|
||
];
|
||
$requestedSections = [];
|
||
$otherSections = [];
|
||
$insertAt = null;
|
||
|
||
foreach ($navigation as $section) {
|
||
if (in_array($section['slug'], $requestedSectionOrder, true)) {
|
||
if ($insertAt === null) {
|
||
$insertAt = count($otherSections);
|
||
}
|
||
$requestedSections[$section['slug']] = $section;
|
||
continue;
|
||
}
|
||
|
||
$otherSections[] = $section;
|
||
}
|
||
|
||
$orderedRequestedSections = array_values(array_filter(
|
||
array_map(static fn (string $slug): ?array => $requestedSections[$slug] ?? null, $requestedSectionOrder)
|
||
));
|
||
|
||
return array_values(array_merge(
|
||
array_slice($otherSections, 0, $insertAt ?? count($otherSections)),
|
||
$orderedRequestedSections,
|
||
array_slice($otherSections, $insertAt ?? count($otherSections))
|
||
));
|