@customize-agent/server 4.18.8 → 4.18.9
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 +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/1936.js +3 -3
- package/.next/server/chunks/208.js +2 -2
- package/.next/server/chunks/4605.js +12 -12
- package/.next/server/chunks/5284.js +13 -13
- package/.next/server/chunks/6482.js +6 -6
- package/.next/server/chunks/8661.js +4 -4
- 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/template-references.html +1 -1
- package/.next/server/pages-manifest.json +25 -25
- package/package.json +1 -1
- /package/.next/static/{CULEYxFJ1kTZDwUKJ6GxG → JfnX_NQPJUHgV_TWeoNSD}/_buildManifest.js +0 -0
- /package/.next/static/{CULEYxFJ1kTZDwUKJ6GxG → JfnX_NQPJUHgV_TWeoNSD}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=6482,exports.ids=[6482],exports.modules={11248:(a,b,c)=>{c.d(b,{K3:()=>f,zn:()=>g});let d=/[A-Za-z0-9%+-.,]/gu;function e(a){let b=a.charCodeAt(0);return b>=65281&&b<=65374?String.fromCharCode(b-65248):a}function f(a){return a.replace(d,e).replace(/\s+/gu,"").replace(/[×X**]/gu,"x").replace(/[%]/gu,"%").replace(/‰/gu,"permille").replace(/平方米|平方|平米|m²|㎡/giu,"m2").replace(/公顷|hm²/giu,"hm2").replace(/立方米|立方|m³/giu,"m3").replace(/升/gu,"l").replace(/毫升/gu,"ml").replace(/千米|公里/gu,"km").replace(/毫米/gu,"mm").replace(/厘米/gu,"cm").replace(/米/gu,"m").replace(/千克|公斤/gu,"kg").replace(/克/gu,"g").replace(/吨/gu,"t").replace(/人民币万元|万元人民币/gu,"万元").replace(/人民币元|元人民币|¥/gu,"元").replace(/日历天|自然日/gu,"天").replace(/工作日/gu,"工作天").replace(/个月/gu,"月").replace(/小时/gu,"h").replace(/分钟/gu,"min").replace(/兆帕/gu,"mpa").replace(/千帕/gu,"kpa").replace(/千牛/gu,"kn").replace(/牛/gu,"n").replace(/千瓦/gu,"kw").replace(/兆瓦/gu,"mw").replace(/瓦/gu,"w").replace(/千伏/gu,"kv").replace(/伏/gu,"v").replace(/毫安/gu,"ma").replace(/安培|安/gu,"a").replace(/赫兹/gu,"hz").replace(/摄氏度/gu,"℃").replace(/百分之\s*(\d+(?:\.\d+)?)/gu,"$1%").replace(/千分之\s*(\d+(?:\.\d+)?)/gu,"$1permille").replace(/直径\s*(\d+(?:\.\d+)?)/gu,"φ$1").replace(/[Φφ]\s*(\d+(?:\.\d+)?)(?:mm)?/giu,"φ$1").replace(/DN\s*(\d+)/giu,"dn$1").replace(/D\s*(\d+)(?=\b|[^a-z0-9])/giu,"d$1").replace(/\b(KN|MPA|KPA|KW|MW|KV|HZ|DN)\b/giu,a=>a.toLowerCase()).replace(/[,,、。;;::||()()【】\]《》<>"“”'‘’[]/gu,"").toLowerCase()}function g(a){let b=f(a),c=new Set;for(let a of b.matchAll(/\d+(?:\.\d+)?(?:m2|hm2|亩|m3|l|ml|mm|cm|km|m|kg|g|t|万元|亿元|元|天|工作天|月|年|h|min|%|permille|mpa|kpa|pa|kn|n|kn\/m2|kn\/m|kw|mw|w|kv|v|ma|a|hz|℃|台|套|件|个|根|只|组|项|处|座|栋|层|间|批|次|人|工日|人日)?|dn\d+|φ\d+(?:\.\d+)?|d\d+|c\d{2,}|hrb\d+|q\d{3}[a-z]?|m\d+|\d+(?:\.\d+)?x\d+(?:\.\d+)?(?:x\d+(?:\.\d+)?)?|[+-]?\d+\.\d{3}|\d+[:/]\d+/giu))c.add(a[0]);return[...c]}},23760:(a,b,c)=>{c.d(b,{AC:()=>r,Ai:()=>y,BV:()=>C,Ef:()=>x,Ff:()=>p,Fv:()=>K,K1:()=>I,KI:()=>as,M$:()=>aR,N1:()=>aJ,NS:()=>L,S2:()=>aK,SN:()=>M,ST:()=>aw,Ty:()=>D,Yb:()=>at,Z2:()=>aD,Zu:()=>au,bM:()=>aM,f8:()=>G,gN:()=>E,hr:()=>ap,i0:()=>aE,iC:()=>A,ji:()=>aF,k0:()=>J,kQ:()=>aQ,kw:()=>u,mR:()=>aO,qK:()=>R,qm:()=>ah,t4:()=>aP,vY:()=>aC,wl:()=>w,xX:()=>av,yd:()=>aL,yw:()=>Q});var d=c(8753),e=c(74329),f=c(37047),g=c(78217),h=c(11248),i=c(70208),j=c(61373),k=c(91977),l=c(23500),m=c(22157),n=c(52922),o=c(41991);function p(a){let b={blocking:0,important:0,minor:0};for(let c of a)b[function(a){let b="string"==typeof a?a:a.message;if("error"===("string"==typeof a?void 0:a.level))return"blocking";for(let a of e.gr)if(a.pattern.test(b))return a.severity;return"minor"}(c)]+=1;return b}function q(a,b){let c=a.replace(/[\][()`*_>#|{},。、“”‘’:;!?,.!?:;-]+/gu," ").replace(e.ug," ").trim();if(c.length<120)return;let d=c.match(/[A-Za-z][A-Za-z-]{2,}|[\p{Script=Han}]{2,}/gu)||[];if(d.length<30)return;let f=1,g=new Map;for(let a=0;a<d.length;a+=1){let c=d[a].toLowerCase();if(g.set(c,(g.get(c)||0)+1),a>0&&c===d[a-1].toLowerCase()?f+=1:f=1,f>=12)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:"请重新生成该小节,禁止保留连续重复的英文单词或无意义片段。"}}let h=[...g.entries()].sort((a,b)=>b[1]-a[1])[0];if(h&&h[1]>=25&&h[1]/d.length>=.42)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:`检测到“${h[0]}”异常高频重复,请重新生成该小节。`}}function r(a,b=[]){let c=[],d=q(a,"全文");for(let a of(d&&c.push(d),b)){let b=q(a.content,`章节“${a.title}”`);for(let d of(b&&c.push(b),a.sections||[])){let b=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=a.content.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"));if(!e)continue;let f=q(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function s(a){return a.severity&&a.repairability?a:/小节只有标题|空小节|小节内容补写未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"local_deterministic",category:"structure",owner:"system"}:/不得出现|提示词要求|疑似提示词指令标题|项目污染|生成未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:/事实一致性冲突|projectFactOnly|核心事实/u.test(a.message)?{...a,severity:"error"===a.level?"blocker":"warning",repairability:"manual_review",category:"fact_consistency",owner:"user"}:/证据使用覆盖率偏低|BOQ|落位|高分模块|专业链|闭环/u.test(a.message)?"error"===a.level?{...a,severity:"blocker",repairability:"llm_repairable",category:"evidence_coverage",owner:"llm"}:{...a,severity:"warning",repairability:"not_repair_needed",category:"evidence_coverage",owner:"system"}:"error"===a.level?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:"warning"===a.level?{...a,severity:"warning",repairability:"not_repair_needed",category:"style",owner:"system"}:{...a,severity:"suggestion",repairability:"not_repair_needed",category:"style",owner:"system"}}function t(a){let b=s(a);return"blocker"===b.severity&&(!!("qingtian_review"===b.category||"error"===b.level&&"blocker"===b.severity&&/placeholder|source|style|format|structure/u.test(String(b.category||""))||"error"===b.level&&"fact_consistency"===b.category&&/危大工程判定缺失|超危大工程判定缺失|支护形式与资料矛盾|支护形式未落地|设备进场时间荒谬|设备进场工序倒挂/u.test(a.message)||/提示词要求|疑似提示词指令标题|适用性自相矛盾|不得出现/u.test(a.message))||!/目录与正文/u.test(a.message)&&(/配置要求缺少必要内容/u.test(a.message)?"error"===a.level:!!/小节内容补写未完成|空小节|小节只有标题|生成未完成/u.test(a.message)||!/生成后事实反查失败/u.test(a.message)&&(/工序规格冲突/u.test(a.message)?"error"===a.level:!!/项目特点、重点、难点分析 正文不足|项目主要施工内容 正文不足/u.test(a.message)||!(/规划小节正文过短/u.test(a.message)||/事实一致性冲突:项目名称/u.test(a.message))&&(/跨章一致性|专业评分不足|专业缺口|泛化套话|缺少关键线路|缺少材料验收|缺少风险识别|缺少进场/u.test(a.message)?"error"===a.level&&!/证据使用覆盖率偏低|章节逻辑依赖不足|文档交付评分报告/u.test(a.message):!(!e.hc.test(a.message)||/章节审查|最终质量审查|正文篇幅明显低于目标|正文存在空泛占位表达|结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内/u.test(a.message))))))}function u(a){let b=[];for(let c of a.split(/^##\s+/gmu).slice(1)){let a=c.split(/\r?\n/u),d=(a.shift()||"").trim(),e=new Map;for(let b of a){let a=/^####\s+(.+)$/u.exec(b.trim());if(!a)continue;let c=a[1].replace(/^\d+(?:\.\d+)*\s*/u,"").replace(/\s+/gu,"");c.length<2||e.set(c,(e.get(c)||0)+1)}for(let[a,c]of e)if(!(c<2)&&(b.push({level:"error",message:`${d||"某章"} 存在同名小节重复:“${a}”出现 ${c} 次`,suggestion:"同主题内容应合并为一个小节;若确为不同方面,请重命名标题以区分内容,避免目录重复堆叠。"}),b.length>=6))return b}return b}let v=new Set(["如有","应用","措施","体系","管理","保障","要求","内容","工程","项目","施工"]);function w(a,b,c={}){let d=[],e=a.replace(/\s+/gu,""),f=c.semanticSimilarity?a.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>a.trim().replace(/^#{2,4}\s+/u,"").replace(/^\d+(?:\.\d+)*[\s、.]+/u,"").trim()).filter(Boolean).slice(0,80):[];for(let a of b.slice(0,8)){let b=a.replace(/^拟采用/u,"").replace(/^针对/u,"").replace(/^确保/u,"").replace(/[((][^))]*[))]/gu,"").replace(/的保障体系与措施$|管理体系与措施$|保障体系与措施$/u,"").replace(/^\d{1,3}(?:[.、.]\d{1,3})*\s*/u,"").trim().split(/[、,,;;及与和]+/u).map(a=>a.replace(/^[的了者]+/u,"").trim()).filter(a=>a.length>=2&&!v.has(a));if(0!==b.length&&!b.some(a=>e.includes(a))){if(c.semanticSimilarity&&f.length>0&&Math.max(...f.map(b=>c.semanticSimilarity(a,b)))>=.6)continue;d.push({level:"warning",severity:"warning",message:`招标文件评分条目“${a}”未在正文中出现(核心词:${b.join("/")})`,suggestion:"评审条目必须逐条承接为正文小节;请补写对应内容并确保核心关键词落位,避免评标失分。"})}}return d}function x(a,b){let c=(b||[]).flatMap(a=>(a.sections||[]).filter(a=>/新技术|新工艺|新材料|新设备|四新/u.test(a)));if(0===c.length)return[];let d=[],e=(0,m.Xl)(a,"四新",{fuzzy:!0}),f=e?(0,g.V7)(e):0;for(let b of[...new Set(c)]){let c=(0,m.Xl)(a,b,{fuzzy:!0});if(!c||200>(0,g.V7)(c)){if(f>=200)continue;d.push({level:"warning",severity:"warning",message:`大纲承诺小节“${b}”未在正文成稿(正文 ${c?(0,g.V7)(c):0} 字,要求不少于 200 字)`,suggestion:"请补写四新技术应用小节成稿,落位本项目适用的创新工艺、新材料与新设备应用计划。"})}}return d}function y(a,b,c){let d=c.some(a=>(a.content||"").split(e.A5).filter(a=>!/^#{1,6}\s+/u.test(a.trim())).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*:?-{3,}:?/u.test(a)).join("\n").replace(/[|*_`<>#\s]/gu,"").length>=30),f=a.map(s),g=/封面|页眉|页脚|附图|图片引用|CAD图|示意图|插图/u,h=f.filter(a=>"error"===a.level&&t(a)&&!g.test(a.message)),i=f.filter(a=>"error"===a.level&&g.test(a.message)),j=new Set(["structure","style","fact_consistency","qingtian_review"]),k=d?h.filter(a=>j.has(String(a.category||""))):h,l=[{key:"no_errors",label:"无阻断级校验错误",passed:0===k.length},{key:"basic_facts",label:"基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"structured_precision",label:"结构化精确参数已使用",passed:b.preciseFacts.length<e.mu||a.every(a=>"error"!==a.level||!e.Ab.test(a.message))},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))},{key:"no_project_contamination",label:"无项目污染和事实一致性阻断",passed:!a.some(a=>"error"===a.level&&e.Uv.test(a.message)&&t(a))},{key:"numeric_consistency",label:"跨章数值口径与资料一致",passed:!a.some(a=>"error"===a.level&&/跨章一致性冲突|跨章一致性缺口|跨章一致性复核/u.test(a.message)&&t(a))},{key:"manual_postprocess",label:`封面/页眉页脚/附图等 ${i.length} 项由后期人工完善(不阻断导出)`,passed:!0,message:i.length?i.slice(0,5).map(a=>a.message).join(";"):void 0}];return{passed:0===k.length,blockingIssues:k,checklist:l}}function z(a){let b=[],c=a.split(e.A5);for(let a=0;a<c.length;a+=1){if(!e.w7.test(c[a]))continue;let d=[];for(;a<c.length&&e.w7.test(c[a]);)d.push(c[a]),a+=1;a-=1,d.some(a=>e.N3.test(a))&&b.push(d.join("\n"))}return b}function A(a){let b=[...a.matchAll(e.DB)],c=[];for(let d=1;d<b.length;d+=1){let f=b[d].index||0,g=b[d+1]?.index??a.length,h=a.slice(f,g);e.Ks.test(h)&&c.push({level:"warning",message:`第 ${d+1} 章可能重复出现基础信息`,suggestion:"如该信息与本章主题无关,建议合并到更合适的概况类章节,避免重复铺陈。"})}if(0===b.length)return c;let d=b[0].index||0,f=b[1]?.index??a.length,g=a.slice(d,f),h=g.search(e.jM);if(h<=0)return c;let i=g.slice(0,h).replace(e.Dc,""),j=[];for(let a of e.Y8)RegExp(`${a}\\s*[::]`,"u").test(i)&&j.push(a);return j.length>=3&&c.push({level:"warning",message:`基础信息表前重复叙述字段:${j.join("、")}`,suggestion:"基础信息已表格化时,表格前只保留一句引导语,不要重复逐项叙述名称、编号、范围、周期、质量等字段。"}),c}let B=["本节将详细介绍以下内容","本章将从以下几个方面进行阐述","综上所述,通过以上分析得出结论","以下内容将围绕该主题展开论述"];async function C(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>=8),d=await (0,f.Mv)(c,[...B]),e=c.filter(a=>B.some(b=>d(a,b)>=f.Eh));e.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${e.slice(0,3).join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入对象、动作、措施、检查和闭环。"});let g=a.match(/OCR|提示词|绑定片段|后台|文件路径|识别错误|知识库证据|知识库已确认事实|通用兜底段落|兜底占位|兜底模板/giu);return g?.length&&b.push({level:"warning",message:`正文包含后台或资料处理话术:${[...new Set(g)].join("、")}`,suggestion:"建议改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function D(a){let b=[];for(let c of a){let a=(c.sections||[]).filter(Boolean),d=a.filter((b,c)=>a.indexOf(b)!==c);d.length>0&&b.push({level:"warning",message:`${c.title} 存在重复小节:${[...new Set(d)].join("、")}`,suggestion:"请保留用户需求、模板或显式大纲中真实需要的小节,删除重复项。"});let e=new Map;for(let b of a){let a=/劳动力|人员|工种/u.test(b)?"劳动力计划":/机械|设备|机具/u.test(b)?"机械设备计划":/材料|物资/u.test(b)?"材料物资计划":/冬季|雨季|高温|台风|大风/u.test(b)?"特殊气候措施":"";a&&e.set(a,[...e.get(a)||[],b])}for(let[a,d]of e)d.length>1&&b.push({level:"warning",message:`${c.title} 存在重复主题小节:${a}(${d.join("、")})`,suggestion:"请合并同类小节,只保留一个主表或主方案,其他位置采用引用或执行说明。"})}return b}function E(a){let b=e.HX.exec(a);if(!b)return[{level:"error",message:"缺少目录页",suggestion:"请在封面后生成“## 目录”,并按一级章父级、二级小节子级组织。"}];let c=0,d=0;for(let a of b[1].split(e.A5))e.ZT.test(a)&&e.EB.test(a)&&(c+=1,e.sr.test(a)&&(d+=1));return c>0&&0===d?[{level:"error",message:"目录二级小节未作为子级缩进",suggestion:"目录应为父子级导航:一级章单独成行,二级小节至少缩进两个空格列在所属章下方。"}]:[]}function F(a){return a.replace(/^#+\s*/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/[()]/gu,a=>"("===a?"(":")").replace(/[\s::.。;;,,、]+$/gu,"").replace(/的(?=保障体系|管理体系|控制体系|措施|方案|计划|要求)/gu,"").replace(/[\s()()::.。;;,,、-]/gu,"").trim()}function G(a){let b=function(a){let b=e.HX.exec(a);return b?b[1].split(e.A5).map(a=>/^\s*(\d+\.\d+)\s+(.+)$/u.exec(a.trim())).filter(a=>!!a).map(a=>({number:a[1]||"",title:F(a[2]||"")})).filter(a=>a.title):[]}(a),c=[...a.matchAll(/^###\s+(\d+\.\d+)\s+(.+)$/gmu)].map(a=>({number:a[1]||"",title:F(a[2]||"")})).filter(a=>a.title);if(0===b.length||0===c.length)return[];let d=b.map(a=>a.title),f=c.map(a=>a.title),g=new Set(f),h=new Set(d),i=d.filter(a=>!g.has(a)),j=f.filter(a=>!h.has(a)),k=[];i.length>0&&k.push({level:"error",message:`目录与正文不一致,目录小节未在正文中找到:${[...new Set(i)].join("、")}`,suggestion:"建议以最终清洗后的正文二级标题为准重新生成目录。"}),j.length>0&&k.push({level:"error",message:`目录与正文不一致,正文小节未进入目录:${[...new Set(j)].join("、")}`,suggestion:"建议重新生成目录,确保正文二级小节完整进入目录。"});let l=new Map(c.map(a=>[a.number,a.title])),m=new Set(b.map(a=>a.number)),n=b.filter(a=>l.has(a.number)&&l.get(a.number)!==a.title),o=c.filter(a=>!m.has(a.number));return b.length!==c.length&&k.push({level:"error",message:`目录与正文小节数量不一致:目录 ${b.length} 节、正文 ${c.length} 节`,suggestion:"正文 H3 编号必须连续单调且与目录一一对应;出现重复编号、跳号或丢节时以正文实际结构重建目录。"}),n.length>0&&k.push({level:"error",message:`目录与正文同一编号对应不同小节:${n.slice(0,5).map(a=>`${a.number} 目录「${a.title}」/正文「${l.get(a.number)}」`).join("、")}`,suggestion:"目录必须按正文 H3 实际编号与标题生成,同一编号不得对应不同小节名称。"}),o.length>0&&k.push({level:"error",message:`正文小节编号未出现在目录中:${o.slice(0,5).map(a=>`${a.number} ${a.title}`).join("、")}`,suggestion:"目录编号与正文编号必须全集一致。"}),k}function H(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,i.GQ)(b),d=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|注意事项))\s*$/u;return d.test(b)||d.test(c)}function I(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,i.GQ)(a[1]||"")).filter(H);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function J(a){let b=[],c=a.split(e.A5).map(a=>a.trim()).filter(a=>a&&!/^#{1,6}\s+/u.test(a)&&!/^\s*\|/u.test(a)&&!/^<div\b/iu.test(a)),d=c.find(a=>F(a).length<=1);for(let a of(d&&b.push({level:"warning",message:`正文存在孤立字或残缺段落:${d}`,suggestion:"请删除残缺行或重新生成所在小节。"}),c.filter(a=>/[,、;:和与在为对将]$/u.test(a)||/(通过|包括|如下|主要包括|验收|合格后|复查合格后|设计风|确认后|具体如下|应符合|不少于|以及|且应|不得少于)$/u.test(a)).slice(0,3)))b.push({level:"warning",message:`正文存在疑似截断句:${a}`,suggestion:"请补完整该段落,避免以连接词、逗号、冒号或无句号的动作词结尾。"});let f=c.find(a=>a.length>380);f&&b.push({level:"warning",message:`正文存在过长段落:${f}`,suggestion:"请拆分为多段或表格,改善导出版式和可读性。"});let g=c.find(a=>/\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S/u.test(a)&&!/\b\d+\.\d+\s*(?:mm|cm|m|㎡|m2|kg|t|MPa|kPa|V|KV|kV|A)\b/iu.test(a));g&&b.push({level:"error",message:`正文存在列表项粘连同一行:${g.slice(0,120)}`,suggestion:"有序列表和无序列表必须逐项独占一行,确保 Markdown/PDF/DOCX 正确排版。"});let h=a.match(/PDF\s*第\s*|(?:PDF\s*)?第\s*\d+\s*(?:[-—至到~~]\s*\d+)?\s*页|(?:图纸|清单|资料|文件|[\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24}(?:工程)?)\s*(?:[((]?\s*|(?:共|多达|约|合计)\s*)\d+\s*页|[\u4e00-\u9fa5A-Za-z0-9、及与和]{2,24}\s*(?:共|多达|约|合计)\s*\d+\s*页|\d+\s*页\s*(?:图纸|资料|文件|装饰|土建|加固|给排水|电气|智能化|消防)|\d+\s*页/iu)?.[0];h&&b.push({level:"error",message:`正文残留资料页码元信息:${h}`,suggestion:"正式投标正文应引用招标文件、施工图设计文件、工程量清单和相关专业图纸,不写 PDF 页码或资料页数。"});let i=c.find(a=>/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(a));return i&&b.push({level:"error",message:`正文残留内部处理说明:${i.slice(0,120)}`,suggestion:"正式投标正文不得出现内部事实抽取、后台处理或文件名引用限制说明。"}),b}function K(a){let b=[],c=a.search(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/mu),d=[...(c>=0?a.slice(c):a.replace(/^##\s+目录[\s\S]*?(?=^##\s+第[一二三四五六七八九十百千万\d]+章\s+)/mu,"")).matchAll(/^##\s+(.+)$/gmu)].map(a=>(a[1]||"").trim()).filter(a=>"目录"!==a&&!/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(a)&&!/^附录/u.test(a)).map(a=>(0,i.GQ)(a));d.length>0&&b.push({level:"error",message:`正文存在非正式章二级标题:${[...new Set(d)].slice(0,8).join("、")}`,suggestion:"正文 ## 只允许用于“第X章”正式章标题;章内小节必须使用 ### X.Y。"});let e=[...a.matchAll(/^##\s+(第[一二三四五六七八九十百千万\d]+章\s+.+)$/gmu)];for(let c=0;c<e.length;c+=1){let d=e[c].index||0,f=e[c+1]?.index??a.length,g=[...a.slice(d,f).matchAll(/^###\s+\d+\.\d+\s+(.+)$/gmu)].map(a=>(0,i.GQ)(a[1]||"")),h=(0,i.GQ)((e[c][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,""));1===g.length&&F(g[0])===F(h)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${e[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function L(a){a=(0,j.BJ)(a);let b=[];{let c=a.split(e.A5);for(let a=1;a<c.length;a+=1){let d=(c[a]||"").trim(),f=(c[a-1]||"").trim();d&&!/^\|/u.test(d)&&d.endsWith("|")&&1===(d.match(/\|/gu)||[]).length&&!/^#{1,6}\s/u.test(d)&&e.w7.test(f)&&b.push({level:"error",message:`表格断行残片:${d}`,suggestion:"该行是表格数据行整列丢失的残片:合并回所属表格行并补齐缺失列,或删除该残行。"})}}/按审批确认执行/u.test(a)&&b.push({level:"error",message:"表格存在自动兜底污染内容:按审批确认执行",suggestion:"正式投标表格不得使用通用兜底短语,应保留真实业务内容或删除该行。"});let c=[];for(let b of a.matchAll(/\|\s*信息项\s*\|\s*内容\s*\|/gu)){let d=a.slice(b.index||0),f=[];for(let a of d.split(e.A5)){if(f.length>0&&!e.w7.test(a))break;f.push(a)}c.push(f.join("\n"))}let d=c.filter(a=>/项目名称|招标人|建设单位|发包人|建设地点|招标范围|计划工期|合同估算价|质量标准/u.test(a)).length;d>1&&b.push({level:"error",message:`项目基础信息类表格重复:${d} 处`,suggestion:"项目名称、招标人、建设地点、工期、质量等基础信息只能集中输出一次。"});let f=a.match(/^\|\s*---\s*\|\s*---\s*\|\s*$/gmu)||[];for(let c of(f.length>60&&b.push({level:"error",message:`表格分隔线异常重复:${f.length} 行`,suggestion:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),z(a))){let a=c.split(e.A5).filter(a=>e.w7.test(a));if(a.length<2)continue;if(!e.N3.test(a[1]||"")){b.push({level:"error",message:`表格分隔线位置不规范:${a[0]||""}`,suggestion:"Markdown 表格必须紧跟表头输出分隔线,例如 |---|---|,中间不得插入正文或其他管道行。"});continue}let d=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim())),f=d[0]||[],g=f.filter(a=>/^(?:列|字段|内容|备注)\d+$/u.test(a));g.length>0&&b.push({level:"error",message:`表格存在泛化表头:${g.join("、")}`,suggestion:"正式投标表格必须使用业务字段表头,不得出现“列5/字段1/内容2”等临时表头。"});let h=f.length;d.find((a,b)=>1!==b&&a.length!==h)&&b.push({level:"error",message:`表格列数不一致:${f.join("、")}`,suggestion:"请统一表头和数据行列数;不应通过自动填充兜底词修补表格。"});let i=d.slice(2),j=i.find(a=>a.some(a=>""===a));j&&b.push({level:"error",message:`表格存在空单元格:${f.join("、")}(“${j[0]||""}”行)`,suggestion:"正式交付表格不得出现空单元格;缺失数据应从资料补齐或按业务口径填写具体值,不得留空。"});let k=i.find(a=>a.some((b,c)=>(!!/^(?:—+|-+|-|\/|N\/A|n\/a|待定|待补充|待确认|待查|待补|若干|暂无|无数据)$/u.test(b)||!!/^约\d/u.test(b))&&!(/^(?:合计|小计|总计|累计)/u.test(a[0]||"")&&/^(?:—+|-+)$/u.test(b)&&c>0)));if(k){let a=/^(?:合计|小计|总计|累计)/u.test(k[0]||""),c=k.find((b,c)=>(!!/^(?:—+|-+|-|\/|N\/A|n\/a|待定|待补充|待确认|待查|待补|若干|暂无|无数据)$/u.test(b)||!!/^约\d/u.test(b))&&!(a&&/^(?:—+|-+)$/u.test(b)&&c>0))||"";b.push({level:"error",message:`表格存在占位符单元格:${f.join("、")}(“${k[0]||""}”行“${c}”)`,suggestion:"正式交付表格不得用“—/若干/约/待定”等占位或模糊表达代替具体数据;应从资料补齐具体数值。"})}}return b}function M(a){let b=[],c=a.split(e.A5),d=[];for(let a=0;a<c.length;a+=1){if(!e.w7.test(c[a]))continue;let b=a,f=[];for(;a<c.length&&e.w7.test(c[a]);)f.push(c[a]),a+=1;a-=1;let g=f.filter(a=>e.N3.test(a)).length;if(0===g)continue;let h=(f[0]||"").trim(),i=h.startsWith("|")?h.slice(1):h,j=(i.endsWith("|")?i.slice(0,-1):i).split("|").map(a=>a.split("**").join("").trim()).filter(a=>a.length>0);d.push({headerKey:j.join("|"),headerText:j.join("、"),start:b,end:a,dividerCount:g})}let f=new Map;for(let a of d)f.set(a.headerKey,(f.get(a.headerKey)||0)+1);let g=[...f.entries()].filter(([,a])=>a>=3);if(g.length>0){let a=d.find(a=>f.get(a.headerKey)===g[0]?.[1])?.headerText||"";b.push({level:"warning",message:`同主题表格重复堆叠:${g.length} 组相同表头出现 3 次及以上(如:${a})`,suggestion:"同一主题表格全文只出现一次,禁止拆成多张碎表重复堆叠凑数;请合并同类表格或删除重复内容。"})}let h=0;for(let a=1;a<d.length;a+=1){let b=d[a-1],e=d[a];b&&e&&c.slice(b.end+1,e.start).every(a=>""===a.trim())&&(h+=1)}for(let a of d)a.dividerCount>=2&&(h+=a.dividerCount-1);return h>=2&&b.push({level:"warning",message:`表格连续堆叠:${h} 处相邻表格无正文分隔`,suggestion:"表格之间应有正文引导叙述,禁止连续堆叠多张表格凑数。"}),b}function N(a){return a.split(e.A5).filter(a=>!/^#{1,6}\s+/u.test(a.trim())).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*:?-{3,}:?/u.test(a)).filter(a=>!/^<\/?div\b/iu.test(a.trim())).join("\n").replace(/[|*_`<>-]/gu,"").replace(e.ug,"").length}function O(a){let b=[...a.matchAll(/^(#{3,4})\s+(.+)$/gmu)];return b.map((c,d)=>{let e=c[1].length,f=(c.index||0)+c[0].length,g=b.slice(d+1).find(a=>a[1].length<=e),h=g?.index??a.length,i=(c[2]||"").trim();return{rawTitle:i,title:F(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function P(a,b,c,d,f){let g=N(d),h=e.w7.test(d)&&d.split(e.A5).some(a=>e.N3.test(a)),i=N(d.split("\n").filter(a=>!e.w7.test(a)&&!e.N3.test(a)).join("\n").replace(/^#{1,6}\s+.+$/gmu,""));if(/\[WRITER_MISSING_SECTION\]|Writer 未完成/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节内容补写未完成:${b}`};if(/【本小节生成未达标,需重新生成】/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节生成未达标:${b}`};if(/项目基本信息|基本信息|工程概况|项目概况|工程概述|项目概述/u.test(b)&&(h||g>=40)||/^附录[一二三四五六七八九十A-Z\d]/u.test(b)&&h)return;let j=/清单|配置|汇总|一览|明细|计划|进度|节点|安排/u.test(b)||/表[^,。;:\s]{0,6}$/u.test(b);if(!(h&&j&&Math.max(0,d.split(e.A5).filter(a=>e.w7.test(a)&&!e.N3.test(a)).length-1)>=2)){if(h&&i<20)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:f?`${a} 只有标题或表格无正文:${b}`:`${a} 小节只有标题或表格无正文:${b}`};if(!(g>=80)||!(i>=20)){if(0===g)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 空小节:${b}`};if(g<180)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"too_short",planned:f,message:`${a} ${f?"规划小节":"正文小节"}正文过短:${b}`}}}}function Q(a,b){let c=[],d=new Set;for(let e of b){let b=e.content?.trim()?e.content:a;for(let a of(e.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(F(a))&&!/^附录/u.test(a.trim()))){let f=F(a),g=function(a,b){let c=O(a).filter(a=>(function(a,b){let c=F(a),d=F(b);if(!c||!d)return!1;if(c===d||c.includes(d)||d.includes(c))return!0;let e=/项目概况|主要施工方案|新技术新材料|工程重点难点|重点难点|危大工程|保障体系|安全保障|工期|质量|安全生产|应急预案|资源|人材机|材料|机械|劳动力|进度|关键线路|交通疏导|成品保护|深化设计|验收/gu,f=new Set(c.match(e)||[]),g=new Set(d.match(e)||[]),h=[...f].filter(a=>g.has(a)).length;return h>=2||1===Math.min(f.size,g.size)&&1===h&&16>=Math.max(c.length,d.length)})(a.rawTitle,b));return c.length<=1?c[0]:c.map(a=>({item:a,gap:P("",b,a.level,a.body,!0),textLength:N(a.body)})).sort((a,b)=>{let c=a.gap&&"empty"===a.gap.reason?1:0,d=b.gap&&"empty"===b.gap.reason?1:0;return c!==d?c-d:b.textLength-a.textLength})[0]?.item}(b,a),h=`${e.title}|${f}|planned`;if(!g){c.push({chapterTitle:e.title,sectionTitle:a,level:3,bodyLength:0,reason:"missing_planned_section",planned:!0,message:`${e.title} 缺少规划小节:${a}`}),d.add(h);continue}let i=P(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of O(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=P(e.title,a.title,a.level,a.body,!1);g&&"empty"===g.reason&&c.push(g),d.add(b)}}return c}function R(a,b){return Q(a,b).filter(a=>"empty"===a.reason||"missing_planned_section"===a.reason).map(a=>({level:"error",message:a.message,suggestion:"missing_planned_section"===a.reason?"必须补充该规划小节正式正文,不得缺节导出。":"必须补充与该小节相关的材料事实和必要内容,达到正文完整度要求。"}))}function S(a){return`${a.fieldName||a.key} ${(0,m.lG)(a.value)}`.replace(/\s+/gu," ").trim()}let T=/占地|用地|地下|地上|办公|生活|附属|辅助|绿化|道路|广场|门卫|配电|泵房|锅炉房|车库|车棚|岗亭|传达|警卫|样板房|售楼|门房|单栋|各栋|楼层|每层|单层|架空|雨棚|堆场/u,U=/办公区|生活区|加工区|施工区|堆场|门卫|配电|泵房|锅炉房|车库|车棚|岗亭|传达|警卫|样板房|售楼|门房|地下室|楼层|单层|每层|架空|雨棚/u,V=/暂列|暂估|费率|税率|利润|规费|安全文明|措施费|人工费|材料费|机械费|管理费|暂定/u,W=["地下建筑面积与地上建筑面积的分项指标","配套用房与附属用房的建筑面积","占地面积与绿化面积的用地指标"],X=["总建筑面积的总体规模指标","建设规模的总量数值"],Y=["暂列金额与暂估价的子项费用","人工费与材料费的分项费用"],Z=["合同估算价的总金额口径","投资估算的总体金额"];async function $(a){return(0,o.A)({prototypes:[...W],negativePrototypes:[...X],embedDocuments:a})}async function _(a){return(0,o.A)({prototypes:[...Y],negativePrototypes:[...Z],embedDocuments:a})}async function aa(a,b,c,d,e,f){let g=[],h=[],i=new Set,j=RegExp(`(?:${b.source})(?:[^\\n。;;,,]{0,14}?)(\\d{2,}(?:[.,]\\d+)?\\s*万?)\\s*(${c.source})`,"giu"),k=[...a.matchAll(j)],l=f?k.filter(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),f=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return!(d&&d.test(c)||e&&e.test(f))}).map(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),d=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return{index:b.index??0,context:`${d}${c}`.replace(/\s+/gu,"").slice(-24)}}):[],m=l.length>0?await f(l.map(a=>a.context)):[],n=new Set(l.filter((a,b)=>m[b]).map(a=>a.index));for(let c of k){let f=c[1].replace(/[,,]/gu,"").replace(/\s+/gu,""),j=c[2],k=c[0].slice(0,c[0].indexOf(c[1])),l=a.slice(Math.max(0,(c.index??0)-16),c.index??0);if(d&&d.test(k)||e&&e.test(l)||n.has(c.index??0)){h.push({value:f,unit:j,scope:c[0].slice(0,k.length).replace(/\s+/gu,""),context:`${l}${k}`.replace(/\s+/gu,"").slice(-24)});continue}let m=c[0].match(b)?.[0]||"",o=`${f}|${j}`;!f||i.has(o)||(i.add(o),g.push({value:f,unit:j,scope:m}))}return{entries:g,skipped:h}}function ab(a,b){return aa(a,ad,ae,T,U,b).then(({entries:b})=>{let c=b.find(a=>"建筑面积"===a.scope.replace(/^总/u,""));return/占地|用地/u.test(a)?c:b[0]})}function ac(a){let b=a.value.replace(/[,,]/gu,"").trim(),c=/^([\d.]+)万/u.exec(b),d=c?1e4*Number(c[1]):Number(b);return Number.isFinite(d)?/亿元/u.test(a.unit)?1e8*d:/万元/u.test(a.unit)?1e4*d:d:NaN}let ad=/(?<![地上地下门卫室值班室配电室配电房泵房水泵房锅炉房公厕车库车棚岗亭传达室警卫室样板房售楼处门房])总?建筑面积|总?建设规模/u,ae=/㎡|m²|m2|平方米/u,af=/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价/u,ag=/万元|亿元/u;async function ah(a,b,c,d,e){let f=[],g=await $(e),h=await _(e),i=a=>c?.find(b=>b.kind===a&&b.resolution&&"low"!==b.confidence)?.resolution,j=a=>{let b=/(\d+(?:\.\d+)?)\s*(㎡|m²|m2|平方米|万元|亿元)/u.exec(a);return b?{value:b[1],unit:b[2]}:void 0},k=i("duration")??b.schedule.map(S).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),l=b.quality.map(S).find(a=>/质量|合格|优良/u.test(a));if(k){let b=function(a){let b=new Set;for(let c of[/\d+\s*日历天(?!内)/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*天/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*(?:个月|月)/gu])for(let d of a.matchAll(c)){let a=d[0].match(/\d+\s*(?:日历天|天|个月|月)/u)?.[0]?.replace(/\s+/gu,"");a&&b.add(a)}return[...b]}(k)[0],c=a.split("\n").filter(a=>!/^\s*\|/u.test(a.trim())).join("\n"),d=[];for(let a of c.matchAll(/(?:计划工期|合同工期|总工期|工期|施工周期)[^\d。;;\n|]{0,18}(\d{1,4})\s*日历天/gu)){let e=c.slice(Math.max(0,(a.index||0)-8),a.index||0)+a[0];if(/顺延|延长|展期|不超过|不大于|最多|累计|第\d+日/u.test(e)||/基坑|支护|桩基|土方|基础|主体|装饰|装修|安装|室外|分项|分阶段|阶段|关键线路|单层|每层|地下室|砌体|二次结构|收尾|调试/u.test(e))continue;let f=`${a[1]}日历天`;f===b||d.includes(f)||d.push(f)}b&&d.length>=1&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性冲突:正文出现与资料工期不一致的表述 ${d.slice(0,6).join("、")}`,suggestion:`请统一使用资料中的工期口径:${k}`})}l&&!/质量标准|质量目标|合格|优良/u.test(a)&&(d&&[...d.values()].some(a=>a.contentNeeds.quality)||f.push({level:"error",message:"跨章一致性缺口:正文未稳定体现资料中的质量目标",suggestion:`请在工程概况、质量保证和验收相关章节统一体现:${l}`}));let m=i("area"),n=b.project.map(S).filter(a=>/建设规模|建筑面积/u.test(a)),o=await Promise.all(n.map(a=>ab(a,g))),p=m??n.find((a,b)=>void 0!==o[b]);if(p){let c=m?j(m):await ab(p,g),{entries:d,skipped:e}=await aa(a,ad,ae,T,U,g);if(c){let a=d.filter(a=>ac(a)!==ac(c));a.length>=1&&f.push({level:"error",message:`跨章一致性冲突:正文出现与资料建设规模不一致的表述 ${a.slice(0,6).map(a=>`${a.value}${a.unit}`).join("、")}`,suggestion:`请统一使用资料中的建设规模口径:${p.slice(0,80)}`})}if(e.length>0){let a=[m?`建筑总量裁决值:${m}`:"",...b.project.map(S).filter(a=>/建设规模|建筑面积|占地/u.test(a)).slice(0,3)].filter(Boolean);f.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规模口径复核:正文 ${e.slice(0,3).map(a=>`“${a.context.slice(-14)}${a.value}${a.unit}”`).join("、")} 等 ${e.length} 处数值与口径词之间混入子项/专项口径词,需核对口径归属`,suggestion:`依据项目规模事实卡逐处核对该数值的口径归属(${a.join(";")||"无可用事实卡,以绑定资料原文为准"}):与事实卡对应口径一致的数值保留原样,口径错位或数值不一致的数值改正为事实卡对应口径值,不得把子项/专项口径数值改成建筑总量数值。`})}}let q=i("cost"),r=q??b.project.map(S).find(a=>/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价/u.test(a));if(r){let b=q?j(q):(await aa(r,af,ag,V,void 0,h)).entries[0],c=(await aa(a,af,ag,V,void 0,h)).entries;if(b){let a=c.filter(a=>ac(a)!==ac(b));a.length>=1&&f.push({level:"error",message:`跨章一致性冲突:正文出现与资料估算价不一致的表述 ${a.slice(0,6).map(a=>`${a.value}${a.unit}`).join("、")}`,suggestion:`请统一使用资料中的估算价口径:${r.slice(0,80)}`})}}return f}let ai=/找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层|隔热层|隔离层/gu,aj=/铺设|施工|浇筑|粘贴|铺贴|涂抹|完成|进行|待|设置|铺装|挂网|喷涂|灌注/u,ak=["施工过程与工序动作的先后描述","铺设浇筑完成后再进行的工序"],al=["结构层的厚度与配比参数","找平层厚20毫米的规格"];async function am(a){return(0,o.A)({prototypes:[...ak],negativePrototypes:[...al],embedDocuments:a})}async function an(a,b){let c=[],d=[...a.matchAll(ai)],e=[],f=(a,b)=>e.some(([c,d])=>a<d&&b>c),g=[],h=(a,d,h,i,j,k)=>{let l=[...a.matchAll(h)];for(let h of"first"===i?l:[...l].reverse()){let l=d+(h.index??0),m=l+h[0].length;if(f(l,m))continue;let n="first"===i?a.slice(0,h.index??0):a.slice((h.index??0)+h[0].length);if(!aj.test(n)){if("thickness"===k){let a=Number(h[1]??"");if(!Number.isFinite(a)||a<=0||a>=1e3)continue}b&&n.trim()&&g.push({key:`${j}|${l}|${m}`,gap:n}),e.push([l,m]),c.push({layer:j,span:[l,m],raw:h[0],kind:k});return}}};for(let b=0;b<d.length;b+=1){let c=d[b],e=c[0],f=c.index??0,g=f+e.length,i=d[b+1]?.index,j=void 0===i?Math.min(a.length,g+90):i,k=a.slice(g,j),l=b>0?(d[b-1].index??0)+d[b-1][0].length:Math.max(0,f-40),m=a.slice(l,f);h(k,g,/(\d+:\d+(?:\.\d+)?)/gu,"first",e,"ratio"),h(m,l,/(\d+:\d+(?:\.\d+)?)/gu,"last",e,"ratio"),h(k,g,/(\d+(?:\.\d+)?)\s*mm/gu,"first",e,"thickness"),h(m,l,/(\d+(?:\.\d+)?)\s*mm/gu,"last",e,"thickness")}if(b&&g.length>0){let a=await b(g.map(a=>a.gap)),d=new Set(g.filter((b,c)=>a[c]).map(a=>a.key));return c.filter(a=>!d.has(`${a.layer}|${a.span[0]}|${a.span[1]}`))}return c}async function ao(a,b){let c=[],d=new Set;for(let e of(await an(a,b))){let a="ratio"===e.kind?e.raw.match(/(\d+:\d+(?:\.\d+)?)/u)?.[1]:void 0,b="thickness"===e.kind?e.raw.match(/(\d+(?:\.\d+)?)/u)?.[1]:void 0,f=b?Number(b):void 0,g=`${e.layer}|${a||""}|${f??""}`;d.has(g)||(d.add(g),c.push({layer:e.layer,ratio:a,thickness:f}))}return c}async function ap(a,b,c){let d=[],e=await am(c),f=[...b.specifications,...b.quality,...b.preciseFacts,...b.bills].map(S).join("\n"),g=await ao(f,e);if(0===g.length)return d;let h=new Map;for(let a of g){let b=h.get(a.layer)||[];b.push(a),h.set(a.layer,b)}let i=await ao(a,e),j=new Set;for(let[a,b]of h){let c=[...new Set(b.map(a=>a.ratio).filter(Boolean))],e=[...new Set(b.map(a=>a.thickness).filter(a=>Number.isFinite(a)))];for(let b of i.filter(b=>b.layer===a)){if(1===c.length&&b.ratio&&b.ratio!==c[0]){let e=`ratio|${a}|${b.ratio}`;j.has(e)||(j.add(e),d.push({level:"error",message:`工序规格冲突:正文${a}配比 ${b.ratio} 与资料口径 ${c[0]} 不一致`,suggestion:`请将${a}配比统一为资料口径 ${c[0]},禁止改写资料规格。`}))}if(1===e.length&&Number.isFinite(b.thickness)&&Math.abs(b.thickness-e[0])>=1){let c=`thickness|${a}|${b.thickness}`;j.has(c)||(j.add(c),d.push({level:"error",message:`工序规格冲突:正文${a}厚度 ${b.thickness}mm 与资料口径 ${e[0]}mm 不一致`,suggestion:`请将${a}厚度统一为资料口径 ${e[0]}mm。`}))}}}return d}async function aq(a,b,c){let d=await $(c),e=await _(c),f=await am(c),g=[...a.specifications,...a.quality,...a.preciseFacts,...a.bills].map(S).join("\n"),h=new Map;for(let a of(await ao(g,f))){let b=h.get(a.layer)||{ratios:[],thicknesses:[]};a.ratio&&!b.ratios.includes(a.ratio)&&b.ratios.push(a.ratio),Number.isFinite(a.thickness)&&!b.thicknesses.includes(a.thickness)&&b.thicknesses.push(a.thickness),h.set(a.layer,b)}let i=new Map;for(let[a,b]of h)(1===b.ratios.length||1===b.thicknesses.length)&&i.set(a,{ratio:1===b.ratios.length?b.ratios[0]:void 0,thickness:1===b.thicknesses.length?b.thicknesses[0]:void 0});let j=a=>b?.find(b=>b.kind===a&&b.resolution&&"low"!==b.confidence)?.resolution,k=a=>{let b=/(\d+(?:\.\d+)?)\s*(㎡|m²|m2|平方米|万元|亿元)/u.exec(a);return b?{value:b[1],unit:b[2]}:void 0},l=j("area"),m=a.project.map(S).filter(a=>/建设规模|建筑面积/u.test(a)),n=await Promise.all(m.map(a=>ab(a,d))),o=l??m.find((a,b)=>void 0!==n[b]),p=j("cost"),q=p??a.project.map(S).find(a=>/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价/u.test(a));return{specTargets:i,scaleTarget:o?l?k(l):await ab(o,d):void 0,costTarget:q?p?k(p):(await aa(q,af,ag,V,void 0,e)).entries[0]:void 0,scaleGapGate:d,costGapGate:e,actionGate:f}}async function ar(a,b){let c=[];for(let d of(await an(a,b.actionGate))){let a=b.specTargets.get(d.layer);if(a){if("ratio"===d.kind&&a.ratio){let b=d.raw.match(/(\d+:\d+(?:\.\d+)?)/u)?.[1];b&&b!==a.ratio&&c.push({start:d.span[0],end:d.span[1],replacement:d.raw.replace(/(\d+:\d+(?:\.\d+)?)/u,a.ratio),detail:`${d.layer}配比 ${b}→${a.ratio}`})}if("thickness"===d.kind&&Number.isFinite(a.thickness)){let b=Number(d.raw.match(/(\d+(?:\.\d+)?)/u)?.[1]);Number.isFinite(b)&&Math.abs(b-a.thickness)>=1&&c.push({start:d.span[0],end:d.span[1],replacement:d.raw.replace(/(\d+(?:\.\d+)?)/u,String(a.thickness)),detail:`${d.layer}厚度 ${b}mm→${a.thickness}mm`})}}}let d=async(b,d,e,f,g,h,i)=>{if(!b)return;let j=RegExp(`(?:${d.source})(?:[^\\n。;;,,]{0,14}?)(\\d{2,}(?:[.,]\\d+)?\\s*万?)\\s*(${e.source})`,"giu"),k=[...a.matchAll(j)],l=i?k.filter(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),d=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return!(g&&g.test(c)||h&&h.test(d))}).map(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),d=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return{index:b.index??0,context:`${d}${c}`.replace(/\s+/gu,"").slice(-24)}}):[],m=l.length>0?await i(l.map(a=>a.context)):[],n=new Set(l.filter((a,b)=>m[b]).map(a=>a.index));for(let d of k){let e=d[0].slice(0,d[0].indexOf(d[1])),i=a.slice(Math.max(0,(d.index??0)-16),d.index??0);if(g&&g.test(e)||h&&h.test(i)||n.has(d.index??0))continue;let j={value:d[1].replace(/[,,]/gu,"").replace(/\s+/gu,""),unit:d[2]};if(ac(j)===ac(b))continue;let k=(d.index??0)+d[0].indexOf(d[1]),l=k+d[1].length;c.some(a=>a.start<l&&a.end>k)||c.push({start:k,end:l,replacement:b.value,detail:`${f} ${j.value}${j.unit}→${b.value}${j.unit}`})}};if(await d(b.scaleTarget,ad,ae,"建设规模",T,U,b.scaleGapGate),await d(b.costTarget,af,ag,"估算价",V,void 0,b.costGapGate),0===c.length)return{content:a,fixedCount:0,details:[]};c.sort((a,b)=>b.start-a.start);let e=a;for(let a of c)e=e.slice(0,a.start)+a.replacement+e.slice(a.end);return{content:e,fixedCount:c.length,details:c.map(a=>a.detail)}}async function as(a,b,c,d){let e=await aq(b,c,d);if(0===e.specTargets.size&&!e.scaleTarget&&!e.costTarget)return{fixedCount:0,details:[]};let f=0,g=[];for(let b of a){let a=await ar(b.content,e);a.fixedCount>0&&(b.content=a.content,f+=a.fixedCount,g.push(...a.details))}return{fixedCount:f,details:g}}async function at(a,b,c,d){let e=await aq(b,c,d);if(0===e.specTargets.size&&!e.scaleTarget&&!e.costTarget)return{markdown:a,fixedCount:0,details:[]};let f=await ar(a,e);return{markdown:f.content,fixedCount:f.fixedCount,details:f.details}}async function au(a){let{closedLoopBlocks:b}=await (0,n.Pm)(a),c=Math.max(6,Math.ceil((0,g.V7)(a)/1500));return b>=c?[]:[{level:"warning",message:`可落地性闭环句式密度不足:全文 ${b} 段完整闭环句式,未达每 1500 字 1 段(目标 ${c} 段)`,suggestion:"在措施类段落中补齐“责任岗位 + 检查频次 + 整改闭环”三要素齐全的闭环句式:同一自然段内同时出现岗位(如项目经理/质检员/安全员)、频次(每日/每周/不少于X次)与闭环(整改/复查/销项)。"}]}function av(a,b){let c=[],d=/(?:三检制|三级教育|三级管理|5S|24\s*小时|每日|每周|每月|一次|两次)/gu;for(let e of a){let a=[...new Set(e.content.match(d)||[])];if(a.length<3)continue;let f=b?.get(e.title);f&&(f.closedLoop||c.push({level:"warning",message:`${e.title} 管理措施数字较多但缺少执行闭环:${a.slice(0,8).join("、")}`,suggestion:"这些管理数字可以保留,但需要补充责任主体、检查频次、记录台账、整改复查和闭环要求。"}))}return c}function aw(a,b){let c=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理)/gu,d=[];for(let e of a){if((e.content.match(c)||[]).length<6)continue;let a=b?.get(e.title);a&&(a.concrete||d.push({level:"error",message:`${e.title} 存在较多未绑定项目事实和工序控制点的泛化套话`,suggestion:"请替换为结合资料事实、施工对象、工序控制、验收资料和整改闭环的专业内容。",chapterId:e.id}))}return d}function ax(a){return[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].map(S).join("\n")}function ay(a,b,c){let d=`${a} ${b}`;if(/(?:工日|人日|次|台|套|个|人|层|间|批|项|处|座|栋|根|只|组|件|块|片|面|条|道|樘|扇|盏|节|段)$/u.test(a)||/三检制|三级|5S|24\s*小时|每日|每周|每月|一次|两次|责任制|制度/u.test(d)||/暂列金额|暂估价|报价|单价|合价|综合单价|税率|增值税|预留金/u.test(d)||/^\d+(?:\.\d+)?(?:月|年)$/u.test(a)&&/开工|竣工|日期|计划|年|月/u.test(b))return"soft";let e=c??b;return/(?:天|工作天|月|年)$/u.test(a)&&/总工期|计划工期|合同工期|日历天|施工周期/u.test(e)||/(?:万元|亿元|元)$/u.test(a)&&/最高投标限价|招标控制价|合同估算价|投资估算|报价|金额|人民币/u.test(e)||/(?:m2|hm2|亩|㎡|m²|平方米)$/u.test(a)&&/建设规模|总建筑面积|总用地面积|总占地面积/u.test(e)?"scope":/(?:工程量|清单|建设规模|建筑面积|长度|材料|设备|规格|型号).{0,24}(?:m²|㎡|m3|m³|米|吨|套|台|个|项|%)/u.test(d)?"spec":/GB\s*\d|JGJ\s*\d|CJJ\s*\d|ISO\s*\d|GB\/T|CECS\s*\d|DL\s*\d|YB\s*\d|SH\s*\d|SJ\/T\s*\d|CJJ\/T\s*\d|DB\s*\d/u.test(d)?"soft":/标准|规范|编号/u.test(d)?"spec":"soft"}function az(a){let b=[];for(let c of(0,h.zn)(a)){if(/^\d+\.\d+$/u.test(c))continue;let d=(0,h.K3)(c),e=a.indexOf(c);if(e<0){let b=/^\d+(?:\.\d+)?/u.exec(c)?.[0];e=b?a.indexOf(b):-1}if(e<0)continue;let f=a.lastIndexOf("\n",e-1)+1,g=a.indexOf("\n",e),i=a.slice(f,g<0?a.length:g);if(/^\s*\|/u.test(i.trim()))continue;let j=a.slice(Math.max(0,e-36),Math.min(a.length,e+c.length+36)),k=a.slice(Math.max(0,e-16),e);b.push({token:c,normalizedToken:d,context:j,prefix:k})}return b}function aA(a){let{markdown:b,factsModel:c,scopeSuspicious:d,specSuspicious:e,softSuspicious:f}=a,g=[],h=[...new Set(d)],i=[...new Set(e)],j=[...new Set(f)];return h.length>=1&&g.push({level:"error",message:`生成后事实反查失败:正文出现资料事实主表中未找到的总量口径数字 ${h.slice(0,8).join("、")}`,suggestion:"总量口径数字(工期/金额/建设规模)必须与资料一致;请删除或改写为资料确认的口径,禁止编造。"}),i.length>=2&&g.push({level:"warning",message:`生成后事实反查提示:正文出现资料事实主表中未找到的规格明细数字 ${i.slice(0,8).join("、")}`,suggestion:"建议复核这些规格是否来自管理制度、规范要求或资料事实;如无依据,改为定性管理要求。"}),j.length>=6&&g.push({level:"warning",message:`生成后事实反查提示:正文出现较多未在资料事实主表中反查到的管理数字 ${j.slice(0,10).join("、")}`,suggestion:"请确认这些管理数字属于通用制度、规范要求或项目资料事实;如无依据,建议改为定性管理要求。"}),/质量目标|质量标准/u.test(b)&&c.quality.length>0&&!c.quality.some(a=>b.includes((0,m.lG)(a.value).slice(0,18)))&&g.push({level:"warning",message:"生成后事实反查提示:正文质量目标表述未明显匹配质量事实主表",suggestion:"请使用资料中的质量目标原文或等价表述。"}),g}let aB=/(?:天|工作天|日历天|月|年|万元|亿元|元|m2|hm2|亩|㎡|m²|平方米)$/u;function aC(a,b){let c=ax(b);if(80>(0,g.V7)(c))return[];let d=(0,h.K3)(c),e=[],f=[],i=[];for(let b of az(a)){let{token:a,normalizedToken:c,context:g,prefix:h}=b,j=ay(a,g,h);"scope"!==j||d.includes(c)||e.push(a),"spec"!==j||d.includes(c)||f.push(a),"soft"!==j||d.includes(c)||i.push(a)}return aA({markdown:a,factsModel:b,scopeSuspicious:e,specSuspicious:f,softSuspicious:i})}async function aD(a,b,c){let d,e=ax(b);if(80>(0,g.V7)(e))return[];let f=(0,h.K3)(e),i=az(a),j=i.filter(a=>aB.test(a.token));if(j.length>0){let a=await c.scopeClassifier.batchClassify(j.map(a=>`${a.token} ${a.context}`.slice(0,160)));d=new Map,j.forEach((b,c)=>d.set(b.token,a[c]||"other"))}let k=[],l=[],m=[];for(let a of i){let{token:b,normalizedToken:c,context:e,prefix:g}=a,h=ay(b,e,g);if(d&&aB.test(b)){let a=d.get(b)||"other";"scope"===h?h="scope"===a?"scope":"soft":"scope"===a&&(h="scope")}"scope"!==h||f.includes(c)||k.push(b),"spec"!==h||f.includes(c)||l.push(b),"soft"!==h||f.includes(c)||m.push(b)}return aA({markdown:a,factsModel:b,scopeSuspicious:k,specSuspicious:l,softSuspicious:m})}function aE(a,b){let c=[],d=["factuality","structure","depth","executable","specificity","consistency"];for(let f of a){var e;let a=f.content;if(800>(0,g.V7)(a))continue;let h=(e=f.title,/概况|工程|项目/u.test(e)?{min:5,focus:"事实依据、项目特异性"}:/部署|总体|组织/u.test(e)?{min:6,focus:"组织结构、可执行闭环、跨章一致性"}:/进度|工期/u.test(e)?{min:6,focus:"进度结构、工期一致性、纠偏机制"}:/质量/u.test(e)?{min:6,focus:"质量深度、验收复验、资料闭环"}:/安全|文明|危大|风险/u.test(e)?{min:6,focus:"风险覆盖、应急响应、检查整改"}:/资源|材料|设备|劳动力/u.test(e)?{min:5,focus:"资源依据、进场调配、进度支撑"}:{min:4,focus:"事实依据、专业深度、可执行性"}),i=b?.get(f.title);if(!i)continue;let j=2*d.filter(a=>i.dimensions[a]).length;if(j<h.min){let a=d.filter(a=>!i.dimensions[a]).join("、")||h.focus;c.push({level:"error",message:`${f.title} 专业评分不足:${j}/12,薄弱维度:${a}`,suggestion:`请按章节任务卡补齐${h.focus},并写出资料依据、实施流程、专业控制点和检查整改闭环。`,chapterId:f.id})}}return c}function aF(a,b){let c=[{re:/进度|工期/u,needKey:"schedule",need:/关键线路|穿插|纠偏|资源保障|节点|动态调整/u,message:"进度工期章节缺少关键线路、穿插施工或纠偏保障内容"},{re:/质量/u,needKey:"quality",need:/材料.*验收|复验|隐蔽验收|整改.*复验|质量.*资料|检验批/u,message:"质量章节缺少材料验收复验、隐蔽验收或整改复验闭环"},{re:/安全|文明|危大|风险/u,needKey:"safety",need:/风险|临电|消防|应急|检查.*整改|文明施工|人员|设备/u,message:"安全文明章节缺少风险识别、现场控制或应急检查闭环"},{re:/资源|材料|设备|劳动力/u,needKey:"resource",need:/进场|验收|调配|保管|供应|投入计划/u,message:"资源章节缺少进场、验收、调配或保管计划"},{re:/施工|工艺|技术|方案/u,needKey:"construction",need:/准备|流程|工艺|控制点|验收|交底/u,message:"施工技术章节缺少施工准备、工艺流程、控制点或验收要求"}],d=[];for(let e of a){if(600>(0,g.V7)(e.content))continue;let a=b?.get(e.title);if(a)for(let b of c)b.re.test(e.title)&&(a.contentNeeds[b.needKey]||d.push({level:"error",message:`${e.title}:${b.message}`,suggestion:"请按专业任务卡定向补写该章节,补齐可实施的控制措施、资料依据和闭环要求。",chapterId:e.id}))}return d}function aG(a,b){return!!(/万元|元|报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(`${a} ${b}`)||/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂|页码|目录/u.test(b)||/^\d+$/.test(a)&&10>Number(a)||/之日起.{0,8}天内|天内.{0,10}(?:发出|提交|通知|回复|答复|完成|开工|竣工|报送|支付|更换)|天以上|天及以上|‰|暂扣|履约保证金|通过后.{0,6}天|因发包人原因|因承包人原因|未能按时|逾期|违约金/u.test(b))}function aH(a,b){let c=0;for(let d of a)b.includes(d.replace(e.ug,""))&&(c+=1);return c}let aI=/日历天|个月|㎡|m²|m3|m³|MPa|kPa|kN|GB\/T|GB|JGJ|ISO|DN|φ|Φ|米\/秒|天$/u;async function aJ(a,b,c=[]){let d=[],g=a.replace(e.ug,""),h=function(a){let b=new Set;for(let c of a)for(let a of c.evidence||[]){if(/bill_of_quantities|boq/u.test(`${a.roleId||""}`))continue;let c="string"==typeof a.content?a.content:"";for(let a of c.matchAll(e.No)){let d=a[0].trim();if(!d||/^\d{4}\s*年$/u.test(d)||/^\d{1,2}\s*月$/u.test(d))continue;let e=a.index||0,f=c.slice(Math.max(0,e-40),e+d.length+40);aG(d,f)||b.add(d)}}return[...b]}(c),i=h.length>=e.mu?h:function(a){let b=new Set;for(let c of a.preciseFacts){if("bill_of_quantities"===c.roleId)continue;let a=`${c.processingType||""} ${c.roleId} ${c.sourceFile}`;if(!e.FM.test(a)&&"precise_fact"!==c.roleId)continue;let d=`${c.key} ${c.fieldName||""} ${c.value}`;for(let a of d.matchAll(e.No)){let c=a[0].trim();aG(c,d)||b.add(c)}}return[...b]}(b),j=aH(i,g);i.length>=e.mu&&j/i.length<e.tg&&d.push({level:"warning",message:`可靠精确参数使用不足:${j}/${i.length}`,suggestion:"请将资料中可靠的规格、参数、数量、时间、比例和标准编号写入对应章节;商务金额、单价、税率、预留金不得写入正文。"});let k=function(a){let b=[...a].sort((a,b)=>a.localeCompare(b,"zh")),c=b.filter(a=>aI.test(a)),d=b.filter(a=>!aI.test(a));return[...c.slice(0,8),...d.slice(0,2)].slice(0,10)}(i);if(k.length>=6){let b=aH(k,g),c=k.filter(a=>!g.includes(a.replace(e.ug,"")));if(c.length>0&&b/k.length<.5){let d=a.split(/[。;;|]/u).map(a=>a.trim()).filter(a=>a.length>=6&&a.length<=160).slice(0,300);if(d.length>0){let a=await (0,f.Mv)(c.slice(0,10),d);c=c.filter(b=>!d.some(c=>a(b,c)>=.6)),b=k.length-c.length}}if(b/k.length<.5){let a=c.slice(0,3);d.push({level:"error",message:`可靠精确参数使用不足:关键参数抽查 ${b}/${k.length}${a.length?`(缺失如 ${a.join("、")})`:""}`,suggestion:"请将资料中的关键工程参数(工期、面积、强度等级、材料规格、规范编号等)写入正文对应章节,不得因参数总量达标而遗漏核心参数。"})}}return b.bills.length>0&&!e.pP.test(a)&&d.push({level:"error",message:"正文未体现结构化数据资料",suggestion:"请从表格、列表或明细中提取对象、单位、数量、规格和关键参数补入对应章节。"}),b.drawings.length>0&&!e._U.test(a)&&d.push({level:"error",message:"正文未体现设计/方案/说明类资料",suggestion:"请从设计、方案或说明资料中提取对象、流程、节点、做法、配置、规则和标准要求。"}),d}async function aK(a,b,c){let d=[],e=c.tables||[];if(0===e.length)return d;let g=a.replace(/\s+/gu,"").toLowerCase(),h=0,i=0,j=[];for(let a of e){let b=a.headers.map(a=>a.replace(/\s+/gu,"").toLowerCase()),c=b.findIndex(a=>/^(?:项目名称|名称|清单项名称|清单项|分部分项(?:工程)?名称|项目特征)/u.test(a)),d=b.findIndex(a=>/^(?:项目编码|编码|编号)/u.test(a)),e=b.findIndex(a=>/^工程量$|^数量$/u.test(a));for(let b of a.rows){h+=1;let a=c>=0?(b[c]||"").replace(/\s+/gu,""):"",f=d>=0?(b[d]||"").replace(/\s+/gu,""):"",k=e>=0?(b[e]||"").replace(/\s+/gu,""):"";if(!a&&!f){let c=b.findIndex(a=>/^\d{10,12}$/u.test(a)||/^[A-Z]{1,3}\d{8,}$/u.test(a));c>=0&&(f=b[c].replace(/\s+/gu,""),a=(b[c+1]||"").replace(/\s+/gu,""))}let l=a.length>=3?a.slice(0,Math.min(a.length,16)):"",m=f.length>=3?f.slice(0,Math.min(f.length,12)):"",n=l&&g.includes(l),o=m&&g.includes(m);n||o?i+=1:a.length>=3&&j.push({name:a,quantity:k})}}if(0===h)return d;let k=new Set;if(j.length>0&&i/h<.6){let b=a.split(/[。;;|]/u).map(a=>a.trim()).filter(a=>a.length>=6&&a.length<=160).slice(0,300),c=[...new Set(j.map(a=>a.name))].slice(0,30);if(b.length>0&&c.length>0){let a=await (0,f.Mv)(c,b);for(let d of c)b.some(b=>a(d,b)>=.6)&&k.add(d)}}let l=i+j.filter(a=>k.has(a.name)).length,m=j.filter(a=>!k.has(a.name)),n=l/h,o=m.length>0?`未落位项(共${m.length}项):${m.slice(0,30).map(a=>`${a.name.slice(0,40)}${a.quantity?` ${a.quantity}`:""}(未落位)`).join(";")}${m.length>30?` 及其他${m.length-30}项(同类项按已列名称分组归并补写)`:""}`:"";return n<.6&&d.push({level:"error",message:`清单项落位不足:${l}/${h} 项(${Math.round(100*n)}%)${o?`。${o}`:""}`,suggestion:`请将未落位清单项按专业工程分组补写进对应章节"主要施工内容"小节(施工概况/施工流程/施工方法),优先落位主要分部分项、关键规格与大额工程量。${o}`}),d}function aL(a,b){let c=[],d=b.drawings||[];if(0===d.length)return c;let e=a.replace(/\s+/gu,"").toLowerCase(),f=[...new Set(d.map(a=>a.sourceFile||"").filter(Boolean))],g=0,h=[];for(let a of f){let b=a.replace(/\.[^.]+$/u,"").replace(/[/\\]/gu,"").toLowerCase(),c=a.split("/").pop()||a;(b.length>=3?e.includes(b.slice(0,Math.min(b.length,12))):/图纸|设计|说明|节点|做法|构造/u.test(e))?g+=1:h.push(c)}if(f.length>0){let a=g/f.length;a<.25?c.push({level:"warning",message:`图纸引用严重不足:${g}/${f.length} 份图纸被正文引用(${Math.round(100*a)}%)`,suggestion:`建议将图纸中的设计说明、构造做法、材料规格和设备参数写入对应章节。未引用图纸:${h.slice(0,5).join("、")}`}):a<.5&&c.push({level:"warning",message:`图纸引用不足:${g}/${f.length} 份(${Math.round(100*a)}%)`,suggestion:`建议补充引用:${h.slice(0,5).join("、")}`})}return c}function aM(a){let b=[];for(let c of(/【本小节生成未达标,需重新生成】/u.test(a)&&b.push({level:"error",message:"生成未完成:存在未达标小节,需要重新生成或补写后才能导出",suggestion:"请重新生成未达标小节,禁止将占位内容作为正式正文。"}),e.IA))c.test(a)&&b.push({level:"warning",message:`存在占位式表达:${c.source}`,suggestion:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见资料/按文件”。"});return b}function aN(a,b){for(let c of b)try{if(RegExp(c,"iu").test(a))return!0}catch{if(a.includes(c))return!0}return!1}function aO(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,f=[];for(let a of(0,d.V)().autoSpecGates)aN(c,a.templateMatchers)&&f.push(a);if(0===f.length)return[];let g=[],h=z(a).length,i=0;for(let b of f){for(let c of(i=Math.max(i,b.minTables||0),b.requiredTexts))a.includes(c)||g.push({level:"warning",message:`配置要求缺少必要内容:${c}`,suggestion:"请按当前模板匹配的专业规则补齐必要内容。"});for(let c of b.forbiddenTexts)(function(a,b){let c="见图纸"===b||"按图纸"===b?["目录","清单","索引","汇总"]:[],d=0;for(;;){let e=a.indexOf(b,d);if(e<0)return!1;let f=a.slice(e+b.length);if(c.some(a=>f.startsWith(a))){d=e+b.length;continue}return!0}})(a,c)&&g.push({level:"error",message:`配置要求不得出现:${c}`,suggestion:"请根据当前模板匹配的专业规则清理正文污染内容。"})}return e.bu.test(a)&&g.push({level:"error",message:"正式正文存在 Markdown 标题符号 #",suggestion:"导出正文应去除 Markdown 标题符号,保留正式标题文字。"}),i&&h<i&&g.push({level:"warning",message:`配置要求正式表格不足:${h}/${i}`,suggestion:"如用户提示词或章节内容要求表格,应按项目资料补充对应表格本体。"}),g}function aP(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`,c=new Set;for(let a of(0,d.V)().autoSpecGates)if(aN(b,a.templateMatchers))for(let b of a.requiredTexts)b&&c.add(b);return[...c]}function aQ(a,b,c,d,f,h,i){var j;if(!a)return b;let l=[...b],m=function(a){let b=[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources];for(let c of Object.values(a.schemaFacts))b.push(...c);return b}(c),n=function(a,b){let c=new Set;for(let a of b)c.add(a.key),a.fieldName&&c.add(a.fieldName);for(let b of a.tables){for(let a of b.headers)c.add(a);for(let a of b.rows)for(let b of a)c.add(b)}return c}(c,m),o=new Set(d.map(a=>a.title));for(let b of a.factFields){if(!b.required||(j=b.name,/国家法律法规|地方法规|规章|规范标准|标准规范|行业标准|现行规范|法律法规|合规|施工方法|工艺流程|质量控制|安全文明|应急|劳动力|材料投入|机械设备|检测仪器|关键节点/u.test(j)))continue;let a=c.schemaFacts[b.id]||[],e=!1,f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId));for(let a of d){if(e&&f)break;for(let c of a.evidence)!e&&!a.missingFacts.includes(b.name)&&(0,k.I2)(c,b)&&(e=!0),!f&&(0,k.I2)(c,b)&&(f=!0)}0!==a.length||n.has(b.name)||e||l.push({level:"warning",message:`系统暂未从知识库确认必需事实:${b.name}`,suggestion:b.extractionHint||"请扩大本地知识库检索、执行事实补抽,或调整事实字段配置。"}),f||l.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}for(let b of a.chapterRules){let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&l.push({level:"warning",message:`章节内容深度建议:${b.title}`,suggestion:`可扩展到约 ${b.minWords} 字,但不要改变模板章节结构。`})}let p=z(f),q=function(a){let b=[];for(let c of a.matchAll(e.gW))b.push({alt:c[1]||"",url:c[2]||"",index:c.index??0});return b}(f),r=(0,g.Cv)(f);for(let b of a.gateRules){let a=b.evaluator?b.evaluator:e.cA[b.type]?.(b)??{subject:"document",operator:"contains",value:b.value||b.target},g=a.target||b.target||"",j=a.value||b.value||g,k=d.find(a=>a.title===g),s=function(a){for(let c of e.Lp){let d=c(a);if(d){var b;return{level:a.rule.level,message:(b=a.rule,`${b.name}:${d}`)}}}}({rule:b,evaluator:a,target:g,value:j,min:a.min||Number(b.value)||1,markdown:f,textScope:"chapter"===a.subject&&k?k.content:f,regex:j?function(a){try{return RegExp(a,"iu")}catch{return}}(j):void 0,chapter:k,factNames:n,chapterTitles:o,tableBlocks:p,imageRefs:q,estimatedPages:r,allFacts:m,factsModel:c,projectBindings:h,promptBindings:i});s&&l.push(s)}return l}function aR(a,b){let c=function(a){let b="";for(let c of(0,l.dU)(a))c.content&&(b+=`${c.content}
|
|
1
|
+
"use strict";exports.id=6482,exports.ids=[6482],exports.modules={11248:(a,b,c)=>{c.d(b,{K3:()=>f,zn:()=>g});let d=/[A-Za-z0-9%+-.,]/gu;function e(a){let b=a.charCodeAt(0);return b>=65281&&b<=65374?String.fromCharCode(b-65248):a}function f(a){return a.replace(d,e).replace(/\s+/gu,"").replace(/[×X**]/gu,"x").replace(/[%]/gu,"%").replace(/‰/gu,"permille").replace(/平方米|平方|平米|m²|㎡/giu,"m2").replace(/公顷|hm²/giu,"hm2").replace(/立方米|立方|m³/giu,"m3").replace(/升/gu,"l").replace(/毫升/gu,"ml").replace(/千米|公里/gu,"km").replace(/毫米/gu,"mm").replace(/厘米/gu,"cm").replace(/米/gu,"m").replace(/千克|公斤/gu,"kg").replace(/克/gu,"g").replace(/吨/gu,"t").replace(/人民币万元|万元人民币/gu,"万元").replace(/人民币元|元人民币|¥/gu,"元").replace(/日历天|自然日/gu,"天").replace(/工作日/gu,"工作天").replace(/个月/gu,"月").replace(/小时/gu,"h").replace(/分钟/gu,"min").replace(/兆帕/gu,"mpa").replace(/千帕/gu,"kpa").replace(/千牛/gu,"kn").replace(/牛/gu,"n").replace(/千瓦/gu,"kw").replace(/兆瓦/gu,"mw").replace(/瓦/gu,"w").replace(/千伏/gu,"kv").replace(/伏/gu,"v").replace(/毫安/gu,"ma").replace(/安培|安/gu,"a").replace(/赫兹/gu,"hz").replace(/摄氏度/gu,"℃").replace(/百分之\s*(\d+(?:\.\d+)?)/gu,"$1%").replace(/千分之\s*(\d+(?:\.\d+)?)/gu,"$1permille").replace(/直径\s*(\d+(?:\.\d+)?)/gu,"φ$1").replace(/[Φφ]\s*(\d+(?:\.\d+)?)(?:mm)?/giu,"φ$1").replace(/DN\s*(\d+)/giu,"dn$1").replace(/D\s*(\d+)(?=\b|[^a-z0-9])/giu,"d$1").replace(/\b(KN|MPA|KPA|KW|MW|KV|HZ|DN)\b/giu,a=>a.toLowerCase()).replace(/[,,、。;;::||()()【】\]《》<>"“”'‘’[]/gu,"").toLowerCase()}function g(a){let b=f(a),c=new Set;for(let a of b.matchAll(/\d+(?:\.\d+)?(?:m2|hm2|亩|m3|l|ml|mm|cm|km|m|kg|g|t|万元|亿元|元|天|工作天|月|年|h|min|%|permille|mpa|kpa|pa|kn|n|kn\/m2|kn\/m|kw|mw|w|kv|v|ma|a|hz|℃|台|套|件|个|根|只|组|项|处|座|栋|层|间|批|次|人|工日|人日)?|dn\d+|φ\d+(?:\.\d+)?|d\d+|c\d{2,}|hrb\d+|q\d{3}[a-z]?|m\d+|\d+(?:\.\d+)?x\d+(?:\.\d+)?(?:x\d+(?:\.\d+)?)?|[+-]?\d+\.\d{3}|\d+[:/]\d+/giu))c.add(a[0]);return[...c]}},23760:(a,b,c)=>{c.d(b,{AC:()=>r,Ai:()=>y,BV:()=>C,Ef:()=>x,Ff:()=>p,Fv:()=>K,K1:()=>I,KI:()=>as,M$:()=>aR,N1:()=>aJ,NS:()=>L,S2:()=>aK,SN:()=>M,ST:()=>aw,Ty:()=>D,Yb:()=>at,Z2:()=>aD,Zu:()=>au,bM:()=>aM,f8:()=>G,gN:()=>E,hr:()=>ap,i0:()=>aE,iC:()=>A,ji:()=>aF,k0:()=>J,kQ:()=>aQ,kw:()=>u,mR:()=>aO,qK:()=>R,qm:()=>ah,t4:()=>aP,vY:()=>aC,wl:()=>w,xX:()=>av,yd:()=>aL,yw:()=>Q});var d=c(8753),e=c(74329),f=c(37047),g=c(78217),h=c(11248),i=c(70208),j=c(61373),k=c(91977),l=c(23500),m=c(22157),n=c(52922),o=c(41991);function p(a){let b={blocking:0,important:0,minor:0};for(let c of a)b[function(a){let b="string"==typeof a?a:a.message;if("error"===("string"==typeof a?void 0:a.level))return"blocking";for(let a of e.gr)if(a.pattern.test(b))return a.severity;return"minor"}(c)]+=1;return b}function q(a,b){let c=a.replace(/[\][()`*_>#|{},。、“”‘’:;!?,.!?:;-]+/gu," ").replace(e.ug," ").trim();if(c.length<120)return;let d=c.match(/[A-Za-z][A-Za-z-]{2,}|[\p{Script=Han}]{2,}/gu)||[];if(d.length<30)return;let f=1,g=new Map;for(let a=0;a<d.length;a+=1){let c=d[a].toLowerCase();if(g.set(c,(g.get(c)||0)+1),a>0&&c===d[a-1].toLowerCase()?f+=1:f=1,f>=12)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:"请重新生成该小节,禁止保留连续重复的英文单词或无意义片段。"}}let h=[...g.entries()].sort((a,b)=>b[1]-a[1])[0];if(h&&h[1]>=25&&h[1]/d.length>=.42)return{level:"error",message:`${b} 存在重复 token 退化输出`,suggestion:`检测到“${h[0]}”异常高频重复,请重新生成该小节。`}}function r(a,b=[]){let c=[],d=q(a,"全文");for(let a of(d&&c.push(d),b)){let b=q(a.content,`章节“${a.title}”`);for(let d of(b&&c.push(b),a.sections||[])){let b=d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=a.content.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${b}\\s*\\n([\\s\\S]*?)(?=^#{3,4}\\s+|^##\\s+|$)`,"mu"));if(!e)continue;let f=q(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function s(a){return a.severity&&a.repairability?a:/小节只有标题|空小节|小节内容补写未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"local_deterministic",category:"structure",owner:"system"}:/不得出现|提示词要求|疑似提示词指令标题|项目污染|生成未完成/u.test(a.message)?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:/事实一致性冲突|projectFactOnly|核心事实/u.test(a.message)?{...a,severity:"error"===a.level?"blocker":"warning",repairability:"manual_review",category:"fact_consistency",owner:"user"}:/证据使用覆盖率偏低|BOQ|落位|高分模块|专业链|闭环/u.test(a.message)?"error"===a.level?{...a,severity:"blocker",repairability:"llm_repairable",category:"evidence_coverage",owner:"llm"}:{...a,severity:"warning",repairability:"not_repair_needed",category:"evidence_coverage",owner:"system"}:"error"===a.level?{...a,severity:"blocker",repairability:"llm_repairable",category:"structure",owner:"system"}:"warning"===a.level?{...a,severity:"warning",repairability:"not_repair_needed",category:"style",owner:"system"}:{...a,severity:"suggestion",repairability:"not_repair_needed",category:"style",owner:"system"}}function t(a){let b=s(a);return"blocker"===b.severity&&(!!("qingtian_review"===b.category||"error"===b.level&&"blocker"===b.severity&&/placeholder|source|style|format|structure/u.test(String(b.category||""))||"error"===b.level&&"fact_consistency"===b.category&&/危大工程判定缺失|超危大工程判定缺失|支护形式与资料矛盾|支护形式未落地|设备进场时间荒谬|设备进场工序倒挂/u.test(a.message)||/提示词要求|疑似提示词指令标题|适用性自相矛盾|不得出现/u.test(a.message))||!/目录与正文/u.test(a.message)&&(/配置要求缺少必要内容/u.test(a.message)?"error"===a.level:!!/小节内容补写未完成|空小节|小节只有标题|生成未完成/u.test(a.message)||!/生成后事实反查失败/u.test(a.message)&&(/工序规格冲突/u.test(a.message)?"error"===a.level:!!/项目特点、重点、难点分析 正文不足|项目主要施工内容 正文不足/u.test(a.message)||!(/规划小节正文过短/u.test(a.message)||/事实一致性冲突:项目名称/u.test(a.message))&&(/跨章一致性|专业评分不足|专业缺口|泛化套话|缺少关键线路|缺少材料验收|缺少风险识别|缺少进场/u.test(a.message)?"error"===a.level&&!/证据使用覆盖率偏低|章节逻辑依赖不足|文档交付评分报告/u.test(a.message):!(!e.hc.test(a.message)||/章节审查|最终质量审查|正文篇幅明显低于目标|正文存在空泛占位表达|结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内/u.test(a.message))))))}function u(a){let b=[];for(let c of a.split(/^##\s+/gmu).slice(1)){let a=c.split(/\r?\n/u),d=(a.shift()||"").trim(),e=new Map;for(let b of a){let a=/^####\s+(.+)$/u.exec(b.trim());if(!a)continue;let c=a[1].replace(/^\d+(?:\.\d+)*\s*/u,"").replace(/\s+/gu,"");c.length<2||e.set(c,(e.get(c)||0)+1)}for(let[a,c]of e)if(!(c<2)&&(b.push({level:"error",message:`${d||"某章"} 存在同名小节重复:“${a}”出现 ${c} 次`,suggestion:"同主题内容应合并为一个小节;若确为不同方面,请重命名标题以区分内容,避免目录重复堆叠。"}),b.length>=6))return b}return b}let v=new Set(["如有","应用","措施","体系","管理","保障","要求","内容","工程","项目","施工"]);function w(a,b,c={}){let d=[],e=a.replace(/\s+/gu,""),f=c.semanticSimilarity?a.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>a.trim().replace(/^#{2,4}\s+/u,"").replace(/^\d+(?:\.\d+)*[\s、.]+/u,"").trim()).filter(Boolean).slice(0,80):[];for(let a of b.slice(0,8)){let b=a.replace(/^拟采用/u,"").replace(/^针对/u,"").replace(/^确保/u,"").replace(/[((][^))]*[))]/gu,"").replace(/的保障体系与措施$|管理体系与措施$|保障体系与措施$/u,"").replace(/^\d{1,3}(?:[.、.]\d{1,3})*\s*/u,"").trim().split(/[、,,;;及与和]+/u).map(a=>a.replace(/^[的了者]+/u,"").trim()).filter(a=>a.length>=2&&!v.has(a));if(0!==b.length&&!b.some(a=>e.includes(a))){if(c.semanticSimilarity&&f.length>0&&Math.max(...f.map(b=>c.semanticSimilarity(a,b)))>=.6)continue;d.push({level:"warning",severity:"warning",message:`招标文件评分条目“${a}”未在正文中出现(核心词:${b.join("/")})`,suggestion:"评审条目必须逐条承接为正文小节;请补写对应内容并确保核心关键词落位,避免评标失分。"})}}return d}function x(a,b){let c=(b||[]).flatMap(a=>(a.sections||[]).filter(a=>/新技术|新工艺|新材料|新设备|四新/u.test(a)));if(0===c.length)return[];let d=[],e=(0,m.Xl)(a,"四新",{fuzzy:!0}),f=e?(0,g.V7)(e):0;for(let b of[...new Set(c)]){let c=(0,m.Xl)(a,b,{fuzzy:!0});if(!c||200>(0,g.V7)(c)){if(f>=200)continue;d.push({level:"warning",severity:"warning",message:`大纲承诺小节“${b}”未在正文成稿(正文 ${c?(0,g.V7)(c):0} 字,要求不少于 200 字)`,suggestion:"请补写四新技术应用小节成稿,落位本项目适用的创新工艺、新材料与新设备应用计划。"})}}return d}function y(a,b,c){let d=c.some(a=>(a.content||"").split(e.A5).filter(a=>!/^#{1,6}\s+/u.test(a.trim())).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*:?-{3,}:?/u.test(a)).join("\n").replace(/[|*_`<>#\s]/gu,"").length>=30),f=a.map(s),g=/封面|页眉|页脚|附图|图片引用|CAD图|示意图|插图/u,h=f.filter(a=>"error"===a.level&&t(a)&&!g.test(a.message)),i=f.filter(a=>"error"===a.level&&g.test(a.message)),j=new Set(["structure","style","fact_consistency","qingtian_review"]),k=d?h.filter(a=>j.has(String(a.category||""))):h,l=[{key:"no_errors",label:"无阻断级校验错误",passed:0===k.length},{key:"basic_facts",label:"基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"structured_precision",label:"结构化精确参数已使用",passed:b.preciseFacts.length<e.mu||a.every(a=>"error"!==a.level||!e.Ab.test(a.message))},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))},{key:"no_project_contamination",label:"无项目污染和事实一致性阻断",passed:!a.some(a=>"error"===a.level&&e.Uv.test(a.message)&&t(a))},{key:"numeric_consistency",label:"跨章数值口径与资料一致",passed:!a.some(a=>"error"===a.level&&/跨章一致性冲突|跨章一致性缺口|跨章一致性复核/u.test(a.message)&&t(a))},{key:"manual_postprocess",label:`封面/页眉页脚/附图等 ${i.length} 项由后期人工完善(不阻断导出)`,passed:!0,message:i.length?i.slice(0,5).map(a=>a.message).join(";"):void 0}];return{passed:0===k.length,blockingIssues:k,checklist:l}}function z(a){let b=[],c=a.split(e.A5);for(let a=0;a<c.length;a+=1){if(!e.w7.test(c[a]))continue;let d=[];for(;a<c.length&&e.w7.test(c[a]);)d.push(c[a]),a+=1;a-=1,d.some(a=>e.N3.test(a))&&b.push(d.join("\n"))}return b}function A(a){let b=[...a.matchAll(e.DB)],c=[];for(let d=1;d<b.length;d+=1){let f=b[d].index||0,g=b[d+1]?.index??a.length,h=a.slice(f,g);e.Ks.test(h)&&c.push({level:"warning",message:`第 ${d+1} 章可能重复出现基础信息`,suggestion:"如该信息与本章主题无关,建议合并到更合适的概况类章节,避免重复铺陈。"})}if(0===b.length)return c;let d=b[0].index||0,f=b[1]?.index??a.length,g=a.slice(d,f),h=g.search(e.jM);if(h<=0)return c;let i=g.slice(0,h).replace(e.Dc,""),j=[];for(let a of e.Y8)RegExp(`${a}\\s*[::]`,"u").test(i)&&j.push(a);return j.length>=3&&c.push({level:"warning",message:`基础信息表前重复叙述字段:${j.join("、")}`,suggestion:"基础信息已表格化时,表格前只保留一句引导语,不要重复逐项叙述名称、编号、范围、周期、质量等字段。"}),c}let B=["本节将详细介绍以下内容","本章将从以下几个方面进行阐述","综上所述,通过以上分析得出结论","以下内容将围绕该主题展开论述"];async function C(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>=8),d=await (0,f.Mv)(c,[...B]),e=c.filter(a=>B.some(b=>d(a,b)>=f.Eh));e.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${e.slice(0,3).join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入对象、动作、措施、检查和闭环。"});let g=a.match(/OCR|提示词|绑定片段|后台|文件路径|识别错误|知识库证据|知识库已确认事实|通用兜底段落|兜底占位|兜底模板/giu);return g?.length&&b.push({level:"warning",message:`正文包含后台或资料处理话术:${[...new Set(g)].join("、")}`,suggestion:"建议改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function D(a){let b=[];for(let c of a){let a=(c.sections||[]).filter(Boolean),d=a.filter((b,c)=>a.indexOf(b)!==c);d.length>0&&b.push({level:"warning",message:`${c.title} 存在重复小节:${[...new Set(d)].join("、")}`,suggestion:"请保留用户需求、模板或显式大纲中真实需要的小节,删除重复项。"});let e=new Map;for(let b of a){let a=/劳动力|人员|工种/u.test(b)?"劳动力计划":/机械|设备|机具/u.test(b)?"机械设备计划":/材料|物资/u.test(b)?"材料物资计划":/冬季|雨季|高温|台风|大风/u.test(b)?"特殊气候措施":"";a&&e.set(a,[...e.get(a)||[],b])}for(let[a,d]of e)d.length>1&&b.push({level:"warning",message:`${c.title} 存在重复主题小节:${a}(${d.join("、")})`,suggestion:"请合并同类小节,只保留一个主表或主方案,其他位置采用引用或执行说明。"})}return b}function E(a){let b=e.HX.exec(a);if(!b)return[{level:"error",message:"缺少目录页",suggestion:"请在封面后生成“## 目录”,并按一级章父级、二级小节子级组织。"}];let c=0,d=0;for(let a of b[1].split(e.A5))e.ZT.test(a)&&e.EB.test(a)&&(c+=1,e.sr.test(a)&&(d+=1));return c>0&&0===d?[{level:"error",message:"目录二级小节未作为子级缩进",suggestion:"目录应为父子级导航:一级章单独成行,二级小节至少缩进两个空格列在所属章下方。"}]:[]}function F(a){return a.replace(/^#+\s*/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").replace(/^\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/[()]/gu,a=>"("===a?"(":")").replace(/[\s::.。;;,,、]+$/gu,"").replace(/的(?=保障体系|管理体系|控制体系|措施|方案|计划|要求)/gu,"").replace(/[\s()()::.。;;,,、-]/gu,"").trim()}function G(a){let b=function(a){let b=e.HX.exec(a);return b?b[1].split(e.A5).map(a=>/^\s*(\d+\.\d+)\s+(.+)$/u.exec(a.trim())).filter(a=>!!a).map(a=>({number:a[1]||"",title:F(a[2]||"")})).filter(a=>a.title):[]}(a),c=[...a.matchAll(/^###\s+(\d+\.\d+)\s+(.+)$/gmu)].map(a=>({number:a[1]||"",title:F(a[2]||"")})).filter(a=>a.title);if(0===b.length||0===c.length)return[];let d=b.map(a=>a.title),f=c.map(a=>a.title),g=new Set(f),h=new Set(d),i=d.filter(a=>!g.has(a)),j=f.filter(a=>!h.has(a)),k=[];i.length>0&&k.push({level:"error",message:`目录与正文不一致,目录小节未在正文中找到:${[...new Set(i)].join("、")}`,suggestion:"建议以最终清洗后的正文二级标题为准重新生成目录。"}),j.length>0&&k.push({level:"error",message:`目录与正文不一致,正文小节未进入目录:${[...new Set(j)].join("、")}`,suggestion:"建议重新生成目录,确保正文二级小节完整进入目录。"});let l=new Map(c.map(a=>[a.number,a.title])),m=new Set(b.map(a=>a.number)),n=b.filter(a=>l.has(a.number)&&l.get(a.number)!==a.title),o=c.filter(a=>!m.has(a.number));return b.length!==c.length&&k.push({level:"error",message:`目录与正文小节数量不一致:目录 ${b.length} 节、正文 ${c.length} 节`,suggestion:"正文 H3 编号必须连续单调且与目录一一对应;出现重复编号、跳号或丢节时以正文实际结构重建目录。"}),n.length>0&&k.push({level:"error",message:`目录与正文同一编号对应不同小节:${n.slice(0,5).map(a=>`${a.number} 目录「${a.title}」/正文「${l.get(a.number)}」`).join("、")}`,suggestion:"目录必须按正文 H3 实际编号与标题生成,同一编号不得对应不同小节名称。"}),o.length>0&&k.push({level:"error",message:`正文小节编号未出现在目录中:${o.slice(0,5).map(a=>`${a.number} ${a.title}`).join("、")}`,suggestion:"目录编号与正文编号必须全集一致。"}),k}function H(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,i.GQ)(b),d=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|注意事项))\s*$/u;return d.test(b)||d.test(c)}function I(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,i.GQ)(a[1]||"")).filter(H);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function J(a){let b=[],c=a.split(e.A5).map(a=>a.trim()).filter(a=>a&&!/^#{1,6}\s+/u.test(a)&&!/^\s*\|/u.test(a)&&!/^<div\b/iu.test(a)),d=c.find(a=>F(a).length<=1);for(let a of(d&&b.push({level:"warning",message:`正文存在孤立字或残缺段落:${d}`,suggestion:"请删除残缺行或重新生成所在小节。"}),c.filter(a=>/[,、;:和与在为对将]$/u.test(a)||/(通过|包括|如下|主要包括|验收|合格后|复查合格后|设计风|确认后|具体如下|应符合|不少于|以及|且应|不得少于)$/u.test(a)).slice(0,3)))b.push({level:"warning",message:`正文存在疑似截断句:${a}`,suggestion:"请补完整该段落,避免以连接词、逗号、冒号或无句号的动作词结尾。"});let f=c.find(a=>a.length>380);f&&b.push({level:"warning",message:`正文存在过长段落:${f}`,suggestion:"请拆分为多段或表格,改善导出版式和可读性。"});let g=c.find(a=>/\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S.+(?:\s|[。;;])(?:\d+[.、](?=\s|\*\*)\s*|[((]\d+[))]\s*|[-*+]\s+)\S/u.test(a)&&!/\b\d+\.\d+\s*(?:mm|cm|m|㎡|m2|kg|t|MPa|kPa|V|KV|kV|A)\b/iu.test(a));g&&b.push({level:"error",message:`正文存在列表项粘连同一行:${g.slice(0,120)}`,suggestion:"有序列表和无序列表必须逐项独占一行,确保 Markdown/PDF/DOCX 正确排版。"});let h=a.match(/PDF\s*第\s*|(?:PDF\s*)?第\s*\d+\s*(?:[-—至到~~]\s*\d+)?\s*页|(?:图纸|清单|资料|文件|[\u4e00-\u9fa5A-Za-z0-9()()、·-]{2,24}(?:工程)?)\s*(?:[((]?\s*|(?:共|多达|约|合计)\s*)\d+\s*页|[\u4e00-\u9fa5A-Za-z0-9、及与和]{2,24}\s*(?:共|多达|约|合计)\s*\d+\s*页|\d+\s*页\s*(?:图纸|资料|文件|装饰|土建|加固|给排水|电气|智能化|消防)|\d+\s*页/iu)?.[0];h&&b.push({level:"error",message:`正文残留资料页码元信息:${h}`,suggestion:"正式投标正文应引用招标文件、施工图设计文件、工程量清单和相关专业图纸,不写 PDF 页码或资料页数。"});let i=c.find(a=>/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(a));return i&&b.push({level:"error",message:`正文残留内部处理说明:${i.slice(0,120)}`,suggestion:"正式投标正文不得出现内部事实抽取、后台处理或文件名引用限制说明。"}),b}function K(a){let b=[];{let c=[...a.matchAll(/^#{2,4}\s+(.+)$/gmu)].map(a=>(a[1]||"").trim()).filter(a=>/[☑✓✔☐□☒○●◉◇◆]/u.test(a)).slice(0,6);c.length>0&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`小节标题残留复选框/选项符号(☑/✓ 等招标文件符号):“${c.join("”、“")}”`,suggestion:"删除标题中的复选框符号(☑✓✔☐□等);标题主体若属商务文件内容(如“电子保函”),整个小节删除,技术标不得出现商务条款小节。"})}let c=a.search(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/mu),d=[...(c>=0?a.slice(c):a.replace(/^##\s+目录[\s\S]*?(?=^##\s+第[一二三四五六七八九十百千万\d]+章\s+)/mu,"")).matchAll(/^##\s+(.+)$/gmu)].map(a=>(a[1]||"").trim()).filter(a=>"目录"!==a&&!/^第[一二三四五六七八九十百千万\d]+章\s+/u.test(a)&&!/^附录/u.test(a)).map(a=>(0,i.GQ)(a));d.length>0&&b.push({level:"error",message:`正文存在非正式章二级标题:${[...new Set(d)].slice(0,8).join("、")}`,suggestion:"正文 ## 只允许用于“第X章”正式章标题;章内小节必须使用 ### X.Y。"});let e=[...a.matchAll(/^##\s+(第[一二三四五六七八九十百千万\d]+章\s+.+)$/gmu)];for(let c=0;c<e.length;c+=1){let d=e[c].index||0,f=e[c+1]?.index??a.length,g=[...a.slice(d,f).matchAll(/^###\s+\d+\.\d+\s+(.+)$/gmu)].map(a=>(0,i.GQ)(a[1]||"")),h=(0,i.GQ)((e[c][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,""));1===g.length&&F(g[0])===F(h)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${e[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function L(a){a=(0,j.BJ)(a);let b=[];{let c=a.split(e.A5);for(let a=1;a<c.length;a+=1){let d=(c[a]||"").trim(),f=(c[a-1]||"").trim();d&&!/^\|/u.test(d)&&d.endsWith("|")&&1===(d.match(/\|/gu)||[]).length&&!/^#{1,6}\s/u.test(d)&&e.w7.test(f)&&b.push({level:"error",message:`表格断行残片:${d}`,suggestion:"该行是表格数据行整列丢失的残片:合并回所属表格行并补齐缺失列,或删除该残行。"})}}/按审批确认执行/u.test(a)&&b.push({level:"error",message:"表格存在自动兜底污染内容:按审批确认执行",suggestion:"正式投标表格不得使用通用兜底短语,应保留真实业务内容或删除该行。"});let c=[];for(let b of a.matchAll(/\|\s*信息项\s*\|\s*内容\s*\|/gu)){let d=a.slice(b.index||0),f=[];for(let a of d.split(e.A5)){if(f.length>0&&!e.w7.test(a))break;f.push(a)}c.push(f.join("\n"))}let d=c.filter(a=>/项目名称|招标人|建设单位|发包人|建设地点|招标范围|计划工期|合同估算价|质量标准/u.test(a)).length;d>1&&b.push({level:"error",message:`项目基础信息类表格重复:${d} 处`,suggestion:"项目名称、招标人、建设地点、工期、质量等基础信息只能集中输出一次。"});let f=a.match(/^\|\s*---\s*\|\s*---\s*\|\s*$/gmu)||[];for(let c of(f.length>60&&b.push({level:"error",message:`表格分隔线异常重复:${f.length} 行`,suggestion:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),z(a))){let a=c.split(e.A5).filter(a=>e.w7.test(a));if(a.length<2)continue;if(!e.N3.test(a[1]||"")){b.push({level:"error",message:`表格分隔线位置不规范:${a[0]||""}`,suggestion:"Markdown 表格必须紧跟表头输出分隔线,例如 |---|---|,中间不得插入正文或其他管道行。"});continue}let d=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>a.trim())),f=d[0]||[],g=f.filter(a=>/^(?:列|字段|内容|备注)\d+$/u.test(a));g.length>0&&b.push({level:"error",message:`表格存在泛化表头:${g.join("、")}`,suggestion:"正式投标表格必须使用业务字段表头,不得出现“列5/字段1/内容2”等临时表头。"});let h=f.length;d.find((a,b)=>1!==b&&a.length!==h)&&b.push({level:"error",message:`表格列数不一致:${f.join("、")}`,suggestion:"请统一表头和数据行列数;不应通过自动填充兜底词修补表格。"});let i=d.slice(2),j=i.find(a=>a.some(a=>""===a));j&&b.push({level:"error",message:`表格存在空单元格:${f.join("、")}(“${j[0]||""}”行)`,suggestion:"正式交付表格不得出现空单元格;缺失数据应从资料补齐或按业务口径填写具体值,不得留空。"});let k=i.find(a=>a.some((b,c)=>(!!/^(?:—+|-+|-|\/|N\/A|n\/a|待定|待补充|待确认|待查|待补|若干|暂无|无数据)$/u.test(b)||!!/^约\d/u.test(b))&&!(/^(?:合计|小计|总计|累计)/u.test(a[0]||"")&&/^(?:—+|-+)$/u.test(b)&&c>0)));if(k){let a=/^(?:合计|小计|总计|累计)/u.test(k[0]||""),c=k.find((b,c)=>(!!/^(?:—+|-+|-|\/|N\/A|n\/a|待定|待补充|待确认|待查|待补|若干|暂无|无数据)$/u.test(b)||!!/^约\d/u.test(b))&&!(a&&/^(?:—+|-+)$/u.test(b)&&c>0))||"";b.push({level:"error",message:`表格存在占位符单元格:${f.join("、")}(“${k[0]||""}”行“${c}”)`,suggestion:"正式交付表格不得用“—/若干/约/待定”等占位或模糊表达代替具体数据;应从资料补齐具体数值。"})}}return b}function M(a){let b=[],c=a.split(e.A5),d=[];for(let a=0;a<c.length;a+=1){if(!e.w7.test(c[a]))continue;let b=a,f=[];for(;a<c.length&&e.w7.test(c[a]);)f.push(c[a]),a+=1;a-=1;let g=f.filter(a=>e.N3.test(a)).length;if(0===g)continue;let h=(f[0]||"").trim(),i=h.startsWith("|")?h.slice(1):h,j=(i.endsWith("|")?i.slice(0,-1):i).split("|").map(a=>a.split("**").join("").trim()).filter(a=>a.length>0);d.push({headerKey:j.join("|"),headerText:j.join("、"),start:b,end:a,dividerCount:g})}let f=new Map;for(let a of d)f.set(a.headerKey,(f.get(a.headerKey)||0)+1);let g=[...f.entries()].filter(([,a])=>a>=3);if(g.length>0){let a=d.find(a=>f.get(a.headerKey)===g[0]?.[1])?.headerText||"";b.push({level:"warning",message:`同主题表格重复堆叠:${g.length} 组相同表头出现 3 次及以上(如:${a})`,suggestion:"同一主题表格全文只出现一次,禁止拆成多张碎表重复堆叠凑数;请合并同类表格或删除重复内容。"})}let h=0;for(let a=1;a<d.length;a+=1){let b=d[a-1],e=d[a];b&&e&&c.slice(b.end+1,e.start).every(a=>""===a.trim())&&(h+=1)}for(let a of d)a.dividerCount>=2&&(h+=a.dividerCount-1);return h>=2&&b.push({level:"warning",message:`表格连续堆叠:${h} 处相邻表格无正文分隔`,suggestion:"表格之间应有正文引导叙述,禁止连续堆叠多张表格凑数。"}),b}function N(a){return a.split(e.A5).filter(a=>!/^#{1,6}\s+/u.test(a.trim())).filter(a=>!/^\s*\|/u.test(a)).filter(a=>!/^\s*:?-{3,}:?/u.test(a)).filter(a=>!/^<\/?div\b/iu.test(a.trim())).join("\n").replace(/[|*_`<>-]/gu,"").replace(e.ug,"").length}function O(a){let b=[...a.matchAll(/^(#{3,4})\s+(.+)$/gmu)];return b.map((c,d)=>{let e=c[1].length,f=(c.index||0)+c[0].length,g=b.slice(d+1).find(a=>a[1].length<=e),h=g?.index??a.length,i=(c[2]||"").trim();return{rawTitle:i,title:F(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function P(a,b,c,d,f){let g=N(d),h=e.w7.test(d)&&d.split(e.A5).some(a=>e.N3.test(a)),i=N(d.split("\n").filter(a=>!e.w7.test(a)&&!e.N3.test(a)).join("\n").replace(/^#{1,6}\s+.+$/gmu,""));if(/\[WRITER_MISSING_SECTION\]|Writer 未完成/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节内容补写未完成:${b}`};if(/【本小节生成未达标,需重新生成】/u.test(d))return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 小节生成未达标:${b}`};if(/项目基本信息|基本信息|工程概况|项目概况|工程概述|项目概述/u.test(b)&&(h||g>=40)||/^附录[一二三四五六七八九十A-Z\d]/u.test(b)&&h)return;let j=/清单|配置|汇总|一览|明细|计划|进度|节点|安排/u.test(b)||/表[^,。;:\s]{0,6}$/u.test(b);if(!(h&&j&&Math.max(0,d.split(e.A5).filter(a=>e.w7.test(a)&&!e.N3.test(a)).length-1)>=2)){if(h&&i<20)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:f?`${a} 只有标题或表格无正文:${b}`:`${a} 小节只有标题或表格无正文:${b}`};if(!(g>=80)||!(i>=20)){if(0===g)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"empty",planned:f,message:`${a} 空小节:${b}`};if(g<180)return{chapterTitle:a,sectionTitle:b,level:c,bodyLength:g,reason:"too_short",planned:f,message:`${a} ${f?"规划小节":"正文小节"}正文过短:${b}`}}}}function Q(a,b){let c=[],d=new Set;for(let e of b){let b=e.content?.trim()?e.content:a;for(let a of(e.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(F(a))&&!/^附录/u.test(a.trim()))){let f=F(a),g=function(a,b){let c=O(a).filter(a=>(function(a,b){let c=F(a),d=F(b);if(!c||!d)return!1;if(c===d||c.includes(d)||d.includes(c))return!0;let e=/项目概况|主要施工方案|新技术新材料|工程重点难点|重点难点|危大工程|保障体系|安全保障|工期|质量|安全生产|应急预案|资源|人材机|材料|机械|劳动力|进度|关键线路|交通疏导|成品保护|深化设计|验收/gu,f=new Set(c.match(e)||[]),g=new Set(d.match(e)||[]),h=[...f].filter(a=>g.has(a)).length;return h>=2||1===Math.min(f.size,g.size)&&1===h&&16>=Math.max(c.length,d.length)})(a.rawTitle,b));return c.length<=1?c[0]:c.map(a=>({item:a,gap:P("",b,a.level,a.body,!0),textLength:N(a.body)})).sort((a,b)=>{let c=a.gap&&"empty"===a.gap.reason?1:0,d=b.gap&&"empty"===b.gap.reason?1:0;return c!==d?c-d:b.textLength-a.textLength})[0]?.item}(b,a),h=`${e.title}|${f}|planned`;if(!g){c.push({chapterTitle:e.title,sectionTitle:a,level:3,bodyLength:0,reason:"missing_planned_section",planned:!0,message:`${e.title} 缺少规划小节:${a}`}),d.add(h);continue}let i=P(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of O(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=P(e.title,a.title,a.level,a.body,!1);g&&"empty"===g.reason&&c.push(g),d.add(b)}}return c}function R(a,b){return Q(a,b).filter(a=>"empty"===a.reason||"missing_planned_section"===a.reason).map(a=>({level:"error",message:a.message,suggestion:"missing_planned_section"===a.reason?"必须补充该规划小节正式正文,不得缺节导出。":"必须补充与该小节相关的材料事实和必要内容,达到正文完整度要求。"}))}function S(a){return`${a.fieldName||a.key} ${(0,m.lG)(a.value)}`.replace(/\s+/gu," ").trim()}let T=/占地|用地|地下|地上|办公|生活|附属|辅助|绿化|道路|广场|门卫|配电|泵房|锅炉房|车库|车棚|岗亭|传达|警卫|样板房|售楼|门房|单栋|各栋|楼层|每层|单层|架空|雨棚|堆场/u,U=/办公区|生活区|加工区|施工区|堆场|门卫|配电|泵房|锅炉房|车库|车棚|岗亭|传达|警卫|样板房|售楼|门房|地下室|楼层|单层|每层|架空|雨棚/u,V=/暂列|暂估|费率|税率|利润|规费|安全文明|措施费|人工费|材料费|机械费|管理费|暂定/u,W=["地下建筑面积与地上建筑面积的分项指标","配套用房与附属用房的建筑面积","占地面积与绿化面积的用地指标"],X=["总建筑面积的总体规模指标","建设规模的总量数值"],Y=["暂列金额与暂估价的子项费用","人工费与材料费的分项费用"],Z=["合同估算价的总金额口径","投资估算的总体金额"];async function $(a){return(0,o.A)({prototypes:[...W],negativePrototypes:[...X],embedDocuments:a})}async function _(a){return(0,o.A)({prototypes:[...Y],negativePrototypes:[...Z],embedDocuments:a})}async function aa(a,b,c,d,e,f){let g=[],h=[],i=new Set,j=RegExp(`(?:${b.source})(?:[^\\n。;;,,]{0,14}?)(\\d{2,}(?:[.,]\\d+)?\\s*万?)\\s*(${c.source})`,"giu"),k=[...a.matchAll(j)],l=f?k.filter(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),f=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return!(d&&d.test(c)||e&&e.test(f))}).map(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),d=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return{index:b.index??0,context:`${d}${c}`.replace(/\s+/gu,"").slice(-24)}}):[],m=l.length>0?await f(l.map(a=>a.context)):[],n=new Set(l.filter((a,b)=>m[b]).map(a=>a.index));for(let c of k){let f=c[1].replace(/[,,]/gu,"").replace(/\s+/gu,""),j=c[2],k=c[0].slice(0,c[0].indexOf(c[1])),l=a.slice(Math.max(0,(c.index??0)-16),c.index??0);if(d&&d.test(k)||e&&e.test(l)||n.has(c.index??0)){h.push({value:f,unit:j,scope:c[0].slice(0,k.length).replace(/\s+/gu,""),context:`${l}${k}`.replace(/\s+/gu,"").slice(-24)});continue}let m=c[0].match(b)?.[0]||"",o=`${f}|${j}`;!f||i.has(o)||(i.add(o),g.push({value:f,unit:j,scope:m}))}return{entries:g,skipped:h}}function ab(a,b){return aa(a,ad,ae,T,U,b).then(({entries:b})=>{let c=b.find(a=>"建筑面积"===a.scope.replace(/^总/u,""));return/占地|用地/u.test(a)?c:b[0]})}function ac(a){let b=a.value.replace(/[,,]/gu,"").trim(),c=/^([\d.]+)万/u.exec(b),d=c?1e4*Number(c[1]):Number(b);return Number.isFinite(d)?/亿元/u.test(a.unit)?1e8*d:/万元/u.test(a.unit)?1e4*d:d:NaN}let ad=/(?<![地上地下门卫室值班室配电室配电房泵房水泵房锅炉房公厕车库车棚岗亭传达室警卫室样板房售楼处门房])总?建筑面积|总?建设规模/u,ae=/㎡|m²|m2|平方米/u,af=/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价/u,ag=/万元|亿元/u;async function ah(a,b,c,d,e){let f=[],g=await $(e),h=await _(e),i=a=>c?.find(b=>b.kind===a&&b.resolution&&"low"!==b.confidence)?.resolution,j=a=>{let b=/(\d+(?:\.\d+)?)\s*(㎡|m²|m2|平方米|万元|亿元)/u.exec(a);return b?{value:b[1],unit:b[2]}:void 0},k=i("duration")??b.schedule.map(S).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),l=b.quality.map(S).find(a=>/质量|合格|优良/u.test(a));if(k){let b=function(a){let b=new Set;for(let c of[/\d+\s*日历天(?!内)/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*天/gu,/(?:计划工期|合同工期|总工期|工期|施工周期)[^\n。;;]{0,12}\d+\s*(?:个月|月)/gu])for(let d of a.matchAll(c)){let a=d[0].match(/\d+\s*(?:日历天|天|个月|月)/u)?.[0]?.replace(/\s+/gu,"");a&&b.add(a)}return[...b]}(k)[0],c=a.split("\n").filter(a=>!/^\s*\|/u.test(a.trim())).join("\n"),d=[];for(let a of c.matchAll(/(?:计划工期|合同工期|总工期|工期|施工周期)[^\d。;;\n|]{0,18}(\d{1,4})\s*日历天/gu)){let e=c.slice(Math.max(0,(a.index||0)-8),a.index||0)+a[0];if(/顺延|延长|展期|不超过|不大于|最多|累计|第\d+日/u.test(e)||/基坑|支护|桩基|土方|基础|主体|装饰|装修|安装|室外|分项|分阶段|阶段|关键线路|单层|每层|地下室|砌体|二次结构|收尾|调试/u.test(e))continue;let f=`${a[1]}日历天`;f===b||d.includes(f)||d.push(f)}b&&d.length>=1&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性冲突:正文出现与资料工期不一致的表述 ${d.slice(0,6).join("、")}`,suggestion:`请统一使用资料中的工期口径:${k}`})}l&&!/质量标准|质量目标|合格|优良/u.test(a)&&(d&&[...d.values()].some(a=>a.contentNeeds.quality)||f.push({level:"error",message:"跨章一致性缺口:正文未稳定体现资料中的质量目标",suggestion:`请在工程概况、质量保证和验收相关章节统一体现:${l}`}));let m=i("area"),n=b.project.map(S).filter(a=>/建设规模|建筑面积/u.test(a)),o=await Promise.all(n.map(a=>ab(a,g))),p=m??n.find((a,b)=>void 0!==o[b]);if(p){let c=m?j(m):await ab(p,g),{entries:d,skipped:e}=await aa(a,ad,ae,T,U,g);if(c){let a=d.filter(a=>ac(a)!==ac(c));a.length>=1&&f.push({level:"error",message:`跨章一致性冲突:正文出现与资料建设规模不一致的表述 ${a.slice(0,6).map(a=>`${a.value}${a.unit}`).join("、")}`,suggestion:`请统一使用资料中的建设规模口径:${p.slice(0,80)}`})}if(e.length>0){let a=[m?`建筑总量裁决值:${m}`:"",...b.project.map(S).filter(a=>/建设规模|建筑面积|占地/u.test(a)).slice(0,3)].filter(Boolean);f.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规模口径复核:正文 ${e.slice(0,3).map(a=>`“${a.context.slice(-14)}${a.value}${a.unit}”`).join("、")} 等 ${e.length} 处数值与口径词之间混入子项/专项口径词,需核对口径归属`,suggestion:`依据项目规模事实卡逐处核对该数值的口径归属(${a.join(";")||"无可用事实卡,以绑定资料原文为准"}):与事实卡对应口径一致的数值保留原样,口径错位或数值不一致的数值改正为事实卡对应口径值,不得把子项/专项口径数值改成建筑总量数值。`})}}let q=i("cost"),r=q??b.project.map(S).find(a=>/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价/u.test(a));if(r){let b=q?j(q):(await aa(r,af,ag,V,void 0,h)).entries[0],c=(await aa(a,af,ag,V,void 0,h)).entries;if(b){let a=c.filter(a=>ac(a)!==ac(b));a.length>=1&&f.push({level:"error",message:`跨章一致性冲突:正文出现与资料估算价不一致的表述 ${a.slice(0,6).map(a=>`${a.value}${a.unit}`).join("、")}`,suggestion:`请统一使用资料中的估算价口径:${r.slice(0,80)}`})}}return f}let ai=/找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层|隔热层|隔离层/gu,aj=/铺设|施工|浇筑|粘贴|铺贴|涂抹|完成|进行|待|设置|铺装|挂网|喷涂|灌注/u,ak=["施工过程与工序动作的先后描述","铺设浇筑完成后再进行的工序"],al=["结构层的厚度与配比参数","找平层厚20毫米的规格"];async function am(a){return(0,o.A)({prototypes:[...ak],negativePrototypes:[...al],embedDocuments:a})}async function an(a,b){let c=[],d=[...a.matchAll(ai)],e=[],f=(a,b)=>e.some(([c,d])=>a<d&&b>c),g=[],h=(a,d,h,i,j,k)=>{let l=[...a.matchAll(h)];for(let h of"first"===i?l:[...l].reverse()){let l=d+(h.index??0),m=l+h[0].length;if(f(l,m))continue;let n="first"===i?a.slice(0,h.index??0):a.slice((h.index??0)+h[0].length);if(!aj.test(n)){if("thickness"===k){let a=Number(h[1]??"");if(!Number.isFinite(a)||a<=0||a>=1e3)continue}b&&n.trim()&&g.push({key:`${j}|${l}|${m}`,gap:n}),e.push([l,m]),c.push({layer:j,span:[l,m],raw:h[0],kind:k});return}}};for(let b=0;b<d.length;b+=1){let c=d[b],e=c[0],f=c.index??0,g=f+e.length,i=d[b+1]?.index,j=void 0===i?Math.min(a.length,g+90):i,k=a.slice(g,j),l=b>0?(d[b-1].index??0)+d[b-1][0].length:Math.max(0,f-40),m=a.slice(l,f);h(k,g,/(\d+:\d+(?:\.\d+)?)/gu,"first",e,"ratio"),h(m,l,/(\d+:\d+(?:\.\d+)?)/gu,"last",e,"ratio"),h(k,g,/(\d+(?:\.\d+)?)\s*mm/gu,"first",e,"thickness"),h(m,l,/(\d+(?:\.\d+)?)\s*mm/gu,"last",e,"thickness")}if(b&&g.length>0){let a=await b(g.map(a=>a.gap)),d=new Set(g.filter((b,c)=>a[c]).map(a=>a.key));return c.filter(a=>!d.has(`${a.layer}|${a.span[0]}|${a.span[1]}`))}return c}async function ao(a,b){let c=[],d=new Set;for(let e of(await an(a,b))){let a="ratio"===e.kind?e.raw.match(/(\d+:\d+(?:\.\d+)?)/u)?.[1]:void 0,b="thickness"===e.kind?e.raw.match(/(\d+(?:\.\d+)?)/u)?.[1]:void 0,f=b?Number(b):void 0,g=`${e.layer}|${a||""}|${f??""}`;d.has(g)||(d.add(g),c.push({layer:e.layer,ratio:a,thickness:f}))}return c}async function ap(a,b,c){let d=[],e=await am(c),f=[...b.specifications,...b.quality,...b.preciseFacts,...b.bills].map(S).join("\n"),g=await ao(f,e);if(0===g.length)return d;let h=new Map;for(let a of g){let b=h.get(a.layer)||[];b.push(a),h.set(a.layer,b)}let i=await ao(a,e),j=new Set;for(let[a,b]of h){let c=[...new Set(b.map(a=>a.ratio).filter(Boolean))],e=[...new Set(b.map(a=>a.thickness).filter(a=>Number.isFinite(a)))];for(let b of i.filter(b=>b.layer===a)){if(1===c.length&&b.ratio&&b.ratio!==c[0]){let e=`ratio|${a}|${b.ratio}`;j.has(e)||(j.add(e),d.push({level:"error",message:`工序规格冲突:正文${a}配比 ${b.ratio} 与资料口径 ${c[0]} 不一致`,suggestion:`请将${a}配比统一为资料口径 ${c[0]},禁止改写资料规格。`}))}if(1===e.length&&Number.isFinite(b.thickness)&&Math.abs(b.thickness-e[0])>=1){let c=`thickness|${a}|${b.thickness}`;j.has(c)||(j.add(c),d.push({level:"error",message:`工序规格冲突:正文${a}厚度 ${b.thickness}mm 与资料口径 ${e[0]}mm 不一致`,suggestion:`请将${a}厚度统一为资料口径 ${e[0]}mm。`}))}}}return d}async function aq(a,b,c){let d=await $(c),e=await _(c),f=await am(c),g=[...a.specifications,...a.quality,...a.preciseFacts,...a.bills].map(S).join("\n"),h=new Map;for(let a of(await ao(g,f))){let b=h.get(a.layer)||{ratios:[],thicknesses:[]};a.ratio&&!b.ratios.includes(a.ratio)&&b.ratios.push(a.ratio),Number.isFinite(a.thickness)&&!b.thicknesses.includes(a.thickness)&&b.thicknesses.push(a.thickness),h.set(a.layer,b)}let i=new Map;for(let[a,b]of h)(1===b.ratios.length||1===b.thicknesses.length)&&i.set(a,{ratio:1===b.ratios.length?b.ratios[0]:void 0,thickness:1===b.thicknesses.length?b.thicknesses[0]:void 0});let j=a=>b?.find(b=>b.kind===a&&b.resolution&&"low"!==b.confidence)?.resolution,k=a=>{let b=/(\d+(?:\.\d+)?)\s*(㎡|m²|m2|平方米|万元|亿元)/u.exec(a);return b?{value:b[1],unit:b[2]}:void 0},l=j("area"),m=a.project.map(S).filter(a=>/建设规模|建筑面积/u.test(a)),n=await Promise.all(m.map(a=>ab(a,d))),o=l??m.find((a,b)=>void 0!==n[b]),p=j("cost"),q=p??a.project.map(S).find(a=>/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价/u.test(a));return{specTargets:i,scaleTarget:o?l?k(l):await ab(o,d):void 0,costTarget:q?p?k(p):(await aa(q,af,ag,V,void 0,e)).entries[0]:void 0,scaleGapGate:d,costGapGate:e,actionGate:f}}async function ar(a,b){let c=[];for(let d of(await an(a,b.actionGate))){let a=b.specTargets.get(d.layer);if(a){if("ratio"===d.kind&&a.ratio){let b=d.raw.match(/(\d+:\d+(?:\.\d+)?)/u)?.[1];b&&b!==a.ratio&&c.push({start:d.span[0],end:d.span[1],replacement:d.raw.replace(/(\d+:\d+(?:\.\d+)?)/u,a.ratio),detail:`${d.layer}配比 ${b}→${a.ratio}`})}if("thickness"===d.kind&&Number.isFinite(a.thickness)){let b=Number(d.raw.match(/(\d+(?:\.\d+)?)/u)?.[1]);Number.isFinite(b)&&Math.abs(b-a.thickness)>=1&&c.push({start:d.span[0],end:d.span[1],replacement:d.raw.replace(/(\d+(?:\.\d+)?)/u,String(a.thickness)),detail:`${d.layer}厚度 ${b}mm→${a.thickness}mm`})}}}let d=async(b,d,e,f,g,h,i)=>{if(!b)return;let j=RegExp(`(?:${d.source})(?:[^\\n。;;,,]{0,14}?)(\\d{2,}(?:[.,]\\d+)?\\s*万?)\\s*(${e.source})`,"giu"),k=[...a.matchAll(j)],l=i?k.filter(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),d=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return!(g&&g.test(c)||h&&h.test(d))}).map(b=>{let c=b[0].slice(0,b[0].indexOf(b[1])),d=a.slice(Math.max(0,(b.index??0)-16),b.index??0);return{index:b.index??0,context:`${d}${c}`.replace(/\s+/gu,"").slice(-24)}}):[],m=l.length>0?await i(l.map(a=>a.context)):[],n=new Set(l.filter((a,b)=>m[b]).map(a=>a.index));for(let d of k){let e=d[0].slice(0,d[0].indexOf(d[1])),i=a.slice(Math.max(0,(d.index??0)-16),d.index??0);if(g&&g.test(e)||h&&h.test(i)||n.has(d.index??0))continue;let j={value:d[1].replace(/[,,]/gu,"").replace(/\s+/gu,""),unit:d[2]};if(ac(j)===ac(b))continue;let k=(d.index??0)+d[0].indexOf(d[1]),l=k+d[1].length;c.some(a=>a.start<l&&a.end>k)||c.push({start:k,end:l,replacement:b.value,detail:`${f} ${j.value}${j.unit}→${b.value}${j.unit}`})}};if(await d(b.scaleTarget,ad,ae,"建设规模",T,U,b.scaleGapGate),await d(b.costTarget,af,ag,"估算价",V,void 0,b.costGapGate),0===c.length)return{content:a,fixedCount:0,details:[]};c.sort((a,b)=>b.start-a.start);let e=a;for(let a of c)e=e.slice(0,a.start)+a.replacement+e.slice(a.end);return{content:e,fixedCount:c.length,details:c.map(a=>a.detail)}}async function as(a,b,c,d){let e=await aq(b,c,d);if(0===e.specTargets.size&&!e.scaleTarget&&!e.costTarget)return{fixedCount:0,details:[]};let f=0,g=[];for(let b of a){let a=await ar(b.content,e);a.fixedCount>0&&(b.content=a.content,f+=a.fixedCount,g.push(...a.details))}return{fixedCount:f,details:g}}async function at(a,b,c,d){let e=await aq(b,c,d);if(0===e.specTargets.size&&!e.scaleTarget&&!e.costTarget)return{markdown:a,fixedCount:0,details:[]};let f=await ar(a,e);return{markdown:f.content,fixedCount:f.fixedCount,details:f.details}}async function au(a){let{closedLoopBlocks:b}=await (0,n.Pm)(a),c=Math.max(6,Math.ceil((0,g.V7)(a)/1500));return b>=c?[]:[{level:"warning",message:`可落地性闭环句式密度不足:全文 ${b} 段完整闭环句式,未达每 1500 字 1 段(目标 ${c} 段)`,suggestion:"在措施类段落中补齐“责任岗位 + 检查频次 + 整改闭环”三要素齐全的闭环句式:同一自然段内同时出现岗位(如项目经理/质检员/安全员)、频次(每日/每周/不少于X次)与闭环(整改/复查/销项)。"}]}function av(a,b){let c=[],d=/(?:三检制|三级教育|三级管理|5S|24\s*小时|每日|每周|每月|一次|两次)/gu;for(let e of a){let a=[...new Set(e.content.match(d)||[])];if(a.length<3)continue;let f=b?.get(e.title);f&&(f.closedLoop||c.push({level:"warning",message:`${e.title} 管理措施数字较多但缺少执行闭环:${a.slice(0,8).join("、")}`,suggestion:"这些管理数字可以保留,但需要补充责任主体、检查频次、记录台账、整改复查和闭环要求。"}))}return c}function aw(a,b){let c=/(?:加强组织领导|严格执行规范|落实责任制度|确保工程质量|强化过程管理|提高思想认识|完善管理体系|形成闭环管理)/gu,d=[];for(let e of a){if((e.content.match(c)||[]).length<6)continue;let a=b?.get(e.title);a&&(a.concrete||d.push({level:"error",message:`${e.title} 存在较多未绑定项目事实和工序控制点的泛化套话`,suggestion:"请替换为结合资料事实、施工对象、工序控制、验收资料和整改闭环的专业内容。",chapterId:e.id}))}return d}function ax(a){return[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].map(S).join("\n")}function ay(a,b,c){let d=`${a} ${b}`;if(/(?:工日|人日|次|台|套|个|人|层|间|批|项|处|座|栋|根|只|组|件|块|片|面|条|道|樘|扇|盏|节|段)$/u.test(a)||/三检制|三级|5S|24\s*小时|每日|每周|每月|一次|两次|责任制|制度/u.test(d)||/暂列金额|暂估价|报价|单价|合价|综合单价|税率|增值税|预留金/u.test(d)||/^\d+(?:\.\d+)?(?:月|年)$/u.test(a)&&/开工|竣工|日期|计划|年|月/u.test(b))return"soft";let e=c??b;return/(?:天|工作天|月|年)$/u.test(a)&&/总工期|计划工期|合同工期|日历天|施工周期/u.test(e)||/(?:万元|亿元|元)$/u.test(a)&&/最高投标限价|招标控制价|合同估算价|投资估算|报价|金额|人民币/u.test(e)||/(?:m2|hm2|亩|㎡|m²|平方米)$/u.test(a)&&/建设规模|总建筑面积|总用地面积|总占地面积/u.test(e)?"scope":/(?:工程量|清单|建设规模|建筑面积|长度|材料|设备|规格|型号).{0,24}(?:m²|㎡|m3|m³|米|吨|套|台|个|项|%)/u.test(d)?"spec":/GB\s*\d|JGJ\s*\d|CJJ\s*\d|ISO\s*\d|GB\/T|CECS\s*\d|DL\s*\d|YB\s*\d|SH\s*\d|SJ\/T\s*\d|CJJ\/T\s*\d|DB\s*\d/u.test(d)?"soft":/标准|规范|编号/u.test(d)?"spec":"soft"}function az(a){let b=[];for(let c of(0,h.zn)(a)){if(/^\d+\.\d+$/u.test(c))continue;let d=(0,h.K3)(c),e=a.indexOf(c);if(e<0){let b=/^\d+(?:\.\d+)?/u.exec(c)?.[0];e=b?a.indexOf(b):-1}if(e<0)continue;let f=a.lastIndexOf("\n",e-1)+1,g=a.indexOf("\n",e),i=a.slice(f,g<0?a.length:g);if(/^\s*\|/u.test(i.trim()))continue;let j=a.slice(Math.max(0,e-36),Math.min(a.length,e+c.length+36)),k=a.slice(Math.max(0,e-16),e);b.push({token:c,normalizedToken:d,context:j,prefix:k})}return b}function aA(a){let{markdown:b,factsModel:c,scopeSuspicious:d,specSuspicious:e,softSuspicious:f}=a,g=[],h=[...new Set(d)],i=[...new Set(e)],j=[...new Set(f)];return h.length>=1&&g.push({level:"error",message:`生成后事实反查失败:正文出现资料事实主表中未找到的总量口径数字 ${h.slice(0,8).join("、")}`,suggestion:"总量口径数字(工期/金额/建设规模)必须与资料一致;请删除或改写为资料确认的口径,禁止编造。"}),i.length>=2&&g.push({level:"warning",message:`生成后事实反查提示:正文出现资料事实主表中未找到的规格明细数字 ${i.slice(0,8).join("、")}`,suggestion:"建议复核这些规格是否来自管理制度、规范要求或资料事实;如无依据,改为定性管理要求。"}),j.length>=6&&g.push({level:"warning",message:`生成后事实反查提示:正文出现较多未在资料事实主表中反查到的管理数字 ${j.slice(0,10).join("、")}`,suggestion:"请确认这些管理数字属于通用制度、规范要求或项目资料事实;如无依据,建议改为定性管理要求。"}),/质量目标|质量标准/u.test(b)&&c.quality.length>0&&!c.quality.some(a=>b.includes((0,m.lG)(a.value).slice(0,18)))&&g.push({level:"warning",message:"生成后事实反查提示:正文质量目标表述未明显匹配质量事实主表",suggestion:"请使用资料中的质量目标原文或等价表述。"}),g}let aB=/(?:天|工作天|日历天|月|年|万元|亿元|元|m2|hm2|亩|㎡|m²|平方米)$/u;function aC(a,b){let c=ax(b);if(80>(0,g.V7)(c))return[];let d=(0,h.K3)(c),e=[],f=[],i=[];for(let b of az(a)){let{token:a,normalizedToken:c,context:g,prefix:h}=b,j=ay(a,g,h);"scope"!==j||d.includes(c)||e.push(a),"spec"!==j||d.includes(c)||f.push(a),"soft"!==j||d.includes(c)||i.push(a)}return aA({markdown:a,factsModel:b,scopeSuspicious:e,specSuspicious:f,softSuspicious:i})}async function aD(a,b,c){let d,e=ax(b);if(80>(0,g.V7)(e))return[];let f=(0,h.K3)(e),i=az(a),j=i.filter(a=>aB.test(a.token));if(j.length>0){let a=await c.scopeClassifier.batchClassify(j.map(a=>`${a.token} ${a.context}`.slice(0,160)));d=new Map,j.forEach((b,c)=>d.set(b.token,a[c]||"other"))}let k=[],l=[],m=[];for(let a of i){let{token:b,normalizedToken:c,context:e,prefix:g}=a,h=ay(b,e,g);if(d&&aB.test(b)){let a=d.get(b)||"other";"scope"===h?h="scope"===a?"scope":"soft":"scope"===a&&(h="scope")}"scope"!==h||f.includes(c)||k.push(b),"spec"!==h||f.includes(c)||l.push(b),"soft"!==h||f.includes(c)||m.push(b)}return aA({markdown:a,factsModel:b,scopeSuspicious:k,specSuspicious:l,softSuspicious:m})}function aE(a,b){let c=[],d=["factuality","structure","depth","executable","specificity","consistency"];for(let f of a){var e;let a=f.content;if(800>(0,g.V7)(a))continue;let h=(e=f.title,/概况|工程|项目/u.test(e)?{min:5,focus:"事实依据、项目特异性"}:/部署|总体|组织/u.test(e)?{min:6,focus:"组织结构、可执行闭环、跨章一致性"}:/进度|工期/u.test(e)?{min:6,focus:"进度结构、工期一致性、纠偏机制"}:/质量/u.test(e)?{min:6,focus:"质量深度、验收复验、资料闭环"}:/安全|文明|危大|风险/u.test(e)?{min:6,focus:"风险覆盖、应急响应、检查整改"}:/资源|材料|设备|劳动力/u.test(e)?{min:5,focus:"资源依据、进场调配、进度支撑"}:{min:4,focus:"事实依据、专业深度、可执行性"}),i=b?.get(f.title);if(!i)continue;let j=2*d.filter(a=>i.dimensions[a]).length;if(j<h.min){let a=d.filter(a=>!i.dimensions[a]).join("、")||h.focus;c.push({level:"error",message:`${f.title} 专业评分不足:${j}/12,薄弱维度:${a}`,suggestion:`请按章节任务卡补齐${h.focus},并写出资料依据、实施流程、专业控制点和检查整改闭环。`,chapterId:f.id})}}return c}function aF(a,b){let c=[{re:/进度|工期/u,needKey:"schedule",need:/关键线路|穿插|纠偏|资源保障|节点|动态调整/u,message:"进度工期章节缺少关键线路、穿插施工或纠偏保障内容"},{re:/质量/u,needKey:"quality",need:/材料.*验收|复验|隐蔽验收|整改.*复验|质量.*资料|检验批/u,message:"质量章节缺少材料验收复验、隐蔽验收或整改复验闭环"},{re:/安全|文明|危大|风险/u,needKey:"safety",need:/风险|临电|消防|应急|检查.*整改|文明施工|人员|设备/u,message:"安全文明章节缺少风险识别、现场控制或应急检查闭环"},{re:/资源|材料|设备|劳动力/u,needKey:"resource",need:/进场|验收|调配|保管|供应|投入计划/u,message:"资源章节缺少进场、验收、调配或保管计划"},{re:/施工|工艺|技术|方案/u,needKey:"construction",need:/准备|流程|工艺|控制点|验收|交底/u,message:"施工技术章节缺少施工准备、工艺流程、控制点或验收要求"}],d=[];for(let e of a){if(600>(0,g.V7)(e.content))continue;let a=b?.get(e.title);if(a)for(let b of c)b.re.test(e.title)&&(a.contentNeeds[b.needKey]||d.push({level:"error",message:`${e.title}:${b.message}`,suggestion:"请按专业任务卡定向补写该章节,补齐可实施的控制措施、资料依据和闭环要求。",chapterId:e.id}))}return d}function aG(a,b){return!!(/万元|元|报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(`${a} ${b}`)||/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂|页码|目录/u.test(b)||/^\d+$/.test(a)&&10>Number(a)||/之日起.{0,8}天内|天内.{0,10}(?:发出|提交|通知|回复|答复|完成|开工|竣工|报送|支付|更换)|天以上|天及以上|‰|暂扣|履约保证金|通过后.{0,6}天|因发包人原因|因承包人原因|未能按时|逾期|违约金/u.test(b))}function aH(a,b){let c=0;for(let d of a)b.includes(d.replace(e.ug,""))&&(c+=1);return c}let aI=/日历天|个月|㎡|m²|m3|m³|MPa|kPa|kN|GB\/T|GB|JGJ|ISO|DN|φ|Φ|米\/秒|天$/u;async function aJ(a,b,c=[]){let d=[],g=a.replace(e.ug,""),h=function(a){let b=new Set;for(let c of a)for(let a of c.evidence||[]){if(/bill_of_quantities|boq/u.test(`${a.roleId||""}`))continue;let c="string"==typeof a.content?a.content:"";for(let a of c.matchAll(e.No)){let d=a[0].trim();if(!d||/^\d{4}\s*年$/u.test(d)||/^\d{1,2}\s*月$/u.test(d))continue;let e=a.index||0,f=c.slice(Math.max(0,e-40),e+d.length+40);aG(d,f)||b.add(d)}}return[...b]}(c),i=h.length>=e.mu?h:function(a){let b=new Set;for(let c of a.preciseFacts){if("bill_of_quantities"===c.roleId)continue;let a=`${c.processingType||""} ${c.roleId} ${c.sourceFile}`;if(!e.FM.test(a)&&"precise_fact"!==c.roleId)continue;let d=`${c.key} ${c.fieldName||""} ${c.value}`;for(let a of d.matchAll(e.No)){let c=a[0].trim();aG(c,d)||b.add(c)}}return[...b]}(b),j=aH(i,g);i.length>=e.mu&&j/i.length<e.tg&&d.push({level:"warning",message:`可靠精确参数使用不足:${j}/${i.length}`,suggestion:"请将资料中可靠的规格、参数、数量、时间、比例和标准编号写入对应章节;商务金额、单价、税率、预留金不得写入正文。"});let k=function(a){let b=[...a].sort((a,b)=>a.localeCompare(b,"zh")),c=b.filter(a=>aI.test(a)),d=b.filter(a=>!aI.test(a));return[...c.slice(0,8),...d.slice(0,2)].slice(0,10)}(i);if(k.length>=6){let b=aH(k,g),c=k.filter(a=>!g.includes(a.replace(e.ug,"")));if(c.length>0&&b/k.length<.5){let d=a.split(/[。;;|]/u).map(a=>a.trim()).filter(a=>a.length>=6&&a.length<=160).slice(0,300);if(d.length>0){let a=await (0,f.Mv)(c.slice(0,10),d);c=c.filter(b=>!d.some(c=>a(b,c)>=.6)),b=k.length-c.length}}if(b/k.length<.5){let a=c.slice(0,3);d.push({level:"error",message:`可靠精确参数使用不足:关键参数抽查 ${b}/${k.length}${a.length?`(缺失如 ${a.join("、")})`:""}`,suggestion:"请将资料中的关键工程参数(工期、面积、强度等级、材料规格、规范编号等)写入正文对应章节,不得因参数总量达标而遗漏核心参数。"})}}return b.bills.length>0&&!e.pP.test(a)&&d.push({level:"error",message:"正文未体现结构化数据资料",suggestion:"请从表格、列表或明细中提取对象、单位、数量、规格和关键参数补入对应章节。"}),b.drawings.length>0&&!e._U.test(a)&&d.push({level:"error",message:"正文未体现设计/方案/说明类资料",suggestion:"请从设计、方案或说明资料中提取对象、流程、节点、做法、配置、规则和标准要求。"}),d}async function aK(a,b,c){let d=[],e=c.tables||[];if(0===e.length)return d;let g=a.replace(/\s+/gu,"").toLowerCase(),h=0,i=0,j=[];for(let a of e){let b=a.headers.map(a=>a.replace(/\s+/gu,"").toLowerCase()),c=b.findIndex(a=>/^(?:项目名称|名称|清单项名称|清单项|分部分项(?:工程)?名称|项目特征)/u.test(a)),d=b.findIndex(a=>/^(?:项目编码|编码|编号)/u.test(a)),e=b.findIndex(a=>/^工程量$|^数量$/u.test(a));for(let b of a.rows){h+=1;let a=c>=0?(b[c]||"").replace(/\s+/gu,""):"",f=d>=0?(b[d]||"").replace(/\s+/gu,""):"",k=e>=0?(b[e]||"").replace(/\s+/gu,""):"";if(!a&&!f){let c=b.findIndex(a=>/^\d{10,12}$/u.test(a)||/^[A-Z]{1,3}\d{8,}$/u.test(a));c>=0&&(f=b[c].replace(/\s+/gu,""),a=(b[c+1]||"").replace(/\s+/gu,""))}let l=a.length>=3?a.slice(0,Math.min(a.length,16)):"",m=f.length>=3?f.slice(0,Math.min(f.length,12)):"",n=l&&g.includes(l),o=m&&g.includes(m);n||o?i+=1:a.length>=3&&j.push({name:a,quantity:k})}}if(0===h)return d;let k=new Set;if(j.length>0&&i/h<.6){let b=a.split(/[。;;|]/u).map(a=>a.trim()).filter(a=>a.length>=6&&a.length<=160).slice(0,300),c=[...new Set(j.map(a=>a.name))].slice(0,30);if(b.length>0&&c.length>0){let a=await (0,f.Mv)(c,b);for(let d of c)b.some(b=>a(d,b)>=.6)&&k.add(d)}}let l=i+j.filter(a=>k.has(a.name)).length,m=j.filter(a=>!k.has(a.name)),n=l/h,o=m.length>0?`未落位项(共${m.length}项):${m.slice(0,30).map(a=>`${a.name.slice(0,40)}${a.quantity?` ${a.quantity}`:""}(未落位)`).join(";")}${m.length>30?` 及其他${m.length-30}项(同类项按已列名称分组归并补写)`:""}`:"";return n<.6&&d.push({level:"error",message:`清单项落位不足:${l}/${h} 项(${Math.round(100*n)}%)${o?`。${o}`:""}`,suggestion:`请将未落位清单项按专业工程分组补写进对应章节"主要施工内容"小节(施工概况/施工流程/施工方法),优先落位主要分部分项、关键规格与大额工程量。${o}`}),d}function aL(a,b){let c=[],d=b.drawings||[];if(0===d.length)return c;let e=a.replace(/\s+/gu,"").toLowerCase(),f=[...new Set(d.map(a=>a.sourceFile||"").filter(Boolean))],g=0,h=[];for(let a of f){let b=a.replace(/\.[^.]+$/u,"").replace(/[/\\]/gu,"").toLowerCase(),c=a.split("/").pop()||a;(b.length>=3?e.includes(b.slice(0,Math.min(b.length,12))):/图纸|设计|说明|节点|做法|构造/u.test(e))?g+=1:h.push(c)}if(f.length>0){let a=g/f.length;a<.25?c.push({level:"warning",message:`图纸引用严重不足:${g}/${f.length} 份图纸被正文引用(${Math.round(100*a)}%)`,suggestion:`建议将图纸中的设计说明、构造做法、材料规格和设备参数写入对应章节。未引用图纸:${h.slice(0,5).join("、")}`}):a<.5&&c.push({level:"warning",message:`图纸引用不足:${g}/${f.length} 份(${Math.round(100*a)}%)`,suggestion:`建议补充引用:${h.slice(0,5).join("、")}`})}return c}function aM(a){let b=[];for(let c of(/【本小节生成未达标,需重新生成】/u.test(a)&&b.push({level:"error",message:"生成未完成:存在未达标小节,需要重新生成或补写后才能导出",suggestion:"请重新生成未达标小节,禁止将占位内容作为正式正文。"}),e.IA))c.test(a)&&b.push({level:"warning",message:`存在占位式表达:${c.source}`,suggestion:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见资料/按文件”。"});return b}function aN(a,b){for(let c of b)try{if(RegExp(c,"iu").test(a))return!0}catch{if(a.includes(c))return!0}return!1}function aO(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,f=[];for(let a of(0,d.V)().autoSpecGates)aN(c,a.templateMatchers)&&f.push(a);if(0===f.length)return[];let g=[],h=z(a).length,i=0;for(let b of f){for(let c of(i=Math.max(i,b.minTables||0),b.requiredTexts))a.includes(c)||g.push({level:"warning",message:`配置要求缺少必要内容:${c}`,suggestion:"请按当前模板匹配的专业规则补齐必要内容。"});for(let c of b.forbiddenTexts)(function(a,b){let c="见图纸"===b||"按图纸"===b?["目录","清单","索引","汇总"]:[],d=0;for(;;){let e=a.indexOf(b,d);if(e<0)return!1;let f=a.slice(e+b.length);if(c.some(a=>f.startsWith(a))){d=e+b.length;continue}return!0}})(a,c)&&g.push({level:"error",message:`配置要求不得出现:${c}`,suggestion:"请根据当前模板匹配的专业规则清理正文污染内容。"})}return e.bu.test(a)&&g.push({level:"error",message:"正式正文存在 Markdown 标题符号 #",suggestion:"导出正文应去除 Markdown 标题符号,保留正式标题文字。"}),i&&h<i&&g.push({level:"warning",message:`配置要求正式表格不足:${h}/${i}`,suggestion:"如用户提示词或章节内容要求表格,应按项目资料补充对应表格本体。"}),g}function aP(a){let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`,c=new Set;for(let a of(0,d.V)().autoSpecGates)if(aN(b,a.templateMatchers))for(let b of a.requiredTexts)b&&c.add(b);return[...c]}function aQ(a,b,c,d,f,h,i){var j;if(!a)return b;let l=[...b],m=function(a){let b=[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources];for(let c of Object.values(a.schemaFacts))b.push(...c);return b}(c),n=function(a,b){let c=new Set;for(let a of b)c.add(a.key),a.fieldName&&c.add(a.fieldName);for(let b of a.tables){for(let a of b.headers)c.add(a);for(let a of b.rows)for(let b of a)c.add(b)}return c}(c,m),o=new Set(d.map(a=>a.title));for(let b of a.factFields){if(!b.required||(j=b.name,/国家法律法规|地方法规|规章|规范标准|标准规范|行业标准|现行规范|法律法规|合规|施工方法|工艺流程|质量控制|安全文明|应急|劳动力|材料投入|机械设备|检测仪器|关键节点/u.test(j)))continue;let a=c.schemaFacts[b.id]||[],e=!1,f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId));for(let a of d){if(e&&f)break;for(let c of a.evidence)!e&&!a.missingFacts.includes(b.name)&&(0,k.I2)(c,b)&&(e=!0),!f&&(0,k.I2)(c,b)&&(f=!0)}0!==a.length||n.has(b.name)||e||l.push({level:"warning",message:`系统暂未从知识库确认必需事实:${b.name}`,suggestion:b.extractionHint||"请扩大本地知识库检索、执行事实补抽,或调整事实字段配置。"}),f||l.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}for(let b of a.chapterRules){let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&l.push({level:"warning",message:`章节内容深度建议:${b.title}`,suggestion:`可扩展到约 ${b.minWords} 字,但不要改变模板章节结构。`})}let p=z(f),q=function(a){let b=[];for(let c of a.matchAll(e.gW))b.push({alt:c[1]||"",url:c[2]||"",index:c.index??0});return b}(f),r=(0,g.Cv)(f);for(let b of a.gateRules){let a=b.evaluator?b.evaluator:e.cA[b.type]?.(b)??{subject:"document",operator:"contains",value:b.value||b.target},g=a.target||b.target||"",j=a.value||b.value||g,k=d.find(a=>a.title===g),s=function(a){for(let c of e.Lp){let d=c(a);if(d){var b;return{level:a.rule.level,message:(b=a.rule,`${b.name}:${d}`)}}}}({rule:b,evaluator:a,target:g,value:j,min:a.min||Number(b.value)||1,markdown:f,textScope:"chapter"===a.subject&&k?k.content:f,regex:j?function(a){try{return RegExp(a,"iu")}catch{return}}(j):void 0,chapter:k,factNames:n,chapterTitles:o,tableBlocks:p,imageRefs:q,estimatedPages:r,allFacts:m,factsModel:c,projectBindings:h,promptBindings:i});s&&l.push(s)}return l}function aR(a,b){let c=function(a){let b="";for(let c of(0,l.dU)(a))c.content&&(b+=`${c.content}
|
|
2
2
|
|
|
3
3
|
`);return b}(b);if(!c.trim())return[];let d=a.replace(e.ug," ");for(let a of c.matchAll(e.QX)){let b=(a[1]||"").replace(e.ug," ").trim();if(b&&d.includes(b))return[{level:"error",message:"正文疑似包含提示词示例内容",suggestion:"请删除提示词样例数据,仅保留基于当前绑定材料生成的正文。"}]}return[]}},30355:(a,b,c)=>{c.d(b,{$8:()=>t,NP:()=>q,P9:()=>h,bT:()=>s,up:()=>r});var d=c(22157),e=c(37047),f=c(70208),g=c(71001);let h=["知识库","系统暂未","项目资料暂未","资料未明确","暂未明确","待确认","待资料复核","待系统","未检索到","资料不足","无法确认","建议补充","不适用","COL","可核验信息","工作包",...d.Kd];function i(a){return a.replace(/\s+/gu,"").toLowerCase()}function j(a){return(0,d.lG)(a.value).replace(/\s+/gu," ").trim()}function k(a,b){let c=i(`${a.fieldId||""} ${a.fieldName||""} ${a.key} ${(0,d.lG)(a.value)}`.replace(/\s+/gu," ").trim());return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(i(a)))}function l(a,b){let c=[...a.works.map(a=>`工程:${a.name} ${a.scope}`),...a.methods.map(a=>`工法:${a.name} ${(a.applicableWorks||[]).join("、")}`),...a.resources.map(a=>`资源:${a.name} ${a.spec} ${a.quantity}${a.unit}`),...a.schedule.map(a=>`工期:${a.milestone} ${a.duration}`),...a.standards.map(a=>`标准:${a.code} ${a.description}`),...a.risks.map(a=>`风险:${a.risk} ${a.mitigation}`),...a.requirements.map(a=>`要求:${a.category} ${a.detail}`),...a.siteConditions.map(a=>`现场:${a.condition} ${a.impact}`)],d=i(b);return c.filter(a=>i(a).includes(d)||b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(b=>i(a).includes(i(b))))}let m=[{keywords:"安全 文明 危大 风险 应急 临边 洞口 消防 临电 高处 起重 吊装 基坑 脚手架 模板 支护 图纸 施工说明 审查意见",prototype:"安全生产 文明施工 危大工程 应急预案 风险管控"},{keywords:"工期 日历天 节点 进度 计划 开工 竣工 关键线路",prototype:"施工工期 进度计划 关键节点 开工时间 竣工时间"},{keywords:"质量 验收 合格 标准 规范 检验批 隐蔽 复试 样板",prototype:"质量验收 质量目标 检验批 隐蔽工程 材料复试"},{keywords:"清单 工程量 材料 设备 机械 劳动力 规格 型号 数量 单位",prototype:"人材机资源 劳动力配置 材料供应 设备机械 工程量清单"},{keywords:"工程名称 项目名称 建设地点 建筑面积 建设规模 招标范围 施工范围",prototype:"工程概况 项目概况 建设地点 建设规模 招标范围"},{keywords:"施工 组织 部署 区段 流水 作业面 工序 穿插 图纸 清单",prototype:"施工部署 流水施工 施工区段 工序穿插"}];async function n(a,b){let c,d=new Map;if(0===a.length)return d;let f=m.map(a=>a.prototype);try{c=await (0,e.Mv)(a,f,b)}catch{return d}for(let b of a){let a=[];for(let d of m)c(b,d.prototype)>=.35&&a.push(d.keywords);a.length>0&&d.set(b,a)}return d}function o(a){let b=[];return/重点|难点|危大|风险|安全|应急/u.test(a)&&b.push("安全 文明 危大 风险 应急 临边 洞口 消防 临电 高处 起重 吊装 基坑 脚手架 模板 支护 图纸 施工说明 审查意见"),/工期|进度|节点|计划/u.test(a)&&b.push("工期 日历天 节点 进度 计划 开工 竣工 关键线路"),/质量|验收|标准|实测|通病/u.test(a)&&b.push("质量 验收 合格 标准 规范 检验批 隐蔽 复试 样板"),/资源|材料|机械|设备|人材机|人[、,,]材[、,,]机/u.test(a)&&b.push("清单 工程量 材料 设备 机械 劳动力 规格 型号 数量 单位"),/概况|说明|依据|范围/u.test(a)&&b.push("工程名称 项目名称 建设地点 建筑面积 建设规模 招标范围 施工范围"),/部署|施工|流水|区段|组织/u.test(a)&&b.push("施工 组织 部署 区段 流水 作业面 工序 穿插 图纸 清单"),b}function p(a){return/项目特点.*重点.*难点|重点.*难点.*分析/u.test(a)?"系统识别本项目特点、施工重点、施工难点、形成原因、影响范围和应对措施,必须落位项目规模、结构形式、工期、专业范围、现场约束等具体事实,并为“项目主要施工内容”提供逐项对应依据。":/项目主要施工内容/u.test(a)?"按专业工程和关键工序展开施工内容,必须逐项响应“项目特点、重点、难点分析”中的重点难点,说明施工范围、实施内容、控制措施、验收节点和资料闭环。":/工期|进度|节点|计划/u.test(a)?"使用项目工期、节点和资源事实说明进度组织要求。":/质量|验收|标准|实测/u.test(a)?"使用项目质量目标、验收标准和工序事实说明质量控制要求。":/安全|危大|风险|应急/u.test(a)?"使用项目风险、危大工程和安全文明事实说明安全管控要求。":/资源|材料|机械|人材机/u.test(a)?"使用清单、材料、设备和劳动力事实说明资源配置要求。":/概况|说明|依据/u.test(a)?"使用项目基础事实说明编制边界和工程概况。":"使用已确认项目事实形成正式施工组织内容。"}async function q(a){let b=Date.now(),c=a.template.chapters.map(a=>{let b=(a.sections?.length?a.sections:[a.title]).map(a=>(0,g.EN)(a)).filter(a=>a.trim().length>0&&!(0,f.ob)(a));return{chapter:a,sectionTitles:b.length>0?b:[a.title],requiredFacts:[...new Set([...a.requiredFacts||[],a.title])],evidenceQueries:[...new Set([a.title,...a.queries||[],...a.requiredFacts||[]])]}}),e=[...new Set([...c.map(a=>a.chapter.title),...c.flatMap(a=>a.sectionTitles)])],i="0"!==process.env.DOCUMENT_QUERY_EXPANSION_SEMANTIC?await n(e,a.embedDocuments):new Map,j=c.map(({chapter:a,sectionTitles:b,requiredFacts:c,evidenceQueries:d})=>{let e=i.get(a.title)||[];return{chapterId:a.id,title:a.title,purpose:a.purpose||p(a.title),requiredFacts:c,requiredGraphNodes:[a.title],evidenceQueries:d,qualityRules:["项目专属事实必须来自锁定资料范围,不得混入其他项目名称","法规规范等公共知识不受锁定范围限制","不得出现后台话术和兜底措辞","章节必须覆盖规划小节"],forbiddenPhrases:h,sections:b.map(b=>({title:b,objective:p(b),requiredFacts:[...new Set([b,...a.requiredFacts||[]])],requiredGraphNodes:[b],evidenceQueries:function(a,b,c,d){let e=o(a.title),f=o(b);return[...new Set([a.title,b,...c,...d,...e.filter(a=>!c.includes(a)),...f.filter(a=>!d.includes(a)),...a.queries||[],...a.requiredFacts||[]].filter(Boolean))]}(a,b,e,i.get(b)||[]),forbiddenPhrases:h,minChars:/项目特点.*重点.*难点|重点.*难点.*分析/u.test(b)?1800:/项目主要施工内容|主要分部分项工程施工方案|主要施工方法/u.test(b)?2200:/原材料进场复试|见证取样|危大工程专项施工方案审批流程/u.test(b)?800:/施工部署|施工流水|主要施工机械|劳动力|材料进场|资源动态|质量控制点|危大工程|安全隐患|临时用水|临时用电/u.test(b)?760:/概况|说明|依据/u.test(b)?260:420}))}});return{plan:{planId:`plan-${(0,d.c6)({templateId:a.template.id,scope:a.context.materialScope.scopeHash,chapters:j.map(a=>a.title)}).slice(0,10)}`,title:a.title||a.template.name,chapters:j,requiredGlobalFacts:["项目名称","工期","质量标准","招标范围"],forbiddenPhrases:h,qualityRules:["资料范围先锁定","基础图谱必跑","章节任务先于正文","Reviewer 通过后才能导出"]},node:{id:"document-planner",type:"document_planner",status:"completed",startedAt:b,completedAt:Date.now(),outputSummary:`${j.length} 章、${j.reduce((a,b)=>a+b.sections.length,0)} 条细目任务`,metrics:{chapters:j.length}}}}function r(a){let b=Date.now(),c=a.plan.chapters.find(b=>b.chapterId===a.chapter.id)||a.plan.chapters.find(b=>b.title===a.chapter.title);if(!c)throw Error(`缺少章节计划:${a.chapter.title}`);let e=a.context.facts.filter(a=>c.evidenceQueries.some(b=>k(a,b))||c.requiredFacts.some(b=>k(a,b))),f=c.sections.map(b=>{let e=1===c.sections.length&&b.title===a.chapter.title||/人[、,,]材[、,,]机/u.test(a.chapter.title)&&/^(?:确保\s*)?[人材机](?:员|力|料|械|工)?\s*的保障体系与措施$/u.test(b.title),f=a.context.facts.filter(a=>b.evidenceQueries.some(b=>k(a,b))||b.requiredFacts.some(b=>k(a,b))).slice(0,24),g=a.evidence.filter(a=>b.evidenceQueries.some(b=>(function(a,b){let c=i(`${a.sectionTitle||""} ${a.content||""} ${a.filePath||""}`);return b.split(/[\s、,,;;::()()【】[-]+/u).filter(a=>a.length>=2).some(a=>c.includes(i(a)))})(a,b))).slice(0,24),h=b.requiredGraphNodes.flatMap(b=>l(a.context.baseProjectGraph,b)).slice(0,12);e&&(0===g.length&&(g=a.evidence.slice(0,24)),0===h.length&&(h=l(a.context.baseProjectGraph,a.chapter.title).slice(0,12)));let j=[];return/法律法规|法规|规章|规范标准|标准规范|行业标准|现行规范|编制依据/u.test(b.title)||0!==g.length||0!==f.length||0!==h.length||j.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"system",message:`${b.title} 缺少事实、图谱或证据支撑`,suggestion:"应先定向检索和抽取事实,不能生成占位正文。"}),{...b,factIds:f.map(a=>(0,d.c6)({key:a.key,value:(0,d.lG)(a.value),sourceFile:a.sourceFile}).slice(0,12)),evidenceIds:g.map(a=>(0,d.c6)({filePath:a.filePath,content:a.content.slice(0,160),score:a.score}).slice(0,12)),graphNodeIds:h.map(a=>(0,d.c6)(a).slice(0,12)),ready:0===j.length,issues:j}}),g=f.flatMap(a=>a.issues),h={taskId:`chapter-task-${(0,d.c6)({plan:a.plan.planId,chapter:a.chapter.id,evidence:a.evidence.map(a=>(0,d.c6)({filePath:a.filePath,content:a.content.slice(0,120),score:a.score}))}).slice(0,10)}`,chapterId:a.chapter.id,title:a.chapter.title,facts:e.slice(0,48),evidence:a.evidence.slice(0,48),graphContext:l(a.context.baseProjectGraph,a.chapter.title).slice(0,20).join("\n"),sections:f,ready:0===g.length,issues:g};return{task:h,node:{id:`chapter-task-${a.chapter.id}`,type:"chapter_task_planner",status:h.ready?"completed":"failed",startedAt:b,completedAt:Date.now(),outputSummary:`${h.sections.filter(a=>a.ready).length}/${h.sections.length} 条细目任务就绪`,metrics:{facts:h.facts.length,evidence:h.evidence.length,issues:g.length},issues:g}}}function s(a){let b=a.facts.slice(0,18).map(a=>`- ${a.key}:${j(a)}${a.sourceFile?`(来源:${a.sourceFile})`:""}`).join("\n"),c=a.sections.map((a,b)=>`${b+1}. 必须输出三级标题:### ${a.title}
|
|
4
4
|
写作目标:${a.objective}
|
|
@@ -10,14 +10,14 @@ ${c}`,"写作要求:必须严格按“小节任务”逐项输出,每个任
|
|
|
10
10
|
${c}`}).join("\n");return["【Agent 章节任务】(主题块成稿模式)",`任务ID:${a.taskId}`,`章节:${a.title}`,a.graphContext?`图谱上下文:
|
|
11
11
|
${a.graphContext}`:"",c?`事实卡:
|
|
12
12
|
${c}`:"",`主题块与 H4 要点(必须严格按此两层结构成稿):
|
|
13
|
-
${d}`,"写作要求:必须严格按“主题块→H4 要点”两层结构输出,三级标题与 H4 要点标题必须与给定标题完全一致,不得改名、合并或遗漏 H4 要点;每个 H4 要点必须覆盖其标注的全部评分细目内容,但不得为这些评分细目单独开设小节标题;项目专属事实只使用事实卡、图谱上下文和绑定证据,法律法规、标准规范等公共知识可直接引用;不得输出后台话术、兜底措辞、待确认、不适用;缺少项目事实的小节不得编造。"].filter(Boolean).join("\n\n")}},44505:(a,b,c)=>{c.d(b,{$$:()=>ao,$h:()=>a3,EN:()=>a4,Ep:()=>a1,Et:()=>ai,Fr:()=>av,GG:()=>aZ,H:()=>an,Ih:()=>X,K2:()=>a5,LA:()=>ay,LF:()=>a8,N$:()=>aq,P3:()=>B,Pt:()=>a_,Rv:()=>aS,U$:()=>S,Vc:()=>aQ,Xc:()=>Y,YN:()=>W,a8:()=>m,bq:()=>aw,cJ:()=>N,cT:()=>at,cf:()=>k,cl:()=>aP,dF:()=>U,eS:()=>i,ek:()=>az,fE:()=>a2,fQ:()=>aC,hI:()=>a$,hu:()=>aR,l4:()=>R,lR:()=>aN,mC:()=>ae,qj:()=>af,r8:()=>C,rA:()=>x,s3:()=>I,sn:()=>K,t1:()=>Q,u2:()=>o,ub:()=>aM,vH:()=>G,y2:()=>P,yR:()=>a9,z4:()=>ax,zP:()=>aW});var d=c(78217),e=c(22157),f=c(37047),g=c(41991),h=c(71678);let i=/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,j=/进度计划|里程碑|节点安排|验收时间|完成日期|竣工日期|移交日期|合同签订/u;function k(a,b){let c=[],d=function(a){let b=new Set;for(let c of[...a.project,...a.schedule,...a.quality,...a.resources,...a.preciseFacts].map(a=>`${a.key||""}${a.fieldName||""}${(0,e.lG)(a.value)}`))for(let a of c.matchAll(i))b.add(`${a[1]}年${a[2]}月${a[3]}日`);return b}(b),f=[...b.schedule,...b.project].map(a=>`${a.key||""}${(0,e.lG)(a.value)}`).join(" "),g=i.test(f);for(let b of(i.lastIndex=0,a.matchAll(i))){let e=`${b[1]}年${b[2]}月${b[3]}日`;if(d.has(e))continue;let f=Math.max(0,(b.index||0)-40),h=a.slice(f,(b.index||0)+e.length+40);g&&j.test(h)||c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文编造开工日期“${e}”:绑定资料未提供该具体日历日期(招标文件以开工令时间为准)`,suggestion:`删除自行设定的具体日期,统一改写为“以开工令时间为准”;如为进度计划节点日期,必须标注为计划推算节点并保持与总工期一致。`})}return c.slice(0,3)}let l=/(单体建筑面积|总建筑面积|建筑面积)[^。;;\n]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/gu;function m(a,b){let c=[],d=function(a){let b=[];for(let c of[...a.project,...a.preciseFacts].map(a=>`${a.fieldName||a.key||""}:${(0,e.lG)(a.value)}`)){let a=/(总占地面积|占地面积|单体建筑面积|总建筑面积|建筑面积|地上建筑面积|地下建筑面积|总用地面积)/u.exec(c)?.[1],d=/([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/u.exec(c);if(!a||!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));Number.isFinite(e)&&e>0&&b.push({label:a,value:e})}return b}(b),f=new Set(d.filter(a=>/占地面积/u.test(a.label)).map(a=>a.value)),g=new Set(d.filter(a=>/建筑面积/u.test(a.label)&&!/地上|地下/u.test(a.label)).map(a=>a.value));if(0===f.size||0===g.size)return c;for(let b of a.matchAll(l)){let a=Number(b[2].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||!f.has(a)||g.has(a))continue;let d=b[1],e=[...g].join("、");c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`字段-数值错配:“${d} ${b[2]}㎡”将总占地面积误作${d}(绑定资料${d}数值为 ${e}㎡)`,suggestion:`总占地面积与建筑面积是两个独立字段,必须严格区分:将“${d} ${b[2]}㎡”改为资料数值“${d} ${e}㎡”,总占地面积保持独立表述。`})}return c.slice(0,3)}let n=/(地上[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,40}?地下[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,60}?(?:单体建筑面积|总建筑面积)[^。;;]{0,20}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米))/gu;function o(a){let b=[];for(let c of a.matchAll(n)){let a=Number(c[2].replace(/[,,]/gu,"")),d=Number(c[3].replace(/[,,]/gu,"")),e=Number(c[4].replace(/[,,]/gu,""));if(![a,d,e].every(Number.isFinite))continue;let f=a+d,g=Math.max(1,.001*e);Math.abs(f-e)>g&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`面积算术矛盾:地上 ${a}㎡ + 地下 ${d}㎡ = ${f}㎡,与同句“单体建筑面积 ${e}㎡”不符(差 ${Math.abs(f-e).toFixed(2)}㎡)`,suggestion:`地上与地下面积之和必须等于单体建筑面积:按绑定资料统一三者数值,删除错误数值表述。`})}return b.slice(0,3)}let p=/(?:高峰期|高峰|峰值)[^。;;\n]{0,20}?(?:约)?\s*([\d,]+)\s*人/g,q=/(?:劳动力|作业人员|施工人员)[^。;;\n]{0,16}?(?:约)?\s*([\d,]+)\s*人/g,r=["基坑与基础","二次结构与砌体","施工准备","地下结构","主体结构","装饰装修","机电安装","室外工程","收尾调试","临时设施","土方","基坑","基础"],s=/项目经理|技术负责人|项目班子|管理人员|管理层|施工员|质量员|质检员|安全员|材料员|资料员|测量员|试验员|造价员|预算员/u,t=/钢筋工|混凝土工|架子工|砌筑工|抹灰工|防水工|油漆工|水暖工|管道工|电焊工|起重工|机械工|司索工|信号工|塔吊司机|测量工|试验工|木工|瓦工|焊工|电工|普工/u;function u(a,b,c,d){let e=Math.max(c,b-30),f=a.slice(e,b),g=Math.max(f.lastIndexOf(","),f.lastIndexOf("、"),f.lastIndexOf(","),f.lastIndexOf(";"),f.lastIndexOf(";"),f.lastIndexOf(":"),f.lastIndexOf(":"),f.lastIndexOf("。")),h=a.slice(g>=0?e+g+1:e,Math.min(d,b+12));if(s.test(h))return{group:"management"};let i=h.match(t);return i?.[0]?{group:"trade",trade:i[0]}:{group:"peak"}}function v(a,b){let c,d=a.slice(0,b),e=Math.max(d.lastIndexOf("。"),d.lastIndexOf(";"),d.lastIndexOf(";"),d.lastIndexOf("\n")),f=a.slice(Math.max(0,e+1),b),g=-1;for(let a of r){let b=f.lastIndexOf(a);b>g&&(g=b,c=a)}return c}function w(a){let b=[],c=a.split(/\r?\n/u),d=/^\|.+\|$/u,e=/阶段|时期|工期|工序|进度/u,f=/人数|劳动力|作业人员|施工人员|投入人数/u,g=/^:?-{3,}:?$/u,h=a=>a.replace(/[*_`~]/gu,"").trim();for(let a=0;a<c.length;a+=1){let i,j,k;if(!d.test(c[a].trim()))continue;let l=[];for(;a<c.length&&d.test(c[a].trim());)l.push(c[a].trim()),a+=1;if(a-=1,l.length<3)continue;let m=a=>a.split("|").map(a=>a.trim()).slice(1,-1),n=l.findIndex((a,b)=>b>0&&m(a).every(a=>g.test(a)));if(1===n&&l.length>=3)i=m(l[0]).map(h),j=l.slice(2);else{if(-1!==n||!(l.length>=2))continue;let a=m(l[0]).map(h);if(!(e.test(a.join("|"))&&f.test(a.join("|"))))continue;i=a,j=l.slice(1)}let o=i.findIndex(a=>e.test(a)),p=i.findIndex(a=>/高峰|峰值/u.test(a)&&f.test(a)),q=p>=0?p:i.findIndex(a=>f.test(a));if(q<0||o>=0&&o===q||/岗位/u.test(i.join("|"))&&/职责|持证|职称/u.test(i.join("|")))continue;let r=[],s=0;for(let a of j){let b=m(a),c=b[q]||"",d=/^([\d,]+)\s*人?$/u.exec(c);if(!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));if(Number.isFinite(e)&&!(e<=0)){if(b.some((a,b)=>b!==q&&/合计|总计|小计/u.test(a))){k=e;continue}r.push(e),s+=e}}if(0===r.length&&void 0===k)continue;let t=Math.max(...r.length>0?r:[k||0]);b.push({countCells:r,totalCell:k,detailSum:s,peak:t,hasPeakCol:p>=0})}return b}function x(a){let b=[],c=[];for(let b of[p,q])for(let d of a.matchAll(b)){let b=a.lastIndexOf("\n",d.index)+1,e=a.indexOf("\n",d.index);-1===e&&(e=a.length);let f=a.slice(b,e);if(/^\s*\|.*\|\s*$/u.test(f))continue;let g=Number(d[1].replace(/[,,]/gu,"")),h=d.index+d[0].indexOf(d[1]);if(Number.isFinite(g)&&g>0){let{group:f,trade:i}=u(a,h,b,e);c.push({value:g,text:d[0].trim().slice(0,40),stage:v(a,h),group:f,trade:i})}}let d=w(a),e=d.map(a=>a.peak),f=(a,c)=>b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:a,suggestion:c});for(let a=0;a<c.length;a+=1)for(let b=a+1;b<c.length;b+=1){let[d,e]=[c[a],c[b]];if(d.group!==e.group||"trade"===d.group&&d.trade!==e.trade||d.stage&&e.stage&&d.stage!==e.stage)continue;if(!d.stage!=!e.stage){let[a,b]=d.stage?[e,d]:[d,e];if(a.value>=.9*b.value)continue}let g=Math.abs(d.value-e.value)/Math.max(d.value,e.value);if(g>.3){f(`劳动力数据矛盾:正文“${d.text}”(${d.value} 人)与“${e.text}”(${e.value} 人)互斥(相差 ${Math.round(100*g)}%)`,"劳动力峰值数据必须全文唯一:以分阶段投入明细表为准统一正文各处峰值表述,删除矛盾数字。"),a=c.length;break}}let g=d.filter(a=>a.hasPeakCol).map(a=>a.peak);if(g.length>=2){let a=Math.max(...g),b=Math.min(...g),c=Math.abs(a-b)/a;c>.3&&f(`劳动力数据矛盾:分阶段投入明细表峰值 ${b} 人与另一劳动力表峰值 ${a} 人互斥(相差 ${Math.round(100*c)}%)`,"劳动力峰值数据必须全文唯一:统一各劳动力表格的峰值数据,删除矛盾表格数字。")}let h=c.filter(a=>"peak"===a.group),i=h.reduce((a,b)=>Math.max(a,b.value),0),j=e.length>0?Math.max(...e):void 0;if(void 0!==j&&i>0&&i>1.3*j){let a=h.find(a=>a.value===i)?.text||"";f(`劳动力数据矛盾:正文表述“${a}”达 ${i} 人,而分阶段投入明细表最大峰值为 ${j} 人(超出 ${Math.round((i-j)/j*100)}%)`,"劳动力投入数据必须全文统一:以分阶段明细表为准复核正文峰值表述,删除与表格矛盾的“高峰期 X 人”措辞或调整表格数据。")}let k=[];for(let b of a.matchAll(/(?:高峰期|高峰|峰值)[^。;;\n]{0,16}?控制(?:在|为|到)?(?:约)?\s*([\d,]+)\s*人(?:以内|以下|之内)?/gu)){let a=Number(b[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&k.push(a)}if(k.length>0){let a=Math.max(...k),b=[...c,...void 0!==j?[{value:j}]:[]].filter(b=>b.value>a);if(b.length>0){let c=Math.max(...b.map(a=>a.value));f(`劳动力数据矛盾:正文“高峰期总人数控制在${a}人”的上限表述与峰值表述 ${c} 人不自洽(阶段高峰投入超出控制上限 ${Math.round((c-a)/a*100)}%)`,"总量控制上限与各阶段峰值必须自洽:阶段高峰人数不得超过全文宣称的高峰控制人数;以分阶段投入明细表为准修正控制目标或各阶段峰值表述。")}}for(let a of d){if(void 0===a.totalCell||a.countCells.length<2)continue;let b=Math.abs(a.totalCell-a.detailSum)/Math.max(a.totalCell,a.detailSum);b>.1&&f(`劳动力数据矛盾:劳动力表合计行 ${a.totalCell} 人与明细行之和 ${a.detailSum} 人不符(差 ${Math.round(100*b)}%)`,"劳动力表合计必须等于各明细行人数之和:统一合计行与明细行数据,删除矛盾数字。")}let l=[...a.matchAll(/([\d,]+)\s*(?:个)?工日/gu)].map(a=>Number(a[1].replace(/[,,]/gu,""))).filter(a=>Number.isFinite(a)&&a>0),m=[...a.matchAll(/(?:工期|总工期|计划工期)[^。;;\n]{0,16}?(\d{2,4})\s*(?:个)?(?:日历)?天/gu)].map(a=>Number(a[1])).filter(a=>Number.isFinite(a)&&a>=30&&a<=3e3);if(l.length>0&&i>0&&m.length>0){let a=Math.max(...l),b=Math.max(...m),c=i*b*1.3,d=i*b*.1;(a>c||a<d)&&f(`劳动力数据矛盾:总工日 ${a} 个与峰值 ${i} 人\xd7总工期 ${b} 天不自洽(合理区间约 ${Math.round(d)}~${Math.round(c)} 个)`,"总工日必须与劳动力峰值和总工期量级自洽:按各阶段人数\xd7阶段工期重算总工日,或修正峰值人数/总工期表述。")}return b.slice(0,5)}let y={slope:"基坑放坡开挖、土钉墙喷锚支护坡面",pile:"钻孔灌注桩、排桩、地下连续墙围护结构"},z=/钻孔灌注桩|高压旋喷桩|旋喷桩|搅拌桩|灌注桩|排桩|地下连续墙|咬合桩|支护桩/u,A=/土钉|放坡|喷锚|挂网|锚杆|护坡/u;function B(a){let b=a?.canonical?.byKey.foundation_support_form?.value,c=(0,e.lG)(b);if(!c)return;let d=A.test(c),f=z.test(c);return d&&!f?"slope":f&&!d?"pile":void 0}async function C(a,b){let c=[],d=a.split(/\n{2,}/u).filter(a=>a.trim().length>=30);if(0===d.length)return c;let e=await (0,f.Mv)(d,Object.values(y)),g=a=>e(a,y.slope)>=f.Eh,h=a=>z.test(a)&&e(a,y.pile)>=f.Eh,i=d.filter(a=>g(a)&&!h(a)),j=d.filter(a=>h(a)&&!g(a));return 0===i.length||0===j.length||c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基坑支护方案前后不一致:放坡喷锚类支护表述与灌注桩排桩类支护表述分别成段出现(放坡喷锚类 ${i.length} 段、灌注桩排桩类 ${j.length} 段),属跨模板拼接断裂${"slope"===b?";权威体系判定(图纸/地质槽位):土钉墙、锚杆等放坡喷锚类——删除灌注桩排桩类表述":"pile"===b?";权威体系判定(图纸/地质槽位):灌注桩排桩类——删除放坡喷锚类独立成段表述":""}`,suggestion:"支护形式必须全文统一为一种体系(以图纸/地质条件为准):确定采用放坡喷锚或灌注桩排桩后,删除另一种体系的表述,并补充基坑开挖深度数值支撑危大分级判定。"}),c}let D=[[/高压旋喷桩/gu,"土钉墙"],[/旋喷桩/gu,"土钉墙"],[/钻孔灌注桩/gu,"土钉墙"],[/咬合桩/gu,"土钉墙"],[/地下连续墙/gu,"土钉墙"],[/搅拌桩/gu,"土钉墙"],[/灌注桩/gu,"土钉墙"],[/支护桩/gu,"土钉墙"],[/排桩/gu,"土钉墙"],[/冠梁/gu,"坡顶"]],E=/高压旋喷桩机|旋喷桩机|搅拌桩机|三轴搅拌|成槽机|灌注桩机/u,F=/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*(?:危大工程(?:辨识)?(?:清单|识别)|危大(?:工程)?(?:及超危大)?(?:清单|识别|辨识))[^\n]*$/gmu;function G(a){let b=[],c=function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){if(!F.test(b[a].trim()))continue;let d=[];for(let c=a+1;c<Math.min(b.length,a+30);c+=1){let a=b[c].trim();if(/^#{1,6}\s/u.test(a))break;let e=/^(?:\d+[.、.)]|[-*•])?\s*([^。;;|]{2,40})$/u.exec(a)?.[1];e&&d.push(e.replace(/^[\s\d.、()()【】-]+/u,"").replace(/[((【][^))】]*[))】]/gu,"").replace(/施工$/u,"").replace(/作业$/u,"").replace(/\s+/gu,"").trim())}d.length>=2&&c.push({title:b[a].trim(),items:[...new Set(d)]})}return c}(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.items.filter(a=>!f.items.includes(a)),h=f.items.filter(a=>!e.items.includes(a));(0!==g.length||0!==h.length)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程辨识清单不一致:“${e.title.slice(0,30)}”(${e.items.length} 项)与“${f.title.slice(0,30)}”(${f.items.length} 项)存在差异:前者独有【${g.join("、")||"无"}】,后者独有【${h.join("、")||"无"}】`,suggestion:"全文危大工程辨识清单必须唯一且一致:合并两处清单,统一项名、数量与分级表述,避免评标专家以清单矛盾质疑辨识深度。"})}return b.slice(0,3)}let H=[{name:"施工工地周边100%围挡",query:"施工工地周边设置围挡封闭管理"},{name:"物料堆放100%覆盖",query:"物料堆放覆盖防尘"},{name:"出入车辆100%冲洗",query:"出入车辆冲洗设施清洗出场"},{name:"施工现场地面100%硬化",query:"施工现场场地地面硬化"},{name:"拆迁工地100%湿法作业",query:"拆迁工地湿法作业洒水降尘"},{name:"渣土车辆100%密闭运输",query:"渣土车辆密闭运输防止遗撒"}];function I(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let c of a.split(/(?<=[。!?!?;;])/u)){let a=c.trim();a.length>=8&&a.length<=120&&b.push(a)}}let c=[...new Set(b)];if(c.length<=400)return c;let d=Math.ceil(c.length/400);return c.filter((a,b)=>b%d==0).slice(0,400)}async function J(a,b){if(0===b.length||0===a.length)return new Map;let c=await (0,f.Mv)(a.map(a=>a.text),b);return new Map(a.map(a=>[a.key,b.some(b=>c(a.text,b)>=.6)]))}async function K(a){let b=[];if(!/扬尘|环保|文明施工|绿色施工/u.test(a))return b;let c=[...new Set(a.split(/\r?\n/u).flatMap(a=>{let b=a.trim();return!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!/围挡|覆盖|堆放|冲洗|硬化|湿法|密闭|渣土|扬尘|降尘/u.test(b)?[]:b.split(/(?<=[。!?!?;;])/u).map(a=>a.trim()).filter(a=>a.length>=8&&a.length<=120)}))],d=await J(H.map(a=>({key:a.name,text:a.query})),c),e=/(?:本项目|本工程|该工程|该项目|本标段|本施工项目)[^。;;\n]{0,30}(?:无拆迁|不涉及拆迁|无房屋拆除|无拆除)/u.test(a),f=H.filter(a=>!d.get(a.name)).filter(a=>!("拆迁工地100%湿法作业"===a.name&&e)).map(a=>a.name);return 0===f.length||b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`“扬尘治理六个百分百”未逐项落实:缺少【${f.join("、")}】(${H.length-f.length}/${H.length} 项命中)`,suggestion:"按检查规范第七部分要求逐条表述六项措施:工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输。"}),b}let L=/建设地点|工程地点|项目地点|实施地点|服务地点|交付地点|建设地址/u,M=["安徽","合肥","芜湖","蚌埠","淮南","马鞍山","淮北","铜陵","安庆","黄山","滁州","阜阳","宿州","六安","亳州","池州","宣城"];async function N(a,b){let c=[],d=b.project.some(a=>L.test(`${a.fieldName||""}${a.key||""}`)&&M.some(b=>(0,e.lG)(a.value).includes(b))),f=[];if(d&&(f.push({key:"award",text:"争创省市级优质工程奖、安全文明标准化工地"}),f.push({key:"greenQuant",text:"非传统水源利用率、废弃物回收率等绿色施工量化指标"})),f.push({key:"workInjury",text:"按规定为作业人员办理工伤保险"}),0===f.length)return c;let g=await J(f,I(a));return d&&(g.get("award")||c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"属地创优目标缺失:正文未提及省市级优质工程/文明标准化工地等创优目标(安徽省属地适配项)",suggestion:"在质量目标或创优规划小节补写与项目实际规模相符的创优目标表述;奖项名称必须以评分项要求提取结果(招标文件原文)为准逐字落位,禁止自行编造或替换为其他奖项名称。"}),/四节一环保|绿色施工|节水|节材|节能/u.test(a)&&!g.get("greenQuant")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"四节一环保量化指标缺失:非传统水源利用率/漏损率/土方平衡率/废弃物回收率等均未量化(附录八基准对照项)",suggestion:"在绿色施工章节补充量化指标(非传统水源利用率、管网漏损率、土方平衡率、可回收废弃物回收率等)与模板周转次数,数值参考行业通用水平与附录八基准,不得编造极端值。"})),/劳务|农民工|工资/u.test(a)&&!g.get("workInjury")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"工伤保险表述缺失:正文有劳务/农民工管理内容但未提及工伤保险缴纳(政策合规漏项)",suggestion:"在劳务管理/农民工工资保障小节补充“按规定为作业人员办理工伤保险”表述。"}),c}let O=RegExp(`(?:^|
|
|
13
|
+
${d}`,"写作要求:必须严格按“主题块→H4 要点”两层结构输出,三级标题与 H4 要点标题必须与给定标题完全一致,不得改名、合并或遗漏 H4 要点;每个 H4 要点必须覆盖其标注的全部评分细目内容,但不得为这些评分细目单独开设小节标题;项目专属事实只使用事实卡、图谱上下文和绑定证据,法律法规、标准规范等公共知识可直接引用;不得输出后台话术、兜底措辞、待确认、不适用;缺少项目事实的小节不得编造。"].filter(Boolean).join("\n\n")}},44505:(a,b,c)=>{c.d(b,{$$:()=>ap,$h:()=>a4,EN:()=>a5,Ep:()=>a2,Et:()=>aj,Fr:()=>aw,GG:()=>a$,H:()=>ao,Ih:()=>Y,K2:()=>a6,LA:()=>az,LF:()=>a9,N$:()=>ar,P3:()=>C,Pt:()=>a0,Rv:()=>aT,U$:()=>T,Vc:()=>aR,Xc:()=>Z,YN:()=>X,a8:()=>m,bq:()=>ax,cJ:()=>O,cT:()=>au,cf:()=>k,cl:()=>aQ,dF:()=>V,eS:()=>i,ek:()=>aA,fE:()=>a3,fQ:()=>aD,hI:()=>a_,hu:()=>aS,l4:()=>S,lR:()=>aO,mC:()=>af,qj:()=>ag,r8:()=>D,rA:()=>y,s3:()=>J,sn:()=>L,t1:()=>R,u2:()=>o,ub:()=>aN,vH:()=>H,y2:()=>Q,yR:()=>ba,z4:()=>ay,zP:()=>aX});var d=c(78217),e=c(22157),f=c(37047),g=c(41991),h=c(71678);let i=/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,j=/进度计划|里程碑|节点安排|验收时间|完成日期|竣工日期|移交日期|合同签订/u;function k(a,b){let c=[],d=function(a){let b=new Set;for(let c of[...a.project,...a.schedule,...a.quality,...a.resources,...a.preciseFacts].map(a=>`${a.key||""}${a.fieldName||""}${(0,e.lG)(a.value)}`))for(let a of c.matchAll(i))b.add(`${a[1]}年${a[2]}月${a[3]}日`);return b}(b),f=[...b.schedule,...b.project].map(a=>`${a.key||""}${(0,e.lG)(a.value)}`).join(" "),g=i.test(f);for(let b of(i.lastIndex=0,a.matchAll(i))){let e=`${b[1]}年${b[2]}月${b[3]}日`;if(d.has(e))continue;let f=Math.max(0,(b.index||0)-40),h=a.slice(f,(b.index||0)+e.length+40);g&&j.test(h)||c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文编造开工日期“${e}”:绑定资料未提供该具体日历日期(招标文件以开工令时间为准)`,suggestion:`删除自行设定的具体日期,统一改写为“以开工令时间为准”;如为进度计划节点日期,必须标注为计划推算节点并保持与总工期一致。`})}return c.slice(0,3)}let l=/(单体建筑面积|总建筑面积|建筑面积)[^。;;\n]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/gu;function m(a,b){let c=[],d=function(a){let b=[];for(let c of[...a.project,...a.preciseFacts].map(a=>`${a.fieldName||a.key||""}:${(0,e.lG)(a.value)}`)){let a=/(总占地面积|占地面积|单体建筑面积|总建筑面积|建筑面积|地上建筑面积|地下建筑面积|总用地面积)/u.exec(c)?.[1],d=/([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)/u.exec(c);if(!a||!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));Number.isFinite(e)&&e>0&&b.push({label:a,value:e})}return b}(b),f=new Set(d.filter(a=>/占地面积/u.test(a.label)).map(a=>a.value)),g=new Set(d.filter(a=>/建筑面积/u.test(a.label)&&!/地上|地下/u.test(a.label)).map(a=>a.value));if(0===f.size||0===g.size)return c;for(let b of a.matchAll(l)){let a=Number(b[2].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||!f.has(a)||g.has(a))continue;let d=b[1],e=[...g].join("、");c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`字段-数值错配:“${d} ${b[2]}㎡”将总占地面积误作${d}(绑定资料${d}数值为 ${e}㎡)`,suggestion:`总占地面积与建筑面积是两个独立字段,必须严格区分:将“${d} ${b[2]}㎡”改为资料数值“${d} ${e}㎡”,总占地面积保持独立表述。`})}return c.slice(0,3)}let n=/(地上[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,40}?地下[^。;;]{0,30}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米)[^。;;]{0,60}?(?:单体建筑面积|总建筑面积)[^。;;]{0,20}?([\d,]+(?:\.\d+)?)\s*(?:㎡|m2|m²|平方米))/gu;function o(a){let b=[];for(let c of a.matchAll(n)){let a=Number(c[2].replace(/[,,]/gu,"")),d=Number(c[3].replace(/[,,]/gu,"")),e=Number(c[4].replace(/[,,]/gu,""));if(![a,d,e].every(Number.isFinite))continue;let f=a+d,g=Math.max(1,.001*e);Math.abs(f-e)>g&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`面积算术矛盾:地上 ${a}㎡ + 地下 ${d}㎡ = ${f}㎡,与同句“单体建筑面积 ${e}㎡”不符(差 ${Math.abs(f-e).toFixed(2)}㎡)`,suggestion:`地上与地下面积之和必须等于单体建筑面积:按绑定资料统一三者数值,删除错误数值表述。`})}return b.slice(0,3)}let p=/(?:高峰期|高峰|峰值)[^。;;\n]{0,20}?(?:约)?\s*([\d,]+)\s*人/g,q=/(?:阶段|期间)[^。;;\n]{0,12}?(?:约)?\s*([\d,]+)\s*人/g,r=/(?:劳动力|作业人员|施工人员)[^。;;\n]{0,16}?(?:约)?\s*([\d,]+)\s*人/g,s=["基坑与基础","二次结构与砌体","施工准备","地下结构","主体结构","装饰装修","机电安装","室外工程","收尾调试","临时设施","土方","基坑","基础"],t=/项目经理|技术负责人|项目班子|管理人员|管理层|施工员|质量员|质检员|安全员|材料员|资料员|测量员|试验员|造价员|预算员/u,u=/铺装工|钢筋工|混凝土工|架子工|砌筑工|抹灰工|防水工|油漆工|水暖工|水电工|管道工|电焊工|起重工|机械工|司索工|信号工|塔吊司机|测量工|试验工|绿化工|管网工|装修工|装饰工|安装工|养护工|保温工|幕墙工|防腐工|操作工|市政工|模板工|木工|瓦工|焊工|电工|普工/u;function v(a,b,c){let d=Math.max(c,b-30),e=a.slice(d,b),f=Math.max(e.lastIndexOf(","),e.lastIndexOf("、"),e.lastIndexOf(","),e.lastIndexOf(";"),e.lastIndexOf(";"),e.lastIndexOf(":"),e.lastIndexOf(":"),e.lastIndexOf("。")),g=a.slice(f>=0?d+f+1:d,b);if(t.test(g))return{group:"management"};let h=g.match(u);return h?.[0]?{group:"trade",trade:h[0]}:{group:"peak"}}function w(a,b){let c,d=a.slice(0,b),e=Math.max(d.lastIndexOf("。"),d.lastIndexOf(";"),d.lastIndexOf(";"),d.lastIndexOf("\n")),f=a.slice(Math.max(0,e+1),b),g=-1;for(let a of s){let b=f.lastIndexOf(a);b>g&&(g=b,c=a)}return c}function x(a){let b=[],c=a.split(/\r?\n/u),d=/^\|.+\|$/u,e=/阶段|时期|工期|工序|进度/u,f=/人数|劳动力|作业人员|施工人员|投入人数/u,g=/^:?-{3,}:?$/u,h=a=>a.replace(/[*_`~]/gu,"").trim();for(let a=0;a<c.length;a+=1){let i,j,k;if(!d.test(c[a].trim()))continue;let l=[];for(;a<c.length&&d.test(c[a].trim());)l.push(c[a].trim()),a+=1;if(a-=1,l.length<3)continue;let m=a=>a.split("|").map(a=>a.trim()).slice(1,-1),n=l.findIndex((a,b)=>b>0&&m(a).every(a=>g.test(a)));if(1===n&&l.length>=3)i=m(l[0]).map(h),j=l.slice(2);else{if(-1!==n||!(l.length>=2))continue;let a=m(l[0]).map(h);if(!(e.test(a.join("|"))&&f.test(a.join("|"))))continue;i=a,j=l.slice(1)}let o=i.findIndex(a=>e.test(a)),p=i.findIndex(a=>/高峰|峰值/u.test(a)&&f.test(a)),q=p>=0?p:i.findIndex(a=>f.test(a));if(q<0||o>=0&&o===q||/岗位/u.test(i.join("|"))&&/职责|持证|职称/u.test(i.join("|")))continue;let r=[],s=0;for(let a of j){let b=m(a),c=b[q]||"",d=/^([\d,]+)\s*人?$/u.exec(c);if(!d)continue;let e=Number(d[1].replace(/[,,]/gu,""));if(Number.isFinite(e)&&!(e<=0)){if(b.some((a,b)=>b!==q&&/合计|总计|小计/u.test(a))){k=e;continue}r.push(e),s+=e}}if(0===r.length&&void 0===k)continue;let t=Math.max(...r.length>0?r:[k||0]);b.push({countCells:r,totalCell:k,detailSum:s,peak:t,hasPeakCol:p>=0})}return b}function y(a){let b=[],c=[],d=new Set;for(let b of[p,r,q])for(let e of a.matchAll(b)){let b=a.lastIndexOf("\n",e.index)+1,f=a.indexOf("\n",e.index);-1===f&&(f=a.length);let g=a.slice(b,f);if(/^\s*\|.*\|\s*$/u.test(g))continue;let h=Number(e[1].replace(/[,,]/gu,"")),i=e.index+e[0].indexOf(e[1]),j=(function(a){let b=[];for(let c of a.matchAll(/(?:→|—|–|~|~)/gu)){let d=c.index??0,e=a.slice(0,d),f=/(?:劳动力|作业人员|施工人员|高峰期|高峰|峰值|阶段)[^,。;;]*$/u.exec(e);if(!f)continue;let g=f.index;if(b.some(a=>a.start===g))continue;let h=/[。;;]/u.exec(a.slice(d)),i=[...(a.slice(g,h?d+h.index:void 0).split(/[,,]/u)[0]||"").matchAll(/([\d,]+)\s*人/g)],j=i.map(a=>Number(a[1].replace(/[,,]/gu,""))).filter(a=>Number.isFinite(a)&&a>0);if(j.length<2)continue;let k=i[i.length-1];b.push({peak:Math.max(...j),start:g,end:g+(k.index??0)+k[0].length})}return b})(g).find(a=>i-b>=a.start&&i-b<a.end);if(void 0!==j){let e=`${b}:${j.start}:${j.end}`;d.has(e)||(d.add(e),c.push({value:j.peak,text:g.trim().slice(0,40),stage:w(a,i),group:"peak"}));continue}if(Number.isFinite(h)&&h>0){let{group:d,trade:f}=v(a,i,b);c.push({value:h,text:e[0].trim().slice(0,40),stage:w(a,i),group:d,trade:f})}}let e=x(a),f=e.map(a=>a.peak),g=(a,c)=>b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:a,suggestion:c});for(let a=0;a<c.length;a+=1)for(let b=a+1;b<c.length;b+=1){let[d,e]=[c[a],c[b]];if(d.group!==e.group||"trade"===d.group&&d.trade!==e.trade||d.stage&&e.stage&&d.stage!==e.stage)continue;if(!d.stage!=!e.stage){let[a,b]=d.stage?[e,d]:[d,e];if(a.value>=.9*b.value)continue}let f=Math.abs(d.value-e.value)/Math.max(d.value,e.value);if(f>.3){g(`劳动力数据矛盾:正文“${d.text}”(${d.value} 人)与“${e.text}”(${e.value} 人)互斥(相差 ${Math.round(100*f)}%)`,"劳动力峰值数据必须全文唯一:以分阶段投入明细表为准统一正文各处峰值表述,删除矛盾数字。"),a=c.length;break}}let h=e.filter(a=>a.hasPeakCol).map(a=>a.peak);if(h.length>=2){let a=Math.max(...h),b=Math.min(...h),c=Math.abs(a-b)/a;c>.3&&g(`劳动力数据矛盾:分阶段投入明细表峰值 ${b} 人与另一劳动力表峰值 ${a} 人互斥(相差 ${Math.round(100*c)}%)`,"劳动力峰值数据必须全文唯一:统一各劳动力表格的峰值数据,删除矛盾表格数字。")}let i=c.filter(a=>"peak"===a.group),j=i.reduce((a,b)=>Math.max(a,b.value),0),k=f.length>0?Math.max(...f):void 0;if(void 0!==k&&j>0&&j>1.3*k){let a=i.find(a=>a.value===j)?.text||"";g(`劳动力数据矛盾:正文表述“${a}”达 ${j} 人,而分阶段投入明细表最大峰值为 ${k} 人(超出 ${Math.round((j-k)/k*100)}%)`,"劳动力投入数据必须全文统一:以分阶段明细表为准复核正文峰值表述,删除与表格矛盾的“高峰期 X 人”措辞或调整表格数据。")}let l=[];for(let b of a.matchAll(/(?:高峰期|高峰|峰值)[^。;;\n]{0,16}?控制(?:在|为|到)?(?:约)?\s*([\d,]+)\s*人(?:以内|以下|之内)?/gu)){let a=Number(b[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&l.push(a)}if(l.length>0){let a=Math.max(...l),b=[...c,...void 0!==k?[{value:k}]:[]].filter(b=>b.value>a);if(b.length>0){let c=Math.max(...b.map(a=>a.value));g(`劳动力数据矛盾:正文“高峰期总人数控制在${a}人”的上限表述与峰值表述 ${c} 人不自洽(阶段高峰投入超出控制上限 ${Math.round((c-a)/a*100)}%)`,"总量控制上限与各阶段峰值必须自洽:阶段高峰人数不得超过全文宣称的高峰控制人数;以分阶段投入明细表为准修正控制目标或各阶段峰值表述。")}}for(let b of a.split(/\r?\n/u)){let a=b.trim();if(!(!a||/^\s*\|/u.test(a)||/^#{1,6}\s/u.test(a)))for(let b of a.split(/(?<=[。;;])/u)){let a=/=\s*([\d,]+)\s*人/u.exec(b);if(!a)continue;let c=b.slice(0,a.index);if(!/[++]/u.test(c))continue;let d=c.split(/[++]/u),e=0,f=!1;for(let a of d){let b=a.match(/(\d+)\s*[×xX]\s*(\d+)/u)||a.match(/(\d+)\s*人?\s*$/u);b&&(f=!0,e+=void 0!==b[2]?Number(b[1])*Number(b[2]):Number(b[1]))}if(!f)continue;let h=Number(a[1].replace(/[,,]/gu,""));if(!Number.isFinite(h)||h<=0||e<=0)continue;let i=b.trim().slice(0,60);Math.abs(e-h)/Math.max(e,h)>.05&&g(`劳动力数据矛盾:正文班组加总算式“${i}”左侧求和 ${e} 人 ≠ 结果 ${h} 人`,"班组人数加总必须与合计一致:核对各班组人数或修正合计数字。");let j=/(?:投入|配置|安排|组织|总人数)[^。;;==++]{0,16}?([\d,]+)\s*人/u.exec(b);if(j){let a=Number(j[1].replace(/[,,]/gu,"")),c=b.slice(0,j.index+j[0].length),d=/[约近余]|左右/u.test(c.slice(-16));Number.isFinite(a)&&a>0&&!d&&Math.abs(a-h)/Math.max(a,h)>.15&&g(`劳动力数据矛盾:正文宣称总人数 ${a} 人与班组加总算式结果 ${h} 人自相矛盾(相差 ${Math.round(Math.abs(a-h)/Math.max(a,h)*100)}%)`,"宣称总人数必须与班组加总一致:统一总人数与各班组人数,删除矛盾数字。")}}}for(let a of e){if(void 0===a.totalCell||a.countCells.length<2)continue;let b=Math.abs(a.totalCell-a.detailSum)/Math.max(a.totalCell,a.detailSum);b>.1&&g(`劳动力数据矛盾:劳动力表合计行 ${a.totalCell} 人与明细行之和 ${a.detailSum} 人不符(差 ${Math.round(100*b)}%)`,"劳动力表合计必须等于各明细行人数之和:统一合计行与明细行数据,删除矛盾数字。")}let m=[...a.matchAll(/([\d,]+)\s*(?:个)?工日/gu)].map(a=>Number(a[1].replace(/[,,]/gu,""))).filter(a=>Number.isFinite(a)&&a>0),n=[...a.matchAll(/(?:工期|总工期|计划工期)[^。;;\n]{0,16}?(\d{2,4})\s*(?:个)?(?:日历)?天/gu)].map(a=>Number(a[1])).filter(a=>Number.isFinite(a)&&a>=30&&a<=3e3);if(m.length>0&&j>0&&n.length>0){let a=Math.max(...m),b=Math.max(...n),c=j*b*1.3,d=j*b*.1;(a>c||a<d)&&g(`劳动力数据矛盾:总工日 ${a} 个与峰值 ${j} 人\xd7总工期 ${b} 天不自洽(合理区间约 ${Math.round(d)}~${Math.round(c)} 个)`,"总工日必须与劳动力峰值和总工期量级自洽:按各阶段人数\xd7阶段工期重算总工日,或修正峰值人数/总工期表述。")}return b.slice(0,5)}let z={slope:"基坑放坡开挖、土钉墙喷锚支护坡面",pile:"钻孔灌注桩、排桩、地下连续墙围护结构"},A=/钻孔灌注桩|高压旋喷桩|旋喷桩|搅拌桩|灌注桩|排桩|地下连续墙|咬合桩|支护桩/u,B=/土钉|放坡|喷锚|挂网|锚杆|护坡/u;function C(a){let b=a?.canonical?.byKey.foundation_support_form?.value,c=(0,e.lG)(b);if(!c)return;let d=B.test(c),f=A.test(c);return d&&!f?"slope":f&&!d?"pile":void 0}async function D(a,b){let c=[],d=a.split(/\n{2,}/u).filter(a=>a.trim().length>=30);if(0===d.length)return c;let e=await (0,f.Mv)(d,Object.values(z)),g=a=>e(a,z.slope)>=f.Eh,h=a=>A.test(a)&&e(a,z.pile)>=f.Eh,i=d.filter(a=>g(a)&&!h(a)),j=d.filter(a=>h(a)&&!g(a));return 0===i.length||0===j.length||c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基坑支护方案前后不一致:放坡喷锚类支护表述与灌注桩排桩类支护表述分别成段出现(放坡喷锚类 ${i.length} 段、灌注桩排桩类 ${j.length} 段),属跨模板拼接断裂${"slope"===b?";权威体系判定(图纸/地质槽位):土钉墙、锚杆等放坡喷锚类——删除灌注桩排桩类表述":"pile"===b?";权威体系判定(图纸/地质槽位):灌注桩排桩类——删除放坡喷锚类独立成段表述":""}`,suggestion:"支护形式必须全文统一为一种体系(以图纸/地质条件为准):确定采用放坡喷锚或灌注桩排桩后,删除另一种体系的表述,并补充基坑开挖深度数值支撑危大分级判定。"}),c}let E=[[/高压旋喷桩/gu,"土钉墙"],[/旋喷桩/gu,"土钉墙"],[/钻孔灌注桩/gu,"土钉墙"],[/咬合桩/gu,"土钉墙"],[/地下连续墙/gu,"土钉墙"],[/搅拌桩/gu,"土钉墙"],[/灌注桩/gu,"土钉墙"],[/支护桩/gu,"土钉墙"],[/排桩/gu,"土钉墙"],[/冠梁/gu,"坡顶"]],F=/高压旋喷桩机|旋喷桩机|搅拌桩机|三轴搅拌|成槽机|灌注桩机/u,G=/^#{2,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*(?:危大工程(?:辨识)?(?:清单|识别)|危大(?:工程)?(?:及超危大)?(?:清单|识别|辨识))[^\n]*$/gmu;function H(a){let b=[],c=function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){if(!G.test(b[a].trim()))continue;let d=[];for(let c=a+1;c<Math.min(b.length,a+30);c+=1){let a=b[c].trim();if(/^#{1,6}\s/u.test(a))break;let e=/^(?:\d+[.、.)]|[-*•])?\s*([^。;;|]{2,40})$/u.exec(a)?.[1];e&&d.push(e.replace(/^[\s\d.、()()【】-]+/u,"").replace(/[((【][^))】]*[))】]/gu,"").replace(/施工$/u,"").replace(/作业$/u,"").replace(/\s+/gu,"").trim())}d.length>=2&&c.push({title:b[a].trim(),items:[...new Set(d)]})}return c}(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.items.filter(a=>!f.items.includes(a)),h=f.items.filter(a=>!e.items.includes(a));(0!==g.length||0!==h.length)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程辨识清单不一致:“${e.title.slice(0,30)}”(${e.items.length} 项)与“${f.title.slice(0,30)}”(${f.items.length} 项)存在差异:前者独有【${g.join("、")||"无"}】,后者独有【${h.join("、")||"无"}】`,suggestion:"全文危大工程辨识清单必须唯一且一致:合并两处清单,统一项名、数量与分级表述,避免评标专家以清单矛盾质疑辨识深度。"})}return b.slice(0,3)}let I=[{name:"施工工地周边100%围挡",query:"施工工地周边设置围挡封闭管理"},{name:"物料堆放100%覆盖",query:"物料堆放覆盖防尘"},{name:"出入车辆100%冲洗",query:"出入车辆冲洗设施清洗出场"},{name:"施工现场地面100%硬化",query:"施工现场场地地面硬化"},{name:"拆迁工地100%湿法作业",query:"拆迁工地湿法作业洒水降尘"},{name:"渣土车辆100%密闭运输",query:"渣土车辆密闭运输防止遗撒"}];function J(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let c of a.split(/(?<=[。!?!?;;])/u)){let a=c.trim();a.length>=8&&a.length<=120&&b.push(a)}}let c=[...new Set(b)];if(c.length<=400)return c;let d=Math.ceil(c.length/400);return c.filter((a,b)=>b%d==0).slice(0,400)}async function K(a,b){if(0===b.length||0===a.length)return new Map;let c=await (0,f.Mv)(a.map(a=>a.text),b);return new Map(a.map(a=>[a.key,b.some(b=>c(a.text,b)>=.6)]))}async function L(a){let b=[];if(!/扬尘|环保|文明施工|绿色施工/u.test(a))return b;let c=[...new Set(a.split(/\r?\n/u).flatMap(a=>{let b=a.trim();return!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!/围挡|覆盖|堆放|冲洗|硬化|湿法|密闭|渣土|扬尘|降尘/u.test(b)?[]:b.split(/(?<=[。!?!?;;])/u).map(a=>a.trim()).filter(a=>a.length>=8&&a.length<=120)}))],d=await K(I.map(a=>({key:a.name,text:a.query})),c),e=/(?:本项目|本工程|该工程|该项目|本标段|本施工项目)[^。;;\n]{0,30}(?:无拆迁|不涉及拆迁|无房屋拆除|无拆除)/u.test(a),f=I.filter(a=>!d.get(a.name)).filter(a=>!("拆迁工地100%湿法作业"===a.name&&e)).map(a=>a.name);return 0===f.length||b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`“扬尘治理六个百分百”未逐项落实:缺少【${f.join("、")}】(${I.length-f.length}/${I.length} 项命中)`,suggestion:"按检查规范第七部分要求逐条表述六项措施:工地周边100%围挡、物料堆放100%覆盖、出入车辆100%冲洗、施工现场地面100%硬化、拆迁工地100%湿法作业、渣土车辆100%密闭运输。"}),b}let M=/建设地点|工程地点|项目地点|实施地点|服务地点|交付地点|建设地址/u,N=["安徽","合肥","芜湖","蚌埠","淮南","马鞍山","淮北","铜陵","安庆","黄山","滁州","阜阳","宿州","六安","亳州","池州","宣城"];async function O(a,b){let c=[],d=b.project.some(a=>M.test(`${a.fieldName||""}${a.key||""}`)&&N.some(b=>(0,e.lG)(a.value).includes(b))),f=[];if(d&&(f.push({key:"award",text:"争创省市级优质工程奖、安全文明标准化工地"}),f.push({key:"greenQuant",text:"非传统水源利用率、废弃物回收率等绿色施工量化指标"})),f.push({key:"workInjury",text:"按规定为作业人员办理工伤保险"}),0===f.length)return c;let g=await K(f,J(a));return d&&(g.get("award")||c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"属地创优目标缺失:正文未提及省市级优质工程/文明标准化工地等创优目标(安徽省属地适配项)",suggestion:"在质量目标或创优规划小节补写与项目实际规模相符的创优目标表述;奖项名称必须以评分项要求提取结果(招标文件原文)为准逐字落位,禁止自行编造或替换为其他奖项名称。"}),/四节一环保|绿色施工|节水|节材|节能/u.test(a)&&!g.get("greenQuant")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"四节一环保量化指标缺失:非传统水源利用率/漏损率/土方平衡率/废弃物回收率等均未量化(附录八基准对照项)",suggestion:"在绿色施工章节补充量化指标(非传统水源利用率、管网漏损率、土方平衡率、可回收废弃物回收率等)与模板周转次数,数值参考行业通用水平与附录八基准,不得编造极端值。"})),/劳务|农民工|工资/u.test(a)&&!g.get("workInjury")&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:"工伤保险表述缺失:正文有劳务/农民工管理内容但未提及工伤保险缴纳(政策合规漏项)",suggestion:"在劳务管理/农民工工资保障小节补充“按规定为作业人员办理工伤保险”表述。"}),c}let P=RegExp(`(?:^|
|
|
14
14
|
)(?:#{1,6}\\s+[^
|
|
15
15
|
]*
|
|
16
16
|
+)?([^
|
|
17
17
|
|#][^。!?!?
|
|
18
|
-
]{18,60})[。!?!?]`,"gu");function P(a){let b=[],c=new Map;for(let b of a.matchAll(O)){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.slice(0,3)}function Q(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 R(a,b={}){let c=[],{overviewBody:d,sentences:e}=Q(a);if(0===e.length||!d||!b.semanticSimilarity)return c;let f=[];for(let a of e)if(b.semanticSimilarity(a,d)>=.6&&f.push(a.slice(0,36)),f.length>=3)break;return 0===f.length||c.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`项目概况段跨章复述不得出现:概况章外有 ${f.length} 处以“本项目为/本工程为”等总述开头整段复述概况内容:${f.map(a=>`“${a}…”`).join("、")}`,suggestion:"总述数据只在工程概况类小节集中交代一次:其他章节直接写本章内容,仅可引用所需的具体数字(如计划工期天数),不得复述完整概况段。"}),c}function S(a,b){let c,{overviewBody:d,sentences:e}=Q(a);if(0===e.length||!d)return a;let f=a.split(/\r?\n/u),g=[];for(let a=0;a<f.length;a+=1){let b=/^(#{2,4})\s+(.+)$/u.exec(f[a].trim());if(b){let d=b[1].length;/(?:工程概况|项目概况|基本信息)/u.test(b[2])?c={index:a,level:d}:c&&d<=c.level&&(g.push([c.index,a]),c=void 0)}}c&&g.push([c.index,f.length]);let h=!1,i=f.map((a,c)=>{if(g.some(([a,b])=>c>=a&&c<b)||/^#{1,6}\s/u.test(a.trim())||/^\s*\|/u.test(a.trim())||!/本项目为|本工程为|该项目为|该工程为/u.test(a))return a;let e=a.split(/(?<=[。!?!?])/u).filter(a=>{if(!/本项目为|本工程为|该项目为|该工程为/u.test(a))return!0;let c=a.split(/[。!?!?]/u)[0];return c.length<12||.6>b(c,d)});return e.join("")!==a&&(h=!0),e.join("")});return h?i.join("\n"):a}let T=["销项","复查","整改","闭环"];function U(a){let b=[],c=(0,d.V7)(a);if(c<3e3)return b;let e=[];for(let b of T){let d=a.split(b).length-1;e.push(d/c*1e3)}let f=Math.max(...e),g=T[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 V=["专项设计文件尚未完成,待后续补充","评分指标存在缺口尚未明确","依据承诺函后续跟踪完善"];async function W(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=await (0,f.Mv)(c,[...V]),e=[...new Set(c.filter(a=>V.some(b=>d(a,b)>=f.Eh)))];if(0===e.length)return b;for(let a of e)b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`自伤表述候选:“${a}”暴露投标短板,需按上下文判定后改写`,suggestion:"投标文件不得主动暴露“专项设计未完成/指标存在缺口”等短板:改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);如属现场条件合理风险描述(地质/管线尚不明确),保留但需配套勘查与应对措施。"});return b.slice(0,3)}let X=/([\u4e00-\u9fa5]{2})\1/gu;function Y(a){let b=[...new Set(a.match(X)||[])].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 Z=/暂列金额|暂估价|报价明细|综合单价|清单合价|预留金|投标报价/u,$=/(?:税率|增值税)[^。;;\n]{0,12}\d/u,_=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,aa=/材料价格|商务报价|投标总价|合同总价|工程总价/u,ab=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","投标报价与费率标准的商务条款"],ac=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息","商务数据不得写入施工组织设计正文的约束说明"];async function ad(a){return(0,g.A)({prototypes:[...ab],negativePrototypes:[...ac],embedDocuments:a})}async function ae(a,b){let c=[],d=await ad(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))&&(Z.test(b)||$.test(b)||aa.test(b)))for(let a of($.test(b)&&c.push("税率/增值税"),b.split(/(?<=[。;;])\s*/u))){let b=a.match(Z)||[],d=_.test(a),f=aa.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(Z)||[],f=b.match(aa)||[];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:"商务数据(暂列金额/暂估价/综合单价/税率等)不得写入施组正文:删除该句或改写为定性表述(如“按合同约定执行”),商务口径仅保留在项目信息表中。"}]}function af(a){return a.split(/\r?\n/u).map(a=>{let b=a.trim();return/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!Z.test(a)&&!$.test(a)?a:a.split(/(?<=[。;;])\s*/u).filter(a=>!(Z.test(a)||$.test(a))).join("")}).join("\n")}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=ag.find(b=>b.re.test(a))?.key;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||Math.max(...e)-Math.min(...e)<5)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.slice(0,4)}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:[/垫层[^。;;\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\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:"circularSaw",label:"圆盘锯数量",unit:"台",kind:"number",patterns:[/圆盘锯[^。;;\n|]{0,24}?(\d+)\s*台/gu]}],ak=/\d+(?:\.\d+)?\s*(?:mm|kVA|次|具|台|套|个)\s*[//]\s*\d+/u,al=/不再出现|不得出现|严禁出现|避免出现|不采用|未采用|予以删除|已删除|取消|纠正为|更正为/u;function am(a,b,c,d){let e=Math.max(d,b-16),f=a.slice(e,b),g=Math.max(f.lastIndexOf(","),f.lastIndexOf("、"),f.lastIndexOf(","),f.lastIndexOf(";"),f.lastIndexOf(";"),f.lastIndexOf("。")),h=[...a.slice(g>=0?e+g+1:e,b+c.length).replace(/[\u4e00-\u9fa5]{2,6}阶段/gu,"").matchAll(RegExp("女儿墙|外墙|内墙|隔墙|地梁|圈梁|构造柱|过梁|垫层|承台|筏板|底板|基础|主体|梁|柱|墙|楼板|屋面|地面|楼面|顶板|楼梯|阳台|雨篷|台阶|散水|坡道|找坡|找平|保护层|防水层|保温层|隔汽层|地坪|办公区|生活区|库房|加工区|堆放区","gu"))];return h[h.length-1]?.[0]??""}function an(a){let b=[];for(let c of aj){let d=new Map,e=new Map;for(let b of c.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(ak.test(b))continue;let f=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);if(-1===g&&(g=a.length),al.test(a.slice(f,g)))continue;let h=am(a,c.index||0,b,f),i=d.get(h)||new Set;i.add(c[1]),d.set(h,i);let j=e.get(h)||[];j.push(b),e.set(h,j)}let f=d.get("")||new Set,g=[...d.keys()].filter(a=>""!==a);if(f.size>0&&1===g.length){let a=d.get(g[0]||"");if(a){for(let b of f)a.add(b);let b=e.get(g[0]||"")||[];b.push(...e.get("")||[]),e.set(g[0]||"",b),d.delete(""),e.delete("")}}for(let[a,f]of d){if(f.size<2)continue;let d=e.get(a)||[];if("code"===c.kind)b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料参数口径矛盾:“${c.label}”${a?`在部位「${a}」`:"在未标注部位语境下"}出现 ${[...f].map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(d)].slice(0,3).join("、")}`,suggestion:`同一材料同一部位只允许一个口径:以设计图纸/工程量清单为准统一“${c.label}”${a?`在部位「${a}」的取值`:""},删除矛盾表述;不同部位允许不同规格,不得全文归一为一种。`});else{let e=[...f].map(Number).filter(Number.isFinite);if(e.length<2)continue;let g=Math.max(...e);if(g-Math.min(...e)<=.2*g)continue;b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料/设备数量口径矛盾:“${c.label}”${a?`在部位「${a}」`:"在未标注部位语境下"}出现 ${e.map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(d)].slice(0,3).join("、")}`,suggestion:`同一设备/材料同一部位只允许一个口径:以应急物资清单/施工部署为准统一“${c.label}”${a?`在部位「${a}」的取值`:""},删除矛盾表述;总量与分区配置属不同口径,不得互相归一。`})}}}return b.slice(0,8)}function ao(a,b){let c=[];if(!b)return c;for(let e of Object.values(b)){var d;if(e.length<2)continue;let b=(d=e[0]?.spec||"",/^C\d{2,3}$/.test(d)?/C\d{2,3}/u:/^M\d/.test(d)?/M\d+(?:\.\d+)?/u:/^P\d{1,2}$/.test(d)?/P\d{1,2}/u:/^A\d+(?:\.\d+)?$/.test(d)?/A\d+(?:\.\d+)?/u:/^B\d+(?:\.\d+)?$/.test(d)?/B\d+(?:\.\d+)?/u:/^HRB/.test(d)||/^HPB/.test(d)?/HRB\d{3,4}|HPB\d{3}/u:/mm$/.test(d)?/\d+(?:\.\d+)?\s*mm/u:null);if(b)for(let d of e){let{location:f,spec:g}=d;if(!f||!g||f.length<2)continue;let h=new Set(e.filter(a=>a.location===f).map(a=>a.spec)),i=RegExp(`${f.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}[^。;;
|
|
19
|
-
|]{0,40}?(${b.source})`,"gu");for(let b of a.matchAll(i)){let a=b[1]||"";if(!h.has(a)&&(c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格错位:“${f}”使用的规格 ${a} 与工程量清单权威(${[...h].join("/")})不一致`,suggestion:`按工程量清单将“${f}”的规格统一为 ${[...h].join("/")};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。`}),c.length>=8))return c}}}return c.slice(0,8)}let ap=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function aq(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=>ap.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))&&ap.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 ar=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,as=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function at(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=ar.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&as.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b.slice(0,2)}let au=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u;function av(a){let b=a.replace(/\s+/gu,""),c=new Set;for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){if(!au.test(a[1])&&!au.test(a[2]))continue;let d=Math.max(0,(a.index||0)-12),e=Math.min(b.length,(a.index||0)+a[0].length+12),f=b.slice(d,e);!/管线|管道|电缆|给水|排水/u.test(f)&&/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(f)&&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);au.test(f)&&c.add(a[0].slice(0,30))}for(let a of b.matchAll(/([一-龥]{2,8})或([一-龥]{2,8})/gu)){if(!au.test(a[1])&&!au.test(a[2]))continue;let d=Math.max(0,(a.index||0)-12),e=b.slice(d,(a.index||0)+a[1].length);if(/管线|管道|电缆|给水|排水/u.test(e)||!/按|采用|选用|拟用|拟采用|方案|为/u.test(e))continue;let f=a[1].replace(/^.*(地下连续墙|钢板桩|灌注桩|支护桩|土钉墙|基础|支护|围护|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|形式|体系)/u,"$1");c.add(`${f}或${a[2]}`)}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function aw(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];for(let a of 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 ax(a){let b=a.canonical?.byKey.excavation_depth?.value,c=[...(a.drawings||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(a.project||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(a.preciseFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`)].filter(Boolean),d=a=>[...a.matchAll(/-?(\d+(?:\.\d+)?)\s*(?:m|米)/gu)].filter(b=>{let c=Math.max(0,(b.index??0)-6),d=Math.min(a.length,(b.index??0)+b[0].length+6);return!/(?:超过|大于|小于|不[大低小]于|不低于|及以上|及以下|以上|以下)/u.test(a.slice(c,d))}).map(a=>Math.abs(Number(a[1]))),f=[...b?d(b):[],...c.flatMap(a=>/基坑开挖深度|基坑深度|开挖深度|坡底线|坑底标高/u.test(a)?d(a):[])].filter(a=>Number.isFinite(a)&&a>=1&&a<50);return f.length>0?Math.max(...f):void 0}function ay(a,b){let c=ax(b);if(void 0===c||c<3)return[];let d=[];return c>=3&&!/危大工程/u.test(a)&&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&&!/超过一定规模/u.test(a)&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`超危大工程判定缺失:资料基坑开挖深度 ${c}m(≥5m),正文必须出现「超过一定规模」判定与专家论证要求`,suggestion:`开挖深度≥5m 属超过一定规模的危大工程:写明本工程深度 ${c}m 对应分级结论,专项施工方案必须经专家论证,不得只写判定规则不落地分级。`}),d}function az(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 aA=["塔式起重机","施工升降机","施工电梯","汽车起重机","汽车吊","混凝土泵车","混凝土泵","挖掘机","装载机","推土机","压路机","平地机","空压机","注浆机","锚杆钻机","混凝土喷射机","喷射机","吊篮","钢筋加工设备","塔吊"],aB=/挖掘机|空压机|注浆机|锚杆钻机|混凝土喷射机|喷射机|推土机/u;function aC(a,b){let c=function(a){let b=[];for(let c of a.matchAll(/第(\d{2,3})日[^。;;\n|]{0,8}?(?:进场|投入使用|安装|调试)/gu)){let d=a.slice(Math.max(0,(c.index||0)-24),c.index||0),e=aA.find(a=>d.includes(a));e&&b.push({equipment:e,day:Number(c[1]),raw:`${d.slice(-18)}${c[0].slice(0,20)}`})}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===c.length)return[];let d=[],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);if(void 0!==f){let a=c.filter(a=>a.day>=.8*f);a.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场时间荒谬:${a.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 已过总工期(${f}日历天)的 80%,尾期进场无法覆盖主体施工`,suggestion:`以总进度计划为准核对设备进场计划:大型施工设备应在工程早期(总工期前 30% 内)进场,${a.map(a=>a.equipment).join("、")} 的进场日应提前至基础/主体施工开始前,删除矛盾的尾期进场表述。`})}let g=ah(a).filter(a=>"excavation"===a.key).map(a=>a.day);if(g.length>0){let a=Math.min(...g),b=c.filter(b=>aB.test(b.equipment)&&b.day>a);b.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场工序倒挂:${b.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 晚于基坑支护及土方外运完成节点(第${a}日),基坑阶段设备未在工序开始前进场`,suggestion:`基坑阶段专用设备必须在基坑开挖/支护开始前完成进场与报验:将 ${b.map(a=>a.equipment).join("、")} 的进场日调整为早于基坑支护完成节点(第${a}日)的日期,删除工序倒挂表述。`})}return d.slice(0,3)}let aD=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,aE=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function aF(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let aG=/^\s*\|[\s:|-]+\|/u;function aH(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>aG.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),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(aI(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 aI(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 aJ(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 aK=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,aL=a=>a.filter(a=>!aK.test(a));function aM(a){let b=[],c=aH(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=aI(e.header,f.header),i=aI(e.firstCol,f.firstCol),j=aI(e.dataCells,f.dataCells),k=Math.max(aJ(aL(e.dataCells),aL(f.dataCells)),aJ(aL(f.dataCells),aL(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 aN(a){let b=aH(a);if(b.length<2)return{markdown:a,removedCount:0};let c=a.split(/\r?\n/u),d=new Set;for(let a=0;a<b.length;a+=1)for(let c=a+1;c<b.length;c+=1){let e=b[a],f=b[c];if(d.has(e.startLine)||d.has(f.startLine))continue;let g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=aI(e.header,f.header),i=aI(e.firstCol,f.firstCol),j=aI(e.dataCells,f.dataCells),k=Math.max(aJ(aL(e.dataCells),aL(f.dataCells)),aJ(aL(f.dataCells),aL(e.dataCells)));if(!(g&&j>=.6)&&!(h>=.7&&i>=.6)&&!(i>=.6&&k>=.6))continue;let[l,m]=e.bodyChars>=f.bodyChars?[e,f]:[f,e];for(let a=m.startLine;a<=m.endLine;a+=1)d.add(a)}return 0===d.size?{markdown:a,removedCount:0}:{markdown:c.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aO(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}function aP(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=aO(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}function aQ(a){let b=a.split(/\r?\n/u),c=new Set,d=new Set,e=[],f=[],g=()=>{let a=aO(e.join(""));a&&(c.has(a)?f.forEach(a=>d.add(a)):c.add(a)),e=[],f=[]};return(b.forEach((a,b)=>{let c=a.trim();if(!c||/^#{1,6}\s/u.test(c)||/^\s*\|/u.test(c))return void g();if(/^[-*•]\s/u.test(c)){g(),e=[c],f=[b],g();return}e.push(c),f.push(b)}),g(),0===d.size)?{markdown:a,removedCount:0}:{markdown:b.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aR(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(aD))d.add(aF(b[0]));if(c?.extracted)for(let a of[...c.awardObjectives||[],...c.specialQualityStandards||[],...c.awardClauses||[]])for(let b of(a.text||"").matchAll(aD))d.add(aF(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(aD)){let a=aF(b[0]);!d.has(a)&&(aE.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 aS(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 aT=/人[、,,]材[、,,]机/u,aU=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function aV(a){let b=a.match(aU)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function aW(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||!aT.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:aV(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=aV(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}function aX(a,b){if(0===b.length)return{markdown:a,fixedCount:0,details:[]};let c=[...b].sort((a,b)=>a.start-b.start||a.end-b.end),d="",e=0,f=0,g=[];for(let b of c)b.start<e||b.end<=b.start||(d+=a.slice(e,b.start)+b.replacement,e=b.end,f+=1,g.push(b.detail));return{markdown:d+=a.slice(e),fixedCount:f,details:[...new Set(g)].slice(0,8)}}function aY(a){let b=function(a){let b=w(a).map(a=>a.peak);return b.length>0?Math.max(...b):void 0}(a);if(void 0===b)return{markdown:a,fixedCount:0,details:[]};let c=[],d=d=>{for(let e of a.matchAll(d)){let d=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(d)||d<=0)continue;let f=e.index+e[0].indexOf(e[1]),g=a.lastIndexOf("\n",e.index)+1,h=a.indexOf("\n",e.index);-1===h&&(h=a.length),!(/^\s*\|.*\|\s*$/u.test(a.slice(g,h))||"peak"!==u(a,f,g,h).group||v(a,f))&&(Math.abs(d-b)/Math.max(d,b)<=.3||c.push({start:f,end:f+e[1].length,replacement:String(b),detail:`劳动力峰值 ${d}人→${b}人(以分阶段投入明细表为准)`}))}};for(let e of(d(p),d(q),a.matchAll(/(?:高峰期|高峰|峰值)[^。;;\n]{0,16}?控制(?:在|为|到)?(?:约)?\s*([\d,]+)\s*人(?:以内|以下|之内)?/gu))){let a=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||a>=b)continue;let d=e.index+e[0].indexOf(e[1]);c.push({start:d,end:d+e[1].length,replacement:String(b),detail:`劳动力控制上限 ${a}人→${b}人(与分阶段投入明细表峰值自洽)`})}return aX(a,c)}function aZ(a){let b=a=>{let b=a.match(/(\d{1,4})\s*个?\s*日历天/u);if(!b)return;let c=Number(b[1]);return Number.isFinite(c)&&c>0?c:void 0};for(let c of a?.schedule??[]){let a=`${c.key||""}${c.fieldName||""}${c.fieldId||""}`;if(!/工期|周期/u.test(a))continue;let d=b((0,e.lG)(c.value));if(void 0!==d)return d}for(let c of Object.values(a?.canonical?.schedule??{})){let a=Array.isArray(c)?c[0]:c;if(!a||!/工期|周期/u.test(a.label))continue;let d=b(a.value);if(void 0!==d)return d}}function a$(a){let b=a=>{let b=a.match(/(\d+(?:\.\d+)?)\s*%/u);if(!b)return;let c=Number(b[1]);return Number.isFinite(c)&&c>0&&c<=100?c:void 0};for(let c of[...a?.project??[],...a?.bills??[],...a?.preciseFacts??[]]){let a=`${c.key||""}${c.fieldName||""}${c.fieldId||""}`;if(!/装配率|assembly/u.test(a))continue;let d=b((0,e.lG)(c.value));if(void 0!==d)return d}let c=a?.tenderRequirements?.assemblyRate?.text;if(c)return b(c)}function a_(a){let b,c=[],d=a?.project??[];for(let a of d){let c=`${a.key||""}${a.fieldName||""}`;if(!/单体建筑面积|建设规模/u.test(c))continue;let d=(0,e.lG)(a.value).match(/(\d+(?:\.\d+)?)\s*(?:平方(?:米)?|㎡|m²)/u);if(d&&Number.isFinite(Number(d[1]))){b=Number(d[1]);break}}void 0!==b&&c.push(`建筑面积${b}平方米`);let f=JSON.stringify({project:d,drawings:a?.drawings??[],tables:a?.tables??[]}),g=f.match(/地上\s*(\d+)\s*层/u)?.[1],h=f.match(/地下\s*(\d+)\s*层/u)?.[1];return void 0!==g&&c.push(`地上${g}层`),void 0!==h&&c.push(`地下${h}层`),c.length>0?c.join("、"):void 0}let a0=[{key:"towerCrane",re:/塔式起重机|塔吊/u},{key:"hoist",re:/施工升降机|施工电梯/u},{key:"truckCrane",re:/汽车起重机|汽车吊/u},{key:"rebarCutter",re:/钢筋切断机/u},{key:"rebarBender",re:/钢筋弯曲机/u},{key:"circularSaw",re:/圆盘锯/u},{key:"pump",re:/潜水泵/u},{key:"extinguisher",re:/灭火器/u},{key:"firstaid",re:/急救箱/u}];function a1(a){let b=[];for(let c of a?.scheduleNodes??[])"string"==typeof c.node&&""!==c.node.trim()&&"string"==typeof c.offset&&""!==c.offset.trim()&&b.push({node:c.node,offset:c.offset});let c={};for(let b of a?.machines??[]){let a="string"==typeof b.name?b.name:"",d=Number(b.count);if(!Number.isFinite(d)||d<=0)continue;let e=a0.find(b=>b.re.test(a));void 0!==e&&void 0===c[e.key]&&(c[e.key]=d)}return{nodeAuthorities:b,machineAuthorities:c}}function a2(a,b){let c=a,d=0,e=[],f={};for(let a of(b?.scheduleAuthority!==void 0&&b.scheduleAuthority>0&&(f.scheduleDays=b.scheduleAuthority),b?.assemblyRateAuthority!==void 0&&b.assemblyRateAuthority>0&&(f.prefabRatio=b.assemblyRateAuthority),b?.machineAuthorities!==void 0&&Object.assign(f,b.machineAuthorities),[aY,a=>(function(a,b){let c=a,d=[],e=b?.scheduleAuthority;if(void 0!==e&&e>0){let a=[...c.matchAll(/(?:开工令下发后|开工后)第(\d{1,3})[日天]/gu)].map(a=>Number(a[1])),b=a.length>0?Math.max(...a):0;if(b>0&&b<.9*e){let a=e/b,f=[];for(let b of c.matchAll(/(?:开工令下发后|开工后)第(\d{1,3})[日天]/gu)){let c=Math.max(1,Math.round(Number(b[1])*a)),d=b.index+b[0].indexOf(b[1]);f.push({start:d,end:d+b[1].length,replacement:String(c),detail:`节点日期 ${b[1]}日→${c}日(总工期${e}日历天体系缩放)`})}for(let b of c.matchAll(/第(\d{2,3})日(?=[^。;;\n]{0,8}竣工验收)/gu)){let c=Math.max(1,Math.round(Number(b[1])*a));f.push({start:b.index,end:b.index+b[0].length,replacement:`第${c}日`,detail:`竣工验收节点 ${b[1]}日→${c}日(总工期${e}日历天体系缩放)`})}for(let b of c.matchAll(/(竣工验收(?:合格)?[^。;;\n]{0,8}?[((])第(\d{2,3})日([))])/gu)){let c=Math.max(1,Math.round(Number(b[2])*a));f.push({start:b.index,end:b.index+b[0].length,replacement:`${b[1]}第${c}日${b[3]}`,detail:`竣工验收节点 ${b[2]}日→${c}日(总工期${e}日历天体系缩放)`})}if(f.length>0){let a=aX(c,f);c=a.markdown,d.push(...a.details.slice(0,8));let b=/^(\|[^|]*\|)\s*开工令下发后第(\d+)日\s*\|\s*开工令下发后第(\d+)日\s*\|\s*(\d+)\s*日\s*(\|.*)$/u,e=c.split(/\r?\n/u),g=0,h=0;for(let a=0;a<e.length;a+=1){let c=e[a].match(b);if(!c){g=0;continue}let d=Number(c[3]),f=g>0?g+1:Number(c[2]),i=Math.max(d,f+1),j=i-f+1;(f!==Number(c[2])||i!==d||j!==Number(c[4]))&&(e[a]=`${c[1]} 开工令下发后第${f}日 | 开工令下发后第${i}日 | ${j}日 ${c[5]}`,h+=1),g=i}h>0&&(c=e.join("\n"),d.push(`三列进度表链式重算 ${h} 行(开始/持续列与缩放后结束列自洽)`))}}}let f=c.split(/\r?\n/u),g=/^\|.+\|$/u,h=[],i=0;for(let a of f)h.push({start:i,end:i+a.length}),i+=a.length+1;let j=a=>{let b=[];return/清理|预验收|收尾/u.test(a)&&b.push("cleanup"),/竣工验收/u.test(a)&&b.push("completion"),/装饰|幕墙/u.test(a)&&b.push("decoration"),/机电/u.test(a)&&b.push("mep"),/二次|ALC|墙板|砌体/u.test(a)&&b.push("secondary"),/主体|封顶/u.test(a)&&b.push("topping"),/土方|基坑|基础|支护/u.test(a)&&b.push("excavation"),b},k=a=>(a.split("|")[1]||"").trim(),l=a=>{let b;for(let c of a.matchAll(/第(\d{1,3})[日天]/gu)){let d=a.slice(Math.max(0,(c.index??0)-8),c.index??0);/(?:合格|封顶|移交|完成|进场|退场)后$/u.test(d)||(b={value:Number(c[1]),start:(c.index??0)+c[0].indexOf(c[1]),end:(c.index??0)+c[0].lastIndexOf(c[1])+c[1].length})}return b},m=new Map,n=[];for(let a=0;a<f.length;a+=1){if(!g.test(f[a].trim()))continue;let b=a;for(;a<f.length&&g.test(f[a].trim());)a+=1;let c=a,d=f.slice(Math.max(0,b-6),b).join("\n");if(/总进度计划|施工总进度|总进度安排|总工期控制|总工期/u.test(d)){for(let a=b;a<c;a+=1){let b=k(f[a]),c=l(f[a]);if(!(!c||/---/u.test(b)))for(let a of j(b)){let b=m.get(a);(void 0===b||c.value>b)&&m.set(a,c.value)}}n.push({start:h[b].start,end:h[c-1].end})}}for(let a of b?.nodeAuthorities??[]){let b=a.offset.match(/第(\d{1,3})[日天]/u);if(!b)continue;let c=Number(b[1]);if(!Number.isFinite(c)||c<1||c>3e3)continue;let d=ag.find(b=>b.re.test(a.node))?.key;if(void 0===d)continue;let e=m.get(d);void 0!==e&&Math.abs(e-c)>=5&&(n.length=0),m.set(d,c)}if(0===m.size)return{markdown:c,fixedCount:+(d.length>0),details:d};let o=[],p=a=>!n.some(b=>a>=b.start&&a<=b.end);for(let a=0;a<f.length;a+=1){if(!g.test(f[a].trim())||!p(h[a].start))continue;let b=k(f[a]),c=l(f[a]);if(!c||/---/u.test(b))continue;let d=j(b).map(a=>m.get(a)).find(a=>void 0!==a);if(void 0===d||5>Math.abs(c.value-d))continue;let e=ag.find(a=>j(b).includes(a.key))?.label||b.slice(0,12);o.push({start:h[a].start+c.start,end:h[a].start+c.end,replacement:String(d),detail:`表格节点“${e}”${c.value}日→${d}日(以总进度计划/总工期控制表为准)`})}let q=(a,b,c,d,e)=>{let f=ag.find(b=>b.re.test(a))?.key;if(void 0===f||!Number.isFinite(b)||b<1||b>3e3)return;let g=m.get(f);!(void 0===g||5>Math.abs(b-g))&&p(c)&&o.push({start:c,end:d,replacement:String(g),detail:`节点“${ag.find(a=>a.key===f)?.label||f}”工期 ${b}日→${g}日(以总进度计划表为准)`})};for(let a of c.matchAll(/第(\d{2,3})日(?:(?![))→。;;\n,、]).){0,14}?完成(?:(?![((→。;;\n,、]).){0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu)){let b=a.index+a[0].indexOf(a[1]);q(a[2],Number(a[1]),b,b+a[1].length,a[0].slice(0,40))}for(let a of c.matchAll(/(竣工验收)(?:(?!(?:后|第\d{2,3}[日天]|,|、|→)).){0,10}?第(\d{2,3})[日天]/gu)){let b=a.index+a[0].indexOf(a[2]);q(a[1],Number(a[2]),b,b+a[2].length,a[0].slice(0,40))}for(let a of c.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu)){let b=a.index+a[0].indexOf(a[2]);q(a[1],Number(a[2]),b,b+a[2].length,a[0].slice(0,40))}for(let a of c.matchAll(/(主体(?:结构)?封顶)(?!后)(?:(?!(?:第\d{2,3}[日天]|,|、|完成|\||[。;;\n])).){0,20}?第(\d{2,3})日/gu)){let b=a.index+a[0].indexOf(a[2]);q(a[1],Number(a[2]),b,b+a[2].length,a[0].slice(0,40))}let r=aX(c,o);return{markdown:r.markdown,fixedCount:r.fixedCount+ +(d.length>0),details:[...d,...r.details].slice(0,12)}})(a,{scheduleAuthority:b?.scheduleAuthority,nodeAuthorities:b?.nodeAuthorities}),a=>(function(a,b){let c=[];for(let d of aj){if("number"!==d.kind)continue;let e=new Set,f=[];for(let b of d.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(ak.test(b))continue;let d=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);-1===g&&(g=a.length);let h=a.slice(d,g);if(al.test(h))continue;let i=Number(c[1]);Number.isFinite(i)&&!(i<=0)&&(/^\s*\|/u.test(h)?e.add(i):f.push({value:i,group:am(a,c.index||0,b,d)}))}let g=b?.[d.key],h=void 0===g&&"towerCrane"===d.key&&e.size>1,i=void 0!==g&&g>0?g:1===e.size?[...e][0]:h?Math.min(...e):void 0;if(void 0!==i&&[...f.filter(a=>""===a.group).map(a=>a.value),...void 0!==g||h?[...e]:[]].some(a=>Math.abs(a-i)>.2*i))for(let b of d.patterns)for(let e of a.matchAll(b)){let b=e[0].slice(0,40);if(ak.test(b))continue;let f=a.lastIndexOf("\n",e.index)+1,j=a.indexOf("\n",e.index);-1===j&&(j=a.length);let k=a.slice(f,j);if(al.test(k)||/^\s*\|/u.test(k)&&void 0===g&&!h)continue;let l=Number(e[1]);if(!Number.isFinite(l)||l<=0||!/^\s*\|/u.test(k)&&""!==am(a,e.index||0,b,f)||Math.abs(l-i)<=.2*i)continue;let m=e.index+e[0].indexOf(e[1]),n=void 0!==g&&g>0?"scheduleDays"===d.key?"以绑定资料计划工期为准":"以绑定资料锁定口径为准":"以表格口径为准";c.push({start:m,end:m+e[1].length,replacement:String(i),detail:`${d.label} ${l}${d.unit}→${i}${d.unit}(${n})`})}}return aX(a,c)})(a,f),a=>(function(a,b){if("slope"!==b)return{markdown:a,fixedCount:0,details:[]};let c=0,d=0,e=a.split(/\r?\n/u).map(a=>{let b=a.trim();return/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!z.test(a)?a:a.split(/(?<=[。;;])/u).map(a=>{if(!z.test(a))return a;if(!A.test(a))return c+=1,"";let b=/([。;;])$/u.exec(a)?.[1],e=a.split(/[,、]/u).filter(a=>!E.test(a)).join(",");for(let[a,c]of(void 0===b||/[。;;]$/u.test(e)||(e+=b),D))e=e.replace(a,c);return d+=1,e}).join("")});return 0===c&&0===d?{markdown:a,fixedCount:0,details:[]}:{markdown:e.join("\n"),fixedCount:c+d,details:[`支护体系确定性裁决(图纸/地质槽位:放坡喷锚类):删除桩族句 ${c} 句、改写混句 ${d} 句`]}})(a,b?.supportAuthority)])){let b=a(c);b.markdown!==c&&(c=b.markdown,d+=b.fixedCount,e.push(...b.details))}return{markdown:c,fixedCount:d,details:e.slice(0,12)}}function a3(a){let b=a.split(/(?<=[。!?;\n])/u),c=[],d=0;return{markdown:b.map(a=>{let b=a.trimStart();if(/^[|#]/.test(b))return a;let e=a,f=!0,g=0;for(;f&&g<20;){f=!1,g+=1;for(let a=16;a>=4;a-=1){for(let b=0;b+2*a<=e.length;b+=1){let g=e.slice(b,b+a);if((/[0-9]/.test(g)||/[\u4e00-\u9fa5]/.test(g))&&e.slice(b+a,b+2*a)===g){e=e.slice(0,b+a)+e.slice(b+2*a),f=!0,d+=1,c.push(`相邻重复短语折叠:“${g.slice(0,24)}”`);break}}if(f)break}if(f)continue;for(let a=20;a>=9;a-=1){for(let b=0;b+a<=e.length;b+=1){let g=e.slice(b,b+a);if(!/[\u4e00-\u9fa5]/.test(g[0]||""))continue;let h=/[0-9]/.test(g);if(!h&&a<12||h&&(/\d$/.test(g)||/[|→\-—]/.test(g)))continue;let i=e.indexOf(g);if(i!==b||-1===e.indexOf(g,i+1))continue;let j=0,k=e.indexOf(g,i+1);for(;-1!==k;)e=e.slice(0,k)+e.slice(k+a),j+=1,k=e.indexOf(g,k);if(j>0){f=!0,d+=j,c.push(`隔位重复短语折叠:“${g.slice(0,24)}”\xd7${j}`);break}}if(f)break}if(f)continue;let a="kW|kVA|MPa|㎡|m\xb2|m\xb3|mm|cm|%",b=RegExp(`(\\d+(?:\\.\\d+)?)(?:${a})(?=\\s*\\d+(?:\\.\\d+)?(?:${a}))`,"gu").exec(e);if(b){let g=b.index+b[0].length,h=e.slice(g).match(RegExp(`^\\s*(\\d+(?:\\.\\d+)?)(?:${a})`));h&&(e=e.slice(0,g)+e.slice(g+h[0].length),f=!0,d+=1,c.push(`数值单位粘连折叠:“${b[0]}${h[0].trim()}”→“${b[0]}”`))}if(f)continue;let h=e;(e=e.replace(/[,,]{2,}/gu,",").replace(/[。;!?]{2,}/gu,a=>a[0]).replace(/,(?=[。;!?])/gu,""))!==h&&(f=!0,c.push("残留重复标点归一"))}return e}).join(""),fixedCount:d,details:c.slice(0,8)}}function a4(a,b){let c=[];if(b?.areaSummary)for(let d of a.matchAll(/\|\s*按施工图设计文件确定\s*\|/gu))c.push({start:d.index+1,end:d.index+d[0].length-1,replacement:` ${b.areaSummary} `,detail:`工程概况一览表建设规模套话→“${b.areaSummary}”`});if(b?.scheduleDays!==void 0&&b.scheduleDays>0)for(let d of a.matchAll(/\|\s*按合同约定工期执行\s*\|/gu))c.push({start:d.index+1,end:d.index+d[0].length-1,replacement:` ${b.scheduleDays}个日历天 `,detail:`工程概况一览表工期套话→“${b.scheduleDays}个日历天”`});if(0===c.length)return{markdown:a,fixedCount:0,details:[]};let d=aX(a,c);return{markdown:d.markdown,fixedCount:d.fixedCount,details:d.details}}function a5(a){let b=a.match(/(### 6\.1\s+施工部署与施工流水组织[\s\S]*?)(?=### 6\.2|## 第[六七]章|$)/u);if(!b)return{markdown:a,fixedCount:0,details:[]};let c=b[0],d=["三检","样板引路","隐蔽验收","见证取样","试块养护","分部分项报验"],e=d.filter(a=>c.includes(a)).length;if(e>=3)return{markdown:a,fixedCount:0,details:[]};let f=`
|
|
20
|
-
质量保障体系与安全文明管理同频运行:项目部实行“三检制”(自检、互检、交接检),每道工序经班组自检、质量员复检合格后报监理单位验收;推行样板引路制度,主体结构、装配式构件安装、ALC墙板安装、幕墙安装等主要分项工程在大面积施工前先做样板,经建设、监理单位验收确认后方可展开;隐蔽工程(钢筋、防水、管线预埋等)覆盖前由质量员组织隐蔽验收并留存影像记录;原材料进场按见证取样要求送检,混凝土试块按规范留置并落实标养与同条件养护;分部分项工程验收严格执行报验程序,验收资料与工程进度同步归档,确保“合格”质量标准与“确保黄山杯”创优目标逐级落实。`,g=(b.index??0)+c.length;return{markdown:a.slice(0,g)+f+a.slice(g),fixedCount:1,details:[`6.1 施工部署块补全质量保障协同段(核心术语 ${d.length-e}/${d.length} 缺失)`]}}function
|
|
18
|
+
]{18,60})[。!?!?]`,"gu");function Q(a){let b=[],c=new Map;for(let b of a.matchAll(P)){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.slice(0,3)}function R(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 S(a,b={}){let c=[],{overviewBody:d,sentences:e}=R(a);if(0===e.length||!d||!b.semanticSimilarity)return c;let f=[];for(let a of e)if(b.semanticSimilarity(a,d)>=.6&&f.push(a.slice(0,36)),f.length>=3)break;return 0===f.length||c.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`项目概况段跨章复述不得出现:概况章外有 ${f.length} 处以“本项目为/本工程为”等总述开头整段复述概况内容:${f.map(a=>`“${a}…”`).join("、")}`,suggestion:"总述数据只在工程概况类小节集中交代一次:其他章节直接写本章内容,仅可引用所需的具体数字(如计划工期天数),不得复述完整概况段。"}),c}function T(a,b){let c,{overviewBody:d,sentences:e}=R(a);if(0===e.length||!d)return a;let f=a.split(/\r?\n/u),g=[];for(let a=0;a<f.length;a+=1){let b=/^(#{2,4})\s+(.+)$/u.exec(f[a].trim());if(b){let d=b[1].length;/(?:工程概况|项目概况|基本信息)/u.test(b[2])?c={index:a,level:d}:c&&d<=c.level&&(g.push([c.index,a]),c=void 0)}}c&&g.push([c.index,f.length]);let h=!1,i=f.map((a,c)=>{if(g.some(([a,b])=>c>=a&&c<b)||/^#{1,6}\s/u.test(a.trim())||/^\s*\|/u.test(a.trim())||!/本项目为|本工程为|该项目为|该工程为/u.test(a))return a;let e=a.split(/(?<=[。!?!?])/u).filter(a=>{if(!/本项目为|本工程为|该项目为|该工程为/u.test(a))return!0;let c=a.split(/[。!?!?]/u)[0];return c.length<12||.6>b(c,d)});return e.join("")!==a&&(h=!0),e.join("")});return h?i.join("\n"):a}let U=["销项","复查","整改","闭环"];function V(a){let b=[],c=(0,d.V7)(a);if(c<3e3)return b;let e=[];for(let b of U){let d=a.split(b).length-1;e.push(d/c*1e3)}let f=Math.max(...e),g=U[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 W=["专项设计文件尚未完成,待后续补充","评分指标存在缺口尚未明确","依据承诺函后续跟踪完善"];async function X(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=await (0,f.Mv)(c,[...W]),e=[...new Set(c.filter(a=>W.some(b=>d(a,b)>=f.Eh)))];if(0===e.length)return b;for(let a of e)b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`自伤表述候选:“${a}”暴露投标短板,需按上下文判定后改写`,suggestion:"投标文件不得主动暴露“专项设计未完成/指标存在缺口”等短板:改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);如属现场条件合理风险描述(地质/管线尚不明确),保留但需配套勘查与应对措施。"});return b.slice(0,3)}let Y=/([\u4e00-\u9fa5]{2})\1/gu;function Z(a){let b=[...new Set(a.match(Y)||[])].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 $=/暂列金额|暂估价|报价明细|综合单价|清单合价|预留金|投标报价|异常低价|评标基准价/u,_=/(?:税率|增值税)[^。;;\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))&&($.test(b)||_.test(b)||ab.test(b)))for(let a of(_.test(b)&&c.push("税率/增值税"),b.split(/(?<=[。;;])\s*/u))){let b=a.match($)||[],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($)||[],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:"商务数据(暂列金额/暂估价/综合单价/税率等)不得写入施组正文:删除该句或改写为定性表述(如“按合同约定执行”),商务口径仅保留在项目信息表中。"}]}function ag(a){return a.split(/\r?\n/u).map(a=>{let b=a.trim();return/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!$.test(a)&&!_.test(a)?a:a.split(/(?<=[。;;])\s*/u).filter(a=>!($.test(a)||_.test(a))).join("")}).join("\n")}let ah=[{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 ai(a){let b=[],c=(a,c,d)=>{let e=ah.find(b=>b.re.test(a))?.key;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 ah){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 aj(a){let b=[],c=new Map;for(let b of ai(a)){let a=c.get(b.key)||[];a.push(b),c.set(b.key,a)}for(let a of ah){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||Math.max(...e)-Math.min(...e)<5)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.slice(0,4)}let ak=[{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:[/垫层[^。;;\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\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:"circularSaw",label:"圆盘锯数量",unit:"台",kind:"number",patterns:[/圆盘锯[^。;;\n|]{0,24}?(\d+)\s*台/gu]}],al=/\d+(?:\.\d+)?\s*(?:mm|kVA|次|具|台|套|个)\s*[//]\s*\d+/u,am=/不再出现|不得出现|严禁出现|避免出现|不采用|未采用|予以删除|已删除|取消|纠正为|更正为/u;function an(a,b,c,d){let e=Math.max(d,b-16),f=a.slice(e,b),g=Math.max(f.lastIndexOf(","),f.lastIndexOf("、"),f.lastIndexOf(","),f.lastIndexOf(";"),f.lastIndexOf(";"),f.lastIndexOf("。")),h=[...a.slice(g>=0?e+g+1:e,b+c.length).replace(/[\u4e00-\u9fa5]{2,6}阶段/gu,"").matchAll(RegExp("女儿墙|外墙|内墙|隔墙|地梁|圈梁|构造柱|过梁|垫层|承台|筏板|底板|基础|主体|梁|柱|墙|楼板|屋面|地面|楼面|顶板|楼梯|阳台|雨篷|台阶|散水|坡道|找坡|找平|保护层|防水层|保温层|隔汽层|地坪|办公区|生活区|库房|加工区|堆放区","gu"))];return h[h.length-1]?.[0]??""}function ao(a){let b=[];for(let c of ak){let d=new Map,e=new Map;for(let b of c.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(al.test(b))continue;let f=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);if(-1===g&&(g=a.length),am.test(a.slice(f,g)))continue;let h=an(a,c.index||0,b,f),i=d.get(h)||new Set;i.add(c[1]),d.set(h,i);let j=e.get(h)||[];j.push(b),e.set(h,j)}let f=d.get("")||new Set,g=[...d.keys()].filter(a=>""!==a);if(f.size>0&&1===g.length){let a=d.get(g[0]||"");if(a){for(let b of f)a.add(b);let b=e.get(g[0]||"")||[];b.push(...e.get("")||[]),e.set(g[0]||"",b),d.delete(""),e.delete("")}}for(let[a,f]of d){if(f.size<2)continue;let d=e.get(a)||[];if("code"===c.kind)b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料参数口径矛盾:“${c.label}”${a?`在部位「${a}」`:"在未标注部位语境下"}出现 ${[...f].map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(d)].slice(0,3).join("、")}`,suggestion:`同一材料同一部位只允许一个口径:以设计图纸/工程量清单为准统一“${c.label}”${a?`在部位「${a}」的取值`:""},删除矛盾表述;不同部位允许不同规格,不得全文归一为一种。`});else{let e=[...f].map(Number).filter(Number.isFinite);if(e.length<2)continue;let g=Math.max(...e);if(g-Math.min(...e)<=.2*g)continue;b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料/设备数量口径矛盾:“${c.label}”${a?`在部位「${a}」`:"在未标注部位语境下"}出现 ${e.map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(d)].slice(0,3).join("、")}`,suggestion:`同一设备/材料同一部位只允许一个口径:以应急物资清单/施工部署为准统一“${c.label}”${a?`在部位「${a}」的取值`:""},删除矛盾表述;总量与分区配置属不同口径,不得互相归一。`})}}}return b.slice(0,8)}function ap(a,b){let c=[];if(!b)return c;for(let e of Object.values(b)){var d;if(e.length<2)continue;let b=(d=e[0]?.spec||"",/^C\d{2,3}$/.test(d)?/C\d{2,3}/u:/^M\d/.test(d)?/M\d+(?:\.\d+)?/u:/^P\d{1,2}$/.test(d)?/P\d{1,2}/u:/^A\d+(?:\.\d+)?$/.test(d)?/A\d+(?:\.\d+)?/u:/^B\d+(?:\.\d+)?$/.test(d)?/B\d+(?:\.\d+)?/u:/^HRB/.test(d)||/^HPB/.test(d)?/HRB\d{3,4}|HPB\d{3}/u:/mm$/.test(d)?/\d+(?:\.\d+)?\s*mm/u:null);if(b)for(let d of e){let{location:f,spec:g}=d;if(!f||!g||f.length<2)continue;let h=new Set(e.filter(a=>a.location===f).map(a=>a.spec)),i=RegExp(`${f.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}[^。;;
|
|
19
|
+
|]{0,40}?(${b.source})`,"gu");for(let b of a.matchAll(i)){let a=b[1]||"";if(!h.has(a)&&(c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格错位:“${f}”使用的规格 ${a} 与工程量清单权威(${[...h].join("/")})不一致`,suggestion:`按工程量清单将“${f}”的规格统一为 ${[...h].join("/")};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。`}),c.length>=8))return c}}}return c.slice(0,8)}let aq=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function ar(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=>aq.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))&&aq.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 as=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,at=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function au(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=as.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&at.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b.slice(0,2)}let av=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u;function aw(a){let b=a.replace(/\s+/gu,""),c=new Set;for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){if(!av.test(a[1])&&!av.test(a[2]))continue;let d=Math.max(0,(a.index||0)-12),e=Math.min(b.length,(a.index||0)+a[0].length+12),f=b.slice(d,e);!/管线|管道|电缆|给水|排水/u.test(f)&&/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(f)&&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);av.test(f)&&c.add(a[0].slice(0,30))}for(let a of b.matchAll(/([一-龥]{2,8})或([一-龥]{2,8})/gu)){if(!av.test(a[1])&&!av.test(a[2]))continue;let d=Math.max(0,(a.index||0)-12),e=b.slice(d,(a.index||0)+a[1].length);if(/管线|管道|电缆|给水|排水/u.test(e)||!/按|采用|选用|拟用|拟采用|方案|为/u.test(e))continue;let f=a[1].replace(/^.*(地下连续墙|钢板桩|灌注桩|支护桩|土钉墙|基础|支护|围护|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|形式|体系)/u,"$1");c.add(`${f}或${a[2]}`)}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function ax(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];for(let a of 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 ay(a){let b=a.canonical?.byKey.excavation_depth?.value,c=[...(a.drawings||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(a.project||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(a.preciseFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`)].filter(Boolean),d=a=>[...a.matchAll(/-?(\d+(?:\.\d+)?)\s*(?:m|米)/gu)].filter(b=>{let c=Math.max(0,(b.index??0)-6),d=Math.min(a.length,(b.index??0)+b[0].length+6);return!/(?:超过|大于|小于|不[大低小]于|不低于|及以上|及以下|以上|以下)/u.test(a.slice(c,d))}).map(a=>Math.abs(Number(a[1]))),f=[...b?d(b):[],...c.flatMap(a=>/基坑开挖深度|基坑深度|开挖深度|坡底线|坑底标高/u.test(a)?d(a):[])].filter(a=>Number.isFinite(a)&&a>=1&&a<50);return f.length>0?Math.max(...f):void 0}function az(a,b){let c=ay(b);if(void 0===c||c<3)return[];let d=[];return c>=3&&!/危大工程/u.test(a)&&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&&!/超过一定规模/u.test(a)&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`超危大工程判定缺失:资料基坑开挖深度 ${c}m(≥5m),正文必须出现「超过一定规模」判定与专家论证要求`,suggestion:`开挖深度≥5m 属超过一定规模的危大工程:写明本工程深度 ${c}m 对应分级结论,专项施工方案必须经专家论证,不得只写判定规则不落地分级。`}),d}function aA(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 aB=["塔式起重机","施工升降机","施工电梯","汽车起重机","汽车吊","混凝土泵车","混凝土泵","挖掘机","装载机","推土机","压路机","平地机","空压机","注浆机","锚杆钻机","混凝土喷射机","喷射机","吊篮","钢筋加工设备","塔吊"],aC=/挖掘机|空压机|注浆机|锚杆钻机|混凝土喷射机|喷射机|推土机/u;function aD(a,b){let c=function(a){let b=[];for(let c of a.matchAll(/第(\d{2,3})日[^。;;\n|]{0,8}?(?:进场|投入使用|安装|调试)/gu)){let d=a.slice(Math.max(0,(c.index||0)-24),c.index||0),e=aB.find(a=>d.includes(a));e&&b.push({equipment:e,day:Number(c[1]),raw:`${d.slice(-18)}${c[0].slice(0,20)}`})}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===c.length)return[];let d=[],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);if(void 0!==f){let a=c.filter(a=>a.day>=.8*f);a.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场时间荒谬:${a.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 已过总工期(${f}日历天)的 80%,尾期进场无法覆盖主体施工`,suggestion:`以总进度计划为准核对设备进场计划:大型施工设备应在工程早期(总工期前 30% 内)进场,${a.map(a=>a.equipment).join("、")} 的进场日应提前至基础/主体施工开始前,删除矛盾的尾期进场表述。`})}let g=ai(a).filter(a=>"excavation"===a.key).map(a=>a.day);if(g.length>0){let a=Math.min(...g),b=c.filter(b=>aC.test(b.equipment)&&b.day>a);b.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场工序倒挂:${b.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 晚于基坑支护及土方外运完成节点(第${a}日),基坑阶段设备未在工序开始前进场`,suggestion:`基坑阶段专用设备必须在基坑开挖/支护开始前完成进场与报验:将 ${b.map(a=>a.equipment).join("、")} 的进场日调整为早于基坑支护完成节点(第${a}日)的日期,删除工序倒挂表述。`})}return d.slice(0,3)}let aE=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,aF=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function aG(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let aH=/^\s*\|[\s:|-]+\|/u;function aI(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>aH.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),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(aJ(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 aJ(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 aK(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 aL=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,aM=a=>a.filter(a=>!aL.test(a));function aN(a){let b=[],c=aI(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=aJ(e.header,f.header),i=aJ(e.firstCol,f.firstCol),j=aJ(e.dataCells,f.dataCells),k=Math.max(aK(aM(e.dataCells),aM(f.dataCells)),aK(aM(f.dataCells),aM(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 aO(a){let b=aI(a);if(b.length<2)return{markdown:a,removedCount:0};let c=a.split(/\r?\n/u),d=new Set;for(let a=0;a<b.length;a+=1)for(let c=a+1;c<b.length;c+=1){let e=b[a],f=b[c];if(d.has(e.startLine)||d.has(f.startLine))continue;let g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=aJ(e.header,f.header),i=aJ(e.firstCol,f.firstCol),j=aJ(e.dataCells,f.dataCells),k=Math.max(aK(aM(e.dataCells),aM(f.dataCells)),aK(aM(f.dataCells),aM(e.dataCells)));if(!(g&&j>=.6)&&!(h>=.7&&i>=.6)&&!(i>=.6&&k>=.6))continue;let[l,m]=e.bodyChars>=f.bodyChars?[e,f]:[f,e];for(let a=m.startLine;a<=m.endLine;a+=1)d.add(a)}return 0===d.size?{markdown:a,removedCount:0}:{markdown:c.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aP(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}function aQ(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=aP(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}function aR(a){let b=a.split(/\r?\n/u),c=new Set,d=new Set,e=[],f=[],g=()=>{let a=aP(e.join(""));a&&(c.has(a)?f.forEach(a=>d.add(a)):c.add(a)),e=[],f=[]};return(b.forEach((a,b)=>{let c=a.trim();if(!c||/^#{1,6}\s/u.test(c)||/^\s*\|/u.test(c))return void g();if(/^[-*•]\s/u.test(c)){g(),e=[c],f=[b],g();return}e.push(c),f.push(b)}),g(),0===d.size)?{markdown:a,removedCount:0}:{markdown:b.filter((a,b)=>!d.has(b)).join("\n"),removedCount:d.size}}function aS(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(aE))d.add(aG(b[0]));if(c?.extracted)for(let a of[...c.awardObjectives||[],...c.specialQualityStandards||[],...c.awardClauses||[]])for(let b of(a.text||"").matchAll(aE))d.add(aG(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(aE)){let a=aG(b[0]);!d.has(a)&&(aF.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 aT(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 aU=/人[、,,]材[、,,]机/u,aV=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function aW(a){let b=a.match(aV)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function aX(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||!aU.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:aW(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=aW(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}function aY(a,b){if(0===b.length)return{markdown:a,fixedCount:0,details:[]};let c=[...b].sort((a,b)=>a.start-b.start||a.end-b.end),d="",e=0,f=0,g=[];for(let b of c)b.start<e||b.end<=b.start||(d+=a.slice(e,b.start)+b.replacement,e=b.end,f+=1,g.push(b.detail));return{markdown:d+=a.slice(e),fixedCount:f,details:[...new Set(g)].slice(0,8)}}function aZ(a){let b=function(a){let b=x(a).map(a=>a.peak);return b.length>0?Math.max(...b):void 0}(a);if(void 0===b)return{markdown:a,fixedCount:0,details:[]};let c=[],d=d=>{for(let e of a.matchAll(d)){let d=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(d)||d<=0)continue;let f=e.index+e[0].indexOf(e[1]),g=a.lastIndexOf("\n",e.index)+1,h=a.indexOf("\n",e.index);-1===h&&(h=a.length),!(/^\s*\|.*\|\s*$/u.test(a.slice(g,h))||"peak"!==v(a,f,g).group||w(a,f))&&(Math.abs(d-b)/Math.max(d,b)<=.3||c.push({start:f,end:f+e[1].length,replacement:String(b),detail:`劳动力峰值 ${d}人→${b}人(以分阶段投入明细表为准)`}))}};for(let e of(d(p),d(r),a.matchAll(/(?:高峰期|高峰|峰值)[^。;;\n]{0,16}?控制(?:在|为|到)?(?:约)?\s*([\d,]+)\s*人(?:以内|以下|之内)?/gu))){let a=Number(e[1].replace(/[,,]/gu,""));if(!Number.isFinite(a)||a<=0||a>=b)continue;let d=e.index+e[0].indexOf(e[1]);c.push({start:d,end:d+e[1].length,replacement:String(b),detail:`劳动力控制上限 ${a}人→${b}人(与分阶段投入明细表峰值自洽)`})}return aY(a,c)}function a$(a){let b=a=>{let b=a.match(/(\d{1,4})\s*个?\s*日历天/u);if(!b)return;let c=Number(b[1]);return Number.isFinite(c)&&c>0?c:void 0};for(let c of a?.schedule??[]){let a=`${c.key||""}${c.fieldName||""}${c.fieldId||""}`;if(!/工期|周期/u.test(a))continue;let d=b((0,e.lG)(c.value));if(void 0!==d)return d}for(let c of Object.values(a?.canonical?.schedule??{})){let a=Array.isArray(c)?c[0]:c;if(!a||!/工期|周期/u.test(a.label))continue;let d=b(a.value);if(void 0!==d)return d}}function a_(a){let b=a=>{let b=a.match(/(\d+(?:\.\d+)?)\s*%/u);if(!b)return;let c=Number(b[1]);return Number.isFinite(c)&&c>0&&c<=100?c:void 0};for(let c of[...a?.project??[],...a?.bills??[],...a?.preciseFacts??[]]){let a=`${c.key||""}${c.fieldName||""}${c.fieldId||""}`;if(!/装配率|assembly/u.test(a))continue;let d=b((0,e.lG)(c.value));if(void 0!==d)return d}let c=a?.tenderRequirements?.assemblyRate?.text;if(c)return b(c)}function a0(a){let b,c=[],d=a?.project??[];for(let a of d){let c=`${a.key||""}${a.fieldName||""}`;if(!/单体建筑面积|建设规模/u.test(c))continue;let d=(0,e.lG)(a.value).match(/(\d+(?:\.\d+)?)\s*(?:平方(?:米)?|㎡|m²)/u);if(d&&Number.isFinite(Number(d[1]))){b=Number(d[1]);break}}void 0!==b&&c.push(`建筑面积${b}平方米`);let f=JSON.stringify({project:d,drawings:a?.drawings??[],tables:a?.tables??[]}),g=f.match(/地上\s*(\d+)\s*层/u)?.[1],h=f.match(/地下\s*(\d+)\s*层/u)?.[1];return void 0!==g&&c.push(`地上${g}层`),void 0!==h&&c.push(`地下${h}层`),c.length>0?c.join("、"):void 0}let a1=[{key:"towerCrane",re:/塔式起重机|塔吊/u},{key:"hoist",re:/施工升降机|施工电梯/u},{key:"truckCrane",re:/汽车起重机|汽车吊/u},{key:"rebarCutter",re:/钢筋切断机/u},{key:"rebarBender",re:/钢筋弯曲机/u},{key:"circularSaw",re:/圆盘锯/u},{key:"pump",re:/潜水泵/u},{key:"extinguisher",re:/灭火器/u},{key:"firstaid",re:/急救箱/u}];function a2(a){let b=[];for(let c of a?.scheduleNodes??[])"string"==typeof c.node&&""!==c.node.trim()&&"string"==typeof c.offset&&""!==c.offset.trim()&&b.push({node:c.node,offset:c.offset});let c={};for(let b of a?.machines??[]){let a="string"==typeof b.name?b.name:"",d=Number(b.count);if(!Number.isFinite(d)||d<=0)continue;let e=a1.find(b=>b.re.test(a));void 0!==e&&void 0===c[e.key]&&(c[e.key]=d)}return{nodeAuthorities:b,machineAuthorities:c}}function a3(a,b){let c=a,d=0,e=[],f={};for(let a of(b?.scheduleAuthority!==void 0&&b.scheduleAuthority>0&&(f.scheduleDays=b.scheduleAuthority),b?.assemblyRateAuthority!==void 0&&b.assemblyRateAuthority>0&&(f.prefabRatio=b.assemblyRateAuthority),b?.machineAuthorities!==void 0&&Object.assign(f,b.machineAuthorities),[aZ,a=>(function(a,b){let c=a,d=[],e=b?.scheduleAuthority;if(void 0!==e&&e>0){let a=[...c.matchAll(/(?:开工令下发后|开工后)第(\d{1,3})[日天]/gu)].map(a=>Number(a[1])),b=a.length>0?Math.max(...a):0;if(b>0&&b<.9*e){let a=e/b,f=[];for(let b of c.matchAll(/(?:开工令下发后|开工后)第(\d{1,3})[日天]/gu)){let c=Math.max(1,Math.round(Number(b[1])*a)),d=b.index+b[0].indexOf(b[1]);f.push({start:d,end:d+b[1].length,replacement:String(c),detail:`节点日期 ${b[1]}日→${c}日(总工期${e}日历天体系缩放)`})}for(let b of c.matchAll(/第(\d{2,3})日(?=[^。;;\n]{0,8}竣工验收)/gu)){let c=Math.max(1,Math.round(Number(b[1])*a));f.push({start:b.index,end:b.index+b[0].length,replacement:`第${c}日`,detail:`竣工验收节点 ${b[1]}日→${c}日(总工期${e}日历天体系缩放)`})}for(let b of c.matchAll(/(竣工验收(?:合格)?[^。;;\n]{0,8}?[((])第(\d{2,3})日([))])/gu)){let c=Math.max(1,Math.round(Number(b[2])*a));f.push({start:b.index,end:b.index+b[0].length,replacement:`${b[1]}第${c}日${b[3]}`,detail:`竣工验收节点 ${b[2]}日→${c}日(总工期${e}日历天体系缩放)`})}if(f.length>0){let a=aY(c,f);c=a.markdown,d.push(...a.details.slice(0,8));let b=/^(\|[^|]*\|)\s*开工令下发后第(\d+)日\s*\|\s*开工令下发后第(\d+)日\s*\|\s*(\d+)\s*日\s*(\|.*)$/u,e=c.split(/\r?\n/u),g=0,h=0;for(let a=0;a<e.length;a+=1){let c=e[a].match(b);if(!c){g=0;continue}let d=Number(c[3]),f=g>0?g+1:Number(c[2]),i=Math.max(d,f+1),j=i-f+1;(f!==Number(c[2])||i!==d||j!==Number(c[4]))&&(e[a]=`${c[1]} 开工令下发后第${f}日 | 开工令下发后第${i}日 | ${j}日 ${c[5]}`,h+=1),g=i}h>0&&(c=e.join("\n"),d.push(`三列进度表链式重算 ${h} 行(开始/持续列与缩放后结束列自洽)`))}}}let f=c.split(/\r?\n/u),g=/^\|.+\|$/u,h=[],i=0;for(let a of f)h.push({start:i,end:i+a.length}),i+=a.length+1;let j=a=>{let b=[];return/清理|预验收|收尾/u.test(a)&&b.push("cleanup"),/竣工验收/u.test(a)&&b.push("completion"),/装饰|幕墙/u.test(a)&&b.push("decoration"),/机电/u.test(a)&&b.push("mep"),/二次|ALC|墙板|砌体/u.test(a)&&b.push("secondary"),/主体|封顶/u.test(a)&&b.push("topping"),/土方|基坑|基础|支护/u.test(a)&&b.push("excavation"),b},k=a=>(a.split("|")[1]||"").trim(),l=a=>{let b;for(let c of a.matchAll(/第(\d{1,3})[日天]/gu)){let d=a.slice(Math.max(0,(c.index??0)-8),c.index??0);/(?:合格|封顶|移交|完成|进场|退场)后$/u.test(d)||(b={value:Number(c[1]),start:(c.index??0)+c[0].indexOf(c[1]),end:(c.index??0)+c[0].lastIndexOf(c[1])+c[1].length})}return b},m=new Map,n=[];for(let a=0;a<f.length;a+=1){if(!g.test(f[a].trim()))continue;let b=a;for(;a<f.length&&g.test(f[a].trim());)a+=1;let c=a,d=f.slice(Math.max(0,b-6),b).join("\n");if(/总进度计划|施工总进度|总进度安排|总工期控制|总工期/u.test(d)){for(let a=b;a<c;a+=1){let b=k(f[a]),c=l(f[a]);if(!(!c||/---/u.test(b)))for(let a of j(b)){let b=m.get(a);(void 0===b||c.value>b)&&m.set(a,c.value)}}n.push({start:h[b].start,end:h[c-1].end})}}for(let a of b?.nodeAuthorities??[]){let b=a.offset.match(/第(\d{1,3})[日天]/u);if(!b)continue;let c=Number(b[1]);if(!Number.isFinite(c)||c<1||c>3e3)continue;let d=ah.find(b=>b.re.test(a.node))?.key;if(void 0===d)continue;let e=m.get(d);void 0!==e&&Math.abs(e-c)>=5&&(n.length=0),m.set(d,c)}if(0===m.size)return{markdown:c,fixedCount:+(d.length>0),details:d};let o=[],p=a=>!n.some(b=>a>=b.start&&a<=b.end);for(let a=0;a<f.length;a+=1){if(!g.test(f[a].trim())||!p(h[a].start))continue;let b=k(f[a]),c=l(f[a]);if(!c||/---/u.test(b))continue;let d=j(b).map(a=>m.get(a)).find(a=>void 0!==a);if(void 0===d||5>Math.abs(c.value-d))continue;let e=ah.find(a=>j(b).includes(a.key))?.label||b.slice(0,12);o.push({start:h[a].start+c.start,end:h[a].start+c.end,replacement:String(d),detail:`表格节点“${e}”${c.value}日→${d}日(以总进度计划/总工期控制表为准)`})}let q=(a,b,c,d,e)=>{let f=ah.find(b=>b.re.test(a))?.key;if(void 0===f||!Number.isFinite(b)||b<1||b>3e3)return;let g=m.get(f);!(void 0===g||5>Math.abs(b-g))&&p(c)&&o.push({start:c,end:d,replacement:String(g),detail:`节点“${ah.find(a=>a.key===f)?.label||f}”工期 ${b}日→${g}日(以总进度计划表为准)`})};for(let a of c.matchAll(/第(\d{2,3})日(?:(?![))→。;;\n,、]).){0,14}?完成(?:(?![((→。;;\n,、]).){0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu)){let b=a.index+a[0].indexOf(a[1]);q(a[2],Number(a[1]),b,b+a[1].length,a[0].slice(0,40))}for(let a of c.matchAll(/(竣工验收)(?:(?!(?:后|第\d{2,3}[日天]|,|、|→)).){0,10}?第(\d{2,3})[日天]/gu)){let b=a.index+a[0].indexOf(a[2]);q(a[1],Number(a[2]),b,b+a[2].length,a[0].slice(0,40))}for(let a of c.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu)){let b=a.index+a[0].indexOf(a[2]);q(a[1],Number(a[2]),b,b+a[2].length,a[0].slice(0,40))}for(let a of c.matchAll(/(主体(?:结构)?封顶)(?!后)(?:(?!(?:第\d{2,3}[日天]|,|、|完成|\||[。;;\n])).){0,20}?第(\d{2,3})日/gu)){let b=a.index+a[0].indexOf(a[2]);q(a[1],Number(a[2]),b,b+a[2].length,a[0].slice(0,40))}let r=aY(c,o);return{markdown:r.markdown,fixedCount:r.fixedCount+ +(d.length>0),details:[...d,...r.details].slice(0,12)}})(a,{scheduleAuthority:b?.scheduleAuthority,nodeAuthorities:b?.nodeAuthorities}),a=>(function(a,b){let c=[];for(let d of ak){if("number"!==d.kind)continue;let e=new Set,f=[];for(let b of d.patterns)for(let c of a.matchAll(b)){let b=c[0].slice(0,40);if(al.test(b))continue;let d=a.lastIndexOf("\n",c.index)+1,g=a.indexOf("\n",c.index);-1===g&&(g=a.length);let h=a.slice(d,g);if(am.test(h))continue;let i=Number(c[1]);Number.isFinite(i)&&!(i<=0)&&(/^\s*\|/u.test(h)?e.add(i):f.push({value:i,group:an(a,c.index||0,b,d)}))}let g=b?.[d.key],h=void 0===g&&"towerCrane"===d.key&&e.size>1,i=void 0!==g&&g>0?g:1===e.size?[...e][0]:h?Math.min(...e):void 0;if(void 0!==i&&[...f.filter(a=>""===a.group).map(a=>a.value),...void 0!==g||h?[...e]:[]].some(a=>Math.abs(a-i)>.2*i))for(let b of d.patterns)for(let e of a.matchAll(b)){let b=e[0].slice(0,40);if(al.test(b))continue;let f=a.lastIndexOf("\n",e.index)+1,j=a.indexOf("\n",e.index);-1===j&&(j=a.length);let k=a.slice(f,j);if(am.test(k)||/^\s*\|/u.test(k)&&void 0===g&&!h)continue;let l=Number(e[1]);if(!Number.isFinite(l)||l<=0||!/^\s*\|/u.test(k)&&""!==an(a,e.index||0,b,f)||Math.abs(l-i)<=.2*i)continue;let m=e.index+e[0].indexOf(e[1]),n=void 0!==g&&g>0?"scheduleDays"===d.key?"以绑定资料计划工期为准":"以绑定资料锁定口径为准":"以表格口径为准";c.push({start:m,end:m+e[1].length,replacement:String(i),detail:`${d.label} ${l}${d.unit}→${i}${d.unit}(${n})`})}}return aY(a,c)})(a,f),a=>(function(a,b){if("slope"!==b)return{markdown:a,fixedCount:0,details:[]};let c=0,d=0,e=a.split(/\r?\n/u).map(a=>{let b=a.trim();return/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)||!A.test(a)?a:a.split(/(?<=[。;;])/u).map(a=>{if(!A.test(a))return a;if(!B.test(a))return c+=1,"";let b=/([。;;])$/u.exec(a)?.[1],e=a.split(/[,、]/u).filter(a=>!F.test(a)).join(",");for(let[a,c]of(void 0===b||/[。;;]$/u.test(e)||(e+=b),E))e=e.replace(a,c);return d+=1,e}).join("")});return 0===c&&0===d?{markdown:a,fixedCount:0,details:[]}:{markdown:e.join("\n"),fixedCount:c+d,details:[`支护体系确定性裁决(图纸/地质槽位:放坡喷锚类):删除桩族句 ${c} 句、改写混句 ${d} 句`]}})(a,b?.supportAuthority)])){let b=a(c);b.markdown!==c&&(c=b.markdown,d+=b.fixedCount,e.push(...b.details))}return{markdown:c,fixedCount:d,details:e.slice(0,12)}}function a4(a){let b=a.split(/(?<=[。!?;\n])/u),c=[],d=0;return{markdown:b.map(a=>{let b=a.trimStart();if(/^[|#]/.test(b))return a;let e=a,f=!0,g=0;for(;f&&g<20;){f=!1,g+=1;for(let a=16;a>=4;a-=1){for(let b=0;b+2*a<=e.length;b+=1){let g=e.slice(b,b+a);if((/[0-9]/.test(g)||/[\u4e00-\u9fa5]/.test(g))&&e.slice(b+a,b+2*a)===g){e=e.slice(0,b+a)+e.slice(b+2*a),f=!0,d+=1,c.push(`相邻重复短语折叠:“${g.slice(0,24)}”`);break}}if(f)break}if(f)continue;for(let a=20;a>=9;a-=1){for(let b=0;b+a<=e.length;b+=1){let g=e.slice(b,b+a);if(!/[\u4e00-\u9fa5]/.test(g[0]||""))continue;let h=/[0-9]/.test(g);if(!h&&a<12||h&&(/\d$/.test(g)||/[|→\-—]/.test(g)))continue;let i=e.indexOf(g);if(i!==b||-1===e.indexOf(g,i+1))continue;let j=0,k=e.indexOf(g,i+1);for(;-1!==k;)e=e.slice(0,k)+e.slice(k+a),j+=1,k=e.indexOf(g,k);if(j>0){f=!0,d+=j,c.push(`隔位重复短语折叠:“${g.slice(0,24)}”\xd7${j}`);break}}if(f)break}if(f)continue;let a="kW|kVA|MPa|㎡|m\xb2|m\xb3|mm|cm|%",b=RegExp(`(\\d+(?:\\.\\d+)?)(?:${a})(?=\\s*\\d+(?:\\.\\d+)?(?:${a}))`,"gu").exec(e);if(b){let g=b.index+b[0].length,h=e.slice(g).match(RegExp(`^\\s*(\\d+(?:\\.\\d+)?)(?:${a})`));h&&(e=e.slice(0,g)+e.slice(g+h[0].length),f=!0,d+=1,c.push(`数值单位粘连折叠:“${b[0]}${h[0].trim()}”→“${b[0]}”`))}if(f)continue;let h=e;(e=e.replace(/[,,]{2,}/gu,",").replace(/[。;!?]{2,}/gu,a=>a[0]).replace(/,(?=[。;!?])/gu,""))!==h&&(f=!0,c.push("残留重复标点归一"))}return e}).join(""),fixedCount:d,details:c.slice(0,8)}}function a5(a,b){let c=[];if(b?.areaSummary)for(let d of a.matchAll(/\|\s*按施工图设计文件确定\s*\|/gu))c.push({start:d.index+1,end:d.index+d[0].length-1,replacement:` ${b.areaSummary} `,detail:`工程概况一览表建设规模套话→“${b.areaSummary}”`});if(b?.scheduleDays!==void 0&&b.scheduleDays>0)for(let d of a.matchAll(/\|\s*按合同约定工期执行\s*\|/gu))c.push({start:d.index+1,end:d.index+d[0].length-1,replacement:` ${b.scheduleDays}个日历天 `,detail:`工程概况一览表工期套话→“${b.scheduleDays}个日历天”`});if(0===c.length)return{markdown:a,fixedCount:0,details:[]};let d=aY(a,c);return{markdown:d.markdown,fixedCount:d.fixedCount,details:d.details}}function a6(a){let b=a.match(/(### 6\.1\s+施工部署与施工流水组织[\s\S]*?)(?=### 6\.2|## 第[六七]章|$)/u);if(!b)return{markdown:a,fixedCount:0,details:[]};let c=b[0],d=["三检","样板引路","隐蔽验收","见证取样","试块养护","分部分项报验"],e=d.filter(a=>c.includes(a)).length;if(e>=3)return{markdown:a,fixedCount:0,details:[]};let f=`
|
|
20
|
+
质量保障体系与安全文明管理同频运行:项目部实行“三检制”(自检、互检、交接检),每道工序经班组自检、质量员复检合格后报监理单位验收;推行样板引路制度,主体结构、装配式构件安装、ALC墙板安装、幕墙安装等主要分项工程在大面积施工前先做样板,经建设、监理单位验收确认后方可展开;隐蔽工程(钢筋、防水、管线预埋等)覆盖前由质量员组织隐蔽验收并留存影像记录;原材料进场按见证取样要求送检,混凝土试块按规范留置并落实标养与同条件养护;分部分项工程验收严格执行报验程序,验收资料与工程进度同步归档,确保“合格”质量标准与“确保黄山杯”创优目标逐级落实。`,g=(b.index??0)+c.length;return{markdown:a.slice(0,g)+f+a.slice(g),fixedCount:1,details:[`6.1 施工部署块补全质量保障协同段(核心术语 ${d.length-e}/${d.length} 缺失)`]}}function a7(a){let b=a.replace(/\s+/gu,"");return b.length?(b.match(/[0-9A-Za-z%℃°±×÷≥≤.]/gu)||[]).length/b.length:0}async function a8(a){if("0"===process.env.DOCUMENT_CROSS_CHAPTER_DEDUP)return[];let b=function(a){let b=[];return a.forEach((a,c)=>{(a.content||"").split(/\n\s*\n/u).forEach((a,d)=>{let e=a.trim();if(!e||/^#{1,6}\s/um.test(e)||/^\s*\|/um.test(e)||/^[-*•]\s/um.test(e))return;let f=e.replace(/\s+/gu,"");f.length<60||b.push({chapterIndex:c,paragraphIndex:d,text:e,normalized:f})})}),b}(a);if(b.length<2)return[];let c=await (0,f.Mv)(b.map(a=>a.normalized),b.map(a=>a.normalized)),d=[],e=new Set;for(let a=0;a<b.length;a+=1)for(let f=a+1;f<b.length;f+=1){let g=b[a],h=b[f];if(g.chapterIndex===h.chapterIndex||g.normalized===h.normalized)continue;let i=c(g.normalized,h.normalized);if(i<.82)continue;let j=a7(g.text),k=a7(h.text),l=j>k||j===k&&g.chapterIndex<=h.chapterIndex,m=l?g:h,n=l?h:g,o=`${n.chapterIndex}:${n.paragraphIndex}`;e.has(o)||(e.add(o),d.push({keep:{chapterIndex:m.chapterIndex,paragraphIndex:m.paragraphIndex},drop:{chapterIndex:n.chapterIndex,paragraphIndex:n.paragraphIndex},similarity:i,paragraphPreview:n.normalized.slice(0,40)}))}return d}async function a9(a){return(await a8(a)).map(b=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:a[b.drop.chapterIndex]?.id,message:`跨章语义重复:「${a[b.keep.chapterIndex]?.title||"?"}」与「${a[b.drop.chapterIndex]?.title||"?"}」存在内容高度雷同段落(相似度 ${b.similarity.toFixed(2)}):“${b.paragraphPreview}…”`,suggestion:"同一内容全文只保留一处(保留信息密度高者);删除或改写本章的雷同段落,与本章主题相关的独有信息归并后,不得与他章段落语义重复。"}))}async function ba(a){let b=0;for(let c=0;c<5;c+=1){let c=await a8(a);if(0===c.length)break;let d=0;for(let b of[...c].sort((a,b)=>a.drop.chapterIndex-b.drop.chapterIndex||b.drop.paragraphIndex-a.drop.paragraphIndex)){let c=a[b.drop.chapterIndex];if(!c)continue;let e=(c.content||"").split(/\n\s*\n/u);!(b.drop.paragraphIndex>=e.length)&&(e[b.drop.paragraphIndex].trim().replace(/\s+/gu,"").length<60||(e.splice(b.drop.paragraphIndex,1),c.content=e.join("\n\n"),d+=1))}if(0===d)break;b+=d}return b}},46482:(a,b,c)=>{c.d(b,{Zk:()=>r,Tz:()=>z,X6:()=>s,fC:()=>A,l8:()=>y,JP:()=>q});var d=c(73024),e=c(76760),f=c(74329);c(25840),c(23500);var g=c(70933),h=c(70208),i=c(61373),j=c(78217);c(23760);var k=c(30355),l=c(44505),m=c(85016),n=c(22157);let o=[...k.P9.filter(a=>!n.Kd.includes(a)),...m.D$.source.split("|")];var p=c(95734);function q(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
21
21
|
${a.template.category||""}
|
|
22
22
|
${a.requirement||""}`,e=/专项|安全|质量|验收|审核|合同|合规|审计|风控|风险/u.test(d),f=a.targetWords>=4e4,g=(a.materialFileCount??0)<4&&(a.evidenceCount??0)<6,h=e||f||g,i=a.targetWords>=3e4||b>=8||c>=4e3,j=a.targetWords<=6e3&&b<=4&&!h,k="0"!==process.env.DOCUMENT_GLOBAL_CONSISTENCY_REVIEW&&(h||j||"1"===process.env.DOCUMENT_GLOBAL_CONSISTENCY_REVIEW);return{mode:h?"strict":i?"longform":j?"fast":"balanced",enableChapterReview:!0,enableGlobalReview:k,enableDocumentBudgetExpansion:!1,enableFinalQualityReview:!0,globalReviewSamplingRate:k&&j?.35:1}}function r(a){return{strategy:a,metrics:[],llm:{calls:0,failures:0,maxActive:0,retries:0,failureStreak:0,schemaFailures:0,promptCacheHitTokens:0,promptCacheMissTokens:0,inputTokens:0,outputTokens:0,inputChars:0,layerChars:{l0:0,l1:0,l2:0,l3:0}},semantic:{embedCacheHits:0,embedCacheMisses:0},evidence:{raw:0,used:0,filteredNoise:0,budgetDropped:0,avgNoiseScore:0,avgFactDensity:0,searchQueries:0,searchMs:0,contextChars:0,t0Chars:0,t1Chars:0,t2Lines:0,omittedChars:0},quality:{blockingCount:0,importantCount:0,minorCount:0,repairedCount:0}}}async function s(a,b,c,d){let e=Date.now();try{return await c()}finally{let c=Date.now();a.metrics.push({name:b,startedAt:e,endedAt:c,durationMs:c-e,meta:d})}}function t(a,b){let c=b.originalText?.trim();if(c&&a.includes(c)&&a.indexOf(c)===a.lastIndexOf(c))return c;if(c&&c.length>=8&&c.length<=500){let b=function(a,b){let c,d=b.split(/\s+/u).filter(a=>a.length>0);if(d.length<2)return;let e=RegExp(d.map(a=>a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")).join("\\s+"),"gu");for(let b of a.matchAll(e)){if(void 0!==c)return;c=b[0]}return c}(a,c);if(b)return b}let d=b.targetStart?.trim(),e=b.targetEnd?.trim();if(!d||!e)return;let f=a.indexOf(d);if(f<0)return;let g=a.indexOf(e,f+d.length);if(g<0)return;let h=g+e.length,i=a.slice(f,h);return a.indexOf(i)===a.lastIndexOf(i)?i:void 0}function u(a){return Math.max(2600,Math.min(16e3,Math.ceil(.45*(0,j.V7)(a))))}function v(a,b){let c=(a.match(/```/gu)||[]).length,d=b.replace(/^第[一二三四五六七八九十百千万]+章\s*/u,"").trim();return c%2==0&&(!d||a.includes(d))&&!/^\s*$/u.test(a)}function w(a){let b=[],c="";for(let d=0;d<a.length;d+=1){let e=a[d];/\s/u.test(e)||(c+=e,b.push(d))}return{compact:c,rawPositions:b}}function x(a,b,c){let d=a.lastIndexOf("\n",b-1)+1,e=a.indexOf("\n",c),f=e<0?a.length:e;if(/^\s*\|/.test(a.slice(d,f)))return{start:d,end:f};let g=d,h=a.slice(d,b),i=Math.max(h.lastIndexOf("。"),h.lastIndexOf(";"),h.lastIndexOf(";"));i>=0&&(g=d+i+1);let j=f,k=a.slice(c,f),l=[k.indexOf("。"),k.indexOf(";"),k.indexOf(";")].filter(a=>a>=0);return l.length>0&&(j=c+Math.min(...l)+1),{start:g,end:j}}async function y(a){(0,n.Te)(a.signal);let b=a.repairType||function(a){let b=a.join("\n");for(let a of f.NP)if(a.pattern.lastIndex=0,a.pattern.test(b))return a.type;return"generic"}(a.issues),c=a.contextChapters?.length?`
|
|
23
23
|
|
|
@@ -35,4 +35,4 @@ ${(0,g.ks)(q,{maxChars:B,skipT2Catalog:!0,diagnostics:a.diagnostics})}`:"",F=awa
|
|
|
35
35
|
${(0,g.ks)(q,{maxChars:3e3,skipT2Catalog:!0,diagnostics:a.diagnostics})}`;F=await (0,p.bb)(r,y(b),{maxTokens:a.maxTokens??8e3,temperature:0,signal:a.signal,diagnostics:a.diagnostics,contextLayers:D(b),prefixKey:`repair:${a.chapter.id}`})}(0,n.Te)(a.signal);let G=a.chapter.content,H=0,I=Array.isArray(F?.patches)?F.patches:[];for(let b of I){if(a.patchGuard&&b.replacement?.trim()&&function(a){let b=[];i.kt.test(a)&&b.push("资料来源罗列句");let c=o.filter(b=>a.includes(b));for(let d of(c.length>0&&b.push(`内部术语“${c.join("”“")}”`),a.matchAll(l.eS)))b.push(`具体日历日期“${d[1]}年${d[2]}月${d[3]}日”`);let d=[...new Set(a.match(l.Ih)||[])];return d.length>0&&b.push(`叠词“${d.join("”“")}”`),b}(b.replacement).length>0){let b=a.patchGuard.diagnostics;if(a.patchGuard.observeOnly)b&&(b.llm.patchGuardHits=(b.llm.patchGuardHits??0)+1);else{b&&(b.llm.patchGuardRejects=(b.llm.patchGuardRejects??0)+1);continue}}if(d&&void 0!==b.anchorIndex&&null!==b.anchorIndex){let c=Number(b.anchorIndex),d=Number.isInteger(c)?e[c]:void 0;if(d&&d.text){let c=void 0!==d.endText?function(a){let b=a.replacement?.trim(),c=Math.max(2600,Math.min(9e3,Math.ceil(.95*(0,j.V7)(a.content))));if(!b||b.length>c||a.forbidDrawingImages&&/!\[[^\]]*\]\([^)]*\)/iu.test(b))return{content:a.content,applied:!1};let d=a.startAnchor.replace(/\s+/gu,"");if(d.length<4||!b.replace(/\s+/gu,"").includes(d))return{content:a.content,applied:!1};let{compact:e,rawPositions:f}=w(a.content),g=e.indexOf(d);if(g<0)return{content:a.content,applied:!1};let h=f[g],k=a.content.length;if(a.endAnchor){let b=a.endAnchor.replace(/\s+/gu,"");if(b.length<4)return{content:a.content,applied:!1};let c=e.indexOf(b,g+d.length);if(c<0)return{content:a.content,applied:!1};k=f[c]}let l=a.content.slice(0,h)+b+a.content.slice(k);return!v(l,a.title)||(0,j.V7)(l)<Math.floor(.65*(0,j.V7)(a.content))?{content:a.content,applied:!1}:{content:(0,i.kT)((0,i.FD)(l,a.forbidDrawingImages)),applied:l!==a.content}}({content:G,startAnchor:d.text,endAnchor:d.endText,replacement:b.replacement,title:a.chapter.title,forbidDrawingImages:a.forbidDrawingImages}):function(a){let b,c=a.replacement?.trim()??"",d=a.anchor.replace(/\s+/gu,"");if(d.length<4)return{content:a.content,applied:!1};let e=a.content.replace(/\s+/gu,""),f=a.appendMode?Math.max(4e3,Math.min(24e3,Math.ceil(1.2*(0,j.V7)(a.content)))):u(a.content);if(0===c.length){if(!e.includes(d))return{content:a.content,applied:!1};let{compact:b,rawPositions:c}=w(a.content),f=[],g=0;for(;;){let a=b.indexOf(d,g);if(a<0)break;f.push(a),g=a+d.length}let h=f.map(b=>x(a.content,c[b],c[b+d.length-1]+1)),k=a.content;for(let a of h.reverse())k=k.slice(0,a.start)+k.slice(a.end);return!v(k,a.title)||(0,j.V7)(k)<Math.floor(.65*(0,j.V7)(a.content))?{content:a.content,applied:!1}:{content:(0,i.kT)(k),applied:k!==a.content}}let g=c;if(g.length>f||a.forbidDrawingImages&&/!\[[^\]]*\]\([^)]*\)/iu.test(g))return{content:a.content,applied:!1};if(a.appendMode&&!g.replace(/\s+/gu,"").startsWith(d)&&(g=`${a.anchor}${g}`),e.includes(d))b=function(a,b,c){let{compact:d,rawPositions:e}=w(a),f=[],g=0;for(;;){let a=d.indexOf(b,g);if(a<0)break;f.push({start:e[a],end:e[a+b.length-1]+1}),g=a+b.length}let h=a;for(let{start:a,end:b}of f.reverse())h=h.slice(0,a)+c+h.slice(b);return h}(a.content,d,g);else{let c=function(a,b,c){let{compact:d,rawPositions:e}=w(a);for(let c=b.length;c>=8;c-=4){let f=b.slice(0,c),g=d.indexOf(f);if(!(g<0)&&g===d.lastIndexOf(f))return x(a,e[g],e[g+c-1]+1)}}(a.content,d,0);if(!c)return{content:a.content,applied:!1};b=a.content.slice(0,c.start)+g+a.content.slice(c.end)}return!v(b,a.title)||(0,j.V7)(b)<Math.floor(.65*(0,j.V7)(a.content))?{content:a.content,applied:!1}:{content:(0,i.kT)((0,i.FD)(b,a.forbidDrawingImages)),applied:b!==a.content}}({content:G,anchor:d.text,replacement:b.replacement,title:a.chapter.title,forbidDrawingImages:a.forbidDrawingImages,appendMode:!0===d.append});if(G=c.content,c.applied){H+=1;continue}}}let c=function(a){let b=a.patch.replacement?.trim()??"",c=u(a.content);if(0===b.length){let b=t(a.content,a.patch);if(!b||b.length>c)return{content:a.content,applied:!1};let d=(0,i.kT)(a.content.replace(b,""));return!v(d,a.title)||(0,j.V7)(d)<Math.floor(.65*(0,j.V7)(a.content))?{content:a.content,applied:!1}:{content:d,applied:d!==a.content}}if(b.length>c||a.forbidDrawingImages&&/!\[[^\]]*\]\([^)]*\)/iu.test(b))return{content:a.content,applied:!1};let d=t(a.content,a.patch);if(!d||d.length>c)return{content:a.content,applied:!1};let e=(0,i.kT)((0,i.FD)(a.content.replace(d,b),a.forbidDrawingImages));return!v(e,a.title)||(0,j.V7)(e)<Math.floor(.65*(0,j.V7)(a.content))?{content:a.content,applied:!1}:{content:e,applied:e!==a.content}}({content:G,patch:b,title:a.chapter.title,forbidDrawingImages:a.forbidDrawingImages});G=c.content,c.applied&&(H+=1)}return{content:G,appliedCount:H,producedCount:I.length,repairType:b}}function z(a,b,c){return function(a,b){let c=e.resolve(a),f=function(a,b){let c=e.resolve(a);if(e.isAbsolute(b))return e.resolve(b);let f=e.resolve(c,"knowledgeBase",b);return d.existsSync(f)?f:e.resolve(c,b)}(c,b);return f===c||f.startsWith(`${c}${e.sep}`)}(a,b)&&c.size>0&&(function(a,b){let c=e.isAbsolute(b)?b:e.join(a,b),d=e.isAbsolute(b)?e.relative(a,b):b;return[b,c,d,e.join(a,d)]})(a,b).some(a=>c.has(a))}function A(a){return a.map(a=>`## [${a.roleId}/${a.category}] ${a.name}
|
|
36
36
|
${function(a){let b=a.replace(/```([\s\S]*?)```/gu,(a,b)=>/<OUTLINE>|\|\s*[^\n]+\s*\||#{1,6}\s+|必须|禁止|不得|应当|要求|规则|格式|输出|表格|章节|小节|正文/u.test(b)?`
|
|
37
37
|
${b.trim()}
|
|
38
|
-
`:"\n【示例代码块已省略:仅作为格式参考,不作为当前文档事实】\n").split(/\r?\n/u),c=[],d=!1,e=!1;for(let a of b){let b=a.trim();if((0,h.bl)(b)&&(e=!0),e){c.push(a),(0,h.Ui)(b)&&(e=!1);continue}let f=/^(?:#+\s*)?(?:示例|样例|范例|例如|参考示例|示例数据|示例正文|示例目录|example|sample)\s*[::]?/iu.test(b),g=/(?:不得|禁止|必须|应当|要求|规则|格式|输出|保留|只返回|不要|表格|章节|小节|正文|目录|封面)/u.test(b);if(f&&!g){c.at(-1)?.includes("示例内容已省略")||c.push("【示例内容已省略:仅作为格式参考,不作为当前文档事实】"),d=!0;continue}if(d){if(!b){d=!1;continue}if(!(/^(?:#+\s*)?(?:规则|要求|输出|格式|禁止|注意|正文|章节|小节|表格|风格|校验)/u.test(b)||/\|\s*[^\n]+\s*\|/u.test(b)))continue;d=!1}c.push(a)}return c.join("\n").replace(/\n{3,}/gu,"\n\n").trim()}(a.content)}`).join("\n\n")}},71678:(a,b,c)=>{c.d(b,{M8:()=>m,Xp:()=>p,a0:()=>l,dn:()=>q,hM:()=>k,mI:()=>s,xb:()=>o});var d=c(37047),e=c(41991),f=c(70208);let g=["对与评标活动有关的工作人员的纪律要求","评标委员会成员与投标人接触的限制","评标纪律与廉洁从业承诺要求","评审争议处理与投标澄清配合程序","评审结果确认与中标公示流程","评标办法与分值构成说明","清单计量与报价口径约定","投标文件实质性响应要求","投标保证金缴纳与退还程序","开标程序与投标文件递交截止时间","评标期间行为管控与资料闭环"],h=["劳动力配置计划与高峰期人数安排","施工质量保证措施与验收标准","安全生产管理与教育培训要求","施工进度计划与关键线路安排","材料设备采购进场计划与检验要求","施工现场文明施工与环境保护管理","劳动纪律与班组作业管理制度","施工机械设备配置与维护保养计划"],i
|
|
38
|
+
`:"\n【示例代码块已省略:仅作为格式参考,不作为当前文档事实】\n").split(/\r?\n/u),c=[],d=!1,e=!1;for(let a of b){let b=a.trim();if((0,h.bl)(b)&&(e=!0),e){c.push(a),(0,h.Ui)(b)&&(e=!1);continue}let f=/^(?:#+\s*)?(?:示例|样例|范例|例如|参考示例|示例数据|示例正文|示例目录|example|sample)\s*[::]?/iu.test(b),g=/(?:不得|禁止|必须|应当|要求|规则|格式|输出|保留|只返回|不要|表格|章节|小节|正文|目录|封面)/u.test(b);if(f&&!g){c.at(-1)?.includes("示例内容已省略")||c.push("【示例内容已省略:仅作为格式参考,不作为当前文档事实】"),d=!0;continue}if(d){if(!b){d=!1;continue}if(!(/^(?:#+\s*)?(?:规则|要求|输出|格式|禁止|注意|正文|章节|小节|表格|风格|校验)/u.test(b)||/\|\s*[^\n]+\s*\|/u.test(b)))continue;d=!1}c.push(a)}return c.join("\n").replace(/\n{3,}/gu,"\n\n").trim()}(a.content)}`).join("\n\n")}},71678:(a,b,c)=>{c.d(b,{M8:()=>m,Xp:()=>p,a0:()=>l,dn:()=>q,hM:()=>k,mI:()=>s,xb:()=>o});var d=c(37047),e=c(41991),f=c(70208);let g=["对与评标活动有关的工作人员的纪律要求","评标委员会成员与投标人接触的限制","评标纪律与廉洁从业承诺要求","评审争议处理与投标澄清配合程序","评审结果确认与中标公示流程","评标办法与分值构成说明","异常低价评审与计算方式说明","清单计量与报价口径约定","投标文件实质性响应要求","投标保证金缴纳与退还程序","开标程序与投标文件递交截止时间","评标期间行为管控与资料闭环"],h=["劳动力配置计划与高峰期人数安排","施工质量保证措施与验收标准","安全生产管理与教育培训要求","施工进度计划与关键线路安排","材料设备采购进场计划与检验要求","施工现场文明施工与环境保护管理","劳动纪律与班组作业管理制度","施工机械设备配置与维护保养计划"],i=/评标|投标|行贿|打招呼|递条子|廉洁|串标|围标|弄虚作假|干扰评标|纪律|澄清|中标|报价|清单计量|评审|保证金|开标|递交|争议|异常低价|评标基准价/u;function j(a){let b=a.sectionTitle?.trim()||"",c=(a.content||"").replace(/\s+/gu," ").slice(0,400);return b?`${b}。${c}`:c}function k(a){let b=a.sectionTitle?.trim()||a.content.replace(/\s+/gu,"").slice(0,60);return`${a.filePath}::${b}`}async function l(a,b){if(0===a.length)return{safe:[],excluded:[]};let c=a.filter(a=>i.test(j(a)));if(0===c.length)return{safe:[...a],excluded:[]};let e=c.map(j),f=await (0,d.Mv)(e,[...g],b),k=await (0,d.Mv)(e,[...h],b),l=new Set;for(let a of c){let b=j(a),c=Math.max(...g.map(a=>f(b,a))),d=Math.max(...h.map(a=>k(b,a)));c>=.6&&c>d&&l.add(a)}return{safe:a.filter(a=>!l.has(a)),excluded:[...l]}}async function m(a){return(0,e.A)({prototypes:[...g],negativePrototypes:[...h],threshold:.6,embedDocuments:a})}function n(a){return a.replace(/[\s\p{P}\p{S}]+/gu,"").toLowerCase()}function o(a){let b=a.trim().replace(/\s+/gu,"");if(!b||(0,f.mq)(b))return!0;let c=n(b);if(g.some(a=>n(a)===c))return!0;let d=b.replace(/农民工工资保证金|工资保证金/gu,""),e=/评标|投标|开标|中标|评审|保证金|串标|围标|廉洁|询标|递交/u.test(d),h=/纪律|监督|争议|澄清|程序|行为|管控|限制|接触|公示|承诺|响应|办法/u.test(b);return!!(e&&h||/异常低价|评标基准价/u.test(b)||/电子保函|保函|投标保证金|履约担保|履约保证金|保证金(?:的)?(?:缴纳|退还|提交|方式)/u.test(b)&&!/农民工|工资|专用账户|实名|考勤|劳资/u.test(b))||p(b)}function p(a){let b=a.trim().replace(/\s+/gu,"");if(!b)return!1;let c=b.replace(/^\d{1,3}(?:[..]\d{1,3})*[、..]?/u,"");return!!(/^具备(?:有效|相应|满足)/u.test(c)||/^(?:须|应|需|得)?提供[^,,。;]{0,12}(?:证明|材料|文件|证件|证书|报告)/u.test(c))||!!/营业执照|资质证书|安全生产许可证|资格预审|资格审查|资质审查|财务状况|业绩证明|业绩要求|银行资信|审计报告|信用记录|信用评价|不良行为记录|联合体投标|联合体协议/u.test(b)&&!/施工|技术|方案|措施|管理|控制|验收|工艺|流程|计划|组织|进度|质量|工期|文明|绿色|环保|节能|材料|设备|机械|人员|劳务|检验|检测|试验|保证|落实|制度/u.test(b)}function q(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&!!/投标人|投标方|承包人资格|资格要求|资格审查|资格预审|资质要求|资质条件|资质等级|资格条件|财务状况|业绩要求|业绩证明|信用要求|联合体/u.test(b)&&/营业执照|资质证书|安全生产许可证|级及以上资质|财务状况|财务报告|审计报告|银行资信|业绩证明|类似业绩|信用记录|信用评价|不良行为记录|投标保证金|履约保证金/u.test(b)}async function r(a){let b=a.sections.filter(a=>a?.trim());if(0===b.length)return[];let c=b.filter(a=>!o(a)),e=c.filter(a=>i.test(a));if(0===e.length)return c;let f=`${a.chapterTitle} ${a.chapterPurpose||""}`.trim(),j=await (0,d.Mv)(e,[...g],a.embedDocuments),k=await (0,d.Mv)(e,f?[f]:[],a.embedDocuments),l=await (0,d.Mv)(e,[...h],a.embedDocuments),m=new Set;for(let a of e){let b=Math.max(...g.map(b=>j(a,b))),c=f?k(a,f):0,d=Math.max(...h.map(b=>l(a,b)));b>=.6&&b>c&&b>d&&m.add(a)}return c.filter(a=>!m.has(a))}async function s(a,b){return Promise.all(a.map(async a=>({...a,sections:await r({sections:a.sections||[],chapterTitle:a.title,chapterPurpose:a.purpose,embedDocuments:b})})))}},85016:(a,b,c)=>{c.d(b,{D$:()=>f,WT:()=>h});var d=c(37047);let e=[{anchor:"按工作包逐项说明施工内容",required:/工作包|逐项说明/u},{anchor:"本项目已确认资料",required:/已确认|确认资料|本项目资料/u},{anchor:"已确认的项目资料显示",required:/已确认|项目资料/u},{anchor:"根据已确认资料",required:/已确认/u},{anchor:"生成后事实反查未通过",required:/事实反查|反查/u},{anchor:"资料事实主表",required:/事实主表/u},{anchor:"事实卡",required:/事实卡/u},{anchor:"后台数据库记录",required:/后台数据库|后台记录/u},{anchor:"证据摘要中未包含",required:/证据摘要/u},{anchor:"本专业工程主要清单项落位如下",required:/清单项落位|落位如下/u},{anchor:"针对招标文件及补疑文件的技术要求进行专项落位",required:/专项落位/u},{anchor:"全文数据口径必须唯一",required:/数据口径|峰值口径|控制口径|口径必须唯一/u}],f=/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/gu,g=/^\d+(?:\.\d+)*\s+\S+/u;async function h(a){let b=[],c=[...new Set(a.match(f)||[])];c.length>0&&b.push({level:"error",severity:"blocker",category:"format",owner:"system",repairability:"llm_repairable",message:`正式正文仍包含后台内部术语“${c.join("”“")}”,需要按上下文语义改写为正式术语`,suggestion:"请结合语境改写:“拆除工程工作包”→“拆除工程”,“按工作包逐项说明”→“按专业工程逐项说明”;禁止出现生成系统后台概念。"});let h=a.split(/\r?\n/u).map(a=>a.trim()).filter(a=>!/^#{1,6}\s/u.test(a)&&!/^\s*\|/u.test(a)&&!(g.test(a)&&a.length<=40&&!/[。!?!?;;,,::]/.test(a))).flatMap(a=>a.split(/(?<=[。!?!?;;])/u).map(a=>a.trim())).filter(a=>a.length>=8&&a.length<=80).slice(0,200);if(0===h.length)return b;let i=(0,d.VN)(),[j,k]=await Promise.all([i.embedDocuments(h),i.embedDocuments(e.map(a=>a.anchor))]),l=[];for(let a=0;a<h.length;a+=1){let b=j[a];if(!b||0===b.length)continue;let c=h[a];if(e.some(a=>a.required.test(c))&&(Math.max(...k.map(a=>(function(a,b){let c=Math.min(a.length,b.length),d=0;for(let e=0;e<c;e+=1)d+=a[e]*b[e];return d})(b,a)))>=.62&&l.push(c.slice(0,24)),l.length>=6))break}return l.length>0&&b.push({level:"error",severity:"blocker",category:"format",owner:"system",repairability:"llm_repairable",message:`正式正文疑似包含后台内部话术(语义锚点命中 ${l.length} 处):${l.map(a=>`“${a}…”`).join("、")}`,suggestion:"将内部话术(已确认资料/事实卡/工作包等生成系统概念)改写为面向评标人的正式表述,仅陈述项目事实与施工内容。"}),b}}};
|