<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>金融系统 on Saiga</title>
    <link>http://localhost:1313/tags/%E9%87%91%E8%9E%8D%E7%B3%BB%E7%BB%9F/</link>
    <description>Recent content in 金融系统 on Saiga</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <managingEditor>wuwenzen@outlook.com (wuwj)</managingEditor>
    <webMaster>wuwenzen@outlook.com (wuwj)</webMaster>
    <lastBuildDate>Fri, 05 Sep 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://localhost:1313/tags/%E9%87%91%E8%9E%8D%E7%B3%BB%E7%BB%9F/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>金融级流程页面的稳定性设计：草稿、断点恢复与幂等提交</title>
      <link>http://localhost:1313/posts/2025-09-05-fintech-flow-draft-recovery-idempotency/</link>
      <pubDate>Fri, 05 Sep 2025 00:00:00 +0000</pubDate><author>wuwenzen@outlook.com (wuwj)</author>
      <guid>http://localhost:1313/posts/2025-09-05-fintech-flow-draft-recovery-idempotency/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;金融业务系统中的流程页面常见特点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;多步骤（信息填写、声明确认、材料上传、结果确认）&lt;/li&gt;&#xA;&lt;li&gt;强状态依赖（前置条件与联动校验）&lt;/li&gt;&#xA;&lt;li&gt;允许中断（网络、切换页面、超时、权限刷新）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;流程页一旦不稳定，会直接带来：重复提交、数据丢失、用户放弃率上升。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-草稿体系让中断变成常态能力&#34;&gt;1. 草稿体系：让中断变成常态能力&lt;/h2&gt;&#xA;&lt;h3 id=&#34;本地草稿默认&#34;&gt;本地草稿（默认）&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;保存频率：输入节流 1–2 秒&lt;/li&gt;&#xA;&lt;li&gt;存储：localStorage/IndexedDB（按体量选择）&lt;/li&gt;&#xA;&lt;li&gt;过期：按时间或版本号过期，避免脏数据长期存在&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;服务端草稿可选&#34;&gt;服务端草稿（可选）&lt;/h3&gt;&#xA;&lt;p&gt;适用于：换设备继续、跨端协作、需要留痕的场景。&lt;/p&gt;&#xA;&lt;p&gt;建议组合策略：本地即时保存 + 步骤完成时服务端持久化。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-断点恢复最小可用状态模型&#34;&gt;2. 断点恢复：最小可用状态模型&lt;/h2&gt;&#xA;&lt;p&gt;建议状态模型包含：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;当前步骤 step&lt;/li&gt;&#xA;&lt;li&gt;已完成步骤 completedSteps&lt;/li&gt;&#xA;&lt;li&gt;草稿数据 draft&lt;/li&gt;&#xA;&lt;li&gt;最近保存时间 lastSavedAt&lt;/li&gt;&#xA;&lt;li&gt;版本号 schemaVersion（字段变更时用于迁移）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;页面进入时：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;检测草稿是否存在&lt;/li&gt;&#xA;&lt;li&gt;校验版本号，必要时做迁移/清理&lt;/li&gt;&#xA;&lt;li&gt;恢复到上次步骤并回显数据&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;3-幂等提交避免重复提交与脏数据&#34;&gt;3. 幂等提交：避免重复提交与脏数据&lt;/h2&gt;&#xA;&lt;p&gt;幂等通常需要前后端配合，但前端可以先做三件事：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;提交按钮防抖与禁用（loading 状态）&lt;/li&gt;&#xA;&lt;li&gt;为关键请求生成 &lt;code&gt;idempotencyKey&lt;/code&gt;（一次提交一次 key）&lt;/li&gt;&#xA;&lt;li&gt;请求失败时明确失败原因与可重试策略&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;幂等 key 的建议组成：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;用户标识（脱敏）&lt;/li&gt;&#xA;&lt;li&gt;业务对象 id（如流程实例 id）&lt;/li&gt;&#xA;&lt;li&gt;时间窗口（例如分钟级）&lt;/li&gt;&#xA;&lt;li&gt;随机盐&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;4-校验与提示让用户知道为什么不能继续&#34;&gt;4. 校验与提示：让用户知道“为什么不能继续”&lt;/h2&gt;&#xA;&lt;p&gt;建议将校验分为：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;字段级（即时/离焦）&lt;/li&gt;&#xA;&lt;li&gt;步骤级（提交前聚合）&lt;/li&gt;&#xA;&lt;li&gt;流程级（前置条件、状态校验）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;错误展示策略：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;顶部给错误概览&lt;/li&gt;&#xA;&lt;li&gt;定位第一个错误并滚动到字段&lt;/li&gt;&#xA;&lt;li&gt;提示文案采用“动作 + 原因”结构（可执行）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;5-可观测性关键链路必须可追踪&#34;&gt;5. 可观测性：关键链路必须可追踪&lt;/h2&gt;&#xA;&lt;p&gt;流程页建议至少埋三类指标：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;成功率：每步通过率、最终提交成功率&lt;/li&gt;&#xA;&lt;li&gt;失败分布：失败原因码、接口错误码&lt;/li&gt;&#xA;&lt;li&gt;中断点：用户在哪一步退出/超时/刷新&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;并用 traceId 串联前后端日志，方便排查“为什么卡在某一步”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>规则 &#43; AI：金融系统提示与说明文案的可控生成方案</title>
      <link>http://localhost:1313/posts/2025-06-15-ai-assisted-fintech-copy-and-hints/</link>
      <pubDate>Sun, 15 Jun 2025 00:00:00 +0000</pubDate><author>wuwenzen@outlook.com (wuwj)</author>
      <guid>http://localhost:1313/posts/2025-06-15-ai-assisted-fintech-copy-and-hints/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;金融系统的提示与说明文案通常具备三个特征：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;高频：表单校验、流程阻断、异常提示随处可见&lt;/li&gt;&#xA;&lt;li&gt;高一致性要求：不同页面需要同口径&lt;/li&gt;&#xA;&lt;li&gt;变更成本高：规则变了，文案要跟着同步&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;AI 可以提升“生成与维护效率”，但必须保证输出可控、可审计、可回退。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;核心原则规则负责判断ai-负责表达&#34;&gt;核心原则：规则负责判断，AI 负责表达&lt;/h2&gt;&#xA;&lt;h3 id=&#34;判断层输出结构化事实&#34;&gt;判断层输出结构化事实&lt;/h3&gt;&#xA;&lt;p&gt;判断层输出类似：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;code&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FIELD_REQUIRED&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;severity&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;high&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;facts&amp;#34;&lt;/span&gt;: { &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;field&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;联系地址&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;step&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;基本信息&amp;#34;&lt;/span&gt; },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;actions&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;补全字段&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;返回修改&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;表达层仅消费结构化事实&#34;&gt;表达层仅消费结构化事实&lt;/h3&gt;&#xA;&lt;p&gt;AI 的输入仅包含：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;code / severity / facts / actions&lt;/li&gt;&#xA;&lt;li&gt;已批准短语库（approved phrases）&lt;/li&gt;&#xA;&lt;li&gt;输出格式约束（字数、必含字段名、禁用词）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;AI 不允许：新增事实、改写关键字段名、改变严重等级。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;一套可落地的生成链路&#34;&gt;一套可落地的生成链路&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;规则系统产出结构化结果（可测试）&lt;/li&gt;&#xA;&lt;li&gt;模板生成“骨架文案”（可兜底）&lt;/li&gt;&#xA;&lt;li&gt;AI 在骨架上做表达优化（可选）&lt;/li&gt;&#xA;&lt;li&gt;输出校验：禁用词、字段覆盖、长度与格式&lt;/li&gt;&#xA;&lt;li&gt;失败即回退到模板文案，并记录日志&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;文案治理短语库与术语表的作用&#34;&gt;文案治理：短语库与术语表的作用&lt;/h2&gt;&#xA;&lt;p&gt;很多“口径问题”不是 AI 造成的，而是系统本身没有统一表达。&lt;/p&gt;&#xA;&lt;p&gt;建议建设两类资产：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;术语表：名词统一（字段名、步骤名、产品名）&lt;/li&gt;&#xA;&lt;li&gt;短语库：标准句式（建议、引导、阻断提示）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;AI 的主要任务是：在短语库与结构化事实之间“组合与改写”，而不是自由发挥。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;前端落地建议&#34;&gt;前端落地建议&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;封装统一接口：&lt;code&gt;hintService.getHints(context)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;超时与降级：AI 超时直接展示模板结果&lt;/li&gt;&#xA;&lt;li&gt;缓存：相同 &lt;code&gt;code + facts&lt;/code&gt; 可缓存一段时间&lt;/li&gt;&#xA;&lt;li&gt;UI 明确：高风险提示使用 Banner/Modal，低风险使用 Inline/Toast&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;最小评测集让效果可验证&#34;&gt;最小评测集：让效果可验证&lt;/h2&gt;&#xA;&lt;p&gt;按提示码准备样例集：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;缺失字段&lt;/li&gt;&#xA;&lt;li&gt;条件必填&lt;/li&gt;&#xA;&lt;li&gt;流程阻断&lt;/li&gt;&#xA;&lt;li&gt;异常错误码解释&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;评估维度：&lt;/p&gt;</description>
    </item>
    <item>
      <title>金融业务系统的前端权限与操作可追溯：设计要点与落地方式</title>
      <link>http://localhost:1313/posts/2025-03-25-fintech-frontend-permission-and-audit/</link>
      <pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate><author>wuwenzen@outlook.com (wuwj)</author>
      <guid>http://localhost:1313/posts/2025-03-25-fintech-frontend-permission-and-audit/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;在金融业务系统中，“能不能做”与“做了什么”通常同等重要：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;权限需要细粒度（页面、模块、动作）&lt;/li&gt;&#xA;&lt;li&gt;高风险操作需要二次确认与留痕&lt;/li&gt;&#xA;&lt;li&gt;线上问题需要可追溯（谁、在何时、做了什么）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;前端并非审计的最终来源，但前端是“入口层”，对降低误操作与提升可追溯性非常关键。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-权限模型动作权限作为最小单元&#34;&gt;1. 权限模型：动作权限作为最小单元&lt;/h2&gt;&#xA;&lt;p&gt;推荐以“动作权限”作为最小单元（而不是只做菜单/页面）：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;resource&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;order:review&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;actions&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;view&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;approve&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;reject&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;export&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;落地到前端的三层控制：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;路由守卫：控制页面是否可进入&lt;/li&gt;&#xA;&lt;li&gt;组件/指令：控制按钮、入口是否可见/可用&lt;/li&gt;&#xA;&lt;li&gt;请求层兜底：对敏感接口做二次校验（避免绕过 UI）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-操作风险分级不同级别用不同交互&#34;&gt;2. 操作风险分级：不同级别用不同交互&lt;/h2&gt;&#xA;&lt;p&gt;建议对操作做风险分级（示例）：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;低风险：查询、查看详情&lt;/li&gt;&#xA;&lt;li&gt;中风险：提交、发起流程、修改关键字段&lt;/li&gt;&#xA;&lt;li&gt;高风险：审批通过、批量处理、导出敏感数据&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;不同级别对应不同交互策略：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;中风险：二次确认 + 明确影响范围&lt;/li&gt;&#xA;&lt;li&gt;高风险：强确认（输入关键字/再次校验）+ 明确告知留痕&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;3-操作留痕前端如何参与可追溯&#34;&gt;3. 操作留痕：前端如何参与“可追溯”&lt;/h2&gt;&#xA;&lt;p&gt;前端侧建议做三件事：&lt;/p&gt;&#xA;&lt;h3 id=&#34;31-为关键动作生成-traceid&#34;&gt;3.1 为关键动作生成 traceId&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;每次关键操作生成 &lt;code&gt;traceId&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;随请求携带到后端&lt;/li&gt;&#xA;&lt;li&gt;前后端日志用同一 traceId 串联&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;32-标准化审计字段脱敏&#34;&gt;3.2 标准化审计字段（脱敏）&lt;/h3&gt;&#xA;&lt;p&gt;建议上报结构化字段：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;action（动作编码）&lt;/li&gt;&#xA;&lt;li&gt;resource（资源编码）&lt;/li&gt;&#xA;&lt;li&gt;targetId（业务对象 id）&lt;/li&gt;&#xA;&lt;li&gt;result（success/fail）&lt;/li&gt;&#xA;&lt;li&gt;reason（失败原因码）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;避免：把敏感字段明文写入日志/埋点。&lt;/p&gt;&#xA;&lt;h3 id=&#34;33-失败也要可追溯&#34;&gt;3.3 失败也要可追溯&lt;/h3&gt;&#xA;&lt;p&gt;很多事故来自失败重试与重复提交：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;失败原因要可读（错误码映射）&lt;/li&gt;&#xA;&lt;li&gt;可操作指引要明确（下一步做什么）&lt;/li&gt;&#xA;&lt;li&gt;必要时提供“一键复制 traceId”入口，方便支持排查&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;4-误操作防护前端的最后一道门&#34;&gt;4. 误操作防护：前端的“最后一道门”&lt;/h2&gt;&#xA;&lt;p&gt;常见防护手段：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;按钮防抖 + 请求幂等 key（避免重复提交）&lt;/li&gt;&#xA;&lt;li&gt;表单关键字段修改提示（脏数据提示）&lt;/li&gt;&#xA;&lt;li&gt;高风险操作的预检查（权限、状态、前置条件）&lt;/li&gt;&#xA;&lt;li&gt;批量操作的预览（影响范围、条数、筛选条件回显）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;5-可维护性权限与路由不要绑死在页面&#34;&gt;5. 可维护性：权限与路由不要绑死在页面&lt;/h2&gt;&#xA;&lt;p&gt;建议将权限控制抽象成“能力层”：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
