@customize-agent/server 4.56.0 → 4.56.2
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/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/4435.js +5 -5
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +26 -26
- package/.next/static/chunks/pages/{_app-ac3998e9ec089df1.js → _app-66149ba52ad1dc26.js} +1 -1
- package/package.json +1 -1
- /package/.next/static/{PYqZLWI4wxV8hppYFEWu0 → iHv-ONyPvKUMAEUP8j559}/_buildManifest.js +0 -0
- /package/.next/static/{PYqZLWI4wxV8hppYFEWu0 → iHv-ONyPvKUMAEUP8j559}/_ssgManifest.js +0 -0
|
@@ -43,7 +43,7 @@ ${e.join("\n")}`;return b[0]===f?{markdown:a,fixedCount:0,details:[]}:{markdown:
|
|
|
43
43
|
]{18,60})[。!?!?]`,"gu");function aa(a){let b=[],c=new Map;for(let b of a.matchAll(_)){let a=b[1].trim(),d=a.replace(/[\d,,.。%%㎡m2²]/gu,"").slice(0,16);if(d.length<10)continue;let e=c.get(d)||{count:0,sample:a};e.count+=1,c.set(d,e)}for(let{count:a,sample:d}of c.values())a<3||b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`段首固定开场机械重复 ${a} 次:“${d.slice(0,30)}…”`,suggestion:"同一段首句式只保留首次出现处,其余处按所在章节语境改写为差异化开场,避免模板化套话观感。"});return b}function ab(a){let b,c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let e=/^(#{2,4})\s+(.+)$/u.exec(c[a].trim());if(e){let c=e[1].length;/(?:工程概况|项目概况|基本信息)/u.test(e[2])?b={index:a,level:c}:b&&c<=b.level&&(d.push([b.index,a]),b=void 0)}}b&&d.push([b.index,c.length]);let e=a=>d.some(([b,c])=>a>=b&&a<c),f=c.filter((a,b)=>e(b)).join("\n"),g=[];for(let a=0;a<c.length;a+=1){if(e(a))continue;let b=/本项目为|本工程为|该项目为|该工程为/u.exec(c[a]);if(!b)continue;let d=c[a].slice(b.index).split(/[。!?!?]/u)[0];d&&d.length>=12&&g.push(d)}return{overviewBody:f,sentences:g}}function ac(a,b){return(0,n.qr)(a,b)>=8||a.split("、").map(a=>(a.match(/[\p{Script=Han}]/gu)||[]).join("")).filter(a=>a.length>=3).filter(a=>b.includes(a)).length>=2}function ad(a){let b=[],{overviewBody:c,sentences:d}=ab(a);if(0===d.length||!c)return b;let f=(c.match(/[\p{Script=Han}]/gu)||[]).join("");if(!f)return b;let g=[];for(let a of d)if(ac(a,f)&&g.push(a.slice(0,36)),g.length>=3)break;return 0===g.length||b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`项目概况段跨章复述不得出现:概况章外有 ${g.length} 处以“本项目为/本工程为”等总述开头整段复述概况内容:${g.map(a=>`“${a}…”`).join("、")}`,suggestion:"总述数据只在工程概况类小节集中交代一次:其他章节直接写本章内容,仅可引用所需的具体数字(如计划工期天数),不得复述完整概况段。",provenance:{detectorId:"overview-recap",fingerprint:(0,e.c6)(a)}}),b}let ae=["销项","复查","整改","闭环"];function af(a){let b=[],c=(0,d.V7)(a);if(c<3e3)return b;let e=[];for(let b of ae){let d=a.split(b).length-1;e.push(d/c*1e3)}let f=Math.max(...e),g=ae[e.indexOf(f)];return f>=3&&b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`闭环句式模板化密集:“${g}”达 ${f.toFixed(1)} 次/千字(销项/复查/整改/闭环统一结尾高度重复)`,suggestion:"保留关键控制环节的闭环表述,其余改为差异化的过程控制语言(检验批验收、实测实量、旁站记录等),提升语言精练度。"}),b}let ag=["专项设计文件尚未完成,待后续补充","评分指标存在缺口尚未明确","依据承诺函后续跟踪完善","本项目未采用行业认定的新技术、新工艺、新设备、新材料"],ah=/编制范围为[^。;;]{0,40}?所界定的全部施工内容|作为施工组织的控制性约束条件|分项验收[,,]?验收记录经监理工程师签字确认后归档|(?:执行|按|依据|按照)[^。;;]{0,10}?(?:〔|【)?20\d{2}(?:〕|】)?\s*\d+\s*号\s*(?:文件|办法|规定)?/u,ai=/未落实[^。;;]{0,24}?(?:整改|复查|销项|复验)|未(?:明确|列明|注明)[^。;;]{0,36}?按[^。;;]{0,44}?(?:执行|选取|确定|取用|调整|选用)|(?:发现|对|明确|约定|签订|制定|建立|规定|凡|任何|所有|新增)[^。;;]{0,48}?(?:缺失|损坏|不全|脱岗|未审批|不合格|未完成|未明确|未落实|隐患)[^。;;]{0,72}?(?:整改|复查|销项|约谈|补齐|补拍|重拍|补传|重新上传|补测|复测|补报|归档|复核|确认|登记|通知|上报|通报|更新|处置|修复|更换|纠正|恢复|完善|处理|落实|责任|时限|考核|处罚|扣减|调离|清退|停止作业|恢复施工|补录|追查)|(?:不得|严禁|禁止)[^。;;]{0,40}?(?:避免|防止)[^。;;]{0,20}?(?:返工|窝工|损失|事故)|(?:重难点|难点)(?:源于|在于)[^。;;]{0,80}?(?:若|如)未[^。;;]{0,40}?(?:将|会|可能)|(?:考核|考评|评比|评分)[^。;;]{0,50}?(?:不合格|不达标|不到位|不称职|失职|缺失|超时|违规)[^。;;]{0,36}?(?:绩效扣减|扣减|扣款|调离|清退|退场|问责|处罚|奖惩|奖罚)|(?:如|若)[^。;;]{0,60}?(?:发包人|招标人|建设单位)[^。;;]{0,60}?(?:有权|可要求|可以要求|可提出|可以提出)|[^。;;]{0,24}?时[,,][^。;;]{0,32}?(?:发包人|招标人|建设单位)[^。;;]{0,60}?(?:有权|可要求|可以要求|可提出|可以提出)|未[^。;;]{0,16}?不放过|(?:凡|任何|所有)[^。;;]{0,24}?未[^。;;]{0,40}?(?:人员|工人)[^。;;]{0,20}?(?:不得|严禁|禁止)[^。;;]{0,20}?(?:进入|上岗|进场|作业)|未[^。;;]{0,32}?(?:前|的)[^。;;]{0,32}?(?:不得|严禁|禁止|不予|不办理|不签发|不安排|不组织|不批准|不开放|不下发|不投入使用)|(?:未能|未按|未完成|未明确|未落实|未闭合|未审批|缺失|损坏|缺漏|不合格|隐患)[^。;;]{0,40}?(?:整改|复查|销项|恢复|复核|确认|登记|更新|处置|修复|更换|纠正|完善|落实|补齐|补测|复测|归档|通知|上报|通报|约谈|扣减|停止作业)[^。;;]{0,20}?(?:复查|销项|确认|登记|归档|责任|时限|考核|处罚|扣减|调离|清退|落实|复核|恢复|整改|处置|更新|完成|闭合)|未(?:完成|通过|复审|核验|审查|审核|验收|办理|达标|整改|闭合|接受|取得)[^。;;]{0,32}?(?:不得|严禁|禁止|不予|不办理|不签发|不安排|不组织|不批准|不开放)[^。;;]{0,16}?(?:上岗|作业|进场|进入|担任|从事|投用|使用|操作|开工|复工|施工|回填|浇筑|砌筑|铺筑|摊铺|安装|隐蔽|覆盖|封闭|推进|实施|开放|通行|吊装|拆除|验收)|(?:对|针对)[^。;;]{0,20}?未[^。;;]{0,24}?(?:的|区段|部位|工序|作业面|任务|班组)[^。;;]{0,60}?(?:调整|调拨|调配|增派|增补|加强|优化)[^。;;]{0,60}?(?:确保|保障|保证)[^。;;]{0,24}?(?:不突破|不超|满足|达标|完成|实现)|(?:统计|评估|分析|核算|汇总|排查|监测)[^。;;]{0,30}?(?:未能|未按|未完成|未明确|未落实|缺失|损坏|损失|不合格|隐患|滞后|影响)[^。;;]{0,50}?(?:组织|调整|调拨|调配|增派|增补|补充|加密|加强|优化|纠偏|补位)[^。;;]{0,50}?(?:确保|保障|保证)[^。;;]{0,24}?(?:不[^。;;]{0,6}?(?:突破|超期|滞后|延误|影响|低于|少于|超过)|满足|达标|完成|实现|符合)|(?:缺失|损坏|缺漏|过期|失效|不符|不合格|不达标)[^。;;]{0,24}?(?:当日|当天|立即|及时|随时|限期|按批|按次|定期|一律|一律不得|不得)[^。;;]{0,16}?(?:补充|更换|修复|整改|处置|更新|补齐|完善|销项|退场|拒收|退回|清退|退货|不予进场|拒绝接收|重新采购)|未[^。;;]{0,20}?(?:的|区段|部位|工序|作业面|任务|班组|段落)[^。;;]{0,48}?(?:由|经|责成|交|指定)[^。;;]{0,16}?(?:组织|安排|负责|落实|实施|调配|增派|督办|责成)[^。;;]{0,40}?(?:清运|清理|处置|处理|整改|完善|补充|调整|加固|返工|修复|恢复|回填|浇筑|作业|施工|外运|归集)[^。;;]{0,40}?(?:直至|确保|保证|实现|不留|无遗留|达标|闭合|清零|完成|销项)/u,aj=/未[^,。;;\n]{1,12}的[,,]?(?:由|经|应|须|需|统一|一律|责成)[^,。;;\n]{0,16}?(?:补齐|补正|补录|补报|整改|纠正|复核|复验|复测|返工|修整|处理)[^,。;;\n]{0,20}?(?:方可|才能|不得|严禁)/gu,ak=/(?:无|没有|不存在|未发现|未出现|杜绝|避免|防止|严禁|不得出现)(?:出现|发生|存在|产生)?(?:尚未完成|尚未|未完成|未明确|未采用|未落实|未确定|未闭合|存在缺口|有待|待补充|待完善|跟踪完善|不够|不明确|缺失|缺少|缺乏|风险较大|难以保证|无法保证|正在办理|暂未|未能|需进一步)/gu,al=/(?:不得|严禁|禁止|绝不|不能|不可)以[^,。;]{1,24}为(?:由|借口|理由)/gu,am=/(?:倘若|如果|一旦|万一|若(?!干))/u;async function an(a){let b=[],c=a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12);if(0===c.length)return b;let d=/尚未|未完成|未明确|未采用|未落实|未确定|未闭合|存在缺口|有待|待补充|待完善|跟踪完善|不够|不明确|缺失|缺少|缺乏|风险较大|难以保证|无法保证|正在办理|暂未|未能|需进一步|不进行分包|不再分包|不转包/u,e=await (0,f.Mv)(c,[...ag]),g=[...new Set(c.filter(a=>d.test(function(a){let b=a.replace(aj,"").replace(ak,"").replace(al,""),c=b.match(am);return c&&void 0!==c.index?b.slice(0,c.index):b}(a))&&!ah.test(a)&&!ai.test(a)&&ag.some(b=>e(a,b)>=f.Eh)))];if(0===g.length)return b;for(let a of g)b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`自伤表述候选:“${a}”暴露投标短板,需按上下文判定后改写`,suggestion:"投标文件不得主动暴露“专项设计未完成/指标存在缺口”等短板:改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);如属现场条件合理风险描述(地质/管线尚不明确),保留但需配套勘查与应对措施。"});return b}let ao=/(?<!分)([\u4e00-\u9fa5]{2})\1(?!项)/gu;function ap(a){let b=[...new Set(a.match(ao)||[])].slice(0,3);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文存在叠词重复表述:${b.map(a=>`“${a}”`).join("、")}`,suggestion:"删除紧邻重复字词,保持语句完整通顺(“执行执行”改为“执行”)。"}]}let aq="抹面|打底|找平|坐浆|结合层|粘结层|罩面|批嵌|腻子";function ar(a){let b=[];for(let c of a.matchAll(RegExp(`(${aq})[^。;;
|
|
44
44
|
|]{0,10}?(\\d{3,})\\s*mm`,"gu"))){let a=Number(c[2]);a>=100&&b.push(`“${c[1]}”厚度 ${a}mm`)}for(let c of a.matchAll(RegExp(`(\\d{3,})\\s*mm厚?[^。;;
|
|
45
45
|
|]{0,18}(${aq})`,"gu"))){let a=Number(c[1]);a>=100&&b.push(`“${c[2]}”厚度 ${a}mm`)}let c=[...new Set(b)].slice(0,3);return 0===c.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`装饰层工艺参数异常:${c.join("、")} 远超工艺常规厚度(抹面/打底/找平 20mm、坐浆 20~30mm)`,suggestion:"装饰层(抹面/打底/找平/坐浆/结合层)厚度按工艺常规取值:抹面打底找平 20mm、坐浆 20~30mm,与结构层厚度(墙体/垫层/回填)区分,不得串用。"}]}function as(a){let b=[],c=[...a.matchAll(/高峰期总人数(\d+)人|劳动力总人数(\d+)人|总人数(\d+)人/gu)].map(a=>Number(a[1]||a[2]||a[3])).filter(a=>a>0),d=[...a.matchAll(/高峰(?:期)?人数(\d+)人|峰值(?:需求|人数)?[为约]?(\d+)人/gu)].map(a=>Number(a[1]||a[2])).filter(a=>a>0),e=[...new Set(c)],f=[...new Set(d)];e.filter(a=>f.some(b=>b!==a)).length>0&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`劳动力峰值口径矛盾:正文「总人数」出现 ${e.join("人、")}人 与「高峰人数」出现 ${f.join("人、")}人 并存,峰值人数必须唯一`,suggestion:"全文劳动力峰值只允许一个口径:统一总人数与高峰人数为同一数值,删除矛盾口径;分阶段梯次投入人数(准备阶段/主体阶段/竣工阶段)属合法动态配置,不在统一范围内。"});let g=new Map;for(let b of(0,i.Rm)(a)){if(!b.hasTradeCol||0===b.tradeCells.length)continue;let a=new Map;for(let c of b.tradeCells){let b=a.get(c.trade)??0;c.value>b&&a.set(c.trade,c.value)}for(let[b,c]of a){let a=g.get(b)??[];a.push(c),g.set(b,a)}}let h=[...g.entries()].filter(([,a])=>a.length>=2&&new Set(a).size>=2);return h.length>0&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`同工种跨表高峰人数矛盾:${h.map(([a,b])=>`${a} ${b.join("人、")}人`).join(";")} 各表并存,同一工种高峰人数必须唯一`,suggestion:"同一工种在各表中的高峰人数必须一致:以工种配置表(第五章)为权威口径统一各表数值;分阶段投入计划表内同工种不同阶段的动态配置属合法数据,不参与统一。"}),b}function at(a){let b=function(a){let b=[];for(let c of a.matchAll(/(?:生活用水|施工用水|临时用水|用水)[^。;;\n]{0,24}(?:高峰(?:期)?人数|高峰人数)[^。;;\n]{0,8}?([\d,]+)\s*人/gu)){let a=Number(c[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&b.push(a)}return b}(a);if(0===b.length)return[];let c=[];for(let b of a.matchAll(/高峰(?:期)?人数([\d,]+)人|峰值(?:需求|人数)?[为约]?([\d,]+)人|劳动力峰值[^。;;\n]{0,8}?([\d,]+)\s*人/gu)){let d=Number((b[1]||b[2]||b[3]||"").replace(/[,,]/gu,""));if(!Number.isFinite(d)||d<=0)continue;let e=(b.index??0)+b[0].indexOf(b[1]||b[2]||b[3]||""),f=a.slice(Math.max(0,e-24),e);!/生活用水|施工用水|临时用水|用水/u.test(f)&&((0,i.rx)(a,e)||c.push(d))}let d=[...new Set(c)];if(0===d.length)return[];let e=[...new Set(b)];return 0===e.filter(a=>d.every(b=>b!==a)).length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`用水高峰人数与劳动力峰值不一致:临时用水按高峰人数 ${e.join("人、")}人 计算,而劳动力峰值为 ${d.join("人、")}人,两处引用必须为同一数值`,suggestion:"临时用水高峰人数与劳动力峰值为同一批施工人员的两个引用口径:统一改为劳动力峰值人数,删除自编的用水人数口径。"}]}let au=/不再另行(?:出现|统计|编制|设置|单列|重复)[^。;;\u000A]{0,40}|以[^。;;\u000A]{0,16}为唯一[^。;;\u000A]{0,24}不再[^。;;\u000A]{0,20}|不再另行[^。;;\u000A]{0,24}/gu;function av(a){let b=[...a.matchAll(au)].map(a=>a[0].trim().slice(0,30));return 0===b.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文存在元话语声明句 ${b.length} 处(${[...new Set(b)].slice(0,3).join("、")}):声明≠数据,正文只保留数据不保留口径声明`,suggestion:"删除「不再另行出现其他口径」「不再另行统计累计投入人次」「以 X 为唯一控制基准,不再…」类自我声明句;数据本身的唯一性由数值一致体现,不需要文字声明。"}]}let aw=/(?:[Pp]\s*=\s*[^。;;\n]{0,60}(?:Σ|cosφ|[Kk][12])|[qQ]\s*=\s*[^。;;\n]{0,40}|Σ\s*P|cos\s*φ|[Kk][12]\s*[×*]\s*Σ|[Kk][12]\s*Σ\s*P)/gu;function ax(a){let b=[...a.matchAll(aw)].map(a=>a[0].trim().slice(0,30));return 0===b.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文出现公式形态残留 ${b.length} 处(${[...new Set(b)].slice(0,3).join("、")}):正文只允许计算值不允许计算公式`,suggestion:"删除公式符号(P =、Σ、cosφ、K1、q =),只保留计算结果值:如「用电负荷约 48kW」「高峰日生活用水量约 X m\xb3」;公式推导过程一律不进入正文。"}]}let ay=/暂列金额|暂估价|报价明细|综合单价|清单合价|预留金|投标报价|异常低价|评标基准价/u,az=/(?:税率|增值税)[^。;;\n]{0,12}\d/u,aA=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,aB=/材料价格|商务报价|投标总价|合同总价|工程总价/u,aC=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","投标报价与费率标准的商务条款"],aD=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息","商务数据不得写入施工组织设计正文的约束说明"];async function aE(a){return(0,g.A)({prototypes:[...aC],negativePrototypes:[...aD],embedDocuments:a})}async function aF(a,b){let c=[],d=await aE(b),e=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();if(!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a))&&(ay.test(b)||az.test(b)||aB.test(b)))for(let a of(az.test(b)&&c.push("税率/增值税"),b.split(/(?<=[。;;])\s*/u))){let b=a.match(ay)||[],d=aA.test(a),f=aB.test(a);!(b.length>0)||d||f?(b.length>0&&(d||f)||f&&0===b.length)&&e.push(a):c.push(...b)}}if(e.length>0){let a=await d(e);e.forEach((b,d)=>{if(!a[d])return;let e=b.match(ay)||[],f=b.match(aB)||[];c.push(...e.length>0?e:f)})}let f=[...new Set(c)].slice(0,4);return 0===f.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文出现商务条款数据:${f.join("、")}`,suggestion:"商务数据(暂列金额/暂估价/综合单价/税率等)不得写入施组正文:删除该句,商务口径仅保留在项目信息表中;技术内容如需保留,改写为不含商务参数的正式技术表述。"}]}let aG=[{key:"excavation",label:"基坑支护及土方外运",re:/基坑支护/u},{key:"zero",label:"地下结构出正负零",re:/正负零|地下室结构/u},{key:"topping",label:"主体结构封顶",re:/主体(?:结构)?封顶/u},{key:"decoration",label:"装饰装修及幕墙",re:/装饰装修/u},{key:"mep",label:"机电安装及智能化调试",re:/机电安装/u},{key:"completion",label:"室外工程及竣工验收",re:/竣工验收/u}];function aH(a){let b=[],c=(a,c,d)=>{let e=(a=>{let b="封顶"===a?"主体结构封顶":a;return aG.find(a=>a.re.test(b))?.key})(a);void 0!==e&&Number.isFinite(c)&&c>=1&&c<=3e3&&b.push({key:e,day:c,raw:d})};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n,、]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu))c(b[2],Number(b[1]),b[0].slice(0,40));for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of a.matchAll(/(主体(?:结构)?封顶)(?!后)(?:(?!(?:第\d{2,3}[日天]|,|、|完成|\||[。;;\n])).){0,20}?第(\d{2,3})日/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of aG){let d=RegExp(`^\\s*\\|\\s*[^|]*${b.re.source}[^|]*\\s*\\|\\s*开工(?:令下发)?后第(\\d{2,3})日\\s*\\|`,"gum");for(let b of a.matchAll(d))c(b[0],Number(b[1]),b[0].slice(0,40))}let d=new Set;return b.filter(a=>{let b=`${a.key}:${a.raw}`;return!d.has(b)&&(d.add(b),!0)})}function aI(a){let b=[],c=new Map;for(let b of aH(a)){let a=c.get(b.key)||[];a.push(b),c.set(b.key,a)}for(let a of aG){let d=c.get(a.key);if(!d||d.length<2)continue;let e=[...new Set(d.map(a=>a.day))];if(e.length<2)continue;let f=[...new Set(d.map(a=>a.raw))].slice(0,4).join("、");b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`节点工期口径矛盾:“${a.label}”节点出现 ${e.map(a=>`${a}日`).join(" 与 ")} 两套口径:${f}`,suggestion:`关键节点完成时间必须全文唯一:以总进度计划表为准统一“${a.label}”节点日期,删除正文/其他表中矛盾的“第N日”表述。`})}return b}let aJ=[{key:"xps",label:"挤塑聚苯板(XPS)厚度",unit:"mm",kind:"number",patterns:[/(?:挤塑聚苯|XPS)(?:(?!(?:宽度|拼缝|不大于|不超过|小于|≤|采用|使用|选用|铺设|粘贴|半径|倒角|圆弧|弧度)).){0,40}?(\d+(?:\.\d+)?)\s*mm/gu,/(\d+(?:\.\d+)?)\s*mm[^。;;\n|]{0,10}?(?:挤塑聚苯|XPS)/gu]},{key:"cushion",label:"垫层混凝土强度等级",unit:"C标号",kind:"code",patterns:[/(?<!混凝土)垫层(?![一-龥]{1,4}[、,,])[^。;;\n|]{0,20}?(C\d{2})/gu]},{key:"transformer",label:"箱式变压器容量",unit:"kVA",kind:"number",patterns:[/(\d+)\s*kVA[^。;;\n|]{0,12}?变压器/gu,/变压器[^。;;\n|]{0,12}?(\d+)\s*kVA/gu]},{key:"formwork",label:"模板周转次数",unit:"次",kind:"number",patterns:[/模板周转(?:次数|使用)?[^。;;\n|]{0,15}?(\d+)\s*次/gu]},{key:"block",label:"蒸压加气混凝土砌块强度等级",unit:"A标号",kind:"code",patterns:[/(?:蒸压加气混凝土|加气混凝土)?砌块[^。;;\n|]{0,24}?(?<![A-Za-z])(A\d+(?:\.\d+)?)/gu]},{key:"extinguisher",label:"干粉灭火器数量",unit:"具",kind:"number",patterns:[/灭火器[^。;;\n]{0,24}?(\d+)\s*具/gu]},{key:"pump",label:"潜水泵(提升泵)数量",unit:"台",kind:"number",patterns:[/(?:潜水泵|提升泵)[^。;;\n]{0,24}?(\d+)\s*台/gu]},{key:"firstaid",label:"急救箱数量",unit:"套/个",kind:"number",patterns:[/急救箱[^。;;\n|]{0,24}?(\d+)\s*(?:套|个)/gu]},{key:"scheduleDays",label:"计划总工期",unit:"日历天",kind:"number",patterns:[/^\s*\|\s*计划工期\s*\|\s*(\d{1,4})\s*个?\s*日历天\s*\|/gum,/(?:计划工期|合同工期|工期总日历天数|工期控制|工期目标|总工期)[^。;;\n|]{0,12}?(\d{1,4})\s*个?\s*日历天/gu,/(\d{1,4})\s*个?\s*日历天[^。;;\n|]{0,8}?(?:总工期|倒排|分解|为唯一|完成)/gu]},{key:"prefabRatio",label:"装配率",unit:"%",kind:"number",patterns:[/装配率[^。;;\n|]{0,14}?(\d+(?:\.\d+)?)\s*%/gu,/装配率[^。;;\n|]{0,44}?计算为(\d+(?:\.\d+)?)\s*%/gu,/(\d+(?:\.\d+)?)\s*%(?:(?![,,。;;\n|]).){0,10}?装配率/gu]},{key:"projectCode",label:"项目编号",unit:"",kind:"code",patterns:[/(?:招标项目编号|项目编号)[^。;;\n|]{0,8}?(20\d{2}[A-Z]{1,8}\d{2,10})/gu]},{key:"towerCrane",label:"塔式起重机(塔吊)数量",unit:"台",kind:"number",patterns:[/(?:塔式起重机|塔吊)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:塔式起重机|塔吊)/gu]},{key:"hoist",label:"施工升降机(施工电梯)数量",unit:"台",kind:"number",patterns:[/(?:施工升降机|施工电梯)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:施工升降机|施工电梯)/gu]},{key:"truckCrane",label:"汽车起重机(汽车吊)数量",unit:"台",kind:"number",patterns:[/(?:汽车起重机|汽车吊)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:汽车起重机|汽车吊)/gu]},{key:"rebarCutter",label:"钢筋切断机数量",unit:"台",kind:"number",patterns:[/钢筋切断机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"rebarBender",label:"钢筋弯曲机数量",unit:"台",kind:"number",patterns:[/钢筋弯曲机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"slackDays",label:"机动工期(工序衔接与验收缓冲)",unit:"天",kind:"number",patterns:[/(?:机动工期|缓冲)[^。;;\n|]{0,16}?(\d{1,3})\s*天/gu,/预留[^。;;\n|]{0,8}?(\d{1,3})\s*天[^。;;\n|]{0,10}?(?:机动|缓冲)/gu]},{key:"villageCount",label:"自然村数量",unit:"个自然村",kind:"number",patterns:[/(\d+)\s*个[^,。;、\s\n]{0,8}?自然村(?!分组|施工组)/gu]},{key:"circularSaw",label:"圆盘锯数量",unit:"台",kind:"number",patterns:[/圆盘锯[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"excavator",label:"挖掘机数量",unit:"台",kind:"number",patterns:[/(?:履带式)?挖掘机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?(?:履带式)?挖掘机/gu]},{key:"dumpTruck",label:"自卸汽车数量",unit:"台/辆",kind:"number",patterns:[/自卸汽车[^。;;\n、,]{0,40}?(\d+)\s*(?:台|辆)/gu,/(\d+)\s*(?:台|辆)[^、,。;\n|]{0,12}?自卸汽车/gu]},{key:"roller",label:"压路机数量",unit:"台",kind:"number",patterns:[/(?:振动)?压路机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?(?:振动)?压路机/gu]},{key:"rammer",label:"蛙式打夯机数量",unit:"台",kind:"number",patterns:[/蛙式打夯机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?蛙式打夯机/gu]},{key:"mixerTruck",label:"混凝土搅拌运输车数量",unit:"台",kind:"number",patterns:[/混凝土搅拌运输车[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?混凝土搅拌运输车/gu]},{key:"concreteMixer",label:"混凝土搅拌机数量",unit:"台",kind:"number",patterns:[/混凝土搅拌机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?混凝土搅拌机/gu]},{key:"sprinkler",label:"洒水车数量",unit:"台/辆",kind:"number",patterns:[/洒水车[^。;;\n、,]{0,40}?(\d+)\s*(?:台|辆)/gu,/(\d+)\s*(?:台|辆)[^、,。;\n|]{0,12}?洒水车/gu]},{key:"aerialLift",label:"高空作业车数量",unit:"台",kind:"number",patterns:[/高空作业车[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?高空作业车/gu]},{key:"pondBackfill",label:"沟塘回填方量",unit:"m\xb3",kind:"number",patterns:[/(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)[^。;;\n|]{0,30}?回填方(?:总量)?[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³]/gu,/(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)[^;;\n|]{0,30}?回填方总量[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³]/gu,/回填方(?:总量)?[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³][^。;;\n|]{0,30}?(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)/gu]},{key:"trenchClearing",label:"沟槽槽底人工清底预留厚度",unit:"mm",kind:"number",patterns:[/槽底预留(\d+)mm人工清底/gu]},{key:"houseExcavation",label:"距房屋人工开挖保护距离",unit:"m",kind:"number",patterns:[/距房屋(\d+(?:\.\d+)?)m(?:内|范围内)[^。;;\n|]{0,10}?人工开挖/gu]}],aK={pump:/潜水泵|提升泵/u,towerCrane:/塔式起重机|塔吊/u,hoist:/施工升降机|施工电梯/u,truckCrane:/汽车起重机|汽车吊/u,rebarCutter:/钢筋切断机/u,rebarBender:/钢筋弯曲机/u,circularSaw:/圆盘锯/u,excavator:/挖掘机/u,dumpTruck:/自卸汽车|自卸车/u,roller:/压路机/u,rammer:/蛙式打夯机|打夯机/u,mixerTruck:/混凝土搅拌运输车|搅拌车/u,concreteMixer:/混凝土搅拌机/u,sprinkler:/洒水车/u,aerialLift:/高空作业车/u,extinguisher:/灭火器/u,firstaid:/急救箱/u};function aL(a,b){let c=(0,i.Dq)(b);if(void 0===c)return[];let d=new Set;for(let b of a.matchAll(/养护[^。;;\n|]{0,16}?([一二两三四五六七八九十]+|\d{1,2})\s*年/gu)){let c=a.lastIndexOf("\n",b.index)+1,e=a.indexOf("\n",b.index);if(-1===e&&(e=a.length),aO.test(a.slice(c,e)))continue;let f=(0,i.a0)(b[1]??"");void 0!==f&&f>0&&d.add(f)}if(0===d.size)return[];let e=[...d].filter(a=>a!==c);return 0===e.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`绿化养护期清单红线:正文出现养护期 ${e.map(a=>`${a}年`).join("、")},与工程量清单锁定口径「养护 ${c} 年」矛盾`,suggestion:`绿化养护期必须与工程量清单一致(清单锁定「养护 ${c} 年」):将正文所有养护期表述统一为 ${c} 年并删除矛盾口径;养护期属清单实质性条款,不得以常规值替代。`}]}function aM(a,b){let c=(0,i.Mb)(b);if(void 0===c)return[];let d=[];for(let b of a.matchAll(/路灯[^。;;\n|]{0,28}?(\d+)\s*(?:套|盏|杆)/gu)){if(/批/u.test(b[0]))continue;let c=a.lastIndexOf("\n",b.index)+1,e=a.indexOf("\n",b.index);if(-1===e&&(e=a.length),aO.test(a.slice(c,e)))continue;let f=Number(b[1]);Number.isFinite(f)&&f>0&&d.push(f)}if(0===d.length)return[];let e=d.length>=2?d.reduce((a,b)=>a+b,0):d[0]??0;return e===c?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`路灯数量口径矛盾:正文路灯配置合计约 ${e} 套,与工程量清单锁定口径 ${c} 套不一致(相差 ${Math.round(Math.abs(e-c)/c*100)}%)`,suggestion:`路灯数量必须以工程量清单为准(清单锁定 ${c} 套):按清单核定各型号路灯数量并统一正文全部表述,删除与清单矛盾的套数口径。`}]}let aN=/\d+(?:\.\d+)?\s*(?:mm|kVA|次|具|台|套|个)\s*[//]\s*\d+/u,aO=/不再出现|不得出现|严禁出现|避免出现|不采用|未采用|予以删除|已删除|取消|纠正为|更正为/u,aP=/再浇筑|再浇|后浇筑|后浇|然后浇筑|然后再浇|上层|上部|面层浇筑|其上浇筑|浇筑完成后再/u,aQ=/分层厚度|分层浇筑|分层振捣|焊缝高度|焊缝厚度|焊脚尺寸|锚固深度|保护层厚度|搭接长度|锚固长度|预留|踏步高度|踏步宽度|踏步高|踏步宽|台阶高度|台阶宽度|内厚|外厚|抹面|抹灰|粉刷|垫高|架空|离地|支垫/u,aR=/分别为|分别对应|分别用于|分别按|依次为|依次/u,aS="女儿墙|外墙|内墙|隔墙|地梁|圈梁|构造柱|过梁|垫层|承台|筏板|底板|基础|主体|梁|柱|墙|楼板|屋面|地面|楼面|顶板|楼梯|阳台|雨篷|台阶|散水|坡道|找坡|找平|保护层|防水层|保温层|隔汽层|地坪|办公区|生活区|库房|加工区|堆放区|驻地|周转场|停放区|仓库|材料库|路基|沟槽|基槽|基坑|路槽",aT=/每[台辆架套部][一-龥A-Za-z0-9]{1,8}/gu,aU=/项目部|总协调|工人生活|施工办公|办公|生活|临时|总部|标段|片区/u;function aV(a,b,c){let d=b.slice(Math.max(0,c-8),c),e=d.match(aU);if(!e||void 0===e.index)return a;let f=d.slice((e.index??0)+e[0].length);return/^[的施工区域现场]{0,3}$/u.test(f)?`${e[0]}${a}`:a}function aW(a,b,c,d){let e=a.indexOf("\n",b),f=a.slice(d,-1===e?a.length:e);if(/^\s*\|/u.test(f)&&/\|\s*$/u.test(f.trim())){let a=f.replace(/[\u4e00-\u9fa5]{2,6}阶段/gu,""),b=[...a.matchAll(RegExp(aS,"gu"))],c=b[b.length-1];return c?aV(c[0],a,c.index??0):""}let g=Math.max(d,b-16),h=a.slice(g,b),i=Math.max(h.lastIndexOf(","),h.lastIndexOf("、"),h.lastIndexOf(","),h.lastIndexOf(";"),h.lastIndexOf(";"),h.lastIndexOf("。")),j=a.slice(i>=0?g+i+1:g,b+c.length).replace(/[\u4e00-\u9fa5]{2,6}阶段/gu,""),k=[...j.matchAll(aT)];if(k.length>0)return k[k.length-1]?.[0]??"";let l=[...j.matchAll(RegExp(aS,"gu"))],m=l[l.length-1];return m?aV(m[0],j,m.index??0):""}function aX(a,b,c){let d=Math.max(a.lastIndexOf(",",b),a.lastIndexOf(",",b),a.lastIndexOf("。",b),a.lastIndexOf(";",b),a.lastIndexOf(";",b),a.lastIndexOf("\n",b),a.lastIndexOf("|",b))+1,e=a.slice(d,b+c.length);return/每[^,,。;;\n|]{0,16}(?:对应|配备|配置|配套|编组|配)[^,,。;;\n|]{0,10}\d+\s*[台辆][^,,。;;\n|]{0,6}$/u.test(e)}let aY=/共用[^。;;\n]{0,10}|不(?:再)?单独(?:增配|新增|购置|添置|配置)|不另行(?:增配|新增|购置)|轮换使用|周转使用|交叉使用/u;function aZ(a){let b=[];for(let c of aJ){let d=new Map,e=new Map,f="pump"===c.key&&/潜水泵/u.test(a)&&/提升泵/u.test(a);for(let b of c.patterns)for(let g of a.matchAll(b)){let b=g[0].slice(0,40);if(void 0!==g[1]){let a=aK[c.key],d=a?a.exec(b):null,e=b.indexOf(g[1]);if(d&&e>=0&&d.index>e){let a=b.slice(e+String(g[1]).length,d.index);if(/^\s*(?:台|辆|套|个|座|m|mm|天)?\s*[与和及、,,]{1,2}\s*$/u.test(a))continue}}if(/(?:循环使用|轮换使用|交替使用|分组使用)/u.test(a.slice(g.index||0,(g.index||0)+b.length+30))&&/(?:作业面|区段|分段|片区|分区|工区)/u.test(a.slice(Math.max(0,(g.index||0)-20),g.index||0)))continue;if("trenchClearing"===c.key){let c=Math.max(a.lastIndexOf("。",g.index),a.lastIndexOf(";",g.index),a.lastIndexOf("\n",g.index))+1;if(/基槽|围栏|菜园/u.test(a.slice(c,(g.index||0)+b.length)))continue}if(aN.test(b))continue;{let c=void 0!==g[1]?b.indexOf(String(g[1])):-1;if(c>=0){let b=(g.index||0)+c;if(/半径|倒角|圆弧|弧度/u.test(a.slice(Math.max(0,b-6),b)))continue}}if(aP.test(b))continue;if("scheduleDays"===c.key){let c=b.indexOf(String(g[1]));if(c>=0&&/(?:阶段|第\d+日|至第|共|集中)/u.test(a.slice(Math.max(0,(g.index||0)+c-16),(g.index||0)+c)))continue;let d=Math.max(a.lastIndexOf("。",g.index),a.lastIndexOf(";",g.index),a.lastIndexOf("\n",g.index))+1,e=a.indexOf("。",(g.index||0)+b.length),f=a.slice(d,-1===e?a.length:e);if(/合理期限|书面技术要求|审核认可|响应闭环|答复期限|反馈期限|技术澄清/u.test(f))continue}if(/按不少于|不少于/u.test(b)||/[中内](?:调配|取用|挪用|借用|调用|划拨)|(?:从|由)[^。;;\n]{0,20}?[中内](?:调配|取用|挪用|借用|调用|划拨)/u.test(b)||/增配|增补|追加|补足|另配|增设/u.test(b))continue;if("villageCount"===c.key){let c=a.slice((g.index||0)+b.length,(g.index||0)+b.length+12);if(/分组|施工组|网格|责任区|单元|片区|班组|包保|作业面|施工点|施工段/u.test(c))continue}if(aX(a,g.index||0,b))continue;let h=a.lastIndexOf("\n",g.index)+1,i=a.indexOf("\n",g.index);if(-1===i&&(i=a.length),aO.test(a.slice(h,i))||/(?:变更|澄清|修改|调整|更正|修正)(?:为|至|如下|后)/u.test(a.slice(Math.max(0,(g.index||0)-20),g.index||0))||function(a,b,c){let d=a.indexOf("\n",b),e=-1===d?a.length:d,f=a.slice(c,e);if(!/^\s*\|/u.test(f)||!/\|\s*$/u.test(f.trim()))return!1;let g=a=>{for(let b of a)if(!/^\s*\|/u.test(b)&&b.trim()&&!/^\s*\*{0,2}表\s*[\d一二三四五六七八九十]+\s*[-–—][\d.]+/u.test(b)){if(/^#{1,6}\s/u.test(b))return!1;return aY.test(b)}return!1},h=Math.max(0,c-1200),i=a.slice(h,c).split("\n");return i.pop(),!!g(i.reverse())||g(a.slice(e+1,e+1+1200).split("\n"))}(a,g.index||0,h))continue;let j=aW(a,g.index||0,b,h);if(j&&"code"===c.kind&&function(a,b,c,d){let e=c.lastIndexOf(d);if(e<0)return!1;let f=a5(a,b+e);return!!f&&(!!a6.test(f)||!a4.test(f)&&!a3.test(f))}(a,g.index||0,b,j))continue;let k=f&&j?`${b.match(/潜水泵|提升泵/u)?.[0]??""}|${j}`:j,l=d.get(k)||new Set;l.add(g[1]),d.set(k,l);let m=e.get(k)||[];m.push(b),e.set(k,m)}for(let a of[...d.keys()].filter(a=>""===a||a.endsWith("|"))){let b=d.get(a);if(!b||0===b.size)continue;let c=[...d.keys()].filter(b=>b!==a&&b.startsWith(a)&&!b.slice(a.length).includes("|"));if(1!==c.length)continue;let f=c[0]||"",g=d.get(f);if(!g)continue;for(let a of b)g.add(a);let h=e.get(f)||[];h.push(...e.get(a)||[]),e.set(f,h),d.delete(a),e.delete(a)}for(let[a,f]of d){if(f.size<2)continue;let d=a.includes("|")?a.slice(a.indexOf("|")+1):a,g=e.get(a)||[];if("code"===c.kind)b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料参数口径矛盾:“${c.label}”${d?`在部位「${d}」`:"在未标注部位语境下"}出现 ${[...f].map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(g)].slice(0,3).join("、")}`,suggestion:`同一材料同一部位只允许一个口径:以设计图纸/工程量清单为准统一“${c.label}”${d?`在部位「${d}」的取值`:""},删除矛盾表述;不同部位允许不同规格,不得全文归一为一种。`});else{let a=[...f].map(Number).filter(Number.isFinite);if(a.length<2)continue;b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料/设备数量口径矛盾:“${c.label}”${d?`在部位「${d}」`:"在未标注部位语境下"}出现 ${a.map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(g)].slice(0,3).join("、")}`,suggestion:`同一设备/材料同一部位只允许一个口径:以应急物资清单/施工部署为准统一“${c.label}”${d?`在部位「${d}」的取值`:""},删除矛盾表述;总量与分区配置属不同口径,不得互相归一。`})}}}return b}function a$(a){return/^C\d{2,3}$/.test(a)?/(?<![A-Za-z0-9])C\d{2,3}(?!\d)/u:/^M\d/.test(a)?/M\d+(?:\.\d+)?/u:/^P\d{1,2}$/.test(a)?/(?<![A-Za-z])P\d{1,2}/u:/^A\d+(?:\.\d+)?$/.test(a)?/A\d+(?:\.\d+)?/u:/^B\d+(?:\.\d+)?$/.test(a)?/B\d+(?:\.\d+)?/u:/^HRB/.test(a)||/^HPB/.test(a)?/HRB\d{3,4}|HPB\d{3}/u:/mm$/.test(a)?/\d+(?:\.\d+)?\s*mm/u:null}function a_(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}let a0=/^(?:采用|选用|使用|本工程|其中|以及|详见|按|为|的|该|各|所有|其他|喷涂|喷刷|涂刷|施工|设计|用|为)$/u,a1=/(?:采用|选用|使用|应用|为|用)([一-龥]{2,6})$/u;function a2(a){let b=(a1.exec(a)?.[1]||a).replace(/^(?:本工程|其中|以及|详见|按|为|的|该|各|所有|其他|喷涂|喷刷|涂刷|施工|设计|中|的)+/u,"");return b.length<2||b.length>6||a0.test(b)?"":b}let a3=/(?:型|系列|级别|等级|型号|牌号|级|类|种)$/u,a4=RegExp(`(?:${aS}|${k.fc})$`,"u");function a5(a,b){return/([一-龥]{1,8})$/u.exec(a.slice(Math.max(0,b-8),b))?.[1]||""}let a6=/(?:办公区|生活区|加工区|堆放区|停放区|周转场|驻地|仓库|材料库|库房|工区|作业区|场区)$/u,a7=/^\d+(?:\.\d+)?\s*mm$/u;function a8(a,b,c=8){let d=[],e=0,f=0;if(!b)return d;let g=[...new Set(Object.values(b).flat().map(a=>a.location).filter(Boolean))];for(let h of Object.values(b)){if(h.length<2)continue;let b=new Set;for(let i of h){let{location:j,spec:m}=i;if(!j||!m||j.length<2)continue;let n=a$(m);if(!n)continue;let o=`${j}|${n.source}`;if(b.has(o))continue;b.add(o);let p=h.find(a=>a.location===j&&a$(a.spec))?.location??j,q=new Set(h.filter(a=>a.location===j).map(a=>{let b=a$(a.spec);if(b&&b.source===n.source)return a.spec;let c=RegExp(`^(?:${n.source})`,"u").exec(a.spec);return c?c[0]:null}).filter(a=>null!==a).filter(a=>(0,l.Zg)(a))),r=RegExp(`${a_(j)}[^。;;
|
|
46
|
-
|]{0,40}?(${n.source})`,"gu");for(let b of a.matchAll(r)){let i=b[1]||"";if(aP.test(b[0])||aQ.test(b[0])||aR.test(b[0]))continue;let m=a.slice(Math.max(0,(b.index||0)-40),b.index||0);if(aR.test(m))continue;let o=a.slice((b.index||0)+b[0].length,(b.index||0)+b[0].length+10);if(/范围内|范围/u.test(o)||/(?:工作宽度|作业宽度|操作空间|工作面)/u.test(o)||/^、\s*\d/u.test(o)||/^\s*厚(?:\s*[\d::]|覆膜|木|胶合)/u.test(o)||RegExp(`^(?:或|[、,,/])\\s*(?:${n.source})`,"u").test(o))continue;let r=a.slice(Math.max(0,b.index||0),(b.index||0)+b[0].length);if(/(?:标高|高程|平整度|轴线|垂直度|高差)[^。;;\n|]{0,10}(?:偏差|误差|不超过|不得大于|不大于)/u.test(r.slice(-28))||/(?:偏差|误差|公差|缝隙|接缝|拼缝|高差|顺直度|垂直度|平整度|轴线|标高|高程)[^。;;\n|]{0,16}(?:不超过|不得大于|不大于|控制在|±|≤)/u.test(r.slice(-36)))continue;let s=b[0].slice(0,b[0].indexOf(i));if(/(?:间距|中心距|净距|排距|间隔)[^。;;\n|,,、]{0,8}$/u.test(s))continue;let t=b[0].indexOf(i);if(t>j.length&&/(?:涵头|面层|基层|垫层|管基|基础|梁|板|柱|墙|地坪|路面)/u.test(b[0].slice(j.length,t)))continue;let u=b.index||0,v=g.find(b=>b.length>j.length&&b.endsWith(j)&&a.slice(u+j.length-b.length,u+j.length)===b);if(v){let a=new Set(h.filter(a=>a.location===v&&a$(a.spec)?.source===n.source).map(a=>a.spec));if(a.has(i)||a.size>0)continue}if(q.has(i)||!(0,l.Zg)(i))continue;let w=1===q.size?[...q][0]:void 0,x=void 0===w?function(a,b,c,d,e){if(d.size<2)return;let f=a2(/([一-龥]{1,12})$/u.exec(a.slice(Math.max(0,c-12),c))?.[1]||"");if(!f)return;let g=RegExp(`([一-龥]{1,12})${a_(b)}[^。;;\\n|]{0,24}?(${e.source})`,"gu"),h=new Set;for(let b of a.matchAll(g))a2(b[1]||"")===f&&d.has(b[2]||"")&&h.add(b[2]||"");return 1===h.size?[...h][0]:void 0}(a,j,b.index||0,q,n):void 0,y=w??x,z=u+t;if("other-class"===function(a,b,c,d){let e=a5(a,b);return e?d.some(a=>a.length>c.length&&a===`${e}${c}`)?"same-class":a6.test(e)?"other-class":a4.test(e)||a3.test(e)?"same-class":"other-class":"bare"}(a,u,j,g))continue;let A=a.slice(Math.max(0,z-24),z+i.length+16),B=/([^。;;,、|\n]*)$/u.exec(a.slice(0,z))?.[1]||"",C=(0,l.W_)(`${B}${i}`,i),D=!!(C&&C.includes(j)),E=y?function(a,b){if(!a7.test(a.trim())||!a7.test(b.trim()))return;let c=(0,k.Bk)(a),d=(0,k.Bk)(b);if(void 0===c||void 0===d)return;let e=Math.max(c,d)/Math.min(c,d);return e>k.do?e:void 0}(i,y):void 0,F=!!y&&(!!x||D)&&void 0===E,G=(0,k.Rd)({authorityOwner:y?p:void 0,bodyLocation:j,bodyWindow:A,found:i,authority:y||""}),H=F&&G.allowed?y:void 0;if(!F&&f>=c)continue;F?e+=1:f+=1;let I=[...q].join("/");if(d.push({issue:F?{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格错位:“${j}”使用的规格 ${i} 与工程量清单权威(${I})不一致`,suggestion:`按工程量清单将“${j}”的规格统一为 ${I};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。`}:{level:"warning",severity:"warning",category:"fact_consistency",owner:"system",repairability:"not_repair_needed",message:`规格错位:“${j}”使用的规格 ${i} 与工程量清单权威(${I})不一致`,suggestion:`按工程量清单将“${j}”的规格统一为 ${I};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。(本条已降级为告警:${void 0===E?`正文该处未能绑定到清单条目的具体对象${void 0===w?"或权威本身逐项多值无唯一口径":""}`:`正文该处尺寸与清单权威跨量级(${i} vs ${y},${E.toFixed(1)} 倍),不是同一属性维度的量(如板材厚度 vs 构件高度/长度)`},不作机器改写,交人工复核)`},location:j,replacement:H?{start:z,end:z+i.length,replacement:H,detail:`规格错位“${j}” ${i}→${H}(以工程量清单锁定口径为准)`}:void 0}),e>=c)return d}}}return d}function a9(a,b){return a8(a,b).map(a=>a.issue)}let ba=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function bb(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>ba.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&ba.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let bc=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,bd=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function be(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=bc.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&bd.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b}let bf=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u,bg=/^(?:焊接|螺栓连接|铆接|法兰连接|承插连接|卡箍连接|粘接|卡压连接|卡扣连接|螺纹连接|高强螺栓连接)(?:固定|安装|连接|紧固)?$/u,bh=/(?:焊接|螺栓连接|铆接|法兰连接|承插连接|卡箍连接|粘接|卡压连接|卡扣连接|螺纹连接|高强螺栓连接)$/u;function bi(a){let b=a.replace(/\s+/gu,""),c=new Set,d=[];{let b=a.split(/\n/u);for(let a=0;a+1<b.length;a+=1){let c=b[a]??"";if(/^\s*\|/u.test(c)&&/^\s*\|[\s:|-]+\|\s*$/u.test((b[a+1]??"").trim()))for(let a of c.split("|")){let b=a.replace(/\s+/gu,"");b.length>=2&&d.push(b)}}}let e=a=>d.some(b=>b.includes(a));for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){let d=bf.test(a[1])||bf.test(a[2]),f=(0,j.m4)(a[1],a[2]);if(!d&&!f||e(a[0]))continue;let g=Math.max(0,(a.index||0)-12),h=Math.min(b.length,(a.index||0)+a[0].length+12),i=b.slice(g,h);!/管线|管道|电缆|给水|排水/u.test(i)&&(!/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(i)&&(!f||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(i))||c.add(`“${a[1]}/${a[2]}”`))}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);bf.test(f)&&c.add(a[0].slice(0,30))}for(let a of b.matchAll(/([一-龥]{2,8})或([一-龥]{2,8})/gu)){let d=bf.test(a[1])||bf.test(a[2]),f=(0,j.m4)(a[1],a[2]);if(!d&&!f||/(?:可能)?(?:达到|超过|大于|小于|高于|低于|不少于|不超过)或(?:达到|超过|大于|小于|高于|低于|不少于|不超过)/u.test(a[0]))continue;let g=b.slice(0,(a.index||0)+a[1].length).split(/[。;,,、]/u).pop()||"";if(/造成|导致|引发|致使|诱发|酿成/u.test(g)||e(a[1])||e(a[2]))continue;let h=Math.max(0,(a.index||0)-12),i=b.slice(h,(a.index||0)+a[1].length);if(/管线|管道|电缆|给水|排水/u.test(i)||!/按|采用|选用|拟用|拟采用|方案|为/u.test(i)&&(!f||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(i)))continue;let k=b.slice(Math.max(0,(a.index||0)-6),a.index||0);if(/临时/u.test(k+a[0])&&/支护|围护|放坡|坡率|开挖/u.test(a[0])||/围挡|警示|防护栏|爬梯|栈桥|便道/u.test(a[0]))continue;let l=b.slice(Math.max(0,(a.index||0)-30),(a.index||0)+a[0].length+12);if(/临时|临建|可拆卸|可周转|撤场/u.test(l)&&/集装箱|活动房|板房|棚房|岗亭|彩钢/u.test(a[1]+a[2])||/顺接|衔接|接顺|接入|连通|找坡|找平/u.test(a[2]))continue;let m=b.slice((a.index||0)+a[0].length,(a.index||0)+a[0].length+6);if(/^(?:顺接|衔接|接顺|接入|连通|找坡|找平)/u.test(m)||/(?:前|后)$/u.test(a[0])||/^(?:之前|之后|前|后)/u.test(m))continue;{let c=Math.max(0,(a.index||0)-8),d=Math.min(b.length,(a.index||0)+a[0].length+8);if(b.slice(c,d).includes("→"))continue}let n=a[1]+a[2];if(/(?:强度不足|固定不牢|松动|变形|开裂|渗漏|破损|脱落|锈蚀|超差|不合格|缺陷|损坏|缺失|偏差|偏移|沉降|位移|错台|起皮|空鼓)/u.test(n)){let c=b.slice((a.index||0)+a[0].length,(a.index||0)+a[0].length+40);if(/返工|返修|整改|修复|加固|更换|补强|补做|处理|消除|纠正|复验|复查|销项|验收/u.test(c))continue}if(bh.test(a[1])&&bg.test(a[2]))continue;let o=a[1].replace(/^.*?(地下连续墙|钢板桩|灌注桩|支护桩|土钉墙|基础|支护|围护|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|形式|体系)/u,"$1");c.add(`${o}或${a[2]}`)}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function bj(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];let c=(()=>{let b=a.split(/\r?\n/u),c=[],d=!1;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b){b[1].length<=3&&(d=/基坑|开挖|支护|土方/u.test(b[2])),d&&c.push(a);continue}d&&c.push(a)}return c.join("\n")})();for(let a of(c?c.replace(/\s+/gu,""):b).matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|低于|高于|按|倍|依据|详见|参考|示意|每|以上|以下|偏差|±0|0\.000)/u.test(b)&&!/\d+(?:\.\d+)?\s*(?:h|小时|天|日|min|周|月|昼夜)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}function bk(a,b){let c=(0,i.z4)(b);if(void 0===c||c<3)return[];let d=[],e=a_(String(c)),f=RegExp(`(?<![\\d.])${e}(?![\\d])`,"u"),g=a.replace(/\s+/gu,""),h=a=>{for(let b of g.matchAll(RegExp(a,"gu"))){let a=b.index??0,c=g.slice(Math.max(0,a-120),a+b[0].length+120);if(f.test(c))return!0}return!1};return c>=3&&!h("危大工程")&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程判定缺失:资料基坑开挖深度 ${c}m(≥3m),正文未在判定结论邻近处给出本工程实际深度值(仅出现判定规则套话不算落地)`,suggestion:`依据住建部令第37号,开挖深度≥3m 属危大工程:在基坑支护/危大工程清单小节写明本工程实际深度 ${c}m 与危大工程判定结论,不得只写判定规则不落地本项目。`}),c>=5&&!h("超过一定规模")&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`超危大工程判定缺失:资料基坑开挖深度 ${c}m(≥5m),正文未在「超过一定规模」判定邻近处给出本工程实际深度值(须同时写明专家论证要求)`,suggestion:`开挖深度≥5m 属超过一定规模的危大工程:写明本工程深度 ${c}m 对应分级结论,专项施工方案必须经专家论证,不得只写判定规则不落地分级。`}),d}function bl(a,b){let c=[b.canonical?.byKey.foundation_support_form?.value,...(b.drawings||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.project||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.preciseFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`)].filter(Boolean).filter(a=>/基坑支护形式|基坑支护方式|支护形式|支护方式|土钉|放坡|喷锚|护坡/u.test(a)&&!/监测|监测频次|闭环|基坑开挖深度/u.test(a));if(0===c.length)return[];let d=[];for(let a of c)for(let b of["土钉墙","放坡","喷锚","挂网喷浆","排桩","灌注桩","地下连续墙","内支撑","锚杆","锚索"])a.includes(b)&&d.push(b);let f=[],g=/不采用|未采用|不设置|未设置|不使用|不宜采用|不得采用|不再出现|不得出现|严禁出现|避免出现|已删除|取消/u,h=["支护桩","冠梁","钻孔灌注桩","灌注桩","地下连续墙","排桩","咬合桩","内支撑"].filter(b=>(b=>{let c=RegExp(b,"gu");for(let b of a.matchAll(c)){let c=a.lastIndexOf("\n",b.index)+1,d=a.indexOf("\n",b.index);-1===d&&(d=a.length);let e=a.slice(c,d).slice(Math.max(0,b.index-c-12),b.index-c);if(!g.test(e))return!0}return!1})(b)&&!d.includes(b));return h.length>0&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式与资料矛盾:正文出现资料中不存在的支护体系词 ${h.join("、")}`,suggestion:`资料基坑支护形式为「${d.join("、")||c[0]?.slice(0,60)}」:删除编造的支护桩/冠梁/灌注桩类表述与对应参数(垂直度偏差/冠梁顶面标高等),按资料支护形式改写。`}),0===d.filter(b=>RegExp(b,"u").test(a)).length&&/基坑|支护/u.test(a)&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式未落地:资料基坑支护形式「${d.join("、")||c[0]?.slice(0,60)}」未在正文中出现`,suggestion:`在基坑支护小节写明本工程实际支护形式(${d.join("、")})及对应工艺参数(土钉长度/间距/坡度等),不得以泛化表述回避。`}),f}let bm=["塔式起重机","施工升降机","施工电梯","汽车起重机","汽车吊","混凝土泵车","混凝土泵","挖掘机","装载机","推土机","压路机","平地机","空压机","注浆机","锚杆钻机","混凝土喷射机","喷射机","吊篮","钢筋加工设备","塔吊"],bn=/挖掘机|空压机|注浆机|锚杆钻机|混凝土喷射机|喷射机|推土机/u;function bo(a,b){let c={late:[],inverted:[]},d=function(a){let b=[];for(let c of a.matchAll(/第(\d{2,3})日[^。;;\n|]{0,8}?(?:进场|投入使用|安装|调试)/gu)){let d=c.index||0,e=a.slice(Math.max(0,d-24),d),f=bm.find(a=>e.includes(a));f&&b.push({equipment:f,day:Number(c[1]),raw:`${e.slice(-18)}${c[0].slice(0,20)}`,start:d,end:d+c[1].length+2})}let c=new Set;return b.filter(a=>{let b=`${a.equipment}:${a.raw}`;return!c.has(b)&&(c.add(b),!0)})}(a);if(0===d.length)return c;let f=function(a,b){for(let c of[a,...(b.schedule||[]).map(a=>`${a.key||""}${(0,e.lG)(a.value)}`)]){let a=/(?:计划工期|合同工期|总工期|工期总日历天数)[^\d。;;\n|]{0,12}(\d{1,4})\s*个?\s*日历天/u.exec(c);if(a){let b=Number(a[1]);if(Number.isFinite(b)&&b>=30&&b<=3e3)return b}}}(a,b);void 0!==f&&(c.total=f,c.late=d.filter(a=>a.day>=f));let g=aH(a).filter(a=>"excavation"===a.key).map(a=>a.day);if(g.length>0){let a=Math.min(...g);c.pitDone=a,c.inverted=d.filter(b=>bn.test(b.equipment)&&b.day>a)}return c}function bp(a,b){let c=bo(a,b),d=[];return void 0!==c.total&&c.late.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场时间荒谬:${c.late.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 已达/超过总工期(${c.total}日历天),工程结束时设备尚未进场`,suggestion:`以总进度计划为准核对设备进场计划:大型施工设备必须在总工期结束前进场并完成使用,${c.late.map(a=>a.equipment).join("、")} 的进场日应提前至工程开始阶段,删除矛盾的尾期进场表述。`}),void 0!==c.pitDone&&c.inverted.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场工序倒挂:${c.inverted.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 晚于基坑支护及土方外运完成节点(第${c.pitDone}日),基坑阶段设备未在工序开始前进场`,suggestion:`基坑阶段专用设备必须在基坑开挖/支护开始前完成进场与报验:将 ${c.inverted.map(a=>a.equipment).join("、")} 的进场日调整为早于基坑支护完成节点(第${c.pitDone}日)的日期,删除工序倒挂表述。`}),d}let bq=/关于|定于|对于|至于|由于|基于|鉴于|处于|位于|在于|置于|用于|属于|终于|便于|善于|现在|正在|存在|所在|潜在|实在$/u;function br(a,b){let c=a,d=[];for(let a=1;a<=3;a+=1){let a=bo(c,b),e=new Map;for(let b of[...a.late,...a.inverted])e.set(`${b.start}:${b.end}`,b);if(0===e.size)break;let f=0,g=1/0;for(let a of[...e.values()].sort((a,b)=>b.start-a.start)){let b=a.start,e=c[b-1];if("于"!==e&&"在"!==e||bq.test(c.slice(Math.max(0,b-2),b))||(b-=1),a.end>g)continue;let h=c.slice(b,a.end);c=c.slice(0,b)+"按进度计划"+c.slice(a.end),g=b,f+=1,d.push(`「${h}」→「按进度计划」`)}if(0===f)break}return{markdown:c,fixedCount:d.length,details:d}}let bs=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,bt=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function bu(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let bv=/^\s*\|[\s:|-]+\|/u;function bw(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>bv.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataRows:e.map(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(bx(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function bx(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function by(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let bz=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,bA=a=>a.filter(a=>!bz.test(a));function bB(a){let b=[];for(let c of bw(a)){let a=c.dataRows;if(a.length<4)continue;let d=a=>(a[0]||"").trim(),e=(a,b)=>bx(a,b);for(let f=Math.floor(a.length/2);f<=Math.ceil(a.length/2);f+=1){let g=a.slice(0,f),h=a.slice(f);if(g.length<2||h.length<2)continue;let i=0,j=-1;for(let a of h){let b=d(a);if(b){for(let c=j+1;c<g.length;c+=1)if(d(g[c])===b&&e(a,g[c])>=.5){i+=1,j=c;break}}}let k=i/h.length;if(!(k<.8)){b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`表格内部数据行重复:第 ${c.startLine+1}~${c.endLine+1} 行表格(表头:${c.header.slice(0,3).join("|")})数据行两遍粘贴(${f} 行 + ${h.length} 行,重复匹配率 ${Math.round(100*k)}%)`,suggestion:`删除第二遍重复数据行(保留第一遍 ${f} 行),删除后表格仅保留一份完整数据。`});break}}}return b}function bC(a){let b=[],c=bw(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=bx(e.header,f.header),i=bx(e.firstCol,f.firstCol),j=bx(e.dataCells,f.dataCells),k=Math.max(by(bA(e.dataCells),bA(f.dataCells)),by(bA(f.dataCells),bA(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function bD(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}let bE=15;function bF(a){let b=function(a){let b=[];for(let c of a.split(/\n\s*\n/u)){let a=c.trim();if(!a)continue;let d=a.split(/\n/u).filter(a=>{let b=a.trim();return b&&!/^#{1,6}\s/u.test(b)&&!b.startsWith("|")}).join("\n"),e=[];for(let a of d.split(/[。!?!?]/u)){let b=a.trim().replace(/\s+/gu,"");if(b.length<bE)continue;let c=e.findIndex(a=>a.sentence===b||a.sentence.length>b.length&&a.sentence.length-b.length<=bE&&a.sentence.endsWith(b));c>=0?e[c].count+=1:e.push({sentence:b,count:1})}for(let a of e)a.count>=2&&b.push({sentence:a.sentence,count:a.count})}return b}(a);return 0===b.length?[]:b.slice(0,3).map(({sentence:a,count:b})=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`段落内句子复读 ${b} 次:“${a.slice(0,30)}…”`,suggestion:"同一段落内相同句子只保留首次出现,删除段尾复读的重复句(确定性修复器已接入自动剥离)。"}))}let bG=/^(.+?)(?:((?:\d+|[一二三四五六七八九十]+)))+$/u;function bH(a){let b=[];for(let c of a.matchAll(/^###\s+(.+)$/gmu)){let d=c[1].trim();bG.test(d)&&b.push({raw:d,index:a.lastIndexOf("\n",c.index??0)+1})}return b}function bI(a){let b=bH(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"local_deterministic",message:`目录小节标题含防撞名编号后缀:“${a}”`,suggestion:"正式投标文件目录不允许「(1)(2)」编号后缀小节:确定性修复器已接入(按主题域重命名为语义化标题或合并同基线拆半小节)。"}))}let bJ=/第(\d{1,3})日(?:至|到|~|~|—|-)第(\d{1,3})日/gu;function bK(a){let b=[];for(let c of a.matchAll(bJ))Number(c[1])<=Number(c[2])||b.push({start:c.index??0,end:(c.index??0)+c[0].length,raw:c[0]});return b}function bL(a){let b=bK(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`时间区间倒挂:“${a}”起点大于终点,属时间拼接病句`,suggestion:"删除倒挂区间起点,仅保留终点日期表述(确定性修复器已接入自动剥离)。"}))}function bM(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=bD(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}let bN=/\d{2,}(?:\.\d+)?/gu,bO=/\d+\s*#/gu;function bP(a){return(function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){let d=b[a].trim();!(!d||/^#{1,6}\s/u.test(d)||d.startsWith("|")||/^(?:[-*+•]|\d{1,3}[.、)])\s*/u.test(d))&&((d.match(/[一-龥]/gu)||[]).length<40||c.push({line:a+1,text:d,skeleton:function(a,b){let c=a.replace(/[\s |*`_]/gu,""),d=new Set;for(let a=0;a+5<=c.length;a+=1)d.add(c.slice(a,a+5));return d}(d.replace(/\d+(?:\.\d+)?/gu,"#"),5),numbers:new Set(d.match(bN)||[]),markers:new Set((d.match(bO)||[]).map(a=>a.replace(/\s/gu,"")))}))}let d=new Map;c.forEach((a,b)=>{for(let c of a.numbers){let a=d.get(c)||[];a.push(b),d.set(c,a)}});let e=new Map;for(let a of d.values())for(let b=0;b<a.length;b+=1)for(let c=b+1;c<a.length;c+=1){let d=`${a[b]}|${a[c]}`;e.set(d,(e.get(d)||0)+1)}let f=[];for(let[a,b]of e){if(b<2)continue;let[d,e]=a.split("|").map(Number),g=c[d],h=c[e];if(2>Math.abs(g.line-h.line))continue;let i=new Set([...g.numbers,...h.numbers]).size,j=0===i?0:b/i;if(j<.6)continue;let k=function(a,b){if(0===a.size||0===b.size)return 0;let c=0;for(let d of a)b.has(d)&&(c+=1);return c/(a.size+b.size-c)}(g.skeleton,h.skeleton);!(k<.3)&&(!(g.markers.size>0)||!(h.markers.size>0)||[...g.markers].some(a=>h.markers.has(a)))&&f.push({firstLine:g.line,secondLine:h.line,skeletonJaccard:Number(k.toFixed(3)),numberOverlap:Number(j.toFixed(2)),excerpt:h.text.slice(0,40)})}return f.sort((a,b)=>a.secondLine-b.secondLine).slice(0,20)})(a).slice(0,3).map(a=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落近似重复:第 ${a.secondLine} 行与第 ${a.firstLine} 行叙述同一批对象与工程量(骨架一致度 ${a.skeletonJaccard}、数值一致度 ${a.numberOverlap}):“${a.excerpt}…”`,suggestion:"两处仅保留信息完整的一处并合并差异(不得改写既有数值与工序事实);重复段落后含原文粘贴来源的,以正文归纳口径为准。",provenance:{detectorId:"paragraph-near-duplicate",fingerprint:(0,e.c6)(`${a.firstLine}|${a.secondLine}|${a.excerpt}`)}}))}function bQ(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(bs))d.add(bu(b[0]));if(c?.extracted)for(let a of c.entries)for(let b of a.text.matchAll(bs))d.add(bu(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(bs)){let a=bu(b[0]);!d.has(a)&&(bt.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位,禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function bR(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let bS=/(?:荣获|曾获|获得过|被评为)\s*[^。;\n]{2,24}/gu,bT=/奖|杯|荣誉|称号|优秀|先进|示范|观摩|文明工地|优质工程/u,bU=/(?:承接过|承建过)\s*[^。;\n]{2,24}/gu,bV=/工程|项目|标段|业绩/u,bW=/完成过\s*(?:[0-90-9一二三四五六七八九十两]+|[多若干]+)\s*(?:个|项|例|座|条|余项|余个)?\s*(?:类似|同类|以上的?)?\s*(?:工程|项目)/gu,bX=/资质证书编号|证书编号|安全生产许可证编号|资质编号|营业执照注册号|统一社会信用代码|证号[::]/gu,bY=/(?:设计|勘察|监理)单位|设计院|勘察院|监理公司|设计研究总院|设计研究院|设计总院/u;function bZ(a,b){if(!b)return[];let c=[];for(let b of a.matchAll(bS))bT.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(bU))bV.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(bW))c.push(b[0].trim());for(let b of a.matchAll(bX))bY.test(function(a,b){let c=b;for(;c>0&&!/[。;;\n]/u.test(a[c-1]);)c-=1;let d=b;for(;d<a.length&&!/[。;;\n]/u.test(a[d]);)d+=1;return a.slice(c,d)}(a,b.index??0))||c.push(b[0].trim());if(0===c.length)return[];let d=[...new Set(c)];return[{level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人身份标记 ${d.length} 处:${d.slice(0,3).map(a=>`“${a.slice(0,30)}”`).join("、")}${d.length>3?" 等":""}(招标暗标要求不得出现明示或暗示具体投标人的说明及标记,包括以往的施工业绩)`,suggestion:"删除或改写身份标记句:以往业绩/获奖表述一律删除;证书资质类表述改写为不自证身份的施工管理口径(如“按规定持证上岗”),不得保留证书编号与奖项名称。"}]}let b$=/人[、,,]材[、,,]机/u,b_=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function b0(a){let b=a.match(b_)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function b1(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!b$.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:b0(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=b0(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}async function b2(a,b,c={}){let d=[],e=(a,b)=>1e-6>Math.abs(a-b),f=[];for(let c of b){let b=c.groups??[];if(b.length<2||new Set(b.map(a=>Math.round(100*a.value))).size<2)continue;let d=RegExp((0,i.Lp)(c.name),"gu"),e=RegExp(`(?<![\\dA-Za-z])(\\d(?:[\\d,]*(?:\\.\\d+)?))\\s*${(0,i.YZ)(c.unit)}(?![0-9a-zA-Z])`,"gui"),g=[];for(let f of a.matchAll(d)){let d=f.index??0,h=d+f[0].length,i=a.lastIndexOf("\n",d)+1,j=a.indexOf("\n",d);if(-1===j&&(j=a.length),/^\s*\|/u.test(a.slice(i,j)))continue;let k=Math.max(i,d-24),l=a.slice(k,d),n=Math.max(l.lastIndexOf("。"),l.lastIndexOf(";"),l.lastIndexOf(";")),o=n>=0?l.slice(n+1):l,p=b.filter(a=>a.group&&o.includes(a.group));if(1!==p.length)continue;let q=p[0],r=a.slice(h,h+24),s=Math.min(...[r.search(/[、。;,]/u),r.search(/\n/u)].filter(a=>a>=0).concat([r.length])),t=r.slice(0,s),u=null;for(let a of t.matchAll(e)){let b=a[1],d=Number(b.replace(/,/gu,""));Number.isFinite(d)&&!(d<=0)&&(null===u||Math.abs(d-c.value)<Math.abs(u.value-c.value))&&(u={offset:h+(a.index??0)+a[0].indexOf(b),value:d,raw:b})}if(!u)continue;let v=a.slice(h,u.offset);(!/[A-Za-z]/u.test(v)||/[\u4e00-\u9fa5]/u.test(v))&&g.push({group:q.group,value:u.value,excerpt:a.slice(d,u.offset+u.raw.length),sentence:(0,m.kE)(a,d,u.offset+u.raw.length-d),flatIndex:-1})}0!==g.length&&f.push({authority:{name:c.name,value:c.value,unit:c.unit},detail:b,pairings:g})}if(0===f.length)return d;let g=[];for(let a of f)for(let b of a.pairings){b.flatIndex=g.length;let c=a.detail.find(a=>a.group===b.group);g.push({id:`xp${b.flatIndex}`,kind:"quantity",subject:`${a.authority.name}(${b.group})`,value:b.value,unit:a.authority.unit,authority:c?.value??a.authority.value,sentence:b.sentence,facts:[`该条目清单分工程明细:${a.detail.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}`]})}let h=c.adjudicate??m.hy,j=await h(g,{diagnostics:c.diagnostics,signal:c.signal});for(let a of f){let b=a.pairings.filter(a=>j.records.get(`xp${a.flatIndex}`)?.conclusion!=="consistent");if(0===b.length)continue;let c=!1;for(let f of b){let b=a.detail.find(a=>a.group===f.group);if(!b||e(b.value,f.value))continue;let g=a.detail.find(a=>a.group!==f.group&&e(a.value,f.value));if(g){d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${f.excerpt.slice(0,40)}”在“${f.group}”语境处取值 ${f.value}${a.authority.unit},该值是“${g.group}”的清单明细值(${f.group} 的清单明细值为 ${b.value}${a.authority.unit})`,suggestion:`以工程量清单分工程明细为准修正“${f.group}”语境:应为 ${b.value}${a.authority.unit},不得沿用“${g.group}”的明细值 ${f.value}${a.authority.unit};修复后全文该条目分工程取值必须与清单明细逐一对应。`}),c=!0;break}}if(c)continue;let f=new Map;for(let a of b){let b=a.value.toFixed(2),c=f.get(b)??new Set;c.add(a.group),f.set(b,c)}for(let[c,e]of f){if(e.size<2)continue;let f=a.detail.filter(a=>e.has(a.group));if(new Set(f.map(a=>Math.round(100*a.value))).size<2)continue;let g=b.find(a=>a.value.toFixed(2)===c);d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${g.excerpt.slice(0,40)}”数值 ${c}${a.authority.unit} 同时出现在“${[...e].join("”“")}”等 ${e.size} 个工程对象语境,而清单明细值互不相同(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")})——至少一处属跨工程同值复制`,suggestion:`逐工程对象按清单明细值修正取值(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}),不得多工程共用同一数值。`});break}}return d}function b3(a){let{phrase:b,first:c,second:d}=a,e=(0,n.Qk)(b,c.phase),f=(0,n.Qk)(b,d.phase);if(e.length<4||f.length<4)return null;let g=e.start<=f.start?c:d,h=g===c?d:c;return{leading:g,trailing:h}}function b4(a,b){let c=[],d=[];if(0===b.length)return{claims:c,ambiguities:d};let e=new Set,f=(f,g,h,i)=>{if(e.has(f))return;let j=Number(g.replace(/[,,]/gu,""));if(!Number.isFinite(j)||j<=0)return;let k=a.lastIndexOf("\n",f)+1,l=a.indexOf("\n",f);-1===l&&(l=a.length);let m=a.slice(k,l);if(/^\s*\|.*\|\s*$/u.test(m)||aO.test(m))return;let o=a.slice(Math.max(k,f-12),f);if(/不少于|不低于|至少|最低|不小于|≥/u.test(o)||/(?:[\u4e00-\u9fa5]{1,3}(?:工|员|长)|司机|班组|队伍?)\s*$/u.test(o))return;let p=function(a,b){let c=(a.match(/[\p{Script=Han}]/gu)||[]).length;if(0===c)return null;let d=null,e={length:0,start:0,end:0};for(let c of b){let b=(0,n.Qk)(a,c.phase);b.length>=4&&(null===d||b.length>e.length)&&(d=c,e=b)}if(!d)return null;if(e.length>=c)return{best:d};for(let c=1;c<a.length-1;c+=1){if(!/[与及和、,,]/u.test(a[c]))continue;let d=b.find(b=>b.phase===a.slice(0,c).trim());if(!d)continue;let e=b.find(b=>b.phase===a.slice(c+1).trim());if(e&&d.value===e.value)return{best:d}}for(let c of[a.slice(0,e.start),a.slice(e.end)])if(!((c.match(/[\p{Script=Han}]/gu)||[]).length<2)){for(let a of b)if(a.phase!==d.phase&&(0,n.Qk)(c,a.phase).length>=4)return{best:d,second:a}}return{best:d}}(h,b);if(!p)return;let q=a.slice(Math.max(k,f-24),Math.min(a.length,f+g.length+1)).trim();if(p.second){e.add(f),d.push({start:f,raw:g,actual:j,phrase:h,first:{phase:p.best.phase,value:p.best.value,trace:p.best.trace},second:{phase:p.second.phase,value:p.second.value,trace:p.second.trace},excerpt:q});return}if(j===p.best.value)return void e.add(f);e.add(f),c.push({start:f,end:f+g.length,raw:g,actual:j,expected:p.best.value,phase:p.best.phase,trace:p.best.trace,channel:i,excerpt:q})};for(let b of a.matchAll(w)){let c=(b.index??0)+b[0].indexOf(b[1]),d=a.lastIndexOf("\n",c)+1,e=z(a,d,c);e&&f(c,b[1],e.replace(/阶段$/u,""),"base")}for(let b of a.matchAll(y)){if(!b[1]||!b[2])continue;let c=b[2],d=(b.index??0)+b[0].lastIndexOf(c);if(e.has(d))continue;let g=Math.max(a.lastIndexOf("。",d),a.lastIndexOf(";",d),a.lastIndexOf(";",d))+1,h=a.length;for(let b of["。",";",";"]){let c=a.indexOf(b,d);-1!==c&&c<h&&(h=c)}/阶段/u.test(a.slice(g,h))&&f(d,c,b[1].trim(),"enumeration")}return{claims:c,ambiguities:d}}function b5(a,b){let{claims:c,ambiguities:d}=b4(a,b),e=[];for(let a of c)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段劳动力数据矛盾:正文“${a.excerpt.slice(0,60)}”取值 ${a.actual} 人,与蓝图分阶段劳动力推导不符(“${a.phase}”阶段应为 ${a.expected} 人)`,suggestion:`分阶段劳动力人数必须以蓝图推导为准:将“${a.phase}”阶段人数统一为 ${a.expected} 人${a.trace?`(依据:${a.trace})`:""},删除其他口径数字。`}});for(let a of d)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段名疑似拼接:正文“${a.excerpt.slice(0,60)}”中的阶段名“${a.phrase}”同时混含“${a.first.phase}”与“${a.second.phase}”两个蓝图阶段,人数 ${a.actual} 人无法归属`,suggestion:`将阶段名拆分表述:“${a.first.phase}”按 ${a.first.value} 人、“${a.second.phase}”按 ${a.second.value} 人(蓝图推导)分句列出,不得把两个阶段名连写成单一阶段。`}});return e.sort((a,b)=>a.position-b.position).slice(0,8).map(a=>a.issue)}function b6(a,b){return b7(a,b).map(a=>a.issue)}function b7(a,b){let c=[];if(0===b.length)return c;let d=/首批|第一批|首期|第一期/gu,e=/剩余|补充|追加/gu,f=/保持|维持|确保|不少于|不低于|控制在|以内|以下/u;for(let g of b){if(!g.name||!Number.isFinite(g.count)||g.count<=0)continue;let b=(0,i.Lp)(g.name),h=RegExp(`${b}[^\\n。;;、,,]{0,4}?([\\d,]+)\\s*(?:台|辆)`,"gu"),j=new Set,k=new Set,l=[],m="";for(let b of a.matchAll(/[^。;;\n]+/gu)){let c=b[0],g=b.index??0,i=[...c.matchAll(d)].map(a=>a.index??0),n=[...c.matchAll(e)].map(a=>a.index??0);if(0!==i.length||0!==n.length)for(let b of c.matchAll(h)){if(!b[1])continue;let c=Number(b[1].replace(/[,,]/gu,""));if(!Number.isFinite(c)||c<=0)continue;let d=b.index??0,e=g+d,h=a.lastIndexOf("\n",e)+1,o=a.indexOf("\n",e);-1===o&&(o=a.length);let p=a.slice(h,o);if(/^\s*\|.*\|\s*$/u.test(p)||aO.test(p))continue;let q=b[0];if(f.test(q)||/以内|以下|上限/u.test(a.slice(e+q.length,e+q.length+4)))continue;let r=i.filter(a=>a<d&&d-a<=40).pop(),s=n.filter(a=>a<d&&d-a<=40).pop();if(void 0!==r||void 0!==s){if(void 0!==s&&(void 0===r||s>r)){k.add(c);let b=/([\d,]+)\s*(?:台|辆)\s*$/u.exec(q);if(b){let c=/(?:约|共|计|近|至少)\s*$/u.exec(q.slice(0,b.index)),d=e+b.index-(c?c[0].length:0),f=e+q.length;l.push({start:d,end:f,excerpt:a.slice(d,f)})}}else j.add(c);m||(m=a.slice(Math.max(h,e-20),Math.min(o,e+q.length)).trim())}}}if(0===j.size||0===k.size)continue;let n=[...j],o=[...k];if(!n.some(a=>o.some(b=>a+b===g.count))&&(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`机械设备分批台数矛盾:“${g.name}”分批投入(首批 ${n.join("/")} 台+剩余 ${o.join("/")} 台)各批组合之和均不等于蓝图机械汇总 ${g.count} 台${m?`(原文“${m.slice(0,50)}”)`:""}`,suggestion:`分批投入的台数之和必须等于蓝图机械汇总台数:将“${g.name}”各批次调整为首批与剩余合计 ${g.count} 台,或删除分批描述仅保留“${g.name} ${g.count} 台”汇总口径。`},removals:l}),c.length>=5))break}return c}function b8(a,b){let c=[];if(!b||!Number.isFinite(b)||b<=0)return c;let d=/交底|考察|封样|编制|审批|报审|报批|培训|演练|签订|组建|建立|采购|调查|备案|申报|进场确认/u;for(let e of a.matchAll(/(?:开工令下发|开工令下达|下达开工令|开工|计划开工)[^。;;\n年月]{0,8}?(?:第\s*(\d+)\s*(?:个)?(?:日历)?日|(\d+)\s*(?:个)?(?:日历)?日)/gu)){let f=e[1]||e[2];if(!f)continue;if("内"===a.slice((e.index??0)+e[0].length,(e.index??0)+e[0].length+1)){let b=a.slice(Math.max(0,(e.index??0)-40),(e.index??0)+e[0].length+40);if(!d.test(b))continue}let g=Number(f);if(!Number.isFinite(g)||g<=0||g<b)continue;let h=(e.index??0)+e[0].lastIndexOf(f),i=a.lastIndexOf("\n",h)+1,j=a.indexOf("\n",h);-1===j&&(j=a.length);let k=a.slice(i,j);if(/^\s*\|.*\|\s*$/u.test(k))continue;let l=a.slice(Math.max(i,h-40),Math.min(j,h+f.length+40));if(!d.test(l)||aO.test(l))continue;let m=a.slice(Math.max(i,h-30),Math.min(j,h+f.length+14)).trim(),n=e.index??0;if(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`前期动作时限矛盾:正文“${m}”将前期准备动作时限设在开工后第 ${g} 日,已达到/超过总工期 ${b} 日(竣工日)——前期动作不可能安排在项目末期`,suggestion:`前期准备动作时限必须落在施工准备阶段内:将第 ${g} 日改为与施工准备阶段相匹配的早期天数(早于总工期 ${b} 日),或删除具体天数改述为“开工令下发后在施工准备阶段内完成”。`},start:n,end:n+e[0].length+ +!!/[前内]/u.test(a[n+e[0].length]||"")}),c.length>=5)break}return c}function b9(a,b){return b8(a,b).map(a=>a.issue)}function ca(a,b){let c=b8(a,b);if(0===c.length)return{markdown:a,fixedCount:0,details:[]};let d=a,e=[],f=1/0;for(let a of[...c].sort((a,b)=>b.start-a.start)){if(a.end>f)continue;let b="在"===d[a.start-1]?"施工准备阶段内":"在施工准备阶段内",c=d.slice(a.start,a.end);d=d.slice(0,a.start)+b+d.slice(a.end),f=a.start,e.push(`「${c}」→「${b}」`)}return{markdown:d,fixedCount:e.length,details:e}}function cb(a){let b=a.split(/\r?\n/u),c=[];b.forEach((a,b)=>{let d=/^(#{3,4})\s+([^\n]+)$/u.exec(a.trim());d&&c.push({index:b,level:d[1].length,title:d[2].trim()})});let d=[];for(let a=0;a<c.length;a+=1){let{index:e,level:f,title:g}=c[a],h=g.replace(/^[\d.]+[\s\u00a0]*/u,"");if(!/工程\s*$/u.test(h))continue;let i=h.replace(/\s*工程\s*$/u,"");if(!i||!/[、与及]/u.test(i))continue;let j=i.split(/[、与及]/u).map(a=>a.trim()).filter(a=>a.length>=2);if(j.length<2)continue;let k=b.length;for(let b=a+1;b<c.length;b+=1)if(c[b].level<=f){k=c[b].index;break}let l=b.slice(e+1,k).join("\n"),m=l.replace(/[、,,]/gu,""),n=j.filter(a=>{if(/^(?:配套|附属|其他|其它|零星|通用)$/u.test(a)||l.includes(a))return!1;let b=a.replace(/[、,,]/gu,"").replace(/(?:安装|施工|工程|作业)$/u,"");if(b.length>=2&&m.includes(b))return!1;if(b.length>=4){let a=b.match(/.{2}/gu)??[];if(a.length>=2&&a.every(a=>m.includes(a)))return!1}return!0});0!==n.length&&d.push({lineIndex:e,level:f,title:g,parts:j,uncovered:n})}return d}let cc=/^(?:合计|小计|总计|汇总|共计|总和|总额|总价|总数量|总量|合价)/u,cd=/^(?:其他|其它|其余|剩余|差额|补差)/u,ce=/^(?:其中|占比|比例|备注|说明|注[::])/u,cf=/待定|待补|待明确|待确认|未定|未明确|暂定|暂按|视情况|部分|若干/u,cg=/约(?![定束])|左右|以上|以下|以内|以外|不少于|不超过|不大于|不小于|不低于|不高于|至少|最少|最多|至多|超过|超出|不足|按实|据实|根据实际|不含|含\s*\d|其中|扣除|另计|另含|除外|等(?![级于额])|±|[≥≤≧≦><><]/u,ch=/[\d))]\s*[~~\-—–至到]\s*[\d((]/u,ci=/^(?:[-—–-//\\]+|无|不适用|不涉及|不包含|n\/a)$/iu,cj="(?<![A-Za-z0-9\\-Φφ])(-?(?:\\d{1,3}(?:[,,]\\d{3})+|\\d+)(?:\\.\\d+)?)\\s*(平方米|立方米|平方|立方|万元|亿元|千元|公里|厘米|毫米|公斤|日历天|小时|分钟|台班|工日|千米|盏|棵|株|袋|桶|块|片|条|根|座|台|套|个|处|道|项|批|次|人|名|户|间|层|樘|孔|眼|栋|幢|米|吨|元|万|千|百|天|周|月|年|℃|cm|kVA|mm|km|kg|kW|m2|m3|m\xb2|m\xb3|㎡|MPa|kPa|ml|L|t|m|%|%|‰|A|V|W)?";function ck(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu,"").replace(/^[((]?\d{1,2}(?:\.\d{1,2})?[.、))]?/u,"")}function cl(a){let b=a.replace(/[*_`]/gu,"").trim(),c={values:[],units:[],uncertain:!1};if(!b||ci.test(b))return c;let d=b.replace(/(?:GB|JGJ|CJJ|CJ|DB|DG|SL|JT|JTS|JTG|TSG|CECS|YB|SH|HG|SY|TB|AQ|JG|JB|ISO|GA|JC|MZ|WW|WH|GH|FZ|QB|YY|HY|LY|NY|SB|SN|WS|YZ|CB|EJ|HB|HS|MH|QJ|SC|SJ|TY|ZB)\s*\d*(?:\s*[A-Za-z])?(?:\s*\/\s*T)?\s*[\d.\-/·]+/giu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*[-/.月]\s*\d{1,2}\s*日?/gu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*月?/gu," ").replace(/\d{1,2}\s*月\s*\d{1,2}\s*日/gu," ").replace(/(?:19|20)\d{2}\s*年/gu," ").replace(/\d{1,2}(?:\.\d+)?\s*[::]\s*\d{1,2}(?:\.\d+)?/gu," ").replace(/第\s*\d+(?:\.\d+)?\s*(?:章|节|条|款|项|页|版|期|批|次|轮|步|道|层|日历天|季度|个?季度|阶段|部分|天|日|周|月|年)/gu," ").replace(/(?:详见|参见)\s*(?:第\s*)?\d[\d.]*(?:节|条|章|表|图|页|款)?/gu," ").replace(/(?:见|根据|依据|按照|依照|执行|符合)\s*第?\s*\d[\d.]*(?:节|条|章|表|图|页|款)/gu," ").replace(/[A-Za-z]{1,4}\s*[--]\s*\d+(?:\.\d+)?/gu," ").replace(/(?<![\d.])\d{1,2}(?:\.\d{1,2}){2,}(?!\d)/gu," ").replace(/(?:^|[\s、,,;;((])\d{1,2}\s*[.、))](?=\s*(?:\D|$))/gu," ").replace(/\d[\d,]*(?:\.\d+)?(?:\s*[×✕xX*]\s*\d[\d,]*(?:\.\d+)?)+/gu," ").replace(/\d{1,4}(?:\s*\/\s*\d{1,4})+/gu," ");if(cf.test(d))return{...c,uncertain:!0};if(!/\d/u.test(d))return c;if(cg.test(d)||ch.test(d))return{...c,uncertain:!0};let e=[...d.matchAll(RegExp(cj,"gu"))];if(0===e.length)return c;if(""!==d.replace(RegExp(cj,"gu")," ").replace(/[^\u4e00-\u9fa5a-z]/giu,"")&&e.some(a=>!a[2]))return{...c,uncertain:!0};for(let a of e){let b=Number(a[1].replace(/[,,]/gu,""));Number.isFinite(b)&&(c.values.push(b),c.units.push(function(a){let b=(a??"").trim().toLowerCase();return""===b?"":/^(?:m2|m²|㎡|平方米|平方|平米)$/u.test(b)?"m2":/^(?:m3|m³|立方米|立方|方)$/u.test(b)?"m3":/^(?:人|名|员|人员)$/u.test(b)?"人":"%"===b||"%"===b?"%":/^(?:千米|公里)$/u.test(b)?"km":/^(?:米|m)$/u.test(b)?"m":/^(?:吨|t)$/u.test(b)?"t":/^(?:公斤|千克|kg)$/u.test(b)?"kg":b}(a[2])))}return c}function cm(a){let b=cl(a);return b.uncertain||1!==b.values.length?null:{value:b.values[0],unit:b.units[0]??""}}function cn(a){let b=0,c=0,d=new Set;for(let e of a){let a=e.replace(/[*_`]/gu,"").trim();if(!a)continue;let f=cl(a);if(f.uncertain||cd.test(ck(a))&&0===f.values.length)return null;if(0!==f.values.length){for(let a of f.values)b+=a,c+=1;for(let a of f.units)a&&d.add(a)}}return d.size>1?null:{sum:b,count:c,unit:1===d.size?[...d][0]:""}}function co(a){return String(Math.round(100*a)/100)}function cp(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu," ").trim().slice(0,24)}function cq(a){let b=a.header,c=a.dataRows;if(0===c.length||0===b.length)return[];let d=b.map((a,b)=>b).filter(a=>cc.test(ck(b[a]??""))),e=c.map((a,b)=>b).filter(a=>cc.test(ck(c[a][0]??"")));if(d.length>1||e.length>1)return[];let f=[],g=Math.max(b.length,...c.map(a=>a.length)),h=1===d.length?d[0]:-1,i=1===e.length?e[0]:-1;if(h>0&&c.forEach((a,c)=>{if(c===i||ce.test(ck(a[0]??"")))return;let d=a[h];if(void 0===d)return;let e=cm(d);if(!e)return;let j=[];for(let b=1;b<g;b+=1)b!==h&&j.push(a[b]??"");let k=cn(j);if(!k||k.count<2||e.unit&&k.unit&&e.unit!==k.unit)return;let l=Math.abs(e.value-k.sum);if(l<=Math.max(1,.005*Math.abs(e.value)))return;let m=cp(a[0]??"")||`第 ${c+1} 行`,n=cp(b[h]??"")||"合计";f.push(`「${m}」行:${n} ${co(e.value)}${e.unit} ≠ 分项和 ${co(k.sum)}${k.unit}(差 ${co(l)})`)}),i>=0){let a=c[i];for(let d=1;d<g;d+=1){if(d===h)continue;let e=a[d];if(void 0===e)continue;let g=cm(e);if(!g)continue;let j=cn(c.filter((a,b)=>b!==i&&!ce.test(ck(a[0]??""))).map(a=>a[d]??""));if(!j||j.count<2||g.unit&&j.unit&&g.unit!==j.unit)continue;let k=Math.abs(g.value-j.sum);if(k<=Math.max(1,.005*Math.abs(g.value)))continue;let l=cp(a[0]??"")||"合计",m=cp(b[d]??"")||`第 ${d+1} 列`;f.push(`「${m}」列:${l} ${co(g.value)}${g.unit} ≠ 分项和 ${co(j.sum)}${j.unit}(差 ${co(k)})`)}}return f}function cr(a){let b=bw(a);if(0===b.length)return[];let c=[];for(let a of b){let b=cq(a);if(0!==b.length&&(c.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",message:`生成后事实反查失败:表格算术不自洽 ${b.length} 处(${b.slice(0,3).join(";")}${b.length>3?" 等":""})`,suggestion:"表内「合计」必须等于分项之和:以分项重算合计,或按权威数据修正分项;台账类保留显性「其他」差额项并给出数值;只允许修正表内数值,严禁编造无来源数据。"}),c.length>=5))break}return c}function cs(a){return bw(a).reduce((a,b)=>a+cq(b).length,0)}function ct(a,b){let c=b.projectName||"";if("village-municipal"===b.blueprintStrategyId||/自然村|美丽乡村|宜居|乡村振兴|行政村|村组|村庄/u.test(c))return[];let d=["自然村","村内","村庄","村民","多村并行","村组","各村"].map(b=>({term:b,count:(a.match(RegExp(b,"gu"))||[]).length})).filter(a=>a.count>0);if(0===d.length)return[];let e=d.reduce((a,b)=>a+b.count,0);return[{level:"error",severity:"blocker",category:"scope",message:`项目类型与正文用词矛盾:本项目非乡村类${c?`(${c})`:""},正文却出现乡村专有表述 ${d.map(a=>`「${a.term}」${a.count} 处`).join("、")}(合计 ${e} 处)`,suggestion:"按项目实际类型统一叙述口径:乡村专有表述应改为对应业务称谓(如「自然村分组」→「单位工程/施工区段」、「村内流水作业」→「区段内流水作业」);若项目确为乡村类,请检查项目名与蓝图策略选型后重新生成。"}]}let cu=[{figure:/进度|工期|横道|网络/u,table:/进度|工期|节点|工序/u,label:"进度计划表"},{figure:/平面|布置|总平面/u,table:/临时设施|临时用地|平面|设施配置/u,label:"临时设施/用地表"},{figure:/组织|机构|岗位|职责/u,table:/岗位|职责|机构|管理人员/u,label:"项目管理机构/岗位职责表"},{figure:/劳动力|人力/u,table:/劳动力|工种|人数/u,label:"劳动力计划表"},{figure:/机械|设备/u,table:/机械|设备|进场/u,label:"机械设备表"},{figure:/材料|物资/u,table:/材料|物资/u,label:"材料计划表"}];function cv(a,b){let c=[],d=a.split("\n"),f=/^图\s*\d+(?:[-—–-]\d+)?\s+\S+$/u,g=/^图\s+[^\s,。;:]{2,36}$/u,h=d.map((a,b)=>({text:a.trim(),index:b})).filter(a=>f.test(a.text)||g.test(a.text)),i=d.map((a,b)=>({text:a.trim(),index:b})).filter(a=>/!\[[^\]]*\]\([^)]*\)/u.test(a.text)||/<img\b/iu.test(a.text));for(let f of((h.length>0||i.length>0)&&c.push({level:"error",severity:"blocker",category:"format",provenance:{detectorId:"figure-substitute-table",fingerprint:(0,e.c6)(a)},message:`正文零图口径违规:图题/图号 ${h.length} 处、图片引用 ${i.length} 处`,suggestion:`正文只出表:删除全部图题、图号与图片引用,图类要求一律改写为等效数据表(进度类→工序表、机构类→岗位层级表、平面类→临时设施用地表)并加表题。示例:${(h[0]?.text||i[0]?.text||"").slice(0,40)}`}),b)){let a=cu.find(a=>a.figure.test(f.name)),b=a?.table??/./u;d.some(a=>{let c=a.trim();return!!/^\|.+\|$/u.test(c)&&b.test(c)})||c.push({level:"warning",severity:"warning",category:"structure",message:`图类要求未以数据表落实:「${f.name}」(${f.chapterTitle})${a?`(应至少提供${a.label})`:""}`,suggestion:"图类要求一律以等效数据表承载同一信息(进度图→进度计划表、平面布置图→临时设施用地表、机构图→岗位层级表);无对应数据则该项要求落空,须补齐数据而非留空。"})}return c}},36003:(a,b,c)=>{c.d(b,{AI:()=>U,Br:()=>W,D6:()=>Z,Y8:()=>D,Ym:()=>J,_9:()=>Y,eL:()=>q.eL,fk:()=>$,hZ:()=>E,nl:()=>ac,qX:()=>F,uQ:()=>V,w9:()=>B,xu:()=>q.xu});var d=c(76760),e=c(78217),f=c(70933),g=c(30836),h=c(40299),i=c(95734),j=c(22157),k=c(46482),l=c(71001),m=c(43378),n=c(52639),o=c(40693),p=c(49350),q=c(22213),r=c(91943),s=c(56963),t=c(18274),u=c(76193),v=c(21702),w=c(41991),x=c(1358),y=c(3063),z=c(54185),A=c(80572);function B(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];for(let a of(c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),c)){let b=function(a){let b=a.blockDegradation;if(b&&Array.isArray(b.droppedBlocks)&&0!==b.droppedBlocks.length)return b}(a);if(!b)continue;let{head:c,details:e}=$(b),f=b.droppedBlocks.map(a=>a.title).join("、"),g=[...new Set(b.droppedBlocks.map(a=>a.reason))].join(";");d.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"manual_review",chapterId:a.id,sectionTitle:b.droppedBlocks[0]?.title,message:`${a.title} 章级显式降级:${c}(失败原因:${g})`,suggestion:`本章已保留其余块正文,失守块无正文(不填充兜底内容)。请针对「${f}」在「${a.title}」对应位置定向补写或重生成后重新导出:${g}`,provenance:{detectorId:"chapter-block-degradation",fingerprint:(0,j.c6)(e.join("|"))}})}return b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}let C=/\b\d+(?:\.\d+)?\s*(?:日历天|小时|分钟|天|周|月|年|万元|元|台|套|个|项|批|次|份|人)(?=[。,,;;::、\s]|$)/gu;function D(a){let b=new Set;for(let c of a){let a=(0,j.lG)(c.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let c of a.matchAll(t._W))b.add(c[0].trim());for(let c of a.matchAll(C))b.add(c[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}function E(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,f.eE)((0,j.lG)(a.value))}`),g=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),h=a.indexedFacts||[],i=g.length>0?[]:h.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,f.eE)((0,j.lG)(a.value))}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),k=[...g,...h].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,j.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,j.lG)(a.value)}`)===b),l=[...new Set([...D(a.evidence),...g.map(a=>(0,j.lG)(a.value)).filter(a=>t.sv.test(a)),...h.map(a=>(0,j.lG)(a.value)).filter(a=>t.sv.test(a))])],m=new Set([...a.evidence.map(a=>a.filePath),...g.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,n=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label),o=function(a){if(!a)return[];let b=[];for(let[c,d]of Object.entries(a)){if(d.length<2)continue;let a=d.filter((a,b,c)=>c.findIndex(b=>b.location===a.location&&b.spec===a.spec)===b);a.length<2||b.push(`- ${c}:${a.slice(0,8).map(a=>`${a.location}:${a.spec}`).join("|")}`)}return b.slice(0,12)}(a.specAuthorityMap);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
|
|
46
|
+
|]{0,40}?(${n.source})`,"gu");for(let b of a.matchAll(r)){let i=b[1]||"";if(aP.test(b[0])||aQ.test(b[0])||aR.test(b[0]))continue;let m=a.slice(Math.max(0,(b.index||0)-40),b.index||0);if(aR.test(m))continue;let o=a.slice((b.index||0)+b[0].length,(b.index||0)+b[0].length+10);if(/范围内|范围/u.test(o)||/(?:工作宽度|作业宽度|操作空间|工作面)/u.test(o)||/^、\s*\d/u.test(o)||/^\s*厚(?:\s*[\d::]|覆膜|木|胶合)/u.test(o)||RegExp(`^(?:或|[、,,/])\\s*(?:${n.source})`,"u").test(o))continue;let r=a.slice(Math.max(0,b.index||0),(b.index||0)+b[0].length);if(/(?:标高|高程|平整度|轴线|垂直度|高差)[^。;;\n|]{0,10}(?:偏差|误差|不超过|不得大于|不大于)/u.test(r.slice(-28))||/(?:偏差|误差|公差|缝隙|接缝|拼缝|高差|顺直度|垂直度|平整度|轴线|标高|高程)[^。;;\n|]{0,16}(?:不超过|不得大于|不大于|控制在|±|≤)/u.test(r.slice(-36)))continue;let s=b[0].slice(0,b[0].indexOf(i));if(/(?:间距|中心距|净距|排距|间隔)[^。;;\n|,,、]{0,8}$/u.test(s))continue;let t=b[0].indexOf(i);if(t>j.length&&/(?:涵头|面层|基层|垫层|管基|基础|梁|板|柱|墙|地坪|路面)/u.test(b[0].slice(j.length,t)))continue;let u=b.index||0,v=g.find(b=>b.length>j.length&&b.endsWith(j)&&a.slice(u+j.length-b.length,u+j.length)===b);if(v){let a=new Set(h.filter(a=>a.location===v&&a$(a.spec)?.source===n.source).map(a=>a.spec));if(a.has(i)||a.size>0)continue}if(q.has(i)||!(0,l.Zg)(i))continue;let w=1===q.size?[...q][0]:void 0,x=void 0===w?function(a,b,c,d,e){if(d.size<2)return;let f=a2(/([一-龥]{1,12})$/u.exec(a.slice(Math.max(0,c-12),c))?.[1]||"");if(!f)return;let g=RegExp(`([一-龥]{1,12})${a_(b)}[^。;;\\n|]{0,24}?(${e.source})`,"gu"),h=new Set;for(let b of a.matchAll(g))a2(b[1]||"")===f&&d.has(b[2]||"")&&h.add(b[2]||"");return 1===h.size?[...h][0]:void 0}(a,j,b.index||0,q,n):void 0,y=w??x,z=u+t;if("other-class"===function(a,b,c,d){let e=a5(a,b);return e?d.some(a=>a.length>c.length&&a===`${e}${c}`)?"same-class":a6.test(e)?"other-class":a4.test(e)||a3.test(e)?"same-class":"other-class":"bare"}(a,u,j,g))continue;let A=a.slice(Math.max(0,z-24),z+i.length+16),B=/([^。;;,、|\n]*)$/u.exec(a.slice(0,z))?.[1]||"",C=(0,l.W_)(`${B}${i}`,i),D=!!(C&&C.includes(j)),E=y?function(a,b){if(!a7.test(a.trim())||!a7.test(b.trim()))return;let c=(0,k.Bk)(a),d=(0,k.Bk)(b);if(void 0===c||void 0===d)return;let e=Math.max(c,d)/Math.min(c,d);return e>k.do?e:void 0}(i,y):void 0,F=!!y&&(!!x||D)&&void 0===E,G=(0,k.Rd)({authorityOwner:y?p:void 0,bodyLocation:j,bodyWindow:A,found:i,authority:y||""}),H=F&&G.allowed?y:void 0;if(!F&&f>=c)continue;F?e+=1:f+=1;let I=[...q].join("/");if(d.push({issue:F?{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格错位:“${j}”使用的规格 ${i} 与工程量清单权威(${I})不一致`,suggestion:`按工程量清单将“${j}”的规格统一为 ${I};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。`}:{level:"warning",severity:"warning",category:"fact_consistency",owner:"system",repairability:"not_repair_needed",message:`规格错位:“${j}”使用的规格 ${i} 与工程量清单权威(${I})不一致`,suggestion:`按工程量清单将“${j}”的规格统一为 ${I};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。(本条已降级为告警:${void 0===E?`正文该处未能绑定到清单条目的具体对象${void 0===w?"或权威本身逐项多值无唯一口径":""}`:`正文该处尺寸与清单权威跨量级(${i} vs ${y},${E.toFixed(1)} 倍),不是同一属性维度的量(如板材厚度 vs 构件高度/长度)`},不作机器改写,交人工复核)`},location:j,replacement:H?{start:z,end:z+i.length,replacement:H,detail:`规格错位“${j}” ${i}→${H}(以工程量清单锁定口径为准)`}:void 0}),e>=c)return d}}}return d}function a9(a,b){return a8(a,b).map(a=>a.issue)}let ba=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function bb(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>ba.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&ba.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let bc=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,bd=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function be(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=bc.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&bd.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b}let bf=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u,bg=/^(?:焊接|螺栓连接|铆接|法兰连接|承插连接|卡箍连接|粘接|卡压连接|卡扣连接|螺纹连接|高强螺栓连接)(?:固定|安装|连接|紧固)?$/u,bh=/(?:焊接|螺栓连接|铆接|法兰连接|承插连接|卡箍连接|粘接|卡压连接|卡扣连接|螺纹连接|高强螺栓连接)$/u;function bi(a){let b=a.replace(/\s+/gu,""),c=new Set,d=[];{let b=a.split(/\n/u);for(let a=0;a+1<b.length;a+=1){let c=b[a]??"";if(/^\s*\|/u.test(c)&&/^\s*\|[\s:|-]+\|\s*$/u.test((b[a+1]??"").trim()))for(let a of c.split("|")){let b=a.replace(/\s+/gu,"");b.length>=2&&d.push(b)}}}let e=a=>d.some(b=>b.includes(a));for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){let d=bf.test(a[1])||bf.test(a[2]),f=(0,j.m4)(a[1],a[2]);if(!d&&!f||e(a[0]))continue;let g=Math.max(0,(a.index||0)-12),h=Math.min(b.length,(a.index||0)+a[0].length+12),i=b.slice(g,h);!/管线|管道|电缆|给水|排水/u.test(i)&&(!/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(i)&&(!f||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(i))||c.add(`“${a[1]}/${a[2]}”`))}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);bf.test(f)&&c.add(a[0].slice(0,30))}for(let a of b.matchAll(/([一-龥]{2,8})或([一-龥]{2,8})/gu)){let d=bf.test(a[1])||bf.test(a[2]),f=(0,j.m4)(a[1],a[2]);if(!d&&!f||/(?:可能)?(?:达到|超过|大于|小于|高于|低于|不少于|不超过)或(?:达到|超过|大于|小于|高于|低于|不少于|不超过)/u.test(a[0]))continue;let g=b.slice(0,(a.index||0)+a[1].length).split(/[。;,,、]/u).pop()||"";if(/造成|导致|引发|致使|诱发|酿成/u.test(g)||e(a[1])||e(a[2]))continue;let h=Math.max(0,(a.index||0)-12),i=b.slice(h,(a.index||0)+a[1].length);if(/管线|管道|电缆|给水|排水/u.test(i)||!/按|采用|选用|拟用|拟采用|方案|为/u.test(i)&&(!f||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(i)))continue;let k=b.slice(Math.max(0,(a.index||0)-6),a.index||0);if(/临时/u.test(k+a[0])&&/支护|围护|放坡|坡率|开挖/u.test(a[0])||/围挡|警示|防护栏|爬梯|栈桥|便道/u.test(a[0]))continue;let l=b.slice(Math.max(0,(a.index||0)-30),(a.index||0)+a[0].length+12);if(/临时|临建|可拆卸|可周转|撤场/u.test(l)&&/集装箱|活动房|板房|棚房|岗亭|彩钢/u.test(a[1]+a[2])||/顺接|衔接|接顺|接入|连通|找坡|找平/u.test(a[2]))continue;let m=b.slice((a.index||0)+a[0].length,(a.index||0)+a[0].length+6);if(/^(?:顺接|衔接|接顺|接入|连通|找坡|找平)/u.test(m)||/(?:前|后)$/u.test(a[0])||/^(?:之前|之后|前|后)/u.test(m))continue;{let c=Math.max(0,(a.index||0)-8),d=Math.min(b.length,(a.index||0)+a[0].length+8);if(b.slice(c,d).includes("→"))continue}let n=a[1]+a[2];if(/(?:强度不足|固定不牢|松动|变形|开裂|渗漏|破损|脱落|锈蚀|超差|不合格|缺陷|损坏|缺失|偏差|偏移|沉降|位移|错台|起皮|空鼓)/u.test(n)){let c=b.slice((a.index||0)+a[0].length,(a.index||0)+a[0].length+40);if(/返工|返修|整改|修复|加固|更换|补强|补做|处理|消除|纠正|复验|复查|销项|验收/u.test(c))continue}if(bh.test(a[1])&&bg.test(a[2]))continue;let o=a[1].replace(/^.*?(地下连续墙|钢板桩|灌注桩|支护桩|土钉墙|基础|支护|围护|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|形式|体系)/u,"$1");c.add(`${o}或${a[2]}`)}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function bj(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];let c=(()=>{let b=a.split(/\r?\n/u),c=[],d=!1;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b){b[1].length<=3&&(d=/基坑|开挖|支护|土方/u.test(b[2])),d&&c.push(a);continue}d&&c.push(a)}return c.join("\n")})();for(let a of(c?c.replace(/\s+/gu,""):b).matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|低于|高于|按|倍|依据|详见|参考|示意|每|以上|以下|偏差|±0|0\.000)/u.test(b)&&!/\d+(?:\.\d+)?\s*(?:h|小时|天|日|min|周|月|昼夜)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}function bk(a,b){let c=(0,i.z4)(b);if(void 0===c||c<3)return[];let d=[],e=a_(String(c)),f=RegExp(`(?<![\\d.])${e}(?![\\d])`,"u"),g=a.replace(/\s+/gu,""),h=a=>{for(let b of g.matchAll(RegExp(a,"gu"))){let a=b.index??0,c=g.slice(Math.max(0,a-120),a+b[0].length+120);if(f.test(c))return!0}return!1};return c>=3&&!h("危大工程")&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程判定缺失:资料基坑开挖深度 ${c}m(≥3m),正文未在判定结论邻近处给出本工程实际深度值(仅出现判定规则套话不算落地)`,suggestion:`依据住建部令第37号,开挖深度≥3m 属危大工程:在基坑支护/危大工程清单小节写明本工程实际深度 ${c}m 与危大工程判定结论,不得只写判定规则不落地本项目。`}),c>=5&&!h("超过一定规模")&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`超危大工程判定缺失:资料基坑开挖深度 ${c}m(≥5m),正文未在「超过一定规模」判定邻近处给出本工程实际深度值(须同时写明专家论证要求)`,suggestion:`开挖深度≥5m 属超过一定规模的危大工程:写明本工程深度 ${c}m 对应分级结论,专项施工方案必须经专家论证,不得只写判定规则不落地分级。`}),d}function bl(a,b){let c=[b.canonical?.byKey.foundation_support_form?.value,...(b.drawings||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.project||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.preciseFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`)].filter(Boolean).filter(a=>/基坑支护形式|基坑支护方式|支护形式|支护方式|土钉|放坡|喷锚|护坡/u.test(a)&&!/监测|监测频次|闭环|基坑开挖深度/u.test(a));if(0===c.length)return[];let d=[];for(let a of c)for(let b of["土钉墙","放坡","喷锚","挂网喷浆","排桩","灌注桩","地下连续墙","内支撑","锚杆","锚索"])a.includes(b)&&d.push(b);let f=[],g=/不采用|未采用|不设置|未设置|不使用|不宜采用|不得采用|不再出现|不得出现|严禁出现|避免出现|已删除|取消/u,h=["支护桩","冠梁","钻孔灌注桩","灌注桩","地下连续墙","排桩","咬合桩","内支撑"].filter(b=>(b=>{let c=RegExp(b,"gu");for(let b of a.matchAll(c)){let c=a.lastIndexOf("\n",b.index)+1,d=a.indexOf("\n",b.index);-1===d&&(d=a.length);let e=a.slice(c,d).slice(Math.max(0,b.index-c-12),b.index-c);if(!g.test(e))return!0}return!1})(b)&&!d.includes(b));return h.length>0&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式与资料矛盾:正文出现资料中不存在的支护体系词 ${h.join("、")}`,suggestion:`资料基坑支护形式为「${d.join("、")||c[0]?.slice(0,60)}」:删除编造的支护桩/冠梁/灌注桩类表述与对应参数(垂直度偏差/冠梁顶面标高等),按资料支护形式改写。`}),0===d.filter(b=>RegExp(b,"u").test(a)).length&&/基坑|支护/u.test(a)&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式未落地:资料基坑支护形式「${d.join("、")||c[0]?.slice(0,60)}」未在正文中出现`,suggestion:`在基坑支护小节写明本工程实际支护形式(${d.join("、")})及对应工艺参数(土钉长度/间距/坡度等),不得以泛化表述回避。`}),f}let bm=["塔式起重机","施工升降机","施工电梯","汽车起重机","汽车吊","混凝土泵车","混凝土泵","挖掘机","装载机","推土机","压路机","平地机","空压机","注浆机","锚杆钻机","混凝土喷射机","喷射机","吊篮","钢筋加工设备","塔吊"],bn=/挖掘机|空压机|注浆机|锚杆钻机|混凝土喷射机|喷射机|推土机/u;function bo(a,b){let c={late:[],inverted:[]},d=function(a){let b=[];for(let c of a.matchAll(/第(\d{2,3})日[^。;;\n|]{0,8}?(?:进场|投入使用|安装|调试)/gu)){let d=c.index||0,e=a.slice(Math.max(0,d-24),d),f=bm.find(a=>e.includes(a));f&&b.push({equipment:f,day:Number(c[1]),raw:`${e.slice(-18)}${c[0].slice(0,20)}`,start:d,end:d+c[1].length+2})}let c=new Set;return b.filter(a=>{let b=`${a.equipment}:${a.raw}`;return!c.has(b)&&(c.add(b),!0)})}(a);if(0===d.length)return c;let f=function(a,b){for(let c of[a,...(b.schedule||[]).map(a=>`${a.key||""}${(0,e.lG)(a.value)}`)]){let a=/(?:计划工期|合同工期|总工期|工期总日历天数)[^\d。;;\n|]{0,12}(\d{1,4})\s*个?\s*日历天/u.exec(c);if(a){let b=Number(a[1]);if(Number.isFinite(b)&&b>=30&&b<=3e3)return b}}}(a,b);void 0!==f&&(c.total=f,c.late=d.filter(a=>a.day>=f));let g=aH(a).filter(a=>"excavation"===a.key).map(a=>a.day);if(g.length>0){let a=Math.min(...g);c.pitDone=a,c.inverted=d.filter(b=>bn.test(b.equipment)&&b.day>a)}return c}function bp(a,b){let c=bo(a,b),d=[];return void 0!==c.total&&c.late.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场时间荒谬:${c.late.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 已达/超过总工期(${c.total}日历天),工程结束时设备尚未进场`,suggestion:`以总进度计划为准核对设备进场计划:大型施工设备必须在总工期结束前进场并完成使用,${c.late.map(a=>a.equipment).join("、")} 的进场日应提前至工程开始阶段,删除矛盾的尾期进场表述。`}),void 0!==c.pitDone&&c.inverted.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场工序倒挂:${c.inverted.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 晚于基坑支护及土方外运完成节点(第${c.pitDone}日),基坑阶段设备未在工序开始前进场`,suggestion:`基坑阶段专用设备必须在基坑开挖/支护开始前完成进场与报验:将 ${c.inverted.map(a=>a.equipment).join("、")} 的进场日调整为早于基坑支护完成节点(第${c.pitDone}日)的日期,删除工序倒挂表述。`}),d}let bq=/关于|定于|对于|至于|由于|基于|鉴于|处于|位于|在于|置于|用于|属于|终于|便于|善于|现在|正在|存在|所在|潜在|实在$/u;function br(a,b){let c=a,d=[];for(let a=1;a<=3;a+=1){let a=bo(c,b),e=new Map;for(let b of[...a.late,...a.inverted])e.set(`${b.start}:${b.end}`,b);if(0===e.size)break;let f=0,g=1/0;for(let a of[...e.values()].sort((a,b)=>b.start-a.start)){let b=a.start,e=c[b-1];if("于"!==e&&"在"!==e||bq.test(c.slice(Math.max(0,b-2),b))||(b-=1),a.end>g)continue;let h=c.slice(b,a.end);c=c.slice(0,b)+"按进度计划"+c.slice(a.end),g=b,f+=1,d.push(`「${h}」→「按进度计划」`)}if(0===f)break}return{markdown:c,fixedCount:d.length,details:d}}let bs=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,bt=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function bu(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let bv=/^\s*\|[\s:|-]+\|/u;function bw(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>bv.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataRows:e.map(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(bx(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function bx(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function by(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let bz=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,bA=a=>a.filter(a=>!bz.test(a));function bB(a){let b=[];for(let c of bw(a)){let a=c.dataRows;if(a.length<4)continue;let d=a=>(a[0]||"").trim(),e=(a,b)=>bx(a,b);for(let f=Math.floor(a.length/2);f<=Math.ceil(a.length/2);f+=1){let g=a.slice(0,f),h=a.slice(f);if(g.length<2||h.length<2)continue;let i=0,j=-1;for(let a of h){let b=d(a);if(b){for(let c=j+1;c<g.length;c+=1)if(d(g[c])===b&&e(a,g[c])>=.5){i+=1,j=c;break}}}let k=i/h.length;if(!(k<.8)){b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`表格内部数据行重复:第 ${c.startLine+1}~${c.endLine+1} 行表格(表头:${c.header.slice(0,3).join("|")})数据行两遍粘贴(${f} 行 + ${h.length} 行,重复匹配率 ${Math.round(100*k)}%)`,suggestion:`删除第二遍重复数据行(保留第一遍 ${f} 行),删除后表格仅保留一份完整数据。`});break}}}return b}function bC(a){let b=[],c=bw(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=bx(e.header,f.header),i=bx(e.firstCol,f.firstCol),j=bx(e.dataCells,f.dataCells),k=Math.max(by(bA(e.dataCells),bA(f.dataCells)),by(bA(f.dataCells),bA(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function bD(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}let bE=15;function bF(a){let b=function(a){let b=[];for(let c of a.split(/\n\s*\n/u)){let a=c.trim();if(!a)continue;let d=a.split(/\n/u).filter(a=>{let b=a.trim();return b&&!/^#{1,6}\s/u.test(b)&&!b.startsWith("|")}).join("\n"),e=[];for(let a of d.split(/[。!?!?]/u)){let b=a.trim().replace(/\s+/gu,"");if(b.length<bE)continue;let c=e.findIndex(a=>a.sentence===b||a.sentence.length>b.length&&a.sentence.length-b.length<=bE&&a.sentence.endsWith(b));c>=0?e[c].count+=1:e.push({sentence:b,count:1})}for(let a of e)a.count>=2&&b.push({sentence:a.sentence,count:a.count})}return b}(a);return 0===b.length?[]:b.slice(0,3).map(({sentence:a,count:b})=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`段落内句子复读 ${b} 次:“${a.slice(0,30)}…”`,suggestion:"同一段落内相同句子只保留首次出现,删除段尾复读的重复句(确定性修复器已接入自动剥离)。"}))}let bG=/^(.+?)(?:((?:\d+|[一二三四五六七八九十]+)))+$/u;function bH(a){let b=[];for(let c of a.matchAll(/^###\s+(.+)$/gmu)){let d=c[1].trim();bG.test(d)&&b.push({raw:d,index:a.lastIndexOf("\n",c.index??0)+1})}return b}function bI(a){let b=bH(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"local_deterministic",message:`目录小节标题含防撞名编号后缀:“${a}”`,suggestion:"正式投标文件目录不允许「(1)(2)」编号后缀小节:确定性修复器已接入(按主题域重命名为语义化标题或合并同基线拆半小节)。"}))}let bJ=/第(\d{1,3})日(?:至|到|~|~|—|-)第(\d{1,3})日/gu;function bK(a){let b=[];for(let c of a.matchAll(bJ))Number(c[1])<=Number(c[2])||b.push({start:c.index??0,end:(c.index??0)+c[0].length,raw:c[0]});return b}function bL(a){let b=bK(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`时间区间倒挂:“${a}”起点大于终点,属时间拼接病句`,suggestion:"删除倒挂区间起点,仅保留终点日期表述(确定性修复器已接入自动剥离)。"}))}function bM(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=bD(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}let bN=/\d{2,}(?:\.\d+)?/gu,bO=/\d+\s*#/gu;function bP(a){return(function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){let d=b[a].trim();!(!d||/^#{1,6}\s/u.test(d)||d.startsWith("|")||/^(?:[-*+•]|\d{1,3}[.、)])\s*/u.test(d))&&((d.match(/[一-龥]/gu)||[]).length<40||c.push({line:a+1,text:d,skeleton:function(a,b){let c=a.replace(/[\s\u3000|*`_]/gu,""),d=new Set;for(let a=0;a+5<=c.length;a+=1)d.add(c.slice(a,a+5));return d}(d.replace(/\d+(?:\.\d+)?/gu,"#"),5),numbers:new Set(d.match(bN)||[]),markers:new Set((d.match(bO)||[]).map(a=>a.replace(/\s/gu,"")))}))}let d=new Map;c.forEach((a,b)=>{for(let c of a.numbers){let a=d.get(c)||[];a.push(b),d.set(c,a)}});let e=new Map;for(let a of d.values())for(let b=0;b<a.length;b+=1)for(let c=b+1;c<a.length;c+=1){let d=`${a[b]}|${a[c]}`;e.set(d,(e.get(d)||0)+1)}let f=[];for(let[a,b]of e){if(b<2)continue;let[d,e]=a.split("|").map(Number),g=c[d],h=c[e];if(2>Math.abs(g.line-h.line))continue;let i=new Set([...g.numbers,...h.numbers]).size,j=0===i?0:b/i;if(j<.6)continue;let k=function(a,b){if(0===a.size||0===b.size)return 0;let c=0;for(let d of a)b.has(d)&&(c+=1);return c/(a.size+b.size-c)}(g.skeleton,h.skeleton);!(k<.3)&&(!(g.markers.size>0)||!(h.markers.size>0)||[...g.markers].some(a=>h.markers.has(a)))&&f.push({firstLine:g.line,secondLine:h.line,skeletonJaccard:Number(k.toFixed(3)),numberOverlap:Number(j.toFixed(2)),excerpt:h.text.slice(0,40)})}return f.sort((a,b)=>a.secondLine-b.secondLine).slice(0,20)})(a).slice(0,3).map(a=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落近似重复:第 ${a.secondLine} 行与第 ${a.firstLine} 行叙述同一批对象与工程量(骨架一致度 ${a.skeletonJaccard}、数值一致度 ${a.numberOverlap}):“${a.excerpt}…”`,suggestion:"两处仅保留信息完整的一处并合并差异(不得改写既有数值与工序事实);重复段落后含原文粘贴来源的,以正文归纳口径为准。",provenance:{detectorId:"paragraph-near-duplicate",fingerprint:(0,e.c6)(`${a.firstLine}|${a.secondLine}|${a.excerpt}`)}}))}function bQ(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(bs))d.add(bu(b[0]));if(c?.extracted)for(let a of c.entries)for(let b of a.text.matchAll(bs))d.add(bu(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(bs)){let a=bu(b[0]);!d.has(a)&&(bt.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位,禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function bR(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let bS=/(?:荣获|曾获|获得过|被评为)\s*[^。;\n]{2,24}/gu,bT=/奖|杯|荣誉|称号|优秀|先进|示范|观摩|文明工地|优质工程/u,bU=/(?:承接过|承建过)\s*[^。;\n]{2,24}/gu,bV=/工程|项目|标段|业绩/u,bW=/完成过\s*(?:[0-90-9一二三四五六七八九十两]+|[多若干]+)\s*(?:个|项|例|座|条|余项|余个)?\s*(?:类似|同类|以上的?)?\s*(?:工程|项目)/gu,bX=/资质证书编号|证书编号|安全生产许可证编号|资质编号|营业执照注册号|统一社会信用代码|证号[::]/gu,bY=/(?:设计|勘察|监理)单位|设计院|勘察院|监理公司|设计研究总院|设计研究院|设计总院/u;function bZ(a,b){if(!b)return[];let c=[];for(let b of a.matchAll(bS))bT.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(bU))bV.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(bW))c.push(b[0].trim());for(let b of a.matchAll(bX))bY.test(function(a,b){let c=b;for(;c>0&&!/[。;;\n]/u.test(a[c-1]);)c-=1;let d=b;for(;d<a.length&&!/[。;;\n]/u.test(a[d]);)d+=1;return a.slice(c,d)}(a,b.index??0))||c.push(b[0].trim());if(0===c.length)return[];let d=[...new Set(c)];return[{level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人身份标记 ${d.length} 处:${d.slice(0,3).map(a=>`“${a.slice(0,30)}”`).join("、")}${d.length>3?" 等":""}(招标暗标要求不得出现明示或暗示具体投标人的说明及标记,包括以往的施工业绩)`,suggestion:"删除或改写身份标记句:以往业绩/获奖表述一律删除;证书资质类表述改写为不自证身份的施工管理口径(如“按规定持证上岗”),不得保留证书编号与奖项名称。"}]}let b$=/人[、,,]材[、,,]机/u,b_=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function b0(a){let b=a.match(b_)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function b1(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!b$.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:b0(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=b0(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}async function b2(a,b,c={}){let d=[],e=(a,b)=>1e-6>Math.abs(a-b),f=[];for(let c of b){let b=c.groups??[];if(b.length<2||new Set(b.map(a=>Math.round(100*a.value))).size<2)continue;let d=RegExp((0,i.Lp)(c.name),"gu"),e=RegExp(`(?<![\\dA-Za-z])(\\d(?:[\\d,]*(?:\\.\\d+)?))\\s*${(0,i.YZ)(c.unit)}(?![0-9a-zA-Z])`,"gui"),g=[];for(let f of a.matchAll(d)){let d=f.index??0,h=d+f[0].length,i=a.lastIndexOf("\n",d)+1,j=a.indexOf("\n",d);if(-1===j&&(j=a.length),/^\s*\|/u.test(a.slice(i,j)))continue;let k=Math.max(i,d-24),l=a.slice(k,d),n=Math.max(l.lastIndexOf("。"),l.lastIndexOf(";"),l.lastIndexOf(";")),o=n>=0?l.slice(n+1):l,p=b.filter(a=>a.group&&o.includes(a.group));if(1!==p.length)continue;let q=p[0],r=a.slice(h,h+24),s=Math.min(...[r.search(/[、。;,]/u),r.search(/\n/u)].filter(a=>a>=0).concat([r.length])),t=r.slice(0,s),u=null;for(let a of t.matchAll(e)){let b=a[1],d=Number(b.replace(/,/gu,""));Number.isFinite(d)&&!(d<=0)&&(null===u||Math.abs(d-c.value)<Math.abs(u.value-c.value))&&(u={offset:h+(a.index??0)+a[0].indexOf(b),value:d,raw:b})}if(!u)continue;let v=a.slice(h,u.offset);(!/[A-Za-z]/u.test(v)||/[\u4e00-\u9fa5]/u.test(v))&&g.push({group:q.group,value:u.value,excerpt:a.slice(d,u.offset+u.raw.length),sentence:(0,m.kE)(a,d,u.offset+u.raw.length-d),flatIndex:-1})}0!==g.length&&f.push({authority:{name:c.name,value:c.value,unit:c.unit},detail:b,pairings:g})}if(0===f.length)return d;let g=[];for(let a of f)for(let b of a.pairings){b.flatIndex=g.length;let c=a.detail.find(a=>a.group===b.group);g.push({id:`xp${b.flatIndex}`,kind:"quantity",subject:`${a.authority.name}(${b.group})`,value:b.value,unit:a.authority.unit,authority:c?.value??a.authority.value,sentence:b.sentence,facts:[`该条目清单分工程明细:${a.detail.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}`]})}let h=c.adjudicate??m.hy,j=await h(g,{diagnostics:c.diagnostics,signal:c.signal});for(let a of f){let b=a.pairings.filter(a=>j.records.get(`xp${a.flatIndex}`)?.conclusion!=="consistent");if(0===b.length)continue;let c=!1;for(let f of b){let b=a.detail.find(a=>a.group===f.group);if(!b||e(b.value,f.value))continue;let g=a.detail.find(a=>a.group!==f.group&&e(a.value,f.value));if(g){d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${f.excerpt.slice(0,40)}”在“${f.group}”语境处取值 ${f.value}${a.authority.unit},该值是“${g.group}”的清单明细值(${f.group} 的清单明细值为 ${b.value}${a.authority.unit})`,suggestion:`以工程量清单分工程明细为准修正“${f.group}”语境:应为 ${b.value}${a.authority.unit},不得沿用“${g.group}”的明细值 ${f.value}${a.authority.unit};修复后全文该条目分工程取值必须与清单明细逐一对应。`}),c=!0;break}}if(c)continue;let f=new Map;for(let a of b){let b=a.value.toFixed(2),c=f.get(b)??new Set;c.add(a.group),f.set(b,c)}for(let[c,e]of f){if(e.size<2)continue;let f=a.detail.filter(a=>e.has(a.group));if(new Set(f.map(a=>Math.round(100*a.value))).size<2)continue;let g=b.find(a=>a.value.toFixed(2)===c);d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${g.excerpt.slice(0,40)}”数值 ${c}${a.authority.unit} 同时出现在“${[...e].join("”“")}”等 ${e.size} 个工程对象语境,而清单明细值互不相同(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")})——至少一处属跨工程同值复制`,suggestion:`逐工程对象按清单明细值修正取值(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}),不得多工程共用同一数值。`});break}}return d}function b3(a){let{phrase:b,first:c,second:d}=a,e=(0,n.Qk)(b,c.phase),f=(0,n.Qk)(b,d.phase);if(e.length<4||f.length<4)return null;let g=e.start<=f.start?c:d,h=g===c?d:c;return{leading:g,trailing:h}}function b4(a,b){let c=[],d=[];if(0===b.length)return{claims:c,ambiguities:d};let e=new Set,f=(f,g,h,i)=>{if(e.has(f))return;let j=Number(g.replace(/[,,]/gu,""));if(!Number.isFinite(j)||j<=0)return;let k=a.lastIndexOf("\n",f)+1,l=a.indexOf("\n",f);-1===l&&(l=a.length);let m=a.slice(k,l);if(/^\s*\|.*\|\s*$/u.test(m)||aO.test(m))return;let o=a.slice(Math.max(k,f-12),f);if(/不少于|不低于|至少|最低|不小于|≥/u.test(o)||/(?:[\u4e00-\u9fa5]{1,3}(?:工|员|长)|司机|班组|队伍?)\s*$/u.test(o))return;let p=function(a,b){let c=(a.match(/[\p{Script=Han}]/gu)||[]).length;if(0===c)return null;let d=null,e={length:0,start:0,end:0};for(let c of b){let b=(0,n.Qk)(a,c.phase);b.length>=4&&(null===d||b.length>e.length)&&(d=c,e=b)}if(!d)return null;if(e.length>=c)return{best:d};for(let c=1;c<a.length-1;c+=1){if(!/[与及和、,,]/u.test(a[c]))continue;let d=b.find(b=>b.phase===a.slice(0,c).trim());if(!d)continue;let e=b.find(b=>b.phase===a.slice(c+1).trim());if(e&&d.value===e.value)return{best:d}}for(let c of[a.slice(0,e.start),a.slice(e.end)])if(!((c.match(/[\p{Script=Han}]/gu)||[]).length<2)){for(let a of b)if(a.phase!==d.phase&&(0,n.Qk)(c,a.phase).length>=4)return{best:d,second:a}}return{best:d}}(h,b);if(!p)return;let q=a.slice(Math.max(k,f-24),Math.min(a.length,f+g.length+1)).trim();if(p.second){e.add(f),d.push({start:f,raw:g,actual:j,phrase:h,first:{phase:p.best.phase,value:p.best.value,trace:p.best.trace},second:{phase:p.second.phase,value:p.second.value,trace:p.second.trace},excerpt:q});return}if(j===p.best.value)return void e.add(f);e.add(f),c.push({start:f,end:f+g.length,raw:g,actual:j,expected:p.best.value,phase:p.best.phase,trace:p.best.trace,channel:i,excerpt:q})};for(let b of a.matchAll(w)){let c=(b.index??0)+b[0].indexOf(b[1]),d=a.lastIndexOf("\n",c)+1,e=z(a,d,c);e&&f(c,b[1],e.replace(/阶段$/u,""),"base")}for(let b of a.matchAll(y)){if(!b[1]||!b[2])continue;let c=b[2],d=(b.index??0)+b[0].lastIndexOf(c);if(e.has(d))continue;let g=Math.max(a.lastIndexOf("。",d),a.lastIndexOf(";",d),a.lastIndexOf(";",d))+1,h=a.length;for(let b of["。",";",";"]){let c=a.indexOf(b,d);-1!==c&&c<h&&(h=c)}/阶段/u.test(a.slice(g,h))&&f(d,c,b[1].trim(),"enumeration")}return{claims:c,ambiguities:d}}function b5(a,b){let{claims:c,ambiguities:d}=b4(a,b),e=[];for(let a of c)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段劳动力数据矛盾:正文“${a.excerpt.slice(0,60)}”取值 ${a.actual} 人,与蓝图分阶段劳动力推导不符(“${a.phase}”阶段应为 ${a.expected} 人)`,suggestion:`分阶段劳动力人数必须以蓝图推导为准:将“${a.phase}”阶段人数统一为 ${a.expected} 人${a.trace?`(依据:${a.trace})`:""},删除其他口径数字。`}});for(let a of d)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段名疑似拼接:正文“${a.excerpt.slice(0,60)}”中的阶段名“${a.phrase}”同时混含“${a.first.phase}”与“${a.second.phase}”两个蓝图阶段,人数 ${a.actual} 人无法归属`,suggestion:`将阶段名拆分表述:“${a.first.phase}”按 ${a.first.value} 人、“${a.second.phase}”按 ${a.second.value} 人(蓝图推导)分句列出,不得把两个阶段名连写成单一阶段。`}});return e.sort((a,b)=>a.position-b.position).slice(0,8).map(a=>a.issue)}function b6(a,b){return b7(a,b).map(a=>a.issue)}function b7(a,b){let c=[];if(0===b.length)return c;let d=/首批|第一批|首期|第一期/gu,e=/剩余|补充|追加/gu,f=/保持|维持|确保|不少于|不低于|控制在|以内|以下/u;for(let g of b){if(!g.name||!Number.isFinite(g.count)||g.count<=0)continue;let b=(0,i.Lp)(g.name),h=RegExp(`${b}[^\\n。;;、,,]{0,4}?([\\d,]+)\\s*(?:台|辆)`,"gu"),j=new Set,k=new Set,l=[],m="";for(let b of a.matchAll(/[^。;;\n]+/gu)){let c=b[0],g=b.index??0,i=[...c.matchAll(d)].map(a=>a.index??0),n=[...c.matchAll(e)].map(a=>a.index??0);if(0!==i.length||0!==n.length)for(let b of c.matchAll(h)){if(!b[1])continue;let c=Number(b[1].replace(/[,,]/gu,""));if(!Number.isFinite(c)||c<=0)continue;let d=b.index??0,e=g+d,h=a.lastIndexOf("\n",e)+1,o=a.indexOf("\n",e);-1===o&&(o=a.length);let p=a.slice(h,o);if(/^\s*\|.*\|\s*$/u.test(p)||aO.test(p))continue;let q=b[0];if(f.test(q)||/以内|以下|上限/u.test(a.slice(e+q.length,e+q.length+4)))continue;let r=i.filter(a=>a<d&&d-a<=40).pop(),s=n.filter(a=>a<d&&d-a<=40).pop();if(void 0!==r||void 0!==s){if(void 0!==s&&(void 0===r||s>r)){k.add(c);let b=/([\d,]+)\s*(?:台|辆)\s*$/u.exec(q);if(b){let c=/(?:约|共|计|近|至少)\s*$/u.exec(q.slice(0,b.index)),d=e+b.index-(c?c[0].length:0),f=e+q.length;l.push({start:d,end:f,excerpt:a.slice(d,f)})}}else j.add(c);m||(m=a.slice(Math.max(h,e-20),Math.min(o,e+q.length)).trim())}}}if(0===j.size||0===k.size)continue;let n=[...j],o=[...k];if(!n.some(a=>o.some(b=>a+b===g.count))&&(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`机械设备分批台数矛盾:“${g.name}”分批投入(首批 ${n.join("/")} 台+剩余 ${o.join("/")} 台)各批组合之和均不等于蓝图机械汇总 ${g.count} 台${m?`(原文“${m.slice(0,50)}”)`:""}`,suggestion:`分批投入的台数之和必须等于蓝图机械汇总台数:将“${g.name}”各批次调整为首批与剩余合计 ${g.count} 台,或删除分批描述仅保留“${g.name} ${g.count} 台”汇总口径。`},removals:l}),c.length>=5))break}return c}function b8(a,b){let c=[];if(!b||!Number.isFinite(b)||b<=0)return c;let d=/交底|考察|封样|编制|审批|报审|报批|培训|演练|签订|组建|建立|采购|调查|备案|申报|进场确认/u;for(let e of a.matchAll(/(?:开工令下发|开工令下达|下达开工令|开工|计划开工)[^。;;\n年月]{0,8}?(?:第\s*(\d+)\s*(?:个)?(?:日历)?日|(\d+)\s*(?:个)?(?:日历)?日)/gu)){let f=e[1]||e[2];if(!f)continue;if("内"===a.slice((e.index??0)+e[0].length,(e.index??0)+e[0].length+1)){let b=a.slice(Math.max(0,(e.index??0)-40),(e.index??0)+e[0].length+40);if(!d.test(b))continue}let g=Number(f);if(!Number.isFinite(g)||g<=0||g<b)continue;let h=(e.index??0)+e[0].lastIndexOf(f),i=a.lastIndexOf("\n",h)+1,j=a.indexOf("\n",h);-1===j&&(j=a.length);let k=a.slice(i,j);if(/^\s*\|.*\|\s*$/u.test(k))continue;let l=a.slice(Math.max(i,h-40),Math.min(j,h+f.length+40));if(!d.test(l)||aO.test(l))continue;let m=a.slice(Math.max(i,h-30),Math.min(j,h+f.length+14)).trim(),n=e.index??0;if(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`前期动作时限矛盾:正文“${m}”将前期准备动作时限设在开工后第 ${g} 日,已达到/超过总工期 ${b} 日(竣工日)——前期动作不可能安排在项目末期`,suggestion:`前期准备动作时限必须落在施工准备阶段内:将第 ${g} 日改为与施工准备阶段相匹配的早期天数(早于总工期 ${b} 日),或删除具体天数改述为“开工令下发后在施工准备阶段内完成”。`},start:n,end:n+e[0].length+ +!!/[前内]/u.test(a[n+e[0].length]||"")}),c.length>=5)break}return c}function b9(a,b){return b8(a,b).map(a=>a.issue)}function ca(a,b){let c=b8(a,b);if(0===c.length)return{markdown:a,fixedCount:0,details:[]};let d=a,e=[],f=1/0;for(let a of[...c].sort((a,b)=>b.start-a.start)){if(a.end>f)continue;let b="在"===d[a.start-1]?"施工准备阶段内":"在施工准备阶段内",c=d.slice(a.start,a.end);d=d.slice(0,a.start)+b+d.slice(a.end),f=a.start,e.push(`「${c}」→「${b}」`)}return{markdown:d,fixedCount:e.length,details:e}}function cb(a){let b=a.split(/\r?\n/u),c=[];b.forEach((a,b)=>{let d=/^(#{3,4})\s+([^\n]+)$/u.exec(a.trim());d&&c.push({index:b,level:d[1].length,title:d[2].trim()})});let d=[];for(let a=0;a<c.length;a+=1){let{index:e,level:f,title:g}=c[a],h=g.replace(/^[\d.]+[\s\u00a0]*/u,"");if(!/工程\s*$/u.test(h))continue;let i=h.replace(/\s*工程\s*$/u,"");if(!i||!/[、与及]/u.test(i))continue;let j=i.split(/[、与及]/u).map(a=>a.trim()).filter(a=>a.length>=2);if(j.length<2)continue;let k=b.length;for(let b=a+1;b<c.length;b+=1)if(c[b].level<=f){k=c[b].index;break}let l=b.slice(e+1,k).join("\n"),m=l.replace(/[、,,]/gu,""),n=j.filter(a=>{if(/^(?:配套|附属|其他|其它|零星|通用)$/u.test(a)||l.includes(a))return!1;let b=a.replace(/[、,,]/gu,"").replace(/(?:安装|施工|工程|作业)$/u,"");if(b.length>=2&&m.includes(b))return!1;if(b.length>=4){let a=b.match(/.{2}/gu)??[];if(a.length>=2&&a.every(a=>m.includes(a)))return!1}return!0});0!==n.length&&d.push({lineIndex:e,level:f,title:g,parts:j,uncovered:n})}return d}let cc=/^(?:合计|小计|总计|汇总|共计|总和|总额|总价|总数量|总量|合价)/u,cd=/^(?:其他|其它|其余|剩余|差额|补差)/u,ce=/^(?:其中|占比|比例|备注|说明|注[::])/u,cf=/待定|待补|待明确|待确认|未定|未明确|暂定|暂按|视情况|部分|若干/u,cg=/约(?![定束])|左右|以上|以下|以内|以外|不少于|不超过|不大于|不小于|不低于|不高于|至少|最少|最多|至多|超过|超出|不足|按实|据实|根据实际|不含|含\s*\d|其中|扣除|另计|另含|除外|等(?![级于额])|±|[≥≤≧≦><><]/u,ch=/[\d))]\s*[~~\-—–至到]\s*[\d((]/u,ci=/^(?:[-—–-//\\]+|无|不适用|不涉及|不包含|n\/a)$/iu,cj="(?<![A-Za-z0-9\\-Φφ])(-?(?:\\d{1,3}(?:[,,]\\d{3})+|\\d+)(?:\\.\\d+)?)\\s*(平方米|立方米|平方|立方|万元|亿元|千元|公里|厘米|毫米|公斤|日历天|小时|分钟|台班|工日|千米|盏|棵|株|袋|桶|块|片|条|根|座|台|套|个|处|道|项|批|次|人|名|户|间|层|樘|孔|眼|栋|幢|米|吨|元|万|千|百|天|周|月|年|℃|cm|kVA|mm|km|kg|kW|m2|m3|m\xb2|m\xb3|㎡|MPa|kPa|ml|L|t|m|%|%|‰|A|V|W)?";function ck(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu,"").replace(/^[((]?\d{1,2}(?:\.\d{1,2})?[.、))]?/u,"")}function cl(a){let b=a.replace(/[*_`]/gu,"").trim(),c={values:[],units:[],uncertain:!1};if(!b||ci.test(b))return c;let d=b.replace(/(?:GB|JGJ|CJJ|CJ|DB|DG|SL|JT|JTS|JTG|TSG|CECS|YB|SH|HG|SY|TB|AQ|JG|JB|ISO|GA|JC|MZ|WW|WH|GH|FZ|QB|YY|HY|LY|NY|SB|SN|WS|YZ|CB|EJ|HB|HS|MH|QJ|SC|SJ|TY|ZB)\s*\d*(?:\s*[A-Za-z])?(?:\s*\/\s*T)?\s*[\d.\-/·]+/giu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*[-/.月]\s*\d{1,2}\s*日?/gu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*月?/gu," ").replace(/\d{1,2}\s*月\s*\d{1,2}\s*日/gu," ").replace(/(?:19|20)\d{2}\s*年/gu," ").replace(/\d{1,2}(?:\.\d+)?\s*[::]\s*\d{1,2}(?:\.\d+)?/gu," ").replace(/第\s*\d+(?:\.\d+)?\s*(?:章|节|条|款|项|页|版|期|批|次|轮|步|道|层|日历天|季度|个?季度|阶段|部分|天|日|周|月|年)/gu," ").replace(/(?:详见|参见)\s*(?:第\s*)?\d[\d.]*(?:节|条|章|表|图|页|款)?/gu," ").replace(/(?:见|根据|依据|按照|依照|执行|符合)\s*第?\s*\d[\d.]*(?:节|条|章|表|图|页|款)/gu," ").replace(/[A-Za-z]{1,4}\s*[--]\s*\d+(?:\.\d+)?/gu," ").replace(/(?<![\d.])\d{1,2}(?:\.\d{1,2}){2,}(?!\d)/gu," ").replace(/(?:^|[\s、,,;;((])\d{1,2}\s*[.、))](?=\s*(?:\D|$))/gu," ").replace(/\d[\d,]*(?:\.\d+)?(?:\s*[×✕xX*]\s*\d[\d,]*(?:\.\d+)?)+/gu," ").replace(/\d{1,4}(?:\s*\/\s*\d{1,4})+/gu," ");if(cf.test(d))return{...c,uncertain:!0};if(!/\d/u.test(d))return c;if(cg.test(d)||ch.test(d))return{...c,uncertain:!0};let e=[...d.matchAll(RegExp(cj,"gu"))];if(0===e.length)return c;if(""!==d.replace(RegExp(cj,"gu")," ").replace(/[^\u4e00-\u9fa5a-z]/giu,"")&&e.some(a=>!a[2]))return{...c,uncertain:!0};for(let a of e){let b=Number(a[1].replace(/[,,]/gu,""));Number.isFinite(b)&&(c.values.push(b),c.units.push(function(a){let b=(a??"").trim().toLowerCase();return""===b?"":/^(?:m2|m²|㎡|平方米|平方|平米)$/u.test(b)?"m2":/^(?:m3|m³|立方米|立方|方)$/u.test(b)?"m3":/^(?:人|名|员|人员)$/u.test(b)?"人":"%"===b||"%"===b?"%":/^(?:千米|公里)$/u.test(b)?"km":/^(?:米|m)$/u.test(b)?"m":/^(?:吨|t)$/u.test(b)?"t":/^(?:公斤|千克|kg)$/u.test(b)?"kg":b}(a[2])))}return c}function cm(a){let b=cl(a);return b.uncertain||1!==b.values.length?null:{value:b.values[0],unit:b.units[0]??""}}function cn(a){let b=0,c=0,d=new Set;for(let e of a){let a=e.replace(/[*_`]/gu,"").trim();if(!a)continue;let f=cl(a);if(f.uncertain||cd.test(ck(a))&&0===f.values.length)return null;if(0!==f.values.length){for(let a of f.values)b+=a,c+=1;for(let a of f.units)a&&d.add(a)}}return d.size>1?null:{sum:b,count:c,unit:1===d.size?[...d][0]:""}}function co(a){return String(Math.round(100*a)/100)}function cp(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu," ").trim().slice(0,24)}function cq(a){let b=a.header,c=a.dataRows;if(0===c.length||0===b.length)return[];let d=b.map((a,b)=>b).filter(a=>cc.test(ck(b[a]??""))),e=c.map((a,b)=>b).filter(a=>cc.test(ck(c[a][0]??"")));if(d.length>1||e.length>1)return[];let f=[],g=Math.max(b.length,...c.map(a=>a.length)),h=1===d.length?d[0]:-1,i=1===e.length?e[0]:-1;if(h>0&&c.forEach((a,c)=>{if(c===i||ce.test(ck(a[0]??"")))return;let d=a[h];if(void 0===d)return;let e=cm(d);if(!e)return;let j=[];for(let b=1;b<g;b+=1)b!==h&&j.push(a[b]??"");let k=cn(j);if(!k||k.count<2||e.unit&&k.unit&&e.unit!==k.unit)return;let l=Math.abs(e.value-k.sum);if(l<=Math.max(1,.005*Math.abs(e.value)))return;let m=cp(a[0]??"")||`第 ${c+1} 行`,n=cp(b[h]??"")||"合计";f.push(`「${m}」行:${n} ${co(e.value)}${e.unit} ≠ 分项和 ${co(k.sum)}${k.unit}(差 ${co(l)})`)}),i>=0){let a=c[i];for(let d=1;d<g;d+=1){if(d===h)continue;let e=a[d];if(void 0===e)continue;let g=cm(e);if(!g)continue;let j=cn(c.filter((a,b)=>b!==i&&!ce.test(ck(a[0]??""))).map(a=>a[d]??""));if(!j||j.count<2||g.unit&&j.unit&&g.unit!==j.unit)continue;let k=Math.abs(g.value-j.sum);if(k<=Math.max(1,.005*Math.abs(g.value)))continue;let l=cp(a[0]??"")||"合计",m=cp(b[d]??"")||`第 ${d+1} 列`;f.push(`「${m}」列:${l} ${co(g.value)}${g.unit} ≠ 分项和 ${co(j.sum)}${j.unit}(差 ${co(k)})`)}}return f}function cr(a){let b=bw(a);if(0===b.length)return[];let c=[];for(let a of b){let b=cq(a);if(0!==b.length&&(c.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",message:`生成后事实反查失败:表格算术不自洽 ${b.length} 处(${b.slice(0,3).join(";")}${b.length>3?" 等":""})`,suggestion:"表内「合计」必须等于分项之和:以分项重算合计,或按权威数据修正分项;台账类保留显性「其他」差额项并给出数值;只允许修正表内数值,严禁编造无来源数据。"}),c.length>=5))break}return c}function cs(a){return bw(a).reduce((a,b)=>a+cq(b).length,0)}function ct(a,b){let c=b.projectName||"";if("village-municipal"===b.blueprintStrategyId||/自然村|美丽乡村|宜居|乡村振兴|行政村|村组|村庄/u.test(c))return[];let d=["自然村","村内","村庄","村民","多村并行","村组","各村"].map(b=>({term:b,count:(a.match(RegExp(b,"gu"))||[]).length})).filter(a=>a.count>0);if(0===d.length)return[];let e=d.reduce((a,b)=>a+b.count,0);return[{level:"error",severity:"blocker",category:"scope",message:`项目类型与正文用词矛盾:本项目非乡村类${c?`(${c})`:""},正文却出现乡村专有表述 ${d.map(a=>`「${a.term}」${a.count} 处`).join("、")}(合计 ${e} 处)`,suggestion:"按项目实际类型统一叙述口径:乡村专有表述应改为对应业务称谓(如「自然村分组」→「单位工程/施工区段」、「村内流水作业」→「区段内流水作业」);若项目确为乡村类,请检查项目名与蓝图策略选型后重新生成。"}]}let cu=[{figure:/进度|工期|横道|网络/u,table:/进度|工期|节点|工序/u,label:"进度计划表"},{figure:/平面|布置|总平面/u,table:/临时设施|临时用地|平面|设施配置/u,label:"临时设施/用地表"},{figure:/组织|机构|岗位|职责/u,table:/岗位|职责|机构|管理人员/u,label:"项目管理机构/岗位职责表"},{figure:/劳动力|人力/u,table:/劳动力|工种|人数/u,label:"劳动力计划表"},{figure:/机械|设备/u,table:/机械|设备|进场/u,label:"机械设备表"},{figure:/材料|物资/u,table:/材料|物资/u,label:"材料计划表"}];function cv(a,b){let c=[],d=a.split("\n"),f=/^图\s*\d+(?:[-—–-]\d+)?\s+\S+$/u,g=/^图\s+[^\s,。;:]{2,36}$/u,h=d.map((a,b)=>({text:a.trim(),index:b})).filter(a=>f.test(a.text)||g.test(a.text)),i=d.map((a,b)=>({text:a.trim(),index:b})).filter(a=>/!\[[^\]]*\]\([^)]*\)/u.test(a.text)||/<img\b/iu.test(a.text));for(let f of((h.length>0||i.length>0)&&c.push({level:"error",severity:"blocker",category:"format",provenance:{detectorId:"figure-substitute-table",fingerprint:(0,e.c6)(a)},message:`正文零图口径违规:图题/图号 ${h.length} 处、图片引用 ${i.length} 处`,suggestion:`正文只出表:删除全部图题、图号与图片引用,图类要求一律改写为等效数据表(进度类→工序表、机构类→岗位层级表、平面类→临时设施用地表)并加表题。示例:${(h[0]?.text||i[0]?.text||"").slice(0,40)}`}),b)){let a=cu.find(a=>a.figure.test(f.name)),b=a?.table??/./u;d.some(a=>{let c=a.trim();return!!/^\|.+\|$/u.test(c)&&b.test(c)})||c.push({level:"warning",severity:"warning",category:"structure",message:`图类要求未以数据表落实:「${f.name}」(${f.chapterTitle})${a?`(应至少提供${a.label})`:""}`,suggestion:"图类要求一律以等效数据表承载同一信息(进度图→进度计划表、平面布置图→临时设施用地表、机构图→岗位层级表);无对应数据则该项要求落空,须补齐数据而非留空。"})}return c}},36003:(a,b,c)=>{c.d(b,{AI:()=>U,Br:()=>W,D6:()=>Z,Y8:()=>D,Ym:()=>J,_9:()=>Y,eL:()=>q.eL,fk:()=>$,hZ:()=>E,nl:()=>ac,qX:()=>F,uQ:()=>V,w9:()=>B,xu:()=>q.xu});var d=c(76760),e=c(78217),f=c(70933),g=c(30836),h=c(40299),i=c(95734),j=c(22157),k=c(46482),l=c(71001),m=c(43378),n=c(52639),o=c(40693),p=c(49350),q=c(22213),r=c(91943),s=c(56963),t=c(18274),u=c(76193),v=c(21702),w=c(41991),x=c(1358),y=c(3063),z=c(54185),A=c(80572);function B(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];for(let a of(c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),c)){let b=function(a){let b=a.blockDegradation;if(b&&Array.isArray(b.droppedBlocks)&&0!==b.droppedBlocks.length)return b}(a);if(!b)continue;let{head:c,details:e}=$(b),f=b.droppedBlocks.map(a=>a.title).join("、"),g=[...new Set(b.droppedBlocks.map(a=>a.reason))].join(";");d.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"manual_review",chapterId:a.id,sectionTitle:b.droppedBlocks[0]?.title,message:`${a.title} 章级显式降级:${c}(失败原因:${g})`,suggestion:`本章已保留其余块正文,失守块无正文(不填充兜底内容)。请针对「${f}」在「${a.title}」对应位置定向补写或重生成后重新导出:${g}`,provenance:{detectorId:"chapter-block-degradation",fingerprint:(0,j.c6)(e.join("|"))}})}return b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}let C=/\b\d+(?:\.\d+)?\s*(?:日历天|小时|分钟|天|周|月|年|万元|元|台|套|个|项|批|次|份|人)(?=[。,,;;::、\s]|$)/gu;function D(a){let b=new Set;for(let c of a){let a=(0,j.lG)(c.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let c of a.matchAll(t._W))b.add(c[0].trim());for(let c of a.matchAll(C))b.add(c[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}function E(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,f.eE)((0,j.lG)(a.value))}`),g=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),h=a.indexedFacts||[],i=g.length>0?[]:h.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,f.eE)((0,j.lG)(a.value))}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),k=[...g,...h].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,j.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,j.lG)(a.value)}`)===b),l=[...new Set([...D(a.evidence),...g.map(a=>(0,j.lG)(a.value)).filter(a=>t.sv.test(a)),...h.map(a=>(0,j.lG)(a.value)).filter(a=>t.sv.test(a))])],m=new Set([...a.evidence.map(a=>a.filePath),...g.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,n=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label),o=function(a){if(!a)return[];let b=[];for(let[c,d]of Object.entries(a)){if(d.length<2)continue;let a=d.filter((a,b,c)=>c.findIndex(b=>b.location===a.location&&b.spec===a.spec)===b);a.length<2||b.push(`- ${c}:${a.slice(0,8).map(a=>`${a.location}:${a.spec}`).join("|")}`)}return b.slice(0,12)}(a.specAuthorityMap);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
|
|
47
47
|
${d.map(a=>`- ${a}`).join("\n")}`:"",e.length?`角色节点已抽取事实:
|
|
48
48
|
${e.join("\n")}`:"",k.length?`项目基础事实卡片(资料已明确,必须优先使用,不得输出任何占位话术;其中工程地点、建设规模、计划工期等总述数据只在项目概况/工程概况类章节集中交代,其他章节仅可引用所需的具体数字,不得复述完整概况段):
|
|
49
49
|
${k.map(a=>`- ${a.key||a.fieldName}:${(0,f.eE)((0,j.lG)(a.value))}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`).join("\n")}
|
|
@@ -82,14 +82,14 @@ ${n.join("\n")}
|
|
|
82
82
|
四、质量、安全与进度接口:各分部工程间的成品保护与工序交接安排、总体质量控制与检测验收安排、安全文明施工总体要求。
|
|
83
83
|
每部分不少于 ${Math.floor(f/4)} 字,全文合计不少于 ${f} 字;结合本项目资料中的具体工程内容(单体、部位、专业、工程量)展开,禁止空泛原则表述。`):"",V=[...new Set([b.title,...b.subPoints.map(a=>a.title),...b.subPoints.flatMap(a=>a.sources||[]),...R].filter(Boolean))],W=a.blueprintData?(0,p.Rx)(a.blueprintData,{blockTokens:V,quantityCharsCap:(0,A.z)().blueprintBlockQuantityCap,materialCharsCap:(0,A.z)().blueprintBlockMaterialCap}):"",X=a.blueprintChapter&&a.blueprintData?(0,p.TF)(a.blueprintChapter,a.blueprintData,{blockTitle:b.title,subPointTitles:m,skeletonNames:R,sliceCharsCap:(0,A.z)().blueprintBlockSliceCap}):"",Y={...a.chapter,title:b.title,sections:m,tablePlans:t[c]||[]},Z=l.map(a=>({title:a.title,words:a.quotaWords||0})),$=[...b.facts||[],...C[c]],_=$.length?`【本主题块专属事实(只能在本节使用,不得重复出现在本章其他节;本章其他节已认领各自专属事实,本节不得重复展开其他节专属事实)】${$.map(a=>`- ${a}`).join("\n")}`:"",aa=b.subPoints.map(a=>{let c=a.quotaWords&&a.quotaWords>0?`篇幅不超过 ${H(a.quotaWords)} 字`:"";return(0,j.Sw)(a.title)===i?`- ### ${b.title}(本节标题,覆盖评分细目:${a.sources.join("、")};正文直接展开,无需四级标题;如按细目分节,仅可使用上述细目标题作为四级标题${c?`;${c}`:""})`:a.sources.length>1?`- #### ${a.title}(覆盖评分细目:${a.sources.join("、")}${c?`;${c}`:""})`:`- #### ${a.title}${c?`(${c})`:""}`}).join("\n"),ab=o.size>0?`严禁将以下属于本章其他小节的标题作为本节任何标题输出(H3 仅允许「${b.title}」,H4 仅允许上面清单中的标题):${[...o].join("、")}。`:"",ac=[_,S,U,T,D&&!F?(0,z.gn)(c):"",b.subPoints.length>0?`本节是「${a.chapter.title}」章的一个主题小节,只写本节标题覆盖的内容,不得重复本章其他节内容;必须按以下清单逐点写出实施性正文,标题必须与给定标题完全一致,不得改名、合并或遗漏;每个要点必须覆盖其标注的全部评分细目内容,但不得为这些细目单独开设小节标题;清单标注的篇幅为该要点字数上限,按标注控制详略、不得超出:
|
|
84
84
|
${aa}${ab?`
|
|
85
|
-
${ab}`:""}`:`本节是「${a.chapter.title}」章的唯一小节(本章无细分小节规划):正文在 H3 标题下直接展开为连贯的正式叙述,不使用四级标题;覆盖本节标题对应的全部实质内容,不得重复章外内容。`,"【防复读硬约束】本节内同一句话只允许出现一次:同一段落内不得复读任何已写出的句子,不同段落之间不得整句复制,同一工艺/措施只在一处完整表述、其余位置引用结论不重述原文;段落结尾不得复读段内前句(禁止“为此/综上/因此”后接照抄句)。"].filter(Boolean).join("\n\n"),ad=[],ae=[],af=[],ag=0,ah="",ai="",aj="",ak="",al="",am="",an="",ao="",ap="",aq="",ar="",as=!1,at=(0,q.zJ)(b.title)?Math.min((0,q.ap)(b.title),Math.max(500,b.targetWords)):0,au=Math.max(Math.floor(.85*b.targetWords),at),av=Math.floor(.
|
|
85
|
+
${ab}`:""}`:`本节是「${a.chapter.title}」章的唯一小节(本章无细分小节规划):正文在 H3 标题下直接展开为连贯的正式叙述,不使用四级标题;覆盖本节标题对应的全部实质内容,不得重复章外内容。`,"【防复读硬约束】本节内同一句话只允许出现一次:同一段落内不得复读任何已写出的句子,不同段落之间不得整句复制,同一工艺/措施只在一处完整表述、其余位置引用结论不重述原文;段落结尾不得复读段内前句(禁止“为此/综上/因此”后接照抄句)。"].filter(Boolean).join("\n\n"),ad=[],ae=[],af=[],ag=0,ah="",ai="",aj="",ak="",al="",am="",an="",ao="",ap="",aq="",ar="",as=!1,at=(0,q.zJ)(b.title)?Math.min((0,q.ap)(b.title),Math.max(500,b.targetWords)):0,au=Math.max(Math.floor(.85*b.targetWords),at),av=Math.floor(.7*b.targetWords),aw=y.Yp.test(b.title),ax=!aw&&y.gG.test(b.title),ay=!F&&(aw?m.length>=3:ax&&m.length>0),az=!1,aA=c=>["【上一轮未通过质检】",ad.length?`缺失 H4 要点标题:${ad.join("、")}。必须逐点补齐以上 H4 标题并展开正式正文,H4 标题与给定标题完全一致。`:"",ae.length?`重复展开的 H4 要点标题:${ae.join("、")}。同一小节内相同要点被重复展开多轮,必须只保留一轮完整展开,其余重复小节连同标题整体删除,不得以换编号方式重复同一内容。`:"",af.length?`清单外标题(属于本章其他小节或不在本节要点清单内):${af.join("、")}。这些标题连同其正文整块删除,本节只允许输出上面清单中的 H4 标题与「${b.title}」H3 标题。`:"",0===ad.length&&0===ae.length&&0===af.length?"必须完整包含每个 H4 要点标题并展开正文,不得合并或遗漏要点。":"",ah,ai,aj,ak,al,am,an,ao,ap,aq,a.blueprintMustCiteHint?`【蓝图锁定数值检查】正文必须逐条出现以下蓝图锁定数值且与给定值完全一致:${a.blueprintMustCiteHint}。`:"",c?ag>0?ag<au?`当前输出仅 ${ag} 字,距篇幅下限 ${au} 字还缺 ${au-ag} 字,必须逐点展开补足(区间上限 ${Math.ceil(1.15*b.targetWords)} 字)。`:ag>Math.ceil(1.15*b.targetWords)?"":`当前输出 ${ag} 字(本节合同区间 ${au}~${Math.ceil(1.15*b.targetWords)} 字),保持篇幅并修正上述缺陷。`:`本节篇幅合同区间为 ${au}~${Math.ceil(1.15*b.targetWords)} 字(目标 ${b.targetWords} 字)。`:""].filter(Boolean).join(""),aB=async(c,d)=>{let f=Math.max(au,b.targetWords),g=c,i=d,k=0;for(let c=0;c<2;c+=1){(0,j.Te)(a.signal);let c=f-i;if(c<=0)break;let d=[ac,`【本节欠产续写】本节已有正文如下(**不得重复、不得改写、不得重新输出**),请**只输出续写部分**,接着上文把未充分展开的要点继续写完。当前 ${i} 字,本节目标 ${b.targetWords} 字,还缺约 ${c} 字(达 ${au} 字即可收稿,上限 ${Math.ceil(1.15*b.targetWords)} 字)。只输出新写的正文,不要重复已写内容、不要重写本节标题。`,"【已有正文开始】",g,"【已有正文结束】"].join("\n\n"),l=await G(a.template,Y,B,a.missingFacts,a.promptTexts,a.projectContext,a.requirement,d,{forbidDrawingImages:a.forbidDrawingImages,bidComposition:a.bidComposition,compactProjectContext:a.compactProjectContext,scopedProjectContext:a.scopedProjectContext,chapterLevelContext:a.roleContext||"",minWords:b.targetWords,targetWords:b.targetWords,sectionQuotas:Z,maxTokens:Math.max(3200,Math.ceil(1.5*b.targetWords)),sharedFactLayerText:E,evidenceRankBoost:x,onlyRankBoosted:!0,signal:a.signal,diagnostics:a.diagnostics});if(!l)break;let n=(0,h.kT)(String(l).trim());if(!n)break;let o=g.replace(/\s+/gu,"").slice(-40),p=o&&n.replace(/\s+/gu,"").includes(o)?n:`${g}
|
|
86
86
|
|
|
87
87
|
${n}`,q=(0,j.Me)(p,m);q.aligned.length>0&&(p=q.markdown);let t=(0,s.Rk)(p,a.chapter.tablePlans);t.normalized>0&&(p=t.markdown);let u=(0,r.vi)(p);u.cleaned.length>0&&(p=u.markdown);let v=(0,e.V7)(p);if(v<=i)break;g=p,i=v,k+=1}if(0===k||i<au)return;let l=Math.ceil(1.15*b.targetWords);if(!(i>Math.ceil(1.2*b.targetWords)))return console.error(`[gen][block-qc] 欠产续写收敛(${d} → ${i} 字,下限 ${au},上限 ${l}):${b.title}`),a.diagnostics&&(a.diagnostics.llm.lastInfo=`欠产块续写收敛:${b.title}(${d} → ${i} 字)`),g};for(let d=0;d<2;d+=1){let f=0===d?a.initialFeedback||"":aA(!0);try{let h,i,l,n,p=()=>G(a.template,Y,B,a.missingFacts,a.promptTexts,a.projectContext,a.requirement,f?`${ac}
|
|
88
88
|
|
|
89
89
|
${f}`:ac,{forbidDrawingImages:a.forbidDrawingImages,bidComposition:a.bidComposition,compactProjectContext:a.compactProjectContext,scopedProjectContext:a.scopedProjectContext,chapterLevelContext:a.roleContext||"",minWords:b.targetWords,targetWords:b.targetWords,sectionQuotas:Z,maxTokens:Math.max(3200,Math.ceil(1.5*b.targetWords)),sharedFactLayerText:E,evidenceRankBoost:x,onlyRankBoosted:!0,skipT2Catalog:!0,evidenceFloorChars:1e3,evidenceCeilingChars:J,factCoverageContext:a.factCoverageContext||"",blueprintDataText:W,blueprintSliceText:X,blueprintMustCiteHint:a.blueprintMustCiteHint,signal:a.signal,diagnostics:a.diagnostics}),t=a.diagnostics?await (0,k.X6)(a.diagnostics,`block-draft:${a.chapter.id}:${c}:a${d}`,p):await p();if(!t){console.error(`[gen][block-qc] 块写作返回空内容 attempt=${d}: ${b.title}(目标 ${b.targetWords} 字)`);continue}let y=t.replace(/^##\s+.+$/mu,"").trim(),A=(0,q.KJ)(m,y),C=/^###\s+\S+/mu.test(A)?A:`### ${b.title}
|
|
90
90
|
|
|
91
91
|
${A}`,H=(0,j.Me)(C,m);H.aligned.length>0&&(C=H.markdown,a.diagnostics&&(a.diagnostics.llm.lastInfo=`块要点标题近似对齐:${b.title}(${H.aligned.join("、")})`));let I=[];if(D){let a=(0,q.I6)(C);a!==C&&(C=a);let b=(C.match(/^#{3,4}\s+(.+)$/gmu)||[]).map(a=>a.replace(/^#{3,4}\s+/u,""));I=R.filter(a=>!b.some(b=>(0,j.Sw)(b).includes((0,j.Sw)(a))))}let K=(0,s.Rk)(C,a.chapter.tablePlans);K.normalized>0&&(C=K.markdown,a.diagnostics&&(a.diagnostics.llm.lastInfo=`块表格表题归一:${b.title}(${K.normalized} 处表名混入表头)`));let N=(0,r.vi)(C);N.cleaned.length>0&&(C=N.markdown,a.diagnostics&&(a.diagnostics.llm.lastInfo=`块结构确定性清理:${b.title}(${N.cleaned.length} 项)`));let O=(0,r.$t)(C),P=O.blocking.length>0;P&&(an=(0,r.G5)(O,b.title)||"",console.error(`[gen][block-qc] 结构完整性阻断 attempt=${d}(${O.blocking.length} 处): ${b.title}: ${O.blocking.slice(0,3).map(a=>a.message).join(" / ")}`));let Q=(0,e.V7)(C);ar=C,ag=Q;let S=`${E}
|
|
92
|
-
${B.map(a=>a.content).join("\n")}`,T=a.evidence.map(a=>a.content).join("\n"),U=(0,u.yT)("block-numeric-reconciliation",()=>(0,g.I)(C,S,T));if(U.mismatched.length>0&&a.diagnostics&&(a.diagnostics.llm.lastInfo=`数值核验:${b.title} 发现 ${U.mismatched.length} 处疑似错误数值(${U.mismatched.map(a=>`${a.found}→${a.expected}`).join("、")})`),I.length>0){let a=0===d&&I.length>2;console.error(`[gen][block-qc] 骨架缺口 ${I.length} 个 attempt=${d}(${a?"阻断重试":"放行交修复链"}): ${b.title}: ${I.join("、")}`)}let V=0===d&&I.length>2?I:[];if(0===d){for(let a=0;a<2&&void 0===h;a+=1)try{h=await (0,u.yT)("block-templating",()=>(0,v.SA)(C))}catch(c){i=c instanceof Error?c.message:String(c),console.error(`[gen][block-qc] 模板化扫描第 ${a+1} 次失败: ${b.title}`,c)}i&&a.diagnostics&&(a.diagnostics.llm.lastError=`块级模板化质检未完成(按未通过处理):${b.title} —— ${i}`)}let _=0===d&&(void 0!==i||void 0!==h&&(0,v.mv)(h));_&&h&&console.error(`[gen][block-qc] 首轮模板化阻断(套话 ${h.fillerSentences}/${h.totalSentences} 句、占比 ${(100*h.fillerRatio).toFixed(1)}%、模糊 ${h.vagueCount} 处): ${b.title}: ${h.fillerDetails.slice(0,3).join(" / ")}`);let aa=[...B.filter(a=>w.some(b=>a.content.includes(b))).map(a=>a.content),...$].join("\n"),ab=(0,u.yT)("block-fact-density",()=>(0,v.oM)(C,aa)),aw=0===d&&ab.blocking;aw&&console.error(`[gen][block-qc] 首轮密度缺口阻断(${ab.verdict.params}/${ab.verdict.required} 参数,材料 ${ab.materialParams} 个): ${b.title}`);let ax=(0,v.jk)(`${a.chapter.title} ${b.title}`);if(0===d&&ax){for(let a=0;a<2&&void 0===l;a+=1)try{l=await (0,u.yT)("block-attribution-quantification",()=>(0,v.o9)(C))}catch(c){n=c instanceof Error?c.message:String(c),console.error(`[gen][block-qc] 归因量化扫描第 ${a+1} 次失败: ${b.title}`,c)}n&&a.diagnostics&&(a.diagnostics.llm.lastError=`块级归因量化质检未完成(按未通过处理):${b.title} —— ${n}`)}let aA=0===d&&(void 0!==n||void 0!==l&&(0,v.KM)(l));aA&&l&&console.error(`[gen][block-qc] 首轮归因量化阻断(双达标率 ${(100*l.bothRatio).toFixed(0)}%,${l.entries} 条目): ${b.title}`);let aC=(0,u.yT)("block-format-constraints",()=>(0,v.mY)(C)),aD=0===d&&aC.length>0;aD&&console.error(`[gen][block-qc] 首轮格式硬约束阻断(后台话术 ${aC.length} 行): ${b.title}: ${aC.slice(0,2).join(" / ")}`);let{missing:aE,duplicates:aF,extraneous:aG}=(0,u.yT)("block-structure-contract",()=>{let a=C.split("\n").map(a=>(0,j.Sw)(a)).filter(Boolean);return{missing:[...m.filter(b=>{let c=(0,j.Sw)(b);return!!c&&!a.some(a=>a.includes(c))}),...V.map(a=>`工作包小节:${a}`)],duplicates:(0,j.W6)(C),extraneous:(0,j.wx)(C,b.title,m,[...o],[...b.subPoints.flatMap(a=>a.sources),...R])}}),aH=ay?(0,q.eK)(b.title,C):"",aI=0===d&&""!==aH;aI&&console.error(`[gen][block-qc] 首轮工作包结构/要素门禁阻断: ${b.title}: ${aH}`);let aJ=U.mismatched.length>0,aK=D&&!F?(0,z.V0)(c):void 0,aL=aK?(0,z.v_)(C):void 0,aM=0===d&&void 0!==aK&&void 0!==aL&&aL!==aK,aN=Math.ceil(1.15*b.targetWords),aO=Math.ceil(1.
|
|
92
|
+
${B.map(a=>a.content).join("\n")}`,T=a.evidence.map(a=>a.content).join("\n"),U=(0,u.yT)("block-numeric-reconciliation",()=>(0,g.I)(C,S,T));if(U.mismatched.length>0&&a.diagnostics&&(a.diagnostics.llm.lastInfo=`数值核验:${b.title} 发现 ${U.mismatched.length} 处疑似错误数值(${U.mismatched.map(a=>`${a.found}→${a.expected}`).join("、")})`),I.length>0){let a=0===d&&I.length>2;console.error(`[gen][block-qc] 骨架缺口 ${I.length} 个 attempt=${d}(${a?"阻断重试":"放行交修复链"}): ${b.title}: ${I.join("、")}`)}let V=0===d&&I.length>2?I:[];if(0===d){for(let a=0;a<2&&void 0===h;a+=1)try{h=await (0,u.yT)("block-templating",()=>(0,v.SA)(C))}catch(c){i=c instanceof Error?c.message:String(c),console.error(`[gen][block-qc] 模板化扫描第 ${a+1} 次失败: ${b.title}`,c)}i&&a.diagnostics&&(a.diagnostics.llm.lastError=`块级模板化质检未完成(按未通过处理):${b.title} —— ${i}`)}let _=0===d&&(void 0!==i||void 0!==h&&(0,v.mv)(h));_&&h&&console.error(`[gen][block-qc] 首轮模板化阻断(套话 ${h.fillerSentences}/${h.totalSentences} 句、占比 ${(100*h.fillerRatio).toFixed(1)}%、模糊 ${h.vagueCount} 处): ${b.title}: ${h.fillerDetails.slice(0,3).join(" / ")}`);let aa=[...B.filter(a=>w.some(b=>a.content.includes(b))).map(a=>a.content),...$].join("\n"),ab=(0,u.yT)("block-fact-density",()=>(0,v.oM)(C,aa)),aw=0===d&&ab.blocking;aw&&console.error(`[gen][block-qc] 首轮密度缺口阻断(${ab.verdict.params}/${ab.verdict.required} 参数,材料 ${ab.materialParams} 个): ${b.title}`);let ax=(0,v.jk)(`${a.chapter.title} ${b.title}`);if(0===d&&ax){for(let a=0;a<2&&void 0===l;a+=1)try{l=await (0,u.yT)("block-attribution-quantification",()=>(0,v.o9)(C))}catch(c){n=c instanceof Error?c.message:String(c),console.error(`[gen][block-qc] 归因量化扫描第 ${a+1} 次失败: ${b.title}`,c)}n&&a.diagnostics&&(a.diagnostics.llm.lastError=`块级归因量化质检未完成(按未通过处理):${b.title} —— ${n}`)}let aA=0===d&&(void 0!==n||void 0!==l&&(0,v.KM)(l));aA&&l&&console.error(`[gen][block-qc] 首轮归因量化阻断(双达标率 ${(100*l.bothRatio).toFixed(0)}%,${l.entries} 条目): ${b.title}`);let aC=(0,u.yT)("block-format-constraints",()=>(0,v.mY)(C)),aD=0===d&&aC.length>0;aD&&console.error(`[gen][block-qc] 首轮格式硬约束阻断(后台话术 ${aC.length} 行): ${b.title}: ${aC.slice(0,2).join(" / ")}`);let{missing:aE,duplicates:aF,extraneous:aG}=(0,u.yT)("block-structure-contract",()=>{let a=C.split("\n").map(a=>(0,j.Sw)(a)).filter(Boolean);return{missing:[...m.filter(b=>{let c=(0,j.Sw)(b);return!!c&&!a.some(a=>a.includes(c))}),...V.map(a=>`工作包小节:${a}`)],duplicates:(0,j.W6)(C),extraneous:(0,j.wx)(C,b.title,m,[...o],[...b.subPoints.flatMap(a=>a.sources),...R])}}),aH=ay?(0,q.eK)(b.title,C):"",aI=0===d&&""!==aH;aI&&console.error(`[gen][block-qc] 首轮工作包结构/要素门禁阻断: ${b.title}: ${aH}`);let aJ=U.mismatched.length>0,aK=D&&!F?(0,z.V0)(c):void 0,aL=aK?(0,z.v_)(C):void 0,aM=0===d&&void 0!==aK&&void 0!==aL&&aL!==aK,aN=Math.ceil(1.15*b.targetWords),aO=Math.ceil(1.4*b.targetWords),aP=1===d?aO:aN,aQ=0===d&&Q<av,aR=Q>aP,aS=0===d&&at>0&&Q<at;if(aQ||aR?console.error(`[gen][block-qc] 篇幅失守阻断 attempt=${d}(${Q} 字 vs 块目标 ${b.targetWords} 字,欠产线 <${av}${at>0?`(含关键小节深度门槛 ${at})`:""} / 超产线 >${aP})${d>0&&aR?"[二轮仍超产 → 块失败]":""}: ${b.title}`):Q>aN?(console.error(`[gen][block-qc] 篇幅超产末轮容差放行(${Q} 字 vs 块目标 ${b.targetWords} 字,合同超产线 ${aN} / 容差线 ${aO}): ${b.title}`),a.diagnostics&&(a.diagnostics.llm.lastInfo=`块篇幅超产末轮容差放行:${b.title}(${Q} 字,合同超产线 ${aN} / 容差线 ${aO})`)):Q<Math.floor(.85*b.targetWords)&&console.error(`[gen][block-qc] 篇幅欠产接受区放行(${Q} 字 vs 块目标 ${b.targetWords} 字,达标区 ${Math.floor(.85*b.targetWords)}~${Math.ceil(1.15*b.targetWords)}): ${b.title}`),aS&&console.error(`[gen][block-qc] 关键小节深度门槛阻断 attempt=${d}(${Q} 字 vs 绝对门槛 ${at} 字,块目标 ${b.targetWords} 字): ${b.title}`),as=(aQ||aS)&&!aR&&!aI&&0===aE.length&&0===aF.length&&0===aG.length&&!aJ&&!aM&&!_&&!P&&!aw&&!aA&&!aD,!aQ&&!aR&&!aS&&!aI&&0===aE.length&&0===aF.length&&0===aG.length&&!aJ&&!aM&&!_&&!P&&!aw&&!aA&&!aD){if(Q<Math.floor(.95*b.targetWords)){let a=await aB(C,Q);if(a)return a}return C}if(ad=aE,ae=aF,af=aG,az=!0,ah=(0,g.n8)(U),ai=void 0!==aK&&aL!==aK?`【上一轮工序表达形式不符】本块指定的工序顺序表达形式为「${aK}」,上一轮正文${aL?`使用了「${aL}」形式`:"未见明确的工序顺序表达"}。必须改用「${aK}」形式重写工序顺序表达,内容与数值保持不变。`:"",aj=_&&h?`【上一轮空话套话句】以下句子是空泛口号(无责任岗位、量化标准、检查频次等可核查信息):${h.fillerDetails.map(a=>`“${a}”`).join("、")}。必须删除或改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”式具体措施,并嵌入本节项目事实(不得编造数值)。`:"",ak=aw?`【上一轮量化参数密度不足】本节 ${ab.verdict.chars} 字仅落位 ${ab.verdict.params} 个不同量化参数(要求 ≥${ab.verdict.required} 个,约 ${v.J5} 个/千字),材料中仍有未落位参数。必须从本节材料事实/证据中选取适用参数自然写入对应部位与工序(同一参数不得反复堆砌,不得从行业惯例或相邻章节借参数,不得编造)。`:"",al=aA&&l?`【上一轮归因量化不达标】以下条目缺少“成因归因链”或“量化控制目标”的完整表达:${l.missing.map(a=>`“${a.text.slice(0,60)}”`).join("、")}。必须逐条补齐:先写难点/特点成因分析(为什么难),再写可核查的量化目标与控制措施(数值/指标),不得只写口号式措施。`:"",am=aD?`【上一轮后台/兜底话术】以下句子属于后台处理话术(不得出现在正式正文):${aC.map(a=>`“${a.slice(0,60)}”`).join("、")}。必须删除或改写为正式表述——用绑定资料中的明确事实替换“待确认/不适用/以招标文件为准”类表述;确实无资料支撑的内容直接删除该句,不得保留任何后台痕迹。`:"",ao=aR?`【上一轮篇幅超限】当前输出 ${Q} 字,超出本节篇幅上限 ${Math.ceil(1.15*b.targetWords)} 字(目标 ${b.targetWords} 字)。必须压缩重写:同类工序/措施合并叙述,相同内容只完整表述一次,删除重复铺陈与并列复述;保留全部 H4 标题与关键数值,把总字数压缩到 ${Math.floor(.8*b.targetWords)}~${Math.floor(.95*b.targetWords)} 字。`:"",ap=aS?`【上一轮关键小节深度不足】本节「${b.title}」为关键小节,首轮正文仅 ${Q} 字,低于绝对深度门槛 ${at} 字(篇幅下限 ${au} 字,块目标 ${b.targetWords} 字)。必须逐点补足至 ${au}~${Math.ceil(1.15*b.targetWords)} 字:每个要点按「作业对象与工程量、工序顺序、施工方法」三方面要素展开,落到具体部位/规模、工序环节与工艺参数、验收检测与资料闭环上;材料中已确认的事实优先落位,不得编造数值,不得以空泛表述凑数。`:"",aq=aI?`【上一轮工作包结构/要素未达门禁】${aH}。必须按上面给定的小节/要点清单逐包展开,每个工作包正文覆盖「作业对象与工程量(部位、规模、工程量)、工序顺序(先后顺序清晰)、施工方法(工具机具、工艺参数、验收检测与记录闭环)」三方面要素并融入连贯散文叙述;不得以“施工概况/施工流程/施工方法”等结构标签充当小节标题或段落开头,不得以表格替代工作包正文,不得混入项目概况、招标范围、未尽事宜、资格审查等非本节事实;标题必须与清单完全一致,不得新增清单外标题,也不得为凑数重复同一工作包。`:"",0===aE.length&&!P&&!aJ&&!_&&!aw&&!aA&&!aD&&!aI&&!aS){let c=(0,j.dY)((0,j.wq)(C),b.title,m,[...b.subPoints.flatMap(a=>a.sources)]),d=(0,e.V7)(c),f=d>aP,g=d<av;if(!f&&!g)return a.diagnostics&&(aG.length>0||aF.length>0)&&(a.diagnostics.llm.lastInfo=`块标题层已确定性修复:${b.title}(清单外 ${aG.length} 个、重复 H4 ${aF.length} 个;${Q}→${d} 字)`),c}L.set(c,C),M.set(c,[...aR?["over-produce"]:[],...aQ?["under-produce"]:[],...aE.length>0||aF.length>0||aG.length>0?["structure-titles"]:[],...P?["structure-integrity"]:[],...aJ?["numeric"]:[],...aM?["flow-form"]:[],..._?["templating"]:[],...aw?["density"]:[],...aA?["attribution"]:[],...aD?["format"]:[]]),a.diagnostics&&(a.diagnostics.llm.lastError=`规划块质检未达标:${b.title}(${Q} 字,缺 ${aE.join("、")||"无"}${aF.length?`,重复 H4 ${aF.join("、")}`:""}${aG.length?`,清单外 ${aG.slice(0,5).join("、")}${aG.length>5?" 等":""}`:""}${aS?`,关键小节深度不足 ${Q}/${at} 字`:""}${aI?`,工作包结构/要素门禁 ${aH}`:""}${O.blocking.length?`,结构缺陷 ${O.blocking.length} 处`:""}${aw?`,密度缺口 ${ab.verdict.params}/${ab.verdict.required}`:""}${aA&&l?`,归因量化 ${(100*l.bothRatio).toFixed(0)}%`:""}${aD?`,后台话术 ${aC.length} 行`:""})`),console.error(`[gen][block-qc] 块质检不达标 attempt=${d}: ${b.title}(目标 ${b.targetWords} 字,实际 ${Q} 字,缺 ${aE.join("、")||"无"},重复 ${aF.join("、")||"无"},清单外 ${aG.join("、")||"无"},结构缺陷 ${O.blocking.length} 处,关键小节深度 ${aS?`${Q}<${at}`:"达标/不适用"},工作包要素门禁 ${aI?aH:"通过/不适用"},密度缺口 ${aw?"是":"否"},归因量化 ${aA?"不达标":"达标"},后台话术 ${aD?"有":"无"},keySection=${D||"none"})`)}catch(b){a.diagnostics&&(a.diagnostics.llm.lastError=b instanceof Error?b.message:String(b))}}if(az&&K.set(c,aA(!1)),ar&&as){let a=await aB(ar,(0,e.V7)(ar));if(a)return a}},O=async(b,c)=>{B[c]=await N(b,c),B[c]&&a.onSectionProgress?.({completed:B.filter(Boolean).length,total:d.length,sectionTitle:b.title,phase:"complete",partialSections:[...B]})};d.length>0&&((0,j.Te)(a.signal),await O(d[0],0));for(let b=1;b<d.length;b+=x){(0,j.Te)(a.signal);let c=d.slice(b,b+x);await Promise.all(c.map((a,c)=>O(a,b+c)))}let P=d.map((a,b)=>({index:b,block:a,retryFeedback:K.get(b),lastAttempt:L.get(b),failureKinds:M.get(b)})).filter(({index:a})=>!B[a]),Q=[];for(let a=0;a<d.length;a+=1){let b=B[a];if(!b){c=void 0;continue}let e=(0,j.Sw)(d[a].title);c===e&&Q.length>0?Q[Q.length-1]=`${Q[Q.length-1]}
|
|
93
93
|
|
|
94
94
|
${l(b,e)}`:Q.push(b),c=e}let R=(0,h.kT)((0,h.FD)(`## ${a.chapter.title}
|
|
95
95
|
|
|
@@ -149,7 +149,7 @@ ${b.join("\n")}
|
|
|
149
149
|
只输出 JSON:{"judgments":[{"id":"...","conclusion":"consistent|conflict|uncertain","rationale":"不超过 60 字的依据"}]};每条候选必须给出结论,不得遗漏。`}(e))}catch(a){c=`语义判定调用异常:${a instanceof Error?a.message:String(a)}`,b=void 0}if(!b||!Array.isArray(b.judgments)){for(let a of(c=c??"语义判定调用失败(模型未返回有效 JSON)",e))d.set(a.id,{id:a.id,conclusion:"uncertain",rationale:c});continue}let i=new Map;for(let a of b.judgments)a&&"string"==typeof a.id&&i.set(a.id,a);for(let a of e){let b=i.get(a.id),c="string"==typeof b?.rationale&&b.rationale.trim()?b.rationale.trim().slice(0,120):b?"模型未给出判定依据":"模型输出缺少该候选的判定",e=b?.conclusion==="consistent"||b?.conclusion==="conflict"||b?.conclusion==="uncertain"?b.conclusion:"uncertain";"conflict"===e&&function(a){let b=/不冲突|并非冲突|不存在冲突|不予冲突|无冲突|(?:未|不|没有|不曾|从未|并非)(?:构成|形成|产生|发生|视为|属于|存在|发现|出现|检出|识别)[^,。;;、]{0,10}?(?:冲突|不一致)|非[^,。;;、]{0,12}?(?:口径|数值|陈述)/u;if(!b.test(a))return!1;let c=a.replace(RegExp(b.source,"gu"),"");return!/冲突|不一致/u.test(c)}(c)&&(e="consistent");let g={id:a.id,conclusion:e,rationale:c};d.set(a.id,g),b&&(f.size>=4e3&&f.clear(),f.set(k(a),g))}}return{records:d,unavailable:c}}let m=(a,b)=>l(a,b)},56963:(a,b,c)=>{c.d(b,{E7:()=>m,RT:()=>h,Rk:()=>o,fw:()=>f});var d=c(13145),e=c(91943);function f(a,b){if(!b)return"";let c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){if(!/^\s*\|/u.test(c[a])||!c[a].includes(b))continue;let d=a;for(;d>0&&/^\s*\|/u.test(c[d-1]);)d-=1;let e=a;for(;e+1<c.length&&/^\s*\|/u.test(c[e+1]);)e+=1;return c.slice(d,e+1).join("\n")}return""}function g(a){let b=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>(0,d.jG)(a.trim())));if(b.length<2)return{lines:a,removed:0};let c=b.length>1&&b[1].length>0&&b[1].every(a=>/^:?-{2,}:?$/u.test(a))?1:0,e=()=>Math.max(...b.map(a=>a.length)),f=0,g=!1,h=b[0],i=b.slice(c+1);if(i.length>0&&/表$/u.test(h[0]||"")&&i.every(a=>a.length>0&&""===a[a.length-1])&&i.some(a=>""!==a[0])){b[0]=h.slice(1);for(let a=c+1;a<b.length;a+=1)b[a]=b[a].slice(0,b[a].length-1);g=!0,f+=1}if(b.length>c+1){let a=[];for(let d=0;d<e();d+=1)b.slice(c+1).every(a=>""===(a[d]||""))&&a.push(d);if(a.length>0){for(let c of b)for(let b=a.length-1;b>=0;b-=1)c.splice(a[b],1);g=!0,f+=1}}return(b.length<=c+1&&(b.splice(0,b.length),g=!0,f+=1),g)?{lines:b.map((a,b)=>b===c?`| ${a.map(()=>"---").join(" | ")} |`:`| ${a.join(" | ")} |`),removed:f}:{lines:a,removed:0}}function h(a,b){let c=f(a,b);if(!c)return{content:a,removed:0};let d=g(c.split(/\r?\n/u));return d.removed>0?{content:a.replace(c,d.lines.join("\n")),removed:d.removed}:{content:a,removed:0}}let i=["上述要求与后续安排配套执行,执行情况由责任岗位登记归档。","下列要求应在上述安排基础上逐项落实,相关记录经复核后留存备查。","各项安排与上述要求同步执行,执行结果纳入日常台账统一管理。"],j={管控点位:["检查项目","管控事项","检查要点"],检查项目:["检查内容","检查要点","管控事项"],序号:["项次","编号","序次"]};function k(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>(0,d.jG)(a.trim()))}function l(a){let b=k(a);return b.length>=2&&b.every(a=>/^:?-{2,}:?$/u.test(a))}function m(a){let b=a.split(/\r?\n/u),c=[],d=0;for(;d<b.length;){if(!/^\s*\|/u.test(b[d])){c.push({kind:"text",line:b[d]}),d+=1;continue}let a=d;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;c.push({kind:"table",parts:function(a){let b=[];for(let c=2;c<a.length;c+=1){if(!l(a[c])||l(a[c-1]))continue;let d=k(a[c-1]);!d[0]||d.every(a=>""===a)||b.push(c-1)}if(0===b.length)return[a];let c=[],d=0;for(let e of b)c.push(a.slice(d,e)),d=e;return c.push(a.slice(d)),c}(b.slice(d,a+1))}),d=a+1}let e=new Map;for(let a of c)if("table"===a.kind)for(let b of a.parts){if(!b.some(a=>l(a)))continue;let a=function(a){let b=a.trim(),c=b.startsWith("|")?b.slice(1):b;return(c.endsWith("|")?c.slice(0,-1):c).split("|").map(a=>a.split("**").join("").trim()).filter(a=>a.length>0).join("|")}(b[0]||"");if(!a)continue;let c=e.get(a);c?c.push(b):e.set(a,[b])}let f=0;for(let a of e.values())if(!(a.length<3))for(let b=1;b<a.length;b+=1){let c=j[function(a){let b=a.trim(),c=b.startsWith("|")?b.slice(1):b;for(let a of(c.endsWith("|")?c.slice(0,-1):c).split("|")){let b=a.split("**").join("").trim();if(b.length>0)return b}return""}(a[b][0]||"")];c&&0!==c.length&&(a[b][0]=function(a,b){let c=a.trim(),d=c.startsWith("|")?c.slice(1):c,e=(d.endsWith("|")?d.slice(0,-1):d).split("|"),f=e.findIndex(a=>a.trim().length>0);return f<0?a:(e[f]=` ${e[f].includes("**")?`**${b}**`:b} `,`|${e.join("|")}|`)}(a[b][0]||"",c[(b-1)%c.length]),f+=1)}let h=[],m=0,n=0,o=0;for(let a of c){if("text"===a.kind){h.push(a.line);continue}a.parts.length>1&&(n+=a.parts.length-1);let b=!1;for(let c of a.parts){let a=g(c);a.removed>0&&(m+=1),0!==a.lines.length&&(b&&(h.push("",i[o%i.length],""),o+=1),h.push(...a.lines),b=!0)}}return{markdown:h.join("\n"),removed:m,splitCount:n,variantCount:f}}function n(a){return(0,d.jG)(a).replace(/[\s*_`<>#]/gu,"")}function o(a,b){let c=a.replace(/\r\n?/gu,"\n").split("\n"),f=[],g=0,h=0;for(;h<c.length;){if(!/^\s*\|/u.test(c[h])){f.push(c[h]),h+=1;continue}let a=h;for(;a+1<c.length&&/^\s*\|/u.test(c[a+1]);)a+=1;let i=function(a,b,c){let f=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>(0,d.jG)(a.trim())));if(f.length<2)return;let g=f[1];if(!(g.length>0&&g.every(a=>/^:?-{2,}:?$/u.test(a))))return;let h=f[0],i=(h[0]||"").replace(/[\s*_]/gu,"");if(h.length<3||!/表$/u.test(i)||(i.match(/[\u4e00-\u9fa5]/gu)||[]).length<e.dM)return;let j=(h[0]||"").trim(),k=[...c].reverse().find(a=>a.trim());if(k&&n(k.replace(/^#{1,6}\s+/u,""))===n(j))return;let l=f.slice(2);if(l.length>0&&l.every(a=>a.length>0&&""===(a[a.length-1]||"").trim())&&l.some(a=>""!==(a[0]||"").trim())){let a=h.slice(1);return[j,"",`| ${a.join(" | ")} |`,`| ${a.map(()=>"---").join(" | ")} |`,...l.map(a=>`| ${a.slice(0,-1).join(" | ")} |`)]}let m=(b||[]).find(a=>a.title&&n(a.title)===n(j)),o=m?.fields?.[0]?.name?(0,d.jG)(m.fields[0].name).replace(/[\s\u3000]/gu,""):"";if(o)return[j,"",`| ${[o,...h.slice(1)].join(" | ")} |`,...a.slice(1)]}(c.slice(h,a+1),b,f);i?(f.push(...i),g+=1):f.push(...c.slice(h,a+1)),h=a+1}return{markdown:f.join("\n"),normalized:g}}},61239:(a,b,c)=>{let d;c.d(b,{Hpz:()=>f6.Hp,h0x:()=>e.h0,bVF:()=>e.bV,bsz:()=>f6.bs,OXS:()=>gV,QJx:()=>e.QJ,jGg:()=>e.jG,Bhi:()=>e.Bh,xmB:()=>e.xm,J5_:()=>e.J5});var e=c(23500),f=c(22157),g=c(46482),h=c(70933),i=c(78217),j=c(80439),k=c(52639),l=c(30055),m=c(87942),n=c(55807),o=c(76193),p=c(82437),q=c(1218),r=c(51190),s=c(44505),t=c(49350);async function u(a){let b=a.chapterDrafts.flatMap(a=>a.evidence||[]);b.length>0&&(a.allEvidence.push(...b),a.allEvidence.splice(0,a.allEvidence.length,...(0,h.QR)(a.allEvidence,{preservePinned:!0}))),(0,f.Te)(a.signal);let c=(0,h.QR)(a.allEvidence,{preservePinned:!0});a.allEvidence.splice(0,a.allEvidence.length,...c),a.facts=(0,q.B2)(a.template,a.allEvidence,a.documentSpec);let{localFacts:d,projectBasicFacts:e,preciseFacts:g,structuredTables:i}=(0,q.d6)({evidence:a.allEvidence,template:a.template,spec:a.documentSpec,profile:a.domainProfile,diagnostics:a.generationDiagnostics}),k=[...d,...e,...g],l={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/资料事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if((0,q.N2)(k,a.template,a.documentSpec)){let b=(0,h.QR)(a.allEvidence,{preservePinned:!0});try{l=await (0,q.OQ)(b,a.factExtractionPromptTexts,a.template,a.documentSpec,a.signal,a.generationDiagnostics)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}}for(let b of l.stages)(0,j.fx)(a.progressStages,b);let m=(0,r.UT)(a.allEvidence);for(let b of(a.structuredFacts=[...d,...e,...g,...l.facts,...m],a.governedStructuredFacts=(0,r.A)(a.structuredFacts,a.scopeConflicts??(0,r.KX)(a.structuredFacts)),a.governedStructuredFacts))a.facts[b.key]=`${(0,f.lG)(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;a.factsModel=await (0,q.d7)(a.governedStructuredFacts,i,a.missingItems,a.documentSpec,a.domainProfile);let n=(0,r.qD)({facts:a.governedStructuredFacts,projectRoot:a.projectRoot,requirement:a.requirement||"",templateId:a.template.id});a.factsModel.canonical=n,a.scheduleAuthority=(0,s.GG)(a.factsModel),a.assemblyRateAuthority=(0,s.hI)(a.factsModel),a.scaleSummary=(0,s.Pt)(a.factsModel),a.supportAuthority=(0,s.P3)(a.factsModel),a.decisionLockEntries=(0,t.Pd)({facts:[...d,...e,...g],evidence:a.allEvidence})}var v=c(31846),w=c(11248),x=c(95294),y=c(1358),z=c(10025);let A=/OCR|乱码|识别错误|无法确认|语义断裂|页码/u,B=/暂列金额|暂估价|预留金/u,C=/^\d+(?:\.\d+)?\s*(?:%|元|万元|亿元|项|个|天|月|年|周|小时|分钟|人|次|份|批|层)$|^\d{4}[.\-/]\d{1,2}$/u,D=/^[A-Za-z]{1,4}\s*[-–—]?\s*\d{1,3}$/u,E=/^(?:精确参数|技术参数|参数|参数规格|规格参数|数据|指标|其他|其它|备注|说明|未分类)$/u,F=/(?:GB|JGJ|CJJ|CJ|JG|JT|TB|SL|DL|HG|SH|YB|SY|GA|QB|WS|JC|NB|CECS|ISO|IEC|JTG|DB)\s*\/?\s*T?\s*[\d.]{4,}/iu,G=/^[A-Za-z]{1,3}\s*\d+(?:\.\d+)?[A-Za-z]?$/u,H=/[。!?]|[::]\s*[\d((]|(?:应|须|不得|必须|严禁|宜)[^,。;]{0,20}(?:采用|符合|按照|满足|设置|办理|执行|组织|进行|大于|小于|超过|支付|承担|参加|具备|具有|提供|建立|完成|取得|达到|构成|包括|包含|纳入|列入|签署|加盖)|[^,。;]{6,}为[^,。;]{6,}/u,I=/(?:有限公司|有限责任公司|股份公司|集团公司|公司|事务所|管理处|管理局|委员会|服务中心)$/u;function J(a){return`${a.key||""} ${a.fieldName||""} ${a.value||""}`.trim()}function K(a,b=new Set){if(!a)return{usable:[],noiseExcluded:[]};let c=a.factIndex?.parameterFacts?.length?a.factIndex.parameterFacts:a.preciseFacts||[],d=new Set,e=[],f=[];for(let a of c){if(!a)continue;let c=String(a.value||"").trim();if(!c||b.has((0,w.K3)(c))||A.test(J(a))||(0,q.ZR)(a)||B.test(J(a)))continue;let g=(0,x.MO)(c);if(g){f.push({fact:a,category:g});continue}if(function(a){let b=String(a.value||"").trim();if(!b)return"空值";let c=(0,p.j4)(b);if(c)return c;let d=String(a.key||"").trim();return E.test(d)&&!G.test(b)&&!F.test(b)&&C.test(b)?"裸量碎片(键为通用桶、值无概念词,正文无从逐字落位)":RegExp(z.yJ,"u").test(b)?"变更叙述(非可落位参数)":b.length>=18&&H.test(b)?"条文句(非短语级参数)":/(?:\d)\s*(?:\d)(?:\s*\d){2,}/u.test(b)&&/(?:北|南|东|西|侧|号|路|街|村|镇|区)\s*\d/u.test(b)?"OCR 数字复写残片":I.test(b)?"单位/机构名(非工程参数)":/[==]/u.test(b)?"表格公式/口径残片(非值)":/^《[^》]{2,60}》\s*[((]?[A-Z]{1,6}\d{0,4}\s*\/?\s*T?\s*[\d.]{3,}/u.test(b)?"规范引用条目(属编制依据,非工程参数)":!D.test(b)||F.test(b)||G.test(b)?void 0:"清单/图签编码"}(a)||N.test(String(a.key||"").trim()))continue;let h=`${a.key}|${(0,w.K3)(c)}`;d.has(h)||(d.add(h),e.push(a))}return{usable:e,noiseExcluded:f}}function L(a,b=[]){let c=new Set;for(let d of(0,v.TC)(a,b))for(let a of(0,v.XF)(d))c.add(a);return[...c]}function M(a,b){let c=J(a),d=0;for(let a of b)c.includes(a)&&(d+=1);return d}let N=/^(?:项目名称|项目编号|招标人|建设单位|建设地点|建设规模|计划工期|合同工期|总工期|开工日期|质量标准|质量目标|合同估算价|最高投标限价|招标范围|施工范围|投标人|开标|评标|资金来源|编制依据|安全生产许可证)/u,O=/[一—–‑﹣]/gu,P=/(?:约(?:为)?|大约|大概|左右|共计|总计|合计|合计为|不小于|不少于|不超过|不大于|应不少于)/gu,Q=/^(?:dn|de|d|φ|ф)/iu;function R(a,b,c=[],d={}){let{usable:e,noiseExcluded:f}=K(b,d.supersededValues),g=(0,w.K3)(a||""),h=g.replace(O,"-"),i=c.map(a=>L(a.title,a.sections||[])),j=[],k=[],l=[];for(let a of e){if(function(a,b,c=""){let d=(0,w.K3)(b);return!!d&&(!!(a.includes(d)||b.split(/[、,,;;/|]+/u).map(a=>(0,w.K3)(a)).filter(a=>a.length>=5).some(b=>a.includes(b)))||!!c&&function(a,b,c){let d=(0,w.K3)(c).replace(O,"-");if(d.length>=5&&b.includes(d))return!0;let e=d.replace(P,"");if(e.length>=5&&e!==d&&b.includes(e))return!0;let f=(0,y.Ih)(e);if(f.length>=5&&f!==e&&b.includes(f)||(0,y.Ih)(b).includes(f))return!0;if(Q.test(d)){let b=d.replace(Q,"dn");if(b.length>=4&&a.includes(b))return!0}return!1}(a,c,b))}(g,String(a.value),h)){j.push(a);continue}(i.some(b=>b.length>0&&M(a,b)>0)?k:l).push(a)}return{totalParams:e.length,used:j,relevantMissed:k,irrelevantMissed:l,noiseExcluded:f}}var S=c(18292);let T=["project_name","project_code","owner","project_location","project_scale","schedule_requirement","quality_standard","project_investment_estimate"],U=/资料未明确|系统暂未从知识库确认|项目资料暂未明确|^(?:无|暂无|未确认|待确认)$/u;function V(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function W(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function X(a,b){let c=W(b);if(!c||c.length<4)return!0;let d=W(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}let Y={规范包:/[括含]/u};var Z=c(73859);function $(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_\-—–―─-〜~·•]/gu,"").toLowerCase()}let _=/项目名称|工程名称|招标人|建设单位|发包人|采购人|招标单位|建设地点|工程地点|项目地点/u,aa=/bill_of_quantities|drawing|table/iu;function ab(a,b,c){let d=a.trim();if((0,Z.d2)(b,d)||(0,Z.rF)(b,d)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交|投标文件制作|电子服务系统|交易平台/u.test(d)||/\|/u.test(d)||/^#+\s*/u.test(d)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门|招标代理机构|监督管理部门|行政监督部门/u.test(d)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统|投标人须知|招标文件正文/u.test(d)&&/\d{3,}/u.test(d)||/项目名称|工程名称/u.test(d)&&/项目编号|工程概况|建筑面积|本项目分为|现状建筑物|改造工程|标段/u.test(d)||/项目编号[::]|工程概况[::]|本项目分为|现状建筑物|总建筑面积|本次改造工程|清单编制说明/u.test(d)||c&&/招标人|建设单位|发包人|采购人|招标单位/u.test(c)&&!/局|公司|中心|政府|管委会|委员会|集团|院|大学|学校|街道|办事处|指挥部|项目部|办公室|厅|署|银行|医院/u.test(d))return"";if(c&&_.test(c)){if(/所在地|地址|详见|见前附表|见招标/u.test(d)||/检查井|化粪池|机箱|碎石|路灯|井盖|监控系统|吊顶|抹灰|楼面|顶棚/u.test(d))return"";let a=d.replace(RegExp(`^${c.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}\\s*[::、,,..]?\\s*`,"u"),"")||d;return!a||a.length>40||/第\s*页|共\s*页/u.test(a)||/[,。;;、]/u.test(a)||/[::]/u.test(a)||/^[((][^))]*[))]$/u.test(a)||/[/\\]|\.(?:pdf|docx?|xlsx?|zip)/iu.test(a)||/R\d+C\d+/u.test(a)||$(a)===$(c)?"":$(a)}let e=/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月)/u.exec(d)?.[0],f=$(e&&/工期|总工期|合同工期|计划工期|施工周期|质保期|有效期|养护期/u.test(`${c||""} ${d}`)?e:d);return!f||f.length>80?"":f}var ac=c(40299),ad=c(95622),ae=c(23760),af=c(85016),ag=c(10751),ah=c(30836),ai=c(75251);let aj=[{re:/^(?:GB|JGJ|CJJ|CJ|JG|JT|TB|SL|DL|HG|SH|YB|SY|GA|QB|WS|JC|NB|CECS|ISO|IEC|IEEE|API|RFC|DB\d*|T\/[A-Z]+)[/T]{0,2}\s?\d/iu,reason:"规范编号"},{re:/^(?:19|20)\d{2}\s*年$/u,reason:"法规年代"},{re:/^E\d{12,}$/u,reason:"招标项目编号"}],ak=/(?:劳动力|人力|用工|工人|民工|工种|普工|技工|管理人员|作业人员|人数|保勤|人员|班组|峰值|高峰|机械|机具|设备|车辆|台班|挖掘机|装载机|自卸|搅拌|塔吊|吊车|起重机|进度|工期|日历天|节点|阶段|开工|竣工|进场|退场|保养|维修|周转|材料|物资|水泥|砂石|碎石|钢筋|钢管|钢材|管材|灯具|路灯|电缆|光缆|通信|线缆|配线|配管|双绞|JDG|SC管|PC管|电源|电压|配电箱|照明|工作站|服务器|存储|工具|角磨|垫板|苗木|绿植|种植|养护期|保修|储备|堆放|供应|工程量|桩号|里程|K\d|管网|管道|胸径|地径|冠幅|冠丛|蓬径|工长|负责人|施工员|完成率|计划|拆除|人行道|侧石|缘石|杆件|砖基础|圈梁|构造柱|矩形柱|矩形梁|基础梁|过梁|有梁板|天沟|挑檐|雨篷|楼梯|散水|坡道|块料|墙面|吊顶|砌体|砖墙|多孔砖|实心砖|金属门|木质门|金属窗|百叶窗|百页窗|门窗|扶手|栏杆|桥架|管道基础|包管|压顶|独立基础|墙基|防潮层|给水|排水|空调|公厕|停车场|零星)/u,al=/(?:混凝土|砼|砂浆|强度|等级|标号|配合比|坍落度|水灰比|掺量|养护|浇筑|振捣|模板|支架|脚手架|搭接|锚固|保护层|垫层|找平|找坡|坡度|防水|涂膜|卷材|闭水|蓄水|淋水|回填|夯实|压实|分层|虚铺|沟槽|基槽|基坑|边坡|标高|高程|厚度|间距|埋深|覆土|管径|PPR|冷水管|井室|抹灰|腻子|涂料|面层|基层|安装|提升泵|扬程|焊接|法兰|试压|冲洗|消毒|调试|接地|防雷|避雷|绝缘|电阻|验收|检验|检测|试验|取样|频率|焊缝|防腐|除锈|开挖|平整|清底|预留|土方|路床|碾压|摊铺|温度|降雨|雨量|接头|管枕|接口|承插|热熔|连接|封堵|距地|挂墙|挂装|嵌墙|暗配|明配|暗装|敷设|过桥|随桥|排管|人孔|通棒|内径|管孔|垂直度|偏差|漏风|通风|壁厚|接缝|遍数|密植|分叉|栽植|浇灌|试运转|严密性|渗水|牌号|材质|分辨率|图像|稳压|压力降|风速|纵距|横距|步距|立杆|连墙件|支撑卡|施工现场|场区|硬化|围挡|反光|封闭段|渣土)/u;function am(a,b,c,d=16){let e=Math.max(0,b-d),f=Math.min(a.length,b+c+d);for(;e>0&&/[\d.]/u.test(a[e-1]??"");)e-=1;for(;f<a.length&&/[\d.]/u.test(a[f]??"");)f+=1;return a.slice(e,f)}function an(a,b,c,d,e){if(0===e.length)return null;let f=/^[\d,,.]+(.*)$/u.exec(c)?.[1]?.trim()??"",g=am(a,b,c.length,40).replace(/\s+/gu," ");return(0,ai.j9)({total:Number(d),unit:f,context:g,values:e})}let ao=/(?:(?<![\d.])\d+\s*(?:座|辆|根|处|盏|株|道|孔|眼|樘|d(?![A-Za-z0-9]))|\d+(?:\.\d+)?\s*(?:%|℃|人日|工日)|(?:DN|Φ|φ|HRB|HPB)\s*\d+(?:\.\d+)?)/gu;function ap(a,b,c=0){for(let d=a.indexOf(b,c);d>=0;d=a.indexOf(b,d+1)){let c=a.charAt(d-1),e=a.charAt(d+b.length);if(!/[\d.]/u.test(c)&&!/[\dA-Za-z]/u.test(e))return d}return -1}function aq(a){let b=[];for(let c of(0,ag.IV)(a).entries){for(let a of("number"==typeof c.value&&Number.isFinite(c.value)&&b.push({name:c.label,value:c.value,unit:c.unit,kind:"entry"}),c.groups??[]))Number.isFinite(a.value)&&b.push({name:c.label,value:a.value,unit:c.unit,kind:"group"});for(let a of c.specBreakdown??[])Number.isFinite(a.value)&&b.push({name:c.label,value:a.value,unit:c.unit,kind:"split"})}return b}function ar(a){let b=a.match(/\d+(?:\.\d+)?/u);return b?b[0]:a.trim()}function as(a){return ak.test(a)?"derivation-gap":al.test(a)?"process-gap":"unattributed"}function at(a){return a.after<=0?"success":a.rolledBack?"failed":"number"==typeof a.before&&Number.isFinite(a.before)?a.after<a.before?"partial":"failed":a.repaired?"partial":"failed"}async function au(a){let b=a.beforeMetrics?.map(Number)??(await a.recheck(a.originalContent)).map(Number),c=await a.apply();if(c===a.originalContent)return{content:a.originalContent,rolledBack:!1,beforeMetrics:b,afterMetrics:b};let d=(await a.recheck(c)).map(Number);return(a.shouldRollback??function(a,b){return b.some((b,c)=>b>a[c])})(b,d)?(!function(a,b){if(!a)return;let c=a.llm.patchGuardStats??(a.llm.patchGuardStats={}),d=c[b]??(c[b]={hits:0,rejects:0,rollbacks:0});d.rollbacks=(d.rollbacks??0)+1}(a.diagnostics,a.repairRound),{content:a.originalContent,rolledBack:!0,beforeMetrics:b,afterMetrics:d}):{content:c,rolledBack:!1,beforeMetrics:b,afterMetrics:d}}let av=/(?:\d+(?:\.\d+)?\s*(?:mm|cm|m2|m3|m³|m²|㎡|平方米|m|km|kg|g|t|K|L|ml|MPa|kPa|kN|N|℃|%|台|套|座|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元|W|kW|kV|V|A|Hz|米|处|道|根|盏|株|标段|层|樘|孔|眼|间|户|栋|幢|d)(?![\w\u00B2\u00B3])|DN\s*\d+|Φ\s*\d+(?:\.\d+)?|φ\s*\d+(?:\.\d+)?|C\d{2,}|HRB\d+|HPB\d+)/giu;function aw(a){return a.replace(/\s+/gu,"").toLowerCase()}function ax(a){return[...new Set((a.match(av)||[]).map(aw))]}function ay(a){let b=new Set;for(let c of a.allEvidence)if(c.content)for(let a of ax((0,h.eE)(c.content)))b.add(a);let c=a.input.billFactLock;if(c)for(let a of c.entries){for(let c of ax(`${a.name} ${a.description} ${a.quantity}${a.unit}`))b.add(c);for(let c of(0,v.L4)(a.description))b.add(aw(c));for(let c of a.specQuantityPairs)for(let a of(b.add(aw(c.spec)),ax(c.quantity)))b.add(a)}let d=a.input.blueprintData?.quantities;if(d)for(let[a,c]of Object.entries(d)){for(let a of("number"==typeof c.value&&Number.isFinite(c.value)&&b.add(aw(`${c.value}${c.unit||""}`)),c.specBreakdown??[]))"number"==typeof a.value&&Number.isFinite(a.value)&&b.add(aw(`${a.value}${c.unit||""}`));for(let c of ax(a))b.add(c)}for(let c of[...a.structuredFacts||[],...a.factsModel?.preciseFacts||[]])for(let a of ax((0,f.lG)(c.value)))b.add(a);for(let c of a.factsModel?.tables||[])for(let a of c.rows||[]){if(!Array.isArray(a)||0===a.length)continue;let c=a.map(a=>String(a??"").trim());for(let a of ax(c.join(" ")))b.add(a);let d=[...new Set(c.filter(a=>y.bX.test(a)))];if(0===d.length)continue;let e=[...new Set(c.filter(a=>y.CE.test(a)))];for(let a of d)for(let c of e)for(let d of ax(`${a}${c}`))b.add(d)}return b}async function az(a){let b=ay(a);if(0===b.size)return;let c=a.blueprintData?aq(a.blueprintData):[],d=function(a){let b=new Map;if(!a)return b;for(let c of[...a.derivationGaps,...a.processGaps]){let a=c.closureCandidates??[];if(0===a.length)continue;let d=aw(c.token);b.has(d)||b.set(d,`${a.join(" + ")} = ${c.token.replace(/\s+/gu,"")}`)}return b}(a.authorityAuditReport),e=a=>{let d=[];for(let e of a.split(/[。;;!!??\n]/u).map(a=>a.trim()).filter(Boolean).filter(a=>!a.startsWith("#")&&(a.match(av)??[]).length>0).map(a=>a.slice(0,160))){if(function(a){if(/高温|防暑|危大|专家论证|超过一定规模|40℃|37℃|35℃/u.test(a)||/第\s*\d+\s*(天|周|月|日|层|道|步|轮|批)/u.test(a))return!0;let b=a.match(av)||[];return!!(b.length>0&&b.every(a=>/%$/u.test(a.trim()))&&/完成|进度|利用率|合格率|优良率|评标|得分|负荷/u.test(a)||b.every(a=>/^20\d{2}/u.test(a))&&/年/u.test(a)&&!/月|日/u.test(a))}(e))continue;let a=ax(e);if(0===a.length||a.every(a=>b.has(a)))continue;let f=a.filter(a=>!b.has(a)&&"unsourced"===(0,y.eS)({token:a,context:e}).kind),g=function(a,b,c){let d=new Set;if(0===c.length)return d;for(let e of b){let b=a.indexOf(e);if(b<0)continue;let f=a.slice(Math.max(0,b-24),b).replace(/\s+/gu," ");if(!ai.FW.test(f))continue;let g=/\d+(?:\.\d+)?/u.exec(e);if(!g)continue;let h=/^[\d,,.]+(.*)$/u.exec(e)?.[1]?.trim()??"",i=am(a,b,e.length,40).replace(/\s+/gu," ");(0,ai.j9)({total:Number(g[0]),unit:h,context:i,values:c})&&d.add(e)}return d}(e,f,c),h=f.filter(a=>!g.has(a));h.length>0&&d.push({sentence:e,tokens:h})}return d},f=new Map;for(let b of a.finalChapterDrafts){let a=e(b.content);a.length>0&&f.set(b.id,a)}let h=[...f.values()].reduce((a,b)=>a+b.length,0);if(0===h){let c=(0,j.X5)({type:"validation",roleId:"numeric-verification",status:"success",message:"正文数值确定性核对通过:全部正文数值均在资料原文/清单事实锁/蓝图参数桶中找到同值来源",details:[`数值权威库规模:${b.size} 个归一化 token`]},{subtitle:"数值确定性核对"});(0,j.fx)(a.progressStages,c),(0,j.fx)(a.finalGateRepairStages,c),a.emitProgress(a.finalChapterDrafts,a.progressStages);return}let i=0,k=0;for(let[b,c]of f){let f=a.finalChapterDrafts.findIndex(a=>a.id===b);if(f<0)continue;let h=a.finalChapterDrafts[f],l=h.content,m=c,n=e(l).length,o=0,p=!1,q=!1,r=[n];for(;m.length>0&&o<2;){o+=1;let c=(0,j.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:"running",message:`正文数值核对发现 ${m.length} 处疑似无来源数值,第 ${o} 轮定向修复中:${h.title}`,details:m.map(a=>`疑似:${a.sentence}(缺来源 token:${a.tokens.join("、")})`)},{subtitle:"数值确定性核对"});(0,j.fx)(a.progressStages,c),(0,j.fx)(a.finalGateRepairStages,c),a.emitProgress(a.finalChapterDrafts,a.progressStages);let i=m.flatMap(a=>a.tokens.map(a=>({token:a,hint:d.get(aw(a))}))).filter(a=>!!a.hint),k=["【正文数值定向核对修复】",...o>1?[`本轮为第 ${o} 轮(最多 2 轮):上一轮修复后仍有残留,无法确认来源的数值必须直接删除,禁止保留或替换为其他无来源数值。`]:[],"下列句子中的数值(标注「缺来源 token」)在项目绑定材料、工程量清单与蓝图中均找不到同值来源,属于疑似编造数值。请逐句核对并修复:","1. 若该数值在本章绑定证据中确实存在(仅表述口径不同),保持数值原样,只修正单位或表述;","2. 若该数值确属规范/标准常数(如试块留置、养护龄期、检测频次),保留数值并显性标注规范名称与编号(如「按《混凝土结构工程施工质量验收规范》GB 50204 规定,每100m\xb3留置一组试块」)——显性标注后即视为已溯源;",...i.length>0?["3. 若该数值已给出「具名分项和候选」(该值恰为若干具名权威分项之和),说明它是写手对权威分项的自算合计,**不得删除**:按分项显式还原为「分项名 数值+单位、…,合计 数值+单位」的分解表述(分项值必须取候选值原样,禁止改动候选数值),还原后即为可溯源的合法合计;"]:[],`${i.length>0?"4":"3"}. 其余情况必须删除该数值,改写为不带具体数值的过程控制表述(如「按设计要求」「分层碾压至压实度满足设计及规范要求」);`,"禁止把疑似数值替换为另一个同样无来源的数值;禁止改动句子的非数值部分;只做局部修改,不得新增、删除或合并小节。",m.map(a=>`- 疑似句:${a.sentence}(缺来源 token:${a.tokens.join("、")})`).join("\n"),...i.length>0?["具名分项和候选(按第 3 条还原分解,不得删除):",...i.map(a=>`- ${a.token.replace(/\s+/gu,"")}:${a.hint}`)]:[]].join("\n"),s=await au({originalContent:l,repairRound:"numeric-verification",diagnostics:a.generationDiagnostics,apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:h.id,title:h.title,content:l,evidence:h.evidence,missingFacts:h.missingFacts,sections:h.sections},issues:m.map(a=>`疑似无来源数值:${a.sentence}(token:${a.tokens.join("、")})`),promptTexts:k,requirement:a.requirement,forbidDrawingImages:!1,bidComposition:a.bidComposition,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("numeric-verification",a.generationDiagnostics)}));return b.content&&b.content!==l?b.content:l},recheck:a=>[e(a).length]});s.rolledBack||s.content===l||(l=s.content,a.finalChapterDrafts[f]={...h,content:l},p=!0),s.rolledBack&&(q=!0);let t=e(l).length;if(r.push(t),0===t||t>=n||o>=2)break;n=t,m=e(l).slice(0,12)}p&&(i+=1);let s=e(l).length;k+=s;let t=(0,j.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:at({before:c.length,after:s,repaired:p,rolledBack:q}),message:0===s?`数值核对修复完成:${h.title}(${c.length} 处疑似数值已处理,残留轨迹 ${r.join("→")})`:p?`数值核对修复部分生效:${h.title}(疑似数值残留轨迹 ${r.join("→")},已执行 ${o} 轮定向修复(每章最多 2 轮);残留项以 warning 记录,不阻断交付)`:q?`数值核对修复已回滚:${h.title}(修复后疑似数值增多,保留修复前正文;残留 ${s} 处以 warning 记录,不阻断交付)`:`数值核对修复未生效:${h.title}(模型未产生有效修改;残留 ${s} 处以 warning 记录,不阻断交付)`,details:[...c.map(a=>`疑似:${a.sentence}`),s>0?`已执行 ${o} 轮定向修复,残留项以 warning 记录,不阻断交付`:""]},{subtitle:"数值确定性核对"});(0,j.fx)(a.progressStages,t),(0,j.fx)(a.finalGateRepairStages,t),a.emitProgress(a.finalChapterDrafts,a.progressStages)}i>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.generationDiagnostics.llm.lastInfo=`正文数值确定性核对:权威库 ${b.size} token,${h} 处疑似无来源数值,${i} 章完成定向修复,残留 ${k} 处(每章最多 2 轮收敛修复,未收敛残留以 warning 记录,不阻断交付)`}var aA=c(40693);function aB(a){return[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].flatMap(a=>{let b=(0,w.K3)(`${a.fieldName||a.key} ${(0,f.lG)(a.value)}`),c=(0,w.K3)((0,f.lG)(a.value));return c&&c!==b?[b,c]:[b]}).join("\n")}function aC(a,b){let c=[{label:"工期",corpus:aB({...b,project:[],quality:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/工期|日历天|合同工期|计划工期/u},{label:"质量",corpus:aB({...b,project:[],schedule:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/质量目标|质量标准|验收|复验/u},{label:"安全",corpus:aB({...b,project:[],schedule:[],quality:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/安全|文明|风险|应急/u},{label:"资源",corpus:aB({...b,project:[],schedule:[],quality:[],safety:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/资源|材料|设备|劳动力/u},{label:"工程量",corpus:aB({...b,project:[],schedule:[],quality:[],safety:[],resources:[],preciseFacts:[],drawings:[],rules:[],specifications:[]}),required:/工程量|清单|建筑面积|长度|吨|台|套|项/u}],d=(0,w.K3)(a.replace(/\s+/gu,"")),e=[b.project,b.schedule,b.quality,b.safety,b.resources,b.preciseFacts,b.bills,b.drawings,b.rules,b.specifications].every(a=>0===a.length),f=[];for(let b of c){if(!b.required.test(a))continue;let c=[...new Set(b.corpus.split("\n").map(a=>a.replace(/\s+/gu,"")).filter(Boolean))];(0!==c.length||e)&&0===c.filter(a=>!(a.length<6)&&(!!(d.includes(a.slice(0,24))||a.length>24&&d.includes(a.slice(0,12)))||(a.match(/\d+(?:\.\d+)?(?:m2|hm2|m3|l|ml|mm|cm|km|m|kg|g|t|万元|亿元|元|天|工作天|月|年|h|min|%|permille|mpa|kpa|pa|kn|kw|mw|w|kv|v|ma|a|hz|℃|台|套|件|个|根|只|组|项|处|座|栋|层|间|批|次|人|工日|人日|亩)/gu)||[]).some(a=>a.length>=3&&d.includes(a)))).length&&f.push({level:"warning",message:`证据使用覆盖率偏低:正文中未明显使用${b.label}相关事实`,suggestion:`请在相应章节中引用至少一项${b.label}事实,避免只写通用表述。`})}return f}async function aD(a,b){let c=a.split(/\n\s*\n/gu).map(a=>a.trim()).filter(Boolean),d=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理|统筹推进|全面落实)/gu,e=[];for(let a of c){if(120>(0,i.V7)(a)||(a.match(d)||[]).length<2)continue;let c=await b.analyze(a);c&&(c.concrete||e.push({level:"warning",message:`段落存在空泛表述:${a.slice(0,48)}...`,suggestion:"请补充该段对应的对象、动作、控制点或验收闭环,避免只保留管理性套话。"}))}return e}function aE(a,b){let c=[];if(!b)return c;let d=a.map(a=>`${a.title}
|
|
150
150
|
${a.content}`).join("\n\n");if(/进度|工期/u.test(d)&&/资源|材料|设备|劳动力/u.test(d)){let d=a.find(a=>/资源|材料|设备|劳动力/u.test(a.title)),e=d?b.get(d.title):void 0;e?.contentNeeds.resource||c.push({level:"warning",message:"章节逻辑依赖不足:进度章节与资源章节之间缺少明显支撑关系",suggestion:"请在资源章节补充与工期目标相匹配的劳动力、材料、设备投入和调配计划。"})}return/质量/u.test(d)&&/施工|工艺|技术/u.test(d)&&(a.some(a=>b.get(a.title)?.contentNeeds.quality||b.get(a.title)?.contentNeeds.construction)||c.push({level:"warning",message:"章节逻辑依赖不足:质量章节未明显支撑施工工艺控制",suggestion:"请在施工技术和质量章节之间补齐工艺控制点、验收要求和整改复验闭环。"})),/安全|文明|风险/u.test(d)&&(a.some(a=>b.get(a.title)?.contentNeeds.safety)||c.push({level:"warning",message:"章节逻辑依赖不足:安全章节缺少检查整改和应急支撑",suggestion:"请补齐风险识别、检查整改、应急响应和演练闭环。"})),c}var aF=c(35547),aG=c(31920);let aH=/安全|文明|质量|绿色施工|环保|扬尘|消防|应急|危大|风险|规范|标准|管理要求|施工工艺|技术措施|验收/u,aI=/项目名称|工程名称|建设地点|建设单位|招标人|发包人|建设规模|招标范围|合同工期|计划工期|质量标准|危大工程清单|工程量|材料规格|设备型号|图纸参数|报价|单价|利润|税率|合同金额|联系方式|品牌/u,aJ=/报价|单价|合价|金额|利润|税率|增值税|招标控制价|最高投标限价|中标价|合同价|暂列金额/u,aK=/联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/u,aL=["项目名称","工程名称","建设地点","建设单位","招标人","发包人","建设规模","招标范围","合同工期","计划工期","工程量","报价","单价"];function aM(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,'"').replace(/'/gu,"'").replace(/<[^>]+>/gu,"").replace(/\s+/gu," ").trim()}async function aN(a,b,c,d,e){let f=`https://duckduckgo.com/html/?q=${encodeURIComponent(a)}`,g=new AbortController,h=setTimeout(()=>g.abort(),8e3),i=()=>g.abort();e?.addEventListener("abort",i,{once:!0});let j=await fetch(f,{headers:{"User-Agent":"Mozilla/5.0 compatible; customize-agent web research"},signal:g.signal}).finally(()=>{clearTimeout(h),e?.removeEventListener("abort",i)});return j.ok?[...(await j.text()).matchAll(/<a[^>]+class="result__a"[^>]+href="([^"]+)"[^>]*>([\s\S]*?)<\/a>[\s\S]*?<a[^>]+class="result__snippet"[^>]*>([\s\S]*?)<\/a>/giu)].map(a=>{let b=aM(a[1]||""),c=aM(a[2]||""),d=aM(a[3]||""),e=/uddg=([^&]+)/u.exec(b)?.[1];return{url:e?decodeURIComponent(e):b,title:c,snippet:d}}).filter(a=>{let b=`${a.title} ${a.snippet} ${a.url}`;return!(!a.url||!a.snippet||aI.test(b)||aJ.test(b)||aK.test(b)||d.some(a=>a&&b.includes(a)))&&(0===c.length||c.some(b=>a.url.includes(b)))}).slice(0,b):[]}async function aO(a){if(!a.config.enabled||!function(a,b){let c=`${a} ${b.join(" ")}`;return!(!aH.test(c)||/项目概况|工程概况|建设地点|建设规模|招标范围|工程量|报价|造价/u.test(c)&&!/安全|文明|质量|危大|环保|工艺|措施/u.test(c))}(a.chapterTitle,a.sectionTitles))return{evidence:[],queries:[],filtered:0,failedQueries:0,failures:[]};let b=function(a,b,c){let d=`${a} ${b.join(" ")}`,e=[/危大/u.test(d)?"危大工程 专项施工方案 管理规定 安全措施":"",/安全|文明/u.test(d)?"建筑工程 安全文明施工 管理要求":"",/质量|验收/u.test(d)?"建筑工程 质量控制 质量验收 通用要求":"",/扬尘|环保|绿色/u.test(d)?"施工现场 扬尘治理 绿色施工 环保要求":"",/消防|应急/u.test(d)?"施工现场 消防 应急管理 要求":"",/工艺|技术措施/u.test(d)?"建筑工程 施工工艺 技术措施 通用要求":""].filter(Boolean),f=`${a.replace(aI,"")} 公开规范 通用要求`.trim();return[...new Set(e.length?e:[f])].slice(0,c)}(a.chapterTitle,a.sectionTitles,a.config.maxQueriesPerChapter),c=[],d=0,e=0,f=[];for(let g of b)try{for(let b of(await aN(g,a.config.maxResultsPerQuery,a.config.trustedDomains,a.runtimeRules.forbiddenTerms||[],a.signal))){let e=function(a,b){let c=a;for(let a of aL)c=c.replace(RegExp(`${a}[^。;;
|
|
151
151
|
]{0,80}`,"gu"),"");for(let a of b.map(a=>{var b;return null==(b=a.value)?"":"string"==typeof b||"number"==typeof b||"boolean"==typeof b?String(b).trim():""}).filter(a=>a.length>=3&&a.length<=80))c=c.replace(RegExp(a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"");return c.replace(aJ,"").trim()}(b.snippet,a.localFacts);if(!e||e.length<20){d+=1;continue}c.push({chapterId:a.chapterId,filePath:b.url,score:.42,content:`参考依据:${b.title}
|
|
152
|
-
${e}`,source:function(a){let b=a.toLowerCase();return b.includes(".gov.cn")||b.includes("mohurd")||b.includes("zjt")||a.includes("住建")?"web-policy":"web-evidence"}(b.url),sectionTitle:a.chapterTitle})}}catch(a){e+=1,f.push(`${"string"==typeof g?g:"查询"}:${a instanceof Error?a.message:String(a)}`),console.error("[web-research] 检索查询失败(与「被噪声过滤」分列计数)",a)}return{evidence:c,queries:b,filtered:d,failedQueries:e,failures:f}}var aP=c(65667);let aQ=[{label:"工程名称",factGroups:["project"],patterns:[/工程名称\s*[::]\s*([^\n|]+)/u],locations:"封面、工程概况、页眉页脚、专项方案、表格标题"},{label:"建设地点",factGroups:["project"],patterns:[/建设地点\s*[::]\s*([^\n|]+)/u,/工程地点\s*[::]\s*([^\n|]+)/u],locations:"工程概况、周边环境、扬尘噪声、交通导改、属地化措施"},{label:"总工期",factGroups:["schedule"],patterns:[/总工期\s*[::]\s*([^\n|]+)/u,/计划工期\s*[::]\s*([^\n|]+)/u,/工期目标\s*[::]\s*([^\n|]+)/u],locations:"工程概况、进度计划、横道图、资源计划、纠偏措施"},{label:"建设规模",factGroups:["project","preciseFacts"],patterns:[/建设规模\s*[::]\s*([^|\n]+)/u,/建筑面积\s*[::]\s*([^|\n]+)/u,/道路长度\s*[::]\s*([^|\n]+)/u,/管线长度\s*[::]\s*([^|\n]+)/u],locations:"工程概况、工程量表、施工部署、资源配置"},{label:"机械数量型号",factGroups:["resources"],locations:"机械表、平面布置、进度保障、安全专项方案",kind:"equipment-counts"},{label:"劳动力人数",factGroups:["resources"],patterns:[/劳动力\s*[^\n|]{0,12}(\d+)\s*人/u,/班组\s*[^\n|]{0,12}(\d+)\s*人/u],locations:"劳动力计划、进度节点、抢工方案、工资保障台账"},{label:"危大工程清单",factGroups:["safety","preciseFacts"],patterns:[/危大工程\s*[::]\s*([^\n|]+)/u,/深基坑|高支模|起重吊装|脚手架/u],locations:"安全章节、专项方案、审批表、应急预案"},{label:"环保监测指标",factGroups:["quality","safety","preciseFacts"],patterns:[/PM10|PM2\.5|TSP|噪声|扬尘在线监测/u],locations:"文明施工、扬尘噪声、智慧工地、应急联动"}];function aR(a){return a.replace(/[\s,。;;::|]/gu,"").trim()}let aS=/塔式起重机|履带吊|汽车吊|卷扬机|脚手架|扣件|钢管|模板|噪声|PM2\.5|PM10|TSP|扬尘在线监测|临电|消防|安全网|围挡|洗车台|沉淀池|雾炮/u,aT=/不使用|不采用|不配置|无需|未采用|不得使用|禁止使用/u;function aU(a,b){let c=[];for(let d of b){let b=a[d];if(Array.isArray(b))for(let a of b)a&&"object"==typeof a&&"value"in a&&"string"==typeof a.value&&c.push(a.value)}return c.map(aR).filter(Boolean)}function aV(a,b){return 0===b.length||b.some(b=>b.includes(a)||a.includes(b)||a.length>=4&&b.includes(a.slice(0,4)))}var aW=c(37047),aX=c(63516);let aY=/([\u4e00-\u9fa5A-Za-z0-9()()]{1,12}?)(\d+(?:\.\d+)?)\s*(m²|m³|㎡|mm|cm|m|米|MPa|kN|kV|kW|℃|°C|万元|元|人|天|日|个|层|樘|处|套|台|t|吨)([\u4e00-\u9fa5A-Za-z0-9()()]{0,8})/gu,aZ=["直径","厚度","宽度","长度","高度","深度","间距","距离","标高","偏差","数量","面积","体积","重量","压力","温度","强度","等级","坡度","规格","尺寸","层数","次数","跨度","半径","总长","全长"],a$=["以内","以外","以上","以下","之间","左右","以前","以后","之前","之后"],a_=/^(?:主要|本工程|本项目|全项目)?(?:作业对象|作业内容|施工内容|工作内容|工程内容|施工对象|施工范围|工程规模|建设内容|建设规模)为/u,a0=/^(?:由)?责任[\u4e00-\u9fa5]{0,4}在(?:内)?完成/u,a1=/自然村|村组|标段|区域|点位|养护|地上|地下|建筑高度|[\u4e00-\u9fa5]{1,4}组$/u,a2=/^(?:局部|个别|少数|多数|大部分)/u,a3=["开挖","封闭","回填","浇筑","铺筑","摊铺","供应","编制","提交","签订","安装","养护","试验","拆除","砌筑"],a4=["直径","半径","穴径","胸径","地径","冠幅","厚度","宽度","长度","高度","深度","穴深","间距","距离","标高","坡度","跨度","株距","行距"];function a5(a){return a.replace(/(?:mm|cm|m|MPa|kN|kV|kW|℃|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)/gu,"").replace(/[\s,,、;;::()()]/gu,"")}function a6(a,b){if(/[、/](?:与)?[A-Za-z]?\d/u.test(a))return!0;for(let c of a.matchAll(/[、/](?:与|和|及)?([\p{Script=Han}A-Za-z]{1,8})\d/gu))if(function(a,b){let c=a5(a),d=a5(b);return 0!==c.length&&0!==d.length&&!c.includes(d)&&!d.includes(c)}(c[1]||"",b))return!0;return!1}function a7(a,b){let c=["。",";",";","\n"],d=0;for(let e of c){let c=a.lastIndexOf(e,b-1);c+1>d&&(d=c+1)}let e=a.length;for(let d of c){let c=a.indexOf(d,b);c>=0&&c<e&&(e=c)}return a.slice(d,e)}async function a8(a){let b=function(a){let b=new Map,c=0;for(let d of a.split("\n")){let a=d.trim(),e=c;if(c+=d.length+1,!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let a of d.matchAll(RegExp(aY.source,"gu"))){let c=(a[1]||"").trim(),d=a[2],f=/\d+$/u.exec(c);if(f&&(c=c.slice(0,f.index).trim(),d=`${f[0]}${d}`),/月\s*$/u.test(c))continue;let g=Number(d),h=a[3]||"",i=(a[4]||"").trim(),j=/[与和及][^与和及]{0,12}?\d/u.exec(i),k=j?i.slice(0,j.index):i,l=`${c}${k}`.replace(/[\s,,、;;::]/gu,""),m=l.replace(a_,"").replace(a0,""),n=m.length>=2?m:l;if(n.length<2||!/[\u4e00-\u9fa5A-Za-z]{2,}/u.test(n)||!Number.isFinite(g)||g<=0||aZ.some(a=>n===a||a5(n)===a)||a$.some(a=>a5(n)===a)||a1.test(n)||a2.test(n))continue;let o={matchIndex:e+(a.index||0),valueOffset:function(a,b,c){if(!c)return a.indexOf(b);let d=a.lastIndexOf(c);if(d>=0){let c=d-b.length;if(c>=0&&a.slice(c,d)===b)return c;let e=RegExp(`(${b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")})\\s*$`,"u").exec(a.slice(0,d));if(e&&void 0!==e.index)return e.index}return a.indexOf(b)}(a[0],d,a[3]||""),valueText:d},p=b.get(a[0]);if(p){p.occurrences.push(o);continue}b.set(a[0],{concept:n,value:g,unit:h,raw:a[0],occurrences:[o]})}}return[...b.values()].slice(0,60)}(a);if(b.length<3)return{groups:[]};let c=[...new Set(b.map(a=>a.concept))];if(c.length<2)return{groups:[]};let d=await (0,aW.VN)().embedDocuments(c);if(d.length!==c.length){let a=`本地语义模型嵌入数量不一致:期望 ${c.length} 条,实际 ${d.length} 条`;return console.warn(`[gen] parameter-concept-conflict degraded: ${a}`),{groups:[],degraded:{level:"warning",severity:"warning",category:"format",owner:"system",repairability:"manual_review",message:`参数概念口径冲突检测已降级跳过:${a}`,suggestion:"语义模型输出异常,本轮未执行该检测维度;可稍后重新生成复核。"}}}let e=new Map(c.map((a,b)=>[a,d[b]])),f=function(a,b){let c=new Map(a.map(a=>[a,a])),d=a=>{let b=c.get(a)||a;return b===a?a:(c.set(a,d(b)),c.get(a)||a)},e=(a,b)=>{c.set(d(a),d(b))};for(let c=0;c<a.length;c+=1)for(let d=c+1;d<a.length;d+=1)b(a[c],a[d])>=.6&&e(a[c],a[d]);return c}(c,(a,b)=>{let c=e.get(a),d=e.get(b);if(!c||!d||0===c.length||0===d.length)return 0;let f=Math.min(c.length,d.length),g=0;for(let a=0;a<f;a+=1)g+=c[a]*d[a];return g}),g=a=>{let b=a;for(;(f.get(b)||b)!==b;)b=f.get(b)||b;return b},h=new Map;for(let a of b){let b=g(a.concept),c=h.get(b)||[];c.push(a),h.set(b,c)}let i=[];for(let b of h.values()){if(b.length<2||Math.max(...b.map(a=>a.value))>4*Math.min(...b.map(a=>a.value)))continue;let c=new Map;for(let a of b){let b=c.get(a.unit)||[];b.push(a),c.set(a.unit,b)}for(let b of c.values()){if(b.length<2)continue;let c=new Map;for(let a of b){let b=a4.find(b=>a.raw.includes(b))||"",d=c.get(b)||[];d.push(a),c.set(b,d)}for(let d of[...c.keys()].filter(a=>""!==a).length>=2&&!c.has("")?[...c.values()]:[b]){if(d.length<2)continue;let b=d.map(a=>a3.find(b=>a.raw.includes(b))||"");if(b.length>=2&&b.every(a=>""!==a)&&new Set(b).size===b.length)continue;let c=d.map(a=>/^([\u4e00-\u9fa5]{2,})([一二三四五六七八九十]|\d+)$/u.exec(a.concept)).filter(a=>null!==a);if(c.length===d.length&&c.length>=2&&1===new Set(c.map(a=>a[1])).size&&new Set(c.map(a=>a[2])).size===c.length)continue;let e=d.map(a=>{let b=a.raw.indexOf("按每");return b>=0?a.raw.slice(0,b):null});if(e.every(a=>null!==a)&&!e.some((a,b)=>!!a&&e.some((c,d)=>b!==d&&!!c&&(a===c||a.includes(c)||c.includes(a))))||d.every(b=>b.occurrences.some(c=>/违约金|解除合同|提高至|自第|逾期超过/u.test(a.slice(Math.max(0,c.matchIndex-30),c.matchIndex+b.raw.length+40)))))continue;let f=[...new Set(d.map(a=>a.value))];if(f.length<2)continue;let g=Math.max(...f);if(g-Math.min(...f)<=.02*g)continue;let h=f.reduce((a,b)=>a+b,0);if(![...new Set(d.flatMap(b=>b.occurrences.map(b=>a7(a,b.matchIndex))))].some(b=>/(?:总量|合计|总计|共计)/u.test(b)&&/(?:其中|分别为|分为)/u.test(b)&&d.every(c=>c.occurrences.some(c=>a7(a,c.matchIndex)===b))&&[...b.matchAll(/\d+(?:\.\d+)?/gu)].some(a=>Math.abs(Number(a[0])-h)<=Math.max(.5,.01*h)))&&!(d.filter(b=>b.occurrences.some(c=>{let d=a.slice(c.matchIndex,c.matchIndex+b.raw.length+12),e=a.slice(Math.max(0,c.matchIndex-12),c.matchIndex);return a6(d,b.concept)||a6(e,b.concept)})).length>=2)&&!(d.length>=2&&d.every((a,b)=>d.every((c,d)=>{if(b>=d||a.value===c.value)return!0;let e=a.concept.length<=c.concept.length?a.concept:c.concept,f=a.concept.length<=c.concept.length?c.concept:a.concept;if(e.length>=4&&e.length<f.length&&f.endsWith(e)&&/^[板梁柱墙底顶]/u.test(e))return!0;let g=(0,ah.Qk)(a.concept,c.concept);if(g.length<2)return!1;let h=a.concept.slice(g.start,g.end),i=a.concept.replace(h,""),j=c.concept.replace(h,"");return i.length>0&&j.length>0&&!i.includes(j)&&!j.includes(i)})))&&(i.push({concept:d[0].concept,values:d}),i.length>=4))break}if(i.length>=4)break}if(i.length>=4)break}return{groups:i}}function a9(a){return a.replace(/㎡/gu,"m2").replace(/m²/giu,"m2").replace(/m³/giu,"m3").replace(/\s+/gu,"").toLowerCase()}function ba(a){return a.replace(/[((][^))]*[))]/gu,"").replace(/[\s,,、;;::]/gu,"")}function bb(a,b){let c=b.entries??b.billFactLock?.entries??[];if(0===c.length)return[];let d=Math.max(.01,.001*a.value),e=a9(function(a){let b=a.occurrences[0];if(!b)return a.unit;let c=a.raw.indexOf(b.valueText);return c<0?a.unit:a.raw.slice(c+b.valueText.length)||a.unit}(a)),f=a.occurrences.map(a=>b.markdown.slice(Math.max(0,a.matchIndex-48),a.matchIndex+a.valueOffset+a.valueText.length+48)).join("\n"),g=[];for(let b of c){if(!Number.isFinite(b.quantity)||b.quantity<=0||Math.abs(b.quantity-a.value)>d)continue;let c=a9(b.unit);if(e&&c&&e!==c)continue;let h=function(a,b){let c=ba(a),d=ba(b);if(c.length<2||d.length<2)return!1;if(c===d)return!0;let e=c.length<=d.length?c:d,f=c.length<=d.length?d:c;return e.length>=3&&f.includes(e)}(b.name,a.concept),i=b.villageGroup.trim().length>=2&&f.includes(b.villageGroup.trim());if((h||i)&&(g.push({entry:b,nameRelated:h}),g.length>=8))break}return g}function bc(a,b){if(a.values.length<2)return{verdict:"no-anchor"};let c=b.billFactLock?.entries??[],d=function(a){if(!a)return[];let b=[],c=1,d=(a,d,e,f,g)=>{b.push({seq:c,name:a,description:"",quantity:d,unit:e,section:"",subsection:g,villageGroup:g,sourceFile:f,specQuantityPairs:[]}),c+=1};for(let[b,c]of Object.entries(a)){let a=c.unit||"",e=c.sourceFile||"";for(let f of(Number.isFinite(c.value)&&c.value>0&&d(b,c.value,a,e,""),c.groups||[]))Number.isFinite(f.value)&&!(f.value<=0)&&d(`${b}(${f.group})`,f.value,a,e,f.group)}return b}(b.blueprintQuantities);if(0===c.length&&0===d.length)return{verdict:"no-anchor"};let e=a.values.map(a=>({value:a,matches:bb(a,{markdown:b.markdown,entries:[...c,...d]}),billMatches:bb(a,{markdown:b.markdown,entries:c})}));if(e.every(a=>a.matches.length>0)&&e.every((a,b)=>e.every((c,d)=>b===d||!a.matches.some(a=>c.matches.some(b=>b.entry.seq===a.entry.seq)))))return{verdict:"distinct-lock-entries",entries:e.map(a=>`「${a.matches[0].entry.name}」(${a.value.value}${a.value.unit})`).join("、")};let f=e.filter(a=>a.billMatches.length>0),g=e.filter(a=>0===a.matches.length);if(1===f.length&&g.length>0&&f.length+g.length===e.length){let a=f[0].billMatches.find(a=>a.nameRelated);if(a)return{verdict:"single-lock-entry",lockValue:a.entry.quantity,lockUnit:a.entry.unit,entryName:a.entry.name,nonLock:g.map(a=>a.value)}}return{verdict:"no-anchor"}}async function bd(a,b){let c=await a8(a);if(c.degraded)return[c.degraded];if(0===c.groups.length)return[];let d=[],e=[];for(let f of c.groups){let c=bc(f,{markdown:a,billFactLock:b?.billFactLock,blueprintQuantities:b?.blueprintQuantities});"distinct-lock-entries"===c.verdict?e.push({group:f,entries:c.entries}):d.push(f)}let f=[];if(d.length>0){let a=d.map(a=>`“${a.concept}”出现多个口径:${[...new Set(a.values.map(a=>a.raw))].slice(0,3).join("、")}`);f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`同一参数概念出现多口径数值冲突:${a.join(";")}`,suggestion:"以绑定资料(图纸/清单/规范)裁决口径为准统一数值表述:每个参数概念全文只保留一个口径数值,删除矛盾表述。"})}return e.length>0&&f.push({level:"info",severity:"suggestion",category:"fact_consistency",owner:"system",repairability:"not_repair_needed",message:`参数概念多口径已裁决为不同清单条目口径(不构成冲突):${e.map(({group:a,entries:b})=>`“${a.concept}”对应${b}`).join(";")}`,suggestion:"各数值分别对应不同的工程量清单条目,正文已带条目名区分,无需处理。"}),f}function be(a){return/补疑|补遗|答疑|澄清|更正|修改通知|question|clarif/iu.test(a||"")}let bf=/(\d{1,4})\s*个?\s*日历天/gu,bg=/(20\d{2}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日)/gu,bh=/(?:变更修改为|变更为|澄清为|调整为|更正为|修正为|变更至|调整至)\s*[::]?\s*(\d{1,4})\s*个?\s*日历天/u,bi=/(?:变更修改为|变更为|澄清为|调整为|更正为|修正为|变更至|调整至)\s*[::]?\s*(20\d{2}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日)/u;function bj(a){return`${a.replace(/\s+/gu,"")}日历天`}function bk(a){return a.replace(/\s+/gu,"")}function bl(a){let b=a.filter(a=>a.superseded.length>0);return 0===b.length?"":["【答疑澄清生效口径(硬约束)】招标文件与答疑/澄清文件不一致时,以下为**现行唯一口径**,全文(含进度计划、节点、信息表、正文表述)必须一致使用;被取代的旧值仅在引用澄清原文时可出现,不得作为现行表述:",...b.map(a=>`- ${a.field}:现行为「${a.effective}」;已被取代(不得再作为现行口径):${a.superseded.join("、")}`)].join("\n")}let bm=/(?:澄清|变更|修改|调整为|更正|原(?:为|值)?|原招标|此前)/u,bn="clarification-amendment",bo=/(?:\d|±)/u,bp=/(?:采用|按|执行|为准|不得|应|必须|相当于|统一|计入)/u,bq=/±\s?\d|\d+\s*[*x×]\s*\d+|\d+\s*[::]\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|km|m2|m3|㎡|kg|t|mpa|kpa|kn|mw|kw|kva|kv|v|a|w|pa)|dn\d+/iu;function br(a){return bq.test(a)?0:bI.test(a)?2:1}let bs=/(?:答|回复|答复|回\s*答)\s*[::]/gu,bt=/(?:^|[\n。;;!])\s*(?:#{1,4}\s*)?(?:\d{1,3}\s*[、..))]|问\s*[::]|问题\s*\d{0,2}\s*[::]?)/u,bu=/\d{1,3}\s*(?:[、))]|[..](?!\d))/gu,bv=/[。;;,,\n]/u;function bw(a){return String(a||"").replace(/\s+/gu," ").replace(/^(?:#{1,4}|[-*])\s*/u,"").trim()}function bx(a,b){let c=a.lastIndexOf("\n",Math.max(0,b-1))+1,d=a.indexOf("\n",b);return{start:c,end:-1===d?a.length:d}}function by(a){let b=bw(a),c=Math.max(b.lastIndexOf("?"),b.lastIndexOf("?"));if(c<0)return b;let d=[...b.slice(0,c)].reverse().join(""),e=bv.exec(d),f=e?.index===void 0?c:c-e.index-1;return(f>0?b.slice(0,f+1):b.slice(0,c)).trim()}let bz=RegExp(`${z.yJ}|均改为|全部改为|统一改为|一律改为|改成|改为|暂按|暂定按`,"u"),bA=/(?:不涉及|不需要|不需|无需|不用|不做|不再|取消|去除|删除|不予)/u,bB=/(?:不涉及|取消|去除|删除)/u,bC=/(?:按|依据|参照)[^,。;]{2,40}?(?:执行|实施|施工|计入|做法|说明|要求|考虑)|以[^,。;]{2,24}?为(?:准|分界(?:线|点)?|依据|界限|原则)|^采用[^,。;]{2,40}$/u,bD=/^(?:是|是的|对|对的|可以|可行|可采用|可|需要|需|要|必须|应|应该|均需|均要|均按|同意|确认|有|会)[。!]?$/u,bE=/^(?:无误|正确|无异议|没问题|没有问题|符合)[。!]?$/u,bF=/(?:是否|要不要|需不需要|够不够|能不能|可不可以|可否|能否|多少|多大|多高|多厚|多久|何种|哪些|如何|怎么|为何|为什么|有无|未见|未明确|请明确|请确认|规格|型号|尺寸|材质|做法|要求|标准|标号|强度等级|数量|高度|厚度|宽度|长度|标高|管径|参数|品牌)/u,bG=/^(?:见|详见|参见|参照|参图|详|按图|依图|如图|附图|不在此次|不在本次|不在|无(?:专项)?图)/u,bH=/(?:详见|参见|参照|图集|图号|大样|建施|结施|SW\s*\d|S\s*\d{2}|04S516)/u,bI=/(?:费用|报价|清单|投标人|中标|结算|不予调整|工期|日历天|万元|亿元|元)/u,bJ=/(?:\d|[一二三四五六七八九十两])\s*(?:道|遍|层|次|个|座|套|台|根|块|处|项|只|组|片|扇|樘|米|厚|mm|cm|km|m|㎡|m2|m3|吨|t|kg|kw|kv|kva|v|a|w|j|pa|mpa)/iu,bK=/^(?:(?:是否|请问|请明确|请确认|请设计确认|明确|[而但且并则即故均皆也都又于此该项上述以上其中另另外再需需要应必须全部整体为是])+)/u,bL=/(?:是否|要不要|需不需要|为何|如何|怎么|多少|多大|哪些|需|需要|要|应|应该|必须|可否|能否|全部|均|皆|的)+$/u;function bM(a){let b=String(a||"");return/\d/u.test(b)||bJ.test(b)||"text"!==(0,z.dm)(b)?"strong":"weak"}function bN(a){return String(a||"").split(/[??]/u)[0].replace(bK,"").replace(bL,"").replace(/[??。!!,,、;;::\s]+$/u,"").trim().slice(0,40)}function bO(a){return(function(a){let b=String(a||"").split(/[,,]/u).map(a=>a.trim()).filter(Boolean),c=b.findIndex((a,b)=>b>=1&&bI.test(a));return(c>0?b.slice(0,c):b).join(",")})(String(a||"").split(/[??]/u)[0]).replace(/^[,,、。;;::\s]+/u,"").replace(/^(?:是的|是|对|对的|可以|可行|需要的?|需要)[,,、]+/u,"").replace(/[??。;;!!]+$/u,"").replace(/(?:再|重新)?(?:喷涂|涂刷|刷|做|施工|采用|设置|进行|安装|铺设|设置)+$/u,"").replace(/(?:是否|需不需要|需要|需|应|应该|必须|均|皆|要|可行|可以|吗|呢|吧)+$/u,"").trim().slice(0,60)}function bP(a){return String(a||"").split(/[。;;,,??\n]/u).map(a=>a.trim()).filter(Boolean)}function bQ(a){let b=[];for(let c of bP(a)){let a=/^(.*?)(?:均为|皆为|采用|为|按|用|做)(.+)$/u.exec(c);if(!a)continue;let d=bN(a[1]||""),e=bO((a[2]||"").replace(/^(?:何|为何|如何|怎么)?(?:均为|皆为|采用|为|做|用|按)/u,""));!(d.length<2)&&!(e.length<2)&&!(e.length>24)&&(bI.test(e)||bH.test(e)||b.push({object:d,complement:e}))}return b}function bR(a){return{text:a,strength:bM(a)}}function bS(a){let b=a.before[0]?.text;return"cancel"===a.kind?`- ${a.object}:${a.after}${b?`——修正前形态「${b}」不得再作为现行做法`:"——不得再作为现行做法"}`:"replace"===a.kind&&b?`- ${a.object}:修正后「${a.after}」;修正前「${b}」为被取代形态,不得作为现行做法`:`- ${a.object}:${a.after}`}let bT=(0,p.eA)("未标注来源的资料"),bU=/(?:不采用|不设置|不设|不需要|不需|无需|不予|不再|不做|不考虑|不进行|不涉及|取消)/u,bV=["电梯","幕墙","智能化","消防","暖通","给排水","电气","燃气","人防","室外","园林","绿化","景观","钢结构","防水","保温","门窗","通风","空调","防雷","接地","动力","照明","拆除","加固","装修","装饰"];var bW=c(68977);let bX=(a,b)=>{let c=b.exec(a);if(!c)return;let d=Number(c[1]);return Number.isFinite(d)&&d>0?d:void 0},bY=[{name:"基坑支护与降水工程",aliases:["基坑支护","基坑工程","降排水","降水井"],applicable:a=>{let b=bX(a,/(?:基坑)?开挖深度[约为达至]{0,3}(\d+(?:\.\d+)?)\s*m/u);return void 0!==b&&b>=(bW.gQ.基坑工程.hazardous[0].value??3)}},{name:"高大模板支撑工程",aliases:["高大模板","高支模","模板支撑体系","模板支撑"],applicable:a=>{let b=bX(a,/(?:模板)?支撑(?:体系)?(?:搭设)?高度[约为达至]{0,3}(\d+(?:\.\d+)?)\s*m/u),c=bX(a,/(?:施工(?:总)?荷载|集中线荷载)[约为达至]{0,3}(\d+(?:\.\d+)?)\s*kN/u);return void 0!==b&&b>=(bW.gQ.模板工程及支撑体系.hazardous[0].value??5)||void 0!==c&&c>=15||/高支模|高大模板/u.test(a)}},{name:"脚手架工程",aliases:["脚手架","落地式钢管脚手架","悬挑式脚手架","悬挑脚手架"],applicable:a=>{let b=bX(a,/(?:落地式|悬挑式)?(?:钢管)?脚手架(?:搭设)?高度[约为达至]{0,3}(\d+(?:\.\d+)?)\s*m/u);return void 0!==b&&b>=(bW.gQ.脚手架工程.hazardous[0].value??24)||/悬挑(?:式)?脚手架/u.test(a)}},{name:"起重吊装及安装拆卸工程",aliases:["起重吊装","塔吊","塔式起重机","汽车吊","履带吊","起重机械安拆","物料提升机","提升机","起重机械","吊装"],applicable:a=>!!/塔吊|塔式起重机|汽车吊|履带吊|吊车|起重机械|起重设备|起重机|卷扬机|物料提升机|提升机|电动葫芦/u.test(a)||/起重伤害|非常规起重|起吊重量|吊装重量|吊装荷载/u.test(a)&&!/(?:不涉及|不存在|不属于|未涉及)[^。;\u000A]{0,16}危大|(?:不涉及|不存在|不属于|未涉及)[^。;\u000A]{0,16}危险性较大|(?:参数|高度|深度)[^。;\u000A]{0,12}未达[^。;\u000A]{0,60}危大/u.test(a)},{name:"吊篮作业工程",aliases:["吊篮","高处作业吊篮","电动吊篮"],applicable:a=>/吊篮/u.test(a)},{name:"拆除工程",aliases:["拆除工程","爆破拆除","机械拆除"],applicable:a=>/拆除工程(?![量])|爆破拆除/u.test(a)}];function bZ(a){let b=a.split(/\r?\n/u),c=[];return b.forEach((a,d)=>{/危大/u.test(a)&&c.push(...b.slice(Math.max(0,d-6),Math.min(b.length,d+7)))}),c.join("\n")}function b$(a){let b=bY.filter(b=>b.applicable(a)),c=bZ(a);return{applicableNames:b.map(a=>a.name),zonePresent:""!==c,missingNames:""===c?b.map(a=>a.name):b.filter(a=>!a.aliases.some(a=>c.includes(a))).map(a=>a.name)}}function b_(a,b){let c=bZ(a);return b.filter(a=>{let b=bY.find(b=>b.name===a);return!!b&&!b.aliases.some(a=>c.includes(a))})}let b0=/[二三四五六七八九十\d]{1,4}\s*个?\s*阶段/u,b1={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};function b2(a){return/(\d+|[一二三四五六七八九十]+)\s*个?\s*阶段/u.exec(a)?.[1]??null}function b3(a){let b=a.map(b2).filter(a=>null!==a).map(a=>/^\d+$/u.test(a)?parseInt(a,10):/^[一二三四五六七八九十]+$/u.test(a)?"十"===a?10:1===a.length?b1[a]??null:a.startsWith("十")?10+(b1[a[1]]??0):a.endsWith("十")?(b1[a[0]]??0)*10:(b1[a[0]]??0)*10+(b1[a[2]]??0):null).filter(a=>null!==a);return 0===b.length?null:1===new Set(b).size?b[0]:null}async function b4(a){let b=[...new Set(a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\|)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.replace(/\s+/gu,"").trim()).filter(a=>{var b;if(a.length<8||a.length>60)return!1;let c=b0.exec(a);return null!==c&&(b=c.index,!/[、,,]/u.test(a.slice(Math.max(0,b-12),b)))}))];if(b.length<2)return[];let c=await (0,aW.Mv)(b,b),d=b.map((a,b)=>b),e=a=>{let b=a;for(;d[b]!==b;)b=d[b];let c=a;for(;d[c]!==b;){let a=d[c];d[c]=b,c=a}return b},f=(a,b)=>{d[e(b)]=e(a)};for(let a=0;a<b.length;a+=1)for(let d=a+1;d<b.length;d+=1)c(b[a],b[d])>=.62&&f(a,d);let g=new Map;for(let a=0;a<b.length;a+=1){let c=e(a),d=g.get(c)||[];d.push(b[a]),g.set(c,d)}if(g.size<2||new Set([...g.values()].map(b3).filter(a=>null!==a)).size<2)return[];let h=[...g.values()].map(a=>a.sort((a,b)=>b.length-a.length)[0]).slice(0,4);return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`施工阶段划分口径不统一:正文出现 ${g.size} 种互异阶段划分口径(${h.map(a=>`“${a.slice(0,16)}”`).join("、")})`,suggestion:"全文统一阶段划分口径:以总进度计划/施工部署章节的划分为唯一口径,其余章节划分句逐字对齐或删除。"}]}var b5=c(41991);let b6=/应急预案|应急措施|应急响应|应急救援|突发事件|应急管理|应急物资|应急演练|应急组织|应急保障/u,b7=/应急|突发|救援|预案|抢险|疏散/u,b8=["应急预案的编制与响应流程","突发事件应急处置措施","应急救援组织体系与保障"],b9=["应急照明系统安装调试","应急电源配置与切换方案"],ca={organization:"应急管理领导小组、应急救援队伍的组织机构与职责分工",procedure:"应急处置程序、应急响应流程与应急演练安排",resource:"应急物资、应急器材设备的储备与保障措施"},cb=/应急物资|急救箱|灭火器|沙袋|发电机|水泵|对讲机|应急照明|应急灯|防护服|救援绳|救生衣|铁锹|编织袋|抽水泵|警示带|应急器材/u,cc=/配备|储备|保障|配置|数量|不少于|共计|套|具|个|台|把|只/u,cd=["应急物资储备清单与配备数量","应急救援器材的配置与保障"],ce=["应急照明灯具数量与回路设计","应急电源的电气系统设计"];async function cf(a){return(0,b5.A)({prototypes:[...b8],negativePrototypes:[...b9],embedDocuments:a})}async function cg(a){return(0,b5.A)({prototypes:[...cd],negativePrototypes:[...ce],embedDocuments:a})}async function ch(a,b){let c=a.split(/\r?\n/u),d=[],e=c.map(a=>{let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b)return{level:b[1].length,title:b[2].replace(/^\d+(?:\.\d+)*\s+/u,"").trim()}}).filter(a=>void 0!==a).filter(a=>!b6.test(a.title)&&b7.test(a.title)),g=await cf(b),h=e.length>0?await g(e.map(a=>a.title)):[],i=new Set(e.filter((a,b)=>h[b]).map(a=>a.title)),j=a=>b6.test(a)||i.has(a),k=!1,l=[],m=[],n="",o=0;for(let a of c){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b){let a=b[1].length,c=b[2].replace(/^\d+(?:\.\d+)*\s+/u,"").trim();if(j(c)){k=!0,l.push(c);continue}a<=3&&k&&(k=!1);continue}if(k&&a.trim()&&!/^\s*\|/u.test(a)){m.push(a);let b=a.replace(/\s+/gu,"");n+=b,o+=b.length}}if(0===l.length)return d;let p=[];o<300&&p.push(`字数仅 ${o} 字(要求 ≥300 字)`);let q=n.match(/.{1,200}/gu)||[],r=Object.values(ca),s=await (0,aW.Mv)(q,r),t=a=>q.some(b=>s(b,a)>=aW.Eh);t(ca.organization)||p.push("应急组织体系"),t(ca.procedure)||p.push("应急处置程序/演练");let u=await cg(b),v=m.join("。").split(/[。;;]/u).map(a=>a.trim()).filter(a=>cb.test(a)&&cc.test(a)),w=v.length>0?await u(v):[];return t(ca.resource)||w.some(Boolean)||p.push("应急物资保障"),p.length>0&&d.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`应急预案小节深度不足:${l.join("、")}(缺少:${p.join("、")})`,suggestion:"补写应急组织体系(领导小组/抢险队与职责)、应急处置程序与演练安排、应急物资清单与保障措施,达到可落地深度。",sectionTitle:l[0],provenance:{detectorId:"emergency-section-depth",fingerprint:(0,f.c6)(a)}}),d}var ci=c(70208),cj=c(91943),ck=c(54185);let cl=/(?:GB|JGJ|CJJ|JTG|SL|DB|DL|YS|HG|DBJ)[\s/T]*\d{1,2}[\s/-]?(?:T[\s/]*)?\d{2,4}(?:[\s/-]\d{1,4})?/gu,cm=/《[^《》\r\n]{2,60}?》/gu,cn=/(?:规范|标准|规程)$/u;function co(a){return[...a.matchAll(cl)].map(a=>a[0])}function cp(a){return[...a.matchAll(cm)].map(a=>a[0].replace(/《|》/gu,""))}function cq(a){return a.replace(/[!-~]/gu,a=>String.fromCharCode(a.charCodeAt(0)-65248)).replace(/ /gu," ")}function cr(a){return cq(a).replace(/[\s\u200b-\u200d\ufeff]/gu,"").replace(/[—–-]/gu,"-").toUpperCase()}function cs(a){return cq(a).replace(/《|》/gu,"").replace(/[((][^))]{0,40}[))]/gu,"").replace(/[\s\u200b-\u200d\ufeff]/gu,"")}function ct(a){return cn.test(cs(a))}function cu(a,b){let c=cr(a),d=cr(b);if(!c||!d)return!1;if(c===d)return!0;let e=c.length<=d.length?c:d,f=c.length<=d.length?d:c;return RegExp(`^${e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}-\\d{4}$`,"u").test(f)}function cv(a,b){let c=cs(a),d=cs(b);return!!c&&!!d&&(c===d||!(c.length<4)&&!(d.length<4)&&(c.includes(d)||d.includes(c)))}let cw=/^[\s()()【】[\]、,,;;::·.及和与]*$/u;function cx(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=cq(c),d=[];for(let b of a.matchAll(cl)){let a=b.index??0;d.push({type:"code",value:c.slice(a,a+b[0].length),index:a,end:a+b[0].length})}for(let b of a.matchAll(cm)){let a=b.index??0;d.push({type:"name",value:c.slice(a+1,a+b[0].length-1),index:a,end:a+b[0].length})}if(0===d.length)continue;d.sort((a,b)=>a.index-b.index);let e=new Map,f=new Set;d.forEach((a,b)=>{if("code"!==a.type)return;let g=e=>{for(let g of"left"===e?d.slice(0,b).map((a,c)=>b-1-c):d.slice(b+1).map((a,c)=>b+1+c)){let b=d[g];if("name"!==b.type||f.has(g))continue;let h="left"===e?c.slice(b.end,a.index):c.slice(a.end,b.index);if(!cw.test(h))break;return g}return -1},h=g("left"),i=h>=0?h:g("right");i>=0&&(e.set(b,i),f.add(i))});let g=new Set;d.forEach((a,c)=>{if(!g.has(c))if("code"===a.type){let f=e.get(c);void 0!==f?(b.push({code:a.value,name:d[f].value}),g.add(f)):b.push({code:a.value}),g.add(c)}else f.has(c)||(b.push({name:a.value}),g.add(c))})}return b}function cy(a,b){let c=a.indexOf(b);if(c<0)return"";let d=Math.max(0,c-24),e=Math.min(a.length,c+b.length+24);return a.slice(d,e).replace(/\s+/gu," ").trim()}function cz(a){let b=[];for(let c of a){let a=b.findIndex(a=>!!(a.code&&c.code&&cu(a.code,c.code)||a.name&&c.name&&cv(a.name,c.name)));if(a<0){b.push(c);continue}"pair"===c.kind&&"pair"!==b[a].kind&&(b[a]=c)}return b}let cA=/编制依据|编制说明|编制原则|编制目的/u;function cB(a){let b=(0,ae.UO)(a);if(0===b.length)return b;let c=b.filter(a=>cA.test(a.title));if(0===c.length)return b;let d=a.split(/\r?\n/u);return c.reduce((a,b)=>a+cx([b.title,...d.slice(b.start+1,b.end)].join("\n")).length,0)>0?c:b}function cC(a){let b=a.split(/\r?\n/u);return cB(a).map(a=>[a.title,...b.slice(a.start+1,a.end)].join("\n")).join("\n")}function cD(a){let b=cB(a),c=cC(a),d=a.split(/\r?\n/u),e=new Set;for(let a of b)for(let b=a.start;b<a.end;b+=1)e.add(b);let f=d.filter((a,b)=>!e.has(b)).join("\n"),g=cx(c),h=cx(f),i=g.filter(a=>a.code).map(a=>a.code),j=g.filter(a=>a.name).map(a=>a.name),k=h.filter(a=>a.code).map(a=>a.code),l=h.filter(a=>a.name).map(a=>a.name),m=function(a){let b=[];for(let c of a.split(/\r?\n/u))if(c.trim())for(let a of c.trim().startsWith("|")?c.split("|"):c.split(/[、,,;;]/u)){let c=a.trim();!(c.length<4||c.length>40||c.includes("《"))&&cn.test(cs(c))&&b.push(c)}return b}(f),n=a=>k.some(b=>cu(a,b)),o=a=>l.some(b=>cv(a,b))||m.some(b=>cs(b)===cs(a)),p=a=>i.some(b=>cu(b,a)),q=a=>j.some(b=>cv(b,a)),r=[];for(let a of g){let b=!a.code||n(a.code)||!!a.name&&o(a.name),c=!a.name||o(a.name)||!!a.code&&n(a.code);a.code&&!b&&a.name&&ct(a.name)?r.push({kind:"pair",value:a.name,code:a.code,name:a.name,counterpart:a.code}):a.code&&!b?r.push({kind:"code",value:a.code,code:a.code,counterpart:a.name}):a.name&&ct(a.name)&&!c&&r.push({kind:"name",value:a.name,name:a.name,counterpart:a.code})}let s=[];for(let a of h){let b=!a.code||p(a.code)||!!a.name&&q(a.name),c=!a.name||q(a.name)||!!a.code&&p(a.code);a.code&&!b&&a.name&&ct(a.name)?s.push({kind:"pair",value:a.name,code:a.code,name:a.name,context:cy(f,a.code)}):a.code&&!b?s.push({kind:"code",value:a.code,code:a.code,context:cy(f,a.code)}):a.name&&ct(a.name)&&!c&&s.push({kind:"name",value:a.name,name:a.name,context:cy(f,`《${a.name}》`)})}return{declaredNotUsed:cz(r),usedNotDeclared:cz(s),stats:{declaredCodes:i.length,declaredNames:j.length,usedCodes:k.length,usedNames:l.length}}}function cE(a){return"pair"===a.kind?`《${a.name}》(${a.code})`:"code"===a.kind?`标准编号「${a.value}」`:`《${a.value}》`}async function cF(a){let b=await (0,ae.Z2)(a.markdown,a.factsModel,{scopeClassifier:a.factTokenScopeClassifier}),c=new Set((a.truthValues||[]).flatMap(a=>a.superseded||[]).map(a=>(0,w.K3)(a))),d=(0,aX.Uk)(a.tenderRequirements).map(({item:a})=>(0,aX.E6)(a)),e=a.markdown.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>(0,aX.NT)(a)).filter(Boolean).slice(0,80),g=(0,s.s3)(a.markdown,s.ev),h=await (0,aW.Mv)(d,[...e,...g]),j=await (0,aW.Mv)(a.evaluationCriteriaItems||[],e),k=new Map((await Promise.all(a.chapters.map(async b=>[b.title,await a.professionalDepthClassifier.analyze(b.content)]))).filter(a=>!!a[1]));return[...(0,o.yT)("toc-consistency",()=>a.promptDocumentRules?.forbidToc?[]:[...(0,ae.gN)(a.markdown),...(0,ae.f8)(a.markdown)]),...(0,o.yT)("section-numbering",()=>(0,ae.Jn)(a.markdown)),...(0,o.yT)("section-count-overflow",()=>(0,ae.VW)(a.chapters)),...(0,o.yT)("heading-duplicate",()=>(0,ae.kw)(a.markdown)),...(0,o.yT)("structure-integrity",()=>(0,cj.dC)(a.markdown,{excludeKinds:["truncated-line"]})),...(0,o.yT)("truncated-sentence",()=>(0,cj.kj)(a.markdown)),...(0,o.yT)("templated-label",()=>(0,ck.D9)(a.markdown)),...(0,o.yT)("title-integrity",()=>(0,ck.uw)(a.markdown)),...(0,o.yT)("evaluation-criteria-coverage",()=>(0,ae.wl)(a.markdown,a.evaluationCriteriaItems||[],{semanticSimilarity:j})),...await (0,o.ll)("requirements-coverage",()=>(0,aX.tH)({markdown:a.markdown,entries:(0,aX.Uk)(a.tenderRequirements).map(({item:a})=>a),bodyTexts:g,semanticSimilarity:h})),...(0,o.yT)("fabricated-start-date",()=>(0,s.cf)(a.markdown,a.factsModel,a.materialEvidence)),...(0,o.yT)("field-value-mismatch",()=>(0,s.a8)(a.markdown,a.factsModel)),...(0,o.yT)("area-arithmetic",()=>(0,s.u2)(a.markdown)),...(0,o.yT)("resource-consistency",()=>(0,s.rA)(a.markdown,{laborPeakAuthority:(0,ag.yB)(a.blueprintData)})),...(0,o.yT)("node-schedule-consistency",()=>(0,s.Et)(a.markdown)),...(0,o.yT)("cross-section-numeric-conflict",()=>(0,s.H)(a.markdown)),...(0,o.yT)("fact-reconciliation",()=>(0,ai.az)({markdown:a.markdown,billFactLock:a.billFactLock,blueprintData:a.blueprintData,factsModel:a.factsModel})),...(0,o.yT)("greening-maintenance-mismatch",()=>(0,s.x5)(a.markdown,a.factsModel)),...(0,o.yT)("street-light-count-mismatch",()=>(0,s.Tz)(a.markdown,a.factsModel)),...(0,o.yT)("spec-location-mismatch",()=>(0,s.$$)(a.markdown,a.factsModel.specAuthorityMap)),...await (0,o.ll)("blueprint-citation-consistency",async()=>a.blueprintData?(await (0,t.dr)(a.markdown,a.blueprintData)).filter(a=>"error"===a.level):[]),...await (0,o.ll)("cross-project-value-copy",()=>(0,s.iy)(a.markdown,(0,ag.L$)(a.blueprintData))),...(0,o.yT)("phase-labor-mixing",()=>(0,s.cv)(a.markdown,(0,ag.i2)(a.blueprintData))),...(0,o.yT)("equipment-batch-conflict",()=>(0,s.KE)(a.markdown,(0,ag.Be)(a.blueprintData))),...(0,o.yT)("preliminary-action-timing",()=>(0,s.fg)(a.markdown,a.blueprintData?.contract.totalDays)),...(0,o.yT)("foundation-form-residue",()=>(0,s.ex)(a.markdown)),...(0,o.yT)("ambiguous-either-or",()=>(0,s.Fr)(a.markdown)),...(0,o.yT)("excavation-depth-lock",()=>(0,s.bq)(a.markdown)),...(0,o.yT)("excavation-hazard-classification",()=>(0,s.LA)(a.markdown,a.factsModel)),...(0,o.yT)("support-form-fact-consistency",()=>(0,s.ek)(a.markdown,a.factsModel)),...(0,o.yT)("equipment-entry-timing",()=>(0,s.fQ)(a.markdown,a.factsModel)),...(0,o.yT)("fabricated-award",()=>(0,s.hu)(a.markdown,a.factsModel,a.tenderRequirements)),...(0,o.yT)("bidder-qualification-section",()=>(0,s.Rv)(a.markdown)),...(0,o.yT)("cross-chapter-duplicate-section",()=>(function(a,b){let c=a=>a.replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").replace(/[\s,,、]/gu,""),d=new Map;a.forEach((a,b)=>{let c=(0,ci.GQ)(a.title).replace(/[\s,,、]/gu,"");c&&!d.has(c)&&d.set(c,b)});let e=new Map,f=new Map;a.forEach((a,b)=>{let d=new Set;for(let g of(a.content||"").split(/\r?\n/u)){let a=/^###\s+(.+?)\s*$/u.exec(g.trim());if(!a)continue;let h=c(a[1]);if(h.length<8||d.has(h))continue;d.add(h),f.has(h)||f.set(h,a[1].replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").trim());let i=e.get(h)||[];i.push(b),e.set(h,i)}});let g=new Map;b.forEach(a=>{let b=d.get((0,ci.GQ)(a.title).replace(/[\s,,、]/gu,""));if(void 0!==b)for(let d of a.sections||[]){let a=c(d);if(a.length<8)continue;let e=g.get(a)||[];e.includes(b)||e.push(b),g.set(a,e)}});let h=[];for(let[b,c]of e){if(c.length<2)continue;let d=g.get(b)||[];if(d.length>=2)continue;let e=1===d.length?d[0]:c[0],i=f.get(b)||b;for(let b of c){if(b===e)continue;let c=a[b];h.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:c.id,sectionTitle:i,message:`跨章同名小节:“${i}”已在「${a[e].title}」落位,本章(「${c.title}」)同名小节属跨章串章重复,须改写归并`,suggestion:"同一主题小节全文只保留一处(归属章);非归属章的同名小节:内容与本章主题相关则改写标题为可区分的具体主题并归并内容,与本章无关则整节删除(含标题行);修复后全文不得再出现跨章同名小节。"})}}return h})(a.chapters,a.effectiveChapters||a.template.chapters||[])),...(0,o.yT)("basic-info-schedule-field",()=>(0,s.cT)(a.markdown)),...(0,o.yT)("duplicate-table",()=>(0,s.ub)(a.markdown)),...(0,o.yT)("duplicate-paragraph",()=>(0,s.cl)(a.markdown)),...(0,o.yT)("paragraph-near-duplicate",()=>(0,aF.w9)(a.markdown)),...(0,o.yT)("paragraph-tail-repeat",()=>(0,s.AD)(a.markdown)),...(0,o.yT)("collision-numbered-heading",()=>(0,s.xR)(a.markdown)),...(0,o.yT)("inverted-date-range",()=>(0,s.jP)(a.markdown)),...(0,o.yT)("resource-triad-section-hierarchy",()=>(0,s.zP)(a.markdown)),...await (0,o.yT)("support-system-conflict",()=>(0,s.r8)(a.markdown,(0,s.P3)(a.factsModel))),...(0,o.yT)("dangerous-list-consistency",()=>(0,s.vH)(a.markdown)),...(0,o.yT)("hazard-exclusion-contradiction",()=>(0,s.m6)(a.markdown)),...await (0,o.yT)("six-hundred-percent-coverage",()=>(0,s.sn)(a.markdown,{chapterTitles:(a.effectiveChapters||a.template.chapters||[]).map(a=>a.title)})),...await (0,o.yT)("self-undermining-candidate",()=>(0,s.YN)(a.markdown)),...(0,o.yT)("paragraph-opening-repeat",()=>(0,s.y2)(a.markdown)),...(0,o.yT)("flow-form-repeat",()=>(0,ck.Q9)(a.markdown)),...(0,o.yT)("skeleton-fingerprint",()=>(0,ck.o0)(a.markdown)),...(0,o.yT)("sentence-pattern-repeat",()=>(0,ck.TN)(a.markdown)),...(0,o.yT)("repeated-word",()=>(0,s.Xc)(a.markdown)),...await (0,o.yT)("commercial-data-in-body",()=>(0,s.mC)(a.markdown)),...(0,o.yT)("overview-recap",()=>(0,s.l4)(a.markdown)),...(0,o.yT)("closure-phrase-density-cap",()=>(0,s.dF)(a.markdown)),...await (0,o.ll)("parameter-concept-conflict",()=>bd(a.markdown,{billFactLock:a.billFactLock,blueprintQuantities:a.blueprintData?.quantities})),...await (0,o.ll)("internal-terminology-anchor",()=>(0,af.WT)(a.markdown)),...(0,o.yT)("construction-system-coverage",()=>(function(a){let b=[...new Set(a.flatMap(a=>bV.filter(b=>a.title.includes(b))))];if(0===b.length)return[];let c=a.map(a=>a.content||"").join("\n"),d=b.filter(a=>!c.includes(a));if(0===d.length)return[];let e=a.find(a=>d.some(b=>a.title.includes(b)));return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`章节大纲涉及的专业工程系统在正文零覆盖:${d.join("、")}`,suggestion:"对应章节必须补写该专业工程的施工方案正文(施工概况/施工流程/施工方法,含可核实的工艺参数),不得整章零覆盖。",chapterId:e?.id}]})(a.chapters)),...(0,o.yT)("dangerous-applicability",()=>(function(a){let b=b$(a);return 0===b.applicableNames.length?[]:b.zonePresent?0===b.missingNames.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程辨识清单遗漏适用项:${b.missingNames.join("、")}(正文已出现适用前提但辨识清单未列入)`,suggestion:"按建办质〔2018〕31号逐项辨识:将遗漏项补入危大工程辨识清单并标注分级,超过一定规模的专项施工方案需专家论证。"}]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文出现危大工程适用前提(${b.applicableNames.join("、")})但全文未编制危大工程辨识清单`,suggestion:"必须编制危大工程辨识清单:按建办质〔2018〕31号逐项辨识并标注分级,超过一定规模的专项施工方案需专家论证。"}]})(a.markdown)),...(0,o.yT)("innovation-tech-coverage",()=>(0,ae.Ef)(a.markdown,a.effectiveChapters||a.template.chapters||[])),...(0,o.yT)("instruction-like-heading",()=>(0,ae.K1)(a.markdown)),...(0,o.yT)("formal-heading-hierarchy",()=>(0,ae.Fv)(a.markdown)),...(0,o.yT)("formal-content-integrity",()=>(0,ae.k0)(a.markdown)),...(0,o.yT)("punctuation-artifact",()=>(0,ae.vZ)(a.markdown)),...(0,o.yT)("table-quality",()=>(0,ae.NS)(a.markdown)),...(0,o.yT)("table-spam",()=>(0,ae.SN)(a.markdown)),...(0,o.yT)("basis-regulations-coverage",()=>(0,ae.AN)(a.markdown,a.blueprintData,{chapterTitles:(a.effectiveChapters||a.template.chapters||[]).map(a=>a.title)})),...(0,o.yT)("basis-regulations-cross",()=>(function(a){let b=cD(a);if(b.stats.declaredCodes+b.stats.declaredNames===0)return[];let c=[],d=b.usedNotDeclared,e=b.declaredNotUsed;for(let a of d.slice(0,12))c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:正文引用${cE(a)}未列入编制依据小节${a.context?`(证据:…${a.context}…)`:""}`,suggestion:"请将该标准名称及编号按编号族补入编制依据小节同类目(与正文引用形态一致),不得改动正文既有引用。"});if(d.length>12){let a=d.slice(12);c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:正文另有 ${a.length} 处引用标准未列入编制依据小节(${a.slice(0,6).map(cE).join("、")} 等)`,suggestion:"请统一核对编制依据小节与正文引用清单,补齐全部未声明标准条目。"})}for(let a of e.slice(0,12))c.push({level:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:编制依据小节的${cE(a)}在正文无引用`,suggestion:"请在对应施工章节的工序/验收要求中落位该标准(或从未使用的编制依据中移除),保持编制依据与正文一一对应。"});if(e.length>12){let a=e.slice(12);c.push({level:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:编制依据小节另有 ${a.length} 条声明在正文无引用(${a.slice(0,6).map(cE).join("、")} 等)`,suggestion:"请统一核对编制依据与正文引用清单,未使用条目在正文落位或从编制依据移除。"})}return c})(a.markdown)),...(0,o.yT)("resource-breakdown-consistency",()=>(0,ae.EJ)(a.markdown,a.blueprintData,a.billFactLock)),...(0,o.yT)("section-content-integrity",()=>(0,ae.qK)(a.markdown,a.chapters)),...(0,o.yT)("professional-content",()=>(0,ae.ji)(a.chapters,k)),...(0,o.yT)("professional-score",()=>(0,ae.i0)(a.chapters,k)),...(0,o.yT)("generic-professional-content",()=>(0,ae.ST)(a.chapters,k)),...(0,o.yT)("management-measure-number",()=>(0,ae.xX)(a.chapters,k)),...await (0,o.yT)("closed-loop-density",()=>(0,ae.Zu)(a.markdown)),...await (0,o.yT)("cross-chapter-consistency",()=>(0,ae.qm)(a.markdown,a.factsModel,a.scopeConflicts,k)),...await (0,o.yT)("process-spec-conflict",()=>(0,ae.hr)(a.markdown,a.factsModel)),...(0,o.yT)("evidence-usage-coverage",()=>aC(a.markdown,a.factsModel)),...await (0,o.yT)("paragraph-generic",()=>aD(a.markdown,a.professionalDepthClassifier)),...await (0,o.yT)("construction-org-generic-language",()=>(0,aA.Fw)(a.chapters)),...(0,o.yT)("construction-org-control-loop",()=>(0,aA.Hl)(a.chapters)),...(0,o.yT)("construction-org-professional-chain",()=>(0,aA.iX)({markdown:a.markdown,factsModel:a.factsModel,chapters:a.chapters})),...(0,o.yT)("construction-org-consistency",()=>(function(a,b){let c=[];if(!/施工组织设计|施工组织|施组|质量|安全|文明施工/u.test(a))return c;for(let d of aQ){if("equipment-counts"===d.kind){c.push(...function(a,b,c){let d=(0,aP.AK)(a);if(0===d.length)return[];let{names:e,counts:f}=function(a,b){let c=[],d=new Map,e=a=>{c.includes(a)||c.push(a)};for(let c of b){let b=a[c];if(Array.isArray(b))for(let a of b){if(!a||"object"!=typeof a||!("value"in a)||"string"!=typeof a.value)continue;for(let b of(0,aP.AK)(a.value))e(b.name),d.has(b.name)||d.set(b.name,b.count);let b=aR(a.value);if(b.length>12||/\d/u.test(b))continue;let c=(0,aP.Rh)(b);c&&e(c)}}return{names:c,counts:d}}(b,c.factGroups);if(0===e.length)return[];let g=[],h=new Map,i=[],j=new Set;for(let a of d){let b=e.find(b=>aV(a.name,[b]));if(b){let c=f.get(b);if(void 0===c||c===a.count)continue;let d=`${a.name}:${[a.count,c].sort((a,b)=>a-b).join("-")}`;if(j.has(d))continue;j.add(d),i.push(`${a.name}:正文 ${a.count} 台、资料 ${c} 台`);continue}if(aS.test(a.name))continue;let c=h.get(a.name);(!c||a.raw.length<c.length)&&h.set(a.name,a.raw)}if(h.size>0){let a=[...h].map(([a,b])=>b.length-a.length<=1?b:a).slice(0,5);g.push({level:"warning",message:`施组数据一致性风险:机械数量型号 可能与项目图谱/事实不一致(${a.join("、")})`,suggestion:`请核对机械数量型号在${c.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return i.length>0&&g.push({level:"warning",message:`施组数据一致性风险:机械数量型号 正文台数与项目图谱/事实不一致(${i.slice(0,5).join(";")})`,suggestion:`同一机械台数全文档只允许一套口径:请以资料事实/项目图谱中的机械配置为准统一${c.locations}中的台数表述(正文与资料并存时以资料为准)。`}),g}(a,b,d));continue}let e=aU(b,d.factGroups),f=(function(a,b){let c=[];for(let d of b){let b=new RegExp(d.source,d.flags.includes("g")?d.flags:`${d.flags}g`);for(let d of a.matchAll(b)){let a=aR(d[1]||d[0]||"");!aT.test(a)&&a.length>=2&&a.length<=80&&c.push(a)}}return[...new Set(c)]})(a,d.patterns??[]).filter(a=>!aS.test(a)&&!aV(a,e)).slice(0,5);f.length>0&&c.push({level:"warning",message:`施组数据一致性风险:${d.label} 可能与项目图谱/事实不一致(${f.join("、")})`,suggestion:`请核对${d.label}在${d.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return c})(a.markdown,a.factsModel)),...(0,o.yT)("construction-org-chapter-data-coverage",()=>(function(a,b){let c=[],d=aU(b,["project","schedule","resources","quality","safety","preciseFacts"]);if(0===d.length)return c;for(let b of a)/概况|进度|资源|质量|安全|文明|工资|应急/u.test(`${b.title} ${(b.sections||[]).join(" ")}`)&&(d.some(a=>a.length>=3&&b.content.includes(a.slice(0,Math.min(10,a.length))))||c.push({level:"warning",message:`${b.title} 缺少可识别的项目图谱事实支撑`,suggestion:"请至少引用工程名称、工期、工程量、资源、风险、质量安全目标等项目专属事实之一,避免纯模板化。"}));return c})(a.chapters,a.factsModel)),...(0,o.yT)("construction-org-major-content",()=>(0,aA.Av)(a.chapters,a.markdown)),...(0,o.yT)("construction-org-division-section",()=>(0,aA.CS)(a.chapters,a.markdown)),...(0,o.yT)("major-content-governance",()=>(0,aA.l5)(a.markdown)),...(0,o.yT)("construction-org-bonus-module",()=>(0,aA.b7)(a.chapters)),...(0,o.yT)("chapter-dependency",()=>aE(a.chapters,k)),...(0,o.yT)("document-delivery-score",()=>(function(a,b,c,d){let e=(d?.size??0)>0,f={factuality:(0,i.V7)(a)>=80,structure:b.length>0,depth:e,executable:e,evidence:b.length>0},g={factuality:2*!(0,ae.vY)(a,c).some(a=>"error"===a.level),structure:b.length>0&&b.every(b=>a.includes(b.title)&&(0,i.V7)(b.content)>=600)?2:1,depth:0===(0,ae.i0)(b,d).length?2:1,executable:0===aE(b,d).length?2:1,evidence:0===aC(a,c).length?2:1},h=Object.keys(g).filter(a=>f[a]),j=Object.keys(g).filter(a=>!f[a]),k=h.reduce((a,b)=>a+g[b],0),l=2*h.length,m={factuality:"事实",structure:"结构",depth:"专业",executable:"可执行",evidence:"证据"},n=j.map(a=>m[a]).join("、");return[{level:"info",message:`文档交付评分报告:总分 ${k}/${l}(已测 ${h.length}/5 维),`+h.map(a=>`${m[a]}${g[a]}`).join(",")+(j.length>0?`;**未测维度(本次无输入,未计分)**:${n}`:""),suggestion:j.length>0?`存在未测维度(${n}):该部分本次**未被核验**,本分数不构成放行依据;请补齐输入(章草稿/AI 分析)后重跑。`:k>=.8*l?"可交付,但建议继续优化证据使用覆盖率和章节依赖链路。":"建议优先修复低分维度后再导出。"}]})(a.markdown,a.chapters,a.factsModel,k)),...(0,o.yT)("generated-fact-verification",()=>b),...(0,o.yT)("numeric-traceability",()=>(0,y.FA)(a.markdown,a.factsModel)),...(0,o.yT)("table-arithmetic-consistency",()=>(0,s.qE)(a.markdown)),...(0,o.yT)("duplicate-basic-info",()=>(0,ae.iC)(a.markdown)),...await (0,o.yT)("formal-style",()=>(0,ae.BV)(a.markdown)),...(0,o.yT)("tertiary-heading",()=>(0,ac.dh)(a.markdown)),...(0,o.yT)("min-chapter-section",()=>(0,ae.Ty)(a.chapters)),...(0,o.yT)("hollow-table-cell",()=>(0,ae.cG)(a.markdown)),...(0,o.yT)("schedule-duration-overrun",()=>(0,ae.v4)(a.markdown)),...(0,o.yT)("caliber-consistency",()=>[...(0,ae.lg)(a.markdown,a.truthValues||[]),...function(a,b=[]){let c=[];if(!a||!b||0===b.length)return c;let d=(0,w.K3)(a),e=(0,f.c6)(a);for(let a of b){let b=a.before.filter(a=>(function(a,b){let c=(0,w.K3)(a);if(c.length<3)return!1;for(let a of b.matchAll(RegExp(c.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"))){let d=a.index||0,e=b.slice(Math.max(0,d-16),d+c.length+16);if(!bm.test(e))return!0}return!1})(a.text,d));if(b.length>0){let d=b.some(a=>"strong"===a.strength),f=b.map(a=>`「${a.text}」`).join("、");c.push({level:d?"error":"warning",severity:d?"blocker":"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:bn,fingerprint:e},message:`被取代形态残留:答疑修正后「${a.object}」为「${a.after}」,正文仍以修正前形态 ${f} 作为现行做法(修正前形态仅可在陈述变更过程时引用)`,suggestion:`请把正文中 ${f} 改为答疑修正后内容「${a.after}」(来源:${a.source});确需说明变更过程的,写成「原为X,经答疑修正为Y」的形式。`})}if("cancel"===a.kind)continue;let f=a.after.trim();if(f.length<2)continue;let g=function(a,b){let c=function(a){let b=a.trim();if(b.length>=4&&b.length<=12)return[b];let c=b.split(/[、,,及与和\s()()]/u).map(a=>a.trim()).filter(a=>a.length>=4).sort((a,b)=>b.length-a.length);return c.length>0?[c[0]]:b.length>=4?[b]:[]}(a.object);if(0!==c.length){for(let a of b.split(/[。;;]/u))if(!(a.length<6)&&bU.test(a)&&c.some(b=>a.includes(b)))return a.slice(0,60)}}(a,d);if(g){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:bn,fingerprint:e},message:`答疑修正未落实(明确对立):「${a.object}」经答疑修正为「${f}」,正文却以否定表述处理(如「${g}」)`,suggestion:`请按答疑修正后内容改写该处表述:「${f}」(来源:${a.source});答疑已明确的做法不得写成不做/不采用。`});continue}f.length<6||f.length>60||!function(a,b){let c=(0,w.K3)(a);if(c.length<4||b.includes(c))return!0;let d=function(a){let b=[];for(let c=0;c+1<a.length;c+=1)b.push(a.slice(c,c+2));return b}(c);if(0===d.length)return!0;if(d.filter(a=>b.includes(a)).length/d.length<.6)return!1;let e=(0,w.zn)(a).map(a=>(0,w.K3)(a)).filter(a=>a.length>=2);return 0===e.length||e.some(a=>b.includes(a))}(f,d)&&c.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:bn,fingerprint:e},message:`答疑修正未落位:「${a.object}」经答疑修正为「${f}」,正文未体现该修正后内容(不足额)`,suggestion:`请在相关章节补写答疑修正后内容「${f}」(来源:${a.source});该条已作为写作硬约束下发,此处为终检兜底。`})}return c}(a.markdown,a.clarificationAmendments)]),...(0,o.yT)("hazard-parameter-binding",()=>(0,ae.Bs)(a.markdown,a.truthValues||[])),...(0,o.yT)("blueprint-value-placement",()=>(0,ae.uy)(a.markdown,a.blueprintData)),...(0,o.yT)("dangling-conjunction",()=>(0,ae.Dy)(a.markdown)),...(0,o.yT)("planned-section-placement",()=>(0,ae.hd)(a.markdown,a.chapters)),...await (0,o.yT)("precise-fact-usage",()=>(0,ae.N1)(a.markdown,a.factsModel,a.chapters)),...(0,o.yT)("parameter-obligation-usage",()=>(function(a,b,c=[],d={}){if(0===c.length)return[];let e=R(a,b,c,d),g=e.used.length+e.relevantMissed.length;if(g<8||e.used.length/g>=.9)return[];let h=e.relevantMissed.slice(0,3).map(a=>String(a.value).slice(0,30));return[{level:"error",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`可靠参数义务落位不足:${e.used.length}/${g}(相关而遗漏 ${e.relevantMissed.length} 项${h.length>0?`,缺失如 ${h.join("、")}`:""})`,suggestion:"请将资料中的可靠参数(规格/型号/尺寸/强度/规范编号等)在对应章节的对应位置自然写入,保持原值原形态(数字、单位、编号中的连字符与年份不得改写、拆分或省略);商务金额、单价、税率、预留金类数据一律不得写入正文。",provenance:{detectorId:"parameter-obligation-usage",fingerprint:(0,f.c6)(a)}}]})(a.markdown,a.factsModel,a.chapters,{supersededValues:c})),...await (0,o.yT)("boq-placement",()=>(0,ae.S2)(a.markdown,a.chapters,a.factsModel)),...await (0,o.yT)("stage-phrasing",()=>b4(a.markdown)),...await (0,o.yT)("emergency-section-depth",()=>ch(a.markdown)),...(0,o.yT)("boq-row-trace",()=>(0,y.QP)((0,y.JV)(a.markdown,a.factsModel))),...(0,o.yT)("drawing-reference",()=>(0,ae.yd)(a.markdown,a.drawingFactLock)),...(0,o.yT)("drawing-pointer-phrase",()=>(0,ae.D0)(a.markdown)),...(0,o.yT)("atlas-reference-phrase",()=>(function(a){let b=(0,aG.St)(a);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"format",owner:"system",repairability:"local_deterministic",message:`正文出现图集/标准图指向替代做法 ${b.length} 处(如「${[...new Set(b)].slice(0,3).join("」「")}」):做法必须写进正文,不得让评标人回查图集`,suggestion:"写出具体做法(尺寸/材料/构造参数/工艺要求)替代指向短语;规范/法规引用(书名号内为规范名,或标题后紧跟 GB/JGJ/CJJ 类标准代号)不属本判据范围,保留不动。"}]})(a.markdown)),...(0,o.yT)("source-enumeration",()=>(0,ac.bx)(a.markdown).filter(a=>a.message.includes("资料来源罗列话术"))),...(0,o.yT)("meta-discourse-declaration",()=>(0,aF.nm)(a.markdown)),...(0,o.yT)("finish-thickness",()=>(0,aF.WY)(a.markdown)),...(0,o.yT)("formula-residue",()=>(0,aF.ON)(a.markdown)),...(0,o.yT)("web-evidence-leakage",()=>(function(a){let b=[];return aK.test(a)&&b.push({level:"warning",message:"正文包含联网增强过程性表述",suggestion:"请删除联网检索、网页资料、搜索结果等过程性话术,改为正式交付语言。"}),b})(a.markdown)),...(0,o.yT)("formal-placeholder",()=>(0,ae.bM)(a.markdown)),...(0,o.yT)("prompt-example-leak",()=>(0,ae.M$)(a.markdown,a.promptBindings)),...(0,o.yT)("degenerate-content",()=>(0,ae.AC)(a.markdown,a.chapters)),...(0,o.yT)("planned-auto-spec-gate",()=>(0,ae.mR)(a.markdown,a.template)),...(0,o.yT)("bid-composition-body-table",()=>(0,ac.NN)(a.markdown,{bodyTableForbidden:a.bodyTableForbidden,plannedChapterTitles:(a.effectiveChapters?.length?a.effectiveChapters:a.template.chapters).filter(a=>(a.tablePlans?.length||0)>0||(a.tableSections?.length||0)>0||(a.diagramRequirements?.length||0)>0).map(a=>a.title),requiredTableTitles:a.promptDocumentRules?.requiredTables||[]})),...(0,o.yT)("bid-composition-body-figure",()=>(0,ac.Fo)(a.markdown,a.bodyFigureForbidden)),...(0,o.yT)("identity-marks-forbidden",()=>(0,s.Vl)(a.markdown,a.identityMarksForbidden)),...(0,o.yT)("planned-structure",()=>(0,ac.UG)(a.markdown,a.template,a.bodyTableForbidden)),...(0,o.yT)("table-caption",()=>(0,ac.XU)(a.markdown,a.bodyTableForbidden)),...await (0,o.yT)("prompt-document-rule",()=>(0,ac.Ed)(a.markdown,a.promptDocumentRules,void 0,{bodyTableForbidden:a.bodyTableForbidden,coverForbidden:a.coverForbidden})),...await (0,o.yT)("local-adaptation-keyword",()=>(0,s.cJ)(a.markdown,a.factsModel)),...(0,o.yT)("boq-division-coverage",()=>(0,y.sl)(a.markdown,a.chapters,a.factsModel))]}let cG={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};var cH=c(52922);function cI(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!(!b||/[。!?]/u.test(b))&&(b.match(/第[一二三四五六七八九十百千\d]+[章节篇]/gu)||[]).length+(b.match(/\d+(?:\.\d+)+/gu)||[]).length>=3}function cJ(a){let b=a.split(/[,,、\s]+/u).map(a=>a.trim()).filter(Boolean);return!(b.length<8)&&b.reduce((a,b)=>a+b.length,0)/b.length<8}function cK(a){return a.split("\n").filter(a=>!(0,cH.X9)(a)&&!cI(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12).filter(a=>{let b=(a.match(/[\u4e00-\u9fff]/gu)||[]).length,c=a.replace(/\s+/gu,"").length;return b>=8&&b/Math.max(1,c)>=.15}).filter(a=>!cJ(a))}function cL(a,b){let c=new Set;for(let d of cK(a))for(let a of d.match(b)||[])c.add(a);return c}let cM=/\d|确保|保证|杜绝|实行|采用|落实|建立|执行|达到|不低于|不少于|控制在|符合|按照|承诺/u,cN=["危险性较大的分部分项工程安全管理","扬尘污染防治措施","建筑工人实名制管理","农民工工资专用账户与工资支付保障","生产安全事故应急预案与应急演练","绿色施工与四节一环保措施"],cO=["危险源辨识与风险识别评估","编制专项施工方案","组织专家论证并履行审批程序","对作业人员进行安全技术交底","施工过程监测与监控量测","分部分项工程验收","三级配电系统","两级漏电保护装置","漏电保护器与接地保护","实名制考勤与人员管理","农民工工资专用账户银行代发","应急预案编制与响应","绿色施工措施与评价"];function cP(a){return a.replace(/^第[一二三四五六七八九十百千万\d]+[章节]\s*/u,"").replace(/^\d+(?:\.\d+)*[、..\s]+/u,"").replace(/^[((]?[一二三四五六七八九十]+[))、..\s]+/u,"").replace(/\s+/gu,"").trim()}async function cQ(a){let{blocks:b,completeBlocks:c}=await (0,cH.Pm)(a);return Math.round((.7*Math.min(1,c/Math.max(6,Math.ceil((0,i.V7)(a)/1500)))+.3*(b?c/b:0))*100)}let cR=/目录|层级|编号|表格|表头|分隔线|页码|空小节|缺少规划小节|小节只有标题|缺节/u,cS=/跨章一致性复核|事实一致性冲突|事实冲突|评分项要求|可靠精确参数|应急预案|属地创优|工伤保险|专业评分|深度不足|事实反查|存在多个值|已确认事实未在正文中落位|事实未在正文中落位/u,cT=/缺少规划小节|小节只有标题|空小节|只有标题或表格无正文|小节内容补写未完成|小节生成未达标|同名小节|H4 标题|正文缺少章节标题|小节正文过短/u;function cU(a){let b=new Map;return a.split("\n").forEach((a,c)=>{if(!((0,cH.X9)(a)||cI(a)))for(let d of a.matchAll(/[^。;;]+/gu)){let a=d[0]||"",e=a.trim(),f=e.replace(/[\s,,、::()()【】[\]《》“”"'`]/gu,"");if(f.length<12)continue;let g=(d.index||0)+(a.length-a.trimStart().length),h=b.get(f)||[];h.push({lineIndex:c,start:g,end:g+e.length,raw:e}),b.set(f,h)}}),[...b.entries()].map(([a,b])=>({key:a,occurrences:b}))}function cV(a){let b=cU(a),c=b.reduce((a,b)=>a+b.occurrences.length,0),d=b.length,e=c-d;return{totalSentences:c,uniqueSentences:d,duplicateInstances:e,duplicateRate:c>0?e/c:0}}async function cW(a,b){let c=await (0,cH.Bt)(a,b),d=(0,cH.Ye)(a),e=cV(a).duplicateRate,f=await (0,cH.gE)(a,b),g=(0,cH.nY)(a),h=(0,ck.vL)(a),i=ck.y9.map(b=>({patternId:b.id,patternLabel:b.label,count:(0,ck.be)(a,b)})).filter(a=>a.count>=h),j=i.length>=2||i.some(a=>a.count>=2*h);return{level:f.heavyTemplated||"heavy"===c.level||j?"heavy":"medium"===c.level||i.length>0?"medium":"light",fillerRatio:c.ratio,fillerSentences:c.fillerSentences,totalSentences:c.totalSentences,vagueHitCount:d.reduce((a,b)=>a+b.count,0),vaguePhrases:d.map(a=>a.phrase),duplicateSentenceRate:e,crossProjectResidue:g,difficultyCountermeasureRatio:f.ratio,difficultyBothCount:f.bothCount,difficultyQuantifiedCount:f.quantified,difficultyCountermeasures:f.countermeasures,difficultyHeavyTemplated:f.heavyTemplated,sentencePatternHits:i}}function cX(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").split(/(?=^#{1,6}\s)/mu),c=[];for(let a of b){if(!a.trim())continue;let b=a.split("\n"),d=/^#{1,6}\s/u.test(b[0]||""),e=d?(b[0]||"").trim():"",f=d?cP(e.replace(/^#{1,6}\s+/u,"")):"",g=d?b.slice(1):b,h=[],i=[];for(let a of g){if(!a.trim()){i.length>0&&(h.push(i),i=[]);continue}i.push(a)}i.length>0&&h.push(i);let j=[];for(let a of h){let b=a.filter(a=>!cI(a));b.some(a=>(function(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!(b.length<12||(0,cH.X9)(b)||cI(b))&&!cJ(b)})(a))&&j.push(b.map(a=>a.trim()).join("\n"))}c.push({heading:e,headingText:f,hasSubstantiveBody:j.length>0,substantiveParagraphs:j})}return c}function cY(a){let b=[];for(let c of cX(a))if(c.hasSubstantiveBody)for(let a of(c.headingText&&b.push(c.headingText),c.substantiveParagraphs))b.push(...function(a){let b=[],c=[],d=0;for(let e of a.split("\n"))d>0&&d+e.length>600&&(b.push(c.join("\n")),c=[],d=0),c.push(e),d+=e.length+1;return c.length>0&&b.push(c.join("\n")),b}(a));return b}async function cZ(a){let b=cY(a.markdown),c=await (0,aW.Mv)(b,[...cN,...cO],a.embedDocuments),d=a=>b.some(b=>c(b,a)>=aW.Eh),e=cN.filter(d).length/cN.length,f=await (0,cH.Bt)(a.markdown,a.embedDocuments);return{completeness:function(a,b,c,d){let e=[...a.matchAll(/^#{1,3}\s+(.+)$/gmu)].map(a=>cP(a[1]||"")).filter(a=>a.length>=2),f=1,g=c?.chapters||[];if(g.length>0){let a=g.map(a=>cP(a.title)).filter(Boolean);f=a.filter(a=>e.some(b=>b.includes(a)||a.includes(b))).length/a.length}else b.length>0&&(f=b.filter(a=>e.some(b=>b.includes(cP(a.title))||cP(a.title).includes(b))).length/b.length);return Math.round((.55*f+.45*d)*100)}(a.markdown,a.chapters,a.template,e),specificity:function(a,b){let c=b.filter(y.O7),d=c.filter(a=>"used"===a.status),e=c.length?d.length/c.length:1,f=d.map(a=>String(a.value||"").replace(/\s+/gu," ").trim()).filter(a=>a.length>=4&&a.length<=60),g=a.map(a=>(a.content||"").replace(/\s+/gu," ")),h=f.filter(a=>g.filter(b=>b.includes(a)).length>=2).length;return Math.round((.55*e+.45*(f.length?h/f.length:1))*100)}(a.chapters,a.factTraces),compliance:function(a,b){let c=cO.filter(b).length/cO.length,d=a.split("\n").map(a=>a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim()).filter(a=>!(!a||/^#{1,6}\s+/u.test(a)||cI(a))&&!/^(?:第[一二三四五六七八九十百\d]+[章节篇]|\d+(?:\.\d+){0,3})\s+[^。;;,,]*$/u.test(a)).join("\n"),e=(0,cH.JD)(d);return Math.round((.8*c+.1*(e.twoStepComplete?1:e.categories.length>0&&e.graded?.6:.3*(e.categories.length>0))+.1*(0,cH.bH)(d).coverage)*100)}(a.markdown,d),executability:await cQ(a.markdown),normalization:function(a){let b=a=>"table"===a.category||"format"===a.category||("structure"===a.category?cT.test(a.message):!a.category&&!cS.test(a.message)&&cR.test(a.message));return Math.max(0,100-8*a.filter(a=>"error"===a.level&&b(a)).length-Math.min(3*a.filter(a=>"warning"===a.level&&b(a)).length,30))}(a.issues),uniqueness:function(a,b){let c=b.forbiddenEmptyPhraseHits,d=b.vagueSemanticSentences,e=100*Math.max(0,b.ratio-.1),f=cV(a),g=Math.max(10,Math.ceil((0,i.V7)(a)/1e4)),h=Math.max(0,f.duplicateInstances-g);return Math.max(0,Math.round(100-4*c-6*d-.5*e-Math.max(60*f.duplicateRate,h)))}(a.markdown,f),moduleCoverageRate:e}}var c$=c(43378),c_=c(31263);async function c0(a){let b=a.items.map(a=>a.trim()).filter(Boolean);if(0===b.length)return{total:0,met:0,partial:0,missing:0,simulatedScore:0,criteria:[]};let c=cY(a.markdown),d=cX(a.markdown).map(a=>a.heading).filter(Boolean),e=cK(a.markdown).join(""),f=await (0,aW.Mv)([...c,...d],b,a.embedDocuments),g=b.map((a,b)=>{let g=(0,ae.pG)(a),h=g.length>0&&g.some(a=>e.includes(a)),i="",j=0;for(let b of c){let c=f(b,a);c>j&&(j=c,i=b)}if(h||j>=aW.Eh)return{index:b,title:a,status:"met",similarity:j,anchor:i?i.split("\n")[0].replace(/^#{1,6}\s+/u,"").slice(0,80):void 0};let k="",l=0;for(let b of d){let c=f(b,a);c>l&&(l=c,k=b)}return l>=aW.Eh?{index:b,title:a,status:"partial",similarity:l,anchor:k.replace(/^#{1,6}\s+/u,"").slice(0,80)}:{index:b,title:a,status:"missing",similarity:l}}),h=g.filter(a=>"met"===a.status).length,i=g.filter(a=>"partial"===a.status).length,j=g.filter(a=>"missing"===a.status).length,k=Math.round((h+.5*i)/g.length*100);return{total:g.length,met:h,partial:i,missing:j,simulatedScore:k,criteria:g}}let c1="quality-caliber-c9.2",c2={version:c1,role:"primary"},c3={version:c1,role:"secondary",relatedTo:"quality-report"},c4={requirement:.3,structure:.15,dataAnchor:.2,professionalDepth:.15,compliance:.1,factIntegrity:.1},c5={anchors:.85,modules:.15},c6={execution:.45,figure:.35,caption:.2,appendix:.75,bodyCompliance:.25},c7={boq:.4,parameters:.3,drawing:.15,authority:.15},c8={selfHarm:.25,placeholder:.2,length:.15,tableConsistency:.2,regulation:.2},c9={reconciliation:.6,binding:.2,keyFacts:.2},da=/规格-数值绑定|名称-数值绑定|合计值/u,db=/编制依据对账缺口/u,dc={selfHarm:/自伤表述/u,placeholder:/占位符|占位式表达/u,length:/正文篇幅/u};function dd(a){let b=a.filter(a=>null!==a.value&&Number.isFinite(a.value));if(0===b.length)return{value:null};let c=b.reduce((a,b)=>a+b.weight,0);return{value:b.reduce((a,b)=>a+b.value*b.weight,0)/c,detail:b.map(a=>a.detail).filter(a=>!!a).join("、")||void 0}}async function de(a,b){if(!b)return{value:null};let c=a.filter(a=>(0,i.V7)(a.content)>=800);if(0===c.length)return{value:null};let d=[],e=await Promise.all(c.map(a=>b.analyze(a.content).catch(b=>{d.push(`${a.title}:${b instanceof Error?b.message:String(b)}`)}))),f=c.map((a,b)=>({title:a.title,analysis:e[b]})).filter(a=>!!a.analysis);if(0===f.length)return{value:null};let g=0,h=[];for(let a of f){let b=(0,ae.Pu)(a.analysis.dimensions),c=(0,ae.lH)(a.title);g+=Math.min(1,b/c),b<c&&h.push(`${a.title} ${b}/12`)}let j=g/f.length*100,k=d.length>0?`;⚠ ${d.length} 章语义分析失败未计入(${d.slice(0,2).join(";")})`:"",l=(h.length>0?`专业深度达标 ${Math.round(j)}(薄弱:${h.slice(0,3).join("、")})`:`专业深度达标 ${Math.round(j)}(全部章达目标线)`)+k;return{value:j,detail:l}}async function df(a){let b=await cZ({markdown:a.markdown,chapters:a.chapters,template:a.template,factTraces:a.factTraces,issues:a.issues,embedDocuments:a.embedDocuments}),c=a.bidComposition?.bidType||"unknown",d=a.tenderRequirements?.extracted&&a.tenderRequirements.entries||[],e=d.length>0?(0,aX.U1)(d,a.markdown):[],f=e.filter(a=>"comply"!==a.entry.policy),g=f.length>0?(()=>{let a=f.filter(a=>a.satisfied).length;return{value:a/f.length*100,detail:`锚点全命中 ${a}/${f.length}`}})():{value:null},h=function(a,b){let c=b.filter(a=>!a.exempt),d=c.filter(a=>a.placed),e=d.length>0?(0,v.R8)(a,d.map(a=>a.itemName)):new Map;return b.length>0?{effectiveRows:c.length,placedRows:d.length,explicitRows:e.size,rate:c.length>0?d.length/c.length:null,exemptRows:b.filter(a=>a.exempt).slice(0,50).map(a=>`${a.itemName}${a.quantity?` ${a.quantity}${a.unit}`:""}`)}:void 0}(a.markdown,a.boqRowTraces||[]),i=dd([{...g,weight:c5.anchors},{...function(a){if(!Number.isFinite(a))return{value:null};let b=Math.round(a*cN.length);return{value:100*a,detail:`强制模块 ${b}/${cN.length}`}}(b.moduleCoverageRate),weight:c5.modules}]),j=function(a){let{markdown:b,mode:c,bidComposition:d,effectiveChapters:e,chapters:f}=a;if("blind"===c){let a=[],c=d?.appendixPlan||[];if(c.length>0){let d=c.filter(a=>(0,ad.cM)(b,a)).length;a.push({weight:c6.appendix,value:d/c.length*100,detail:`附表承载 ${d}/${c.length}`})}if(d?.bodyTablePolicy==="forbidden"){let d=function(a,b){let c=-1;for(let d of b){let b=a.indexOf(`## ${d.title}`);b>=0&&(c<0||b<c)&&(c=b)}let d=c>=0?a.slice(0,c):a;return d.match(/^\s*\|/gmu)?.length||0}(b,c);a.push({weight:c6.bodyCompliance,value:Math.max(0,100-25*d),detail:d>0?`正文禁表 违规 ${d} 处`:"正文禁表合规"})}else{let c=(e||[]).reduce((a,b)=>a+(b.tablePlans?.length||0),0);if(c>0&&e){let b=Math.max(0,c-(0,c$.Xi)(e,f).reduce((a,b)=>a+b.plans.length,0));a.push({weight:c6.execution,value:b/c*100,detail:`表执行 ${b}/${c}`})}let d=(e||[]).filter(a=>(a.tablePlans?.length||0)>0||(a.tableSections?.length||0)>0||(a.diagramRequirements?.length||0)>0).map(a=>a.title),g=(0,ac.NN)(b,{bodyTableForbidden:!1,plannedChapterTitles:d}).length;a.push({weight:c6.bodyCompliance,value:Math.max(0,100-25*g),detail:g>0?`正文未授权表格 违规 ${g} 处`:"正文表格授权合规"});let h=(0,ac.xw)(b,!1);h.total>0&&a.push({weight:c6.caption,value:h.captioned/h.total*100,detail:`题注 ${h.captioned}/${h.total}`})}return dd(a)}let g=[],h=(e||[]).reduce((a,b)=>a+(b.tablePlans?.length||0),0);if(h>0&&e){let a=Math.max(0,h-(0,c$.Xi)(e,f).reduce((a,b)=>a+b.plans.length,0));g.push({weight:c6.execution,value:a/h*100,detail:`表执行 ${a}/${h}`})}let i=(0,c$.cA)({chapters:e});if(i.length>0){let a=(0,c$.F4)(i,b);g.push({weight:c6.figure,value:a.covered/a.total*100,detail:`图类数据表 ${a.covered}/${a.total}`})}let j=(0,ac.xw)(b,d?.bodyTablePolicy==="forbidden");return j.total>0&&g.push({weight:c6.caption,value:j.captioned/j.total*100,detail:`题注 ${j.captioned}/${j.total}`}),dd(g)}({markdown:a.markdown,mode:c,bidComposition:a.bidComposition,effectiveChapters:a.effectiveChapters,chapters:a.chapters}),k=function(a){let{markdown:b,billPlacementAudit:c,parameterUsageAudit:d,drawingFactLock:e,authorityAuditReport:f}=a,g=[];c&&null!==c.rate&&Number.isFinite(c.rate)&&g.push({weight:c7.boq,value:100*c.rate,detail:`BOQ 落位 ${c.placedRows}/${c.effectiveRows}`}),d&&null!==d.rate&&Number.isFinite(d.rate)&&g.push({weight:c7.parameters,value:100*d.rate,detail:`参数 ${d.usedParams}/${d.usedParams+d.relevantMissedCount}`});let h=e?0===e.groups.length?"图纸事实锁无可用分组(无图纸类证据入库)":void 0:"图纸事实锁不可用(未构建或构建失败)";if(e&&e.groups.length>0){let a=(0,c_.SL)(e,b);g.push({weight:c7.drawing,value:100*a.rate,detail:`图纸事实 ${a.referenced.length}/${e.groups.length}`})}if(f){let a=f.unregisteredCount+f.derivationGaps.length+f.processGaps.length;g.push({weight:c7.authority,value:Math.max(0,100-5*a),detail:a>0?`无主数值 缺口 ${a} 处`:"无主数值 0 缺口"})}let i=dd(g);return h&&null!==i.value&&(i.detail=`${i.detail?`${i.detail};`:""}⚠ ${h},图纸分量未计量(本维度按剩余分量重归一)`),i}({markdown:a.markdown,billPlacementAudit:h,parameterUsageAudit:a.parameterUsageAudit,drawingFactLock:a.drawingFactLock,authorityAuditReport:a.authorityAuditReport}),l=await de(a.chapters,a.professionalDepthClassifier),m=function(a,b){let c=b=>a.filter(a=>b.test(a.message)).length,d=c(dc.selfHarm),e=c(dc.placeholder),f=c(dc.length),g=(0,aF.OV)(b),h=cD(b),i=h.declaredNotUsed.length,j=h.usedNotDeclared.length,k=h.stats.declaredCodes+h.stats.declaredNames>0?{weight:c8.regulation,value:Math.max(0,100-(i+j)*20),detail:i+j>0?`编制依据缺口 ${i+j} 处(声明未用 ${i}/引用未声明 ${j})`:"编制依据对账 0 缺口"}:{weight:c8.regulation,value:null};return dd([{weight:c8.selfHarm,value:Math.max(0,100-25*d),detail:d>0?`自伤 ${d} 处`:"自伤 0"},{weight:c8.placeholder,value:Math.max(0,100-25*e),detail:e>0?`占位符 ${e} 处`:"占位符 0"},{weight:c8.length,value:Math.max(0,100-50*f),detail:f>0?`篇幅超限 ${f} 条`:"篇幅达标"},{weight:c8.tableConsistency,value:Math.max(0,100-20*g),detail:g>0?`表内不自洽 ${g} 处`:"表自洽 100%"},k])}(a.issues,a.markdown),n=function(a,b){let c=a.filter(a=>"error"===a.level&&"fact_consistency"===a.category&&!db.test(a.message)),d=c.filter(a=>da.test(a.message)),e=[{weight:c9.reconciliation,value:Math.max(0,100-20*c.length),detail:c.length>0?`对账冲突 ${c.length} 条`:"对账零冲突"},{weight:c9.binding,value:Math.max(0,100-20*d.length),detail:d.length>0?`绑定冲突 ${d.length} 条`:"绑定零冲突"}];return b&&null!==b.rate&&Number.isFinite(b.rate)&&e.push({weight:c9.keyFacts,value:100*b.rate,detail:`关键事实 ${b.placed}/${b.specs}`}),dd(e)}(a.issues,a.keyFactPlacementAudit),o=[{key:"requirement",label:"要求实体响应",...i,weight:c4.requirement},{key:"structure",label:"结构呈现落实",...j,weight:c4.structure},{key:"dataAnchor",label:"数据锚定",...k,weight:c4.dataAnchor},{key:"professionalDepth",label:"专业深度",...l,weight:c4.professionalDepth},{key:"compliance",label:"合规与规范",...m,weight:c4.compliance},{key:"factIntegrity",label:"事实完整与一致性",...n,weight:c4.factIntegrity}],p=o.filter(a=>null!==a.value&&Number.isFinite(a.value)),q=p.reduce((a,b)=>a+b.weight,0),r=q>0?p.reduce((a,b)=>a+b.value*b.weight,0)/q:0,s=p.length,t=o.length,u=q>=.9,w=Math.round(r),x=p.map(a=>({key:a.key,label:a.label,score:Math.round(a.value),weight:a.weight,detail:a.detail})),y=a.issues.filter(a=>"error"===a.level&&(0,ae.R9)(a)).length,z=Math.max(0,Math.min(99,Math.round(w-Math.min(10,3*y)))),A=await cW(a.markdown,a.embedDocuments),B=a.evaluationCriteriaItems&&a.evaluationCriteriaItems.length>0?await c0({items:a.evaluationCriteriaItems,markdown:a.markdown,embedDocuments:a.embedDocuments}):void 0,C=d.length>0?d.map((a,b)=>({text:a.text.slice(0,160),category:a.category,responded:"comply"===a.policy||!!e[b]?.satisfied})):void 0,D="unknown"===c?";⚠ 标书类型未判定(按明标口径)——暗标项目须核对招标文件后重跑":"",E=B?`;评分细则模拟 ${B.simulatedScore}%(met ${B.met} / partial ${B.partial} / missing ${B.missing})`:"",F=z>=95&&0===y&&b.uniqueness>=60&&u,G=F?["已达到当前质量目标,建议保持事实口径和导出前复核。"]:[...u?[]:[`本次仅计量 ${s}/${t} 维(权重覆盖 ${(100*q).toFixed(0)}%,低于下限 90%):重归一分不得作为达标依据,须先补齐缺失维度的计量条件再判定。`],"按对齐评分口径补齐短板维度:要求实体响应补锚点全命中(核心词与数字参数逐条落位)、结构呈现补图表落位、数据锚定补 BOQ/参数/图纸/无主数值溯源、专业深度按章补六维薄弱项、合规与规范清理自伤与占位符并压缩超限篇幅且编制依据与正文双向对齐、事实一致性补关键事实落位与数值对账。","系统需优先修复阻断问题、扩大本地知识库检索、补抽结构化事实,并将未落位事实写入对应章节。"];b.uniqueness<60&&G.push(`低雷同性 ${b.uniqueness} 低于门槛 60:存在与公开模板/通用话术重合的雷同风险,须改写高重合段落后再交付。`);let H=`${u?"":"⚠ "}本次仅计量 ${s}/${t} 维、权重覆盖 ${(100*q).toFixed(0)}%`,I=`交付置信度 ${z}% / 目标 95%,综合评分 ${w}/100(${[...x.map(a=>`${a.label} ${a.score}`),`低雷同性 ${b.uniqueness}`].join("、")});${H}${D}${E};评分口径 ${c1}(主尺)`;return{overall:w,deliveryProbability:z,target:95,passed:F,scores:b,mode:c,dimensions:x,requirementChecklist:C,billPlacementAudit:h,parameterUsageAudit:a.parameterUsageAudit,keyFactPlacementAudit:a.keyFactPlacementAudit,templating:A,caliber:c2,evaluationCriteriaAttainment:B,measurementCoverage:{dimensions:s,totalDimensions:t,weightRatio:q,sufficient:u},summary:I,actions:G}}let dg=new Set(["fact-coverage","overview-recap","internal-terminology-anchor","global-consistency-snapshot","data-consistency-snapshot","clarification-amendment"]);function dh(...a){return a.flat()}var di=c(19898),dj=c(91977),dk=c(51144);function dl(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}async function dm(a){(0,f.Te)(a.signal);let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),d=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),e=Math.ceil((a.highRisk?18:10)*d),g=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),i=Math.ceil((a.highRisk?72:42)*d),j=Math.ceil((a.highRisk?72e3:42e3)*d),k=[...new Set([...a.requiredNeeds||[],...a.extraClues||[]])].slice(0,12),l=(function(a,b=[],c=[]){let d=a.sections||[],e=[...a.requiredFacts,...b,...c],f=(0,dk.C)(d,a=>(0,dk.O)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,g=(0,dk.C)(e,a=>(0,dk.O)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,h=/[、,,与和及]/.test(a.title),i=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),j=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案","基坑支护","基坑开挖","基坑底标高","坡率","支护形式","降水","开挖深度","高支模","专项方案"]:i?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],k=h?[...j,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:j,l=[...new Set([a.title,...f,...g,...k].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],m=(0,dk.C)(l,a=>(0,dk.O)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,n=h?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${f.slice(0,6).join(" ")} ${g.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${f.join(" ")}`.trim(),...g.map(b=>`${a.title} ${b}`.trim()),...f.map(b=>`${a.title} ${b} ${g.slice(0,6).join(" ")}`.trim()),`${a.title} ${k.join(" ")}`.trim(),...n,m.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds,a.extraClues).slice(0,e),m=[...k.map(b=>`${a.chapter.title} ${b} ${(a.chapter.sections||[]).join(" ")}`.trim()).filter(a=>!l.includes(a)).map(a=>({text:a,boost:2,source:"required-fact-evidence"})),...l.map(a=>({text:a,boost:2.4,source:"deep-retrieval"}))];return b.push(...(await (0,f.l$)(m,async b=>{var c;(0,f.Te)(a.signal);let d=await a.manager.search(a.projectRoot,b.text,{scope:"project",filters:{filePaths:a.scopedFilePaths,materialRoots:a.scopedMaterialRoots??(0,di.materialRootsOfFiles)(a.scopedFilePaths)},limit:g,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!0});return(c={chapter:a.chapter,results:d.results,fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:b.boost,source:b.source}).results.map(a=>{let b=c.fileProcessingByPath.get(a.filePath);return{chapterId:c.chapter.id,filePath:a.filePath,score:a.score+c.boost+("table"===b?3:"structured_data"===b?2.6:3.2*("bill_of_quantities"===b)),content:a.content,roleId:c.fileRoleByPath.get(a.filePath),processingType:b,sectionTitle:a.sectionTitle,source:c.source}})},{kind:"deepRetrieval",highRisk:a.highRisk})).flat()),[...(0,h.QR)(b.filter(a=>"required-fact-evidence"===a.source),{maxItems:Math.max(6,3*k.length),maxChars:18e3,preservePinned:!0}),...(0,h.QR)(b.filter(a=>"required-fact-evidence"!==a.source),{maxItems:i,maxChars:j,preservePinned:!0})]}var dn=c(32434),dp=c(36003),dq=c(95734);async function dr(a,b){let c=(0,ac.r4)(a.content);if(0===c.length)return[];let d=[];for(let e of c){let c=e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),f=a.content.match(RegExp(`^###\\s+(?:\\d+(?:\\.\\d+)*[、..\\s]*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^#{2,3}\\s+|$)`,"mu")),g=f?.[1]||"",h=await (0,dp.AI)(e,(0,dp.Ym)(e,a.chapter,a.evidence),b),i=(0,dp.uQ)(e,g,h);i&&d.push(`${e}:${i}`)}return d}function ds(a,b){let c=a.trim();if(!c)return[];let d=Math.max(1e3,Math.ceil(b)),e=[],f=0;for(;f<c.length;){let a=Math.min(f+d,c.length),b=c.lastIndexOf("\n\n",a);(b<=f||a-b>.25*d)&&(b=c.lastIndexOf("\n",a)),(b<=f||a-b>.2*d)&&(b=a),e.push(c.slice(f,b).trim()),f=b}return e.filter(Boolean)}function dt(a){return"string"==typeof a?a:a&&"object"==typeof a&&"message"in a?String(a.message):JSON.stringify(a)}function du(a){let b=Number(process.env[a]);return Number.isFinite(b)&&b>0?Math.ceil(b):0}async function dv(a){var b;(0,f.Te)(a.signal);let c=a.chapters.map(a=>{let b=a.content.replace(/#{1,6}\s+/gu,"").replace(/\*\*/gu,"").replace(/\|/gu," ").replace(/[\n\r]+/gu," ").trim(),c=function(a){let b=[];for(let c of[/(?:总建筑面积|建设规模|总用地面积|总占地面积)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:㎡|m²|m2|平方米)/gu,/(?:合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:万元|亿元|元)/gu,/(?:计划工期|合同工期|总工期|施工周期)[^\n。;;]{0,18}\d+\s*(?:日历天|天|个月|月)/gu,/(?:质量标准|质量目标)[^\n。;;]{0,26}/gu,/(?:找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层)[^\n。;;]{0,24}\d+:\d+(?:\.\d+)?/gu]){let d=[...new Set(a.match(c)||[])].slice(0,4);b.push(...d)}return[...new Set(b.map(a=>a.replace(/\s+/gu," ").trim()).filter(Boolean))].join(";")}(a.content);return`章节:${a.title}
|
|
152
|
+
${e}`,source:function(a){let b=a.toLowerCase();return b.includes(".gov.cn")||b.includes("mohurd")||b.includes("zjt")||a.includes("住建")?"web-policy":"web-evidence"}(b.url),sectionTitle:a.chapterTitle})}}catch(a){e+=1,f.push(`${"string"==typeof g?g:"查询"}:${a instanceof Error?a.message:String(a)}`),console.error("[web-research] 检索查询失败(与「被噪声过滤」分列计数)",a)}return{evidence:c,queries:b,filtered:d,failedQueries:e,failures:f}}var aP=c(65667);let aQ=[{label:"工程名称",factGroups:["project"],patterns:[/工程名称\s*[::]\s*([^\n|]+)/u],locations:"封面、工程概况、页眉页脚、专项方案、表格标题"},{label:"建设地点",factGroups:["project"],patterns:[/建设地点\s*[::]\s*([^\n|]+)/u,/工程地点\s*[::]\s*([^\n|]+)/u],locations:"工程概况、周边环境、扬尘噪声、交通导改、属地化措施"},{label:"总工期",factGroups:["schedule"],patterns:[/总工期\s*[::]\s*([^\n|]+)/u,/计划工期\s*[::]\s*([^\n|]+)/u,/工期目标\s*[::]\s*([^\n|]+)/u],locations:"工程概况、进度计划、横道图、资源计划、纠偏措施"},{label:"建设规模",factGroups:["project","preciseFacts"],patterns:[/建设规模\s*[::]\s*([^|\n]+)/u,/建筑面积\s*[::]\s*([^|\n]+)/u,/道路长度\s*[::]\s*([^|\n]+)/u,/管线长度\s*[::]\s*([^|\n]+)/u],locations:"工程概况、工程量表、施工部署、资源配置"},{label:"机械数量型号",factGroups:["resources"],locations:"机械表、平面布置、进度保障、安全专项方案",kind:"equipment-counts"},{label:"劳动力人数",factGroups:["resources"],patterns:[/劳动力\s*[^\n|]{0,12}(\d+)\s*人/u,/班组\s*[^\n|]{0,12}(\d+)\s*人/u],locations:"劳动力计划、进度节点、抢工方案、工资保障台账"},{label:"危大工程清单",factGroups:["safety","preciseFacts"],patterns:[/危大工程\s*[::]\s*([^\n|]+)/u,/深基坑|高支模|起重吊装|脚手架/u],locations:"安全章节、专项方案、审批表、应急预案"},{label:"环保监测指标",factGroups:["quality","safety","preciseFacts"],patterns:[/PM10|PM2\.5|TSP|噪声|扬尘在线监测/u],locations:"文明施工、扬尘噪声、智慧工地、应急联动"}];function aR(a){return a.replace(/[\s,。;;::|]/gu,"").trim()}let aS=/塔式起重机|履带吊|汽车吊|卷扬机|脚手架|扣件|钢管|模板|噪声|PM2\.5|PM10|TSP|扬尘在线监测|临电|消防|安全网|围挡|洗车台|沉淀池|雾炮/u,aT=/不使用|不采用|不配置|无需|未采用|不得使用|禁止使用/u;function aU(a,b){let c=[];for(let d of b){let b=a[d];if(Array.isArray(b))for(let a of b)a&&"object"==typeof a&&"value"in a&&"string"==typeof a.value&&c.push(a.value)}return c.map(aR).filter(Boolean)}function aV(a,b){return 0===b.length||b.some(b=>b.includes(a)||a.includes(b)||a.length>=4&&b.includes(a.slice(0,4)))}var aW=c(37047),aX=c(63516);let aY=/([\u4e00-\u9fa5A-Za-z0-9()()]{1,12}?)(\d+(?:\.\d+)?)\s*(m²|m³|㎡|mm|cm|m|米|MPa|kN|kV|kW|℃|°C|万元|元|人|天|日|个|层|樘|处|套|台|t|吨)([\u4e00-\u9fa5A-Za-z0-9()()]{0,8})/gu,aZ=["直径","厚度","宽度","长度","高度","深度","间距","距离","标高","偏差","数量","面积","体积","重量","压力","温度","强度","等级","坡度","规格","尺寸","层数","次数","跨度","半径","总长","全长"],a$=["以内","以外","以上","以下","之间","左右","以前","以后","之前","之后"],a_=/^(?:主要|本工程|本项目|全项目)?(?:作业对象|作业内容|施工内容|工作内容|工程内容|施工对象|施工范围|工程规模|建设内容|建设规模)为/u,a0=/^(?:由)?责任[\u4e00-\u9fa5]{0,4}在(?:内)?完成/u,a1=/自然村|村组|标段|区域|点位|养护|地上|地下|建筑高度|[\u4e00-\u9fa5]{1,4}组$/u,a2=/^(?:局部|个别|少数|多数|大部分)/u,a3=["开挖","封闭","回填","浇筑","铺筑","摊铺","供应","编制","提交","签订","安装","养护","试验","拆除","砌筑"],a4=["直径","半径","穴径","胸径","地径","冠幅","厚度","宽度","长度","高度","深度","穴深","间距","距离","标高","坡度","跨度","株距","行距"];function a5(a){return a.replace(/(?:mm|cm|m|MPa|kN|kV|kW|℃|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)/gu,"").replace(/[\s,,、;;::()()]/gu,"")}function a6(a,b){if(/[、/](?:与)?[A-Za-z]?\d/u.test(a))return!0;for(let c of a.matchAll(/[、/](?:与|和|及)?([\p{Script=Han}A-Za-z]{1,8})\d/gu))if(function(a,b){let c=a5(a),d=a5(b);return 0!==c.length&&0!==d.length&&!c.includes(d)&&!d.includes(c)}(c[1]||"",b))return!0;return!1}function a7(a,b){let c=["。",";",";","\n"],d=0;for(let e of c){let c=a.lastIndexOf(e,b-1);c+1>d&&(d=c+1)}let e=a.length;for(let d of c){let c=a.indexOf(d,b);c>=0&&c<e&&(e=c)}return a.slice(d,e)}async function a8(a){let b=function(a){let b=new Map,c=0;for(let d of a.split("\n")){let a=d.trim(),e=c;if(c+=d.length+1,!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let a of d.matchAll(RegExp(aY.source,"gu"))){let c=(a[1]||"").trim(),d=a[2],f=/\d+$/u.exec(c);if(f&&(c=c.slice(0,f.index).trim(),d=`${f[0]}${d}`),/月\s*$/u.test(c))continue;let g=Number(d),h=a[3]||"",i=(a[4]||"").trim(),j=/[与和及][^与和及]{0,12}?\d/u.exec(i),k=j?i.slice(0,j.index):i,l=`${c}${k}`.replace(/[\s,,、;;::]/gu,""),m=l.replace(a_,"").replace(a0,""),n=m.length>=2?m:l;if(n.length<2||!/[\u4e00-\u9fa5A-Za-z]{2,}/u.test(n)||!Number.isFinite(g)||g<=0||aZ.some(a=>n===a||a5(n)===a)||a$.some(a=>a5(n)===a)||a1.test(n)||a2.test(n))continue;let o={matchIndex:e+(a.index||0),valueOffset:function(a,b,c){if(!c)return a.indexOf(b);let d=a.lastIndexOf(c);if(d>=0){let c=d-b.length;if(c>=0&&a.slice(c,d)===b)return c;let e=RegExp(`(${b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")})\\s*$`,"u").exec(a.slice(0,d));if(e&&void 0!==e.index)return e.index}return a.indexOf(b)}(a[0],d,a[3]||""),valueText:d},p=b.get(a[0]);if(p){p.occurrences.push(o);continue}b.set(a[0],{concept:n,value:g,unit:h,raw:a[0],occurrences:[o]})}}return[...b.values()].slice(0,60)}(a);if(b.length<3)return{groups:[]};let c=[...new Set(b.map(a=>a.concept))];if(c.length<2)return{groups:[]};let d=await (0,aW.VN)().embedDocuments(c);if(d.length!==c.length){let a=`本地语义模型嵌入数量不一致:期望 ${c.length} 条,实际 ${d.length} 条`;return console.warn(`[gen] parameter-concept-conflict degraded: ${a}`),{groups:[],degraded:{level:"warning",severity:"warning",category:"format",owner:"system",repairability:"manual_review",message:`参数概念口径冲突检测已降级跳过:${a}`,suggestion:"语义模型输出异常,本轮未执行该检测维度;可稍后重新生成复核。"}}}let e=new Map(c.map((a,b)=>[a,d[b]])),f=function(a,b){let c=new Map(a.map(a=>[a,a])),d=a=>{let b=c.get(a)||a;return b===a?a:(c.set(a,d(b)),c.get(a)||a)},e=(a,b)=>{c.set(d(a),d(b))};for(let c=0;c<a.length;c+=1)for(let d=c+1;d<a.length;d+=1)b(a[c],a[d])>=.6&&e(a[c],a[d]);return c}(c,(a,b)=>{let c=e.get(a),d=e.get(b);if(!c||!d||0===c.length||0===d.length)return 0;let f=Math.min(c.length,d.length),g=0;for(let a=0;a<f;a+=1)g+=c[a]*d[a];return g}),g=a=>{let b=a;for(;(f.get(b)||b)!==b;)b=f.get(b)||b;return b},h=new Map;for(let a of b){let b=g(a.concept),c=h.get(b)||[];c.push(a),h.set(b,c)}let i=[];for(let b of h.values()){if(b.length<2||Math.max(...b.map(a=>a.value))>4*Math.min(...b.map(a=>a.value)))continue;let c=new Map;for(let a of b){let b=c.get(a.unit)||[];b.push(a),c.set(a.unit,b)}for(let b of c.values()){if(b.length<2)continue;let c=new Map;for(let a of b){let b=a4.find(b=>a.raw.includes(b))||"",d=c.get(b)||[];d.push(a),c.set(b,d)}for(let d of[...c.keys()].filter(a=>""!==a).length>=2&&!c.has("")?[...c.values()]:[b]){if(d.length<2)continue;let b=d.map(a=>a3.find(b=>a.raw.includes(b))||"");if(b.length>=2&&b.every(a=>""!==a)&&new Set(b).size===b.length)continue;let c=d.map(a=>/^([\u4e00-\u9fa5]{2,})([一二三四五六七八九十]|\d+)$/u.exec(a.concept)).filter(a=>null!==a);if(c.length===d.length&&c.length>=2&&1===new Set(c.map(a=>a[1])).size&&new Set(c.map(a=>a[2])).size===c.length)continue;let e=d.map(a=>{let b=a.raw.indexOf("按每");return b>=0?a.raw.slice(0,b):null});if(e.every(a=>null!==a)&&!e.some((a,b)=>!!a&&e.some((c,d)=>b!==d&&!!c&&(a===c||a.includes(c)||c.includes(a))))||d.every(b=>b.occurrences.some(c=>/违约金|解除合同|提高至|自第|逾期超过/u.test(a.slice(Math.max(0,c.matchIndex-30),c.matchIndex+b.raw.length+40)))))continue;let f=[...new Set(d.map(a=>a.value))];if(f.length<2)continue;let g=Math.max(...f);if(g-Math.min(...f)<=.02*g)continue;let h=f.reduce((a,b)=>a+b,0);if(![...new Set(d.flatMap(b=>b.occurrences.map(b=>a7(a,b.matchIndex))))].some(b=>/(?:总量|合计|总计|共计)/u.test(b)&&/(?:其中|分别为|分为)/u.test(b)&&d.every(c=>c.occurrences.some(c=>a7(a,c.matchIndex)===b))&&[...b.matchAll(/\d+(?:\.\d+)?/gu)].some(a=>Math.abs(Number(a[0])-h)<=Math.max(.5,.01*h)))&&!(d.filter(b=>b.occurrences.some(c=>{let d=a.slice(c.matchIndex,c.matchIndex+b.raw.length+12),e=a.slice(Math.max(0,c.matchIndex-12),c.matchIndex);return a6(d,b.concept)||a6(e,b.concept)})).length>=2)&&!(d.length>=2&&d.every((a,b)=>d.every((c,d)=>{if(b>=d||a.value===c.value)return!0;let e=a.concept.length<=c.concept.length?a.concept:c.concept,f=a.concept.length<=c.concept.length?c.concept:a.concept;if(e.length>=4&&e.length<f.length&&f.endsWith(e)&&/^[板梁柱墙底顶]/u.test(e))return!0;let g=(0,ah.Qk)(a.concept,c.concept);if(g.length<2)return!1;let h=a.concept.slice(g.start,g.end),i=a.concept.replace(h,""),j=c.concept.replace(h,"");return i.length>0&&j.length>0&&!i.includes(j)&&!j.includes(i)})))&&(i.push({concept:d[0].concept,values:d}),i.length>=4))break}if(i.length>=4)break}if(i.length>=4)break}return{groups:i}}function a9(a){return a.replace(/㎡/gu,"m2").replace(/m²/giu,"m2").replace(/m³/giu,"m3").replace(/\s+/gu,"").toLowerCase()}function ba(a){return a.replace(/[((][^))]*[))]/gu,"").replace(/[\s,,、;;::]/gu,"")}function bb(a,b){let c=b.entries??b.billFactLock?.entries??[];if(0===c.length)return[];let d=Math.max(.01,.001*a.value),e=a9(function(a){let b=a.occurrences[0];if(!b)return a.unit;let c=a.raw.indexOf(b.valueText);return c<0?a.unit:a.raw.slice(c+b.valueText.length)||a.unit}(a)),f=a.occurrences.map(a=>b.markdown.slice(Math.max(0,a.matchIndex-48),a.matchIndex+a.valueOffset+a.valueText.length+48)).join("\n"),g=[];for(let b of c){if(!Number.isFinite(b.quantity)||b.quantity<=0||Math.abs(b.quantity-a.value)>d)continue;let c=a9(b.unit);if(e&&c&&e!==c)continue;let h=function(a,b){let c=ba(a),d=ba(b);if(c.length<2||d.length<2)return!1;if(c===d)return!0;let e=c.length<=d.length?c:d,f=c.length<=d.length?d:c;return e.length>=3&&f.includes(e)}(b.name,a.concept),i=b.villageGroup.trim().length>=2&&f.includes(b.villageGroup.trim());if((h||i)&&(g.push({entry:b,nameRelated:h}),g.length>=8))break}return g}function bc(a,b){if(a.values.length<2)return{verdict:"no-anchor"};let c=b.billFactLock?.entries??[],d=function(a){if(!a)return[];let b=[],c=1,d=(a,d,e,f,g)=>{b.push({seq:c,name:a,description:"",quantity:d,unit:e,section:"",subsection:g,villageGroup:g,sourceFile:f,specQuantityPairs:[]}),c+=1};for(let[b,c]of Object.entries(a)){let a=c.unit||"",e=c.sourceFile||"";for(let f of(Number.isFinite(c.value)&&c.value>0&&d(b,c.value,a,e,""),c.groups||[]))Number.isFinite(f.value)&&!(f.value<=0)&&d(`${b}(${f.group})`,f.value,a,e,f.group)}return b}(b.blueprintQuantities);if(0===c.length&&0===d.length)return{verdict:"no-anchor"};let e=a.values.map(a=>({value:a,matches:bb(a,{markdown:b.markdown,entries:[...c,...d]}),billMatches:bb(a,{markdown:b.markdown,entries:c})}));if(e.every(a=>a.matches.length>0)&&e.every((a,b)=>e.every((c,d)=>b===d||!a.matches.some(a=>c.matches.some(b=>b.entry.seq===a.entry.seq)))))return{verdict:"distinct-lock-entries",entries:e.map(a=>`「${a.matches[0].entry.name}」(${a.value.value}${a.value.unit})`).join("、")};let f=e.filter(a=>a.billMatches.length>0),g=e.filter(a=>0===a.matches.length);if(1===f.length&&g.length>0&&f.length+g.length===e.length){let a=f[0].billMatches.find(a=>a.nameRelated);if(a)return{verdict:"single-lock-entry",lockValue:a.entry.quantity,lockUnit:a.entry.unit,entryName:a.entry.name,nonLock:g.map(a=>a.value)}}return{verdict:"no-anchor"}}async function bd(a,b){let c=await a8(a);if(c.degraded)return[c.degraded];if(0===c.groups.length)return[];let d=[],e=[];for(let f of c.groups){let c=bc(f,{markdown:a,billFactLock:b?.billFactLock,blueprintQuantities:b?.blueprintQuantities});"distinct-lock-entries"===c.verdict?e.push({group:f,entries:c.entries}):d.push(f)}let f=[];if(d.length>0){let a=d.map(a=>`“${a.concept}”出现多个口径:${[...new Set(a.values.map(a=>a.raw))].slice(0,3).join("、")}`);f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`同一参数概念出现多口径数值冲突:${a.join(";")}`,suggestion:"以绑定资料(图纸/清单/规范)裁决口径为准统一数值表述:每个参数概念全文只保留一个口径数值,删除矛盾表述。"})}return e.length>0&&f.push({level:"info",severity:"suggestion",category:"fact_consistency",owner:"system",repairability:"not_repair_needed",message:`参数概念多口径已裁决为不同清单条目口径(不构成冲突):${e.map(({group:a,entries:b})=>`“${a.concept}”对应${b}`).join(";")}`,suggestion:"各数值分别对应不同的工程量清单条目,正文已带条目名区分,无需处理。"}),f}function be(a){return/补疑|补遗|答疑|澄清|更正|修改通知|question|clarif/iu.test(a||"")}let bf=/(\d{1,4})\s*个?\s*日历天/gu,bg=/(20\d{2}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日)/gu,bh=/(?:变更修改为|变更为|澄清为|调整为|更正为|修正为|变更至|调整至)\s*[::]?\s*(\d{1,4})\s*个?\s*日历天/u,bi=/(?:变更修改为|变更为|澄清为|调整为|更正为|修正为|变更至|调整至)\s*[::]?\s*(20\d{2}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日)/u;function bj(a){return`${a.replace(/\s+/gu,"")}日历天`}function bk(a){return a.replace(/\s+/gu,"")}function bl(a){let b=a.filter(a=>a.superseded.length>0);return 0===b.length?"":["【答疑澄清生效口径(硬约束)】招标文件与答疑/澄清文件不一致时,以下为**现行唯一口径**,全文(含进度计划、节点、信息表、正文表述)必须一致使用;被取代的旧值仅在引用澄清原文时可出现,不得作为现行表述:",...b.map(a=>`- ${a.field}:现行为「${a.effective}」;已被取代(不得再作为现行口径):${a.superseded.join("、")}`)].join("\n")}let bm=/(?:澄清|变更|修改|调整为|更正|原(?:为|值)?|原招标|此前)/u,bn="clarification-amendment",bo=/(?:\d|±)/u,bp=/(?:采用|按|执行|为准|不得|应|必须|相当于|统一|计入)/u,bq=/±\s?\d|\d+\s*[*x×]\s*\d+|\d+\s*[::]\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|km|m2|m3|㎡|kg|t|mpa|kpa|kn|mw|kw|kva|kv|v|a|w|pa)|dn\d+/iu;function br(a){return bq.test(a)?0:bI.test(a)?2:1}let bs=/(?:答|回复|答复|回\s*答)\s*[::]/gu,bt=/(?:^|[\n。;;!])\s*(?:#{1,4}\s*)?(?:\d{1,3}\s*[、..))]|问\s*[::]|问题\s*\d{0,2}\s*[::]?)/u,bu=/\d{1,3}\s*(?:[、))]|[..](?!\d))/gu,bv=/[。;;,,\n]/u;function bw(a){return String(a||"").replace(/\s+/gu," ").replace(/^(?:#{1,4}|[-*])\s*/u,"").trim()}function bx(a,b){let c=a.lastIndexOf("\n",Math.max(0,b-1))+1,d=a.indexOf("\n",b);return{start:c,end:-1===d?a.length:d}}function by(a){let b=bw(a),c=Math.max(b.lastIndexOf("?"),b.lastIndexOf("?"));if(c<0)return b;let d=[...b.slice(0,c)].reverse().join(""),e=bv.exec(d),f=e?.index===void 0?c:c-e.index-1;return(f>0?b.slice(0,f+1):b.slice(0,c)).trim()}let bz=RegExp(`${z.yJ}|均改为|全部改为|统一改为|一律改为|改成|改为|暂按|暂定按`,"u"),bA=/(?:不涉及|不需要|不需|无需|不用|不做|不再|取消|去除|删除|不予)/u,bB=/(?:不涉及|取消|去除|删除)/u,bC=/(?:按|依据|参照)[^,。;]{2,40}?(?:执行|实施|施工|计入|做法|说明|要求|考虑)|以[^,。;]{2,24}?为(?:准|分界(?:线|点)?|依据|界限|原则)|^采用[^,。;]{2,40}$/u,bD=/^(?:是|是的|对|对的|可以|可行|可采用|可|需要|需|要|必须|应|应该|均需|均要|均按|同意|确认|有|会)[。!]?$/u,bE=/^(?:无误|正确|无异议|没问题|没有问题|符合)[。!]?$/u,bF=/(?:是否|要不要|需不需要|够不够|能不能|可不可以|可否|能否|多少|多大|多高|多厚|多久|何种|哪些|如何|怎么|为何|为什么|有无|未见|未明确|请明确|请确认|规格|型号|尺寸|材质|做法|要求|标准|标号|强度等级|数量|高度|厚度|宽度|长度|标高|管径|参数|品牌)/u,bG=/^(?:见|详见|参见|参照|参图|详|按图|依图|如图|附图|不在此次|不在本次|不在|无(?:专项)?图)/u,bH=/(?:详见|参见|参照|图集|图号|大样|建施|结施|SW\s*\d|S\s*\d{2}|04S516)/u,bI=/(?:费用|报价|清单|投标人|中标|结算|不予调整|工期|日历天|万元|亿元|元)/u,bJ=/(?:\d|[一二三四五六七八九十两])\s*(?:道|遍|层|次|个|座|套|台|根|块|处|项|只|组|片|扇|樘|米|厚|mm|cm|km|m|㎡|m2|m3|吨|t|kg|kw|kv|kva|v|a|w|j|pa|mpa)/iu,bK=/^(?:(?:是否|请问|请明确|请确认|请设计确认|明确|[而但且并则即故均皆也都又于此该项上述以上其中另另外再需需要应必须全部整体为是])+)/u,bL=/(?:是否|要不要|需不需要|为何|如何|怎么|多少|多大|哪些|需|需要|要|应|应该|必须|可否|能否|全部|均|皆|的)+$/u;function bM(a){let b=String(a||"");return/\d/u.test(b)||bJ.test(b)||"text"!==(0,z.dm)(b)?"strong":"weak"}function bN(a){return String(a||"").split(/[??]/u)[0].replace(bK,"").replace(bL,"").replace(/[??。!!,,、;;::\s]+$/u,"").trim().slice(0,40)}function bO(a){return(function(a){let b=String(a||"").split(/[,,]/u).map(a=>a.trim()).filter(Boolean),c=b.findIndex((a,b)=>b>=1&&bI.test(a));return(c>0?b.slice(0,c):b).join(",")})(String(a||"").split(/[??]/u)[0]).replace(/^[,,、。;;::\s]+/u,"").replace(/^(?:是的|是|对|对的|可以|可行|需要的?|需要)[,,、]+/u,"").replace(/[??。;;!!]+$/u,"").replace(/(?:再|重新)?(?:喷涂|涂刷|刷|做|施工|采用|设置|进行|安装|铺设|设置)+$/u,"").replace(/(?:是否|需不需要|需要|需|应|应该|必须|均|皆|要|可行|可以|吗|呢|吧)+$/u,"").trim().slice(0,60)}function bP(a){return String(a||"").split(/[。;;,,??\n]/u).map(a=>a.trim()).filter(Boolean)}function bQ(a){let b=[];for(let c of bP(a)){let a=/^(.*?)(?:均为|皆为|采用|为|按|用|做)(.+)$/u.exec(c);if(!a)continue;let d=bN(a[1]||""),e=bO((a[2]||"").replace(/^(?:何|为何|如何|怎么)?(?:均为|皆为|采用|为|做|用|按)/u,""));!(d.length<2)&&!(e.length<2)&&!(e.length>24)&&(bI.test(e)||bH.test(e)||b.push({object:d,complement:e}))}return b}function bR(a){return{text:a,strength:bM(a)}}function bS(a){let b=a.before[0]?.text;return"cancel"===a.kind?`- ${a.object}:${a.after}${b?`——修正前形态「${b}」不得再作为现行做法`:"——不得再作为现行做法"}`:"replace"===a.kind&&b?`- ${a.object}:修正后「${a.after}」;修正前「${b}」为被取代形态,不得作为现行做法`:`- ${a.object}:${a.after}`}let bT=(0,p.eA)("未标注来源的资料"),bU=/(?:不采用|不设置|不设|不需要|不需|无需|不予|不再|不做|不考虑|不进行|不涉及|取消)/u,bV=["电梯","幕墙","智能化","消防","暖通","给排水","电气","燃气","人防","室外","园林","绿化","景观","钢结构","防水","保温","门窗","通风","空调","防雷","接地","动力","照明","拆除","加固","装修","装饰"];var bW=c(68977);let bX=(a,b)=>{let c=b.exec(a);if(!c)return;let d=Number(c[1]);return Number.isFinite(d)&&d>0?d:void 0},bY=[{name:"基坑支护与降水工程",aliases:["基坑支护","基坑工程","降排水","降水井"],applicable:a=>{let b=bX(a,/(?:基坑)?开挖深度[约为达至]{0,3}(\d+(?:\.\d+)?)\s*m/u);return void 0!==b&&b>=(bW.gQ.基坑工程.hazardous[0].value??3)}},{name:"高大模板支撑工程",aliases:["高大模板","高支模","模板支撑体系","模板支撑"],applicable:a=>{let b=bX(a,/(?:模板)?支撑(?:体系)?(?:搭设)?高度[约为达至]{0,3}(\d+(?:\.\d+)?)\s*m/u),c=bX(a,/(?:施工(?:总)?荷载|集中线荷载)[约为达至]{0,3}(\d+(?:\.\d+)?)\s*kN/u);return void 0!==b&&b>=(bW.gQ.模板工程及支撑体系.hazardous[0].value??5)||void 0!==c&&c>=15||/高支模|高大模板/u.test(a)}},{name:"脚手架工程",aliases:["脚手架","落地式钢管脚手架","悬挑式脚手架","悬挑脚手架"],applicable:a=>{let b=bX(a,/(?:落地式|悬挑式)?(?:钢管)?脚手架(?:搭设)?高度[约为达至]{0,3}(\d+(?:\.\d+)?)\s*m/u);return void 0!==b&&b>=(bW.gQ.脚手架工程.hazardous[0].value??24)||/悬挑(?:式)?脚手架/u.test(a)}},{name:"起重吊装及安装拆卸工程",aliases:["起重吊装","塔吊","塔式起重机","汽车吊","履带吊","起重机械安拆","物料提升机","提升机","起重机械","吊装"],applicable:a=>!!/塔吊|塔式起重机|汽车吊|履带吊|吊车|起重机械|起重设备|起重机|卷扬机|物料提升机|提升机|电动葫芦/u.test(a)||/起重伤害|非常规起重|起吊重量|吊装重量|吊装荷载/u.test(a)&&!/(?:不涉及|不存在|不属于|未涉及)[^。;\u000A]{0,16}危大|(?:不涉及|不存在|不属于|未涉及)[^。;\u000A]{0,16}危险性较大|(?:参数|高度|深度)[^。;\u000A]{0,12}未达[^。;\u000A]{0,60}危大/u.test(a)},{name:"吊篮作业工程",aliases:["吊篮","高处作业吊篮","电动吊篮"],applicable:a=>/吊篮/u.test(a)},{name:"拆除工程",aliases:["拆除工程","爆破拆除","机械拆除"],applicable:a=>/拆除工程(?![量])|爆破拆除/u.test(a)}];function bZ(a){let b=a.split(/\r?\n/u),c=[];return b.forEach((a,d)=>{/危大/u.test(a)&&c.push(...b.slice(Math.max(0,d-6),Math.min(b.length,d+7)))}),c.join("\n")}function b$(a){let b=bY.filter(b=>b.applicable(a)),c=bZ(a);return{applicableNames:b.map(a=>a.name),zonePresent:""!==c,missingNames:""===c?b.map(a=>a.name):b.filter(a=>!a.aliases.some(a=>c.includes(a))).map(a=>a.name)}}function b_(a,b){let c=bZ(a);return b.filter(a=>{let b=bY.find(b=>b.name===a);return!!b&&!b.aliases.some(a=>c.includes(a))})}let b0=/[二三四五六七八九十\d]{1,4}\s*个?\s*阶段/u,b1={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};function b2(a){return/(\d+|[一二三四五六七八九十]+)\s*个?\s*阶段/u.exec(a)?.[1]??null}function b3(a){let b=a.map(b2).filter(a=>null!==a).map(a=>/^\d+$/u.test(a)?parseInt(a,10):/^[一二三四五六七八九十]+$/u.test(a)?"十"===a?10:1===a.length?b1[a]??null:a.startsWith("十")?10+(b1[a[1]]??0):a.endsWith("十")?(b1[a[0]]??0)*10:(b1[a[0]]??0)*10+(b1[a[2]]??0):null).filter(a=>null!==a);return 0===b.length?null:1===new Set(b).size?b[0]:null}async function b4(a){let b=[...new Set(a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\|)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.replace(/\s+/gu,"").trim()).filter(a=>{var b;if(a.length<8||a.length>60)return!1;let c=b0.exec(a);return null!==c&&(b=c.index,!/[、,,]/u.test(a.slice(Math.max(0,b-12),b)))}))];if(b.length<2)return[];let c=await (0,aW.Mv)(b,b),d=b.map((a,b)=>b),e=a=>{let b=a;for(;d[b]!==b;)b=d[b];let c=a;for(;d[c]!==b;){let a=d[c];d[c]=b,c=a}return b},f=(a,b)=>{d[e(b)]=e(a)};for(let a=0;a<b.length;a+=1)for(let d=a+1;d<b.length;d+=1)c(b[a],b[d])>=.62&&f(a,d);let g=new Map;for(let a=0;a<b.length;a+=1){let c=e(a),d=g.get(c)||[];d.push(b[a]),g.set(c,d)}if(g.size<2||new Set([...g.values()].map(b3).filter(a=>null!==a)).size<2)return[];let h=[...g.values()].map(a=>a.sort((a,b)=>b.length-a.length)[0]).slice(0,4);return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`施工阶段划分口径不统一:正文出现 ${g.size} 种互异阶段划分口径(${h.map(a=>`“${a.slice(0,16)}”`).join("、")})`,suggestion:"全文统一阶段划分口径:以总进度计划/施工部署章节的划分为唯一口径,其余章节划分句逐字对齐或删除。"}]}var b5=c(41991);let b6=/应急预案|应急措施|应急响应|应急救援|突发事件|应急管理|应急物资|应急演练|应急组织|应急保障/u,b7=/应急|突发|救援|预案|抢险|疏散/u,b8=["应急预案的编制与响应流程","突发事件应急处置措施","应急救援组织体系与保障"],b9=["应急照明系统安装调试","应急电源配置与切换方案"],ca={organization:"应急管理领导小组、应急救援队伍的组织机构与职责分工",procedure:"应急处置程序、应急响应流程与应急演练安排",resource:"应急物资、应急器材设备的储备与保障措施"},cb=/应急物资|急救箱|灭火器|沙袋|发电机|水泵|对讲机|应急照明|应急灯|防护服|救援绳|救生衣|铁锹|编织袋|抽水泵|警示带|应急器材/u,cc=/配备|储备|保障|配置|数量|不少于|共计|套|具|个|台|把|只/u,cd=["应急物资储备清单与配备数量","应急救援器材的配置与保障"],ce=["应急照明灯具数量与回路设计","应急电源的电气系统设计"];async function cf(a){return(0,b5.A)({prototypes:[...b8],negativePrototypes:[...b9],embedDocuments:a})}async function cg(a){return(0,b5.A)({prototypes:[...cd],negativePrototypes:[...ce],embedDocuments:a})}async function ch(a,b){let c=a.split(/\r?\n/u),d=[],e=c.map(a=>{let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b)return{level:b[1].length,title:b[2].replace(/^\d+(?:\.\d+)*\s+/u,"").trim()}}).filter(a=>void 0!==a).filter(a=>!b6.test(a.title)&&b7.test(a.title)),g=await cf(b),h=e.length>0?await g(e.map(a=>a.title)):[],i=new Set(e.filter((a,b)=>h[b]).map(a=>a.title)),j=a=>b6.test(a)||i.has(a),k=!1,l=[],m=[],n="",o=0;for(let a of c){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b){let a=b[1].length,c=b[2].replace(/^\d+(?:\.\d+)*\s+/u,"").trim();if(j(c)){k=!0,l.push(c);continue}a<=3&&k&&(k=!1);continue}if(k&&a.trim()&&!/^\s*\|/u.test(a)){m.push(a);let b=a.replace(/\s+/gu,"");n+=b,o+=b.length}}if(0===l.length)return d;let p=[];o<300&&p.push(`字数仅 ${o} 字(要求 ≥300 字)`);let q=n.match(/.{1,200}/gu)||[],r=Object.values(ca),s=await (0,aW.Mv)(q,r),t=a=>q.some(b=>s(b,a)>=aW.Eh);t(ca.organization)||p.push("应急组织体系"),t(ca.procedure)||p.push("应急处置程序/演练");let u=await cg(b),v=m.join("。").split(/[。;;]/u).map(a=>a.trim()).filter(a=>cb.test(a)&&cc.test(a)),w=v.length>0?await u(v):[];return t(ca.resource)||w.some(Boolean)||p.push("应急物资保障"),p.length>0&&d.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`应急预案小节深度不足:${l.join("、")}(缺少:${p.join("、")})`,suggestion:"补写应急组织体系(领导小组/抢险队与职责)、应急处置程序与演练安排、应急物资清单与保障措施,达到可落地深度。",sectionTitle:l[0],provenance:{detectorId:"emergency-section-depth",fingerprint:(0,f.c6)(a)}}),d}var ci=c(70208),cj=c(91943),ck=c(54185);let cl=/(?:GB|JGJ|CJJ|JTG|SL|DB|DL|YS|HG|DBJ)[\s/T]*\d{1,2}[\s/-]?(?:T[\s/]*)?\d{2,4}(?:[\s/-]\d{1,4})?/gu,cm=/《[^《》\r\n]{2,60}?》/gu,cn=/(?:规范|标准|规程)$/u;function co(a){return[...a.matchAll(cl)].map(a=>a[0])}function cp(a){return[...a.matchAll(cm)].map(a=>a[0].replace(/《|》/gu,""))}function cq(a){return a.replace(/[!-~]/gu,a=>String.fromCharCode(a.charCodeAt(0)-65248)).replace(/\u3000/gu," ")}function cr(a){return cq(a).replace(/[\s\u200b-\u200d\ufeff]/gu,"").replace(/[—–-]/gu,"-").toUpperCase()}function cs(a){return cq(a).replace(/《|》/gu,"").replace(/[((][^))]{0,40}[))]/gu,"").replace(/[\s\u200b-\u200d\ufeff]/gu,"")}function ct(a){return cn.test(cs(a))}function cu(a,b){let c=cr(a),d=cr(b);if(!c||!d)return!1;if(c===d)return!0;let e=c.length<=d.length?c:d,f=c.length<=d.length?d:c;return RegExp(`^${e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}-\\d{4}$`,"u").test(f)}function cv(a,b){let c=cs(a),d=cs(b);return!!c&&!!d&&(c===d||!(c.length<4)&&!(d.length<4)&&(c.includes(d)||d.includes(c)))}let cw=/^[\s()()【】[\]、,,;;::·.及和与]*$/u;function cx(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=cq(c),d=[];for(let b of a.matchAll(cl)){let a=b.index??0;d.push({type:"code",value:c.slice(a,a+b[0].length),index:a,end:a+b[0].length})}for(let b of a.matchAll(cm)){let a=b.index??0;d.push({type:"name",value:c.slice(a+1,a+b[0].length-1),index:a,end:a+b[0].length})}if(0===d.length)continue;d.sort((a,b)=>a.index-b.index);let e=new Map,f=new Set;d.forEach((a,b)=>{if("code"!==a.type)return;let g=e=>{for(let g of"left"===e?d.slice(0,b).map((a,c)=>b-1-c):d.slice(b+1).map((a,c)=>b+1+c)){let b=d[g];if("name"!==b.type||f.has(g))continue;let h="left"===e?c.slice(b.end,a.index):c.slice(a.end,b.index);if(!cw.test(h))break;return g}return -1},h=g("left"),i=h>=0?h:g("right");i>=0&&(e.set(b,i),f.add(i))});let g=new Set;d.forEach((a,c)=>{if(!g.has(c))if("code"===a.type){let f=e.get(c);void 0!==f?(b.push({code:a.value,name:d[f].value}),g.add(f)):b.push({code:a.value}),g.add(c)}else f.has(c)||(b.push({name:a.value}),g.add(c))})}return b}function cy(a,b){let c=a.indexOf(b);if(c<0)return"";let d=Math.max(0,c-24),e=Math.min(a.length,c+b.length+24);return a.slice(d,e).replace(/\s+/gu," ").trim()}function cz(a){let b=[];for(let c of a){let a=b.findIndex(a=>!!(a.code&&c.code&&cu(a.code,c.code)||a.name&&c.name&&cv(a.name,c.name)));if(a<0){b.push(c);continue}"pair"===c.kind&&"pair"!==b[a].kind&&(b[a]=c)}return b}let cA=/编制依据|编制说明|编制原则|编制目的/u;function cB(a){let b=(0,ae.UO)(a);if(0===b.length)return b;let c=b.filter(a=>cA.test(a.title));if(0===c.length)return b;let d=a.split(/\r?\n/u);return c.reduce((a,b)=>a+cx([b.title,...d.slice(b.start+1,b.end)].join("\n")).length,0)>0?c:b}function cC(a){let b=a.split(/\r?\n/u);return cB(a).map(a=>[a.title,...b.slice(a.start+1,a.end)].join("\n")).join("\n")}function cD(a){let b=cB(a),c=cC(a),d=a.split(/\r?\n/u),e=new Set;for(let a of b)for(let b=a.start;b<a.end;b+=1)e.add(b);let f=d.filter((a,b)=>!e.has(b)).join("\n"),g=cx(c),h=cx(f),i=g.filter(a=>a.code).map(a=>a.code),j=g.filter(a=>a.name).map(a=>a.name),k=h.filter(a=>a.code).map(a=>a.code),l=h.filter(a=>a.name).map(a=>a.name),m=function(a){let b=[];for(let c of a.split(/\r?\n/u))if(c.trim())for(let a of c.trim().startsWith("|")?c.split("|"):c.split(/[、,,;;]/u)){let c=a.trim();!(c.length<4||c.length>40||c.includes("《"))&&cn.test(cs(c))&&b.push(c)}return b}(f),n=a=>k.some(b=>cu(a,b)),o=a=>l.some(b=>cv(a,b))||m.some(b=>cs(b)===cs(a)),p=a=>i.some(b=>cu(b,a)),q=a=>j.some(b=>cv(b,a)),r=[];for(let a of g){let b=!a.code||n(a.code)||!!a.name&&o(a.name),c=!a.name||o(a.name)||!!a.code&&n(a.code);a.code&&!b&&a.name&&ct(a.name)?r.push({kind:"pair",value:a.name,code:a.code,name:a.name,counterpart:a.code}):a.code&&!b?r.push({kind:"code",value:a.code,code:a.code,counterpart:a.name}):a.name&&ct(a.name)&&!c&&r.push({kind:"name",value:a.name,name:a.name,counterpart:a.code})}let s=[];for(let a of h){let b=!a.code||p(a.code)||!!a.name&&q(a.name),c=!a.name||q(a.name)||!!a.code&&p(a.code);a.code&&!b&&a.name&&ct(a.name)?s.push({kind:"pair",value:a.name,code:a.code,name:a.name,context:cy(f,a.code)}):a.code&&!b?s.push({kind:"code",value:a.code,code:a.code,context:cy(f,a.code)}):a.name&&ct(a.name)&&!c&&s.push({kind:"name",value:a.name,name:a.name,context:cy(f,`《${a.name}》`)})}return{declaredNotUsed:cz(r),usedNotDeclared:cz(s),stats:{declaredCodes:i.length,declaredNames:j.length,usedCodes:k.length,usedNames:l.length}}}function cE(a){return"pair"===a.kind?`《${a.name}》(${a.code})`:"code"===a.kind?`标准编号「${a.value}」`:`《${a.value}》`}async function cF(a){let b=await (0,ae.Z2)(a.markdown,a.factsModel,{scopeClassifier:a.factTokenScopeClassifier}),c=new Set((a.truthValues||[]).flatMap(a=>a.superseded||[]).map(a=>(0,w.K3)(a))),d=(0,aX.Uk)(a.tenderRequirements).map(({item:a})=>(0,aX.E6)(a)),e=a.markdown.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>(0,aX.NT)(a)).filter(Boolean).slice(0,80),g=(0,s.s3)(a.markdown,s.ev),h=await (0,aW.Mv)(d,[...e,...g]),j=await (0,aW.Mv)(a.evaluationCriteriaItems||[],e),k=new Map((await Promise.all(a.chapters.map(async b=>[b.title,await a.professionalDepthClassifier.analyze(b.content)]))).filter(a=>!!a[1]));return[...(0,o.yT)("toc-consistency",()=>a.promptDocumentRules?.forbidToc?[]:[...(0,ae.gN)(a.markdown),...(0,ae.f8)(a.markdown)]),...(0,o.yT)("section-numbering",()=>(0,ae.Jn)(a.markdown)),...(0,o.yT)("section-count-overflow",()=>(0,ae.VW)(a.chapters)),...(0,o.yT)("heading-duplicate",()=>(0,ae.kw)(a.markdown)),...(0,o.yT)("structure-integrity",()=>(0,cj.dC)(a.markdown,{excludeKinds:["truncated-line"]})),...(0,o.yT)("truncated-sentence",()=>(0,cj.kj)(a.markdown)),...(0,o.yT)("templated-label",()=>(0,ck.D9)(a.markdown)),...(0,o.yT)("title-integrity",()=>(0,ck.uw)(a.markdown)),...(0,o.yT)("evaluation-criteria-coverage",()=>(0,ae.wl)(a.markdown,a.evaluationCriteriaItems||[],{semanticSimilarity:j})),...await (0,o.ll)("requirements-coverage",()=>(0,aX.tH)({markdown:a.markdown,entries:(0,aX.Uk)(a.tenderRequirements).map(({item:a})=>a),bodyTexts:g,semanticSimilarity:h})),...(0,o.yT)("fabricated-start-date",()=>(0,s.cf)(a.markdown,a.factsModel,a.materialEvidence)),...(0,o.yT)("field-value-mismatch",()=>(0,s.a8)(a.markdown,a.factsModel)),...(0,o.yT)("area-arithmetic",()=>(0,s.u2)(a.markdown)),...(0,o.yT)("resource-consistency",()=>(0,s.rA)(a.markdown,{laborPeakAuthority:(0,ag.yB)(a.blueprintData)})),...(0,o.yT)("node-schedule-consistency",()=>(0,s.Et)(a.markdown)),...(0,o.yT)("cross-section-numeric-conflict",()=>(0,s.H)(a.markdown)),...(0,o.yT)("fact-reconciliation",()=>(0,ai.az)({markdown:a.markdown,billFactLock:a.billFactLock,blueprintData:a.blueprintData,factsModel:a.factsModel})),...(0,o.yT)("greening-maintenance-mismatch",()=>(0,s.x5)(a.markdown,a.factsModel)),...(0,o.yT)("street-light-count-mismatch",()=>(0,s.Tz)(a.markdown,a.factsModel)),...(0,o.yT)("spec-location-mismatch",()=>(0,s.$$)(a.markdown,a.factsModel.specAuthorityMap)),...await (0,o.ll)("blueprint-citation-consistency",async()=>a.blueprintData?(await (0,t.dr)(a.markdown,a.blueprintData)).filter(a=>"error"===a.level):[]),...await (0,o.ll)("cross-project-value-copy",()=>(0,s.iy)(a.markdown,(0,ag.L$)(a.blueprintData))),...(0,o.yT)("phase-labor-mixing",()=>(0,s.cv)(a.markdown,(0,ag.i2)(a.blueprintData))),...(0,o.yT)("equipment-batch-conflict",()=>(0,s.KE)(a.markdown,(0,ag.Be)(a.blueprintData))),...(0,o.yT)("preliminary-action-timing",()=>(0,s.fg)(a.markdown,a.blueprintData?.contract.totalDays)),...(0,o.yT)("foundation-form-residue",()=>(0,s.ex)(a.markdown)),...(0,o.yT)("ambiguous-either-or",()=>(0,s.Fr)(a.markdown)),...(0,o.yT)("excavation-depth-lock",()=>(0,s.bq)(a.markdown)),...(0,o.yT)("excavation-hazard-classification",()=>(0,s.LA)(a.markdown,a.factsModel)),...(0,o.yT)("support-form-fact-consistency",()=>(0,s.ek)(a.markdown,a.factsModel)),...(0,o.yT)("equipment-entry-timing",()=>(0,s.fQ)(a.markdown,a.factsModel)),...(0,o.yT)("fabricated-award",()=>(0,s.hu)(a.markdown,a.factsModel,a.tenderRequirements)),...(0,o.yT)("bidder-qualification-section",()=>(0,s.Rv)(a.markdown)),...(0,o.yT)("cross-chapter-duplicate-section",()=>(function(a,b){let c=a=>a.replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").replace(/[\s,,、]/gu,""),d=new Map;a.forEach((a,b)=>{let c=(0,ci.GQ)(a.title).replace(/[\s,,、]/gu,"");c&&!d.has(c)&&d.set(c,b)});let e=new Map,f=new Map;a.forEach((a,b)=>{let d=new Set;for(let g of(a.content||"").split(/\r?\n/u)){let a=/^###\s+(.+?)\s*$/u.exec(g.trim());if(!a)continue;let h=c(a[1]);if(h.length<8||d.has(h))continue;d.add(h),f.has(h)||f.set(h,a[1].replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").trim());let i=e.get(h)||[];i.push(b),e.set(h,i)}});let g=new Map;b.forEach(a=>{let b=d.get((0,ci.GQ)(a.title).replace(/[\s,,、]/gu,""));if(void 0!==b)for(let d of a.sections||[]){let a=c(d);if(a.length<8)continue;let e=g.get(a)||[];e.includes(b)||e.push(b),g.set(a,e)}});let h=[];for(let[b,c]of e){if(c.length<2)continue;let d=g.get(b)||[];if(d.length>=2)continue;let e=1===d.length?d[0]:c[0],i=f.get(b)||b;for(let b of c){if(b===e)continue;let c=a[b];h.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:c.id,sectionTitle:i,message:`跨章同名小节:“${i}”已在「${a[e].title}」落位,本章(「${c.title}」)同名小节属跨章串章重复,须改写归并`,suggestion:"同一主题小节全文只保留一处(归属章);非归属章的同名小节:内容与本章主题相关则改写标题为可区分的具体主题并归并内容,与本章无关则整节删除(含标题行);修复后全文不得再出现跨章同名小节。"})}}return h})(a.chapters,a.effectiveChapters||a.template.chapters||[])),...(0,o.yT)("basic-info-schedule-field",()=>(0,s.cT)(a.markdown)),...(0,o.yT)("duplicate-table",()=>(0,s.ub)(a.markdown)),...(0,o.yT)("duplicate-paragraph",()=>(0,s.cl)(a.markdown)),...(0,o.yT)("paragraph-near-duplicate",()=>(0,aF.w9)(a.markdown)),...(0,o.yT)("paragraph-tail-repeat",()=>(0,s.AD)(a.markdown)),...(0,o.yT)("collision-numbered-heading",()=>(0,s.xR)(a.markdown)),...(0,o.yT)("inverted-date-range",()=>(0,s.jP)(a.markdown)),...(0,o.yT)("resource-triad-section-hierarchy",()=>(0,s.zP)(a.markdown)),...await (0,o.yT)("support-system-conflict",()=>(0,s.r8)(a.markdown,(0,s.P3)(a.factsModel))),...(0,o.yT)("dangerous-list-consistency",()=>(0,s.vH)(a.markdown)),...(0,o.yT)("hazard-exclusion-contradiction",()=>(0,s.m6)(a.markdown)),...await (0,o.yT)("six-hundred-percent-coverage",()=>(0,s.sn)(a.markdown,{chapterTitles:(a.effectiveChapters||a.template.chapters||[]).map(a=>a.title)})),...await (0,o.yT)("self-undermining-candidate",()=>(0,s.YN)(a.markdown)),...(0,o.yT)("paragraph-opening-repeat",()=>(0,s.y2)(a.markdown)),...(0,o.yT)("flow-form-repeat",()=>(0,ck.Q9)(a.markdown)),...(0,o.yT)("skeleton-fingerprint",()=>(0,ck.o0)(a.markdown)),...(0,o.yT)("sentence-pattern-repeat",()=>(0,ck.TN)(a.markdown)),...(0,o.yT)("repeated-word",()=>(0,s.Xc)(a.markdown)),...await (0,o.yT)("commercial-data-in-body",()=>(0,s.mC)(a.markdown)),...(0,o.yT)("overview-recap",()=>(0,s.l4)(a.markdown)),...(0,o.yT)("closure-phrase-density-cap",()=>(0,s.dF)(a.markdown)),...await (0,o.ll)("parameter-concept-conflict",()=>bd(a.markdown,{billFactLock:a.billFactLock,blueprintQuantities:a.blueprintData?.quantities})),...await (0,o.ll)("internal-terminology-anchor",()=>(0,af.WT)(a.markdown)),...(0,o.yT)("construction-system-coverage",()=>(function(a){let b=[...new Set(a.flatMap(a=>bV.filter(b=>a.title.includes(b))))];if(0===b.length)return[];let c=a.map(a=>a.content||"").join("\n"),d=b.filter(a=>!c.includes(a));if(0===d.length)return[];let e=a.find(a=>d.some(b=>a.title.includes(b)));return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`章节大纲涉及的专业工程系统在正文零覆盖:${d.join("、")}`,suggestion:"对应章节必须补写该专业工程的施工方案正文(施工概况/施工流程/施工方法,含可核实的工艺参数),不得整章零覆盖。",chapterId:e?.id}]})(a.chapters)),...(0,o.yT)("dangerous-applicability",()=>(function(a){let b=b$(a);return 0===b.applicableNames.length?[]:b.zonePresent?0===b.missingNames.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程辨识清单遗漏适用项:${b.missingNames.join("、")}(正文已出现适用前提但辨识清单未列入)`,suggestion:"按建办质〔2018〕31号逐项辨识:将遗漏项补入危大工程辨识清单并标注分级,超过一定规模的专项施工方案需专家论证。"}]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文出现危大工程适用前提(${b.applicableNames.join("、")})但全文未编制危大工程辨识清单`,suggestion:"必须编制危大工程辨识清单:按建办质〔2018〕31号逐项辨识并标注分级,超过一定规模的专项施工方案需专家论证。"}]})(a.markdown)),...(0,o.yT)("innovation-tech-coverage",()=>(0,ae.Ef)(a.markdown,a.effectiveChapters||a.template.chapters||[])),...(0,o.yT)("instruction-like-heading",()=>(0,ae.K1)(a.markdown)),...(0,o.yT)("formal-heading-hierarchy",()=>(0,ae.Fv)(a.markdown)),...(0,o.yT)("formal-content-integrity",()=>(0,ae.k0)(a.markdown)),...(0,o.yT)("punctuation-artifact",()=>(0,ae.vZ)(a.markdown)),...(0,o.yT)("table-quality",()=>(0,ae.NS)(a.markdown)),...(0,o.yT)("table-spam",()=>(0,ae.SN)(a.markdown)),...(0,o.yT)("basis-regulations-coverage",()=>(0,ae.AN)(a.markdown,a.blueprintData,{chapterTitles:(a.effectiveChapters||a.template.chapters||[]).map(a=>a.title)})),...(0,o.yT)("basis-regulations-cross",()=>(function(a){let b=cD(a);if(b.stats.declaredCodes+b.stats.declaredNames===0)return[];let c=[],d=b.usedNotDeclared,e=b.declaredNotUsed;for(let a of d.slice(0,12))c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:正文引用${cE(a)}未列入编制依据小节${a.context?`(证据:…${a.context}…)`:""}`,suggestion:"请将该标准名称及编号按编号族补入编制依据小节同类目(与正文引用形态一致),不得改动正文既有引用。"});if(d.length>12){let a=d.slice(12);c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:正文另有 ${a.length} 处引用标准未列入编制依据小节(${a.slice(0,6).map(cE).join("、")} 等)`,suggestion:"请统一核对编制依据小节与正文引用清单,补齐全部未声明标准条目。"})}for(let a of e.slice(0,12))c.push({level:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:编制依据小节的${cE(a)}在正文无引用`,suggestion:"请在对应施工章节的工序/验收要求中落位该标准(或从未使用的编制依据中移除),保持编制依据与正文一一对应。"});if(e.length>12){let a=e.slice(12);c.push({level:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:编制依据小节另有 ${a.length} 条声明在正文无引用(${a.slice(0,6).map(cE).join("、")} 等)`,suggestion:"请统一核对编制依据与正文引用清单,未使用条目在正文落位或从编制依据移除。"})}return c})(a.markdown)),...(0,o.yT)("resource-breakdown-consistency",()=>(0,ae.EJ)(a.markdown,a.blueprintData,a.billFactLock)),...(0,o.yT)("section-content-integrity",()=>(0,ae.qK)(a.markdown,a.chapters)),...(0,o.yT)("professional-content",()=>(0,ae.ji)(a.chapters,k)),...(0,o.yT)("professional-score",()=>(0,ae.i0)(a.chapters,k)),...(0,o.yT)("generic-professional-content",()=>(0,ae.ST)(a.chapters,k)),...(0,o.yT)("management-measure-number",()=>(0,ae.xX)(a.chapters,k)),...await (0,o.yT)("closed-loop-density",()=>(0,ae.Zu)(a.markdown)),...await (0,o.yT)("cross-chapter-consistency",()=>(0,ae.qm)(a.markdown,a.factsModel,a.scopeConflicts,k)),...await (0,o.yT)("process-spec-conflict",()=>(0,ae.hr)(a.markdown,a.factsModel)),...(0,o.yT)("evidence-usage-coverage",()=>aC(a.markdown,a.factsModel)),...await (0,o.yT)("paragraph-generic",()=>aD(a.markdown,a.professionalDepthClassifier)),...await (0,o.yT)("construction-org-generic-language",()=>(0,aA.Fw)(a.chapters)),...(0,o.yT)("construction-org-control-loop",()=>(0,aA.Hl)(a.chapters)),...(0,o.yT)("construction-org-professional-chain",()=>(0,aA.iX)({markdown:a.markdown,factsModel:a.factsModel,chapters:a.chapters})),...(0,o.yT)("construction-org-consistency",()=>(function(a,b){let c=[];if(!/施工组织设计|施工组织|施组|质量|安全|文明施工/u.test(a))return c;for(let d of aQ){if("equipment-counts"===d.kind){c.push(...function(a,b,c){let d=(0,aP.AK)(a);if(0===d.length)return[];let{names:e,counts:f}=function(a,b){let c=[],d=new Map,e=a=>{c.includes(a)||c.push(a)};for(let c of b){let b=a[c];if(Array.isArray(b))for(let a of b){if(!a||"object"!=typeof a||!("value"in a)||"string"!=typeof a.value)continue;for(let b of(0,aP.AK)(a.value))e(b.name),d.has(b.name)||d.set(b.name,b.count);let b=aR(a.value);if(b.length>12||/\d/u.test(b))continue;let c=(0,aP.Rh)(b);c&&e(c)}}return{names:c,counts:d}}(b,c.factGroups);if(0===e.length)return[];let g=[],h=new Map,i=[],j=new Set;for(let a of d){let b=e.find(b=>aV(a.name,[b]));if(b){let c=f.get(b);if(void 0===c||c===a.count)continue;let d=`${a.name}:${[a.count,c].sort((a,b)=>a-b).join("-")}`;if(j.has(d))continue;j.add(d),i.push(`${a.name}:正文 ${a.count} 台、资料 ${c} 台`);continue}if(aS.test(a.name))continue;let c=h.get(a.name);(!c||a.raw.length<c.length)&&h.set(a.name,a.raw)}if(h.size>0){let a=[...h].map(([a,b])=>b.length-a.length<=1?b:a).slice(0,5);g.push({level:"warning",message:`施组数据一致性风险:机械数量型号 可能与项目图谱/事实不一致(${a.join("、")})`,suggestion:`请核对机械数量型号在${c.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return i.length>0&&g.push({level:"warning",message:`施组数据一致性风险:机械数量型号 正文台数与项目图谱/事实不一致(${i.slice(0,5).join(";")})`,suggestion:`同一机械台数全文档只允许一套口径:请以资料事实/项目图谱中的机械配置为准统一${c.locations}中的台数表述(正文与资料并存时以资料为准)。`}),g}(a,b,d));continue}let e=aU(b,d.factGroups),f=(function(a,b){let c=[];for(let d of b){let b=new RegExp(d.source,d.flags.includes("g")?d.flags:`${d.flags}g`);for(let d of a.matchAll(b)){let a=aR(d[1]||d[0]||"");!aT.test(a)&&a.length>=2&&a.length<=80&&c.push(a)}}return[...new Set(c)]})(a,d.patterns??[]).filter(a=>!aS.test(a)&&!aV(a,e)).slice(0,5);f.length>0&&c.push({level:"warning",message:`施组数据一致性风险:${d.label} 可能与项目图谱/事实不一致(${f.join("、")})`,suggestion:`请核对${d.label}在${d.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return c})(a.markdown,a.factsModel)),...(0,o.yT)("construction-org-chapter-data-coverage",()=>(function(a,b){let c=[],d=aU(b,["project","schedule","resources","quality","safety","preciseFacts"]);if(0===d.length)return c;for(let b of a)/概况|进度|资源|质量|安全|文明|工资|应急/u.test(`${b.title} ${(b.sections||[]).join(" ")}`)&&(d.some(a=>a.length>=3&&b.content.includes(a.slice(0,Math.min(10,a.length))))||c.push({level:"warning",message:`${b.title} 缺少可识别的项目图谱事实支撑`,suggestion:"请至少引用工程名称、工期、工程量、资源、风险、质量安全目标等项目专属事实之一,避免纯模板化。"}));return c})(a.chapters,a.factsModel)),...(0,o.yT)("construction-org-major-content",()=>(0,aA.Av)(a.chapters,a.markdown)),...(0,o.yT)("construction-org-division-section",()=>(0,aA.CS)(a.chapters,a.markdown)),...(0,o.yT)("major-content-governance",()=>(0,aA.l5)(a.markdown)),...(0,o.yT)("construction-org-bonus-module",()=>(0,aA.b7)(a.chapters)),...(0,o.yT)("chapter-dependency",()=>aE(a.chapters,k)),...(0,o.yT)("document-delivery-score",()=>(function(a,b,c,d){let e=(d?.size??0)>0,f={factuality:(0,i.V7)(a)>=80,structure:b.length>0,depth:e,executable:e,evidence:b.length>0},g={factuality:2*!(0,ae.vY)(a,c).some(a=>"error"===a.level),structure:b.length>0&&b.every(b=>a.includes(b.title)&&(0,i.V7)(b.content)>=600)?2:1,depth:0===(0,ae.i0)(b,d).length?2:1,executable:0===aE(b,d).length?2:1,evidence:0===aC(a,c).length?2:1},h=Object.keys(g).filter(a=>f[a]),j=Object.keys(g).filter(a=>!f[a]),k=h.reduce((a,b)=>a+g[b],0),l=2*h.length,m={factuality:"事实",structure:"结构",depth:"专业",executable:"可执行",evidence:"证据"},n=j.map(a=>m[a]).join("、");return[{level:"info",message:`文档交付评分报告:总分 ${k}/${l}(已测 ${h.length}/5 维),`+h.map(a=>`${m[a]}${g[a]}`).join(",")+(j.length>0?`;**未测维度(本次无输入,未计分)**:${n}`:""),suggestion:j.length>0?`存在未测维度(${n}):该部分本次**未被核验**,本分数不构成放行依据;请补齐输入(章草稿/AI 分析)后重跑。`:k>=.8*l?"可交付,但建议继续优化证据使用覆盖率和章节依赖链路。":"建议优先修复低分维度后再导出。"}]})(a.markdown,a.chapters,a.factsModel,k)),...(0,o.yT)("generated-fact-verification",()=>b),...(0,o.yT)("numeric-traceability",()=>(0,y.FA)(a.markdown,a.factsModel)),...(0,o.yT)("table-arithmetic-consistency",()=>(0,s.qE)(a.markdown)),...(0,o.yT)("duplicate-basic-info",()=>(0,ae.iC)(a.markdown)),...await (0,o.yT)("formal-style",()=>(0,ae.BV)(a.markdown)),...(0,o.yT)("tertiary-heading",()=>(0,ac.dh)(a.markdown)),...(0,o.yT)("min-chapter-section",()=>(0,ae.Ty)(a.chapters)),...(0,o.yT)("hollow-table-cell",()=>(0,ae.cG)(a.markdown)),...(0,o.yT)("schedule-duration-overrun",()=>(0,ae.v4)(a.markdown)),...(0,o.yT)("caliber-consistency",()=>[...(0,ae.lg)(a.markdown,a.truthValues||[]),...function(a,b=[]){let c=[];if(!a||!b||0===b.length)return c;let d=(0,w.K3)(a),e=(0,f.c6)(a);for(let a of b){let b=a.before.filter(a=>(function(a,b){let c=(0,w.K3)(a);if(c.length<3)return!1;for(let a of b.matchAll(RegExp(c.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"))){let d=a.index||0,e=b.slice(Math.max(0,d-16),d+c.length+16);if(!bm.test(e))return!0}return!1})(a.text,d));if(b.length>0){let d=b.some(a=>"strong"===a.strength),f=b.map(a=>`「${a.text}」`).join("、");c.push({level:d?"error":"warning",severity:d?"blocker":"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:bn,fingerprint:e},message:`被取代形态残留:答疑修正后「${a.object}」为「${a.after}」,正文仍以修正前形态 ${f} 作为现行做法(修正前形态仅可在陈述变更过程时引用)`,suggestion:`请把正文中 ${f} 改为答疑修正后内容「${a.after}」(来源:${a.source});确需说明变更过程的,写成「原为X,经答疑修正为Y」的形式。`})}if("cancel"===a.kind)continue;let f=a.after.trim();if(f.length<2)continue;let g=function(a,b){let c=function(a){let b=a.trim();if(b.length>=4&&b.length<=12)return[b];let c=b.split(/[、,,及与和\s()()]/u).map(a=>a.trim()).filter(a=>a.length>=4).sort((a,b)=>b.length-a.length);return c.length>0?[c[0]]:b.length>=4?[b]:[]}(a.object);if(0!==c.length){for(let a of b.split(/[。;;]/u))if(!(a.length<6)&&bU.test(a)&&c.some(b=>a.includes(b)))return a.slice(0,60)}}(a,d);if(g){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:bn,fingerprint:e},message:`答疑修正未落实(明确对立):「${a.object}」经答疑修正为「${f}」,正文却以否定表述处理(如「${g}」)`,suggestion:`请按答疑修正后内容改写该处表述:「${f}」(来源:${a.source});答疑已明确的做法不得写成不做/不采用。`});continue}f.length<6||f.length>60||!function(a,b){let c=(0,w.K3)(a);if(c.length<4||b.includes(c))return!0;let d=function(a){let b=[];for(let c=0;c+1<a.length;c+=1)b.push(a.slice(c,c+2));return b}(c);if(0===d.length)return!0;if(d.filter(a=>b.includes(a)).length/d.length<.6)return!1;let e=(0,w.zn)(a).map(a=>(0,w.K3)(a)).filter(a=>a.length>=2);return 0===e.length||e.some(a=>b.includes(a))}(f,d)&&c.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:bn,fingerprint:e},message:`答疑修正未落位:「${a.object}」经答疑修正为「${f}」,正文未体现该修正后内容(不足额)`,suggestion:`请在相关章节补写答疑修正后内容「${f}」(来源:${a.source});该条已作为写作硬约束下发,此处为终检兜底。`})}return c}(a.markdown,a.clarificationAmendments)]),...(0,o.yT)("hazard-parameter-binding",()=>(0,ae.Bs)(a.markdown,a.truthValues||[])),...(0,o.yT)("blueprint-value-placement",()=>(0,ae.uy)(a.markdown,a.blueprintData)),...(0,o.yT)("dangling-conjunction",()=>(0,ae.Dy)(a.markdown)),...(0,o.yT)("planned-section-placement",()=>(0,ae.hd)(a.markdown,a.chapters)),...await (0,o.yT)("precise-fact-usage",()=>(0,ae.N1)(a.markdown,a.factsModel,a.chapters)),...(0,o.yT)("parameter-obligation-usage",()=>(function(a,b,c=[],d={}){if(0===c.length)return[];let e=R(a,b,c,d),g=e.used.length+e.relevantMissed.length;if(g<8||e.used.length/g>=.9)return[];let h=e.relevantMissed.slice(0,3).map(a=>String(a.value).slice(0,30));return[{level:"error",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`可靠参数义务落位不足:${e.used.length}/${g}(相关而遗漏 ${e.relevantMissed.length} 项${h.length>0?`,缺失如 ${h.join("、")}`:""})`,suggestion:"请将资料中的可靠参数(规格/型号/尺寸/强度/规范编号等)在对应章节的对应位置自然写入,保持原值原形态(数字、单位、编号中的连字符与年份不得改写、拆分或省略);商务金额、单价、税率、预留金类数据一律不得写入正文。",provenance:{detectorId:"parameter-obligation-usage",fingerprint:(0,f.c6)(a)}}]})(a.markdown,a.factsModel,a.chapters,{supersededValues:c})),...await (0,o.yT)("boq-placement",()=>(0,ae.S2)(a.markdown,a.chapters,a.factsModel)),...await (0,o.yT)("stage-phrasing",()=>b4(a.markdown)),...await (0,o.yT)("emergency-section-depth",()=>ch(a.markdown)),...(0,o.yT)("boq-row-trace",()=>(0,y.QP)((0,y.JV)(a.markdown,a.factsModel))),...(0,o.yT)("drawing-reference",()=>(0,ae.yd)(a.markdown,a.drawingFactLock)),...(0,o.yT)("drawing-pointer-phrase",()=>(0,ae.D0)(a.markdown)),...(0,o.yT)("atlas-reference-phrase",()=>(function(a){let b=(0,aG.St)(a);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"format",owner:"system",repairability:"local_deterministic",message:`正文出现图集/标准图指向替代做法 ${b.length} 处(如「${[...new Set(b)].slice(0,3).join("」「")}」):做法必须写进正文,不得让评标人回查图集`,suggestion:"写出具体做法(尺寸/材料/构造参数/工艺要求)替代指向短语;规范/法规引用(书名号内为规范名,或标题后紧跟 GB/JGJ/CJJ 类标准代号)不属本判据范围,保留不动。"}]})(a.markdown)),...(0,o.yT)("source-enumeration",()=>(0,ac.bx)(a.markdown).filter(a=>a.message.includes("资料来源罗列话术"))),...(0,o.yT)("meta-discourse-declaration",()=>(0,aF.nm)(a.markdown)),...(0,o.yT)("finish-thickness",()=>(0,aF.WY)(a.markdown)),...(0,o.yT)("formula-residue",()=>(0,aF.ON)(a.markdown)),...(0,o.yT)("web-evidence-leakage",()=>(function(a){let b=[];return aK.test(a)&&b.push({level:"warning",message:"正文包含联网增强过程性表述",suggestion:"请删除联网检索、网页资料、搜索结果等过程性话术,改为正式交付语言。"}),b})(a.markdown)),...(0,o.yT)("formal-placeholder",()=>(0,ae.bM)(a.markdown)),...(0,o.yT)("prompt-example-leak",()=>(0,ae.M$)(a.markdown,a.promptBindings)),...(0,o.yT)("degenerate-content",()=>(0,ae.AC)(a.markdown,a.chapters)),...(0,o.yT)("planned-auto-spec-gate",()=>(0,ae.mR)(a.markdown,a.template)),...(0,o.yT)("bid-composition-body-table",()=>(0,ac.NN)(a.markdown,{bodyTableForbidden:a.bodyTableForbidden,plannedChapterTitles:(a.effectiveChapters?.length?a.effectiveChapters:a.template.chapters).filter(a=>(a.tablePlans?.length||0)>0||(a.tableSections?.length||0)>0||(a.diagramRequirements?.length||0)>0).map(a=>a.title),requiredTableTitles:a.promptDocumentRules?.requiredTables||[]})),...(0,o.yT)("bid-composition-body-figure",()=>(0,ac.Fo)(a.markdown,a.bodyFigureForbidden)),...(0,o.yT)("identity-marks-forbidden",()=>(0,s.Vl)(a.markdown,a.identityMarksForbidden)),...(0,o.yT)("planned-structure",()=>(0,ac.UG)(a.markdown,a.template,a.bodyTableForbidden)),...(0,o.yT)("table-caption",()=>(0,ac.XU)(a.markdown,a.bodyTableForbidden)),...await (0,o.yT)("prompt-document-rule",()=>(0,ac.Ed)(a.markdown,a.promptDocumentRules,void 0,{bodyTableForbidden:a.bodyTableForbidden,coverForbidden:a.coverForbidden})),...await (0,o.yT)("local-adaptation-keyword",()=>(0,s.cJ)(a.markdown,a.factsModel)),...(0,o.yT)("boq-division-coverage",()=>(0,y.sl)(a.markdown,a.chapters,a.factsModel))]}let cG={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};var cH=c(52922);function cI(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!(!b||/[。!?]/u.test(b))&&(b.match(/第[一二三四五六七八九十百千\d]+[章节篇]/gu)||[]).length+(b.match(/\d+(?:\.\d+)+/gu)||[]).length>=3}function cJ(a){let b=a.split(/[,,、\s]+/u).map(a=>a.trim()).filter(Boolean);return!(b.length<8)&&b.reduce((a,b)=>a+b.length,0)/b.length<8}function cK(a){return a.split("\n").filter(a=>!(0,cH.X9)(a)&&!cI(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12).filter(a=>{let b=(a.match(/[\u4e00-\u9fff]/gu)||[]).length,c=a.replace(/\s+/gu,"").length;return b>=8&&b/Math.max(1,c)>=.15}).filter(a=>!cJ(a))}function cL(a,b){let c=new Set;for(let d of cK(a))for(let a of d.match(b)||[])c.add(a);return c}let cM=/\d|确保|保证|杜绝|实行|采用|落实|建立|执行|达到|不低于|不少于|控制在|符合|按照|承诺/u,cN=["危险性较大的分部分项工程安全管理","扬尘污染防治措施","建筑工人实名制管理","农民工工资专用账户与工资支付保障","生产安全事故应急预案与应急演练","绿色施工与四节一环保措施"],cO=["危险源辨识与风险识别评估","编制专项施工方案","组织专家论证并履行审批程序","对作业人员进行安全技术交底","施工过程监测与监控量测","分部分项工程验收","三级配电系统","两级漏电保护装置","漏电保护器与接地保护","实名制考勤与人员管理","农民工工资专用账户银行代发","应急预案编制与响应","绿色施工措施与评价"];function cP(a){return a.replace(/^第[一二三四五六七八九十百千万\d]+[章节]\s*/u,"").replace(/^\d+(?:\.\d+)*[、..\s]+/u,"").replace(/^[((]?[一二三四五六七八九十]+[))、..\s]+/u,"").replace(/\s+/gu,"").trim()}async function cQ(a){let{blocks:b,completeBlocks:c}=await (0,cH.Pm)(a);return Math.round((.7*Math.min(1,c/Math.max(6,Math.ceil((0,i.V7)(a)/1500)))+.3*(b?c/b:0))*100)}let cR=/目录|层级|编号|表格|表头|分隔线|页码|空小节|缺少规划小节|小节只有标题|缺节/u,cS=/跨章一致性复核|事实一致性冲突|事实冲突|评分项要求|可靠精确参数|应急预案|属地创优|工伤保险|专业评分|深度不足|事实反查|存在多个值|已确认事实未在正文中落位|事实未在正文中落位/u,cT=/缺少规划小节|小节只有标题|空小节|只有标题或表格无正文|小节内容补写未完成|小节生成未达标|同名小节|H4 标题|正文缺少章节标题|小节正文过短/u;function cU(a){let b=new Map;return a.split("\n").forEach((a,c)=>{if(!((0,cH.X9)(a)||cI(a)))for(let d of a.matchAll(/[^。;;]+/gu)){let a=d[0]||"",e=a.trim(),f=e.replace(/[\s,,、::()()【】[\]《》“”"'`]/gu,"");if(f.length<12)continue;let g=(d.index||0)+(a.length-a.trimStart().length),h=b.get(f)||[];h.push({lineIndex:c,start:g,end:g+e.length,raw:e}),b.set(f,h)}}),[...b.entries()].map(([a,b])=>({key:a,occurrences:b}))}function cV(a){let b=cU(a),c=b.reduce((a,b)=>a+b.occurrences.length,0),d=b.length,e=c-d;return{totalSentences:c,uniqueSentences:d,duplicateInstances:e,duplicateRate:c>0?e/c:0}}async function cW(a,b){let c=await (0,cH.Bt)(a,b),d=(0,cH.Ye)(a),e=cV(a).duplicateRate,f=await (0,cH.gE)(a,b),g=(0,cH.nY)(a),h=(0,ck.vL)(a),i=ck.y9.map(b=>({patternId:b.id,patternLabel:b.label,count:(0,ck.be)(a,b)})).filter(a=>a.count>=h),j=i.length>=2||i.some(a=>a.count>=2*h);return{level:f.heavyTemplated||"heavy"===c.level||j?"heavy":"medium"===c.level||i.length>0?"medium":"light",fillerRatio:c.ratio,fillerSentences:c.fillerSentences,totalSentences:c.totalSentences,vagueHitCount:d.reduce((a,b)=>a+b.count,0),vaguePhrases:d.map(a=>a.phrase),duplicateSentenceRate:e,crossProjectResidue:g,difficultyCountermeasureRatio:f.ratio,difficultyBothCount:f.bothCount,difficultyQuantifiedCount:f.quantified,difficultyCountermeasures:f.countermeasures,difficultyHeavyTemplated:f.heavyTemplated,sentencePatternHits:i}}function cX(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").split(/(?=^#{1,6}\s)/mu),c=[];for(let a of b){if(!a.trim())continue;let b=a.split("\n"),d=/^#{1,6}\s/u.test(b[0]||""),e=d?(b[0]||"").trim():"",f=d?cP(e.replace(/^#{1,6}\s+/u,"")):"",g=d?b.slice(1):b,h=[],i=[];for(let a of g){if(!a.trim()){i.length>0&&(h.push(i),i=[]);continue}i.push(a)}i.length>0&&h.push(i);let j=[];for(let a of h){let b=a.filter(a=>!cI(a));b.some(a=>(function(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!(b.length<12||(0,cH.X9)(b)||cI(b))&&!cJ(b)})(a))&&j.push(b.map(a=>a.trim()).join("\n"))}c.push({heading:e,headingText:f,hasSubstantiveBody:j.length>0,substantiveParagraphs:j})}return c}function cY(a){let b=[];for(let c of cX(a))if(c.hasSubstantiveBody)for(let a of(c.headingText&&b.push(c.headingText),c.substantiveParagraphs))b.push(...function(a){let b=[],c=[],d=0;for(let e of a.split("\n"))d>0&&d+e.length>600&&(b.push(c.join("\n")),c=[],d=0),c.push(e),d+=e.length+1;return c.length>0&&b.push(c.join("\n")),b}(a));return b}async function cZ(a){let b=cY(a.markdown),c=await (0,aW.Mv)(b,[...cN,...cO],a.embedDocuments),d=a=>b.some(b=>c(b,a)>=aW.Eh),e=cN.filter(d).length/cN.length,f=await (0,cH.Bt)(a.markdown,a.embedDocuments);return{completeness:function(a,b,c,d){let e=[...a.matchAll(/^#{1,3}\s+(.+)$/gmu)].map(a=>cP(a[1]||"")).filter(a=>a.length>=2),f=1,g=c?.chapters||[];if(g.length>0){let a=g.map(a=>cP(a.title)).filter(Boolean);f=a.filter(a=>e.some(b=>b.includes(a)||a.includes(b))).length/a.length}else b.length>0&&(f=b.filter(a=>e.some(b=>b.includes(cP(a.title))||cP(a.title).includes(b))).length/b.length);return Math.round((.55*f+.45*d)*100)}(a.markdown,a.chapters,a.template,e),specificity:function(a,b){let c=b.filter(y.O7),d=c.filter(a=>"used"===a.status),e=c.length?d.length/c.length:1,f=d.map(a=>String(a.value||"").replace(/\s+/gu," ").trim()).filter(a=>a.length>=4&&a.length<=60),g=a.map(a=>(a.content||"").replace(/\s+/gu," ")),h=f.filter(a=>g.filter(b=>b.includes(a)).length>=2).length;return Math.round((.55*e+.45*(f.length?h/f.length:1))*100)}(a.chapters,a.factTraces),compliance:function(a,b){let c=cO.filter(b).length/cO.length,d=a.split("\n").map(a=>a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim()).filter(a=>!(!a||/^#{1,6}\s+/u.test(a)||cI(a))&&!/^(?:第[一二三四五六七八九十百\d]+[章节篇]|\d+(?:\.\d+){0,3})\s+[^。;;,,]*$/u.test(a)).join("\n"),e=(0,cH.JD)(d);return Math.round((.8*c+.1*(e.twoStepComplete?1:e.categories.length>0&&e.graded?.6:.3*(e.categories.length>0))+.1*(0,cH.bH)(d).coverage)*100)}(a.markdown,d),executability:await cQ(a.markdown),normalization:function(a){let b=a=>"table"===a.category||"format"===a.category||("structure"===a.category?cT.test(a.message):!a.category&&!cS.test(a.message)&&cR.test(a.message));return Math.max(0,100-8*a.filter(a=>"error"===a.level&&b(a)).length-Math.min(3*a.filter(a=>"warning"===a.level&&b(a)).length,30))}(a.issues),uniqueness:function(a,b){let c=b.forbiddenEmptyPhraseHits,d=b.vagueSemanticSentences,e=100*Math.max(0,b.ratio-.1),f=cV(a),g=Math.max(10,Math.ceil((0,i.V7)(a)/1e4)),h=Math.max(0,f.duplicateInstances-g);return Math.max(0,Math.round(100-4*c-6*d-.5*e-Math.max(60*f.duplicateRate,h)))}(a.markdown,f),moduleCoverageRate:e}}var c$=c(43378),c_=c(31263);async function c0(a){let b=a.items.map(a=>a.trim()).filter(Boolean);if(0===b.length)return{total:0,met:0,partial:0,missing:0,simulatedScore:0,criteria:[]};let c=cY(a.markdown),d=cX(a.markdown).map(a=>a.heading).filter(Boolean),e=cK(a.markdown).join(""),f=await (0,aW.Mv)([...c,...d],b,a.embedDocuments),g=b.map((a,b)=>{let g=(0,ae.pG)(a),h=g.length>0&&g.some(a=>e.includes(a)),i="",j=0;for(let b of c){let c=f(b,a);c>j&&(j=c,i=b)}if(h||j>=aW.Eh)return{index:b,title:a,status:"met",similarity:j,anchor:i?i.split("\n")[0].replace(/^#{1,6}\s+/u,"").slice(0,80):void 0};let k="",l=0;for(let b of d){let c=f(b,a);c>l&&(l=c,k=b)}return l>=aW.Eh?{index:b,title:a,status:"partial",similarity:l,anchor:k.replace(/^#{1,6}\s+/u,"").slice(0,80)}:{index:b,title:a,status:"missing",similarity:l}}),h=g.filter(a=>"met"===a.status).length,i=g.filter(a=>"partial"===a.status).length,j=g.filter(a=>"missing"===a.status).length,k=Math.round((h+.5*i)/g.length*100);return{total:g.length,met:h,partial:i,missing:j,simulatedScore:k,criteria:g}}let c1="quality-caliber-c9.2",c2={version:c1,role:"primary"},c3={version:c1,role:"secondary",relatedTo:"quality-report"},c4={requirement:.3,structure:.15,dataAnchor:.2,professionalDepth:.15,compliance:.1,factIntegrity:.1},c5={anchors:.85,modules:.15},c6={execution:.45,figure:.35,caption:.2,appendix:.75,bodyCompliance:.25},c7={boq:.4,parameters:.3,drawing:.15,authority:.15},c8={selfHarm:.25,placeholder:.2,length:.15,tableConsistency:.2,regulation:.2},c9={reconciliation:.6,binding:.2,keyFacts:.2},da=/规格-数值绑定|名称-数值绑定|合计值/u,db=/编制依据对账缺口/u,dc={selfHarm:/自伤表述/u,placeholder:/占位符|占位式表达/u,length:/正文篇幅/u};function dd(a){let b=a.filter(a=>null!==a.value&&Number.isFinite(a.value));if(0===b.length)return{value:null};let c=b.reduce((a,b)=>a+b.weight,0);return{value:b.reduce((a,b)=>a+b.value*b.weight,0)/c,detail:b.map(a=>a.detail).filter(a=>!!a).join("、")||void 0}}async function de(a,b){if(!b)return{value:null};let c=a.filter(a=>(0,i.V7)(a.content)>=800);if(0===c.length)return{value:null};let d=[],e=await Promise.all(c.map(a=>b.analyze(a.content).catch(b=>{d.push(`${a.title}:${b instanceof Error?b.message:String(b)}`)}))),f=c.map((a,b)=>({title:a.title,analysis:e[b]})).filter(a=>!!a.analysis);if(0===f.length)return{value:null};let g=0,h=[];for(let a of f){let b=(0,ae.Pu)(a.analysis.dimensions),c=(0,ae.lH)(a.title);g+=Math.min(1,b/c),b<c&&h.push(`${a.title} ${b}/12`)}let j=g/f.length*100,k=d.length>0?`;⚠ ${d.length} 章语义分析失败未计入(${d.slice(0,2).join(";")})`:"",l=(h.length>0?`专业深度达标 ${Math.round(j)}(薄弱:${h.slice(0,3).join("、")})`:`专业深度达标 ${Math.round(j)}(全部章达目标线)`)+k;return{value:j,detail:l}}async function df(a){let b=await cZ({markdown:a.markdown,chapters:a.chapters,template:a.template,factTraces:a.factTraces,issues:a.issues,embedDocuments:a.embedDocuments}),c=a.bidComposition?.bidType||"unknown",d=a.tenderRequirements?.extracted&&a.tenderRequirements.entries||[],e=d.length>0?(0,aX.U1)(d,a.markdown):[],f=e.filter(a=>"comply"!==a.entry.policy),g=f.length>0?(()=>{let a=f.filter(a=>a.satisfied).length;return{value:a/f.length*100,detail:`锚点全命中 ${a}/${f.length}`}})():{value:null},h=function(a,b){let c=b.filter(a=>!a.exempt),d=c.filter(a=>a.placed),e=d.length>0?(0,v.R8)(a,d.map(a=>a.itemName)):new Map;return b.length>0?{effectiveRows:c.length,placedRows:d.length,explicitRows:e.size,rate:c.length>0?d.length/c.length:null,exemptRows:b.filter(a=>a.exempt).slice(0,50).map(a=>`${a.itemName}${a.quantity?` ${a.quantity}${a.unit}`:""}`)}:void 0}(a.markdown,a.boqRowTraces||[]),i=dd([{...g,weight:c5.anchors},{...function(a){if(!Number.isFinite(a))return{value:null};let b=Math.round(a*cN.length);return{value:100*a,detail:`强制模块 ${b}/${cN.length}`}}(b.moduleCoverageRate),weight:c5.modules}]),j=function(a){let{markdown:b,mode:c,bidComposition:d,effectiveChapters:e,chapters:f}=a;if("blind"===c){let a=[],c=d?.appendixPlan||[];if(c.length>0){let d=c.filter(a=>(0,ad.cM)(b,a)).length;a.push({weight:c6.appendix,value:d/c.length*100,detail:`附表承载 ${d}/${c.length}`})}if(d?.bodyTablePolicy==="forbidden"){let d=function(a,b){let c=-1;for(let d of b){let b=a.indexOf(`## ${d.title}`);b>=0&&(c<0||b<c)&&(c=b)}let d=c>=0?a.slice(0,c):a;return d.match(/^\s*\|/gmu)?.length||0}(b,c);a.push({weight:c6.bodyCompliance,value:Math.max(0,100-25*d),detail:d>0?`正文禁表 违规 ${d} 处`:"正文禁表合规"})}else{let c=(e||[]).reduce((a,b)=>a+(b.tablePlans?.length||0),0);if(c>0&&e){let b=Math.max(0,c-(0,c$.Xi)(e,f).reduce((a,b)=>a+b.plans.length,0));a.push({weight:c6.execution,value:b/c*100,detail:`表执行 ${b}/${c}`})}let d=(e||[]).filter(a=>(a.tablePlans?.length||0)>0||(a.tableSections?.length||0)>0||(a.diagramRequirements?.length||0)>0).map(a=>a.title),g=(0,ac.NN)(b,{bodyTableForbidden:!1,plannedChapterTitles:d}).length;a.push({weight:c6.bodyCompliance,value:Math.max(0,100-25*g),detail:g>0?`正文未授权表格 违规 ${g} 处`:"正文表格授权合规"});let h=(0,ac.xw)(b,!1);h.total>0&&a.push({weight:c6.caption,value:h.captioned/h.total*100,detail:`题注 ${h.captioned}/${h.total}`})}return dd(a)}let g=[],h=(e||[]).reduce((a,b)=>a+(b.tablePlans?.length||0),0);if(h>0&&e){let a=Math.max(0,h-(0,c$.Xi)(e,f).reduce((a,b)=>a+b.plans.length,0));g.push({weight:c6.execution,value:a/h*100,detail:`表执行 ${a}/${h}`})}let i=(0,c$.cA)({chapters:e});if(i.length>0){let a=(0,c$.F4)(i,b);g.push({weight:c6.figure,value:a.covered/a.total*100,detail:`图类数据表 ${a.covered}/${a.total}`})}let j=(0,ac.xw)(b,d?.bodyTablePolicy==="forbidden");return j.total>0&&g.push({weight:c6.caption,value:j.captioned/j.total*100,detail:`题注 ${j.captioned}/${j.total}`}),dd(g)}({markdown:a.markdown,mode:c,bidComposition:a.bidComposition,effectiveChapters:a.effectiveChapters,chapters:a.chapters}),k=function(a){let{markdown:b,billPlacementAudit:c,parameterUsageAudit:d,drawingFactLock:e,authorityAuditReport:f}=a,g=[];c&&null!==c.rate&&Number.isFinite(c.rate)&&g.push({weight:c7.boq,value:100*c.rate,detail:`BOQ 落位 ${c.placedRows}/${c.effectiveRows}`}),d&&null!==d.rate&&Number.isFinite(d.rate)&&g.push({weight:c7.parameters,value:100*d.rate,detail:`参数 ${d.usedParams}/${d.usedParams+d.relevantMissedCount}`});let h=e?0===e.groups.length?"图纸事实锁无可用分组(无图纸类证据入库)":void 0:"图纸事实锁不可用(未构建或构建失败)";if(e&&e.groups.length>0){let a=(0,c_.SL)(e,b);g.push({weight:c7.drawing,value:100*a.rate,detail:`图纸事实 ${a.referenced.length}/${e.groups.length}`})}if(f){let a=f.unregisteredCount+f.derivationGaps.length+f.processGaps.length;g.push({weight:c7.authority,value:Math.max(0,100-5*a),detail:a>0?`无主数值 缺口 ${a} 处`:"无主数值 0 缺口"})}let i=dd(g);return h&&null!==i.value&&(i.detail=`${i.detail?`${i.detail};`:""}⚠ ${h},图纸分量未计量(本维度按剩余分量重归一)`),i}({markdown:a.markdown,billPlacementAudit:h,parameterUsageAudit:a.parameterUsageAudit,drawingFactLock:a.drawingFactLock,authorityAuditReport:a.authorityAuditReport}),l=await de(a.chapters,a.professionalDepthClassifier),m=function(a,b){let c=b=>a.filter(a=>b.test(a.message)).length,d=c(dc.selfHarm),e=c(dc.placeholder),f=c(dc.length),g=(0,aF.OV)(b),h=cD(b),i=h.declaredNotUsed.length,j=h.usedNotDeclared.length,k=h.stats.declaredCodes+h.stats.declaredNames>0?{weight:c8.regulation,value:Math.max(0,100-(i+j)*20),detail:i+j>0?`编制依据缺口 ${i+j} 处(声明未用 ${i}/引用未声明 ${j})`:"编制依据对账 0 缺口"}:{weight:c8.regulation,value:null};return dd([{weight:c8.selfHarm,value:Math.max(0,100-25*d),detail:d>0?`自伤 ${d} 处`:"自伤 0"},{weight:c8.placeholder,value:Math.max(0,100-25*e),detail:e>0?`占位符 ${e} 处`:"占位符 0"},{weight:c8.length,value:Math.max(0,100-50*f),detail:f>0?`篇幅超限 ${f} 条`:"篇幅达标"},{weight:c8.tableConsistency,value:Math.max(0,100-20*g),detail:g>0?`表内不自洽 ${g} 处`:"表自洽 100%"},k])}(a.issues,a.markdown),n=function(a,b){let c=a.filter(a=>"error"===a.level&&"fact_consistency"===a.category&&!db.test(a.message)),d=c.filter(a=>da.test(a.message)),e=[{weight:c9.reconciliation,value:Math.max(0,100-20*c.length),detail:c.length>0?`对账冲突 ${c.length} 条`:"对账零冲突"},{weight:c9.binding,value:Math.max(0,100-20*d.length),detail:d.length>0?`绑定冲突 ${d.length} 条`:"绑定零冲突"}];return b&&null!==b.rate&&Number.isFinite(b.rate)&&e.push({weight:c9.keyFacts,value:100*b.rate,detail:`关键事实 ${b.placed}/${b.specs}`}),dd(e)}(a.issues,a.keyFactPlacementAudit),o=[{key:"requirement",label:"要求实体响应",...i,weight:c4.requirement},{key:"structure",label:"结构呈现落实",...j,weight:c4.structure},{key:"dataAnchor",label:"数据锚定",...k,weight:c4.dataAnchor},{key:"professionalDepth",label:"专业深度",...l,weight:c4.professionalDepth},{key:"compliance",label:"合规与规范",...m,weight:c4.compliance},{key:"factIntegrity",label:"事实完整与一致性",...n,weight:c4.factIntegrity}],p=o.filter(a=>null!==a.value&&Number.isFinite(a.value)),q=p.reduce((a,b)=>a+b.weight,0),r=q>0?p.reduce((a,b)=>a+b.value*b.weight,0)/q:0,s=p.length,t=o.length,u=q>=.9,w=Math.round(r),x=p.map(a=>({key:a.key,label:a.label,score:Math.round(a.value),weight:a.weight,detail:a.detail})),y=a.issues.filter(a=>"error"===a.level&&(0,ae.R9)(a)).length,z=Math.max(0,Math.min(99,Math.round(w-Math.min(10,3*y)))),A=await cW(a.markdown,a.embedDocuments),B=a.evaluationCriteriaItems&&a.evaluationCriteriaItems.length>0?await c0({items:a.evaluationCriteriaItems,markdown:a.markdown,embedDocuments:a.embedDocuments}):void 0,C=d.length>0?d.map((a,b)=>({text:a.text.slice(0,160),category:a.category,responded:"comply"===a.policy||!!e[b]?.satisfied})):void 0,D="unknown"===c?";⚠ 标书类型未判定(按明标口径)——暗标项目须核对招标文件后重跑":"",E=B?`;评分细则模拟 ${B.simulatedScore}%(met ${B.met} / partial ${B.partial} / missing ${B.missing})`:"",F=z>=95&&0===y&&b.uniqueness>=60&&u,G=F?["已达到当前质量目标,建议保持事实口径和导出前复核。"]:[...u?[]:[`本次仅计量 ${s}/${t} 维(权重覆盖 ${(100*q).toFixed(0)}%,低于下限 90%):重归一分不得作为达标依据,须先补齐缺失维度的计量条件再判定。`],"按对齐评分口径补齐短板维度:要求实体响应补锚点全命中(核心词与数字参数逐条落位)、结构呈现补图表落位、数据锚定补 BOQ/参数/图纸/无主数值溯源、专业深度按章补六维薄弱项、合规与规范清理自伤与占位符并压缩超限篇幅且编制依据与正文双向对齐、事实一致性补关键事实落位与数值对账。","系统需优先修复阻断问题、扩大本地知识库检索、补抽结构化事实,并将未落位事实写入对应章节。"];b.uniqueness<60&&G.push(`低雷同性 ${b.uniqueness} 低于门槛 60:存在与公开模板/通用话术重合的雷同风险,须改写高重合段落后再交付。`);let H=`${u?"":"⚠ "}本次仅计量 ${s}/${t} 维、权重覆盖 ${(100*q).toFixed(0)}%`,I=`交付置信度 ${z}% / 目标 95%,综合评分 ${w}/100(${[...x.map(a=>`${a.label} ${a.score}`),`低雷同性 ${b.uniqueness}`].join("、")});${H}${D}${E};评分口径 ${c1}(主尺)`;return{overall:w,deliveryProbability:z,target:95,passed:F,scores:b,mode:c,dimensions:x,requirementChecklist:C,billPlacementAudit:h,parameterUsageAudit:a.parameterUsageAudit,keyFactPlacementAudit:a.keyFactPlacementAudit,templating:A,caliber:c2,evaluationCriteriaAttainment:B,measurementCoverage:{dimensions:s,totalDimensions:t,weightRatio:q,sufficient:u},summary:I,actions:G}}let dg=new Set(["fact-coverage","overview-recap","internal-terminology-anchor","global-consistency-snapshot","data-consistency-snapshot","clarification-amendment"]);function dh(...a){return a.flat()}var di=c(19898),dj=c(91977),dk=c(51144);function dl(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}async function dm(a){(0,f.Te)(a.signal);let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),d=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),e=Math.ceil((a.highRisk?18:10)*d),g=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),i=Math.ceil((a.highRisk?72:42)*d),j=Math.ceil((a.highRisk?72e3:42e3)*d),k=[...new Set([...a.requiredNeeds||[],...a.extraClues||[]])].slice(0,12),l=(function(a,b=[],c=[]){let d=a.sections||[],e=[...a.requiredFacts,...b,...c],f=(0,dk.C)(d,a=>(0,dk.O)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,g=(0,dk.C)(e,a=>(0,dk.O)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,h=/[、,,与和及]/.test(a.title),i=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),j=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案","基坑支护","基坑开挖","基坑底标高","坡率","支护形式","降水","开挖深度","高支模","专项方案"]:i?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],k=h?[...j,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:j,l=[...new Set([a.title,...f,...g,...k].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],m=(0,dk.C)(l,a=>(0,dk.O)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,n=h?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${f.slice(0,6).join(" ")} ${g.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${f.join(" ")}`.trim(),...g.map(b=>`${a.title} ${b}`.trim()),...f.map(b=>`${a.title} ${b} ${g.slice(0,6).join(" ")}`.trim()),`${a.title} ${k.join(" ")}`.trim(),...n,m.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds,a.extraClues).slice(0,e),m=[...k.map(b=>`${a.chapter.title} ${b} ${(a.chapter.sections||[]).join(" ")}`.trim()).filter(a=>!l.includes(a)).map(a=>({text:a,boost:2,source:"required-fact-evidence"})),...l.map(a=>({text:a,boost:2.4,source:"deep-retrieval"}))];return b.push(...(await (0,f.l$)(m,async b=>{var c;(0,f.Te)(a.signal);let d=await a.manager.search(a.projectRoot,b.text,{scope:"project",filters:{filePaths:a.scopedFilePaths,materialRoots:a.scopedMaterialRoots??(0,di.materialRootsOfFiles)(a.scopedFilePaths)},limit:g,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!0});return(c={chapter:a.chapter,results:d.results,fileRoleByPath:a.fileRoleByPath,fileProcessingByPath:a.fileProcessingByPath,boost:b.boost,source:b.source}).results.map(a=>{let b=c.fileProcessingByPath.get(a.filePath);return{chapterId:c.chapter.id,filePath:a.filePath,score:a.score+c.boost+("table"===b?3:"structured_data"===b?2.6:3.2*("bill_of_quantities"===b)),content:a.content,roleId:c.fileRoleByPath.get(a.filePath),processingType:b,sectionTitle:a.sectionTitle,source:c.source}})},{kind:"deepRetrieval",highRisk:a.highRisk})).flat()),[...(0,h.QR)(b.filter(a=>"required-fact-evidence"===a.source),{maxItems:Math.max(6,3*k.length),maxChars:18e3,preservePinned:!0}),...(0,h.QR)(b.filter(a=>"required-fact-evidence"!==a.source),{maxItems:i,maxChars:j,preservePinned:!0})]}var dn=c(32434),dp=c(36003),dq=c(95734);async function dr(a,b){let c=(0,ac.r4)(a.content);if(0===c.length)return[];let d=[];for(let e of c){let c=e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),f=a.content.match(RegExp(`^###\\s+(?:\\d+(?:\\.\\d+)*[、..\\s]*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^#{2,3}\\s+|$)`,"mu")),g=f?.[1]||"",h=await (0,dp.AI)(e,(0,dp.Ym)(e,a.chapter,a.evidence),b),i=(0,dp.uQ)(e,g,h);i&&d.push(`${e}:${i}`)}return d}function ds(a,b){let c=a.trim();if(!c)return[];let d=Math.max(1e3,Math.ceil(b)),e=[],f=0;for(;f<c.length;){let a=Math.min(f+d,c.length),b=c.lastIndexOf("\n\n",a);(b<=f||a-b>.25*d)&&(b=c.lastIndexOf("\n",a)),(b<=f||a-b>.2*d)&&(b=a),e.push(c.slice(f,b).trim()),f=b}return e.filter(Boolean)}function dt(a){return"string"==typeof a?a:a&&"object"==typeof a&&"message"in a?String(a.message):JSON.stringify(a)}function du(a){let b=Number(process.env[a]);return Number.isFinite(b)&&b>0?Math.ceil(b):0}async function dv(a){var b;(0,f.Te)(a.signal);let c=a.chapters.map(a=>{let b=a.content.replace(/#{1,6}\s+/gu,"").replace(/\*\*/gu,"").replace(/\|/gu," ").replace(/[\n\r]+/gu," ").trim(),c=function(a){let b=[];for(let c of[/(?:总建筑面积|建设规模|总用地面积|总占地面积)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:㎡|m²|m2|平方米)/gu,/(?:合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价)[^\n。;;]{0,18}\d+(?:[.,]\d+)?\s*万?\s*(?:万元|亿元|元)/gu,/(?:计划工期|合同工期|总工期|施工周期)[^\n。;;]{0,18}\d+\s*(?:日历天|天|个月|月)/gu,/(?:质量标准|质量目标)[^\n。;;]{0,26}/gu,/(?:找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层)[^\n。;;]{0,24}\d+:\d+(?:\.\d+)?/gu]){let d=[...new Set(a.match(c)||[])].slice(0,4);b.push(...d)}return[...new Set(b.map(a=>a.replace(/\s+/gu," ").trim()).filter(Boolean))].join(";")}(a.content);return`章节:${a.title}
|
|
153
153
|
数值口径清单:${c||"(未提取到总量口径数字)"}
|
|
154
154
|
正文摘要:${b.slice(0,600)}`}).join("\n\n---\n\n"),d=function(a){let b=Math.ceil(a.totalChars/Math.max(1e3,a.chunkChars)),c="chapter"===a.phase?du("DOCUMENT_CHAPTER_REVIEW_MAX_CHUNKS")||Math.min(Math.max(2,Math.floor(a.totalChars/a.chapterCount/4e3)),b):"global"===a.phase?du("DOCUMENT_GLOBAL_REVIEW_MAX_CHUNKS")||Math.min(4,b):du("DOCUMENT_FINAL_REVIEW_MAX_CHUNKS")||Math.min(6,b);return{chunks:c,budgetPerChunk:Math.ceil(a.totalChars/Math.max(1,c)),maxIssues:Math.max(4,Math.min(28,Math.ceil(2.5*c)))}}({totalChars:c.length,chapterCount:a.chapters.length,chunkChars:16e3,phase:"global"}),e=ds(c,16e3).map((a,b)=>`**第 ${b+1}/${ds(c,16e3).length} 部分**
|
|
155
155
|
|
|
@@ -246,4 +246,4 @@ ${v}${w?`
|
|
|
246
246
|
${w}`:""}
|
|
247
247
|
|
|
248
248
|
`;return r((0,g.yk)((0,g.j7)(`${a.slice(0,k)}${x}${a.slice(t).trimStart()}`)))}function t(a,b){return 0!==j(b).length&&/资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(a)?["计划工期","合同工期","质量标准","合同估算价","合同估算价格","建设地点","建设规模"].filter(b=>RegExp(`${b}[^
|
|
249
|
-
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(a)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})):[]}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v12",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}},91943:(a,b,c)=>{c.d(b,{$t:()=>D,G5:()=>F,PA:()=>J,Rc:()=>j,dC:()=>H,dM:()=>m,kj:()=>I,vi:()=>E});let d=/[\u4e00-\u9fa5]/gu,e=/^([ \u3000]*)(\d{1,3})\.\s+\S/u,f=/^([ \u3000]*)([-*+])\s+\S/u,g=/^(#{1,6})\s+\S/u,h=/(?:\.{2,}|…{2,})\s*\d+\s*$/u,i=/。、|,、|;、|。,|,。|。。/u,j=[{open:"(",close:")",label:"全角括号"},{open:"《",close:"》",label:"书名号"}],k=/(?<=[。;!?])/u,l=/[的与和及或在于是对从向把被将按并而则如若等共约达须应需可要能以由使让]/u,m=8;function n(a){return(a.match(d)||[]).length}function o(a){let b=a.trim();return b.length>80?`${b.slice(0,80)}…`:b}function p(a){return g.test(a.trim())}function q(a){return a.trim().startsWith("|")}function r(a){let b=e.exec(a);return!!b&&300>=Number.parseInt(b[2],10)}function s(a){return f.test(a)}function t(a){return p(a)||q(a)}function u(a){return a.replace(/[|`*_<>#\s\u3000]/gu,"").replace(/^:?-{2,}:?$/u,"")}function v(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim())}function w(a){return v(a).map(u).join("|")}function x(a,b){for(let c=b-1;c>=0;c-=1)if(a[c].trim())return c;return -1}function y(a,b){for(let c=b+1;c<a.length;c+=1)if(a[c].trim())return c;return -1}function z(a){let b=[],c=0;for(;c<a.length;){let d=e.exec(a[c]),f=d?Number.parseInt(d[2],10):0;if(!d||f>300){c+=1;continue}let g=d[1].length,h=[{index:c,number:f}],i=c+1;for(;i<a.length;){if(!a[i].trim()){let b=i;for(;b<a.length&&!a[b].trim();)b+=1;let c=b<a.length?e.exec(a[b]):null;if(c&&c[1].length===g&&300>=Number.parseInt(c[2],10)){i=b;continue}break}let b=e.exec(a[i]);if(b&&b[1].length===g&&300>=Number.parseInt(b[2],10)){h.push({index:i,number:Number.parseInt(b[2],10)}),i+=1;continue}break}b.push({indent:g,items:h}),c=i>c?i:c+1}return b}let A=/[。;!?…]$/u,B=/[”’"』」))\]】》]+$/u,C=/(?:[A-Z]{2,6}\s*\/?\s*[A-Z]{0,6}\s*\d[\d.\-]*|\d{2,4}\s?[A-Z]{1,2}\s?\d{2,4}(?:[//]\d{1,3})?|[皖烷京沪苏浙粤鲁豫鄂湘川渝陕冀晋蒙辽吉黑闽赣桂黔滇甘青宁新藏]\s?\d{4}\s?[A-Z]{1,2}\s?\d{1,4})$/u;function D(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c={cleanable:[],blocking:[]};for(let a of z(b)){let d=a.items.map(a=>a.number);if(1===a.items.length){d[0]>1&&c.cleanable.push({kind:"orphan-list-number",line:a.items[0].index+1,excerpt:o(b[a.items[0].index]),message:`孤立有序编号「${d[0]}.」(无前序 1.~${d[0]-1}.,疑似跨节继承编号)`});continue}d.every((a,b)=>a===b+1)||c.cleanable.push({kind:"list-numbering",line:a.items[0].index+1,excerpt:`编号序列 ${d.join(",")}`,message:`有序列表编号不连续(第 ${a.items[0].index+1}~${a.items[a.items.length-1].index+1} 行编号:${d.join(",")})`})}!function(a,b){let c=0;for(;c<a.length;){if(!s(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length;){if(!a[e].trim()){let b=e;for(;b<a.length&&!a[b].trim();)b+=1;if(b<a.length&&s(a[b])){e=b;continue}break}if(s(a[e])){d.push(e),e+=1;continue}break}if(1===d.length){let c=d[0],e=x(a,c),f=y(a,c),g=e>=0?a[e].trim():"",h=/[::]$/u.test(g)||/(?:包括|如下|以下|例如|分别是)[::]?$/u.test(g),i=e>=0&&!s(a[e])&&!p(a[e])&&!q(a[e])&&!r(a[e])&&!h,j=f>=0&&!s(a[f])&&!q(a[f]);i&&j&&b.cleanable.push({kind:"orphan-list-item",line:c+1,excerpt:o(a[c]),message:"孤立单项列表(前后均为正文语境,无列表上下文)"})}c=e>c?e:c+1}}(b,c),function(a,b){for(let c of function(a){let b=[],c=0;for(;c<a.length;){if(!q(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length&&q(a[e]);)d.push(e),e+=1;b.push({start:c,rows:d}),c=e}return b}(a)){let d=c.rows;if(d.length<2||!function(a){let b=a.trim();return b.startsWith("|")&&/^[\s|:-]+$/u.test(b)&&/-{3,}/u.test(b)}(a[d[1]]))continue;let e=v(a[d[0]]),f=w(a[d[0]]),g=e[0]?.replace(/[\s*_]/gu,"")??"";e.length>=3&&/表$/u.test(g)&&n(g)>=m&&b.blocking.push({kind:"table-title-in-header",line:d[0]+1,excerpt:g,message:`表格表头首格为表名(「${g}」),列语义错位(表名应独立成行,表头首格必须填列名)`});let h=d.slice(2);if(0===h.length){b.blocking.push({kind:"table-empty",line:d[0]+1,excerpt:o(a[d[0]]),message:"空表(仅表头与分隔线,无任何数据行)"});continue}let i=w(a[h[0]])===f;i&&b.cleanable.push({kind:"table-header-duplicate",line:h[0]+1,excerpt:o(a[h[0]]),message:"重复表头行(分隔线后数据行与表头内容一致)"});let j=new Set;for(let c of(i&&j.add(f),h)){if(i&&c===h[0])continue;let d=w(a[c]);if(!(!d||d.split("|").every(a=>!a))){if(j.has(d)){b.cleanable.push({kind:"table-row-duplicate",line:c+1,excerpt:o(a[c]),message:"表内数据行完全重复"});continue}j.add(d)}}}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=a[c].trim();if(!d||t(d)||r(d)||s(d)||h.test(d))continue;let e=c+1>=a.length||!a[c+1].trim();if(!e&&/\d$/u.test(d)&&!C.test(d)||15>n(d))continue;let f=d[d.length-1];if(!e&&!/[\u4e00-\u9fa5]/u.test(f)&&!C.test(d)||/[::、]$/u.test(d)||/[表图]$/u.test(d))continue;let g=y(a,c);if(g>=0&&q(a[g])&&/^[表图]\s*\d+(?:\s*[-—–..]\s*\d+)?\s+\S/u.test(d)||g>=0&&q(a[g])&&/[表图]\s*\d+(?:\s*[-—–..]\s*\d+)?\s+\S[^。;!?]*$/u.test(d)||g>=0&&(r(a[g])||s(a[g]))&&/(?:完成后|完毕后|结束后|如下|以下)$/u.test(d))continue;if(e){if(A.test(d.replace(B,"")))continue;b.blocking.push({kind:"truncated-line",line:c+1,excerpt:o(a[c]),message:"句尾截断(段末形态:段落结尾无终止标点,疑似生成截断/内容丢失)",form:"tail"});continue}if(!(-1===g||p(a[g])||q(a[g])||r(a[g])||s(a[g]))&&!l.test(f))continue;let i=x(a,c),j=i>=0?a[i].trim():"";(i<0||p(j)||q(j)||r(j)||s(j)||/[。;!?""」』)\]】…]$/u.test(j))&&b.blocking.push({kind:"truncated-line",line:c+1,excerpt:o(a[c]),message:"句尾截断(行尾无终止标点且后续为标题/表格/列表/文末,疑似生成截断)",form:"boundary"})}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=/^(#{3,6})\s+(\S.*)$/u.exec(a[c].trim());if(!d)continue;let e=d[1].length,f=y(a,c);if(-1===f){b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:o(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`});continue}let g=/^(#{1,6})\s+\S/u.exec(a[f].trim());g&&g[1].length<=e&&b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:o(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`})}}(b,c),function(a,b){let c=new Map;for(let d=0;d<a.length;d+=1){let e=a[d].trim();if(!e||t(e)||r(e)||s(e))continue;let f=e.replace(/\s+/gu,"");if(40>n(f))continue;let g=c.get(f);if(void 0===g){c.set(f,d);continue}b.cleanable.push({kind:"duplicate-line",line:d+1,excerpt:o(a[d]),message:`与第 ${g+1} 行完全重复(≥40 字)`})}}(b,c);for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||t(d)||r(d)||s(d))continue;let e=d.split(k).map(a=>a.trim()).filter(Boolean);for(let b=0;b+1<e.length;b+=1)if(e[b]===e[b+1]&&n(e[b])>=16){c.cleanable.push({kind:"duplicate-sentence-adjacent",line:a+1,excerpt:e[b].slice(0,60),message:`相邻句子重复(「${e[b].slice(0,24)}…」连续两遍)`});break}}for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||t(d))continue;let e=i.exec(d);e&&c.blocking.push({kind:"sentence-fracture",line:a+1,excerpt:o(d),message:`标点断裂(「${e[0]}」句读错乱,疑似句段拼接残留/漂移句)`})}let d=b.join("\n");for(let{open:a,close:e,label:f}of j){let g=d.split(a).length-1,h=d.split(e).length-1;if(g===h)continue;let i=b.findIndex(b=>b.split(a).length-1!=b.split(e).length-1);c.blocking.push({kind:"punctuation-unbalanced",line:Math.max(1,i+1),excerpt:o(b[i]??""),message:`${f}不闭合(开 ${g} 处、闭 ${h} 处,疑似内容丢失/拼接残留)`})}return c}function E(a){let b=a.replace(/\r\n?/gu,"\n"),c=[];for(let a=0;a<4;a+=1){let a=b.split("\n"),d=D(b),e=d.blocking.filter(a=>"truncated-line"===a.kind&&"tail"!==a.form);if(0===d.cleanable.length&&0===e.length)break;let f=new Set,g=new Map;for(let b of z(a)){let d=b.items.map(a=>a.number);if(1===b.items.length&&d[0]>1){let e=b.items[0].index,f=a[e].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,"$1");f!==a[e]&&(g.set(e,f),c.push(`孤立编号去号:第 ${e+1} 行(「${d[0]}.」)`));continue}if(b.items.length>1&&!d.every((a,b)=>a===b+1)){if(d[0]>1){let c=b.items[0].index-1;for(;c>=0&&!a[c].trim();)c-=1;if(c>=0&&/[::。;;]\s*\d{1,3}[.、]\s*\S/u.test(a[c]))continue}b.items.forEach((b,c)=>{let d=a[b.index].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,`$1${c+1}. `);d!==a[b.index]&&g.set(b.index,d)}),c.push(`有序列表重排:第 ${b.items[0].index+1}~${b.items[b.items.length-1].index+1} 行(${d.join(",")} → 1..${d.length})`)}}for(let b of d.cleanable){let d=b.line-1;if("orphan-list-item"===b.kind){let b=a[d].replace(/^([ \u3000]*)[-*+]\s+/u,"$1");b!==a[d]&&(g.set(d,b),c.push(`孤立列表项去号:第 ${d+1} 行`))}else if("table-header-duplicate"===b.kind)f.add(d),c.push(`重复表头行删除:第 ${d+1} 行`);else if("table-row-duplicate"===b.kind)f.add(d),c.push(`表内重复数据行删除:第 ${d+1} 行`);else if("duplicate-line"===b.kind)f.add(d),c.push(`完全重复行删除:第 ${d+1} 行`);else if("duplicate-sentence-adjacent"===b.kind){let b=function(a){let b=a.split(k),c=[];for(let a of b){let b=c[c.length-1];void 0!==b&&b===a&&n(a.trim())>=16||c.push(a)}return c.join("")}(a[d]);b!==a[d]&&(g.set(d,b),c.push(`相邻重复句去重:第 ${d+1} 行`))}}for(let b of e){let d=b.line-1;if(f.has(d)||g.has(d))continue;let e=function(a){let b=/^([\s\S]*[。;!?])([^。;!?]+)$/u.exec(a);if(!b)return;let c=b[2].trim(),d=n(c);if(0!==d&&!(d>40))return{line:b[1],removed:c.slice(0,30)}}(a[d]);void 0!==e&&e.line!==a[d]&&(g.set(d,e.line),c.push(`截断行尾残片闭合:第 ${d+1} 行(删尾「${e.removed}」)`))}let h=a.map((a,b)=>f.has(b)?void 0:g.get(b)??a).filter(a=>void 0!==a).join("\n");if(h===b)break;b=h}return{markdown:b,cleaned:c}}function F(a,b){if(0===a.blocking.length)return;let c=a.blocking.slice(0,4).map(a=>`${a.message}(第 ${a.line} 行)`).join(";");return`${b?`${b} `:""}结构完整性未通过(${a.blocking.length} 处):${c}。请保留已正确内容,仅修正上述问题后重新输出完整小节。`}let G={"orphan-list-number":"孤立编号由确定性清理去号转正文;写时按小节独立起编,不得继承父级编号。","list-numbering":"编号重排为 1..n 连续;写时编号必须从 1 起连续。","orphan-list-item":"孤立单项列表去除列表符并入正文;单项内容不使用列表格式。","table-header-duplicate":"删除重复表头行;表格必须只有一个表头块。","table-row-duplicate":"删除重复数据行;同一数据不得在表内出现两次。","table-title-in-header":"表名必须独立成行(表题),表头首格必须为列名;须定向重写该表格。","table-empty":"空表须补充数据行或删除;不得交付仅表头的空表。","table-number-orphan-reference":"补建被引用的表实体或修正引用编号;表编号引用必须与实体一一对应。","table-number-duplicate":"表编号重排为全篇唯一;同一表编号不得出现两个实体。","duplicate-line":"删除后出现的重复行;该段内容只能出现一次。","duplicate-sentence-adjacent":"相邻重复句去重;不得同句连发两遍。","truncated-line":"句尾截断须补全该句后重写;不得交付截断内容。","empty-subsection":"空小节必须补写与该小节相关的正文内容,不得只留标题。","sentence-fracture":"句读断裂须重写该句;不得交付句段拼接残留。","punctuation-unbalanced":"全角括号/书名号不闭合须重写所在语句;成对性破坏是内容丢失信号,补齐或删除残缺部分,不得带病交付。"};function H(a,b){let c=b?.includeCleanable??!0,d=new Set(b?.excludeKinds??[]),e=D(a),f=function(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c=[],d=a=>a.replace(/[—–]/gu,"-"),e=new Map,f=/^表\s*(\d+(?:[-—–]\d+)?)\s+\S/u;for(let a=0;a<b.length;a+=1){let c=f.exec((b[a]||"").trim());if(!c)continue;let g=a+1;for(;g<b.length&&!(b[g]||"").trim();)g+=1;if(g>=b.length||!/^\s*\|/u.test(b[g]||""))continue;let h=d(c[1]);e.set(h,[...e.get(h)||[],a+1])}for(let[a,d]of e)d.length<=1||c.push({kind:"table-number-duplicate",line:d[1],excerpt:o((b[d[1]-1]||"").trim()),message:`表编号重复(「表${a}」实体出现 ${d.length} 次:第 ${d.join("、")} 行):表编号必须全篇唯一`});let g=[/[按如]\s*表\s*(\d+(?:[-—–]\d+)?)/gu,/(?<![\u4e00-\u9fa5])见\s*表\s*(\d+(?:[-—–]\d+)?)/gu,/(?:参见|详见|根据|依据|按照|参照|比照|遵照|结合)\s*表\s*(\d+(?:[-—–]\d+)?)/gu];for(let a=0;a<b.length;a+=1){let f=b[a]||"";if(!f.includes("表"))continue;let h=new Set;for(let i of g){let g;for(i.lastIndex=0;g=i.exec(f);){let i=d(g[1]);if(h.has(i)||e.has(i))continue;let j=a+1;for(;j<b.length&&!(b[j]||"").trim();)j+=1;j<b.length&&/^\s*\|/u.test(b[j]||"")||(h.add(i),c.push({kind:"table-number-orphan-reference",line:a+1,excerpt:o(f.trim()),message:`引用了「表${i}」但正文无该编号表实体(引用与实体必须一一对应)`}))}}}return c}(a);return(c?[...e.blocking,...f,...e.cleanable]:[...e.blocking,...f]).filter(a=>!d.has(a.kind)).map(a=>({level:"error",severity:"blocker",category:"structure",message:`结构完整性缺陷:${a.message}(第 ${a.line} 行)`,suggestion:G[a.kind]}))}function I(a){return String(a||"").trim()?D(a).blocking.filter(a=>"truncated-line"===a.kind).map(a=>({level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`句尾截断:第 ${a.line} 行「${a.excerpt}」(${a.message})`,suggestion:"tail"===a.form?"补全该句使其以句读收尾(只补足被截断的成分,不得改写既有事实与数值);该形态禁止确定性删除整段——尾段是可读正文。":"补全该句后重写;句界后可确定性闭合的残片由链尾清理器处理,残留即未收敛。"})):[]}function J(a,b){let c=a.replace(/\r\n?/gu,"\n").split("\n"),d=[];{let a,b=!1,e=!1;for(let f of c){let c=f.trim();if(/^```/u.test(c)){b=!b;continue}if(b)continue;if(/^##\s+目录\s*$/u.test(c)){e=!0;continue}if(e){if(!/^##\s/u.test(c))continue;e=!1}let g=/^##\s+第([一二三四五六七八九十百千万\d]+)章\s+/u.exec(c);if(g){a={declared:function(a){if(/^\d+$/u.test(a))return Number(a);let b={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if("十"===a)return 10;if(1===a.length)return b[a];if(a.startsWith("十"))return 10+(b[a[1]]??0);if(a.endsWith("十"))return(b[a[0]]??0)*10;let c=a.indexOf("十");if(c>0&&c===a.length-2)return(b[a[0]]??0)*10+(b[a[c+1]]??0)}(g[1]||""),prefixCounts:new Map},d.push(a);continue}if(/^##\s+/u.test(c)){a=void 0;continue}let h=/^###\s+(\d+)\.(\d+)\s+/u.exec(c);if(h&&a){let b=Number(h[1]);a.prefixCounts.set(b,(a.prefixCounts.get(b)||0)+1)}}}let e=b?.chapterNumber,f="number"==typeof e&&Number.isInteger(e)&&e>0&&d.length<=1?e:void 0;if(0===d.length&&void 0===f)return{markdown:a,fixedCount:0};let g=d.map(a=>{if(void 0!==a.declared)return a.declared;let b=[...a.prefixCounts.entries()].sort((a,b)=>b[1]-a[1]||a[0]-b[0])[0];return b?.[0]}),h=!1,i=!1,j=0,k=f,l=0,m=0,n=0,o=c.map(a=>{let b=a.trim();if(/^```/u.test(b))return h=!h,a;if(h)return a;if(/^##\s+目录\s*$/u.test(b))return i=!0,a;if(i){if(!/^##\s/u.test(b))return a;i=!1}if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(b))return k=f??g[j],void 0===f&&(j+=1),l=0,m=0,a;if(/^##\s+/u.test(b))return void 0===f&&(k=void 0),a;if(!k||a!==b)return a;let c=/^###\s+(.*)$/u.exec(b);if(c){l+=1,m=0;let b=(c[1]||"").replace(/^\d+(?:\.\d+)*\s+/u,"").trim();if(!b)return a;let d=`### ${k}.${l} ${b}`;return d!==a&&(n+=1),d}let d=/^####\s+(.*)$/u.exec(b);if(d){let b=/^\d+\.\d+\.(\d+)\s+(.*)$/u.exec(d[1]||"");if(!b)return a;m+=1;let c=`#### ${k}.${l}.${m} ${(b[2]||"").trim()}`;return c!==a&&(n+=1),c}return a});return 0===n?{markdown:a,fixedCount:0}:{markdown:o.join("\n"),fixedCount:n}}},93675:(a,b,c)=>{c.d(b,{a:()=>m});var d=c(44505),e=c(65667),f=c(91943),g=c(40299),h=c(85016),i=c(55807),j=c(63516),k=c(54185),l=c(75251);let m=[{key:"table-line-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.br)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"templated-labels",stage5:!0,round2:!0,fix:a=>{let b=(0,k.p_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"structure-integrity",stage5:!0,round2:!0,fix:a=>{let b=(0,f.vi)(a);return{markdown:b.markdown,fixedCount:b.cleaned.length}}},{key:"embedded-heading-split",stage5:!0,round2:!0,fix:a=>{let b=(0,d.rU)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"repeated-words",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Vw)(a);return{markdown:b,fixedCount:+(b!==a)}}},{key:"duplicate-tables",stage5:!1,round2:!0,fix:a=>{let b=(0,d.lR)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"finish-thickness",stage5:!0,round2:!0,fix:a=>{let b=(0,d.JF)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"slot-depth-value",stage5:!0,round2:!0,fix:a=>{let b=(0,d.yV)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"spec-quantity-binding",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,l.C4)(a,b.reconciliationInput??{});return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"labor-peak",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.BR)(a,b.laborPeakAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"phase-labor-values",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.Pl)(a,b.phaseLaborAuthorities);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"resource-breakdown",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,e.Ti)(a,b.resourceBreakdownAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"equipment-batch-values",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.fI)(a,b.equipmentAuthorities);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"internal-table-row-dup",stage5:!0,round2:!0,fix:a=>{let b=(0,d.QM)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"duplicate-basic-info-tables",stage5:!0,round2:!0,fix:a=>{let b=(0,d.y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"fallback-placeholder-rows",stage5:!0,round2:!0,fix:a=>{let b=(0,d.uL)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"greening-maintenance",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.mG)(a,b.greeningMaintenanceAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"paragraph-opening-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Qc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"paragraph-tail-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.kp)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"collision-numbered-heading",stage5:!0,round2:!0,fix:a=>{let b=(0,d.fK)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"heading-uncovered-items",stage5:!0,round2:!0,fix:a=>{let b=(0,d.N$)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"inverted-date-range",stage5:!0,round2:!0,fix:a=>{let b=(0,d.r_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"zero-length-date-range",stage5:!0,round2:!0,fix:a=>{let b=(0,d.WB)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-sentence",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"meta-discourse",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Fd)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"formula-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.EJ)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"self-undermining",stage5:!0,round2:!0,fix:a=>{let b=(0,d.ir)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"ambiguous-either-or",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.SZ)(a,{supportForm:b.supportFormAuthority,decisionLock:b.decisionLockEntries});return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"tender-meta-language",stage5:!0,round2:!0,fix:a=>{let b=(0,j.TX)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"formal-source-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,j.DO)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"forbidden-configuration",stage5:!0,round2:!0,fix:a=>{let b=(0,d.GI)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"duplicate-response-line",stage5:!0,round2:!0,fix:a=>{let b=(0,j.Mf)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"atlas-reference",stage5:!0,round2:!0,fix:a=>{let b=(0,i.Fc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"tertiary-h4-dedupe",stage5:!1,round2:!0,fix:a=>(0,g.pV)(a)},{key:"internal-term-heading",stage5:!0,round2:!0,fix:a=>(0,h.fc)(a)},{key:"skeleton-fingerprint-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.sO)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"flow-form-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.z9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-title-completion",stage5:!1,round2:!0,fix:a=>{let b=(0,k.G9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"sentence-like-heading-split",stage5:!1,round2:!0,fix:(a,b)=>{let c=(0,k.Q1)(a,b.plannedSectionTitles);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"heading-duplicate-merge",stage5:!0,round2:!0,fix:a=>{let b=(0,g.pG)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"section-renumber",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,f.PA)(a,{chapterNumber:b.chapterNumber});return{markdown:c.markdown,fixedCount:c.fixedCount}}}]}};
|
|
249
|
+
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(a)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})):[]}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v12",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}},91943:(a,b,c)=>{c.d(b,{$t:()=>D,G5:()=>F,PA:()=>J,Rc:()=>j,dC:()=>H,dM:()=>m,kj:()=>I,vi:()=>E});let d=/[\u4e00-\u9fa5]/gu,e=/^([ \u3000]*)(\d{1,3})\.\s+\S/u,f=/^([ \u3000]*)([-*+])\s+\S/u,g=/^(#{1,6})\s+\S/u,h=/(?:\.{2,}|…{2,})\s*\d+\s*$/u,i=/。、|,、|;、|。,|,。|。。/u,j=[{open:"(",close:")",label:"全角括号"},{open:"《",close:"》",label:"书名号"}],k=/(?<=[。;!?])/u,l=/[的与和及或在于是对从向把被将按并而则如若等共约达须应需可要能以由使让]/u,m=8;function n(a){return(a.match(d)||[]).length}function o(a){let b=a.trim();return b.length>80?`${b.slice(0,80)}…`:b}function p(a){return g.test(a.trim())}function q(a){return a.trim().startsWith("|")}function r(a){let b=e.exec(a);return!!b&&300>=Number.parseInt(b[2],10)}function s(a){return f.test(a)}function t(a){return p(a)||q(a)}function u(a){return a.replace(/[|`*_<>#\s\u3000]/gu,"").replace(/^:?-{2,}:?$/u,"")}function v(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim())}function w(a){return v(a).map(u).join("|")}function x(a,b){for(let c=b-1;c>=0;c-=1)if(a[c].trim())return c;return -1}function y(a,b){for(let c=b+1;c<a.length;c+=1)if(a[c].trim())return c;return -1}function z(a){let b=[],c=0;for(;c<a.length;){let d=e.exec(a[c]),f=d?Number.parseInt(d[2],10):0;if(!d||f>300){c+=1;continue}let g=d[1].length,h=[{index:c,number:f}],i=c+1;for(;i<a.length;){if(!a[i].trim()){let b=i;for(;b<a.length&&!a[b].trim();)b+=1;let c=b<a.length?e.exec(a[b]):null;if(c&&c[1].length===g&&300>=Number.parseInt(c[2],10)){i=b;continue}break}let b=e.exec(a[i]);if(b&&b[1].length===g&&300>=Number.parseInt(b[2],10)){h.push({index:i,number:Number.parseInt(b[2],10)}),i+=1;continue}break}b.push({indent:g,items:h}),c=i>c?i:c+1}return b}let A=/[。;!?…]$/u,B=/[”’"』」))\]】》]+$/u,C=/(?:[A-Z]{2,6}\s*\/?\s*[A-Z]{0,6}\s*\d[\d.-]*|\d{2,4}\s?[A-Z]{1,2}\s?\d{2,4}(?:[//]\d{1,3})?|[皖烷京沪苏浙粤鲁豫鄂湘川渝陕冀晋蒙辽吉黑闽赣桂黔滇甘青宁新藏]\s?\d{4}\s?[A-Z]{1,2}\s?\d{1,4})$/u;function D(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c={cleanable:[],blocking:[]};for(let a of z(b)){let d=a.items.map(a=>a.number);if(1===a.items.length){d[0]>1&&c.cleanable.push({kind:"orphan-list-number",line:a.items[0].index+1,excerpt:o(b[a.items[0].index]),message:`孤立有序编号「${d[0]}.」(无前序 1.~${d[0]-1}.,疑似跨节继承编号)`});continue}d.every((a,b)=>a===b+1)||c.cleanable.push({kind:"list-numbering",line:a.items[0].index+1,excerpt:`编号序列 ${d.join(",")}`,message:`有序列表编号不连续(第 ${a.items[0].index+1}~${a.items[a.items.length-1].index+1} 行编号:${d.join(",")})`})}!function(a,b){let c=0;for(;c<a.length;){if(!s(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length;){if(!a[e].trim()){let b=e;for(;b<a.length&&!a[b].trim();)b+=1;if(b<a.length&&s(a[b])){e=b;continue}break}if(s(a[e])){d.push(e),e+=1;continue}break}if(1===d.length){let c=d[0],e=x(a,c),f=y(a,c),g=e>=0?a[e].trim():"",h=/[::]$/u.test(g)||/(?:包括|如下|以下|例如|分别是)[::]?$/u.test(g),i=e>=0&&!s(a[e])&&!p(a[e])&&!q(a[e])&&!r(a[e])&&!h,j=f>=0&&!s(a[f])&&!q(a[f]);i&&j&&b.cleanable.push({kind:"orphan-list-item",line:c+1,excerpt:o(a[c]),message:"孤立单项列表(前后均为正文语境,无列表上下文)"})}c=e>c?e:c+1}}(b,c),function(a,b){for(let c of function(a){let b=[],c=0;for(;c<a.length;){if(!q(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length&&q(a[e]);)d.push(e),e+=1;b.push({start:c,rows:d}),c=e}return b}(a)){let d=c.rows;if(d.length<2||!function(a){let b=a.trim();return b.startsWith("|")&&/^[\s|:-]+$/u.test(b)&&/-{3,}/u.test(b)}(a[d[1]]))continue;let e=v(a[d[0]]),f=w(a[d[0]]),g=e[0]?.replace(/[\s*_]/gu,"")??"";e.length>=3&&/表$/u.test(g)&&n(g)>=m&&b.blocking.push({kind:"table-title-in-header",line:d[0]+1,excerpt:g,message:`表格表头首格为表名(「${g}」),列语义错位(表名应独立成行,表头首格必须填列名)`});let h=d.slice(2);if(0===h.length){b.blocking.push({kind:"table-empty",line:d[0]+1,excerpt:o(a[d[0]]),message:"空表(仅表头与分隔线,无任何数据行)"});continue}let i=w(a[h[0]])===f;i&&b.cleanable.push({kind:"table-header-duplicate",line:h[0]+1,excerpt:o(a[h[0]]),message:"重复表头行(分隔线后数据行与表头内容一致)"});let j=new Set;for(let c of(i&&j.add(f),h)){if(i&&c===h[0])continue;let d=w(a[c]);if(!(!d||d.split("|").every(a=>!a))){if(j.has(d)){b.cleanable.push({kind:"table-row-duplicate",line:c+1,excerpt:o(a[c]),message:"表内数据行完全重复"});continue}j.add(d)}}}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=a[c].trim();if(!d||t(d)||r(d)||s(d)||h.test(d))continue;let e=c+1>=a.length||!a[c+1].trim();if(!e&&/\d$/u.test(d)&&!C.test(d)||15>n(d))continue;let f=d[d.length-1];if(!e&&!/[\u4e00-\u9fa5]/u.test(f)&&!C.test(d)||/[::、]$/u.test(d)||/[表图]$/u.test(d))continue;let g=y(a,c);if(g>=0&&q(a[g])&&/^[表图]\s*\d+(?:\s*[-—–..]\s*\d+)?\s+\S/u.test(d)||g>=0&&q(a[g])&&/[表图]\s*\d+(?:\s*[-—–..]\s*\d+)?\s+\S[^。;!?]*$/u.test(d)||g>=0&&(r(a[g])||s(a[g]))&&/(?:完成后|完毕后|结束后|如下|以下)$/u.test(d))continue;if(e){if(A.test(d.replace(B,"")))continue;b.blocking.push({kind:"truncated-line",line:c+1,excerpt:o(a[c]),message:"句尾截断(段末形态:段落结尾无终止标点,疑似生成截断/内容丢失)",form:"tail"});continue}if(!(-1===g||p(a[g])||q(a[g])||r(a[g])||s(a[g]))&&!l.test(f))continue;let i=x(a,c),j=i>=0?a[i].trim():"";(i<0||p(j)||q(j)||r(j)||s(j)||/[。;!?""」』)\]】…]$/u.test(j))&&b.blocking.push({kind:"truncated-line",line:c+1,excerpt:o(a[c]),message:"句尾截断(行尾无终止标点且后续为标题/表格/列表/文末,疑似生成截断)",form:"boundary"})}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=/^(#{3,6})\s+(\S.*)$/u.exec(a[c].trim());if(!d)continue;let e=d[1].length,f=y(a,c);if(-1===f){b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:o(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`});continue}let g=/^(#{1,6})\s+\S/u.exec(a[f].trim());g&&g[1].length<=e&&b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:o(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`})}}(b,c),function(a,b){let c=new Map;for(let d=0;d<a.length;d+=1){let e=a[d].trim();if(!e||t(e)||r(e)||s(e))continue;let f=e.replace(/\s+/gu,"");if(40>n(f))continue;let g=c.get(f);if(void 0===g){c.set(f,d);continue}b.cleanable.push({kind:"duplicate-line",line:d+1,excerpt:o(a[d]),message:`与第 ${g+1} 行完全重复(≥40 字)`})}}(b,c);for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||t(d)||r(d)||s(d))continue;let e=d.split(k).map(a=>a.trim()).filter(Boolean);for(let b=0;b+1<e.length;b+=1)if(e[b]===e[b+1]&&n(e[b])>=16){c.cleanable.push({kind:"duplicate-sentence-adjacent",line:a+1,excerpt:e[b].slice(0,60),message:`相邻句子重复(「${e[b].slice(0,24)}…」连续两遍)`});break}}for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||t(d))continue;let e=i.exec(d);e&&c.blocking.push({kind:"sentence-fracture",line:a+1,excerpt:o(d),message:`标点断裂(「${e[0]}」句读错乱,疑似句段拼接残留/漂移句)`})}let d=b.join("\n");for(let{open:a,close:e,label:f}of j){let g=d.split(a).length-1,h=d.split(e).length-1;if(g===h)continue;let i=b.findIndex(b=>b.split(a).length-1!=b.split(e).length-1);c.blocking.push({kind:"punctuation-unbalanced",line:Math.max(1,i+1),excerpt:o(b[i]??""),message:`${f}不闭合(开 ${g} 处、闭 ${h} 处,疑似内容丢失/拼接残留)`})}return c}function E(a){let b=a.replace(/\r\n?/gu,"\n"),c=[];for(let a=0;a<4;a+=1){let a=b.split("\n"),d=D(b),e=d.blocking.filter(a=>"truncated-line"===a.kind&&"tail"!==a.form);if(0===d.cleanable.length&&0===e.length)break;let f=new Set,g=new Map;for(let b of z(a)){let d=b.items.map(a=>a.number);if(1===b.items.length&&d[0]>1){let e=b.items[0].index,f=a[e].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,"$1");f!==a[e]&&(g.set(e,f),c.push(`孤立编号去号:第 ${e+1} 行(「${d[0]}.」)`));continue}if(b.items.length>1&&!d.every((a,b)=>a===b+1)){if(d[0]>1){let c=b.items[0].index-1;for(;c>=0&&!a[c].trim();)c-=1;if(c>=0&&/[::。;;]\s*\d{1,3}[.、]\s*\S/u.test(a[c]))continue}b.items.forEach((b,c)=>{let d=a[b.index].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,`$1${c+1}. `);d!==a[b.index]&&g.set(b.index,d)}),c.push(`有序列表重排:第 ${b.items[0].index+1}~${b.items[b.items.length-1].index+1} 行(${d.join(",")} → 1..${d.length})`)}}for(let b of d.cleanable){let d=b.line-1;if("orphan-list-item"===b.kind){let b=a[d].replace(/^([ \u3000]*)[-*+]\s+/u,"$1");b!==a[d]&&(g.set(d,b),c.push(`孤立列表项去号:第 ${d+1} 行`))}else if("table-header-duplicate"===b.kind)f.add(d),c.push(`重复表头行删除:第 ${d+1} 行`);else if("table-row-duplicate"===b.kind)f.add(d),c.push(`表内重复数据行删除:第 ${d+1} 行`);else if("duplicate-line"===b.kind)f.add(d),c.push(`完全重复行删除:第 ${d+1} 行`);else if("duplicate-sentence-adjacent"===b.kind){let b=function(a){let b=a.split(k),c=[];for(let a of b){let b=c[c.length-1];void 0!==b&&b===a&&n(a.trim())>=16||c.push(a)}return c.join("")}(a[d]);b!==a[d]&&(g.set(d,b),c.push(`相邻重复句去重:第 ${d+1} 行`))}}for(let b of e){let d=b.line-1;if(f.has(d)||g.has(d))continue;let e=function(a){let b=/^([\s\S]*[。;!?])([^。;!?]+)$/u.exec(a);if(!b)return;let c=b[2].trim(),d=n(c);if(0!==d&&!(d>40))return{line:b[1],removed:c.slice(0,30)}}(a[d]);void 0!==e&&e.line!==a[d]&&(g.set(d,e.line),c.push(`截断行尾残片闭合:第 ${d+1} 行(删尾「${e.removed}」)`))}let h=a.map((a,b)=>f.has(b)?void 0:g.get(b)??a).filter(a=>void 0!==a).join("\n");if(h===b)break;b=h}return{markdown:b,cleaned:c}}function F(a,b){if(0===a.blocking.length)return;let c=a.blocking.slice(0,4).map(a=>`${a.message}(第 ${a.line} 行)`).join(";");return`${b?`${b} `:""}结构完整性未通过(${a.blocking.length} 处):${c}。请保留已正确内容,仅修正上述问题后重新输出完整小节。`}let G={"orphan-list-number":"孤立编号由确定性清理去号转正文;写时按小节独立起编,不得继承父级编号。","list-numbering":"编号重排为 1..n 连续;写时编号必须从 1 起连续。","orphan-list-item":"孤立单项列表去除列表符并入正文;单项内容不使用列表格式。","table-header-duplicate":"删除重复表头行;表格必须只有一个表头块。","table-row-duplicate":"删除重复数据行;同一数据不得在表内出现两次。","table-title-in-header":"表名必须独立成行(表题),表头首格必须为列名;须定向重写该表格。","table-empty":"空表须补充数据行或删除;不得交付仅表头的空表。","table-number-orphan-reference":"补建被引用的表实体或修正引用编号;表编号引用必须与实体一一对应。","table-number-duplicate":"表编号重排为全篇唯一;同一表编号不得出现两个实体。","duplicate-line":"删除后出现的重复行;该段内容只能出现一次。","duplicate-sentence-adjacent":"相邻重复句去重;不得同句连发两遍。","truncated-line":"句尾截断须补全该句后重写;不得交付截断内容。","empty-subsection":"空小节必须补写与该小节相关的正文内容,不得只留标题。","sentence-fracture":"句读断裂须重写该句;不得交付句段拼接残留。","punctuation-unbalanced":"全角括号/书名号不闭合须重写所在语句;成对性破坏是内容丢失信号,补齐或删除残缺部分,不得带病交付。"};function H(a,b){let c=b?.includeCleanable??!0,d=new Set(b?.excludeKinds??[]),e=D(a),f=function(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c=[],d=a=>a.replace(/[—–]/gu,"-"),e=new Map,f=/^表\s*(\d+(?:[-—–]\d+)?)\s+\S/u;for(let a=0;a<b.length;a+=1){let c=f.exec((b[a]||"").trim());if(!c)continue;let g=a+1;for(;g<b.length&&!(b[g]||"").trim();)g+=1;if(g>=b.length||!/^\s*\|/u.test(b[g]||""))continue;let h=d(c[1]);e.set(h,[...e.get(h)||[],a+1])}for(let[a,d]of e)d.length<=1||c.push({kind:"table-number-duplicate",line:d[1],excerpt:o((b[d[1]-1]||"").trim()),message:`表编号重复(「表${a}」实体出现 ${d.length} 次:第 ${d.join("、")} 行):表编号必须全篇唯一`});let g=[/[按如]\s*表\s*(\d+(?:[-—–]\d+)?)/gu,/(?<![\u4e00-\u9fa5])见\s*表\s*(\d+(?:[-—–]\d+)?)/gu,/(?:参见|详见|根据|依据|按照|参照|比照|遵照|结合)\s*表\s*(\d+(?:[-—–]\d+)?)/gu];for(let a=0;a<b.length;a+=1){let f=b[a]||"";if(!f.includes("表"))continue;let h=new Set;for(let i of g){let g;for(i.lastIndex=0;g=i.exec(f);){let i=d(g[1]);if(h.has(i)||e.has(i))continue;let j=a+1;for(;j<b.length&&!(b[j]||"").trim();)j+=1;j<b.length&&/^\s*\|/u.test(b[j]||"")||(h.add(i),c.push({kind:"table-number-orphan-reference",line:a+1,excerpt:o(f.trim()),message:`引用了「表${i}」但正文无该编号表实体(引用与实体必须一一对应)`}))}}}return c}(a);return(c?[...e.blocking,...f,...e.cleanable]:[...e.blocking,...f]).filter(a=>!d.has(a.kind)).map(a=>({level:"error",severity:"blocker",category:"structure",message:`结构完整性缺陷:${a.message}(第 ${a.line} 行)`,suggestion:G[a.kind]}))}function I(a){return String(a||"").trim()?D(a).blocking.filter(a=>"truncated-line"===a.kind).map(a=>({level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`句尾截断:第 ${a.line} 行「${a.excerpt}」(${a.message})`,suggestion:"tail"===a.form?"补全该句使其以句读收尾(只补足被截断的成分,不得改写既有事实与数值);该形态禁止确定性删除整段——尾段是可读正文。":"补全该句后重写;句界后可确定性闭合的残片由链尾清理器处理,残留即未收敛。"})):[]}function J(a,b){let c=a.replace(/\r\n?/gu,"\n").split("\n"),d=[];{let a,b=!1,e=!1;for(let f of c){let c=f.trim();if(/^```/u.test(c)){b=!b;continue}if(b)continue;if(/^##\s+目录\s*$/u.test(c)){e=!0;continue}if(e){if(!/^##\s/u.test(c))continue;e=!1}let g=/^##\s+第([一二三四五六七八九十百千万\d]+)章\s+/u.exec(c);if(g){a={declared:function(a){if(/^\d+$/u.test(a))return Number(a);let b={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if("十"===a)return 10;if(1===a.length)return b[a];if(a.startsWith("十"))return 10+(b[a[1]]??0);if(a.endsWith("十"))return(b[a[0]]??0)*10;let c=a.indexOf("十");if(c>0&&c===a.length-2)return(b[a[0]]??0)*10+(b[a[c+1]]??0)}(g[1]||""),prefixCounts:new Map},d.push(a);continue}if(/^##\s+/u.test(c)){a=void 0;continue}let h=/^###\s+(\d+)\.(\d+)\s+/u.exec(c);if(h&&a){let b=Number(h[1]);a.prefixCounts.set(b,(a.prefixCounts.get(b)||0)+1)}}}let e=b?.chapterNumber,f="number"==typeof e&&Number.isInteger(e)&&e>0&&d.length<=1?e:void 0;if(0===d.length&&void 0===f)return{markdown:a,fixedCount:0};let g=d.map(a=>{if(void 0!==a.declared)return a.declared;let b=[...a.prefixCounts.entries()].sort((a,b)=>b[1]-a[1]||a[0]-b[0])[0];return b?.[0]}),h=!1,i=!1,j=0,k=f,l=0,m=0,n=0,o=c.map(a=>{let b=a.trim();if(/^```/u.test(b))return h=!h,a;if(h)return a;if(/^##\s+目录\s*$/u.test(b))return i=!0,a;if(i){if(!/^##\s/u.test(b))return a;i=!1}if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(b))return k=f??g[j],void 0===f&&(j+=1),l=0,m=0,a;if(/^##\s+/u.test(b))return void 0===f&&(k=void 0),a;if(!k||a!==b)return a;let c=/^###\s+(.*)$/u.exec(b);if(c){l+=1,m=0;let b=(c[1]||"").replace(/^\d+(?:\.\d+)*\s+/u,"").trim();if(!b)return a;let d=`### ${k}.${l} ${b}`;return d!==a&&(n+=1),d}let d=/^####\s+(.*)$/u.exec(b);if(d){let b=/^\d+\.\d+\.(\d+)\s+(.*)$/u.exec(d[1]||"");if(!b)return a;m+=1;let c=`#### ${k}.${l}.${m} ${(b[2]||"").trim()}`;return c!==a&&(n+=1),c}return a});return 0===n?{markdown:a,fixedCount:0}:{markdown:o.join("\n"),fixedCount:n}}},93675:(a,b,c)=>{c.d(b,{a:()=>m});var d=c(44505),e=c(65667),f=c(91943),g=c(40299),h=c(85016),i=c(55807),j=c(63516),k=c(54185),l=c(75251);let m=[{key:"table-line-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.br)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"templated-labels",stage5:!0,round2:!0,fix:a=>{let b=(0,k.p_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"structure-integrity",stage5:!0,round2:!0,fix:a=>{let b=(0,f.vi)(a);return{markdown:b.markdown,fixedCount:b.cleaned.length}}},{key:"embedded-heading-split",stage5:!0,round2:!0,fix:a=>{let b=(0,d.rU)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"repeated-words",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Vw)(a);return{markdown:b,fixedCount:+(b!==a)}}},{key:"duplicate-tables",stage5:!1,round2:!0,fix:a=>{let b=(0,d.lR)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"finish-thickness",stage5:!0,round2:!0,fix:a=>{let b=(0,d.JF)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"slot-depth-value",stage5:!0,round2:!0,fix:a=>{let b=(0,d.yV)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"spec-quantity-binding",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,l.C4)(a,b.reconciliationInput??{});return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"labor-peak",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.BR)(a,b.laborPeakAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"phase-labor-values",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.Pl)(a,b.phaseLaborAuthorities);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"resource-breakdown",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,e.Ti)(a,b.resourceBreakdownAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"equipment-batch-values",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.fI)(a,b.equipmentAuthorities);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"internal-table-row-dup",stage5:!0,round2:!0,fix:a=>{let b=(0,d.QM)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"duplicate-basic-info-tables",stage5:!0,round2:!0,fix:a=>{let b=(0,d.y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"fallback-placeholder-rows",stage5:!0,round2:!0,fix:a=>{let b=(0,d.uL)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"greening-maintenance",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.mG)(a,b.greeningMaintenanceAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"paragraph-opening-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Qc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"paragraph-tail-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.kp)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"collision-numbered-heading",stage5:!0,round2:!0,fix:a=>{let b=(0,d.fK)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"heading-uncovered-items",stage5:!0,round2:!0,fix:a=>{let b=(0,d.N$)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"inverted-date-range",stage5:!0,round2:!0,fix:a=>{let b=(0,d.r_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"zero-length-date-range",stage5:!0,round2:!0,fix:a=>{let b=(0,d.WB)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-sentence",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"meta-discourse",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Fd)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"formula-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.EJ)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"self-undermining",stage5:!0,round2:!0,fix:a=>{let b=(0,d.ir)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"ambiguous-either-or",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.SZ)(a,{supportForm:b.supportFormAuthority,decisionLock:b.decisionLockEntries});return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"tender-meta-language",stage5:!0,round2:!0,fix:a=>{let b=(0,j.TX)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"formal-source-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,j.DO)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"forbidden-configuration",stage5:!0,round2:!0,fix:a=>{let b=(0,d.GI)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"duplicate-response-line",stage5:!0,round2:!0,fix:a=>{let b=(0,j.Mf)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"atlas-reference",stage5:!0,round2:!0,fix:a=>{let b=(0,i.Fc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"tertiary-h4-dedupe",stage5:!1,round2:!0,fix:a=>(0,g.pV)(a)},{key:"internal-term-heading",stage5:!0,round2:!0,fix:a=>(0,h.fc)(a)},{key:"skeleton-fingerprint-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.sO)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"flow-form-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.z9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-title-completion",stage5:!1,round2:!0,fix:a=>{let b=(0,k.G9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"sentence-like-heading-split",stage5:!1,round2:!0,fix:(a,b)=>{let c=(0,k.Q1)(a,b.plannedSectionTitles);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"heading-duplicate-merge",stage5:!0,round2:!0,fix:a=>{let b=(0,g.pG)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"section-renumber",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,f.PA)(a,{chapterNumber:b.chapterNumber});return{markdown:c.markdown,fixedCount:c.fixedCount}}}]}};
|