Files
mfas/docs/overall.md

174 lines
8.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 需求文档:管理人多维财务核算系统 (M-FAS)
**版本**v1.0 | **优先级**P0 | **受众**:后端架构师、数据工程师
## 1. 核心设计理念
本系统旨在构建一个介于**前端业务数据(灵活、多维)** 与 **传统会计系统(合规、刚性)** 之间的独立** “会计引擎Accounting Engine**
核心理念是:“去科目化、重维度化”。摒弃传统金蝶/用友的“多级会计科目”挂账模式(如 `6601.01.05 销售费用-家办-张三`),采用**“扁平科目 + 必须维度标签”**的数据库结构。
**系统行为逻辑:**
任何一笔收入或支出Journal Entry Line在入库时**必须**携带维度标签。所谓的“剩余/中后台”,在系统底层不应通过“减法”计算存储,而应作为**“默认兜底标签Default Bucket”**进行归集,报表展示时再按层级聚合。
---
## 2. 维度架构定义 (Database Dimensions)
我们需要在凭证行表(`finance_journal_lines`)中扩展以下字段。
### Level 1核心业务板块 (`dim_segment`)
对应需求中的第一层级。该字段为**必填项**。
| 枚举值 (Value) | 业务含义 (Description) | 逻辑定义/自动化规则 |
| :--- | :--- | :--- |
| **PM_Strategy** | PM/策略团队 | 凡是直接归属于特定PM管理的基金产生的收入、直接发生的策略研发成本服务器/数据/人员)。 |
| **Marketing** | 市场部 | 纯品牌推广、非家办渠道的机构募资费用。 |
| **Family_Office** | 家办整体 | 对应家办业务线的所有收支将触发Level 2必填校验。 |
| **Corp_BackOffice** | 基金中后台 (剩余) | **默认值**。既不属于PM也不属于市场和家办的通用行政、合规、房租、核心管理层成本。 |
### Level 2业务子维度 (`dim_sub_segment`)
不再局限于家办,所有 Level 1 业务线均可定义自己的子维度。
| Level 1 | 枚举值 (Value) | 业务含义 (Description) |
| :--- | :--- | :--- |
| **Family_Office** | **FO_Sales** | 家办员工 (销售) |
| **Family_Office** | **FO_Channel** | 家办渠道 |
| **Family_Office** | **FO_Admin** | 家办中后台 (默认) |
| **Marketing** | **MKT_Online** | 线上投放 |
| **Marketing** | **MKT_Offline** | 线下活动 |
| **PM_Strategy** | **Strat_Equity** | 股票策略 |
| **PM_Strategy** | **Strat_CTA** | 期货策略 |
### Level 3精细化对象 (Specific Objects)
为了避免“多态ID”带来的外键约束缺失问题**严禁**使用单一的 `dim_object_id`
数据库应设计分离的可空列Nullable Foreign Keys
* **`dim_product_id`**: 关联产品表 (Product Table)
* **`dim_employee_id`**: 关联员工表 (Employee Table)
* **`dim_vendor_id`**: 关联客商表 (Vendor Table)
**填值规则**:根据业务场景填充对应列,其余列留空。例如支付阿里云费用,填充 `dim_vendor_id`,而 `dim_employee_id` 为空。
---
## 3. 自动化记账规则引擎 (Automation Logic)
为了实现“自动化”,需开发一个**预处理中间件**,在银行流水或业务单据生成凭证前,进行标签清洗。
### 规则 1基于“人员/客商”的自动打标
建立一张全局映射表Mapping Table系统根据收付款对象自动填充维度。
* **IF** 报销人/收款人 = "张三" **AND** 张三在HR表属性 = "家办销售"
* **THEN** `dim_segment` = **Family_Office**, `dim_sub_segment` = **FO_Sales**
* **IF** 收款人 = "招商证券" (托管费) **AND** 备注包含 "产品A"
* **THEN** `dim_segment` = **PM_Strategy**, `dim_object_id` = **Product_A**
* **IF** 收款人 = "阿里云"
* **THEN** 触发 **Split Transaction (拆单)** 逻辑按预设比例分摊至不同PM生成多行凭证。
### 规则 2基于“默认兜底”的减法逻辑实现
需求中提到的“剩余”概念,在系统录入时体现为**默认值**。
* **场景**:支付公司整体房租 100,000元。
* **处理**
* 系统无法判断房租属于哪个PM或家办。
* **Action**:直接打标 `dim_segment` = **Corp_BackOffice**
* **报表逻辑**
* 用户看到的“基金中后台” = `Sum(Corp_BackOffice)`
* 用户看到的“家办中后台” = `Sum(Family_Office) WHERE dim_sub_segment = FO_Admin`
---
## 4. 报表视图需求 (Output Requirements)
系统需前端需支持动态透视表Pivot Table展示逻辑如下
### 视图 A公司整体损益 (Level 1 View)
* **收入/成本/费用 总额**
* **PM板块** (聚合所有 `PM_Strategy`)
* *点击展开可看具体 PM1, PM2, PM3*
* **市场部** (`Marketing`)
* **家办整体** (聚合所有 `Family_Office`)
* **基金中后台** (`Corp_BackOffice`)
* *(备注:此处即为需求中的“剩余”部分)*
### 视图 B家办专项损益 (Level 2 Deep Dive)
* **筛选条件**`dim_segment` = **Family_Office**
* **家办员工** (`FO_Sales`)
* *点击展开可看具体 Sales_A, Sales_B*
* **家办渠道** (`FO_Channel`)
* **家办中后台** (`FO_Admin`)
* *(备注:此处即为需求中的“家办剩余”部分)*
---
### 给技术团队的特别备注 (CFO Notes)
1. **数据清洗优先**:请优先开发“客商/人员”与“维度标签”的绑定配置页面,这是自动化的基础。没有这个,财务还是得手工录入。
2. **必须支持一拆多 (Split Transaction)**:不要仅仅“预留接口”。在 V1.0 的数据库设计中,必须直接支持 **1行银行流水 $\rightarrow$ N行财务凭证** 的父子表结构。这是高频刚需。
3. **PM与产品的关系**:建议建立明确的 Product 表和 Employee 表,处理好 managed_by 的时间维度关系。
---
## 5. 技术架构总体设计 (Technical Architecture)
### 5.1 整体架构逻辑:财务数据中台模式
系统架构分为三层:**数据接入层Input**、**核心处理层Process**、**合规输出层Output**。
#### 1. 数据接入层 (Data Ingestion)
负责将非标准的业务数据统一为系统可读的格式。
* **资金流数据**银行对账单Excel/API、第三方支付流水。
* **业务流数据**:外部估值表、应收台账(管理费/业绩报酬)、应付台账(渠道佣金)。
* **核心动作**清洗Cleaning、去重De-duplication、标准化Normalization
#### 2. 核心处理层 (The Core Engine)
系统的核心逻辑层,包含以下模块:
* **智能打标 (Dimension Injection)**
* **规则引擎**:基于关键词、账号、金额等规则自动匹配维度。
* **人工补录**:对于置信度低的数据,提供界面供财务人员手动打标。
* **产出**带有完整业务维度PM、家办、渠道、员工的宽表数据。
* **业务对账 (Reconciliation)**
* 自动匹配运营台账与银行流水,实现应收/应付的自动核销。
* **会计引擎 (Accounting Engine)**
* 基于预设的“场景-分录映射表”,将业务动作转化为标准化凭证数据(借:销售费用 / 贷:银行存款)。
#### 3. 合规输出层 (Output Adapter)
* **目标**:传统会计软件(金蝶/用友)。
* **实现**通过API对接或生成标准导入模版Excel/XML实现凭证自动推送。
### 5.2 系统运作流程图 (Data Flow)
```mermaid
graph TD
A[数据源] -->|Excel/API| B(数据清洗模块 ETL)
B --> C{规则引擎 + AI辅助}
C -->|高置信度| D[已打标中间表]
C -->|低置信度| E[人工审核界面 UI]
E -->|人工确认| D
D --> F{会计分录生成器}
F -->|读取映射配置| G[标准凭证数据]
G --> H[传统会计系统适配器]
H -->|API/Excel| I[最终会计软件 (Kingdee/Yonyou)]
subgraph 核心中台
B
C
D
E
F
G
H
end
```
### 5.3 关键实施要素 (Critical Success Factors)
1. **权责发生制支持**:系统需从设计之初考虑“挂账”与“核销”逻辑,以兼容运营台账(权责发生制)与银行流水(收付实现制)的差异。
2. **数据唯一性保障 (Advanced Deduplication)**
* 简单的MD5(日期+金额)不足以防重(如同日同给同一人的两笔相同报销)。
* **改进方案**:引入 **“期末余额 (Ending Balance)”** 校验,或在哈希因子中加入“流水号/Sequence ID”。
* **兜底机制**:对于完全相同的疑似重复交易,系统应标记为 `Duplicate_Suspect`,强制要求人工审核确认是“重复记账”还是“真实发生的第二笔交易”。
3. **人工介入机制 (Human-in-the-Loop)**:系统必须遵循“机器预处理 -> 人工确认 -> 正式过账”的流程。在推送到金蝶/用友之前,必须保留人工审核的节点,确保财务数据的绝对准确性。