@posx/core 5.5.393 → 5.5.395

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.
Files changed (34) hide show
  1. package/CLAUDE.md +23 -23
  2. package/LICENSE +21 -21
  3. package/README.md +85 -85
  4. package/build/index.d.ts +6 -0
  5. package/jest.config.cjs +36 -36
  6. package/jest.setup.cjs +80 -80
  7. package/memo/technical-docs/01_ARCHITECTURE.md +147 -0
  8. package/memo/technical-docs/02_CORE_BUSINESS.md +292 -0
  9. package/memo/technical-docs/03_UI_COMPONENTS.md +59 -0
  10. package/memo/technical-docs/04_VIEWS.md +82 -0
  11. package/memo/technical-docs/05_DATA_LAYER.md +375 -0
  12. package/memo/technical-docs/06_CROSS_PLATFORM.md +246 -0
  13. package/memo/technical-docs/07_SIMILARITY_INDEX.md +195 -0
  14. package/memo/technical-docs/CHECKPOINT.md +46 -0
  15. package/memo/technical-docs/PROJECT_OVERVIEW.md +122 -0
  16. package/memo/technical-docs/TECHNICAL_DOCS_PLAN.md +77 -0
  17. package/package.json +1 -1
  18. package/package.publish.json +121 -120
  19. package/tsdown.config.ts +21 -21
  20. package/vite.config.ts +86 -86
  21. package/dev/.stfolder/syncthing-folder-9a95b7.txt +0 -5
  22. package/dev/98894488.xlsx +0 -0
  23. package/dev/HappyThaiSembawang.csv +0 -336
  24. package/dev/KB/create-new-model.md +0 -34
  25. package/dev/KB/markdown-lint.md +0 -14
  26. package/dev/KB/readmefirst.md +0 -6
  27. package/dev/Merchants/HappyThaiSembawang.csv +0 -400
  28. package/dev/Merchants/HappyThaiSembawang.xlsx +0 -0
  29. package/dev/Product_Import_Template.xlsx +0 -0
  30. package/dev/XPOS Invoice Module.pdf +0 -232
  31. package/dev/harbor-harness-deployment.md +0 -78
  32. package/dev/nginx-harbor-harness.conf +0 -84
  33. package/dev/test-logs/2026-02.md +0 -5
  34. package/dev//344/272/247/345/223/201/345/257/274/345/205/245/346/250/241/346/235/277.xlsx +0 -0
