TallyNote 本地优先报销账本架构

TallyNote 本地优先报销账本架构 由 Archify 生成的架构图。 使用者 / 管理员 · Chrome 浏览器 · 架构组件 使用者 / 管理员 Chrome 浏览器 React 工作台 · React 19 + Vite · TallyNote 单实例本地运行时(localhost / Docker) · 桌面优先 React 工作台 React 19 + Vite 桌面优先 Fastify REST API · /api/* + 静态托管 · TallyNote 单实例本地运行时(localhost / Docker) › 受保护 API 边界 · 单进程入口 Fastify REST API /api/* + 静态托管 单进程入口 认证与请求防护 · Argon2id · Cookie · CSRF · TallyNote 单实例本地运行时(localhost / Docker) › 受保护 API 边界 · HttpOnly / Origin 认证与请求防护 Argon2id · Cookie · CSRF HttpOnly / Origin 账目业务服务 · 筛选 · 状态 · 乐观锁 · TallyNote 单实例本地运行时(localhost / Docker) › 受保护 API 边界 · 至少一张凭证 账目业务服务 筛选 · 状态 · 乐观锁 至少一张凭证 SQLite + Drizzle · WAL · 外键 · 事务 · TallyNote 单实例本地运行时(localhost / Docker) · 同机持久化 SQLite + Drizzle WAL · 外键 · 事务 同机持久化 附件流水线 · staging · 内容识别 · 晋级 · TallyNote 单实例本地运行时(localhost / Docker) › 受保护 API 边界 · 20 MB / 文件 附件流水线 staging · 内容识别 · 晋级 20 MB / 文件 本地数据文件系统 · files / staging / exports · TallyNote 单实例本地运行时(localhost / Docker) · 同一卷 · UUID 路径 本地数据文件系统 files / staging / exports 同一卷 · UUID 路径 异步导出构建器 · Excel · ZIP · manifest · TallyNote 单实例本地运行时(localhost / Docker) › 受保护 API 边界 · 会话绑定任务 异步导出构建器 Excel · ZIP · manifest 会话绑定任务 审计子系统 · 追加写入 · 前后值 · 请求 ID · TallyNote 单实例本地运行时(localhost / Docker) › 受保护 API 边界 · 只读查询 审计子系统 追加写入 · 前后值 · 请求 ID 只读查询 管理员管理 · 初始化 · 停用 · 重置 · TallyNote 单实例本地运行时(localhost / Docker) › 受保护 API 边界 · 最后管理员保护 管理员管理 初始化 · 停用 · 重置 最后管理员保护 启动清理与恢复 · 孤儿文件 · 过期任务 · 会话 · TallyNote 单实例本地运行时(localhost / Docker) · 每 60 秒 + 重启 启动清理与恢复 孤儿文件 · 过期任务 · 会话 每 60 秒 + 重启 浏览器交互 HTTP / REST Cookie + CSRF / Origin 账目路由 SQLite transaction multipart 上传 staging → atomic promote snapshot → async job 快照读取 ZIP / Excel / manifest 操作审计 管理员管理 孤儿文件 / 过期任务 TallyNote 单实例本地运行时(localhost / Docker) 受保护 API 边界 图例 前端 后端 数据库 云服务 安全 外部系统

请求与数据

  • • 前端通过统一 API 客户端携带会话 Cookie 和 CSRF 令牌
  • • 账目写入、附件元数据和审计在 SQLite 事务内保持一致

文件可靠性

  • • 附件先落 staging,完成格式、大小和内容校验后原子晋级
  • • 失败路径删除已晋级字节,启动时继续清理孤儿文件

导出与治理

  • • 导出冻结不可变快照,后台生成 Excel、ZIP 和可选 manifest
  • • 管理员变更、记录操作、附件和导出都进入只读审计日志