Przeglądaj źródła

docs: 48h 学习复盘 deck + 采集素材(混沌 AI 院 study-report)

Co-Authored-By: Claude <noreply@anthropic.com>
yolanda 1 tydzień temu
commit
e61e93c7d7

+ 369 - 0
48h学习复盘_yolanda.html

@@ -0,0 +1,369 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>48 小时学习复盘 · 从 SOP 到组织级系统 · yolanda</title>
+<style>
+:root{
+  --ink:#1c2733; --soft:#4a5a6a; --mute:#8494a4; --line:#dde5ec;
+  --brand:#0f4c81; --brand-deep:#0b3a63; --brand-soft:#eaf2f9;
+  --green:#1e7d4f; --green-soft:#e6f4ec;
+  --amber:#9a6b0a; --amber-soft:#fbf3e0;
+  --red:#b03a2e; --red-soft:#fbeae8;
+  --paper:#f7f9fb; --card:#ffffff;
+}
+*{box-sizing:border-box;margin:0;padding:0}
+html,body{height:100%}
+body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;background:#e8edf2;color:var(--ink)}
+.deck{position:relative;width:100%;height:100vh;overflow:hidden}
+.slide{position:absolute;inset:0;display:none;flex-direction:column;background:var(--paper);
+  padding:56px 84px 84px;overflow:hidden}
+.slide.active{display:flex;animation:fadein .35s ease}
+@keyframes fadein{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
+.kicker{font-size:12px;letter-spacing:.28em;color:var(--brand);text-transform:uppercase;margin-bottom:10px;font-weight:600}
+h1{font-size:44px;line-height:1.25;font-weight:700;color:var(--brand-deep)}
+h2{font-size:32px;line-height:1.3;font-weight:700;color:var(--brand-deep);margin-bottom:6px}
+.sub{font-size:16px;color:var(--soft);margin-top:12px;line-height:1.8}
+.foot{position:absolute;left:84px;right:84px;bottom:26px;display:flex;justify-content:space-between;
+  font-size:11.5px;color:var(--mute);border-top:1px solid var(--line);padding-top:10px}
+.nav{position:fixed;right:28px;bottom:24px;display:flex;gap:8px;z-index:50}
+.nav button{width:44px;height:44px;border-radius:50%;border:1px solid var(--line);background:#fff;
+  font-size:18px;cursor:pointer;color:var(--brand);box-shadow:0 2px 10px rgba(11,58,99,.12)}
+.nav button:hover{background:var(--brand-soft)}
+.pager{position:fixed;left:28px;bottom:34px;font-size:12.5px;color:var(--mute);z-index:50;
+  background:#fff;padding:5px 14px;border-radius:20px;border:1px solid var(--line)}
+.progress{position:fixed;top:0;left:0;height:3px;background:var(--brand);z-index:60;transition:width .3s}
+.grid2{display:grid;grid-template-columns:1fr 1fr;gap:26px;margin-top:26px}
+.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:26px}
+.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:26px}
+.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:22px 24px}
+.card h4{font-size:15px;color:var(--brand-deep);margin-bottom:8px}
+.card p,.card li{font-size:13.5px;color:var(--soft);line-height:1.75}
+.card ul{margin-left:18px}
+.num{font-size:38px;font-weight:800;color:var(--brand);font-family:ui-monospace,Menlo,monospace}
+.num small{font-size:14px;color:var(--mute);font-weight:400}
+.stat-l{font-size:12.5px;color:var(--mute);margin-top:4px}
+.chip{display:inline-block;font-size:12px;font-weight:600;padding:3px 12px;border-radius:20px;margin:0 6px 6px 0}
+.c-green{background:var(--green-soft);color:var(--green)}
+.c-amber{background:var(--amber-soft);color:var(--amber)}
+.c-red{background:var(--red-soft);color:var(--red)}
+.c-blue{background:var(--brand-soft);color:var(--brand)}
+.big-quote{font-size:21px;line-height:1.9;color:var(--ink);border-left:5px solid var(--brand);
+  padding:8px 0 8px 26px;margin-top:30px}
+.big-quote b{color:var(--brand-deep)}
+.frame{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;
+  box-shadow:0 4px 18px rgba(11,58,99,.08)}
+.frame iframe{width:100%;border:0;background:#fff}
+.timeline{position:relative;margin-top:30px;padding-left:26px}
+.timeline:before{content:'';position:absolute;left:7px;top:6px;bottom:6px;width:2px;background:var(--line)}
+.tl-item{position:relative;margin-bottom:20px}
+.tl-item:before{content:'';position:absolute;left:-25px;top:6px;width:12px;height:12px;border-radius:50%;
+  background:var(--brand);border:2px solid #fff;box-shadow:0 0 0 2px var(--brand-soft)}
+.tl-item .t{font-size:12px;color:var(--brand);font-weight:700;font-family:ui-monospace,Menlo,monospace}
+.tl-item .h{font-size:15.5px;font-weight:700;color:var(--ink);margin:2px 0}
+.tl-item .d{font-size:13px;color:var(--soft);line-height:1.7}
+.flow{display:flex;align-items:stretch;gap:0;margin-top:30px}
+.flow .step{flex:1;background:var(--card);border:1px solid var(--line);padding:18px 16px;position:relative}
+.flow .step:first-child{border-radius:10px 0 0 10px}
+.flow .step:last-child{border-radius:0 10px 10px 0}
+.flow .step:not(:last-child):after{content:'→';position:absolute;right:-11px;top:42%;z-index:2;
+  width:22px;height:22px;background:var(--brand);color:#fff;border-radius:50%;display:flex;
+  align-items:center;justify-content:center;font-size:13px}
+.flow .step h5{font-size:14px;color:var(--brand-deep);margin-bottom:6px}
+.flow .step p{font-size:12px;color:var(--soft);line-height:1.65}
+.pain .card{border-left:4px solid var(--red)}
+.gain .card{border-left:4px solid var(--green)}
+.future .card{border-left:4px solid var(--brand)}
+code{font-family:ui-monospace,Menlo,monospace;font-size:12px;background:#eef2f6;padding:1px 6px;border-radius:4px;color:var(--brand-deep)}
+</style>
+</head>
+<body>
+<div class="progress" id="progress"></div>
+<div class="deck" id="deck">
+
+<!-- P1 封面 -->
+<section class="slide active" style="justify-content:center;background:linear-gradient(135deg,#0b3a63 0%,#0f4c81 55%,#1667a8 100%);color:#fff">
+  <div class="kicker" style="color:#9fc0dd">混沌 AI 院 · SKILL-PRESENT · 学习复盘</div>
+  <h1 style="color:#fff;font-size:52px">48 小时,从一份人工 SOP<br>到一套组织级 AI 交付系统</h1>
+  <div class="sub" style="color:#c9dcec;font-size:18px;margin-top:24px">
+    技能是种子,系统是大树 —— 一次任务的处理逻辑,就是未来系统的业务流原型
+  </div>
+  <div style="margin-top:44px;display:flex;gap:14px;flex-wrap:wrap">
+    <span class="chip" style="background:rgba(255,255,255,.14);color:#fff">复盘人:yolanda</span>
+    <span class="chip" style="background:rgba(255,255,255,.14);color:#fff">2026-09-12 → 09-13</span>
+    <span class="chip" style="background:rgba(255,255,255,.14);color:#fff">19 commits · 26136 份单证 · 13076 票入云</span>
+  </div>
+  <div class="foot" style="border-color:rgba(255,255,255,.2);color:#9fc0dd"><span>study-report</span><span>→ 方向键 / 空格翻页</span></div>
+</section>
+
+<!-- P2 48h 数据全景 -->
+<section class="slide">
+  <div class="kicker">DATA PANORAMA</div>
+  <h2>48 小时数据全景</h2>
+  <div class="sub">一条主线:人工 SOP → AI 技能 → 组织级看板 → 企业云原生 → 同事分发</div>
+  <div class="grid4">
+    <div class="card" style="text-align:center"><div class="num">19</div><div class="stat-l">Git 提交(4 次踩坑 fix)</div></div>
+    <div class="card" style="text-align:center"><div class="num">26136</div><div class="stat-l">份单证 PDF 全量核查</div></div>
+    <div class="card" style="text-align:center"><div class="num">13076</div><div class="stat-l">票核查结论入企业云库</div></div>
+    <div class="card" style="text-align:center"><div class="num">4</div><div class="stat-l">轮跑批在看板实时可视</div></div>
+  </div>
+  <div class="grid4">
+    <div class="card" style="text-align:center"><div class="num">3<small> 代</small></div><div class="stat-l">技能演进 v1.0 → v2.0.2 → v3.0</div></div>
+    <div class="card" style="text-align:center"><div class="num">5<small> 道</small></div><div class="stat-l">发布门禁全通过(Project→STS→OBS→CDN→回归)</div></div>
+    <div class="card" style="text-align:center"><div class="num">7<small> 次</small></div><div class="stat-l">人工反馈驱动规则修正</div></div>
+    <div class="card" style="text-align:center"><div class="num">10<small> 条</small></div><div class="stat-l">平台交付登记(deliver)</div></div>
+  </div>
+  <div class="foot"><span>48h 复盘 · 数据全景</span><span>来源:AgentTaskStatus / AgentDeliverable / Gogs / 企业云库</span></div>
+</section>
+
+<!-- P3 交付物墙 -->
+<section class="slide">
+  <div class="kicker">DELIVERY WALL</div>
+  <h2>交付物墙</h2>
+  <div class="sub">在线项目(标记 ★):核查工作台 —— 数据实时来自企业云数据库</div>
+  <div class="grid2" style="margin-top:20px">
+    <div class="frame"><div style="padding:8px 14px;font-size:12px;color:var(--mute);background:#f0f4f8">★ 在线项目 · 核查工作台 · app.fmode.cn/dev/LUqklr2VEN</div>
+      <iframe src="https://app.fmode.cn/dev/LUqklr2VEN/index.html" style="height:300px"></iframe></div>
+    <div class="frame"><div style="padding:8px 14px;font-size:12px;color:var(--mute);background:#f0f4f8">HTML 成果 · 首批核查报告</div>
+      <iframe src="https://app.fmode.cn/dev/LUqklr2VEN/outputs/%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE1/%E6%A0%B8%E6%9F%A5%E6%8A%A5%E5%91%8A.html" style="height:300px"></iframe></div>
+  </div>
+  <div class="grid2" style="margin-top:18px">
+    <div class="frame"><div style="padding:8px 14px;font-size:12px;color:var(--mute);background:#f0f4f8">HTML 成果 · AI 技能 SOP(三阶段版)</div>
+      <iframe src="https://git.fmode.cn/fmode-15801996548/skill-yolanda-share/raw/branch/main/2026-09-12-%E6%8A%A5%E5%85%B3%E6%96%87%E6%A1%A3%E9%A6%96%E6%89%B9%E6%A0%B8%E6%9F%A5/AI%E6%8A%80%E8%83%BDSOP_%E4%B8%89%E9%98%B6%E6%AE%B5%E7%89%88.html" style="height:240px"></iframe></div>
+    <div class="card">
+      <h4>其余交付物(下载/在线)</h4>
+      <ul>
+        <li>📊 已核查台账 xlsx(索引/缺件/快照 3 sheet)</li>
+        <li>⚠️ 异常单(5 类异常与处置建议)</li>
+        <li>📖 功能介绍页 · 使用文档(在线)</li>
+        <li>📦 技能安装包 v3.0(同事一键安装)</li>
+        <li>🗂 skill-yolanda 私有仓 + share 公开仓</li>
+      </ul>
+    </div>
+  </div>
+  <div class="foot"><span>48h 复盘 · 交付物墙</span><span>iframe 实嵌在线成果</span></div>
+</section>
+
+<!-- P4 工作时刻线 -->
+<section class="slide">
+  <div class="kicker">TIMELINE</div>
+  <h2>工作时刻线 · 48 小时</h2>
+  <div class="timeline">
+    <div class="tl-item"><div class="t">09-12 上午</div><div class="h">人工 SOP → AI 技能(三阶段重构)</div>
+      <div class="d">输入材料/程序化处理/输出成果;首批 5 票核查跑通;确认 4 条企业口径(19 位报关单号、人工补录、入账年度、报关单号归档键)</div></div>
+    <div class="tl-item"><div class="t">09-12 下午</div><div class="h">技能 v2.0.2 · 数据库化升级</div>
+      <div class="d">数据源切 file_index.db;页数数据集自适应;26136 份 PDF 全量核查(3023+10043 票);旧布局双回归通过</div></div>
+    <div class="tl-item"><div class="t">09-12 晚</div><div class="h">四阶段交付闭环 · 看板发布</div>
+      <div class="d">现状盘点→看板设计→TDD 实现→发布上线;Project→STS→OBS→CDN→线上回归五门禁独立汇报,全程零云账户</div></div>
+    <div class="tl-item"><div class="t">09-13 全天</div><div class="h">企业云原生接入 + 技能分发体系</div>
+      <div class="d">对话式验证码登录→领取企业云→建 4 表→13076 票入库;销项写通道(匿名会话+CLP);report_to_cloud.py 自动上报;看板一键安装指令</div></div>
+    <div class="tl-item"><div class="t">09-13 尾声</div><div class="h">人工发现缺件 · 人机互证</div>
+      <div class="d">用户人工发现数据2 缺 4 份文件 → 机器复核确认 → 看板状态修正(绿3019/黄4)→ 快照时效性规则固化</div></div>
+  </div>
+  <div class="foot"><span>48h 复盘 · 时刻线</span><span>19 commits 串起全部节点</span></div>
+</section>
+
+<!-- P5 过去 · 痛点 -->
+<section class="slide pain">
+  <div class="kicker">PAST · 复盘人自述</div>
+  <h2>过去:企业 AI 落地,为什么不原生、不性感</h2>
+  <div class="grid2">
+    <div class="card"><h4>🔐 权限与数据安全的墙</h4>
+      <p>想用 AI 碰业务数据,第一个问题永远是"数据给出去安全吗、权限怎么控"。没有可信赖的权限模型,AI 就被锁在保险柜外面。</p>
+      <p style="margin-top:6px">→ 这两天找到了答案:<b>CLP 表级权限 + 匿名会话 + 平台代发 STS + masterKey 永不出服务器</b>,安全不是不用 AI 的理由,而是设计出来的。</p></div>
+    <div class="card"><h4>🔧 AI 只当简单工具 · 一次性脚本</h4>
+      <p>用完即弃的对话、复制粘贴的脚本,没有沉淀、没有版本、没有复用——换个同事、换个批次,一切从零再来。</p>
+      <p style="margin-top:6px">→ 这两天找到了答案:<b>技能 = SKILL.md + 脚本 + 测试 + 版本链</b>,一次任务的处理逻辑固化为可分发的组织资产。</p></div>
+    <div class="card"><h4>👻 "被蒸馏"焦虑</h4>
+      <p>大家担心自己的经验、套路被 AI 学走后自己就没价值了,于是不敢用、不愿教,AI 落地停在演示层。</p>
+      <p style="margin-top:6px">→ 这两天找到了答案:<b>经验写进技能的人才是主人</b>——SOP 技能化让个人经验变成组织能力,人往更高处走。</p></div>
+    <div class="card"><h4>🫥 AI 干的活没人看得见</h4>
+      <p>AI 埋头跑完,产出散落在本地和聊天记录里,团队无感知、管理者无抓手、协作者无从跟进。</p>
+      <p style="margin-top:6px">→ 这两天找到了答案:<b>任务四态上报 + 云看板</b>,缺件红黄绿一屏可见,销项版本链可追溯。</p></div>
+  </div>
+  <div class="foot"><span>48h 复盘 · 过去(痛点四象)</span><span>每个痛点,这两天都给出了对应解法</span></div>
+</section>
+
+<!-- P6 现在 · 收获(人被放大) -->
+<section class="slide gain">
+  <div class="kicker">NOW · 复盘人自述</div>
+  <h2>现在:AI 可以数倍放大人的能力</h2>
+  <div class="big-quote">
+    "AI 可以<b>数倍放大人的能力</b>,人可以被释放出来,去思考更多可能性。<br>
+    <b>AI 已来,没法回避,必须积极研究 AI</b>,为自己和同事们赋能。"
+  </div>
+  <div class="grid3" style="margin-top:34px">
+    <div class="card"><h4>放大 · 体现在数字里</h4>
+      <ul><li>人工逐票开 PDF 比对,3023 票约需 <b>一周</b>;管线 <b>几分钟</b></li>
+      <li>一个人 48h 完成 SOP→技能→系统→分发的完整闭环</li>
+      <li>26136 份单证 100% 全检,人工抽检都做不到的覆盖率</li></ul></div>
+    <div class="card"><h4>释放 · 人去做机器做不了的事</h4>
+      <ul><li>定口径:19 位报关单号、归档用报关单号——<b>业务判断</b></li>
+      <li>抓异常:人工一眼看出 4 份缺件,倒逼机器修正快照盲区</li>
+      <li>定方向:哪些岗位值得技能化、系统该泛化到哪一级</li></ul></div>
+    <div class="card"><h4>互证 · 人机协作的新形态</h4>
+      <ul><li>机器全量扫、人扫机器的盲区;人发现的每个问题都<b>回流成规则</b></li>
+      <li>4 次踩坑 fix 全部沉淀为测试用例与平台笔记</li>
+      <li>信任在"人机互证"里建立,而不是在口号里</li></ul></div>
+  </div>
+  <div class="foot"><span>48h 复盘 · 现在(收获)</span><span>素材关联:19 commits / 缺件重核 / 4 条企业口径</span></div>
+</section>
+
+<!-- P7 现在 · 踩坑即学费 -->
+<section class="slide">
+  <div class="kicker">NOW · 4 次踩坑,4 堂课</div>
+  <h2>踩坑即学费:19 次提交里的 4 次 fix</h2>
+  <div class="grid2" style="margin-top:22px">
+    <div class="card"><h4>① OBS 把 .mjs 存成二进制流</h4>
+      <p>ES Module 被浏览器 MIME 检查拒载,页面永远"加载中"。<br>→ <b>课:托管环境的约束是系统的一部分</b>,JS 内联根治。</p></div>
+    <div class="card"><h4>② 文本替换式改代码的连环债</h4>
+      <p>类定义重复 + 函数丢失,页面卡死;<b>课:改产物不如改源,构建要幂等</b>,一次成型 + 全链路模拟验证再发布。</p></div>
+    <div class="card"><h4>③ 防缓存参数打挂云接口</h4>
+      <p>URL 时间戳被 Parse 判非法(code 102)。<br>→ <b>课:对接第三方前先探参数契约</b>,防缓存走请求头。</p></div>
+    <div class="card"><h4>④ 看板数据是快照,不是实时镜像</h4>
+      <p>文件夹变动后看板不感知,人工发现缺件机器才知道。<br>→ <b>课:快照时效性要显式管理</b>,人工发现 → 机器复核 → 规则固化。</p></div>
+  </div>
+  <div class="sub" style="margin-top:22px">这 4 课全部沉淀进技能 tests/ 目录与平台笔记——下次任何同事装技能,踩坑成本已为零。</div>
+  <div class="foot"><span>48h 复盘 · 现在踩坑学费</span><span>tests/2026-09-12-*.md · 2026-09-13-recheck-by-user.md</span></div>
+</section>
+
+<!-- P8 未来 · 落地方向 -->
+<section class="slide future">
+  <div class="kicker">FUTURE · 复盘人自述</div>
+  <h2>未来:回企业落地与探索的两个方向</h2>
+  <div class="grid2" style="margin-top:26px">
+    <div class="card" style="padding:28px">
+      <h4 style="font-size:17px">方向一 · 岗位 SOP 技能化,全员装技能跑业务</h4>
+      <ul style="margin-top:10px">
+        <li>把报关文档核查的模式复制到<b>财务对账、后勤盘点、行政归档</b>等岗位</li>
+        <li>每个岗位:人工 SOP → 三阶段抽象 → SKILL.md + 管线脚本 → 看板接入</li>
+        <li>同事从看板右上角一键安装,跑完自动上报——<b>组织级 AI 工作台</b></li>
+        <li>已有范本:customs-doc-check v3.0(技能包 + 安装指令 + 上报链路全通)</li>
+      </ul>
+    </div>
+    <div class="card" style="padding:28px">
+      <h4 style="font-size:17px">方向二 · 打通 ERP 与现有系统,让数据流动起来</h4>
+      <ul style="margin-top:10px">
+        <li>从公司 <b>ERP 及其他业务系统提取数据</b>,AI 处理后反哺业务部门</li>
+        <li>范式已验证:file_index.db(3 万文件索引)→ 管线 → 企业云库 → 看板</li>
+        <li>下一步:ERP 接口/导出 → 同样的"数据源适配层 → 三级核查 → 看板"管线</li>
+        <li>权限与安全沿用本次落地的模型(CLP/匿名会话/平台代发 STS)</li>
+      </ul>
+    </div>
+  </div>
+  <div class="sub" style="margin-top:24px">两个方向共用同一套底座:<b>技能沉淀经验 · 看板呈现状态 · 云库承载协作</b>——这正是 48 小时里长出来的系统原型。</div>
+  <div class="foot"><span>48h 复盘 · 未来</span><span>方向一=组织复制 · 方向二=数据贯通</span></div>
+</section>
+
+<!-- P9 未来路径图 -->
+<section class="slide">
+  <div class="kicker">FUTURE · 路径推演</div>
+  <h2>从一次任务到全公司系统:泛化路径已铺好</h2>
+  <div class="flow">
+    <div class="step"><h5>① 单次任务</h5><p>一份台账 + 一批 PDF<br>一次三级核查<br>(已跑通)</p></div>
+    <div class="step"><h5>② 技能固化</h5><p>SKILL.md + 管线<br>版本链 + 测试<br>(v3.0 已发布)</p></div>
+    <div class="step"><h5>③ 多岗位复制</h5><p>财务/后勤/行政<br>同构管线换数据源<br>(范本已就位)</p></div>
+    <div class="step"><h5>④ 多主体云原生</h5><p>Company/Project 主档<br>数据按公司隔离<br>(双主体已验证)</p></div>
+    <div class="step"><h5>⑤ ERP 数据贯通</h5><p>系统取数 → 管线<br>→ 看板 → 业务部门<br>(下一步)</p></div>
+  </div>
+  <div class="grid3" style="margin-top:30px">
+    <div class="card"><h4>数据结构已泛化到位</h4><p>Company→Project→CheckRun→CheckTicket 四级主档 + 去重约束;支撑 N 公司 × N 项目 × 万级票量,无需返工。</p></div>
+    <div class="card"><h4>辅助生态同步长出</h4><p>七件套逐项落位:结果看板✅ 规则库✅ 版本链✅;质量验证/成本核算字段已留,等数据回流。</p></div>
+    <div class="card"><h4>分发即规模</h4><p>看板右上角安装指令 = 技能的"二维码"。每个新同事的接入成本 ≈ 复制粘贴一条指令。</p></div>
+  </div>
+  <div class="foot"><span>48h 复盘 · 未来路径</span><span>技能是种子,系统是大树</span></div>
+</section>
+
+<!-- P10 数据附录 -->
+<section class="slide">
+  <div class="kicker">APPENDIX</div>
+  <h2>数据附录</h2>
+  <div class="grid2" style="margin-top:20px">
+    <div class="card">
+      <h4>平台登记(AgentTaskStatus / AgentDeliverable)</h4>
+      <ul>
+        <li><code>20260912-sop-to-skill</code> · done · SOP→技能三阶段重构</li>
+        <li><code>20260912-skill-repo-init</code> · done · Gogs 开户 + 仓库 + 双支撑技能</li>
+        <li><code>20260912-fix-failed-items</code> · done · 上传通道探测 + 双仓发布</li>
+        <li><code>20260912-skill-v2-db</code> · done · 技能 v2 数据库化</li>
+        <li>deliver × 10(报告×5 / 代码×3 / 数据×2)</li>
+      </ul>
+    </div>
+    <div class="card">
+      <h4>企业云数据库(CheckRun 实测)</h4>
+      <ul>
+        <li>sop/测试数据1 · 主体2000 · 4/5(黄3红1)</li>
+        <li>测试数据2 · 主体2010 · <b>3019/3023</b>(黄4 · 人工重核后)</li>
+        <li>测试数据3 · 主体2010 · <b>10043/10043</b>(全绿)</li>
+        <li>CheckTicket 累计 <b>13076</b> 票 · MisreportPattern 种子 3 条</li>
+      </ul>
+    </div>
+    <div class="card">
+      <h4>仓库与提交</h4>
+      <ul>
+        <li>skill-yolanda(私有):19 commits,v1.0→v3.0 全程</li>
+        <li>skill-yolanda-share(公开):脱敏成果发布</li>
+        <li>key commits:980cc6b 建技能 · eddd560 数据库化 · b80739d 看板 · 420224d 填报 · f11a5ca 看板v2</li>
+      </ul>
+    </div>
+    <div class="card">
+      <h4>在线资产</h4>
+      <ul>
+        <li>★ 看板:app.fmode.cn/dev/LUqklr2VEN/index.html</li>
+        <li>介绍页 / 使用文档(/docs/)</li>
+        <li>技能包:/skill/customs-doc-check-v3.zip</li>
+        <li>发布链:Project <code>LUqklr2VEN</code> · 五门禁通过</li>
+      </ul>
+    </div>
+  </div>
+  <div class="foot"><span>48h 复盘 · 数据附录</span><span>全部数字可在平台与仓库复核</span></div>
+</section>
+
+<!-- P11 结束页 -->
+<section class="slide" style="justify-content:center;align-items:center;text-align:center;background:linear-gradient(135deg,#0b3a63 0%,#0f4c81 60%,#1667a8 100%);color:#fff">
+  <div class="kicker" style="color:#9fc0dd">TAKEAWAY</div>
+  <h1 style="color:#fff;font-size:40px;max-width:900px">
+    把经验写进技能的人,<br>才是 AI 时代的主人。
+  </h1>
+  <div class="sub" style="color:#c9dcec;font-size:17px;margin-top:26px;max-width:760px">
+    48 小时验证了一件事:当人工 SOP 变成技能、技能长成系统、系统连上组织——<br>
+    AI 不再是工具,而是放大每个人能力的杠杆。
+  </div>
+  <div style="margin-top:40px;display:flex;gap:14px;flex-wrap:wrap;justify-content:center">
+    <span class="chip" style="background:rgba(255,255,255,.14);color:#fff">复盘人 yolanda</span>
+    <span class="chip" style="background:rgba(255,255,255,.14);color:#fff">2026-09-13</span>
+    <span class="chip" style="background:rgba(255,255,255,.14);color:#fff">混沌 AI 院 · study-report</span>
+  </div>
+  <div class="foot" style="border-color:rgba(255,255,255,.2);color:#9fc0dd"><span>THANKS · 谢谢观看</span><span>下一步:岗位 SOP 技能化 × ERP 数据贯通</span></div>
+</section>
+
+</div>
+
+<div class="pager" id="pager">1 / 11</div>
+<div class="nav">
+  <button onclick="go(-1)" title="上一页">‹</button>
+  <button onclick="go(1)" title="下一页">›</button>
+</div>
+<script>
+const slides = document.querySelectorAll('.slide');
+let cur = 0;
+function show(i) {
+  cur = Math.max(0, Math.min(slides.length - 1, i));
+  slides.forEach((s, k) => s.classList.toggle('active', k === cur));
+  document.getElementById('pager').textContent = (cur + 1) + ' / ' + slides.length;
+  document.getElementById('progress').style.width = ((cur + 1) / slides.length * 100) + '%';
+}
+function go(d) { show(cur + d); }
+document.addEventListener('keydown', e => {
+  if (['ArrowRight', ' ', 'PageDown'].includes(e.key)) { e.preventDefault(); go(1); }
+  if (['ArrowLeft', 'PageUp'].includes(e.key)) { e.preventDefault(); go(-1); }
+});
+document.addEventListener('click', e => {
+  if (e.target.closest('.frame') || e.target.closest('a') || e.target.closest('button')) return;
+  go(1);
+});
+show(0);
+</script>
+</body>
+</html>

+ 8 - 0
README.md

@@ -0,0 +1,8 @@
+# study-report-yolanda · 48 小时学习复盘
+
+- 报告(翻页 deck):`48h学习复盘_yolanda.html`(浏览器打开,→/空格翻页)
+- 在线版:https://app.fmode.cn/dev/LUqklr2VEN/study-report/48h%E5%AD%A6%E4%B9%A0%E5%A4%8D%E7%9B%98_yolanda.html
+- 在线项目:https://app.fmode.cn/dev/LUqklr2VEN/index.html
+- 素材:materials/(首批核查报告、异常单、AI 技能 SOP、重核记录、平台通道探测)
+
+主线:人工 SOP → AI 技能(v1→v3)→ 组织级看板 → 企业云原生 → 同事分发

+ 30 - 0
materials/2026-09-12-upload-channel-probe.md

@@ -0,0 +1,30 @@
+# 交付物上传通道探测记录 · 2026-09-12
+
+> 目标:给成果 HTML 找到可公开访问的 URL(skill-storage 第0级 404 后的替代通道排查)。
+
+| # | 通道 | 结果 | 根因 |
+|---|---|---|---|
+| 1 | skill-storage 第0级 `POST /api/storage/credentials` | ❌ 404 | 平台未部署该路由(`Cannot POST`) |
+| 2 | 云端 Parse Files API `POST /parse/files/x.html` | ❌ 400 code=130 | 扩展名白名单禁 html/htm;白名单内扩展全部撞上 GridFS 适配器配置损坏(`Invalid scheme, expected mongodb://`) |
+| 3 | Parse base64 JSON 上传 | ❌ 400 | 同上 |
+| 4 | `file-cloud.fmode.cn`(avatar 所在域) | ⚠️ 只读 | openresty+X-Reqid=七牛分发域;匿名读 200,上传 token 接口在本环境全部 404 |
+| 5 | 本地 Studio `localhost:16666 /api/obs/*` | ❌ | 16666 实为 openclaw 网关管理服务(/health 可证),无 obs 路由;JWT 鉴权体系独立于平台 sessionToken |
+| 6 | Gogs raw 直链 | ⚠️ 全站登录 | `REQUIRE_SIGNIN_VIEW=true`,公开仓库 raw 也 302 → /user/login |
+
+## 采行的替代方案
+
+**双仓库发布**:
+- 私有 `skill-yolanda`:全量成果与技能源码(归档正身)
+- 公开 `skill-yolanda-share`:脱敏 HTML 成果(本练习数据为模板假数据,已核无凭据/手机号/业务真实数据)
+- deliver 上报 URL 用 share 仓库链接;企业内用户(浏览器已有 Gogs 登录态)可直接打开
+
+## 待平台修复(堵点上报)
+
+`/api/storage/credentials` 部署后,重跑 `uploader.mjs put` 即可把 share 仓库的 HTML 换成真公开 URL 并补报 deliver(幂等覆盖)。
+
+## 探测中确认可用的能力(复用价值)
+
+- `GET /parse/users/me`(sessionToken 鉴权有效)
+- Parse 三表读写(ncloudmaster + sessionToken)
+- Gogs API 全套(token 鉴权)
+- Gogs 开户幂等接口(重复调用补发 token)

+ 21 - 0
materials/2026-09-13-recheck-by-user.md

@@ -0,0 +1,21 @@
+# 人工发现驱动的重核 · 2026-09-13
+
+## 事件
+用户人工发现测试数据2 缺件:提单缺 21/22、合同缺 24/25(文件编号尾号)。
+机器此前上报为全绿(3023/3023)——因上报的是**核查当时快照**,之后文件被移出文件夹,看板不会自动感知。
+
+## 机器复核结论(legacy 直扫现状)
+| 缺失 | 文件号 | 对应台账行(报关单号) | 状态修正 |
+|---|---|---|---|
+| 提运单 | 1000001021 | 2311111111111110013 | archived → partial |
+| 提运单 | 1000001022 | 2311111111111110014 | archived → partial |
+| 出口合同 | 42000024 | 2311111111111110023 | archived → partial |
+| 出口合同 | 42000025 | 2311111111111110024 | archived → partial |
+
+云端 CheckRun 已更新:绿 3019 / 黄 4;payload 记 missingContract/missingBill 与重核备注。
+
+## 教训与规则固化
+- **看板数据 = 核查时点快照**。数据文件夹是活的,文件挪走后看板不会自动知道。
+- 处置路径:文件夹变动后重跑 `check_pipeline.py --legacy` + 重报(report_to_cloud 将来支持 upsert 同 run)。
+- file_index.db 索引过期问题:目录结构变化(如 输出/→input/)后索引库不会自动感知,需 --legacy 或重新扫描。
+- 【推理假设:用户移走这 4 份文件是转移存档而非丢失;如需找回请从归档区/回收站查】

+ 98 - 0
materials/AI技能SOP_三阶段版.html

@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="zh-CN"><head><meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>AI 技能 SOP · 报关财务文档管理(三阶段版)</title>
+<style>
+body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;max-width:900px;margin:0 auto;
+padding:40px 24px;line-height:1.8;color:#1c2733;background:#f6f8fa;font-size:15px}
+h1{color:#0f4c81;border-bottom:3px solid #0f4c81;padding-bottom:10px}
+h2{color:#0b3a63;border-bottom:2px solid #dde5ec;padding-bottom:6px;margin-top:36px}
+h3{color:#0f4c81}
+table{border-collapse:collapse;width:100%;margin:12px 0;background:#fff;font-size:13.5px}
+th{background:#eaf2f9;color:#0b3a63;padding:8px 12px;border:1px solid #dde5ec;text-align:left}
+td{padding:8px 12px;border:1px solid #e9eef3}
+tr:nth-child(even) td{background:#fbfcfd}
+pre.code{background:#1c2733;color:#d7e3ee;padding:16px;border-radius:8px;overflow-x:auto;font-size:13px}
+blockquote{border-left:4px solid #0f4c81;background:#eaf2f9;margin:12px 0;padding:10px 16px;color:#0b3a63}
+li{margin:4px 0}
+p{color:#4a5a6a}
+footer{margin-top:48px;color:#8494a4;font-size:12.5px;border-top:2px solid #1c2733;padding-top:12px}
+</style></head><body>
+<h1>AI 技能 SOP · 报关财务文档管理(三阶段版)</h1>
+<blockquote>由人工版《报关财务文档管理SOP.html》(V1.0,四环节)重排而来。</blockquote>
+<blockquote>原则:**人工流程中&quot;人挪文件、人盯进度&quot;的动作全部省略;规则与知识全部保留并固化为代码可校验的判定标准。**</blockquote>
+<p>---</p>
+<h2>阶段一 · 输入材料</h2>
+<table>
+<tr><th>接收物</th><th>说明</th><th>本场景实际</th></tr>
+<tr><td>业务台账(必需)</td><td>Excel 等结构化索引,一行一票,含全部关键字段</td><td>`测试数据索引.xlsx`:1006 行,列 = 公司代码 / 入账年度 / 18位报关单号 / Document number / 货运提单号1</td></tr>
+<tr><td>原始单证(必需)</td><td>PDF / 图片,避免长语音长视频</td><td>`input/`:出口合同(发票)1004 份 + 提运单 1003 份,命名 `类型-编号.pdf`</td></tr>
+<tr><td>历史成稿(如有)</td><td>以前的输出样例,作为格式基准</td><td>已提供:编号角标位置(发票 x0≈463, top≈147;提单 x0≈452, top≈46)、归档目录结构</td></tr>
+<tr><td>补充规则(如有)</td><td>企业岗位人员给的判定口径</td><td>未提供,按人工 SOP §3.2/§4 默认值执行并留痕</td></tr>
+</table>
+<p>**省略项(相对人工版)**:§2 收集与下载整环节省略——渠道拉取、邮件抓取、收件箱暂存、当日清点都由人工/系统完成后才进入 AI。AI 不碰&quot;拿文件&quot;,只碰&quot;核文件&quot;。</p>
+<p>**保留规则**:</p>
+<li>索引表是唯一账本,一切以台账为基准做双向核对(台账有文件无 = 缺件;文件有台账无 = 未登记)。</li>
+<li>一票 = 一个 Document number ↔ 一个提单号,两者在台账内一一对应。</li>
+<p>---</p>
+<h2>阶段二 · 程序化处理</h2>
+<p>AI 按&quot;能程序化则程序化&quot;重排人工四环节为一条管线:</p>
+<pre class="code">
+读台账 → 扫描文件区 → [一级 形式核查] → [二级 完备性核查] → [三级 一致性核查] → 生成成品与报告
+</pre>
+<h3>2.1 一级 · 形式核查(对应人工 §4.1 一级,纯程序)</h3>
+<table>
+<tr><th>#</th><th>检查项</th><th>判定标准(代码可算)</th></tr>
+<tr><td>1</td><td>文件可打开</td><td>PDF 解析无异常</td></tr>
+<tr><td>2</td><td>页数完整</td><td>出口合同 = 1 页;提运单 = 2 页(首页单据 + 条款页)</td></tr>
+<tr><td>3</td><td>命名规范</td><td>严格匹配 `^(出口合同\</td><td>提运单)-\d+\.pdf$`</td></tr>
+<tr><td>4</td><td>文件内编号存在</td><td>首页文本层含与文件名一致的编号</td></tr>
+</table>
+<h3>2.2 二级 · 完备性核查(对应人工 §4.1 二级,纯程序)</h3>
+<table>
+<tr><th>#</th><th>检查项</th><th>判定标准</th></tr>
+<tr><td>1</td><td>双向齐套</td><td>台账 1006 个 Document number ↔ 1004 份发票文件;1006 个提单号 ↔ 1003 份提单文件;差集即缺件/未登记清单</td></tr>
+<tr><td>2</td><td>台账字段完整</td><td>每行 5 列非空,报关单号长度 = **19 位**(企业确认口径,2026-09-12),编号唯一</td></tr>
+<tr><td>3</td><td>单证内必填字段</td><td>发票首页含 INVOICE NO / INVOICE DATE / CUSTOMER 等标签行;提单首页含 B.L. No / Vessel / SHIPPED ON BOARD 等关键字段</td></tr>
+</table>
+<h3>2.3 三级 · 一致性核查(对应人工 §4.1 三级,程序 + 记录)</h3>
+<li>**票内一致**:文件名编号 = 文件内角标编号 = 台账该行编号(三方对齐)。</li>
+<li>**票间一致**:发票(Document number)↔ 提单(提单号)通过台账行建立映射,双向存在且唯一。</li>
+<li>差异一律落《差异比对表》,不因&quot;看起来对&quot;而跳过留痕(人工 SOP §4 核查原则)。</li>
+<h3>2.4 省略与替代</h3>
+<table>
+<tr><th>人工动作</th><th>AI 处理</th></tr>
+<tr><td>按票归堆(§3.3-1)</td><td>台账直接给出映射,无需物理归堆</td></tr>
+<tr><td>逐份打开摘录字段(§3.3-2)</td><td>pdfplumber 批量抽取,只取坐标附近的角标编号</td></tr>
+<tr><td>手工命名登记(§3.3-3/4)</td><td>文件名即索引键,输出层重建索引而非誊抄</td></tr>
+<tr><td>主管 20% 抽检(§4.2-4)</td><td>程序 100% 全检,抽检环节由人复核报告即可</td></tr>
+</table>
+<h3>2.5 已探明的模板知识(本测试数据)</h3>
+<li>发票/提单均为**固定模板**:同票不同编号,仅角标数字不同(抽样 20+20 份,去编号签名全部唯一)。</li>
+<li>发票角标:`Document number` 印在 x0≈463, top≈147;文档内 INVOICE NO 字段(41136337)是模板假值,**不可**作为票号依据。</li>
+<li>提单角标:`提单号` 印在 B.L. No 栏(x0≈452, top≈46);输入原始散件的该栏是货代单号(HGHB42455),需以台账为准。</li>
+<li>台账报关单号列实际为 **19 位**(C 列公式自增 `=LEFT(C2,LEN-4)&amp;TEXT(RIGHT(C2,4)+1,&quot;0000&quot;)`),企业确认以实际值为准。</li>
+<li>原始散件 `出口合同_49999999.pdf`、`提运单_HKKK888888.pdf` 不在台账中 → 走人工 SOP §6&quot;未登记&quot;异常。</li>
+<p>---</p>
+<h2>阶段三 · 输出成果</h2>
+<p>有历史成稿则严格仿其格式;本场景历史样例已给(编号角标位置 + 目录结构),输出层如下:</p>
+<table>
+<tr><th>输出物</th><th>内容</th><th>对应人工 SOP</th></tr>
+<tr><td>`output/归档区/&lt;入账年度&gt;/&lt;报关单号&gt;/`</td><td>**以报关单号为归档关键字**(企业确认,2026-09-12),一票一文件夹,发票+提单归堆</td><td>§5.1 目录结构</td></tr>
+<tr><td>`索引表_已核查.xlsx`</td><td>原台账列 + file_path + status + 核查明细</td><td>§3.2 台账、§4 结论落账</td></tr>
+<tr><td>`缺件跟踪表.xlsx`</td><td>票号、缺什么、状态</td><td>§6 缺件</td></tr>
+<tr><td>`异常单.md`</td><td>未登记件、字段缺失等异常及处置建议</td><td>§6 异常处理</td></tr>
+<tr><td>`核查报告.html`</td><td>三级核查结果汇总、KPI 达成情况、差异留痕</td><td>§7 KPI</td></tr>
+</table>
+<p>---</p>
+<h2>自检结论(2026-09-12)</h2>
+<p>**文件齐备**:台账 ✓、单证 PDF ✓、历史成稿格式 ✓(角标位置与归档结构)。无需企业补文件。</p>
+<p>**企业已确认的规则(2026-09-12)**:</p>
+<li>报关单号以 **19 位实际值为准**——表头&quot;18位报关单号&quot;字样仅为列名历史习惯,不作为校验依据。</li>
+<li>缺号行(第 2/3/4 行)**等待人工补录**,AI 不代填;补录后重跑管线即可。</li>
+<li>归档第 1 级目录按台账**入账年度**(不用开船年月)。</li>
+<li>归档关键字为**报关单号**(一票一夹的目录名 = 报关单号),不用发票号或提单号。</li>
+<p>**仍待确认**:发票页 `INVOICE NO=41136337` 为模板假值,真实业务中发票号是否参与三级一致性比对?</p>
+<footer>AI 技能 SOP · 报关财务文档管理(三阶段版)· Fmode Studio · 2026-09-12 ·
+技能仓库 skill-yolanda / customs-doc-check</footer>
+</body></html>

+ 47 - 0
materials/异常单.md

@@ -0,0 +1,47 @@
+# 异常单 · 报关财务文档核查(练习批)
+
+- 日期:2026-09-12
+- 范围:`测试数据1/`(台账 5 行,input 单证 5 份,原始散件 2 份)
+- 依据:《AI 技能 SOP · 报关财务文档管理(三阶段版)》二级/三级核查标准
+
+---
+
+## 异常 1 · 台账口径:报关单号位数 【L2 · 已确认关闭】
+
+- **现象**:表头声明「18位报关单号」,C 列实际值均为 **19 位**(C3:C6 为公式自增 `=LEFT(C2,LEN(C2)-4)&TEXT(RIGHT(C2,4)+1,"0000")`)。
+- **企业确认(2026-09-12)**:以 **19 位实际值为准**,表头"18位"仅为列名历史习惯。
+- **状态**:✅ 关闭,不作为异常;已固化为 AI 技能 SOP 二级核查标准(位数=19)。
+
+## 异常 2 · 台账编号缺失(3 行)【L2 · 待人工补录】
+
+> 企业已确认(2026-09-12):等待人工补录,AI 不代填;补录后重跑核查管线即可自动闭环。
+
+| 台账行 | 缺失字段 | 已有单证 | 处置 |
+|---|---|---|---|
+| 第 2 行(…100000) | 货运提单号1 | 出口合同-41000001.pdf | 关务岗补录 B/L No |
+| 第 3 行(…100001) | Document number | 提运单-1000000002.pdf | 关务岗补录票号 |
+| 第 4 行(…100002) | 货运提单号1 | 出口合同-41000003.pdf | 关务岗补录 B/L No |
+
+## 异常 3 · 整票空挂(第 6 行)【L3 · 挂起】
+
+- **现象**:`2211111111111110004` 行 Document number、提单号均为空,且 input/ 无任何对应文件。
+- **处置建议**:确认是否废单/测试行——是则从台账删除;否则等待单证到达后补录、重跑核查。
+
+## 异常 4 · 未登记原始散件(2 份)【L2 · 文件有、台账无】
+
+| 文件 | 内容识别 | 处置建议 |
+|---|---|---|
+| `出口合同_49999999.pdf` | 模板发票,INVOICE NO=41136337(模板值),无有效票号角标 | 台账无 `49999999` 记录:人工判定归属票号后补登记,或确认样张后移出待处理区 |
+| `提运单_HKKK888888.pdf` | 货代提单,B/L No 栏 = `HGHB42455`(货代单号),非台账口径提单号 | 向货代确认正式 B/L 号,补登记后再归档 |
+
+## 异常 5 · 票内双证不齐(结构性)【L3 · 缺件跟踪表已列】
+
+- 第 2/3/4 行均为"单边票":只有发票或只有提单。其中第 4 行(41000004 + 1000000004)双证齐、**全库唯一完整票**。
+- 结论:4/5 行存在缺件,详见《缺件跟踪表》。
+
+---
+
+## 核查通过项
+
+- **一级(形式)**:5 份规范命名文件全部可打开、页数正确(发票 1 页 / 提单 2 页)、首页含与文件名一致的编号角标 —— 0 异常。
+- **三级(一致性)**:4 票文件名 ↔ 文件内角标 ↔ 台账编号三方对齐,0 冲突;发票与提单编号经台账映射无串票。

+ 150 - 0
materials/核查报告.html

@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>核查工作报告 · 报关财务文档管理(AI 执行)</title>
+<style>
+:root{
+  --ink:#1c2733; --ink-soft:#4a5a6a; --ink-mute:#8494a4;
+  --paper:#f6f8fa; --card:#fff; --line:#dde5ec; --line-soft:#e9eef3;
+  --brand:#0f4c81; --brand-ink:#0b3a63; --brand-soft:#eaf2f9;
+  --green:#1e7d4f; --green-soft:#e6f4ec;
+  --amber:#9a6b0a; --amber-soft:#fbf3e0;
+  --red:#b03a2e; --red-soft:#fbeae8;
+  --mono:"SF Mono",ui-monospace,Menlo,Consolas,monospace;
+}
+*{box-sizing:border-box;margin:0;padding:0}
+body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;
+  background:var(--paper);color:var(--ink);line-height:1.75;font-size:15px}
+.page{max-width:980px;margin:0 auto;padding:0 26px 70px}
+header{background:linear-gradient(180deg,var(--brand-ink),var(--brand));color:#fff;
+  padding:44px 26px 34px;margin-bottom:32px}
+header .inner{max-width:980px;margin:0 auto}
+.kicker{font-size:12px;letter-spacing:.22em;color:#9fc0dd;text-transform:uppercase;margin-bottom:8px}
+h1{font-size:27px;font-weight:700;margin-bottom:8px}
+.sub{color:#c9dcec;font-size:14px}
+.meta{display:flex;gap:22px;flex-wrap:wrap;margin-top:16px;font-size:12.5px;color:#aecbe4}
+.meta b{color:#fff}
+h2{font-size:19px;margin:40px 0 14px;border-bottom:2px solid var(--ink);padding-bottom:8px}
+h2 .num{font-family:var(--mono);font-size:12.5px;color:var(--brand);margin-right:8px}
+h3{font-size:15.5px;margin:20px 0 8px;color:var(--brand-ink)}
+p{margin-bottom:8px;color:var(--ink-soft)}
+table{width:100%;border-collapse:collapse;font-size:13.5px;margin:10px 0;background:var(--card)}
+th{background:#f0f4f8;text-align:left;font-weight:600;padding:8px 11px;border:1px solid var(--line);white-space:nowrap}
+td{padding:8px 11px;border:1px solid var(--line-soft);vertical-align:top;color:var(--ink-soft)}
+td code,code{font-family:var(--mono);font-size:12px;background:#eef2f6;padding:1px 5px;border-radius:4px;color:var(--brand-ink)}
+.chip{display:inline-block;font-size:11px;font-weight:600;padding:1px 8px;border-radius:20px;white-space:nowrap}
+.c-green{background:var(--green-soft);color:var(--green)}
+.c-amber{background:var(--amber-soft);color:var(--amber)}
+.c-red{background:var(--red-soft);color:var(--red)}
+.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:14px 0}
+.stat{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px 16px;text-align:center}
+.stat .n{font-size:26px;font-weight:700;font-family:var(--mono);color:var(--brand-ink)}
+.stat .l{font-size:12px;color:var(--ink-mute);margin-top:2px}
+.note{background:var(--amber-soft);border:1px solid #ecd9a8;border-radius:8px;padding:11px 15px;
+  font-size:13px;color:#6b5312;margin:12px 0}
+.note b{color:#8a6a10}
+ul{margin:8px 0 8px 22px;color:var(--ink-soft)}
+li{margin-bottom:5px}
+footer{border-top:2px solid var(--ink);margin-top:50px;padding-top:14px;font-size:12px;color:var(--ink-mute)}
+</style>
+</head>
+<body>
+<header>
+  <div class="inner">
+    <div class="kicker">AI EXECUTION REPORT · CUSTOMS DOCUMENT CHECK</div>
+    <h1>核查工作报告 · 报关财务文档管理</h1>
+    <div class="sub">按《AI 技能 SOP(三阶段版)》执行:输入材料 → 程序化三级核查 → 归档与报告。本批为练习数据全量核查。</div>
+    <div class="meta">
+      <span>执行:<b>AI(关务文档专员职能)</b></span>
+      <span>复核:<b>待财务主管</b></span>
+      <span>日期:<b>2026-09-12</b></span>
+      <span>依据:<b>人工 SOP V1.0 + AI 技能 SOP</b></span>
+    </div>
+  </div>
+</header>
+
+<div class="page">
+
+<h2><span class="num">01</span>总体结论</h2>
+<div class="cards">
+  <div class="stat"><div class="n">5</div><div class="l">台账行(票)</div></div>
+  <div class="stat"><div class="n">5 + 2</div><div class="l">规范单证 + 未登记散件</div></div>
+  <div class="stat"><div class="n">4</div><div class="l">核查通过并归档</div></div>
+  <div class="stat"><div class="n" style="color:var(--red)">4</div><div class="l">遗留异常(缺件3/未登记2 类)</div></div>
+</div>
+<p><span class="chip c-green">一级形式核查 100% 通过</span>
+   <span class="chip c-amber">二级完备性 3 项异常</span>
+   <span class="chip c-amber">三级一致性 2 项异常</span></p>
+<p>台账 5 行中仅 <b>1 票(41000004 + 1000000004)双证齐全</b>,已归档为完整票;其余 3 行单边缺件(等待人工补录,AI 不代填)、1 行整票空挂。
+两份原始散件(<code>出口合同_49999999.pdf</code>、<code>提运单_HKKK888888.pdf</code>)不在台账,按"未登记件"挂起待人工判定。</p>
+
+<h2><span class="num">02</span>三级核查明细</h2>
+<h3>一级 · 形式核查(程序全检)</h3>
+<table>
+  <tr><th>检查项</th><th>标准</th><th>结果</th></tr>
+  <tr><td>文件可打开</td><td>PDF 解析无异常</td><td><span class="chip c-green">5/5 通过</span></td></tr>
+  <tr><td>页数完整</td><td>发票=1 页;提单=2 页(单据页+条款页)</td><td><span class="chip c-green">5/5 通过</span></td></tr>
+  <tr><td>命名规范</td><td><code>^(出口合同|提运单)-\d+\.pdf$</code></td><td><span class="chip c-green">5/5 通过</span>(2 份散件不计入)</td></tr>
+  <tr><td>文件内编号</td><td>首页含与文件名一致的编号角标</td><td><span class="chip c-green">5/5 通过</span></td></tr>
+</table>
+
+<h3>二级 · 完备性核查</h3>
+<table>
+  <tr><th>检查项</th><th>结果</th><th>明细</th></tr>
+  <tr><td>双向齐套(台账↔文件)</td><td><span class="chip c-amber">单边缺件 3 行</span></td><td>第2行缺提单号登记;第3行缺 Document number;第4行缺提单号登记</td></tr>
+  <tr><td>台账字段完整</td><td><span class="chip c-green">通过(口径已确认)</span></td><td>报关单号按 19 位口径校验,5/5 通过;表头"18位"为列名历史习惯(企业确认)</td></tr>
+  <tr><td>整票空挂</td><td><span class="chip c-red">1 行</span></td><td>第6行:无编号、无文件 → 挂起</td></tr>
+  <tr><td>未登记散件</td><td><span class="chip c-amber">2 份</span></td><td><code>49999999</code>(发票样张)、<code>HKKK888888</code>(货代提单 HGHB42455)台账均无记录</td></tr>
+</table>
+
+<h3>三级 · 一致性核查</h3>
+<table>
+  <tr><th>检查项</th><th>结果</th><th>明细</th></tr>
+  <tr><td>票内三方对齐</td><td><span class="chip c-green">4/4 通过</span></td><td>文件名 ↔ 首页角标 ↔ 台账编号 逐票一致,0 串票</td></tr>
+  <tr><td>票间双证映射</td><td><span class="chip c-amber">1/5 完整</span></td><td>仅第5行(41000004+1000000004)发票+提单双证齐</td></tr>
+  <tr><td>模板一致性</td><td><span class="chip c-green">通过</span></td><td>4 份成件去编号后与模板逐字一致;<code>INVOICE NO=41136337</code> 为模板假值,已排除出票号判定依据</td></tr>
+</table>
+
+<h2><span class="num">03</span>归档结果</h2>
+<p>按人工 SOP §5.1 归档至 <code>测试数据1/output_工作成果/归档区/</code>,<b>归档关键字 = 报关单号</b>(企业确认口径),每票附文件数字节快照(见《索引表_已核查.xlsx · 归档快照》sheet):</p>
+<table>
+  <tr><th>报关单号(归档关键字)</th><th>归档路径</th><th>文件</th><th>状态</th></tr>
+  <tr><td><code>2211111111111110003</code></td><td><code>归档区/2024/2211111111111110003/</code></td><td>出口合同 + 提运单</td><td><span class="chip c-green">已归档 · 双证齐</span></td></tr>
+  <tr><td><code>2211111111111110000</code></td><td><code>归档区/2024/2211111111111110000/</code></td><td>出口合同</td><td><span class="chip c-amber">已归档 · 待补提单</span></td></tr>
+  <tr><td><code>2211111111111110001</code></td><td><code>归档区/2024/2211111111111110001/</code></td><td>提运单</td><td><span class="chip c-amber">已归档 · 待补发票</span></td></tr>
+  <tr><td><code>2211111111111110002</code></td><td><code>归档区/2024/2211111111111110002/</code></td><td>出口合同</td><td><span class="chip c-amber">已归档 · 待补提单</span></td></tr>
+  <tr><td><code>2211111111111110004</code>(第 6 行整票)</td><td>—</td><td>—</td><td><span class="chip c-red">挂起 · 无单证</span></td></tr>
+</table>
+<div class="note"><b>归档口径(企业已确认,2026-09-12):</b>第 1 级目录 = 入账年度;一票一夹的目录名 = <b>报关单号</b>(19 位),不用发票号或提单号。</div>
+
+<h2><span class="num">04</span>交付物清单</h2>
+<table>
+  <tr><th>文件</th><th>内容</th></tr>
+  <tr><td><code>output_工作成果/归档区/2024/&lt;票号&gt;/</code></td><td>一票一文件夹,双证归堆(4 票)</td></tr>
+  <tr><td><code>output_工作成果/索引表_已核查.xlsx</code></td><td>3 个 sheet:索引_已核查(台账+状态+file_path+核查发现)/ 缺件跟踪表 / 归档快照</td></tr>
+  <tr><td><code>output_工作成果/异常单.md</code></td><td>5 类异常的完整记录与处置建议</td></tr>
+  <tr><td><code>output_工作成果/核查报告.html</code></td><td>本报告</td></tr>
+  <tr><td><code>AI技能SOP_报关财务文档管理.md</code></td><td>三阶段 AI 技能 SOP(人工四环节 → 输入/处理/输出 重排)</td></tr>
+</table>
+
+<h2><span class="num">05</span>确认与遗留事项</h2>
+<table>
+  <tr><th>事项</th><th>状态</th><th>结论</th></tr>
+  <tr><td>报关单号位数口径</td><td><span class="chip c-green">已确认</span></td><td>以 <b>19 位实际值</b>为准;表头"18位"仅为列名历史习惯。已固化进 AI 技能 SOP。</td></tr>
+  <tr><td>归档第 1 级目录口径</td><td><span class="chip c-green">已确认</span></td><td>按台账<b>入账年度</b>(本次已按此执行)。</td></tr>
+  <tr><td>第 2/3/4 行缺号补录</td><td><span class="chip c-amber">等待补录</span></td><td>企业确认人工补录,AI 不代填;补录后重跑管线自动闭环。</td></tr>
+  <tr><td>第 6 行整票空挂</td><td><span class="chip c-amber">待确认</span></td><td>废单则删行,否则等单证到达补录。</td></tr>
+  <tr><td>未登记散件归属</td><td><span class="chip c-amber">待确认</span></td><td><code>49999999</code> 与 <code>HKKK888888</code> 两份原件判定归属,或确认后移出。</td></tr>
+  <tr><td>发票号假值是否参与比对</td><td><span class="chip c-amber">待确认</span></td><td>模板 <code>INVOICE NO=41136337</code> 全库雷同,真实业务中是否参与三级一致性比对?</td></tr>
+</table>
+
+<footer>
+  <span>核查工作报告 · 报关财务文档管理 · AI 执行</span>
+  <span>2026-09-12 · 测试数据1(练习批)</span>
+</footer>
+
+</div>
+</body>
+</html>