@@ -0,0 +1,292 @@
1
+ # 02 - 核心业务逻辑
2
+
3
+ > AI 上下文索引:发票计算、支付处理、打印系统、数据同步、员工认证、权限管理
4
+
5
+ ## 1. 发票/账单系统
6
+
7
+ **核心文件:**
8
+ - `src/services/invoice.service.ts` (2800+ 行)
9
+ - `src/types/invoice.type.ts`
10
+
11
+ ### 服务层次
12
+
13
+ ```
14
+ InvoiceBaseService # 计算引擎
15
+
16
+ ├── LineOperationService # 行项操作
17
+
18
+ └── InvoiceOperationService # 发票生命周期
19
+ ```
20
+
21
+ ### 计算流程
22
+
23
+ ```
24
+ 1. 行项计算
25
+ ├─ 数量 × 单价
26
+ ├─ 修改器合计
27
+ └─ 行小计
28
+
29
+ 2. 折扣阶段 (CalcFlow)
30
+ ├─ AfterSubtotal
31
+ ├─ AfterServiceCharge
32
+ └─ AfterGrandTotal
33
+
34
+ 3. 服务费
35
+ └─ 仅堂食适用
36
+
37
+ 4. 税费计算
38
+ ├─ 内含 (inclusive)
39
+ └─ 外加 (exclusive)
40
+
41
+ 5. 配送费
42
+
43
+ 6. 舍入
44
+ ├─ 现金规则
45
+ └─ 非现金规则
46
+
47
+ 7. 最终调整
48
+ ├─ 积分抵扣
49
+ └─ 零钱计算
50
+ ```
51
+
52
+ ### 发票状态流转
53
+
54
+ ```
55
+ Open → OnHold/Paying → Paid/Void
56
+
57
+ PayAtCounter, Calibration (特殊状态)
58
+ ```
59
+
60
+ ### 发票类型
61
+
62
+ | 类型 | 服务费 | 配送费 |
63
+ |------|--------|--------|
64
+ | dine_in | ✓ | ✗ |
65
+ | take_out | ✗ | ✗ |
66
+ | delivery | ✗ | ✓ |
67
+
68
+ ### 核心方法
69
+
70
+ | 方法 | 功能 |
71
+ |------|------|
72
+ | `calculate()` | 主计算协调 |
73
+ | `calculateLines()` | 行级小计 |
74
+ | `calculateDiscount()` | 折扣计算 |
75
+ | `calculateTax()` | 税费计算 |
76
+ | `calculateServiceCharge()` | 服务费 |
77
+ | `calculateRounding()` | 舍入处理 |
78
+ | `createInvoice()` | 创建发票 |
79
+ | `payInvoice()` | 支付发票 |
80
+ | `voidInvoice()` | 作废发票 |
81
+ | `sliceInvoice()` | 拆分发票 |
82
+
83
+ ## 2. 支付处理
84
+
85
+ **核心文件:**
86
+ - `src/types/payment.type.ts`
87
+ - `src/services/app.service.ts`
88
+
89
+ ### 支付实体
90
+
91
+ ```typescript
92
+ interface IPayment {
93
+ tender_amount: number; // 实付金额
94
+ change_amount: number; // 找零
95
+ payment_method: IPaymentMethod;
96
+ payment_method_history: []; // 变更历史
97
+ }
98
+
99
+ interface IPaymentMethod {
100
+ is_cash: boolean;
101
+ enable_drawer: boolean; // 钱箱支持
102
+ enable_receipt: boolean; // 小票打印
103
+ is_integrated: boolean; // 集成支付
104
+ enable_credit_validation: boolean;
105
+ enable_customer_validation: boolean;
106
+ }
107
+ ```
108
+
109
+ ### 支付状态
110
+
111
+ ```typescript
112
+ enum PaymentStatus {
113
+ payment_started,
114
+ payment_completed,
115
+ payment_failed,
116
+ payment_cancelled
117
+ }
118
+ ```
119
+
120
+ ### 支付操作
121
+
122
+ - `addPayment()` - 添加支付
123
+ - `removePayment()` - 移除支付
124
+ - `changePayments()` - 更换支付方式
125
+ - `syncStandardPaymentMethods()` - 同步支付方式
126
+
127
+ ## 3. 打印系统
128
+
129
+ **核心文件:**
130
+ - `src/services/printer.service.ts`
131
+ - `src/types/printer.type.ts`
132
+ - `src/libs/escpos.printer.ts`
133
+
134
+ ### 打印机类型
135
+
136
+ | 类型 | 用途 |
137
+ |------|------|
138
+ | ReceiptPrinter | 收据打印 |
139
+ | KitchenPrinter | 厨房小票 |
140
+ | KioskPrinter | 自助终端 |
141
+ | LabelPrinter | 标签打印 |
142
+ | OrderPrinter | 订单打印 |
143
+ | CheckPrinter | 账单打印 |
144
+
145
+ ### 打印服务能力
146
+
147
+ - 物理打印机发现
148
+ - 打印机配对
149
+ - 网络扫描 (子网探测)
150
+ - 钱箱控制
151
+ - 模板渲染 (Handlebars)
152
+ - ESC/POS 命令生成
153
+
154
+ ### 打印任务队列
155
+
156
+ ```typescript
157
+ interface IPrintJob {
158
+ printer_uid: string;
159
+ connection_type: PrinterConnections;
160
+ protocol: PrinterProtocols;
161
+ status: PrintJobStatus; // queued, printed, failed, expired
162
+ device_uid_to_print: string;
163
+ save_only: boolean;
164
+ }
165
+ ```
166
+
167
+ ## 4. 数据同步
168
+
169
+ **核心文件:**
170
+ - `src/services/abstract.service.ts`
171
+ - `src/services/app.service.ts`
172
+
173
+ ### 远程服务 API
174
+
175
+ ```
176
+ PUT /api/v5/merchants/{merchant_uid}/{module}/{method} # 创建
177
+ PATCH /api/v5/merchants/{merchant_uid}/{module}/{id} # 更新
178
+ DELETE /api/v5/merchants/{merchant_uid}/{module}/{id} # 删除
179
+ ```
180
+
181
+ ### 同步策略
182
+
183
+ - **双键设计:** `uid` (本地 nanoid) + `id_in_server` (远程 ID)
184
+ - **软删除:** `deleted_at` 字段标记
185
+ - **冲突检测:** `outdatedInvoice`, `outdatedSectionItem`
186
+
187
+ ### 同步操作
188
+
189
+ | 操作 | 方法 |
190
+ |------|------|
191
+ | 发票数据同步 | `syncInvoiceData()` |
192
+ | 支付方式同步 | `syncStandardPaymentMethods()` |
193
+ | 报表同步 | `syncStandardReports()` |
194
+
195
+ ## 5. 员工认证
196
+
197
+ **核心文件:**
198
+ - `src/types/employee.type.ts`
199
+ - `src/services/app.service.ts`
200
+
201
+ ### 认证方法
202
+
203
+ ```typescript
204
+ // 登录验证 (bcryptjs, 12 rounds)
205
+ await bcryptjs.compare(password, user.password)
206
+
207
+ // 密码修改
208
+ await bcryptjs.hash(newPassword, 12)
209
+ ```
210
+
211
+ ### 员工实体
212
+
213
+ ```typescript
214
+ interface IEmployee {
215
+ user_uid: string;
216
+ name: string;
217
+ email: string;
218
+ password: string; // hashed
219
+ role_uid: string;
220
+ language: string;
221
+ can_login: boolean;
222
+ }
223
+ ```
224
+
225
+ ### 认证操作
226
+
227
+ - `login()` - 员工登录
228
+ - `createEmployee()` - 创建员工
229
+ - `changePassword()` - 修改密码
230
+
231
+ ## 6. 权限管理
232
+
233
+ **核心文件:**
234
+ - `src/types/role.type.ts`
235
+
236
+ ### 角色实体
237
+
238
+ ```typescript
239
+ interface IEmployeeRole extends IAppBaseModel {
240
+ permissions: string[]; // 权限字符串数组
241
+ is_default: boolean;
242
+ }
243
+ ```
244
+
245
+ ### 权限设计
246
+
247
+ - 字符串形式权限
248
+ - 数组存储多权限
249
+ - 通过 `role_uid` 关联员工
250
+ - 服务端验证 (非本地)
251
+
252
+ ## 横切关注点
253
+
254
+ ### 配置系统 (ConfigService)
255
+
256
+ 包含 20+ 子系统配置:
257
+ - General, Till, Report, Receipt, Kitchen
258
+ - Tax, Rounding, Charges, Currency
259
+ - Inventory, PAX, CRM, Loyalty Program
260
+ - Online Order, Kiosk, Order Display
261
+
262
+ ### 订单显示系统 (ODS)
263
+
264
+ ```typescript
265
+ // 订单状态流转
266
+ Preparing → ReadyForPickup
267
+
268
+ // 操作
269
+ toPickUp(), toPreparing(), undo()
270
+ ```
271
+
272
+ ### 工具函数
273
+
274
+ - `preciseRound()` - 精确舍入 (2 位小数)
275
+ - `humanizedData()` - 日期格式化
276
+ - CSV 导入/导出
277
+
278
+ ## 关键文件汇总
279
+
280
+ | 文件 | 大小 | 职责 |
281
+ |------|------|------|
282
+ | invoice.service.ts | 107KB | 发票完整生命周期 |
283
+ | app.service.ts | 82KB | 通用 CRUD、配置、支付、报表 |
284
+ | abstract.service.ts | 8KB | 服务基类 |
285
+ | printer.service.ts | 9KB | 打印机发现与管理 |
286
+ | ods.service.ts | 4KB | 订单显示操作 |
287
+
288
+ ## 相关文档
289
+
290
+ - [01_ARCHITECTURE.md](./01_ARCHITECTURE.md) - 整体架构
291
+ - [05_DATA_LAYER.md](./05_DATA_LAYER.md) - 数据层
292
+ - [06_CROSS_PLATFORM.md](./06_CROSS_PLATFORM.md) - 跨平台
@@ -0,0 +1,59 @@
1
+ # 03 - UI 组件
2
+
3
+ > AI 上下文索引:核心库、非UI应用、类型定义、业务实体
4
+
5
+ ## 重要说明
6
+
7
+ **本项目是核心服务库,不包含 UI 组件。**
8
+
9
+ `@posx/core` 是后端/核心库项目,提供业务逻辑服务,不是 UI 应用。因此没有 Vue/React 组件。
10
+
11
+ ## 项目性质
12
+
13
+ - **类型:** TypeScript 核心库
14
+ - **用途:** 被其他 POS 前端应用消费
15
+ - **输出:** ESM bundle + 类型声明
16
+
17
+ ## 提供的类型定义
18
+
19
+ 虽然没有 UI 组件,但提供了完整的类型定义供 UI 层使用:
20
+
21
+ ### 业务实体类型
22
+
23
+ | 文件 | 主要类型 | 用途 |
24
+ |------|---------|------|
25
+ | `invoice.type.ts` | IInvoice, IInvoiceLine | 发票数据结构 |
26
+ | `product.type.ts` | IItem, ICategory | 商品/分类 |
27
+ | `payment.type.ts` | IPayment, IPaymentMethod | 支付数据 |
28
+ | `employee.type.ts` | IEmployee | 员工信息 |
29
+ | `config.type.ts` | IAppConfig | 应用配置 |
30
+ | `printer.type.ts` | IPrinter, IPrintJob | 打印相关 |
31
+ | `shift.type.ts` | IShift, ITill | 班次/收银机 |
32
+ | `report.type.ts` | IAppReport | 报表数据 |
33
+ | `section.type.ts` | ISection, ISectionItem | 区域/桌位 |
34
+
35
+ ### 枚举类型
36
+
37
+ ```typescript
38
+ // 发票状态
39
+ enum InvoiceStatus { Open, OnHold, Paying, Paid, Void, PayAtCounter, Calibration }
40
+
41
+ // 打印机类型
42
+ enum PrinterType { Receipt, Kitchen, Kiosk, Label, Order, Check }
43
+
44
+ // 支付状态
45
+ enum PaymentStatus { payment_started, payment_completed, payment_failed, payment_cancelled }
46
+ ```
47
+
48
+ ## UI 应用位置
49
+
50
+ 使用本库的 UI 应用可能位于:
51
+ - 单独的 `packages/app/` 目录 (monorepo 结构)
52
+ - 独立的前端仓库
53
+ - 消费 `@posx/core` 作为 npm 依赖
54
+
55
+ ## 相关文档
56
+
57
+ - [PROJECT_OVERVIEW.md](./PROJECT_OVERVIEW.md) - 项目总览
58
+ - [02_CORE_BUSINESS.md](./02_CORE_BUSINESS.md) - 核心业务逻辑
59
+ - [05_DATA_LAYER.md](./05_DATA_LAYER.md) - 数据层
@@ -0,0 +1,82 @@
1
+ # 04 - 页面实现
2
+
3
+ > AI 上下文索引:核心库、非UI应用、服务层、类型导出
4
+
5
+ ## 重要说明
6
+
7
+ **本项目是核心服务库,不包含页面/视图。**
8
+
9
+ `@posx/core` 是 TypeScript 核心库,提供业务逻辑和数据服务,不是前端应用。因此没有 Vue/React 页面。
10
+
11
+ ## 项目性质
12
+
13
+ - **类型:** 后端服务库
14
+ - **输出:** ESM bundle + 类型声明
15
+ - **用途:** 被 POS 前端应用消费
16
+
17
+ ## 提供的服务
18
+
19
+ 本库为 UI 层提供完整的业务服务:
20
+
21
+ ### POS 相关服务
22
+
23
+ | 服务 | 功能 |
24
+ |------|------|
25
+ | SectionService | 区域管理 |
26
+ | SectionItemService | 桌位管理 |
27
+ | InvoiceService | 发票/订单处理 |
28
+ | ItemService | 商品查询 |
29
+
30
+ ### 管理相关服务
31
+
32
+ | 服务 | 功能 |
33
+ |------|------|
34
+ | EmployeeService | 员工管理 |
35
+ | EmployeeRoleService | 角色权限 |
36
+ | ConfigService | 系统配置 |
37
+ | ReportService | 报表数据 |
38
+
39
+ ### 设置相关服务
40
+
41
+ | 服务 | 功能 |
42
+ |------|------|
43
+ | PrinterService | 打印机配置 |
44
+ | PaymentMethodService | 支付方式 |
45
+ | CategoryService | 分类管理 |
46
+ | MenuService | 菜单配置 |
47
+
48
+ ## UI 应用架构建议
49
+
50
+ 使用本库的 UI 应用典型结构:
51
+
52
+ ```
53
+ app/
54
+ ├── views/
55
+ │ ├── pos/ # POS 页面
56
+ │ ├── management/ # 管理页面
57
+ │ ├── settings/ # 设置页面
58
+ │ └── reporting/ # 报表页面
59
+ ├── stores/ # 状态管理
60
+ └── services/ # 服务调用层
61
+ ```
62
+
63
+ ## 服务调用示例
64
+
65
+ ```typescript
66
+ import { ServiceFactory, InvoiceService } from '@posx/core';
67
+
68
+ // 初始化服务工厂
69
+ const factory = await ServiceFactory.init(options, window);
70
+
71
+ // 获取服务
72
+ const invoiceService = await factory.getServiceByName('Invoice');
73
+
74
+ // 使用服务
75
+ const invoice = await invoiceService.getOne(uid);
76
+ ```
77
+
78
+ ## 相关文档
79
+
80
+ - [PROJECT_OVERVIEW.md](./PROJECT_OVERVIEW.md) - 项目总览
81
+ - [02_CORE_BUSINESS.md](./02_CORE_BUSINESS.md) - 核心业务逻辑
82
+ - [05_DATA_LAYER.md](./05_DATA_LAYER.md) - 数据层