@tcos/broker-parser 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/parse-statement/SKILL.md +134 -0
- package/.claude/skills/parse-statement/examples.md +257 -0
- package/.claude/skills/parse-statement/trigger-tests/cases.yaml +133 -0
- package/README.md +153 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +150 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/cleaning.d.ts +78 -0
- package/dist/core/cleaning.d.ts.map +1 -0
- package/dist/core/cleaning.js +217 -0
- package/dist/core/cleaning.js.map +1 -0
- package/dist/core/pipeline.d.ts +49 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +66 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/registry.d.ts +24 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +53 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/phillip/extract.py +90 -0
- package/dist/parsers/phillip/extractor.d.ts +215 -0
- package/dist/parsers/phillip/extractor.d.ts.map +1 -0
- package/dist/parsers/phillip/extractor.js +1012 -0
- package/dist/parsers/phillip/extractor.js.map +1 -0
- package/dist/parsers/phillip/formatter.d.ts +113 -0
- package/dist/parsers/phillip/formatter.d.ts.map +1 -0
- package/dist/parsers/phillip/formatter.js +760 -0
- package/dist/parsers/phillip/formatter.js.map +1 -0
- package/dist/parsers/phillip/index.d.ts +25 -0
- package/dist/parsers/phillip/index.d.ts.map +1 -0
- package/dist/parsers/phillip/index.js +59 -0
- package/dist/parsers/phillip/index.js.map +1 -0
- package/dist/types/formatter.d.ts +47 -0
- package/dist/types/formatter.d.ts.map +1 -0
- package/dist/types/formatter.js +9 -0
- package/dist/types/formatter.js.map +1 -0
- package/dist/types/plugin.d.ts +14 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +5 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/raw.d.ts +136 -0
- package/dist/types/raw.d.ts.map +1 -0
- package/dist/types/raw.js +11 -0
- package/dist/types/raw.js.map +1 -0
- package/dist/types/statement.d.ts +55 -0
- package/dist/types/statement.d.ts.map +1 -0
- package/dist/types/statement.js +12 -0
- package/dist/types/statement.js.map +1 -0
- package/package.json +64 -0
- package/src/parsers/phillip/extract.py +90 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../src/parsers/phillip/formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhillipPlugin — 辉立证券 PDF 解析插件
|
|
3
|
+
*
|
|
4
|
+
* 封装 Stage1 提取器和 Stage2 格式化器,实现 IBrokerPlugin 接口。
|
|
5
|
+
* detect() 通过 pdfplumber 快速读取首页文本判断是否为辉立结单。
|
|
6
|
+
*/
|
|
7
|
+
import { IStage2Formatter } from '../../types/formatter';
|
|
8
|
+
import { IBrokerPlugin } from '../../types/plugin';
|
|
9
|
+
import { IStage1Extractor } from '../../types/raw';
|
|
10
|
+
export declare class PhillipPlugin implements IBrokerPlugin {
|
|
11
|
+
readonly name = "phillip";
|
|
12
|
+
readonly displayName = "Phillip Securities";
|
|
13
|
+
readonly supportedFileTypes: string[];
|
|
14
|
+
/**
|
|
15
|
+
* 检测 PDF 是否为辉立证券结单
|
|
16
|
+
* 使用 pdfplumber 快速提取首页文本,搜索辉立特征关键词
|
|
17
|
+
* @returns 0.9 = 匹配,0 = 不匹配
|
|
18
|
+
*/
|
|
19
|
+
detect(filePath: string): Promise<number>;
|
|
20
|
+
/** 创建 Stage1 pdfplumber 提取器 */
|
|
21
|
+
createExtractor(): IStage1Extractor;
|
|
22
|
+
/** 创建 Stage2 规则格式化器 */
|
|
23
|
+
createFormatter(config?: Record<string, unknown>): IStage2Formatter;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/parsers/phillip/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKnD,qBAAa,aAAc,YAAW,aAAa;IACjD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,wBAAwB;IAC5C,QAAQ,CAAC,kBAAkB,WAAW;IAEtC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BzC,+BAA+B;IAC/B,eAAe,IAAI,gBAAgB;IAInC,uBAAuB;IACvB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB;CAGpE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PhillipPlugin — 辉立证券 PDF 解析插件
|
|
4
|
+
*
|
|
5
|
+
* 封装 Stage1 提取器和 Stage2 格式化器,实现 IBrokerPlugin 接口。
|
|
6
|
+
* detect() 通过 pdfplumber 快速读取首页文本判断是否为辉立结单。
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PhillipPlugin = void 0;
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const extractor_1 = require("./extractor");
|
|
12
|
+
const formatter_1 = require("./formatter");
|
|
13
|
+
class PhillipPlugin {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.name = 'phillip';
|
|
16
|
+
this.displayName = 'Phillip Securities';
|
|
17
|
+
this.supportedFileTypes = ['pdf'];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 检测 PDF 是否为辉立证券结单
|
|
21
|
+
* 使用 pdfplumber 快速提取首页文本,搜索辉立特征关键词
|
|
22
|
+
* @returns 0.9 = 匹配,0 = 不匹配
|
|
23
|
+
*/
|
|
24
|
+
detect(filePath) {
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
// 内联 Python 脚本:提取首页文本
|
|
27
|
+
const script = [
|
|
28
|
+
'import pdfplumber,sys',
|
|
29
|
+
'try:',
|
|
30
|
+
' with pdfplumber.open(sys.argv[1]) as pdf:',
|
|
31
|
+
" print(pdf.pages[0].extract_text() or '')",
|
|
32
|
+
'except:',
|
|
33
|
+
" print('')",
|
|
34
|
+
].join('\n');
|
|
35
|
+
const proc = (0, child_process_1.spawn)('python3', ['-c', script, filePath]);
|
|
36
|
+
let output = '';
|
|
37
|
+
proc.stdout.on('data', (chunk) => {
|
|
38
|
+
output += chunk.toString();
|
|
39
|
+
});
|
|
40
|
+
proc.on('close', () => {
|
|
41
|
+
const text = output.toUpperCase();
|
|
42
|
+
// 同时检查英文、简体中文(辉立)和繁体中文(輝立)
|
|
43
|
+
const found = text.includes('PHILLIP SECURITIES') || text.includes('辉立') || text.includes('輝立');
|
|
44
|
+
resolve(found ? 0.9 : 0);
|
|
45
|
+
});
|
|
46
|
+
proc.on('error', () => resolve(0));
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** 创建 Stage1 pdfplumber 提取器 */
|
|
50
|
+
createExtractor() {
|
|
51
|
+
return new extractor_1.PhillipPdfplumberExtractor();
|
|
52
|
+
}
|
|
53
|
+
/** 创建 Stage2 规则格式化器 */
|
|
54
|
+
createFormatter(config) {
|
|
55
|
+
return new formatter_1.PhillipRuleFormatter(config);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.PhillipPlugin = PhillipPlugin;
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/parsers/phillip/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,iDAAsC;AAMtC,2CAAyD;AACzD,2CAAmD;AAEnD,MAAa,aAAa;IAA1B;QACW,SAAI,GAAG,SAAS,CAAC;QACjB,gBAAW,GAAG,oBAAoB,CAAC;QACnC,uBAAkB,GAAG,CAAC,KAAK,CAAC,CAAC;IA+CxC,CAAC;IA7CC;;;;OAIG;IACH,MAAM,CAAC,QAAgB;QACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,sBAAsB;YACtB,MAAM,MAAM,GAAG;gBACb,uBAAuB;gBACvB,MAAM;gBACN,6CAA6C;gBAC7C,8CAA8C;gBAC9C,SAAS;gBACT,aAAa;aACd,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxD,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACvC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBAClC,2BAA2B;gBAC3B,MAAM,KAAK,GACT,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpF,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+BAA+B;IAC/B,eAAe;QACb,OAAO,IAAI,sCAA0B,EAAE,CAAC;IAC1C,CAAC;IAED,uBAAuB;IACvB,eAAe,CAAC,MAAgC;QAC9C,OAAO,IAAI,gCAAoB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;CACF;AAlDD,sCAkDC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stage 2 统一接口定义
|
|
3
|
+
*
|
|
4
|
+
* Stage 2 负责将 RawTableData 转换为 StatementData。
|
|
5
|
+
* 可以使用 LLM 方案或规则引擎方案。
|
|
6
|
+
*/
|
|
7
|
+
import { StatementData } from './statement';
|
|
8
|
+
import { RawTableData } from './raw';
|
|
9
|
+
/**
|
|
10
|
+
* Stage 2 格式化器配置基类
|
|
11
|
+
*/
|
|
12
|
+
export interface Stage2FormatterConfig {
|
|
13
|
+
/** 格式化器类型 */
|
|
14
|
+
type: 'llm' | 'rule';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* LLM 格式化器配置
|
|
18
|
+
*/
|
|
19
|
+
export interface LlmFormatterConfig extends Stage2FormatterConfig {
|
|
20
|
+
type: 'llm';
|
|
21
|
+
/** DeepSeek Prompt */
|
|
22
|
+
deepseekPrompt: string;
|
|
23
|
+
/** 模型名称 */
|
|
24
|
+
model?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 规则格式化器配置
|
|
28
|
+
*/
|
|
29
|
+
export interface RuleFormatterConfig extends Stage2FormatterConfig {
|
|
30
|
+
type: 'rule';
|
|
31
|
+
/** 是否启用跨行合并 */
|
|
32
|
+
enableMerge?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Stage 2 格式化器接口
|
|
36
|
+
*
|
|
37
|
+
* 所有 Stage 2 实现都需要实现这个接口
|
|
38
|
+
*/
|
|
39
|
+
export interface IStage2Formatter {
|
|
40
|
+
/**
|
|
41
|
+
* 将原始表格数据格式化为结构化数据
|
|
42
|
+
* @param rawData Stage 1 输出的原始数据
|
|
43
|
+
* @returns 结构化的 StatementData
|
|
44
|
+
*/
|
|
45
|
+
format(rawData: RawTableData): Promise<StatementData>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/types/formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAMrC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa;IACb,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,IAAI,EAAE,KAAK,CAAC;IACZ,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/types/formatter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IStage1Extractor } from './raw';
|
|
2
|
+
import { IStage2Formatter } from './formatter';
|
|
3
|
+
export interface IBrokerPlugin {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly displayName: string;
|
|
6
|
+
readonly supportedFileTypes: string[];
|
|
7
|
+
/** 检测 PDF 是否属于该券商,返回 0~1 置信度 */
|
|
8
|
+
detect(filePath: string): Promise<number>;
|
|
9
|
+
/** 创建 Stage1 提取器实例 */
|
|
10
|
+
createExtractor(): IStage1Extractor;
|
|
11
|
+
/** 创建 Stage2 格式化器实例 */
|
|
12
|
+
createFormatter(config?: Record<string, unknown>): IStage2Formatter;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/types/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IACtC,gCAAgC;IAChC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,sBAAsB;IACtB,eAAe,IAAI,gBAAgB,CAAC;IACpC,uBAAuB;IACvB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAAC;CACrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/types/plugin.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,oEAAoE"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stage 1 统一输出接口定义
|
|
3
|
+
*
|
|
4
|
+
* 无论使用 OCR 方案还是 pdfplumber 规则方案,
|
|
5
|
+
* Stage 1 的输出都应该符合这个接口。
|
|
6
|
+
*
|
|
7
|
+
* Stage 2 的输入也基于这个接口。
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* 原始交易行数据
|
|
11
|
+
* 保持表格原始值,不做业务逻辑处理
|
|
12
|
+
*/
|
|
13
|
+
export interface RawTransactionRow {
|
|
14
|
+
/** 交易日期 (原始格式,如 DD/MM/YY 或 YYYY-MM-DD) */
|
|
15
|
+
tradeDate: string;
|
|
16
|
+
/** 交收日期 (原始格式) */
|
|
17
|
+
settleDate?: string;
|
|
18
|
+
/** 产品代码 (如 UT、ST 等) */
|
|
19
|
+
product?: string;
|
|
20
|
+
/** 参考号 */
|
|
21
|
+
refNo: string;
|
|
22
|
+
/** 交易类型 (原始值,如 Payment、Receipt 等) */
|
|
23
|
+
transType?: string;
|
|
24
|
+
/** 摘要/备注 (原始文本) */
|
|
25
|
+
particulars: string;
|
|
26
|
+
/** 借方金额 (原始值) */
|
|
27
|
+
debit?: number;
|
|
28
|
+
/** 贷方金额 (原始值) */
|
|
29
|
+
credit?: number;
|
|
30
|
+
/** 来源行号 (用于调试,可选) */
|
|
31
|
+
sourceLines?: number[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 原始持仓行数据
|
|
35
|
+
*/
|
|
36
|
+
export interface RawHoldingRow {
|
|
37
|
+
/** 股票/基金代码 */
|
|
38
|
+
symbol: string;
|
|
39
|
+
/** 名称 */
|
|
40
|
+
name?: string;
|
|
41
|
+
/** 资产类型 (原始值,如 Stock、Fund、Cash 等) */
|
|
42
|
+
assetType?: string;
|
|
43
|
+
/** 数量 */
|
|
44
|
+
quantity?: number;
|
|
45
|
+
/** 市场价格 */
|
|
46
|
+
marketPrice?: number;
|
|
47
|
+
/** 市值 */
|
|
48
|
+
marketValue?: number;
|
|
49
|
+
/** 货币 */
|
|
50
|
+
currency?: string;
|
|
51
|
+
/** 其他原始字段 */
|
|
52
|
+
extras?: Record<string, unknown>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 原始账户信息
|
|
56
|
+
*/
|
|
57
|
+
export interface RawAccountInfo {
|
|
58
|
+
/** 客户编号 */
|
|
59
|
+
accountCode?: string;
|
|
60
|
+
/** 客户名称 */
|
|
61
|
+
clientName?: string;
|
|
62
|
+
/** 账单日期 (原始格式) */
|
|
63
|
+
statementDate?: string;
|
|
64
|
+
/** 其他头部信息 */
|
|
65
|
+
extras?: Record<string, unknown>;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Stage 1 输出的原始表格数据
|
|
69
|
+
*
|
|
70
|
+
* 这是 OCR 和规则引擎共用的输出格式。
|
|
71
|
+
* Stage 2 的输入也基于这个格式。
|
|
72
|
+
*/
|
|
73
|
+
export interface RawTableData {
|
|
74
|
+
/** 账户信息 */
|
|
75
|
+
accountInfo: RawAccountInfo;
|
|
76
|
+
/** 原始交易记录 */
|
|
77
|
+
transactions: RawTransactionRow[];
|
|
78
|
+
/** 原始持仓数据 */
|
|
79
|
+
holdings: RawHoldingRow[];
|
|
80
|
+
/** 解析元数据 */
|
|
81
|
+
metadata?: {
|
|
82
|
+
/** 总页数 */
|
|
83
|
+
totalPages?: number;
|
|
84
|
+
/** 解析耗时 (ms) */
|
|
85
|
+
parseTimeMs?: number;
|
|
86
|
+
/** 解析方案 */
|
|
87
|
+
extractor: 'ocr' | 'pdfplumber';
|
|
88
|
+
/** 警告信息 */
|
|
89
|
+
warnings?: string[];
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Stage 1 提取器配置基类
|
|
94
|
+
*/
|
|
95
|
+
export interface Stage1ExtractorConfig {
|
|
96
|
+
/** 提取器类型 */
|
|
97
|
+
type: 'ocr' | 'pdfplumber';
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* OCR 提取器配置
|
|
101
|
+
*/
|
|
102
|
+
export interface OcrExtractorConfig extends Stage1ExtractorConfig {
|
|
103
|
+
type: 'ocr';
|
|
104
|
+
/** 图片 DPI */
|
|
105
|
+
density: number;
|
|
106
|
+
/** 图片格式 */
|
|
107
|
+
format: 'jpeg' | 'png';
|
|
108
|
+
/** JPEG 质量 */
|
|
109
|
+
quality: number;
|
|
110
|
+
/** Vision Prompt */
|
|
111
|
+
visionPrompt: string;
|
|
112
|
+
/** Vision 模型 */
|
|
113
|
+
visionModel?: string;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* pdfplumber 提取器配置
|
|
117
|
+
*/
|
|
118
|
+
export interface PdfplumberExtractorConfig extends Stage1ExtractorConfig {
|
|
119
|
+
type: 'pdfplumber';
|
|
120
|
+
/** 列间隔阈值 (字符间隔超过此值视为不同列) */
|
|
121
|
+
gapThreshold?: number;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Stage 1 提取器接口
|
|
125
|
+
*
|
|
126
|
+
* 所有 Stage 1 实现都需要实现这个接口
|
|
127
|
+
*/
|
|
128
|
+
export interface IStage1Extractor {
|
|
129
|
+
/**
|
|
130
|
+
* 从 PDF 提取原始表格数据
|
|
131
|
+
* @param pdfPath PDF 文件路径
|
|
132
|
+
* @returns 原始表格数据
|
|
133
|
+
*/
|
|
134
|
+
extract(pdfPath: string): Promise<RawTableData>;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=raw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw.d.ts","sourceRoot":"","sources":["../../src/types/raw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw.js","sourceRoot":"","sources":["../../src/types/raw.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* broker-parser 核心类型定义
|
|
3
|
+
*
|
|
4
|
+
* 定义结单解析输出的结构化数据类型,包括:
|
|
5
|
+
* - TradeData: 交易记录
|
|
6
|
+
* - IPOData: 新股申购记录
|
|
7
|
+
* - SnapshotData: 持仓快照
|
|
8
|
+
* - StatementData: 完整结单数据
|
|
9
|
+
*/
|
|
10
|
+
export interface TradeData {
|
|
11
|
+
transactionDate: string;
|
|
12
|
+
settlementDate?: string;
|
|
13
|
+
refNo?: string;
|
|
14
|
+
stockCode: string;
|
|
15
|
+
stockName: string;
|
|
16
|
+
transactionType: 'BUY' | 'SELL' | 'IPO_INTEREST' | 'FEE' | 'DIVIDEND' | 'OTHER' | 'DEPOSIT' | 'WITHDRAWAL' | 'IPO_FEE';
|
|
17
|
+
quantity?: number;
|
|
18
|
+
price?: number;
|
|
19
|
+
amount: number;
|
|
20
|
+
fee?: number;
|
|
21
|
+
currency: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface IPOData {
|
|
25
|
+
transactionDate: string;
|
|
26
|
+
settlementDate?: string;
|
|
27
|
+
stockCode: string;
|
|
28
|
+
stockName: string;
|
|
29
|
+
quantity?: number;
|
|
30
|
+
price?: number;
|
|
31
|
+
amount: number;
|
|
32
|
+
fee?: number;
|
|
33
|
+
currency: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
type: 'apply' | 'allot';
|
|
36
|
+
}
|
|
37
|
+
export interface SnapshotData {
|
|
38
|
+
symbol: string;
|
|
39
|
+
assetCategory: 'Cash' | 'Stock' | 'Fund' | 'Bond' | 'Other';
|
|
40
|
+
quantity: number;
|
|
41
|
+
marketPrice?: number;
|
|
42
|
+
marketValue?: number;
|
|
43
|
+
currency: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface StatementData {
|
|
47
|
+
accountCode: string;
|
|
48
|
+
clientName: string;
|
|
49
|
+
period?: string;
|
|
50
|
+
statementDate?: string;
|
|
51
|
+
transactions: TradeData[];
|
|
52
|
+
ipo: IPOData[];
|
|
53
|
+
snapshots: SnapshotData[];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=statement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement.d.ts","sourceRoot":"","sources":["../../src/types/statement.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EACX,KAAK,GACL,MAAM,GACN,cAAc,GACd,KAAK,GACL,UAAU,GACV,OAAO,GACP,SAAS,GACT,YAAY,GACZ,SAAS,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,GAAG,EAAE,OAAO,EAAE,CAAC;IACf,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* broker-parser 核心类型定义
|
|
4
|
+
*
|
|
5
|
+
* 定义结单解析输出的结构化数据类型,包括:
|
|
6
|
+
* - TradeData: 交易记录
|
|
7
|
+
* - IPOData: 新股申购记录
|
|
8
|
+
* - SnapshotData: 持仓快照
|
|
9
|
+
* - StatementData: 完整结单数据
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
//# sourceMappingURL=statement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement.js","sourceRoot":"","sources":["../../src/types/statement.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tcos/broker-parser",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Parse brokerage PDF statements into structured JSON",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"tcos-parse": "./dist/cli/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/",
|
|
12
|
+
"src/parsers/phillip/extract.py",
|
|
13
|
+
".claude/"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc && mkdir -p dist/parsers/phillip && cp src/parsers/phillip/extract.py dist/parsers/phillip/extract.py",
|
|
17
|
+
"dev": "tsc --watch",
|
|
18
|
+
"lint": "ESLINT_USE_FLAT_CONFIG=false eslint src --ext .ts",
|
|
19
|
+
"lint:fix": "ESLINT_USE_FLAT_CONFIG=false eslint src --ext .ts --fix",
|
|
20
|
+
"format": "prettier --write .",
|
|
21
|
+
"format:check": "prettier --check .",
|
|
22
|
+
"typecheck": "tsc --noEmit",
|
|
23
|
+
"test": "jest --testPathPattern='tests/(stage2|cli)\\.test\\.ts'",
|
|
24
|
+
"test:local": "jest",
|
|
25
|
+
"test:ci": "jest --testPathPattern='tests/(stage2|cli)\\.test\\.ts'"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"brokerage",
|
|
29
|
+
"statement",
|
|
30
|
+
"parser",
|
|
31
|
+
"pdf",
|
|
32
|
+
"cli"
|
|
33
|
+
],
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"commander": "^11.0.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/jest": "^29.0.0",
|
|
40
|
+
"@types/node": "^20.0.0",
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
42
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
43
|
+
"eslint": "^8.0.0",
|
|
44
|
+
"eslint-plugin-import": "^2.0.0",
|
|
45
|
+
"jest": "^29.0.0",
|
|
46
|
+
"lint-staged": "^15.0.0",
|
|
47
|
+
"prettier": "^3.0.0",
|
|
48
|
+
"ts-jest": "^29.0.0",
|
|
49
|
+
"typescript": "^5.0.0"
|
|
50
|
+
},
|
|
51
|
+
"lint-staged": {
|
|
52
|
+
"*.ts": [
|
|
53
|
+
"eslint --fix",
|
|
54
|
+
"prettier --write"
|
|
55
|
+
],
|
|
56
|
+
"*.{js,json,md,yml,yaml}": [
|
|
57
|
+
"prettier --write"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"repository": {
|
|
61
|
+
"type": "git",
|
|
62
|
+
"url": "https://github.com/biggersun/broker-parser"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
pdfplumber 字符提取脚本
|
|
4
|
+
|
|
5
|
+
供 TypeScript 规则引擎调用,输出 JSON 格式的字符数据。
|
|
6
|
+
|
|
7
|
+
使用方法:
|
|
8
|
+
python3 scripts/poc/pdfplumber_extract.py <pdf_path> --json
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import pdfplumber
|
|
12
|
+
import json
|
|
13
|
+
import sys
|
|
14
|
+
import os
|
|
15
|
+
from typing import List, Dict, Any
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def extract_chars_from_pdf(pdf_path: str) -> Dict[str, Any]:
|
|
19
|
+
"""
|
|
20
|
+
从 PDF 提取所有页面的字符及其坐标
|
|
21
|
+
|
|
22
|
+
返回结构:
|
|
23
|
+
{
|
|
24
|
+
"file": "文件名",
|
|
25
|
+
"totalPages": 页数,
|
|
26
|
+
"pages": [
|
|
27
|
+
{
|
|
28
|
+
"pageNum": 1,
|
|
29
|
+
"chars": [
|
|
30
|
+
{"text": "A", "x0": 10.0, "x1": 15.0, "top": 20.0, "bottom": 30.0},
|
|
31
|
+
...
|
|
32
|
+
],
|
|
33
|
+
"text": "完整文本"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
"""
|
|
38
|
+
result = {
|
|
39
|
+
"file": os.path.basename(pdf_path),
|
|
40
|
+
"totalPages": 0,
|
|
41
|
+
"pages": []
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
with pdfplumber.open(pdf_path) as pdf:
|
|
45
|
+
result["totalPages"] = len(pdf.pages)
|
|
46
|
+
|
|
47
|
+
for i, page in enumerate(pdf.pages):
|
|
48
|
+
page_data = {
|
|
49
|
+
"pageNum": i + 1,
|
|
50
|
+
"chars": [],
|
|
51
|
+
"text": ""
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
# 提取字符及坐标
|
|
55
|
+
for char in page.chars:
|
|
56
|
+
page_data["chars"].append({
|
|
57
|
+
"text": char["text"],
|
|
58
|
+
"x0": round(char["x0"], 2),
|
|
59
|
+
"x1": round(char["x1"], 2),
|
|
60
|
+
"top": round(char["top"], 2),
|
|
61
|
+
"bottom": round(char["bottom"], 2)
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
# 提取完整文本
|
|
65
|
+
page_data["text"] = page.extract_text() or ""
|
|
66
|
+
|
|
67
|
+
result["pages"].append(page_data)
|
|
68
|
+
|
|
69
|
+
return result
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def main():
|
|
73
|
+
if len(sys.argv) < 2:
|
|
74
|
+
print("Usage: python3 pdfplumber_extract.py <pdf_path> [--json]", file=sys.stderr)
|
|
75
|
+
sys.exit(1)
|
|
76
|
+
|
|
77
|
+
pdf_path = sys.argv[1]
|
|
78
|
+
|
|
79
|
+
if not os.path.exists(pdf_path):
|
|
80
|
+
print(f"Error: File not found: {pdf_path}", file=sys.stderr)
|
|
81
|
+
sys.exit(1)
|
|
82
|
+
|
|
83
|
+
result = extract_chars_from_pdf(pdf_path)
|
|
84
|
+
|
|
85
|
+
# 始终输出 JSON (供 TypeScript 调用)
|
|
86
|
+
print(json.dumps(result, ensure_ascii=False))
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
if __name__ == "__main__":
|
|
90
|
+
main()
|