结算模块设计
结算模块表结构
复制代码
结算模块核心表(24张)
├── 应付款管理(4张)
│ ├── 应付款表 (finance_accounts_payable) # 核心负债记录
│ ├── 应付暂估表 (finance_accrued_payable) # 已收货未开票
│ ├── 应付暂估调整表 (finance_accrued_adjustment) # 暂估差异调整
│ └── 应付对账表 (finance_payable_reconciliation) # 供应商账务核对
├── 付款计划管理(7张)
│ ├── 付款条件模板表 (finance_payment_term_template) # 标准付款条件
│ ├── 供应商付款条件表 (finance_vendor_payment_terms) # 供应商特定条件
│ ├── 合同付款条款表 (finance_contract_payment_terms) # 合同特殊条款
│ ├── 付款计划主表 (finance_payment_schedule) # 主计划
│ ├── 付款计划明细表 (finance_payment_schedule_detail) # 计划明细
│ ├── 付款计划调整表 (finance_payment_schedule_adjustment) # 调整记录
│ └── 付款计划规则表 (finance_payment_rule_engine) # 自动化规则
├── 付款执行管理(10张)
│ ├── 付款指令表 (finance_payment_instruction) # 付款指令
│ ├── 付款批次表 (finance_payment_batch) # 批量处理
│ ├── 银行接口日志表 (finance_bank_interface_log) # 银行交互记录
│ ├── 银行交易明细表 (finance_bank_transaction) # 银行流水
│ ├── 支票管理表 (finance_check_management) # 支票管理
│ ├── 承兑汇票主表 (finance_bill_of_exchange) # 汇票信息
│ ├── 承兑汇票执行表 (finance_bill_execution) # 汇票流转记录
│ ├── 付款异常处理表 (finance_payment_exception) # 异常管理
│ ├── 银行对账表 (finance_bank_reconciliation) # 银行对账
│ └── 付款执行审计表 (finance_payment_audit) # 审计追踪
├── 账务处理 (2张)
│ ├── 会计分录表 (finance_gl_entry) # 会计凭证记录
│ └── 科目映射表 (finance_account_mapping) # 业务科目映射
└── 辅助与配置表(1张)
└── 供应商账龄分析表 (finance_vendor_aging_analysis) # 分析报表
完整业务流程
复制代码
采购申请 → 询价报价 → 比价决策 → 生成订单 → 收货入库
↓(如有预付款)
预付款申请 → 预付款执行
↓
应付暂估(已收货未开票)
↓
发票验证(收到供应商发票)
↓
暂估冲销(冲销暂估,生成正式应付款)
↓(如有折扣)
供应商折扣处理
↓
应付款生成(记录正式负债)
↓(如有质保金)
质保金分离处理
↓
付款计划(根据条件制定付款计划)
↓
付款审批(多级审批流程)
↓
付款指令生成(将计划转为可执行指令)
↓
付款批次处理(批量优化处理)
↓
付款执行(银行转账/支票/汇票/跨境)
↓
银行对账(核对银行流水)
↓
账务处理(生成会计凭证)
↓
供应商应付对账(定期与供应商核对)
↓(如需)
供应链金融处理
↓
账龄分析与风险管理
关键表关系
sql
复制代码
-- 核心表关系
-- 一张发票对应一笔应付款(一对一)
ALTER TABLE finance_accounts_payable
ADD CONSTRAINT fk_payable_invoice
FOREIGN KEY (invoice_id) REFERENCES finance_purchase_invoice(id);
-- 一笔应付款可对应多个付款计划(一对多)
ALTER TABLE finance_payment_schedule
ADD CONSTRAINT fk_schedule_payable
FOREIGN KEY (payable_id) REFERENCES finance_accounts_payable(id);
-- 一个付款计划可生成多个付款指令(一对多)
ALTER TABLE finance_payment_instruction
ADD CONSTRAINT fk_instruction_schedule
FOREIGN KEY (schedule_id) REFERENCES finance_payment_schedule(id);
-- 一个付款批次包含多个付款指令(一对多)
ALTER TABLE finance_payment_instruction
ADD CONSTRAINT fk_instruction_batch
FOREIGN KEY (batch_id) REFERENCES finance_payment_batch(id);
-- 承兑汇票主表与执行表的关联(一对多)
ALTER TABLE finance_bill_execution
ADD CONSTRAINT fk_execution_bill
FOREIGN KEY (bill_id) REFERENCES finance_bill_of_exchange(id);
一、应付款管理
1. 应付款表 (finance_accounts_payable)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键,唯一标识 |
payable_no |
VARCHAR(50) |
应付款编号(如:AP2024010001) |
vendor_id |
INT |
外键,关联供应商表 (pms_vendor) |
order_id |
INT |
外键,关联采购订单表 (pms_purchase_order) |
invoice_id |
INT |
外键,关联采购发票表 (finance_purchase_invoice) |
payable_amount |
DECIMAL(15,2) |
应付金额 |
paid_amount |
DECIMAL(15,2) |
已付金额 |
remaining_amount |
DECIMAL(15,2) |
未付金额(计算字段:payable_amount - paid_amount) |
currency |
VARCHAR(10) |
币种(默认:CNY) |
exchange_rate |
DECIMAL(10,4) |
汇率(相对本位币) |
original_amount |
DECIMAL(15,2) |
原币金额 |
due_date |
DATE |
应付到期日 |
payment_terms |
VARCHAR(200) |
付款条件 |
early_payment_discount |
DECIMAL(5,2) |
提前付款折扣率(%) |
discount_due_date |
DATE |
折扣有效期截止日 |
overdue_days |
INT |
逾期天数 |
overdue_interest_rate |
DECIMAL(5,2) |
逾期利率(%) |
overdue_interest |
DECIMAL(15,2) |
逾期利息 |
payment_status |
ENUM('unpaid', 'partial', 'paid', 'overdue', 'disputed', 'cancelled') |
付款状态 |
accounting_period |
VARCHAR(10) |
会计期间(如:2024-01) |
department_id |
INT |
责任部门ID |
cost_center |
VARCHAR(50) |
成本中心 |
gl_account |
VARCHAR(50) |
总账科目 |
sub_ledger |
VARCHAR(50) |
子账科目 |
matching_status |
ENUM('unmatched', 'partial', 'matched') |
发票匹配状态 |
matching_amount |
DECIMAL(15,2) |
已匹配金额 |
is_checked |
BOOLEAN |
是否已对账 |
checked_by |
INT |
对账人ID |
checked_at |
DATETIME |
对账时间 |
approver_id |
INT |
付款审批人ID |
approved_at |
DATETIME |
付款审批时间 |
is_withholding_tax |
BOOLEAN |
是否代扣代缴税款 |
withholding_tax_rate |
DECIMAL(5,2) |
代扣税率(%) |
withholding_tax_amount |
DECIMAL(15,2) |
代扣税额 |
is_prepayment |
BOOLEAN |
是否预付款 |
prepayment_percentage |
DECIMAL(5,2) |
预付比例(%) |
is_settled |
BOOLEAN |
是否已结清 |
settled_at |
DATETIME |
结清时间 |
remark |
TEXT |
备注 |
created_at |
DATETIME |
创建时间 |
updated_at |
DATETIME |
更新时间 |
deleted_at |
DATETIME |
软删除时间 |
2. 应付暂估表 (finance_accrued_payable)
应付暂估是指货物已收到但发票尚未收到时,根据合理的估计金额计入应付账款。这是权责发生制会计原则的要求,确保费用与收入在正确的会计期间匹配。
复制代码
采购申请 → 询价报价 → 比价决策 → 生成订单 → 收货入库 → **应付暂估** → 发票验证 → **暂估冲销** → 应付款生成 → 付款计划 → 付款审批 → 付款执行 → 账务处理 → 对账核销
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键,唯一标识 |
accrued_no |
VARCHAR(50) |
暂估单号 |
order_id |
INT |
关联采购订单ID |
vendor_id |
INT |
供应商ID |
accrued_amount |
DECIMAL(15,2) |
暂估金额 |
accrued_date |
DATE |
暂估日期 |
reversal_date |
DATE |
冲销日期 |
reversal_amount |
DECIMAL(15,2) |
冲销金额 |
status |
ENUM('active', 'reversed', 'adjusted') |
状态 |
accounting_period |
VARCHAR(10) |
会计期间 |
created_at |
DATETIME |
创建时间 |
3. 应付暂估调整表(finance_accrued_adjustment)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键,唯一标识 |
adjustment_no |
VARCHAR(50) |
调整单号,格式:AA2024010001 |
accrued_id |
INT |
关联应付暂估ID |
payable_id |
INT |
关联正式应付款ID(调整后生成) |
invoice_id |
INT |
关联发票ID(如果因发票调整) |
order_id |
INT |
关联采购订单ID |
vendor_id |
INT |
供应商ID |
adjustment_type |
ENUM('price_difference', 'quantity_difference', 'exchange_rate', 'tax_rate', 'discount', 'freight', 'other', 'write_off') |
调整类型 |
adjustment_reason |
ENUM('invoice_mismatch', 'price_change', 'quantity_variance', 'exchange_fluctuation', 'tax_correction', 'discount_applied', 'freight_adjustment', 'quality_issue', 'settlement_discount', 'early_payment', 'other') |
调整原因 |
original_accrued_amount |
DECIMAL(15,2) |
原始暂估金额 |
adjustment_amount |
DECIMAL(15,2) |
调整金额(正数为增加,负数为减少) |
adjusted_amount |
DECIMAL(15,2) |
调整后金额 |
details |
JSON |
调整明细 |
tax_adjustment |
DECIMAL(15,2) |
税额调整 |
tax_rate_adjusted |
DECIMAL(5,2) |
调整后税率 |
reference_document |
VARCHAR(200) |
参考单据 |
reference_document_date |
DATE |
参考单据日期 |
quality_issue_level |
ENUM('minor', 'major', 'critical') |
质量问题等级 |
deduction_penalty |
DECIMAL(15,2) |
扣款/罚款金额 |
adjustment_status |
ENUM('draft', 'submitted', 'approved', 'rejected', 'processed', 'cancelled') |
调整状态 |
submitted_by |
INT |
提交人 |
submitted_at |
DATETIME |
提交时间 |
approver_id |
INT |
审批人 |
approved_at |
DATETIME |
审批时间 |
rejection_reason |
VARCHAR(500) |
拒绝原因 |
gl_entry_id |
INT |
关联会计分录ID |
accounting_period |
VARCHAR(10) |
会计期间(YYYY-MM) |
is_reversal |
BOOLEAN |
是否为冲销调整 |
reversal_adjustment_id |
INT |
冲销的调整单ID |
attachment_urls |
JSON |
附件路径列表 |
remarks |
TEXT |
备注 |
created_by |
INT |
创建人 |
created_at |
DATETIME |
创建时间 |
updated_at |
DATETIME |
更新时间 |
4. 应付对账表 (finance_payable_reconciliation)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键,唯一标识 |
reconciliation_no |
VARCHAR(50) |
对账单号 |
vendor_id |
INT |
供应商ID |
reconciliation_date |
DATE |
对账日期 |
period_start |
DATE |
期间开始日期 |
period_end |
DATE |
期间结束日期 |
opening_balance |
DECIMAL(15,2) |
期初余额 |
current_purchases |
DECIMAL(15,2) |
本期采购 |
current_payments |
DECIMAL(15,2) |
本期付款 |
current_adjustments |
DECIMAL(15,2) |
本期调整 |
closing_balance |
DECIMAL(15,2) |
期末余额 |
vendor_confirmed |
BOOLEAN |
供应商是否确认 |
vendor_confirmed_at |
DATETIME |
供应商确认时间 |
discrepancy_amount |
DECIMAL(15,2) |
差异金额 |
discrepancy_reason |
TEXT |
差异原因 |
status |
ENUM('draft', 'confirmed', 'disputed', 'resolved') |
状态 |
reconciled_by |
INT |
对账人ID |
remark |
TEXT |
备注 |
二、付款计划管理
付款计划的生成主要基于以下场景:
| 触发时机 |
生成规则 |
示例 |
| 发票验证通过 |
根据发票付款条件生成 |
发票金额10万,付款条件"货到30天" |
| 预付款申请 |
根据采购合同预付款条款 |
合同约定预付30% |
| 收货暂估应付 |
已收货未收到发票时的暂估 |
暂估金额,收到发票后冲销 |
| 分期付款约定 |
根据合同分期付款计划 |
分三期付款:30%-40%-30% |
1. 付款条件模板表 (finance_payment_term_template)
| 字段名称 |
数据类型 |
说明 |
示例值 |
id |
INT |
主键 |
1 |
template_code |
VARCHAR(50) |
模板代码 |
NET_30 |
template_name |
VARCHAR(100) |
模板名称 |
货到30天付款 |
term_type |
ENUM('simple', 'discount', 'installment', 'mixed', 'custom') |
条件类型 |
discount |
payment_rules |
JSON |
付款规则定义 |
{"base_days": 30, "discount_days": 10, "discount_rate": 2} |
description |
VARCHAR(500) |
描述 |
10天内付款享受2%折扣,否则30天内全额付款 |
is_default |
BOOLEAN |
是否为默认模板 |
true |
status |
ENUM('active', 'inactive') |
状态 |
active |
payment_rules JSON结构示例:
json
复制代码
// 简单付款条件
{"base_days": 30, "payment_methods": ["bank_transfer"]}
// 现金折扣条件
{
"base_days": 30,
"discount_days": 10,
"discount_rate": 2,
"discount_description": "2/10, Net 30"
}
// 分期付款条件
{
"stages": [
{"stage_name": "预付款", "percentage": 30, "trigger": "contract_signed", "days_after_trigger": 7},
{"stage_name": "发货款", "percentage": 40, "trigger": "shipment_confirmed", "days_after_trigger": 0},
{"stage_name": "验收款", "percentage": 30, "trigger": "acceptance_confirmed", "days_after_trigger": 30}
]
}
// 混合条件
{
"advance_percentage": 20,
"retention_percentage": 10,
"retention_period": 365,
"main_payment_days": 45
}
2. 供应商付款条件表 (finance_vendor_payment_terms)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
vendor_id |
INT |
供应商ID |
payment_term_template_id |
INT |
付款条件模板ID |
effective_date |
DATE |
生效日期 |
expiry_date |
DATE |
失效日期 |
credit_limit |
DECIMAL(15,2) |
信用额度 |
credit_days |
INT |
信用期(天) |
max_payment_amount |
DECIMAL(15,2) |
单笔付款上限 |
payment_methods |
JSON |
支持的付款方式 |
special_terms |
JSON |
特殊条款 |
status |
ENUM('active', 'inactive') |
状态 |
3. 合同付款条款表 (finance_contract_payment_terms)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
contract_id |
INT |
合同ID |
vendor_id |
INT |
供应商ID |
payment_schedule |
JSON |
付款计划定义 |
advance_payment |
JSON |
预付款条款 |
retention_clause |
JSON |
质保金/保留金条款 |
penalty_clause |
JSON |
罚则条款 |
currency |
VARCHAR(10) |
币种 |
exchange_rate_clause |
VARCHAR(500) |
汇率条款 |
bank_account_info |
JSON |
银行账户信息 |
4. 付款计划主表 (finance_payment_schedule)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
schedule_no |
VARCHAR(50) |
付款计划编号 |
payable_id |
INT |
应付款ID |
payment_term_type |
ENUM('invoice', 'contract', 'advance', 'retention') |
付款计划类型 |
planned_amount |
DECIMAL(15,2) |
计划金额 |
currency |
VARCHAR(10) |
币种 |
exchange_rate |
DECIMAL(10,4) |
汇率 |
local_amount |
DECIMAL(15,2) |
本位币金额 |
base_date |
DATE |
计算基准日(发票日/合同签订日等) |
planned_payment_date |
DATE |
计划付款日期 |
actual_payment_date |
DATE |
实际付款日期 |
payment_trigger |
ENUM('date_based', 'event_based', 'manual') |
付款触发方式 |
trigger_event |
VARCHAR(100) |
触发事件 |
trigger_event_date |
DATE |
触发事件发生日期 |
status |
ENUM('planned', 'pending', 'approved', 'paid', 'cancelled', 'merged', 'split') |
状态 |
priority |
INT |
付款优先级 |
cash_discount_eligible |
BOOLEAN |
是否享受现金折扣 |
cash_discount_rate |
DECIMAL(5,2) |
现金折扣率 |
cash_discount_amount |
DECIMAL(15,2) |
现金折扣金额 |
cash_discount_deadline |
DATE |
现金折扣截止日 |
overdue_interest_rate |
DECIMAL(5,2) |
逾期利率 |
notes |
TEXT |
备注 |
created_by |
INT |
创建人 |
created_at |
DATETIME |
创建时间 |
5. 付款计划明细表 (finance_payment_schedule_detail)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
schedule_id |
INT |
付款计划ID |
item_type |
ENUM('invoice', 'po', 'contract', 'other') |
关联项类型 |
item_id |
INT |
关联项ID |
allocated_amount |
DECIMAL(15,2) |
分配金额 |
percentage |
DECIMAL(5,2) |
分配百分比 |
description |
VARCHAR(200) |
描述 |
6. 付款计划调整表 (finance_payment_schedule_adjustment)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
schedule_id |
INT |
付款计划ID |
adjustment_type |
ENUM('date_change', 'amount_change', 'split', 'merge', 'cancel') |
调整类型 |
old_value |
JSON |
调整前值 |
new_value |
JSON |
调整后值 |
reason |
VARCHAR(500) |
调整原因 |
adjusted_by |
INT |
调整人 |
adjusted_at |
DATETIME |
调整时间 |
7. 付款计划规则表 (finance_payment_rule_engine)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
rule_code |
VARCHAR(50) |
规则代码 |
rule_name |
VARCHAR(100) |
规则名称 |
rule_condition |
JSON |
规则条件 |
rule_action |
JSON |
规则动作 |
priority |
INT |
优先级 |
description |
VARCHAR(500) |
描述 |
is_active |
BOOLEAN |
是否激活 |
付款计划自动生成流程
复制代码
1. 事件触发
├── 发票验证通过
├── 合同签订完成
├── 预付款申请批准
├── 收货单确认
└── 手工触发
2. 确定付款条件
├── 检查合同是否有特殊条款
├── 检查供应商默认付款条件
├── 检查发票上的付款条件
└── 使用系统默认条件
3. 计算付款计划
├── 确定付款金额
├── 计算付款日期
├── 计算现金折扣
└── 确定付款方式
4. 验证和调整
├── 预算检查
├── 现金流预测
├── 信用额度检查
└── 人工复核调整
5. 生成付款计划
├── 保存付款计划记录
├── 触发审批流程
└── 发送通知
三、付款执行管理
1. 付款指令表 (finance_payment_instruction)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
instruction_no |
VARCHAR(50) |
付款指令编号 |
batch_id |
INT |
付款批次ID |
schedule_id |
INT |
关联付款计划ID |
application_id |
INT |
付款申请ID |
instruction_type |
ENUM('single', 'batch', 'urgent', 'scheduled') |
指令类型 |
payment_method |
ENUM('bank_transfer', 'check', 'bank_draft', 'commercial_bill', 'cash', 'credit_card') |
付款方式 |
payment_amount |
DECIMAL(15,2) |
付款金额 |
currency |
VARCHAR(10) |
币种 |
exchange_rate |
DECIMAL(10,4) |
汇率 |
local_amount |
DECIMAL(15,2) |
本位币金额 |
payer_bank_id |
INT |
付款银行ID |
payer_account_no |
VARCHAR(100) |
付款账号 |
payee_bank_id |
INT |
收款银行ID |
payee_account_no |
VARCHAR(100) |
收款账号 |
payee_name |
VARCHAR(200) |
收款人名称 |
purpose |
VARCHAR(500) |
付款用途 |
execution_date |
DATE |
计划执行日期 |
actual_execution_date |
DATE |
实际执行日期 |
status |
ENUM('draft', 'authorized', 'generated', 'transmitted', 'executed', 'confirmed', 'failed', 'cancelled') |
指令状态 |
authorized_by |
INT |
授权人 |
authorized_at |
DATETIME |
授权时间 |
generated_by |
INT |
指令生成人 |
generated_at |
DATETIME |
生成时间 |
transmitted_by |
INT |
传输人(银行接口操作) |
transmitted_at |
DATETIME |
传输时间 |
executed_by |
INT |
执行人 |
executed_at |
DATETIME |
执行时间 |
confirmed_by |
INT |
确认人 |
confirmed_at |
DATETIME |
确认时间 |
cancelled_by |
INT |
取消人 |
cancelled_at |
DATETIME |
取消时间 |
cancellation_reason |
VARCHAR(500) |
取消原因 |
security_level |
ENUM('normal', 'high', 'critical') |
安全等级 |
is_manual |
BOOLEAN |
是否手工操作 |
manual_reason |
VARCHAR(500) |
手工操作原因 |
reference_no |
VARCHAR(100) |
业务参考号 |
remarks |
TEXT |
备注 |
created_at |
DATETIME |
创建时间 |
updated_at |
DATETIME |
更新时间 |
2. 付款批次表 (finance_payment_batch)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
batch_no |
VARCHAR(50) |
付款批次号 |
batch_date |
DATE |
批次日期 |
batch_type |
ENUM('daily', 'weekly', 'monthly', 'special') |
批次类型 |
total_amount |
DECIMAL(15,2) |
批次总金额 |
total_instructions |
INT |
总指令数 |
currency |
VARCHAR(10) |
主要币种 |
preparer_id |
INT |
批次准备人 |
approver_id |
INT |
批次审批人 |
approval_status |
ENUM('pending', 'approved', 'rejected') |
审批状态 |
approval_date |
DATETIME |
审批时间 |
execution_status |
ENUM('pending', 'processing', 'partial', 'completed', 'failed') |
执行状态 |
execution_date |
DATE |
执行日期 |
bank_file_generated |
BOOLEAN |
是否已生成银行文件 |
bank_file_name |
VARCHAR(200) |
银行文件名 |
bank_file_path |
VARCHAR(500) |
银行文件路径 |
bank_upload_status |
ENUM('not_uploaded', 'uploading', 'uploaded', 'failed') |
银行上传状态 |
bank_upload_time |
DATETIME |
银行上传时间 |
bank_response_status |
ENUM('pending', 'accepted', 'rejected', 'partial') |
银行响应状态 |
bank_response_time |
DATETIME |
银行响应时间 |
reconciliation_status |
ENUM('not_started', 'in_progress', 'completed', 'exceptions') |
对账状态 |
remarks |
TEXT |
备注 |
3. 银行接口日志表 (finance_bank_interface_log)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
instruction_id |
INT |
付款指令ID |
batch_id |
INT |
付款批次ID |
interface_type |
ENUM('upload', 'query', 'callback') |
接口类型 |
bank_code |
VARCHAR(50) |
银行编码 |
request_data |
JSON |
请求数据 |
response_data |
JSON |
响应数据 |
request_time |
DATETIME |
请求时间 |
response_time |
DATETIME |
响应时间 |
status |
ENUM('success', 'failure', 'timeout') |
接口状态 |
error_code |
VARCHAR(50) |
错误代码 |
error_message |
TEXT |
错误信息 |
retry_count |
INT |
重试次数 |
last_retry_time |
DATETIME |
最后重试时间 |
4. 银行交易明细表 (finance_bank_transaction)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
instruction_id |
INT |
付款指令ID |
batch_id |
INT |
付款批次ID |
transaction_no |
VARCHAR(100) |
银行交易流水号 |
bank_code |
VARCHAR(50) |
银行编码 |
channel |
ENUM('online_banking', 'api', 'file', 'manual') |
交易渠道 |
transaction_date |
DATETIME |
交易时间 |
transaction_type |
ENUM('payment', 'collection', 'transfer', 'fee') |
交易类型 |
amount |
DECIMAL(15,2) |
交易金额 |
currency |
VARCHAR(10) |
币种 |
payer_account |
VARCHAR(100) |
付款方账号 |
payer_name |
VARCHAR(200) |
付款方名称 |
payee_account |
VARCHAR(100) |
收款方账号 |
payee_name |
VARCHAR(200) |
收款方名称 |
status |
ENUM('pending', 'processing', 'success', 'failed', 'reversed') |
交易状态 |
failure_reason |
VARCHAR(500) |
失败原因 |
reversal_reason |
VARCHAR(500) |
冲销原因 |
reversed_by |
INT |
冲销人 |
reversed_at |
DATETIME |
冲销时间 |
fee_amount |
DECIMAL(15,2) |
手续费金额 |
balance_after |
DECIMAL(15,2) |
交易后余额 |
attachment_url |
VARCHAR(500) |
附件URL(银行回单) |
remarks |
TEXT |
备注 |
5. 支票管理表 (finance_check_management)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
check_no |
VARCHAR(50) |
支票号码 |
instruction_id |
INT |
付款指令ID |
check_type |
ENUM('cashier', 'bank', 'traveler') |
支票类型 |
bank_account_id |
INT |
银行账户ID |
check_amount |
DECIMAL(15,2) |
支票金额 |
payee_name |
VARCHAR(200) |
收款人名称 |
issue_date |
DATE |
签发日期 |
effective_date |
DATE |
生效日期 |
expiry_date |
DATE |
有效期至 |
status |
ENUM('blank', 'issued', 'cashed', 'cancelled', 'lost', 'expired') |
支票状态 |
issued_by |
INT |
签发人 |
issued_at |
DATETIME |
签发时间 |
cashed_by |
VARCHAR(200) |
兑现人 |
cashed_at |
DATETIME |
兑现时间 |
cancelled_by |
INT |
作废人 |
cancelled_at |
DATETIME |
作废时间 |
cancellation_reason |
VARCHAR(500) |
作废原因 |
lost_reported_by |
INT |
挂失人 |
lost_reported_at |
DATETIME |
挂失时间 |
remarks |
TEXT |
备注 |
6. 承兑汇票主表(finance bill_of_exchange)
7. 承兑汇票执行表 (finance_bill_execution)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
bill_no |
VARCHAR(50) |
汇票编号 |
instruction_id |
INT |
付款指令ID |
bill_type |
ENUM('bank_acceptance', 'commercial_acceptance') |
汇票类型 |
face_amount |
DECIMAL(15,2) |
票面金额 |
issue_date |
DATE |
出票日期 |
drawer_name |
VARCHAR(200) |
出票人名称 |
drawer_account |
VARCHAR(100) |
出票人账号 |
payee_name |
VARCHAR(200) |
收款人名称 |
payee_account |
VARCHAR(100) |
收款人账号 |
acceptor_name |
VARCHAR(200) |
承兑人名称 |
acceptor_account |
VARCHAR(100) |
承兑人账号 |
acceptance_date |
DATE |
承兑日期 |
due_date |
DATE |
到期日期 |
issuance_status |
ENUM('draft', 'issued', 'delivered', 'accepted', 'cancelled') |
签发状态 |
delivered_to |
VARCHAR(200) |
交付对象 |
delivered_by |
INT |
交付人 |
delivered_at |
DATETIME |
交付时间 |
delivery_method |
ENUM('handover', 'mail', 'courier') |
交付方式 |
tracking_no |
VARCHAR(100) |
快递单号 |
accepted_by |
VARCHAR(200) |
接受人 |
accepted_at |
DATETIME |
接受时间 |
cancelled_by |
INT |
作废人 |
cancelled_at |
DATETIME |
作废时间 |
cancellation_reason |
VARCHAR(500) |
作废原因 |
attachment_url |
VARCHAR(500) |
附件URL(汇票扫描件) |
remarks |
TEXT |
备注 |
8. 付款异常处理表 (finance_payment_exception)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
exception_no |
VARCHAR(50) |
异常编号 |
instruction_id |
INT |
付款指令ID |
exception_type |
ENUM('bank_rejection', 'account_error', 'amount_mismatch', 'payee_error', 'duplicate_payment', 'fraud_suspected', 'system_error') |
异常类型 |
severity |
ENUM('low', 'medium', 'high', 'critical') |
严重程度 |
description |
TEXT |
异常描述 |
detected_by |
INT |
发现人 |
detected_at |
DATETIME |
发现时间 |
assigned_to |
INT |
分配给 |
priority |
ENUM('low', 'medium', 'high', 'urgent') |
优先级 |
resolution_status |
ENUM('new', 'investigating', 'pending_correction', 'resolved', 'escalated', 'closed') |
处理状态 |
resolution_action |
ENUM('retry', 'cancel', 'modify', 'reverse', 'investigate') |
处理措施 |
resolution_details |
TEXT |
处理详情 |
resolved_by |
INT |
处理人 |
resolved_at |
DATETIME |
处理时间 |
downtime_minutes |
INT |
影响时长(分钟) |
financial_impact |
DECIMAL(15,2) |
财务影响金额 |
root_cause |
TEXT |
根本原因 |
preventive_action |
TEXT |
预防措施 |
follow_up_required |
BOOLEAN |
是否需要跟进 |
follow_up_date |
DATE |
跟进日期 |
9. 银行对账表 (finance_bank_reconciliation)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
reconciliation_no |
VARCHAR(50) |
对账编号 |
reconciliation_date |
DATE |
对账日期 |
period_start |
DATE |
期间开始 |
period_end |
DATE |
期间结束 |
reconciliation_type |
ENUM('daily', 'weekly', 'monthly', 'ad_hoc') |
对账类型 |
bank_account_id |
INT |
银行账户ID |
opening_balance |
DECIMAL(15,2) |
期初余额 |
closing_balance_system |
DECIMAL(15,2) |
系统期末余额 |
closing_balance_bank |
DECIMAL(15,2) |
银行期末余额 |
total_debits_system |
DECIMAL(15,2) |
系统借方总额 |
total_credits_system |
DECIMAL(15,2) |
系统贷方总额 |
total_debits_bank |
DECIMAL(15,2) |
银行借方总额 |
total_credits_bank |
DECIMAL(15,2) |
银行贷方总额 |
difference_amount |
DECIMAL(15,2) |
差异金额 |
reconciliation_status |
ENUM('pending', 'in_progress', 'matched', 'unmatched', 'adjusted') |
对账状态 |
matched_items |
INT |
已匹配项目数 |
unmatched_items |
INT |
未匹配项目数 |
adjusted_items |
INT |
已调整项目数 |
reconciled_by |
INT |
对账人 |
reconciled_at |
DATETIME |
对账时间 |
reviewed_by |
INT |
复核人 |
reviewed_at |
DATETIME |
复核时间 |
remarks |
TEXT |
备注 |
10. 付款执行审计表 (finance_payment_audit)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键 |
audit_no |
VARCHAR(50) |
审计编号 |
audit_date |
DATE |
审计日期 |
audit_period |
VARCHAR(20) |
审计期间 |
audit_type |
ENUM('regular', 'special', 'post_payment', 'compliance') |
审计类型 |
auditor_id |
INT |
审计人 |
instruction_id |
INT |
付款指令ID |
audit_focus |
ENUM('authorization', 'amount', 'payee', 'supporting_docs', 'timing', 'duplicate') |
审计重点 |
findings |
TEXT |
审计发现 |
risk_level |
ENUM('low', 'medium', 'high', 'critical') |
风险等级 |
recommendations |
TEXT |
审计建议 |
management_response |
TEXT |
管理层回应 |
action_plan |
TEXT |
行动计划 |
due_date |
DATE |
整改截止日期 |
follow_up_status |
ENUM('open', 'in_progress', 'completed', 'overdue') |
跟进状态 |
closure_date |
DATE |
关闭日期 |
remarks |
TEXT |
备注 |
数据流转:从付款计划到付款执行
复制代码
付款计划(finance_payment_schedule)
↓(根据付款计划创建付款申请)
付款申请(finance_payment_application)
↓(多级审批流程)
付款审批
↓(审批通过后生成付款指令)
付款指令(finance_payment_instruction)
↓(组织为批次执行)
付款批次(finance_payment_batch)
↓(根据付款方式执行)
├── 银行转账 → 银行交易明细(finance_bank_transaction)
├── 支票支付 → 支票管理(finance_check_management)
├── 承兑汇票 → 承兑汇票执行(finance_bill_execution)
└── 其他支付方式
↓(执行完成生成记录)
付款执行记录(finance_payment_record)
↓(银行流水核对)
银行对账(finance_bank_reconciliation)
↓(财务凭证处理)
财务入账(finance_gl_entry)
↓(供应商定期核对)
应付对账(finance_payable_reconciliation)
四、账务处理
1. 会计分录表 (finance_gl_entry)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键,唯一标识 |
entry_id |
INT |
关联分录ID |
line_no |
INT |
行号 |
account_code |
VARCHAR(50) |
科目代码 |
account_name |
VARCHAR(100) |
科目名称 |
account_type |
ENUM('asset', 'liability', 'equity', 'revenue', 'expense', 'cost') |
科目类型 |
debit_credit |
ENUM('debit', 'credit') |
借贷方向 |
amount |
DECIMAL(15,2) |
金额 |
currency |
VARCHAR(10) |
币种 |
exchange_rate |
DECIMAL(10,4) |
汇率 |
local_amount |
DECIMAL(15,2) |
本位币金额(计算字段:amount * exchange_rate) |
auxiliary_accounts |
JSON |
辅助核算信息 |
cost_center |
VARCHAR(50) |
成本中心 |
department_code |
VARCHAR(50) |
部门代码 |
project_code |
VARCHAR(50) |
项目代码 |
vendor_id |
INT |
供应商ID |
customer_id |
INT |
客户ID |
employee_id |
INT |
员工ID |
business_item |
VARCHAR(200) |
业务事项 |
quantity |
DECIMAL(15,4) |
数量 |
unit_price |
DECIMAL(15,4) |
单价 |
tax_rate |
DECIMAL(5,2) |
税率 |
tax_amount |
DECIMAL(15,2) |
税额 |
created_at |
DATETIME |
创建时间 |
updated_at |
DATETIME |
更新时间 |
2. 科目映射表 (finance_account_mapping)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键,唯一标识 |
mapping_code |
VARCHAR(50) |
映射代码 |
mapping_name |
VARCHAR(100) |
映射名称 |
business_type |
ENUM('purchase_invoice', 'purchase_payment', 'purchase_prepay', 'purchase_return', 'purchase_discount', 'purchase_freight', 'accrual', 'reversal', 'expense', 'asset_purchase', 'service_purchase', 'inventory', 'other') |
业务类型 |
vendor_category_id |
INT |
供应商类别ID |
vendor_id |
INT |
特定供应商ID |
item_category_id |
INT |
物料类别ID |
item_id |
INT |
特定物料ID |
department_id |
INT |
部门ID |
amount_condition_type |
ENUM('none', 'range', 'greater_than', 'less_than') |
金额条件类型 |
min_amount |
DECIMAL(15,2) |
最小金额 |
max_amount |
DECIMAL(15,2) |
最大金额 |
primary_accounts |
JSON |
主科目映射 |
tax_accounts |
JSON |
税金科目映射 |
auxiliary_accounts |
JSON |
辅助科目映射 |
priority |
INT |
优先级(数字越大优先级越高) |
effective_date |
DATE |
生效日期 |
expiry_date |
DATE |
失效日期 |
is_active |
BOOLEAN |
是否启用 |
auto_generate_entry |
BOOLEAN |
是否自动生成分录 |
require_approval |
BOOLEAN |
是否需要审批 |
approval_workflow_id |
INT |
审批流程ID |
validation_rules |
JSON |
验证规则配置 |
created_by |
INT |
创建人 |
created_at |
DATETIME |
创建时间 |
updated_by |
INT |
更新人 |
updated_at |
DATETIME |
更新时间 |
五、辅助与配置
1. 供应商账龄分析表 (finance_vendor_aging_analysis)
| 字段名称 |
数据类型 |
说明 |
id |
INT |
主键,唯一标识 |
vendor_id |
INT |
供应商ID |
analysis_date |
DATE |
分析日期 |
total_payable |
DECIMAL(15,2) |
应付总额 |
current_0_30 |
DECIMAL(15,2) |
0-30天账龄金额 |
overdue_31_60 |
DECIMAL(15,2) |
31-60天账龄金额 |
overdue_61_90 |
DECIMAL(15,2) |
61-90天账龄金额 |
overdue_91_180 |
DECIMAL(15,2) |
91-180天账龄金额 |
overdue_181_365 |
DECIMAL(15,2) |
181-365天账龄金额 |
overdue_365_plus |
DECIMAL(15,2) |
365天以上账龄金额 |
credit_limit |
DECIMAL(15,2) |
信用额度 |
available_credit |
DECIMAL(15,2) |
可用信用额度 |
average_payment_days |
INT |
平均付款天数 |
payment_score |
DECIMAL(5,2) |
付款评分 |
risk_level |
ENUM('low', 'medium', 'high', 'critical') |
风险等级 |
六、数据流转
-
发票与应付款阶段
复制代码
供应商开具发票 → 财务验证发票录入finance_purchase_invoice
↓(验证通过)
系统自动生成finance_accounts_payable应付款记录
↓(根据付款条件)
系统生成finance_payment_schedule付款计划(付款建议)
↓(付款计划到期前触发)
财务人员创建finance_payment_application付款申请
-
付款审批阶段
复制代码
付款申请提交 → 进入多级审批流程finance_payment_approval
↓(不同金额对应不同审批层级)
├── 小额:部门经理审批
├── 中额:部门经理+财务经理审批
└── 大额:部门经理+财务经理+高管审批
↓(审批通过)
审批状态更新,申请状态变为"approved"
↓(准备付款指令)
根据审批结果生成finance_payment_instruction付款指令
-
付款执行阶段
复制代码
付款指令生成 → 组织为付款批次finance_payment_batch
↓(根据付款方式执行)
├── 银行转账 → 银行交易明细finance_bank_transaction + 银行接口日志finance_bank_interface_log
├── 支票支付 → 支票管理finance_check_management
├── 承兑汇票 → 承兑汇票执行finance_bill_execution
└── 其他支付方式
↓(执行完成)
生成finance_payment_record付款记录
↓(更新应付款状态)
更新finance_accounts_payable的已付金额和状态
-
账务处理阶段
复制代码
付款执行完成 → 系统自动生成会计分录finance_gl_entry
↓(根据科目映射)
按finance_account_mapping规则生成借贷分录
↓(凭证处理)
会计凭证审核、过账
↓(银行对账)
定期进行finance_bank_reconciliation银行对账
-
对账与核销阶段
复制代码
月末/季度末 → 生成finance_payable_reconciliation应付对账单
↓(发送供应商)
与供应商确认对账结果 → 差异处理
↓(系统自动分析)
系统生成finance_vendor_aging_analysis账龄分析 ← **表名明确**
↓(信用评估)
基于账龄分析更新供应商信用评级
↓(长期差异处理)
超期差异转入异常处理或坏账准备
备注
一、应付对账
1. 工作流程
步骤1:数据准备阶段
sql
复制代码
-- 1.1 从系统提取我方应付数据
SELECT
'我方数据' AS source,
ap.payable_no,
ap.due_date,
CASE
WHEN ap.payment_status = 'paid' THEN '已付款'
WHEN ap.payment_status = 'partial' THEN '部分付款'
WHEN ap.payment_status = 'unpaid' THEN '未付款'
ELSE ap.payment_status
END AS status,
ap.payable_amount AS original_amount,
ap.paid_amount AS paid_amount,
ap.remaining_amount AS balance,
pi.invoice_no,
pi.invoice_date,
po.order_no,
po.created_at AS order_date
FROM finance_accounts_payable ap --应付款
LEFT JOIN finance_purchase_invoice pi ON ap.invoice_id = pi.id --采购发票表
LEFT JOIN pms_purchase_order po ON ap.order_id = po.id --采购订单表
WHERE ap.vendor_id = 1001 -- ABC供应商
AND (ap.payment_status != 'paid' OR
pi.invoice_date >= '2024-03-01')
ORDER BY ap.due_date;
-- 结果示例:
┌──────────┬─────────────┬────────────┬────────────┬──────────────┬─────────────┬──────────┐
│ payable_no │ due_date │ status │ original │ paid │ balance │ invoice │
├──────────┼─────────────┼────────────┼────────────┼─────────────┼─────────────┼──────────┤
│ AP202401001 │ 2024-02-28 │ 未付款 │ 50,000.00 │ 0.00 │ 50,000.00 │ INV001 │
│ AP202402001 │ 2024-03-15 │ 部分付款 │ 30,000.00 │ 15,000.00 │ 15,000.00 │ INV002 │
│ AP202403001 │ 2024-04-10 │ 未付款 │ 25,000.00 │ 0.00 │ 25,000.00 │ INV003 │
└──────────┴─────────────┴────────────┴────────────┴─────────────┴─────────────┴──────────┘
合计:应付总额 105,000.00,已付 15,000.00,未付 90,000.00
步骤2:接收供应商对账单
复制代码
供应商ABC提供的对账单(Excel/PDF/纸质):
┌──────────────┬──────────────┬──────────────┬──────────────┐
│ 发票号 │ 发票日期 │ 发票金额 │ 备注 │
├──────────────┼──────────────┼──────────────┼──────────────┤
│ INV001 │ 2024-01-15 │ 50,000.00 │ 逾期 │
│ INV002 │ 2024-02-10 │ 30,000.00 │ 已收15,000 │
│ INV003 │ 2024-03-05 │ 25,000.00 │ │
│ INV004 │ 2024-03-20 │ 8,000.00 │ 新发票 │
└──────────────┴──────────────┴──────────────┴──────────────┘
供应商汇总:应付总额 113,000.00,已收 15,000.00,未收 98,000.00
2. 应付对账要核对的具体内容
四层核对体系
复制代码
第一层:总额核对
└── 总应付余额是否一致
第二层:分项核对
├── 每张发票金额
├── 每笔付款金额
└── 每个调整项
第三层:时间性核对
├── 发票日期
├── 付款日期
└── 到期日期
第四层:关联性核对
├── 发票vs订单vs收货
├── 付款vs银行流水
└── 调整vs业务依据
3. 对账发现的常见差异类型及处理
| 差异类型 |
常见原因 |
处理方法 |
责任人 |
| 我方漏记发票 |
发票丢失、未处理、系统漏录 |
补录发票,生成应付款 |
应付会计 |
| 供应商漏记付款 |
银行延迟、记账错误 |
提供付款凭证,要求更新 |
供应商 |
| 金额不一致 |
折扣、罚款、汇率差异 |
核对合同条款,调整金额 |
采购/财务 |
| 时间性差异 |
在途款项、未达账项 |
确认时间点,下期对平 |
双方会计 |
| 重复记录 |
系统bug、人工重复录入 |
标记重复,冲销错误记录 |
系统管理员 |
| 科目错误 |
发票开错科目、分类错误 |
退回重开或调整科目 |
供应商/财务 |