@customize-agent/server 4.57.0 → 4.58.0
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 +20 -20
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/208.js +4 -4
- package/.next/server/chunks/4435.js +50 -49
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +26 -26
- package/.next/static/{uVLt2UAGpslnZIBzcFv3n → 2vWd2mBe-maL25SFytCur}/_buildManifest.js +1 -1
- package/.next/static/chunks/{289-12dfcb3abec1c4b4.js → 289-35ac595388bbd018.js} +1 -1
- package/.next/static/chunks/563-b12f299d34bb9e44.js +1 -0
- package/.next/static/chunks/788-3afeb069ed706ac0.js +1 -0
- package/.next/static/chunks/pages/documents-d60a47643f5bd6b4.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-8e25066889a85834.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-d0d0e0716e9d705b.js +1 -0
- package/.next/static/chunks/pages/prompt-5e1fb81efc656866.js +1 -0
- package/.next/static/chunks/pages/system/logs-6f45ef8d862759a2.js +1 -0
- package/package.json +1 -1
- package/.next/static/chunks/563-2b116a2500a97dba.js +0 -1
- package/.next/static/chunks/788-961761f5858f9189.js +0 -1
- package/.next/static/chunks/pages/documents-8e1a30170e9311b0.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-7b78e962e432d199.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-7535b873ab505397.js +0 -1
- package/.next/static/chunks/pages/prompt-2c242e541f2e77a9.js +0 -1
- package/.next/static/chunks/pages/system/logs-c5a8920c6506a7e8.js +0 -1
- /package/.next/static/{uVLt2UAGpslnZIBzcFv3n → 2vWd2mBe-maL25SFytCur}/_ssgManifest.js +0 -0
|
@@ -13,13 +13,13 @@ ${b.join("\n")}`:""}function ad(a){return(0,o.lG)(a).replace(/\s+/gu," ").trim()
|
|
|
13
13
|
|
|
14
14
|
${f}`,{markdown:m.join("\n"),appended:c.map(a=>a.itemName)}}let I=RegExp(`(?:GB|JGJ|CJJ|CECS|ISO|SL|DL|JTS|JTG|JT|TB|DB\\d{2}|DB)\\s*\\/?\\s*T?\\s*(\\d{3,5})(?:\\s*[-—–]\\s*(\\d{2,4}))?`,"giu"),J=/检查|巡查|例会|培训|交底|演练|复核|记录|台账|考核|整改|保养|维护|监测|检测|排查|验收|清扫/u,K=/作业面|班组|工区|标段|片区|地块|单元|分部|队伍|小组|机构|部门|岗位|区域|社区|村庄|村|路段|楼栋|站区|库区|厂区/u,L=/分组|平行|流水|包保|分区|分片|分块|划分|组建|成立|配备|配置|设置|设立|建立|指定|安排|派驻/u,M=/违约金|延期竣工|解除合同|缺陷责任期|质量保证金|质保金|履约保证金|保修期|合理期限|工期顺延|误期赔偿|响应|抢修|回访/u,N=/\d+(?:\.\d+)?(?:\s*(?:mm|cm|km|m2|㎡|m²|m3|m³|hm2|亩|kg|g|t|吨|ml|l|升|mpa|kpa|kn|kw|mw|kv|v|hz|℃|%|万元|亿元|元|天|工作日|工作天|月|年|h|min|次|遍|轮|班|趟|周|季|点|人|名|组|支|队|台|套|件|个|根|只|项|处|座|栋|幢|层|间|批|盏|樘|孔|株|户|盘|块|片|条|道|节|段|张|袋|桶|罐|车|d|米|m))?/giu,O=/^\d+(?:\.\d+)?$/u,P=/^(?:m2|㎡|m²|平方米|平方|平米|m3|m³|立方米|立方|hm2|公顷|亩|mm|cm|km|m|米|kg|g|t|吨|个|台|套|项|处|座|株|组|批|次|人|天|月|年|万元|元|l|ml|樘|盏|根|只|块|片|条|道|层|间|栋|幢|户|袋|桶|罐|车|盘|孔|节|段|张|面|棵|丛)$/u,Q={kind:"unsourced",basis:""};function R(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function S(a){return a.replace(/(\d+\.\d*?)0+(?![\d])/gu,"$1").replace(/(\d+)\.(?![\d])/gu,"$1")}let T=/^(?:\d{1,2})\.\d{1,2}$/u,U=/(?<![\d.])(\d{1,2})\.(\d{1,2})(?![\d])/gu,V=/(?<![\d.])\.(\d{1,2})(?![\d])/gu;function W(a){let b=a.token.replace(/\s+/gu,""),c=(0,e.K3)(a.token),d=a.context||"";if(!c)return Q;for(let a of d.matchAll(I)){if(c===a[1])return{kind:"regulatory",basis:"标准编号"};if(a[2]&&c===a[2])return{kind:"regulatory",basis:"标准编号年份"}}return/^(?:19|20)\d{2}年度?$/u.test(c)?{kind:"regulatory",basis:"年份表述"}:/^(?:3|7|10|14|21|28)(?:d|天)$/u.test(c)&&/养护|龄期|标养|同条件|强度|试验/u.test(d)?{kind:"regulatory",basis:"养护龄期"}:/^(?:50|100|150|200|250|400|500)m3$/u.test(c)&&/试块|留置|检验批|砂浆|混凝土|浇筑|砌筑/u.test(d)?{kind:"regulatory",basis:"试块留置/检验批"}:/^(?:50|100)盘$/u.test(c)||/^[1-9]组$/u.test(c)&&/试块|留置|砂浆|混凝土|抗压|强度|钢筋/u.test(d)?{kind:"regulatory",basis:"试块留置"}:/^(?:100|200|400|1000)m2$/u.test(c)&&/每层|压实度|检测|检验|测点|不少于|至少/u.test(d)||/^\d+点$/u.test(c)&&/检测|检验|测量|观测|测点|抽检|不少于|至少/u.test(d)?{kind:"regulatory",basis:"检测频次"}:/℃$/u.test(c)&&/温度|养护|浇筑|入模|气温|环境|温差|加热/u.test(d)?{kind:"regulatory",basis:"温度阈值"}:/^\d+(?:\.\d+)?%$/u.test(c)&&/压实度|饱满度|含泥量|密实度|压实系数|保证率|灰剂量|油石比/u.test(d)?{kind:"regulatory",basis:"质量指标"}:/^\d+(?:\.\d+)?mm$/u.test(c)&&/偏差|公差|误差/u.test(d)?{kind:"regulatory",basis:"工艺公差"}:/^\d+(?:\.\d+)?mpa$/u.test(c)&&/试压|水压|气压|压力试验|试验压力|工作压力|注浆|强度试验|严密性|稳压|压降/u.test(d)?{kind:"regulatory",basis:"工艺压力参数"}:/^m\d+(?:\.\d+)?$/u.test(c)&&/砂浆|砌筑|抹灰|强度|等级/u.test(d)?{kind:"regulatory",basis:"砂浆强度等级"}:(/^\d+(?:\.\d+)?mω$/u.test(c)||/^\d+(?:\.\d+)?m$/u.test(c)&&/[ωΩ]/u.test(d))&&/绝缘|接地|电阻|兆欧/u.test(d)?{kind:"regulatory",basis:"绝缘电阻"}:/^s\d+(?:\.\d+)?$/u.test(c)&&/ppr|pb|pvc|pe|管|系列|冷热|给水/iu.test(d)?{kind:"regulatory",basis:"管系列代号"}:/^(?!(?:dn|de|sc|jdg|hrb|hpb)\d)[a-z]{1,4}\d[\w./-]*$/u.test(c)&&/材质|牌号|钢号|钢种|型号|板型|型材|型钢|系列|配置|开关|断路器|配电|电缆|配电箱|控制箱|规格型号/u.test(d)&&!/混凝土|钢筋|砂浆/u.test(d)?{kind:"regulatory",basis:"材料/设备规格型号"}:/^[md]\d{3,5}$/u.test(c)&&/门窗|洞口|管段|管节|桩号|里程|井位|大样|详图|图集|编号|图纸/u.test(d)&&!/直径|壁厚|管径|外径|内径|砂浆|砌筑/u.test(d)?{kind:"regulatory",basis:"图纸编号"}:/(?:大于|不小于|超过|不大于|不超过|小于)/u.test(d)&&/(?:规范|规定|要求|标准|条文|验收)/u.test(d)&&/^\d+(?:\.\d+)?(?:mm|cm|m|m2|m3|℃|%)$/u.test(c)?{kind:"regulatory",basis:"规范阈值"}:/^\d+(?:次|遍|轮|班|趟)$/u.test(c)&&/每|逐|定期|不少于|至少/u.test(d)&&J.test(d)?{kind:"management",basis:"管理频次"}:/^\d+个$/u.test(c)&&K.test(d)&&L.test(d)?{kind:"management",basis:"施工组织编排"}:/^\d+(?:人|名|组|支|队)$/u.test(c)&&/配备|配置|设置|组建|成立|设立|建立|派驻|指定|安排/u.test(d)&&/专职|兼职|管理|岗位|人员|班组|队伍|小组|安全|质量|技术|施工|材料|资料|机械|劳务|作业/u.test(d)?{kind:"management",basis:"组织配置"}:/(?:天|月|年|d|万元|元|%)$/u.test(c)&&M.test(d)?{kind:"management",basis:"合同程序条款"}:/^\d+(?:\.\d+)?%$/u.test(c)&&/完成|进度|利用率|得分|负荷|覆盖|达到|控制|以上|以下|不低于|合格率|优良率|成活率|出勤率|到岗率|出工率|一次验收/u.test(d)?{kind:"management",basis:"过程指标"}:/^\d+(?:\.\d+)?月$/u.test(b)&&/开工|竣工|计划|日期|旬|上旬|中旬|下旬|季度|汛期|雨季|冬季|夏季|月初|月底|年底|年中/u.test(d)?{kind:"management",basis:"日期表述"}:/^\d+(?:\.\d+)?小时$/u.test(c)&&/保修|响应|抢修|到场|时限|服务|承诺|维修|热线|回访/u.test(d)?{kind:"management",basis:"服务时限承诺"}:/^\d+天$/u.test(c)&&/合计|共计|总计|累计|总和|总共/u.test(d)&&/工期|工序|节点|进度|衔接|机动|预留|缓冲/u.test(d)?{kind:"management",basis:"工期合计编排"}:/(?:万元|亿元|元)$/u.test(c)&&/暂列金额|暂估价|报价|单价|合价|综合单价|税率|增值税|预留金|招标控制价|限价|造价/u.test(d)?{kind:"management",basis:"商务金额"}:!function(a){let b=a.token.replace(/\s+/gu,"");if(!b)return!1;let c=(0,e.K3)(a.token);if(c&&g.c5.test(c))return!0;if(!c||!g.Rz.test(c))return!1;let d=a.context||"";return!!g.WL.test(d)&&RegExp(`(?:DN|De|HRB|HPB|Φ|φ)\\s*${R(b)}`,"iu").test(d)}({token:a.token,context:d})?!function(a){let b=/^\d+(?:\.\d+)?/u.exec(a.token.replace(/\s+/gu,""))?.[0]??"";if(!T.test(b))return!1;let[c,d]=b.split("."),e=Number(c),f=Number(d),g=a.context||"";for(let a of g.matchAll(U)){if(a[0]===b||a[2].length!==d.length)continue;let c=Number(a[1]),g=Number(a[2]);if(c===e&&1===Math.abs(g-f)||g===f&&1===Math.abs(c-e))return!0}for(let a of g.matchAll(V))if(a[1].length===d.length&&1===Math.abs(Number(a[1])-f))return!0;return!1}({token:a.token,context:d})?Q:{kind:"regulatory",basis:"章节编号"}:{kind:"regulatory",basis:"规格粘连"}}function X(a,b){let c=function(a,b){let c=function(a){let b=[];for(let c of k(a)){let a=(0,d.lG)(c.value);a&&b.push(a)}for(let c of a.tables||[])for(let a of c.rows||[]){if(!Array.isArray(a)||0===a.length)continue;let c=a.map(a=>String(a??"").trim());b.push(c.join(" "));let d=[...new Set(c.filter(a=>O.test(a)).map(a=>S(a)))];if(0===d.length)continue;let e=[...new Set(c.filter(a=>P.test(a)))];for(let a of d)for(let c of e)b.push(`${a}${c}`)}return b.map(a=>(0,e.K3)(a).replace(/(\d+\.\d*?)0+(?![\d])/gu,"$1").replace(/(\d+)\.(?![\d])/gu,"$1")).join("\n")}(b);if(c.length<40)return[];let f=[];for(let b of function(a){let b=[];for(let c of a.matchAll(N)){let d=c[0],f=c.index??0,g=(0,e.K3)(d);if(!g||/^\d+\.\d+$/u.test(g)||/^\d{9,}$/u.test(g))continue;let h=a.lastIndexOf("\n",f-1)+1,i=a.indexOf("\n",f),j=a.slice(h,i<0?a.length:i);if(/^\s*\|/u.test(j.trim()))continue;let k=/^\d+(?:\.\d+)?/u.exec(g)?.[0]??"",l=g.slice(k.length);if(!l&&!/^(?:19|20)\d{2}$/u.test(g)&&!/^\d{3,5}$/u.test(g))continue;let m=function(a,b,c){let d=b;for(;d>0&&!/[。;;!!??\n]/u.test(a[d-1]);)d-=1;let e=b+c;for(;e<a.length&&!/[。;;!!???\n]/u.test(a[e]);)e+=1;return a.slice(d,Math.min(e+1,a.length)).trim()}(a,f,d.length),n=W({token:d,context:m});(l||"unsourced"!==n.kind)&&b.push({token:d,normalizedToken:g,index:f,sentence:m,kind:n.kind,basis:n.basis})}return b}(a))"unsourced"===b.kind&&!function(a,b){let c=[b],d=S(b);return d!==b&&c.push(d),c.some(b=>RegExp(`(?<![\\d.])${R(b)}(?![\\d.])`,"u").test(a))}(c,b.normalizedToken)&&f.push({token:b.token,normalizedToken:b.normalizedToken,sentence:b.sentence,index:b.index});return f}(a,b);if(0===c.length)return[];let f=[...new Set(c.map(a=>a.token.replace(/\s+/gu,"")))];return[{level:"error",severity:"blocker",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",message:`生成后事实反查失败:正文出现 ${f.length} 处未溯源数值 ${f.slice(0,8).join("、")}${f.length>8?" 等":""}`,suggestion:"未溯源数值必须改为定性表述或显式标注来源:来自清单/图纸的保留并明确来源(清单条目/图纸编号);规范常数(试块留置/养护龄期/检测频次等)保留时显性标注规范名称与编号;其余改为不带具体数值的过程控制表述。"}]}},7148:(a,b,c)=>{c.d(b,{Q0:()=>g,Sn:()=>f,wA:()=>h});let d={米:"m",m:"m",延长米:"m",公里:"km",千米:"km",km:"km",平方米:"m2",平方:"m2","㎡":"m2","m\xb2":"m2",m2:"m2",立方米:"m3",方:"m3","m\xb3":"m3",m3:"m3",吨:"t",t:"t",千克:"kg",公斤:"kg",kg:"kg"},e=[["m3","m\xb3","立方米","方"],["m2","m\xb2","㎡","平方米"],["m","米","延长米"],["t","吨"],["kg","千克","公斤"],["km","公里","千米"]];function f(a){let b=String(a||"").trim().toLowerCase();return Object.prototype.hasOwnProperty.call(d,b)?d[b]:b}function g(a,b){let c=String(a||"").trim().toLowerCase(),d=String(b||"").trim().toLowerCase();return!c||!d||c===d||f(c)===f(d)||e.some(a=>a.includes(c)&&a.includes(d))}let h="平方米|立方米|m2|m3|m\xb2|m\xb3|㎡|延长米|公里|千米|kg|km|吨|座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|t"},10025:(a,b,c)=>{function d(a){let b=String(a||"").trim();return b?/\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日/u.test(b)?"date":/\d+(?:\.\d+)?\s*(?:万元|亿元|元)/u.test(b)&&!/\d+(?:\.\d+)?\s*(?:万元|元)\s*\//u.test(b)?"money":/(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC|JTG|SL|DL|YB|HG)\s*\/?\s*T?\s*[\d.]+/iu.test(b)?"standard":/(?:C\d{2,3}|HRB\d{3,4}|HPB\d{3}|DN\s*\d+|Φ\s*\d+|φ\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|kV|MPa|kPa|kW|W|A|V))/u.test(b)?"spec":/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|株|棵|处|项|日历天|天|层|樘|扇|片|组|件|孔|盏)/u.test(b)?"measure":"text":"text"}c.d(b,{M0:()=>k,Oq:()=>j,Su:()=>s,UD:()=>i,dm:()=>d,f2:()=>l,yJ:()=>e});let e="变更修改为|变更为|变更至|澄清为|澄清修改为|修改为|调整为|调整至|更正为|修正为|现为|现改为|更改为",f=/[。;;\n]/u,g=RegExp("\\d{4}\\s*年\\s*\\d{1,2}\\s*月\\s*\\d{1,2}\\s*日|\\d+(?:\\.\\d+)?\\s*(?:万元|亿元|日历天|个?月|天|m2|m3|m\xb2|m\xb3|㎡|mm|cm|km|m|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|kV|MPa|kPa|kW|W|A|V|%)|(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC)\\s*/?\\s*T?\\s*[\\d.]+(?:-\\d{2,4})?","giu"),h=/(?:第\s*)?(\d{1,2}(?:\.\d{1,2}){1,3})\s*(?:条|项|款)?/u;function i(a){let b=RegExp(`(${e})\\s*[::]?\\s*(${g.source}|[\\u4e00-\\u9fa5]{2,12})`,"u"),c=RegExp(g.source,"gu"),i=RegExp(`([\\u4e00-\\u9fa5]{2,8})\\s*[::]\\s*(${g.source})`,"gu"),j=[],k=new Set,l=a=>{let b=`${a.superseded}\u0000${a.effective}`;a.superseded===a.effective||k.has(b)||(k.add(b),j.push(a))},m=/变更|澄清|补疑|补遗|调整为|修改为|更正/;for(let g of a){let a=String(g.text||"");if(a&&m.test(a))for(let j of a.split(f)){let a=j.replace(/\s+/gu,"");if(a.length<4)continue;let f=function(a){let b=[],c=h.exec(a)?.[1];c&&b.push(c);let d=a.match(/[一-龥]{2,8}(?=[::))]?(?:为|是|按|采用|统一|变更|澄清|调整))/gu);return d&&b.push(...d.slice(0,3)),[...new Set(b)]}(a),k=b.exec(a);if(k){let b=k[2].trim();if(!/\d/u.test(b)||RegExp(e,"u").test(b))continue;let h=d(b);for(let e of[...a.slice(0,k.index).matchAll(c)].map(a=>a[0].trim()))e!==b&&d(e)===h&&l({superseded:e,effective:b,scope:f,evidence:[{source:g.source,snippet:a.slice(0,120)}],kind:"override"});continue}let m=[...a.matchAll(i)];if(m.length>=2){let b=new Map;for(let a of m){let c=b.get(a[1])||[];c.push(a[2].trim()),b.set(a[1],c)}for(let[c,d]of b){let b=[...new Set(d)];b.length<2||l({superseded:b[0],effective:b[b.length-1],scope:[...new Set([...f,c])],evidence:[{source:g.source,snippet:a.slice(0,120)}],kind:"override"})}}}}return j}function j(a){let b=new Map;for(let c of a){let a=`${c.superseded}\u0000${c.scope.join("|")}`,d=b.get(a);if(!d){b.set(a,c);continue}let e=(d.effective===c.superseded,{...c,superseded:d.superseded,evidence:[...d.evidence,...c.evidence],scope:[...new Set([...d.scope,...c.scope])]});b.set(a,e)}return[...b.values()]}function k(a,b){let c=String(a||""),d=[];for(let a of b)"override"===a.kind&&a.superseded&&c.includes(a.superseded)&&(c=c.replace(RegExp(a.superseded.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),(b,e)=>{if(e>0&&/[\d.,]/u.test(c[e-1]))return b;let f=c.slice(Math.max(0,e-12),e+b.length+12);return/原(?:为|值|内容|计划|合同|招标)|此前|由[^,。;]{0,12}(?:变更|调整)|变更过程/u.test(f)?b:(d.push({from:b,to:a.effective}),a.effective)}));return{text:c,applied:d}}function l(a,b){if(!b||0===b.length)return 0;let c=0;for(let d of a){let a=k(String(d.content??""),b);0!==a.applied.length&&(d.content=a.text,c+=1)}return c}let m=[{attribute:"合同金额",re:/(?:最高投标限价|招标控制价|合同估算价(?:格)?|工程估算价|投标限价)(?<gap>[^。;\n]{0,16}?)(?:现)?(?:调整)?为?\s*[::]?\s*(?<num>[\d,]+(?:\.\d+)?)\s*(?<unit>亿元|万元|元)/u},{attribute:"计划工期",re:/(?:计划工期|合同工期|总工期)(?<gap>[^。;\n]{0,16}?)(?<num>[\d,]+(?:\.\d+)?)\s*个?\s*日历天/u},{attribute:"开工日期",re:/(?:计划)?开工日期(?<gap>[^。;\n]{0,8}?)[::]?\s*(?<num>20\d{2}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日)/u},{attribute:"暂列金额",re:/(?:暂列金额|暂列金)(?<gap>[^。;\n\d]{0,12}?)(?<num>[\d,]+(?:\.\d+)?)\s*(?<unit>亿元|万元|元)/u}],n=RegExp(`(?:${e})\\s*[::]?\\s*(\\d{1,4})\\s*个?\\s*日历天`,"u"),o=/(?:计划工期|合同工期|总工期|工期)/u,p=/(?:暂列|暂估|分部分项|单项工程|单位工程|措施项目|其他项目|规费|税金|人工费|材料费|机械费|管理费|利润|单价|合价)/u,q=/现澄清为|现变更为|澄清为如下|澄清修改为|变更修改为|现调整为|全部作废|以本次[^。;\n]{0,10}为准|以澄清[^。;\n]{0,6}为准/u,r=/^\s*(?:\d{1,2}\s*[、..]|问\s*[::])/u;function s(a){let b=[],c=/作废|以本次(?:招标)?答疑附件(?:中材料)?为准|以澄清(?:文件)?为准/u;for(let d of a){let a=String(d.text||"");if(!a)continue;let f=!1;for(let g of a.split(/\n\s*\n/u))for(let a of(r.test(g)&&/[??]/u.test(g)&&(f=!1),q.test(g)&&(f=!0),g.split(/[。;;\n]/u))){let g;if(a.length<6)continue;let h=c.test(a),i=f||q.test(a),j=o.test(a)?n.exec(a)?.[1]:void 0;j&&b.push({attribute:"计划工期",value:`${j}日历天`,source:d.source,supersedesPriorMaterials:h,clarified:i});let k=a.search(/(?:暂列金额|暂列金)/u),l=k>=0?RegExp(`(?:${e})\\s*[::]?\\s*(\\d+(?:\\.\\d+)?)\\s*(亿元|万元|元)`,"gu"):void 0;if(l){for(let b of a.matchAll(l))if((b.index??0)>k){g=b;break}}for(let c of(g&&b.push({attribute:"暂列金额",value:`${g[1]}${g[2]||""}`,source:d.source,supersedesPriorMaterials:h,clarified:i}),m)){if("计划工期"===c.attribute&&j||"暂列金额"===c.attribute&&g)continue;let e=c.re.exec(a);if(!e?.groups)continue;let f=e.groups.num?.replace(/,/gu,"")||"";if(!f||p.test(e.groups.gap||""))continue;let k="合同金额"===c.attribute||"暂列金额"===c.attribute?`${f}${e.groups.unit||""}`:"计划工期"===c.attribute?`${f}日历天`:f.trim();b.push({attribute:c.attribute,value:k,source:d.source,supersedesPriorMaterials:h,clarified:i})}}}return b}},10751:(a,b,c)=>{c.d(b,{Be:()=>p,Bf:()=>k,IV:()=>g,L$:()=>n,Xe:()=>l,i2:()=>o,yB:()=>m});let d=[{re:/挖掘机/u,alias:"挖机"},{re:/塔式起重机|塔吊/u,alias:"塔吊"},{re:/施工升降机|施工电梯/u,alias:"施工电梯"},{re:/汽车起重机|汽车吊|吊车/u,alias:"汽车吊"},{re:/装载机/u,alias:"铲车"},{re:/混凝土输送泵|地泵|泵车/u,alias:"地泵"},{re:/插入式振捣器|振捣棒/u,alias:"振捣棒"}];function e(a,b,c){return void 0!==a&&void 0!==b?Math.round((a+b)/2):void 0!==b?b:void 0!==a?a:c}let f=[a=>{let b=[];return a.contract.totalDays>0&&b.push({id:"",kind:"fact",domain:"contract",label:"总工期",anchors:["总工期","合同工期","施工工期","工期"],value:a.contract.totalDays,unit:"日历天",source:"招标文件/合同条款",paths:["contract.totalDays"]}),void 0!==a.contract.estimatedAmount&&a.contract.estimatedAmount>0&&b.push({id:"",kind:"fact",domain:"contract",label:"合同估算价",anchors:["合同估算价","估算价","工程造价"],value:a.contract.estimatedAmount,unit:"万元",source:"招标文件",amountRestricted:!0,paths:["contract.estimatedAmount"]}),b},a=>{let b=[];(a.milestones??[]).forEach((a,c)=>{(a.duration??0)<=0||b.push({id:"",kind:"derived",domain:"schedule",label:`里程碑:${a.label}`,anchors:[a.label],value:a.duration??0,unit:"天",source:"里程碑推导",trace:a.basis,paths:[`milestones[${c}].duration`]})});let c=(a.milestones??[]).reduce((a,b)=>a+(b.duration??0),0);return a.contract.totalDays>0&&b.push({id:"",kind:"derived",domain:"schedule",label:"机动工期",anchors:["机动工期","机动时间","工期余量"],value:Math.max(0,a.contract.totalDays-c),unit:"天",source:"工期推导",trace:`总工期 ${a.contract.totalDays} 天 − 里程碑合计 ${c} 天`,paths:[]}),(a.schedule??[]).forEach((a,c)=>{b.push({id:"",kind:"derived",domain:"schedule",label:`工序:${a.label}`,anchors:[a.label],value:a.duration,unit:"天",spec:`第${a.startDay}~${a.endDay}天`,source:"进度工序推导",trace:a.basis,paths:[`schedule[${c}].seq`,`schedule[${c}].duration`,`schedule[${c}].startDay`,`schedule[${c}].endDay`]})}),b},a=>{let b=a.resources.labor,c=[];return b.peakValue>0&&c.push({id:"",kind:"derived",domain:"labor",label:"劳动力峰值",anchors:["劳动力峰值","高峰人数","峰值人数"],value:b.peakValue,unit:"人",source:"劳动力推导",trace:b.peakBasis,paths:["resources.labor.peak.min","resources.labor.peak.max","resources.labor.peakValue"]}),(b.byPhase??[]).forEach((a,b)=>{(void 0!==a.min||void 0!==a.max)&&c.push({id:"",kind:"derived",domain:"labor",label:`阶段劳动力:${a.phase}`,anchors:[a.phase],value:e(a.min,a.max,0),unit:"人",source:"劳动力推导",trace:a.basis,paths:[`resources.labor.byPhase[${b}].min`,`resources.labor.byPhase[${b}].max`]})}),(b.byTrade??[]).forEach((a,b)=>{(void 0!==a.min||void 0!==a.max)&&c.push({id:"",kind:"derived",domain:"labor",label:`工种区间:${a.trade}`,anchors:[a.trade],value:e(a.min,a.max,0),unit:"人",source:"劳动力推导",trace:a.basis,paths:[`resources.labor.byTrade[${b}].min`,`resources.labor.byTrade[${b}].max`]})}),(b.composition??[]).forEach((a,b)=>{c.push({id:"",kind:"derived",domain:"labor",label:`工种构成:${a.trade}`,anchors:[a.trade],value:a.count,unit:"人",source:"劳动力推导",trace:a.basis,paths:[`resources.labor.composition[${b}].count`]})}),c},a=>(a.resources.equipment??[]).map((a,b)=>{let c=d.filter(b=>b.re.test(a.name)).map(a=>a.alias);return{id:"",kind:"derived",domain:"equipment",label:a.name,anchors:[a.name,...c.filter(b=>b!==a.name)],value:a.quantity??e(a.min,a.max,1),unit:"台",spec:a.spec,source:"机械推导",trace:a.basis,paths:[`resources.equipment[${b}].quantity`,`resources.equipment[${b}].min`,`resources.equipment[${b}].max`]}}),a=>(a.materialsPlan??[]).map((a,b)=>({id:"",kind:"fact",domain:"material",label:a.spec?`${a.name}(${a.spec})`:a.name,anchors:[a.name],value:a.quantity??a.spec??a.name,unit:a.unit,spec:a.spec,source:"清单汇总",trace:a.basis,paths:[`materialsPlan[${b}].quantity`]})),a=>Object.entries(a.quantities??{}).map(([a,b])=>({id:"",kind:"fact",domain:"quantity",label:a,anchors:[a],value:b.value,unit:b.unit,source:b.sourceFile||"工程量清单",groups:b.groups?.length?b.groups:void 0,specBreakdown:b.specBreakdown?.length?b.specBreakdown:void 0,paths:[`quantities.${a}.value`,...(b.groups??[]).map((b,c)=>`quantities.${a}.groups[${c}].value`),...(b.specBreakdown??[]).map((b,c)=>`quantities.${a}.specBreakdown[${c}].value`)]})),a=>Object.entries(a.specAuthorities??{}).map(([a,b])=>({id:"",kind:"fact",domain:"spec",label:`规格:${a}`,anchors:[a],value:b,unit:"",source:"清单特征",paths:[]})),a=>{let b=[],c=a.earthworkBalance;if(!c)return b;for(let a of[{key:"excavation",label:"挖方"},{key:"backfill",label:"填方"},{key:"disposal",label:"弃方"}]){let d=c[a.key];void 0===d||d<=0||b.push({id:"",kind:"derived",domain:"earthwork",label:`土方平衡:${a.label}`,anchors:[`土方${a.label}`,a.label],value:d,unit:"m\xb3",source:"土方平衡推导",trace:c.basis,paths:[`earthworkBalance.${a.key}`]})}return b},a=>{let b=[];return(a.tempLand??[]).forEach((a,c)=>{void 0===a.area||a.area<=0||b.push({id:"",kind:"derived",domain:"site",label:`临时设施:${a.purpose}`,anchors:[a.purpose],value:a.area,unit:"㎡",source:"总平面布置推导",trace:a.basis,paths:[`tempLand[${c}].area`]})}),b},a=>{let b=(a.testPlan??[]).map((a,b)=>({id:"",kind:"derived",domain:"test",label:`试验计划:${a.scope}`,anchors:[a.scope],value:a.count??a.scope,unit:void 0!==a.count?"次":"",source:"试验计划推导",trace:a.basis,paths:[`testPlan[${b}].count`]}));return(a.testInstruments??[]).forEach((a,c)=>{void 0!==a.quantity&&b.push({id:"",kind:"derived",domain:"test",label:`试验仪器:${a.name}`,anchors:[a.name],value:a.quantity,unit:"台",spec:a.spec,source:"仪器配置推导",trace:a.basis,paths:[`testInstruments[${c}].quantity`]})}),b},a=>{let b=a.redLineFacts??[],c=b.map(a=>({id:"",kind:"fact",domain:"redline",label:a.key,anchors:[a.key],value:a.value,unit:"",source:a.source,amountRestricted:a.amount,paths:[]})),d=b.find(a=>"自然村数量"===a.key),e=d?/(\d+)/u.exec(d.value):null;return e&&c.push({id:"",kind:"fact",domain:"redline",label:"自然村数量",anchors:["自然村数量","自然村"],value:Number(e[1]),unit:"个",source:d?.source||"招标文件",paths:[]}),c}];function g(a){let b=function(a){let b=new Map;for(let c of a){let a=`${c.domain}:${c.label}`,d=b.get(a)??0;b.set(a,d+1),c.id=0===d?a:`${a}#${d+1}`}return a}(f.flatMap(b=>b(a))),c=new Map;for(let a of b){let b=c.get(a.domain);b?b.push(a):c.set(a.domain,[a])}return{entries:b,byDomain:c}}let h=["contract","schedule","labor","equipment","material","quantity","spec","earthwork","site","test","redline"];function i(a,b){return a.startsWith(b)?a.slice(b.length):a}let j={contract:a=>{let b=[],c=a.find(a=>"总工期"===a.label);return c&&b.push(`- 总工期:${c.value} 日历天`),b},schedule:a=>{let b=[],c=a.filter(a=>a.label.startsWith("里程碑:"));c.length>0&&b.push(`- 里程碑(各节点用时,总和 ≤ 总工期):${c.map(a=>`${i(a.label,"里程碑:")} ${a.value} 天`).join("、")}`);let d=a.filter(a=>a.label.startsWith("工序:"));d.length>0&&b.push(`- 进度工序(里程碑展开,起止天序系统推导,不得自设):${d.map(a=>`${i(a.label,"工序:")} ${a.spec||`${a.value} 天`}`).join("、")}`);let e=a.find(a=>"机动工期"===a.label);return e&&b.push(`- 机动工期:${e.value} 天`),b},labor:a=>{let b=[],c=a.find(a=>"劳动力峰值"===a.label);c&&b.push(`- 劳动力峰值:${c.value} 人(清单工效推导口径唯一峰值,各章必须引用该值,不得自设其他峰值)`);let d=a.filter(a=>a.label.startsWith("阶段劳动力:"));d.length>0&&b.push(`- 分阶段劳动力投入(各阶段同时在场人数,分阶段计划表数据源):${d.map(a=>`${i(a.label,"阶段劳动力:")} ${a.value} 人`).join("、")}`);let e=a.filter(a=>a.label.startsWith("工种区间:"));e.length>0&&b.push(`- 工种区间(区间中值参考,不得作为工种表口径,不得自设):${e.map(a=>`${i(a.label,"工种区间:")} ${a.value} 人`).join("、")}`);let f=a.filter(a=>a.label.startsWith("工种构成:"));return f.length>0&&b.push(`- 工种构成(合计=${c?.value??0} 人,写作层工种表唯一数据源,不得自设构成):${f.map(a=>`${i(a.label,"工种构成:")} ${a.value} 人`).join("、")}`),b},equipment:a=>0===a.length?[]:[`- 主要机械(台数唯一口径,不得自设):${a.map(a=>`${a.label}${a.spec?`(${a.spec})`:""} ${a.value} 台`).join("、")}`],material:a=>{if(0===a.length)return[];let b=[`- 物资计划\xb7主要材料(清单汇总,名称、型号规格、数量必须与此一致;清单明确给出的规格是事实数据,未列材料不得自编型号规格):${a.map(a=>`${a.label} ${a.value}${a.unit}`).join("、")}`],c=new Map;for(let b of a){let a=b.anchors[0]??b.label,d=c.get(a);d?d.push(b):c.set(a,[b])}for(let[a,d]of c){if(d.length<2)continue;let c=d.reduce((a,b)=>a+("number"==typeof b.value?b.value:0),0);b.push(`- ${a}规格-数量拆分(逐项照抄,不得自行分配/改动):${d.map(a=>`${a.spec||"未标规格"} ${a.value}${a.unit}`).join(" + ")}(合计 ${Math.round(1e3*c)/1e3}${d[0]?.unit??""})`)}return b},quantity:a=>{if(0===a.length)return[];let b=[`- 工程量清单(合计口径;分组明细为合法多值):${a.map(a=>`${a.label} ${a.value}${a.unit}`+(a.groups?.length?`(分组:${a.groups.map(a=>`${a.group} ${a.value}`).join("、")})`:"")).join("、")}`];for(let c of a){if((c.specBreakdown?.length??0)<2)continue;let a="number"==typeof c.value?c.value:0;b.push(`- ${c.label}规格-数量拆分(逐项照抄,不得自行分配/改动):${c.specBreakdown.map(a=>`${a.spec} ${a.value}${c.unit}`).join(" + ")}(合计 ${a}${c.unit})`)}return b},spec:a=>0===a.length?[]:[`- 规格权威(清单特征原文,必须原样引用,不得自编):${a.map(a=>`${i(a.label,"规格:")}=${a.value}`).join("、")}`],earthwork:a=>0===a.length?[]:[`- 土方平衡(清单汇总口径):${a.map(a=>`${i(a.label,"土方平衡:")} ${a.value}${a.unit}`).join("、")}`],site:a=>0===a.length?[]:[`- 临时设施与用地(面积/位置规划,不得自设):${a.map(a=>`${i(a.label,"临时设施:")} ${a.value}${a.unit}`).join("、")}`],test:a=>{let b=[],c=a.filter(a=>a.label.startsWith("试验计划:"));c.length>0&&b.push(`- 试验计划(推导口径,不得自设):${c.map(a=>`${i(a.label,"试验计划:")} ${a.value}${a.unit}`).join("、")}`);let d=a.filter(a=>a.label.startsWith("试验仪器:"));return d.length>0&&b.push(`- 试验检测仪器(配置清单,不得自设):${d.map(a=>`${i(a.label,"试验仪器:")}${a.spec?`(${a.spec})`:""} ${a.value} 台`).join("、")}`),b},redline:a=>{let b=new Set,c=a.filter(a=>!b.has(a.label)&&(b.add(a.label),!0)),d=[],e=c.filter(a=>!a.amountRestricted),f=c.filter(a=>a.amountRestricted);return e.length>0&&d.push(`- 评审红线事实(must_cite,正文必须逐条出现且数值一致):${e.map(a=>`${a.label}=${a.value}`).join(";")}`),f.length>0&&d.push(`- 金额类红线事实(商务禁区,不进正文):${f.map(a=>`${a.label}=${a.value}`).join(";")}`),d}};function k(a,b){let c=b&&b.length>0?h.filter(a=>b.includes(a)):h,d=[];for(let b of c)d.push(...j[b](a.byDomain.get(b)??[]));return d}function l(a,b){let c=[];for(let d of h){let e=a.byDomain.get(d)??[];if("quantity"===d||"material"===d){let a=e.filter(a=>(function(a,b){let c=[a.label,...a.anchors].filter(Boolean);return b.some(a=>c.some(b=>b.includes(a)||a.includes(b)))})(a,b.blockTokens)),f="quantity"===d?b.quantityCharsCap??9e3:b.materialCharsCap??7e3;c.push(...function(a,b,c){if(0===b.length)return[];let d=j[a],e=d(b);if(e.join("\n").length<=c)return e;let f=b.length;for(;f>0&&!((f=Math.floor(.9*f))<=0);){let a=d(b.slice(0,f));if(a.join("\n").length<=c)return a[0]+=`(另有 ${b.length-f} 条未列出,其余清单条目见绑定材料)`,a}return["- (本节相关清单条目超出预算未展开;引用清单数值必须逐字取自绑定材料,不得估计)"]}(d,a,f))}else c.push(...j[d](e))}return c}function m(a){if(!a)return;let b=(g(a).byDomain.get("labor")??[]).find(a=>"劳动力峰值"===a.label);return b&&"number"==typeof b.value&&b.value>0?b.value:void 0}function n(a){return a?(g(a).byDomain.get("quantity")??[]).filter(a=>"number"==typeof a.value&&(a.groups?.length??0)>=2).map(a=>({name:a.label,value:a.value,unit:a.unit,groups:a.groups})):[]}function o(a){if(!a)return[];let b="阶段劳动力:";return(g(a).byDomain.get("labor")??[]).filter(a=>a.label.startsWith(b)&&"number"==typeof a.value&&a.value>0).map(a=>({phase:a.label.slice(b.length),value:a.value,trace:a.trace}))}function p(a){if(!a)return[];let b=new Map;for(let c of g(a).byDomain.get("equipment")??[])"number"!=typeof c.value||c.value<=0||b.set(c.label,(b.get(c.label)??0)+c.value);return[...b.entries()].map(([a,b])=>({name:a,count:b}))}},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(/[—–‑﹣]/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]}},11628:(a,b,c)=>{c.d(b,{A3:()=>s,De:()=>v,EI:()=>l,H8:()=>h,LD:()=>j,Ui:()=>u,YC:()=>w,b3:()=>C,cg:()=>o,hr:()=>A,mc:()=>E,mf:()=>n,pN:()=>f,s6:()=>B,wI:()=>e});var d=c(10025);function e(a){return(a.match(/�|/gu)?.length||0)>=2||Array.from(a).some(a=>{let b=a.charCodeAt(0);return 65533===b||b<32&&9!==b&&10!==b&&13!==b})}function f(a){let b=RegExp(`(?:${d.yJ})\\s*[::]?\\s*`,"u").exec(a);return b?a.slice((b.index??0)+b[0].length).trim():a}let g=/条款号|条款名称|编列内容|评标办法前附表|评标办法正文/u;function h(a){return g.test(a)}let i=/(?<=[一-龥])[—–―─--]|一(?=[一-龥])/gu;function j(a){return a.replace(i,"")}let k=[[/经济技术开发区/gu,"经开区"],[/高新技术产业开发区/gu,"高新区"],[/经济开发区/gu,"经开区"],[/高新技术开发区/gu,"高新区"],[/产业开发区/gu,"开发区"]];function l(a){let b=a;for(let[a,c]of k)b=b.replace(a,c);return b}let m=/^\d+\s*个?\s*(?:日历天|天|个月|月|周|年)$/u,n=/^20\d{2}\s*(?:年\s*\d{1,2}\s*月|[.\-/]\d{1,2}(?:[.\-/]|$))/u;function o(a){return m.test(a)?"duration":n.test(a)?"date":"plain"}let p=/^(?:符合|满足|遵照|遵循|按照|依据|响应)/u,q=/第\s*[\d一二三四五六七八九十..]+\s*(?:条|项|款|章|节)/u,r=/(?:规定|要求)$/u;function s(a){let b=String(a||"").trim();return!!b&&!(b.length>80)&&p.test(b)&&q.test(b)&&r.test(b)}let t=/[((][^))]{0,12}[))]\s*$/u;function u(a){let b=a.trim(),c="";for(;c!==b;)c=b,b=b.replace(t,"").trim();return b||a.trim()}function v(a){let b=String(a||""),c=b.replace(/^(?:招标人|招标单位|建设单位|发包人|项目名称|工程名称|项目编号|招标项目编号|标段名称|建设地点|建设规模|招标范围|计划工期|合同工期|质量标准|质量目标)[::]\s*/u,"");return c!==b?c:b.replace(/^[一-龥]{2,10}[::]\s*(?=(?:20\d{2}\s*年|\d+\s*(?:日历天|天|个月|月|年)))/u,"")}let w=String.raw`m²|m³|㎡|mm|cm|m|米|MPa|kN|kV|kW|℃|°C|万元|元|人|天|日|个|层|樘|处|套|台|t|吨`,x=RegExp(String.raw`\d+(?:\.\d+)?\s*(?:${w})`,"u"),y=/[一-龥A-Za-z0-9_\-./²³°]/u,z=/[与和及]/u;function A(a,b){let c=Math.max(0,Math.min(b,a.length));for(let b=0;b<64&&c>0;b+=1){let b=a[c-1];if(y.test(b)){let d=a.slice(Math.max(0,c-1-30),c-1);if(z.test(b)&&x.test(d))break;c-=1;continue}if(")"===b||")"===b){let d=")"===b?"(":"(",e=0,f=c-1;for(;f>=0;){let c=a[f];if(c===b)e+=1;else if(c===d&&0==(e-=1))break;f-=1}if(f<0)break;c=f;continue}if("("===b||"("===b){let d="("===b?")":")";if(!a.includes(d,c))break;c-=1;continue}break}return c}function B(a,b,c=0){let d=Math.max(0,Math.min(b,a.length));for(let b=0;b<64&&d<a.length;b+=1){let b=a[d];if(y.test(b)){d+=1;continue}if("("===b||"("===b){let c="("===b?")":")";if(!a.includes(c,d))break;d+=1;continue}if(")"===b||")"===b){let e=")"===b?"(":"(";if(!a.slice(Math.max(0,c),d).includes(e))break;d+=1;continue}break}return d}function C(a){let b=0;for(let c of String(a||""))if("("===c||"("===c)b+=1;else if((")"===c||")"===c)&&(b-=1)<0)return!0;return!1}function D(a,b){let c=a=>String(a||"").replace(/[(())]/gu,""),d=c(a),e=c(b);return 0!==d.length&&!(d.length>=e.length)&&e.includes(d)}function E(a,b){for(let c of String(a||"").matchAll(/[((][^(())]{1,20}[))]/gu))if(D(b,c[0])||D(c[0],b))return c[0]}},12863:(a,b,c)=>{c.d(b,{Dp:()=>e,Dq:()=>q,Ei:()=>f,GG:()=>t,Lp:()=>x,Mb:()=>r,P3:()=>n,Pt:()=>v,QW:()=>j,Rm:()=>i,YZ:()=>w,a0:()=>p,dc:()=>k,hI:()=>u,mO:()=>m,nv:()=>y,re:()=>l,rx:()=>h,vC:()=>g,z4:()=>s});var d=c(22157);let e=/(?:高峰期|高峰|峰值)[^。;;\n]{0,20}?(?:约)?\s*([\d,]+)\s*人/g,f=["基坑与基础","二次结构与砌体","施工准备","地下结构","主体结构","装饰装修","机电安装","室外工程","收尾调试","临时设施","土方","基坑","基础"],g=/(?:铺装工|钢筋工|混凝土工|架子工|砌筑工|抹灰工|防水工|油漆工|水暖工|水电工|管道工|电焊工|起重工|机械工|司索工|信号工|塔吊司机|测量工|试验工|绿化工|管网工|装修工|装饰工|安装工|养护工|保温工|幕墙工|防腐工|操作工|市政工|模板工|木工|瓦工|焊工|电工|普工)(?!程|序|艺|期)/u;function h(a,b){let c,d=a.slice(0,b),e=Math.max(d.lastIndexOf("。"),d.lastIndexOf(";"),d.lastIndexOf(";"),d.lastIndexOf("\n")),h=a.slice(Math.max(0,e+1),b),i=Math.max(h.lastIndexOf(","),h.lastIndexOf("、"));i>=0&&(/(?:高峰期|高峰|峰值)/u.test(h.slice(0,i))||!g.test(h.slice(0,i)))&&(h=h.slice(i+1));let j=-1;for(let a of f){let b=h.lastIndexOf(a);b>j&&(j=b,c=a)}let k=[...h.matchAll(/[^,,。;;::\n]{1,14}阶段/gu)].filter(a=>{let b=a[0].slice(0,-2);return!/^(?:各|每个|不同|相应)/u.test(b)&&!/^[一二三四五六七八九十\d]{1,3}个/u.test(b)&&!f.some(a=>a.startsWith(b))}).pop();return k&&(k.index??0)>j&&(c=k[0]),c}function i(a){let b=[],c=a.split(/\r?\n/u),d=/^\|.+\|$/u,e=/阶段|时期|工期|工序|进度/u,f=/人数|劳动力|作业人员|施工人员|投入人数/u,h=/^:?-{3,}:?$/u,i=a=>a.replace(/[*_`~]/gu,"").trim();for(let a=0;a<c.length;a+=1){let j,k,l;if(!d.test(c[a].trim()))continue;let m=[];for(;a<c.length&&d.test(c[a].trim());)m.push(c[a].trim()),a+=1;if(a-=1,m.length<3)continue;let n=a=>a.split("|").map(a=>a.trim()).slice(1,-1),o=m.findIndex((a,b)=>b>0&&n(a).every(a=>h.test(a)));if(1===o&&m.length>=3)j=n(m[0]).map(i),k=m.slice(2);else{if(-1!==o||!(m.length>=2))continue;let a=n(m[0]).map(i);if(!(e.test(a.join("|"))&&f.test(a.join("|"))))continue;j=a,k=m.slice(1)}let p=j.findIndex(a=>e.test(a)),q=j.findIndex(a=>/高峰|峰值/u.test(a)&&f.test(a)),r=q>=0?q:j.findIndex(a=>f.test(a));if(r<0||p>=0&&p===r||/岗位/u.test(j.join("|"))&&/职责|持证|职称/u.test(j.join("|")))continue;let s=j.some(a=>/工种|岗位|班组|人员类别|管理人员/u.test(a)),t=s?j.findIndex(a=>/工种|岗位|班组|人员类别|管理人员/u.test(a)):-1,u=[],v=0,w=[];for(let a of k){let b=n(a),c=b[r]||"",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!==r&&/合计|总计|小计/u.test(a))){l=e;continue}if(u.push(e),v+=e,t>=0){let a=(b[t]||"").replace(/[*_`~]/gu,"").trim(),c=g.exec(a)?.[0];c&&w.push({trade:c,value:e})}}}if(0===u.length&&void 0===l)continue;let x=Math.max(...u.length>0?u:[l||0]);b.push({countCells:u,totalCell:l,detailSum:v,peak:x,hasPeakCol:q>=0,hasTradeCol:s,hasStageCol:p>=0,tradeCells:w})}return b}function j(a){let b=i(a).filter(a=>!a.hasTradeCol).map(a=>a.peak);return b.length>0?Math.max(...b):void 0}function k(a){let b,c=j(a);if(void 0!==c)return c;for(let c of a.matchAll(e)){let d=Number(c[1].replace(/[,,]/gu,""));Number.isFinite(d)&&!(d<=0)&&!h(a,c.index+c[0].indexOf(c[1]))&&(void 0===b||d>b)&&(b=d)}return b}let l=/钻孔灌注桩|高压旋喷桩|旋喷桩|搅拌桩|灌注桩|排桩|地下连续墙|咬合桩|支护桩/u,m=/土钉|放坡|喷锚|挂网|锚杆|护坡/u;function n(a){let b=a?.canonical?.byKey.foundation_support_form?.value,c=(0,d.lG)(b);if(!c)return;let e=m.test(c),f=l.test(c);return e&&!f?"slope":f&&!e?"pile":void 0}let o={零:0,一:1,二:2,两:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};function p(a){return/^\d+$/.test(a)?Number(a):"十"===a?10:a.startsWith("十")&&2===a.length?10+(o[a[1]??""]??0):a.endsWith("十")&&2===a.length?(o[a[0]??""]??0)*10:1===a.length&&void 0!==o[a]?o[a]:void 0}function q(a){let b=/养护[^。;;|]{0,10}?([一二两三四五六七八九十]+|\d{1,2})\s*年/gu,c=[a?.bills??[],a?.billItemFacts??[],a?.preciseFacts??[],a?.project??[]],e=(a,c)=>{for(let d of a.matchAll(b)){let a=p(d[1]??"");void 0!==a&&a>0&&a<=20&&c.set(a,(c.get(a)||0)+1)}},f=a=>{let b,c=0;for(let[d,e]of a)(e>c||e===c&&void 0!==b&&d>b)&&(b=d,c=e);return b};for(let a of c){let b=new Map;for(let c of a){let a=`${c.key||""}${c.fieldName||""}${c.fieldId||""}`;e((0,d.lG)(c.value),b),e(a,b)}if(b.size>0)return f(b)}}function r(a){let b=a=>/路灯/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`),c=(a?.billItemFacts??[]).filter(b),e=c.length>0?c:[...a?.bills??[],...a?.preciseFacts??[]].filter(b),f=new Set,g=0;for(let a of e){if(f.has(a))continue;f.add(a);let b=(0,d.lG)(a.value);for(let a of(b.split("|工程量:")[1]??b).matchAll(/(\d+)\s*(?:套|盏|杆)/gu)){let b=Number(a[1]);Number.isFinite(b)&&b>0&&(g+=b)}}return g>0?g:void 0}function s(a){let b=a.canonical?.byKey.excavation_depth?.value,c=[...(a.drawings||[]).map(a=>`${a.fieldName||a.key||""} ${(0,d.lG)(a.value)}`),...(a.project||[]).map(a=>`${a.fieldName||a.key||""} ${(0,d.lG)(a.value)}`),...(a.preciseFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,d.lG)(a.value)}`)].filter(Boolean),e=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?e(b):[],...c.flatMap(a=>/基坑开挖深度|基坑深度|开挖深度|坡底线|坑底标高/u.test(a)?e(a):[])].filter(a=>Number.isFinite(a)&&a>=1&&a<50);return f.length>0?Math.max(...f):void 0}function t(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 e=b((0,d.lG)(c.value));if(void 0!==e)return e}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 u(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 e=b((0,d.lG)(c.value));if(void 0!==e)return e}}function v(a){let b,c=[],e=a?.project??[];for(let a of e){let c=`${a.key||""}${a.fieldName||""}`;if(!/单体建筑面积|建设规模/u.test(c))continue;let e=(0,d.lG)(a.value).match(/(\d+(?:\.\d+)?)\s*(?:平方(?:米)?|㎡|m²)/u);if(e&&Number.isFinite(Number(e[1]))){b=Number(e[1]);break}}void 0!==b&&c.push(`建筑面积${b}平方米`);let f=JSON.stringify({project:e,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}function w(a){let b=a.trim().toLowerCase();return/(?:m2|m²|㎡)/.test(b)?"(?:㎡|m\xb2|m2)":/(?:m3|m³)/.test(b)?"(?:m\xb3|m3)":"t"===b||"吨"===b?"(?:吨|t)":a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function x(a){return a.split("").map(a=>"("===a||"("===a?"[((]?":")"===a||")"===a?"[))]?":/[.*+?^${}()|[\]\\]/u.test(a)?`\\${a}`:a).join("")}function y(a){let b=a=>/[.*+?^${}()|[\]\\]/u.test(a)?`\\${a}`:a,c="",d=0;for(;d<a.length;){let e=a[d];if("("===e||"("===e){let e=-1;for(let b=d+1;b<a.length;b+=1)if(")"===a[b]||")"===a[b]){e=b;break}if(e>d){let f=a.slice(d+1,e).split("").map(b).join("");c+=`(?:[((]?${f}[))]?|(?![((]))`,d=e+1;continue}}if("("===e||"("===e){c+="[((]?",d+=1;continue}if(")"===e||")"===e){c+="[))]?",d+=1;continue}c+=b(e),d+=1}return c}},13145:(a,b,c)=>{c.d(b,{C_:()=>I,Fc:()=>p,Ht:()=>H,Mp:()=>k,VS:()=>i,_k:()=>r,av:()=>u,j7:()=>n,jG:()=>j,vh:()=>h,w_:()=>G,yk:()=>m});var d=c(40299),e=c(70208),f=c(22157),g=c(46482);function h(a){return/^\s*\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a.trim())}function i(a){let b=a.trim();if(!b||/^#{1,6}\s+/u.test(b)||h(b))return!1;let c=(b.match(/\|/gu)||[]).length;return c>=2||c>=1&&/^\s*\|/u.test(b)||c>=1&&/\|\s*$/u.test(b)}function j(a){return a.replace(/[\u3000\u00a0\u2000-\u200f\u202f\u205f\ufeff]/gu,"")}function k(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").trim().split("|").map(a=>j(a).trim())}function l(a,b){let c=a.slice(0,b);for(;c.length<b;)c.push("");return`| ${c.join(" | ")} |`}function m(a){let b=(a=(0,d.BJ)(a)).replace(/\r?\n/gu,"\n").split("\n"),c=[];for(let a=0;a<b.length;){let d=b[a]||"",e=b[a+1]?.trim()===""?a+2:a+1,f=b[e]||"";if(i(d)&&h(f)){let g=k(d).length;for(c.push(d),e!==a+1&&c.push(b[a+1]||""),c.push(f),a=e+1;a<b.length&&i(b[a]||"");){let d=k(b[a]||"");if(d.length>g){let a=d.slice(g-1).join(";");c.push(l([...d.slice(0,g-1),a],g))}else c.push(b[a]||"");a+=1}continue}if(!i(d)){c.push(d),a+=1;continue}let g=[],j=a;for(;j<b.length&&i(b[j]||"");)g.push(b[j]||""),j+=1;let m=g.map(a=>k(a)),n=m.map(a=>a.length),o=n[0]||0,p=/^(?:项目名称|工程名称|项目编号|招标人|建设单位|建设地点|建设规模|计划工期|质量标准|合同估算价|招标范围)$/u;if(g.length<2||o<2||n.some(a=>a!==o)||m.some(a=>p.test(a[0]||""))){c.push(...g),a=j;continue}let q=m[0]||[],r=m.slice(1);if(!(q.length>=2&&q.every(a=>a.length>0&&a.length<=12&&!/\d/u.test(a)&&!/[。,;:]/u.test(a))&&r.some(a=>a.some(a=>/\d/u.test(a)||a.length>12)))){c.push(...g),a=j;continue}for(let a of(c.length>0&&c[c.length-1]?.trim()&&c.push(""),c.push(l(q,o)),c.push(l(Array.from({length:o},()=>"---"),o)),r))c.push(l(a,o));(a=j)<b.length&&b[a]?.trim()&&c.push("")}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}function n(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>/^\s*\|.*\|\s*$/u.test(a),f=a=>/^\s*\|\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a),g=a=>`| ${a.join(" | ")} |`;for(let a=0;a<b.length;){let h=b[a]||"",i=b[a+1]||"";if(!e(h)||!f(i)){c.push(h),a+=1;continue}let j=d(h),k=j.map((a,b)=>/^(?:资料来源|资料来源\/(?:说明|证明)|来源|证明)$/u.test(a)?b:-1).filter(a=>a>=0);if(0===k.length){c.push(h),a+=1;continue}let l=a=>a.filter((a,b)=>!k.includes(b));for(c.push(g(l(j))),c.push(g(l(d(i)).map(a=>a||"---"))),a+=2;a<b.length&&e(b[a]||"");)c.push(g(l(d(b[a]||"")))),a+=1}return c.join("\n").replace(/资料来源\/(?:说明|证明)/gu,"")}let o=["资料未明确","系统暂未","项目资料暂未","暂未明确","待确认","待资料复核","待系统","未检索到","资料不足","无法确认","建议补充","可核验信息","知识库","COL"];function p(a){if(!/做法(?:执行|参照|详见|见|依据|按)/u.test(a))return{markdown:a,fixedCount:0};let b=0;return{markdown:a.split("\n").map(a=>/^\s*#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)?a:a.replace(RegExp("(?:[,,]\\s*)?(?:构造做法|节点做法|做法)(?:执行|参照|详见|见|依据|按)[^。;!!??\\n]{0,30}(?:图集|国标\\s?[0-9]{1,4}[^。;!!??\\n]{0,16})(?=[。;!!??]|$)","gu"),()=>(b+=1,""))).join("\n"),fixedCount:b}}let q=/评标|投标|行贿|打招呼|递条子|廉洁|串标|围标|弄虚作假|干扰评标|纪律|澄清|中标|报价|清单计量|评审|保证金|开标|递交/u;async function r(a,b){if(!q.test(a))return a;let c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let b=c[a].trim();if(!(!b||/^\s*\|/u.test(b))){if(/^#{1,6}\s/u.test(b)){let c=b.replace(/^#{1,6}\s+/u,"");q.test(c)&&d.push({lineIndex:a,text:c,wholeLine:!0});continue}for(let b of c[a].split(/(?<=[。;;])/u)){let c=b.trim();c&&q.test(c)&&d.push({lineIndex:a,text:c,wholeLine:!1})}}}if(0===d.length)return a;let e=await b(d.map(a=>a.text)),g=new Set,h=new Map;for(let a=0;a<d.length;a+=1){let b=d[a];if(!((0,f.hh)(b.text)||e[a]))continue;if(b.wholeLine){g.add(b.lineIndex);continue}let c=h.get(b.lineIndex)||new Set;c.add(b.text),h.set(b.lineIndex,c)}return 0===g.size&&0===h.size?a:c.map((a,b)=>{if(g.has(b))return"";let c=h.get(b);return c?a.split(/(?<=[。;;])/u).filter(a=>!c.has(a.trim())).join(""):a}).join("\n")}function s(a,b){let c={"(":")","(":")","【":"】","「":"」"},d=[],e=[],f="";for(let g of a){if(f+=g,b.includes(g)&&0===e.length){d.push(f),f="";continue}let a=c[g];a?e.push(a):e.length>0&&g===e[e.length-1]&&e.pop()}return f&&d.push(f),d}function t(a){if(a.length<=380||/^\s*(#{1,6}\s+|[-*+]\s+|\|)/u.test(a))return a;let b=s(a,"。;").flatMap(a=>{let b=a.trim();return b?b.length>360?s(b,",,").map(a=>a.trim()).filter(Boolean):[b]:[]}),c=[],d="";for(let a of b)d&&d.length+a.length>360?(c.push(d),d=a):d+=a;return d&&c.push(d),c.join("\n\n")}function u(a){let b,c=a=>a.split("\n").filter(a=>a.length>380).length,d=c(a);if(0===d)return{markdown:a,splitCount:0};let e=a.split("\n"),f=e.findIndex(a=>/^#{1,2}\s*目录\s*$/u.test(a.trim()));if(f<0)b=e.map(t).join("\n");else{let a=e.length;for(let b=f+1;b<e.length;b+=1)if(/^#{1,2}\s+\S/u.test((e[b]??"").trim())){a=b;break}b=[...e.slice(0,f).map(t),...e.slice(f,a),...e.slice(a).map(t)].join("\n")}return{markdown:b,splitCount:d-c(b)}}function v(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){let d=b[a],e=d.trim(),g=/^(#{3,5})\s+/u.exec(e);if(!g){c.push(d);continue}let h=g[1].length,i=a+1,j=!1,k=0;for(;i<b.length;){let a=b[i].trim(),c=/^(#{1,6})\s+/u.exec(a);if(c){k=c[1].length;break}if(a){j=!0;break}i+=1}let l=f.V.test(e)&&4===h&&4===k;(j||k>h||l)&&c.push(d)}return c.join("\n")}function w(a){let b=a;for(let a=0;a<3;a+=1){let a=b.replace(/((施工概况|施工流程|施工方法)[::])\s*\*\*\2(?:[::])?\*\*[::]?/gu,"$1").replace(/(?<![\w|])\*\*(施工概况|施工流程|施工方法)(?:[::])\*\*[::]?/gu,"$1:").replace(/(?<![\w|])\*\*(施工概况|施工流程|施工方法)\*\*[::]/gu,"$1:");if(a===b)break;b=a}return b}function x(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){let d=b[a],e=d.trim(),f=(b[a+1]||"").trim();if(!e||e.startsWith("|")||e.startsWith("#")||!f.startsWith("|")){c.push(d);continue}let g=/(\|\s*[^|\n]{1,40}\s*){2,}\|\s*$/u.exec(e);if(!g){c.push(d);continue}let h=e.length-g[0].length,i=e.slice(0,h).trim();i&&c.push(i),c.push(g[0].trim())}return c.join("\n").replace(/\n{3,}/gu,"\n\n")}function y(a){return a.split(/\r?\n/u).map(a=>{let b=a.trim();return!b||/^#{1,6}\s+/u.test(b)||/^\d+(?:\.\d+)*\s+/u.test(b)||/^第[一二三四五六七八九十百千\d]+[章节]\s+/u.test(b)?a:a.replace(/([\u4e00-\u9fa5])[ \t\u00a0\u3000]+(?=[\u4e00-\u9fa5])/gu,"$1")}).join("\n")}function z(a){let b=a;return(b=(b=b.replace(/([\u4e00-\u9fa5A-Za-z]{2,16})工程工作包/gu,"$1工程")).replace(/(按|以|按每个|每个|的)工作包/gu,"$1专业工程")).replace(/工作包/gu,"专业工程")}function A(a){let b=a.split(/\r?\n/u),c=b.map(a=>{let b=/^#{3,4}\s+(.+)$/u.exec(a.trim());return b&&(0,e.mq)((0,e.GQ)((b[1]||"").trim()))?"":a});return c.every((a,c)=>a===b[c])?a:c.join("\n").replace(/\n{3,}/gu,"\n\n")}function B(a){let b=a.trim();return!!(/^(?:上表|本表)/u.test(b)&&/(?:不一致|修正为|应改为|更正为)/u.test(b)||/(?:全文|正文|文中)(?:不再出现|不得出现|不得再出现|不应出现|不会再出现)/u.test(b)||/不得出现跨章冲突|跨章冲突不得出现|不得与其他章节(?:矛盾|冲突)/u.test(b))}function C(a){return!!(/不得出现其他[^。;\n]{0,12}口径/u.test(a)||/[^。;\n]{0,10}口径必须(?:唯一|一致|统一)/u.test(a))}function D(a){let b=a.split(/\n\s*\n/u),c=[],d=!1;for(let a of b){if(a.split("\n").some(a=>/^#{1,6}\s/u.test(a.trim()))){let b=[];for(let c of a.split("\n")){let a=c.trim();if(!a||/^#{1,6}\s/u.test(a)){b.push(c);continue}if(B(a)){d=!0;continue}let e=c.split(/(?<=[。!?!?;;])/u),f=e.filter(a=>!C(a.trim()));f.length!==e.length&&(d=!0),b.push(f.join(""))}c.push(b.join("\n"));continue}if(B(a.replace(/\n/gu,""))){d=!0;continue}let b=a.split(/(?<=[。!?!?;;])/u),e=b.filter(a=>!C(a.replace(/\n/gu,"").trim()));e.length!==b.length&&(d=!0),c.push(e.join(""))}return d?c.filter(Boolean).join("\n\n"):a}function E(a){let b=a.split("\n"),c=new Map,d=new Map,e="",f=!1,g=b.map(a=>{let b=a.trim();if(/^#{1,6}\s/u.test(b)){let c=d.get(b)||0;return d.set(b,c+1),e=0===c?b:`${b}#${c}`,a}if(!b||/^\s*\|/u.test(b))return a;let g=a.split(/(?<=[。;;])/u).filter(a=>{let b=a.replace(/\s+/gu,"");if(b.length<30)return!0;let d=c.get(b);return void 0===d?(c.set(b,e),!0):d===e||(f=!0,!1)});return g.length!==a.split(/(?<=[。;;])/u).length&&(f=!0),g.join("")});return f?g.join("\n"):a}function F(a){let b=a.split(/\n{2,}/u),c=!1,d=b.map(a=>{let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b))return a;let d=a.split(/(?<=[。;;])/u),e=new Set;return d.filter(a=>{let b=a.replace(/\s+/gu,"");return b.length<20||(e.has(b)?(c=!0,!1):(e.add(b),!0))}).join("")});return c?d.join("\n\n"):a}function G(a,b){var c,e;let g=z(a);return c=g=(g=g.replace(/^\s*本表依据项目图谱[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*本表依据(?:招标文件|工程量清单|施工区段|质量目标|计划工期|项目图谱|危险源辨识|材料设备清单|现场条件|图纸资料|图纸设计说明)[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*表中事项应纳入[^\n。]*[。.]\s*$/gmu,"").replace(/^\s*正式输出的表格\/清单必须形成[^\n。]*[。.]\s*$/gmu,"").replace(/\n{3,}/gu,"\n\n").trim()).replace(/【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^修复类型:.*$/gmu,"").replace(/^修复对象:.*$/gmu,"").replace(/^问题:【修复任务包】[\s\S]*?(?=\n#{1,3}\s|\n\*\*|\n\|\s|$)/gu,"").replace(/^输出要求:.*$/gmu,"").replace(/重新生成/gu,"补充完善").replace(/见招标公告|见投标人须知前附表/gu,"按已确认的招标边界和施工条件执行").replace(/见招标文件/gu,"按本项目招标文件已明确的相应条款执行").replace(/招标范围:/gu,"施工范围:").replace(/主要承包人案|承包人案/gu,a=>a.replace(/承包人案/gu,"施工方案")).replace(/施工方(?!案|法|式|针|向|面)/gu,"承包人").replace(/按图纸/gu,"依据经确认的设计文件和图纸内容组织实施").replace(/按设计要求/gu,"依据设计文件明确的构造、材料、尺寸和验收要求执行").replace(/按(?:资料|文件|说明)/gu,"按设计文件及批准的施工方案要求").replace(/满足(?:相关|有关)?要求/gu,"满足本项目已明确的质量、安全、技术和验收控制要求").replace(/本节(?:将|主要|重点)?/gu,"").replace(/本章将/gu,"").replace(/根据需要|视情况|结合实际情况/gu,"根据现场实际情况和审批后的施工安排确定").replace(/相关要求/gu,"本项目已明确的质量、安全、技术和验收要求").replace(/要求要求/gu,"要求").replace(/确定确定/gu,"确定"),e=g=o.some(a=>c.includes(a))?c.split("\n").map(a=>/^\s*#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)||!o.some(b=>a.includes(b))?a:a.split(/(?<=[。;;])/u).filter(a=>!o.some(b=>a.includes(b))).join("")).join("\n"):c,g=(g=!f.Kd.some(a=>e.includes(a))&&!/纪律|廉洁/u.test(e)?e:e.split("\n").map(a=>{let b=a.trim(),c=/^#{1,6}\s/u.test(b);return/^\s*\|/u.test(b)?a:c?(0,f.hh)(b.replace(/^#{1,6}\s+/u,""))?"":a:a.split(/(?<=[。;;])/u).filter(a=>!(0,f.hh)(a)).join("")}).join("\n")).split("\n").map(t).join("\n"),g=(0,d.wi)(g),g=x(g=(0,d.Re)(g)),g=(0,d.z1)(g),g=(0,d.Bl)(g),g=function(a){let b=new Map,c=!1,d=a.split("\n").map(a=>{let d=a.trim();return/^#{1,6}\s/u.test(d)||/^\s*\|/u.test(d)?a:a.split(/(?<=[。;;])/u).filter(a=>{let d=a.replace(/\s+/gu,"");if(d.length<12)return!0;let e=b.get(d)||0;return b.set(d,e+1),!(e+1>2)||(c=!0,!1)}).join("")});return c?d.join("\n"):a}(g=F(g=E(g=w(g=y(g=v(g=(0,f.wq)(g))))))),g=(0,d.cf)(g),D(g=A(g=(g=function(a){let b=a.split("\n"),c=new Set,d=new Set,e=[],f=[],g=()=>{let a=e.join("").replace(/\s+/gu,"");a.length>=24&&(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)?a:b.filter((a,b)=>!d.has(b)).join("\n")}(g=(0,d.p8)(g))).replace(/\n{3,}/gu,"\n\n"))).trim()}function H(a){return D(A(v((0,f.wq)((0,f.jM)((0,d.cf)((0,d.p8)(w(y(x(z(F(E(a)))))))))))))}function I(a,b){let c=a.chapterPrompts.filter(a=>"writer"===a.category||"chapter"===a.category||"formatting"===a.category),d=[...a.writerPrompts,...c,...a.formattingPrompts],e=a.writerPrompts[0],f=d.map(a=>`${"writer"===a.category?"写作控制提示词":a.category}|${a.roleId}|${a.name}|${a.content.length} 字符`),h=(0,g.fC)(a.writerPrompts),i=(0,g.fC)([...c,...a.formattingPrompts]);return{primaryPromptId:e?.id,primaryWriter:e,prompts:d,promptTexts:[h?`【最高优先级:配置写作主控提示词】
|
|
15
15
|
${h}`:"",i?`【章节/格式提示词】
|
|
16
|
-
${i}`:""].filter(Boolean).join("\n\n"),promptDetails:f}}},18292:(a,b,c)=>{c.d(b,{AI:()=>k,br:()=>m,hS:()=>l,rf:()=>j});var d=c(1218),e=c(22157),f=c(87635);function g(a){return(0,d.de)(a).replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’\-—–―─-〜~·•]/gu,"").split("[").join("").split("]").join("").toLowerCase()}function h(a){return/工程造价|造价|报价|投标报价|报价明细|综合单价|单价|合价|金额|税率|增值税|利润|预留金|暂列金额|最高投标限价|招标控制价|合同估算价|合同估算价格|投资估算|估算价/u.test(a)}function i(a){let b=(0,f.ml)((0,e.lG)(a));return!b||/资料未明确|系统暂未从知识库确认|未确认|待确认|无|暂无/u.test(b)||/###|第\s*\d+\s*页|共\s*\d+\s*页|新版交易系统|操作帮助|登录页面|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(b)||/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(b)||h(b)||b.length>160?"":b}function j(a,b){return!!(/\.(?:docx?|pdf|xlsx?|zip|rar)$/iu.test(b)||/[A-Z]{8,}/u.test(b)||/([\u4e00-\u9fa5]{2,3})\1/u.test(b)||/[((](?:公章|签章|签名|盖章)[))]|住所:|法定代表人:|委托代理人:|年月日/u.test(b)||/[::]$/u.test(b)||/^见.{0,12}(?:前附表|须知|公告|文件)/u.test(b)||/^(?:项目所在地|项目名称|工程名称|标段名称|分部小计|小计|合计|总计|计量单位)$/u.test(b)||/^(?:项目编号|招标项目编号|标段名称|询标日期)[::]/u.test(b)||/招标人|建设单位|发包人/u.test(a)&&/投标|参加|承担|费用|协商|贯彻|方针|为了/u.test(b)||/[\u3400-\u4DBF\uE000-\uF8FF]/u.test(b)||/^[A-Z]\d[A-Z]\d/u.test(b)||/^[((][^))]{1,12}[))]$/u.test(b)&&/名称|编号|单位|日期|签章|公章|甲方|乙方/u.test(b)||/招标人|建设单位|发包人|项目名称|工程名称/u.test(a)&&/^(?:将报|拟报|应按|应报|须报|须按|拟按)/u.test(b)||/^(?:本项目|项目|工程)(?:位于|地处|坐落在?|选址在?)/u.test(b)||/^[((]?[一二三四五六七八九十]{1,3}[))]?是/u.test(b))}function k(a,b){let c=g(a),d=g(b);if(!d||d.length<2||c.includes(d)||d.length>=10&&c.includes(d.slice(0,Math.floor(.7*d.length))))return!0;let e=b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[];if(e.length>0&&e.some(a=>g(a).length>=2&&c.includes(g(a))))return!0;let f=b.split(/[、,,;;。::\s]+/u).map(a=>g(a.replace(/等$/u,""))).filter(a=>a.length>=4);if(f.length>=2){let a=f.filter(a=>c.includes(a)).reduce((a,b)=>a+b.length,0);if(a>=.5*d.length&&a>=8)return!0}return!1}function l(a,b){let c=b.filter(a=>{let b=`${a.key||""}${a.fieldName||""}${a.fieldId||""}`,c=(0,e.lG)(a.value);return!(h(`${b}${c}`)||!i(c)||j(b,c)||/项目名称|工程名称/u.test(b)&&("table"===a.processingType||"structured_data"===a.processingType||/bill_of_quantities/u.test(a.roleId||""))||/第\s*\d+\s*页|新版交易系统|操作帮助|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(`${b}${c}${a.sourceFile||""}`))&&(/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|质量标准|质量目标/u.test(b)||/危大|安全|资源|材料|机械|设备/u.test(b)&&!/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(c)||/面积|占地|建筑面积|长度|宽度|高度|厚度|深度|强度|等级|坡度|管径|直径|规格|跨度|天数|工期|周长|体积|重量/u.test(b)&&/^\d+(?:\.\d+)?\s*(?:㎡|m²|m2|m³|m3|m|mm|cm|km|MPa|kPa|kN|天|日历天|日|级|%|台|套|座|个|t|kg)/iu.test(c))}),f=new Set,g=[];for(let b of c){let c=(0,d.De)(i(b.value));if(!c)continue;let e=b.fieldName||b.key||b.fieldId||"资料事实",h=`${e}:${c}`;!f.has(h)&&(f.add(h),k(a,c)||g.push({fact:b,label:e,value:c}))}return g}function m(a,b){return l(a,b).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}},21702:(a,b,c)=>{c.d(b,{Cd:()=>j,J5:()=>g,KM:()=>q,SA:()=>l,jk:()=>o,mY:()=>r,mv:()=>m,o9:()=>p,oM:()=>k});var d=c(78217),e=c(40299),f=c(52922);let g=1.5,h=/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m³|m3|立方米|km|mm|cm|m|kg|t|吨|层|栋|日历天|天|%|台|套|根|处|个|kV|kW|MPa|kN|℃|次|遍|道|户|座|米|小时|min|分钟)/giu;function i(a){return new Set(a.match(h)||[]).size}function j(a){let b=(0,d.V7)(a),c=i(a),e=b>0?Math.ceil(b/1e3*g):0,f=b>0?Math.round(c/b*1e5)/100:0;return{chars:b,params:c,per1000:f,required:e,gap:b>0&&c<e}}function k(a,b){let c=j(a),d=i(b);return{verdict:c,materialParams:d,blocking:c.gap&&d>=c.required}}async function l(a){let b=(0,f.cs)(a);if(0===b.length)return{totalSentences:0,fillerSentences:0,fillerRatio:0,vagueCount:0,fillerDetails:[]};let c=await (0,f.w7)(b),d=c.map(a=>a.filler),e=d.filter(Boolean).length;return{totalSentences:b.length,fillerSentences:e,fillerRatio:e/b.length,vagueCount:c.filter(a=>a.vague).length,fillerDetails:[...new Set(b.filter((a,b)=>d[b]))].slice(0,12)}}function m(a){return a.fillerRatio>.1||a.vagueCount>=3}let n=/重难点|重点难点|难点分析|难点|工程特点|施工特点|项目特点/u;function o(a){return n.test(a)}async function p(a){let b=a.split("\n").filter(a=>!/^\s*#{1,6}\s/u.test(a)).join("\n"),c=(0,f.ge)(b);if(0===c.length)return{entries:0,bothRatio:1,missing:[]};let d=await (0,f.G5)(c);return{entries:c.length,bothRatio:d.ratio,missing:d.details.filter(a=>!a.attributed||!a.quantified).slice(0,8)}}function q(a){return a.entries>0&&a.bothRatio<.5}function r(a){return a.split("\n").map(a=>a.trim()).filter(a=>a.length>0&&e.Rg.test(a)).slice(0,5)}},22213:(a,b,c)=>{c.d(b,{Bk:()=>u,Ep:()=>t,I6:()=>x,KJ:()=>C,ab:()=>z,ap:()=>E,eB:()=>y,eK:()=>B,eL:()=>n,hL:()=>G,iA:()=>w,qj:()=>A,sh:()=>v,xu:()=>o,zJ:()=>D,zX:()=>F});var d=c(70933),e=c(1218);c(78217),c(70208);var f=c(22157),g=c(3063);function h(a){return a.replace(/^#{3,4}\s+.*\n+/u,"").trim()}function i(a,b){let c=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=b.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^###\\s+|^##\\s+|(?![\\s\\S]))`,"mu"));return d?d[0]:b}function j(a,b){let c=b?i(b,a):a;return/^####\s+\S+/mu.test(c)}function k(a){return(0,d.eE)(a).replace(/#{2,6}\s*[^;;。\n]+/gu,"").replace(/资料内容事实[;;::]?/gu,"").replace(/\s+/gu," ").trim()}function l(a){let b=k(a);return!(!b||b.length<4||b.length>120||/资料内容事实|#{2,6}|未尽事宜|项目编号\s*[::]?\s*[一二三四五六七八九十]?$/u.test(b)||/本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围还包含|具备有效的.*资质/u.test(b)||/未注明|以图纸为准|按设计要求确定/u.test(b)&&!/\d/u.test(b))&&(!((b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4)||!!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试/u.test(b))&&/\d|㎡|m2|m²|mm|厚|工程|材料|设备|系统|范围|改造|维修|加固|消防|水电|智能化|管网|屋面|门窗|验收|检测|调试/u.test(b)}function m(a){return a.split(/→|;|;|、|,|,/u).map(a=>k(a)).filter(a=>a&&a.length>=2&&a.length<=40).filter(a=>!/^按?施工准备$|^实施$|^检查$|^验收组织?$|^按规范和资料闭环$/u.test(a)).filter(a=>!/本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围|未尽事宜|具备有效/u.test(a))}function n(a){let b=[];for(let c of a){let a=c.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim(),d=new Set(a.split(" ").filter(a=>a.length>=2)),e=new Set([...a.match(/\d+[A-Z]{2,}[A-Za-z0-9]*/gu)||[],...a.match(/\d+(?:\.\d+)?\s*(?:台|套|个|座|㎡|m2|m²|m³|m3|kg|t|根|扇|樘|块|件|组|mm)/gu)||[]]),f=a.split(" ")[0]||"",g=b.findIndex(b=>{if(b.norm.includes(a)||a.includes(b.norm))return!0;if(!([...e].some(a=>b.models.has(a))||[...b.models].some(a=>e.has(a))))return!1;let c=(a,b)=>[...a].every(a=>b.has(a));return c(d,b.tokens)||c(b.tokens,d)||f===b.norm.split(" ")[0]});if(g>=0){let f=b[g];(d.size>f.tokens.size||d.size===f.tokens.size&&c.length<f.text.length)&&(b[g]={text:c,norm:a,tokens:d,models:e})}else b.push({text:c,norm:a,tokens:d,models:e})}return b.map(a=>a.text)}function o(a,b){let c=b.map(a=>a.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim()),d=/安装|敷设|浇筑|砌筑|抹灰|回填|拆除|吊装|固定|连接|试验|调试|养护|压实|铺设|焊接|绑扎|涂刷|灌浆|开挖|预制|穿线|放线|找平|清底|防水|密封/u;return a.filter(a=>{if(/\d+(?:\.\d+)?\s*(?:台|套|个|座|㎡|m2|m²|m³|m3|kg|t|根|扇|樘|块|件|组)/u.test(a)||/[A-Z]+\d+/u.test(a)&&/箱|柜|泵|机组|风机|面板/u.test(a))return!1;let b=a.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim();return!!(b.length<=6&&d.test(b))||(b.length<4?!c.some(a=>a.includes(b)):!c.some(a=>a.includes(b)))})}function p(a){let b=k(a);return!b||(b.match(/工程|维修|改造|安装|设备|系统|管网|屋面|门窗|消防|智能化/gu)||[]).length>=5&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告|材料|设备|规格|标准|检验批/u.test(b)}function q(a){let b=/^(.{1,18}?)(等)([\s\S]{2,})$/u.exec(a);return!b||void 0===b[1]||void 0===b[3]||/电$/u.test(b[1])||/^级/u.test(b[3])?a:b[3].length>=3?b[3]:b[1].length>=3?b[1]:a}let r=/计价|费用|税金|规费|暂列|暂估|合计|汇总|小计|措施项目|其他项目|税金项目|金额|结算管理|竣工结算/u,s=/[[\]【】]/u;function t(a,b){let c=(function(a){let b=[],c=a.match(/施工工作包结构化数据:\s*(\[[^\n]*\])/u);if(c)try{for(let a of JSON.parse(c[1])){let c=k(a.name||""),d=k(a.scope||""),e=n([...a.quantities||[],...a.materials||[],...a.methods||[]].map(k).filter(l).filter(a=>!p(a))),f=o((a.process||[]).flatMap(m),e),g=(a.acceptance||[]).map(k).filter(a=>a&&!p(a));!(!c||/项目施工$|项目$|^\d{4}年度/u.test(c))&&(!d||/资料内容事实|#{2,6}/u.test(d)||b.push({name:c,scope:d,quantities:e,process:f,acceptance:g}))}if(b.length>0)return b}catch(a){console.warn(`[gen] 结构化工作包解析失败,回退正则提取(保真度下降):${a instanceof Error?a.message:String(a)}`),b.length=0}for(let c of a.split(/\r?\n/u).filter(a=>/^\d+\.\s+.+?|范围:/u.test(a))){let a=c.match(/^\d+\.\s+(.+?)|范围:(.+?)|工程量\/材料:(.+?)|流程:(.+?)|验收:(.+)$/u);if(!a)continue;let d=k(a[1]),e=k(a[2]),f=n(a[3].split(/[;;、,,]/u).map(a=>k(a)).filter(l).filter(a=>"按证据展开"!==a)),g=o(m(a[4]),f),h=a[5].split(/[;;、,,]/u).map(a=>k(a)).filter(a=>a&&"按规范和资料闭环"!==a).filter(a=>!p(a));!(!d||/项目施工$|项目$|^\d{4}年度/u.test(d))&&(!e||/资料内容事实|#{2,6}/u.test(e)||b.push({name:d,scope:e,quantities:f,process:g,acceptance:h}))}return b.slice(0,8)})(a).map(a=>a.name).filter(Boolean),d=function(a,b){let c=[a,...b.map(a=>a.content)].filter(Boolean),d=/工程|安装|系统|通风|空调|智能化|装修|幕墙|屋面|土方|基坑|地基|基础|结构|电气|给排水|消防|防水|设备|管网|道路|景观|绿化|公厕|厕所|过路涵|涵|清淤|沟塘|塘|小菜园|菜园|排水沟|水沟|花池|树池|挡墙|护栏/u,f=(()=>{for(let a of c){let b=/(?:项目名称|工程名称)[::\s为是]+([^\n。;;]{4,120})/u.exec(a);if(!b)continue;let c=(0,e.ir)(b[1]);if(c)return c}})();for(let a of c){let b=function(a){for(let b=0;b<a.length;){let c=a.indexOf("招标范围",b);if(c<0)break;let d=a.lastIndexOf("\n",c-1)+1;if(!/^\s*[-*]?\s*(?:\*\*)?\s*\[/u.test(a.slice(d,c)))return c;b=c+4}return -1}(a);if(b<0)continue;let c=a.slice(b,b+600);if(f){let a=c.split(/[。;;\n]/u).map(a=>a.trim()).filter(Boolean).filter(a=>!(0,e.PP)(a,f));a.length>0&&(c=a.join("。"))}let g=c,h=g.indexOf("包括但不限于"),i=(g=(g=h>=0?g.slice(h+6).replace(/^[::、,,;;\s]+/u,""):g.replace(/^[^、,,;;。]{0,60}?招标范围[::]?\s*/u,"")).replace(/(?:等)?图纸[、及]?清单范围内所有工程[。.]*/u,"")).replace(/([^)]*)/gu,"").split(/[、,,;;。]/u).map(a=>k(a).replace(/["“”']/gu,"")).filter(a=>a.length>=3&&a.length<=20).filter(a=>d.test(a)).map(a=>q(a)).filter(a=>a.length>=3&&a.length<=20).filter(a=>!/招标范围|图纸|清单|补疑|答疑|具体内容|包括但不限于|投标|专用合同|未尽事宜|工程量|约束|不得|仅指导|集中交代|矛盾|参数|数字/u.test(a)).filter(a=>!/^(?:包括|涵盖|重点实施|实施|建设范围覆盖|本项目建设|主要包含|主要实施|具体包括|分别为|共计|包含|涉及)/u.test(a)).filter(a=>!/以下|以上|如下|详见|具体内容/u.test(a)).filter(a=>!/^是否/u.test(a)).filter(a=>!/及其他|以及其他/u.test(a)).filter(a=>!s.test(a)).filter(a=>!r.test(a)),j=[];for(let a of i){let b=a.replace(/\s+/gu,"");j.some(a=>a.replace(/\s+/gu,"").includes(b)||b.includes(a.replace(/\s+/gu,"")))||j.push(a)}if(j.length>=3)return j.slice(0,12)}return[]}(a,b),f=function(a){let b=(0,e.qG)(a),c=(0,e.hn)(b),d=[],f=new Set;for(let a of c){let b=a.key.replace(/^清单条目:/u,"").trim();!(!b||b.length<2||b.length>24||r.test(b)||s.test(b))&&(f.has(b)||(f.add(b),d.push(b)))}return d.slice(0,12)}(b),g=[],h=a=>{let b=q(a.trim()),c=b.replace(/\s+/gu,"");return!(!c||/^(?:包括|涵盖|重点实施|实施以下|建设范围覆盖|本项目建设|主要包含|主要实施|具体包括|分别为|共计|包含|涉及|是否)/u.test(c)||/以下|以上|如下|详见|具体内容|及其他|以及其他/u.test(c)||/^\d{4}年度/u.test(c)||/施工图|设计图|详图|平面图|剖面图|立面图|大样图|图集/u.test(c)||c.length>20||g.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(c)||c.includes(b)}))&&(g.push(b),!0)};for(let a of c)h(a);for(let a of d){if(g.length>=12)break;h(a)}let i=/公厕|厕所|过路涵|涵洞|涵管|污水|排水沟|水沟|清淤|沟塘|塘|小菜园|菜园|菜地|花池|树池|挡墙|护栏|路灯|检查井|化粪池|泵站|生态池|生态塘|护坡|驳岸|栈道|步道/u;if(g.length<3)for(let a of[...f].sort((a,b)=>Number(i.test(b))-Number(i.test(a)))){if(g.length>=12)break;h(a)}else for(let a of f){if(g.length>=16)break;i.test(a)&&h(a)}return g}function u(a,b,c=3,d){let e=d??t(a,b);if(e.length<c)return"";let f=e.map((a,b)=>`#### ${b+1} ${a}`).join("\n");return[`【小节骨架锁定】本节内部结构已由系统锁定,必须且只能按以下 ${e.length} 个工作包小节标题逐项展开(标题一字不差,不得增删改、合并或调序):`,f,"每个工作包小节必须覆盖三方面要素:作业对象与工程量、工序顺序、施工方法(三要素缺一不可),融入连贯段落叙述;禁止以“施工概况/施工流程/施工方法/工艺流程”等结构标签充当 H4 小节标题或段落开头引导。\n要素写法:作业对象与工程量(作业对象与部位、工程量或规模、材料设备规格型号,数量类数值优先取工程量清单数据);工序顺序(先后顺序清晰,相邻小节不得同句式开头,同一句式全文不得反复使用,禁止以固定句模复读);施工方法(工艺做法、工艺参数(数值+单位)、验收检测与记录闭环)。\n融合叙述示例(仅为形式示意:数值必须替换为本项目绑定资料中的真实数值,句式不得照抄、须按本节资料重新组织):\n本工程室外道排范围覆盖园区内雨水、污水管网及检查井,主要工程量 HDPE 双壁波纹管 DN300 约 1200m、检查井 45 座,管材环刚度 SN8。施工按测量放线、沟槽开挖、管道基础、管道铺设、闭水试验、分层回填、压实度检测、验收的顺序组织;沟槽机械开挖配合人工清底,槽底标高偏差控制在\xb120mm以内,接口采用承插式橡胶圈连接,回填每层虚铺厚度不超过300mm、压实度不低于95%,压实度检测结果当日整理归档。\n数值来源优先级:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据;清单未覆盖的参数(标高、坡率、构造做法等)才取图纸数据;禁止“按设计图纸执行”“详见设计图纸”“按设计文件确定”式概括话术——必须落到具体数值或具体规范条文。\n本节禁止出现 Markdown 表格;禁止写入重难点识别表、关键施工节点控制计划表等属于其他小节的内容;禁止只写综合概述而不展开工作包。"].join("\n")}function v(a,b,c=3){let d=t(a,b);return d.length>=c?d:[]}function w(a,b,c=3){let d=a.filter(a=>b.some(b=>{let c=(0,f.Sw)(b),d=(0,f.Sw)(a);return c.includes(d)||d.includes(c)}));return d.length>=c?d:[]}function x(a){let b=a.split(/\r?\n/u),c=[],d=!1;for(let a of b){let b=a.trim();if(/^\|.+\|\s*$/u.test(b)){d=!0;continue}if(d){if(""===b)continue;d=!1}c.push(a)}return c.join("\n")}function y(a,b,c=[]){let d=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${d}\\s*$`,"u"),g=a.split("\n"),h=g.findIndex(a=>e.test(a.trim()));if(h<0)return a;let i=/^####\s+/u.test(g[h].trim()),j=c.map(f.Sw),k=[g[h]];for(let a=h+1;a<g.length;a+=1){let b=g[a].trim();if(/^#{2,3}\s+/u.test(b))break;if(/^####\s+/u.test(b)&&i){let a=b.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?/u,""),c=(0,f.Sw)(a);if(!j.some(a=>c.includes(a)||a.includes(c)))break}k.push(g[a])}let l=k.join("\n"),m=x(l);return m===l?a:a.replace(l,m)}function z(a,b,c){let d=i(b,a),e=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(!RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${e}\\s*$`,"u").test(d.split("\n")[0]?.trim()||""))return[];let g=(d.match(/^#{3,4}\s+(.+)$/gmu)||[]).map(a=>a.replace(/^#{3,4}\s+/u,""));return c.filter(a=>!g.some(b=>(0,f.Sw)(b).includes((0,f.Sw)(a))))}function A(a,b,c){let d=i(b,a),e=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(!RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${e}\\s*$`,"u").test(d.split("\n")[0]?.trim()||""))return a;let g=d.split(/^####\s+/gmu),h=g.shift()||"",j=[];for(let a of g){let b=a.split("\n"),d=(b[0]||"").trim(),e=(0,f.Sw)(d),g=b.slice(1).join("\n").replace(/^#{1,6}\s+.+$/gmu,"").trim();c.some(a=>e.includes((0,f.Sw)(a)))&&g.length<80||j.push(a)}let k=`${h}${j.length>0?"#### ":""}${j.join("#### ")}`;return k===d?a:a.replace(d,k)}function B(a,b){if(/项目主要施工内容/u.test(a)){var c;let d=i(a,b);if(!j(b,a))return`${a} 缺少施工工作包三级小节`;if(!function(a){let b=h(a);return((b.match(/^####\s+(?:\d+\.\d+\.\d+\s+)?[一二三四五六七八九十\d]*[、..]?\s*\S+/gmu)||[]).length||(b.match(/^[一二三四五六七八九十]+、\S+/gmu)||[]).length)>=3&&(0,f.az)(b)}(d))return`${a} 未按施工工作包展开`;let e=d.split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(e.some(a=>!(0,f.az)(a)))return`${a} 存在工作包内容要素不全`;if(c=h(d),/资料内容事实|(?:^#{2,3}|^#{5,6})\s+|\*\*[^*]+\*\*|未尽事宜|专业施工内容统筹|招标范围还包含|具备有效的.*资质|安全生产考核合格证书|注册建造师|联合体投标|项目经理要求|投标人资格|投标人资质|营业执照|安全生产许可证|资格审查|资格后审|中标通知书|签订合同|电子交易系统|投标保证金|评标办法|踏勘现场|投标预备会/mu.test(c))return`${a} 存在脏事实或标题污染`;if(e.some(a=>/施工流程[::][\s\S]*?(未尽事宜|本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围|安全生产考核合格证书|联合体投标|注册建造师)/u.test(a)))return`${a} 存在工作包流程污染`;if(!(0,f.Z1)(d)||e.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"",c=a.match(/(?:施工流程|工艺流程)[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return(b.trim().length>0||c.trim().length>0)&&!(0,f.Z1)(b+c)}))return`${a} 存在工作包工序顺序表达缺失`;if(e.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";if(!/施工方法[::]/u.test(a))return!1;if(/安全生产考核合格证书|联合体投标|注册建造师|投标人资格|资质要求|营业执照|安全生产许可证/u.test(b)||b.length<30)return!0;let c=(b.match(/[::]\s*\d/gu)||[]).length;return/\d/u.test(b)&&!/→|采用|组织|浇筑|铺设|焊接|绑扎|砌筑|抹灰|涂刷|敷设|压实|养护|试验|调试|测量|放线|验收|检测|复试|记录|报告|吊装|灌注|埋设|嵌缝/u.test(b)&&(c>=2||!/安装|固定|挂墙|机具/u.test(b))||(b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告/u.test(b)}))return`${a} 存在工作包施工方法过弱`;let g=h(d);if(/^\s*\|.+\|\s*$/mu.test(g))return`${a} 不应使用 Markdown 表格替代工作包正文`}if(g.gG.test(a)){let c=i(a,b);if(!j(b,a))return`${a} 缺少分项工程方案三级小节`;let d=c.split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(0===d.length)return`${a} 未按分项工程方案展开`;if(d.some(a=>!(0,f.az)(a)))return`${a} 存在分项方案内容要素不全`;if(!(0,f.Z1)(c)||d.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"",c=a.match(/(?:施工流程|工艺流程)[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return(b.trim().length>0||c.trim().length>0)&&!(0,f.Z1)(b+c)}))return`${a} 存在分项方案工序顺序表达缺失`}return""}function C(a,b){let c=b;for(let b of a){if(/项目主要施工内容/u.test(b))continue;let a=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");c=c.replace(RegExp(`(^###\\s+(?:\\d+\\.\\d+\\s+)?${a}\\s*\\n)([\\s\\S]*?)(?=^###\\s+|^##\\s+|$)`,"gmu"),(a,c,d)=>{if(/^####\s+\S+/mu.test(d))return`${c}${d}`;let e=c.replace(/^#{1,6}[\s]*/,"").replace(/^\d+(?:\.\d+)*[\s]*/,"").trim();return(0,f.Sw)(e)===(0,f.Sw)(b)?`${c}
|
|
16
|
+
${i}`:""].filter(Boolean).join("\n\n"),promptDetails:f}}},18292:(a,b,c)=>{c.d(b,{AI:()=>k,br:()=>m,hS:()=>l,rf:()=>j});var d=c(1218),e=c(22157),f=c(87635);function g(a){return(0,d.de)(a).replace(/[\s,,.。::;;||()()《》<>【】"“”'‘’\-—–―─-〜~·•]/gu,"").split("[").join("").split("]").join("").toLowerCase()}function h(a){return/工程造价|造价|报价|投标报价|报价明细|综合单价|单价|合价|金额|税率|增值税|利润|预留金|暂列金额|最高投标限价|招标控制价|合同估算价|合同估算价格|投资估算|估算价/u.test(a)}function i(a){let b=(0,f.ml)((0,e.lG)(a));return!b||/资料未明确|系统暂未从知识库确认|未确认|待确认|无|暂无/u.test(b)||/###|第\s*\d+\s*页|共\s*\d+\s*页|新版交易系统|操作帮助|登录页面|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(b)||/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(b)||h(b)||b.length>160?"":b}function j(a,b){return!!(/\.(?:docx?|pdf|xlsx?|zip|rar)$/iu.test(b)||/[A-Z]{8,}/u.test(b)||/([\u4e00-\u9fa5]{2,3})\1/u.test(b)||/[((](?:公章|签章|签名|盖章)[))]|住所:|法定代表人:|委托代理人:|年月日/u.test(b)||/[::]$/u.test(b)||/^见.{0,12}(?:前附表|须知|公告|文件)/u.test(b)||/^(?:项目所在地|项目名称|工程名称|标段名称|分部小计|小计|合计|总计|计量单位)$/u.test(b)||/^(?:项目编号|招标项目编号|标段名称|询标日期)[::]/u.test(b)||/招标人|建设单位|发包人/u.test(a)&&/投标|参加|承担|费用|协商|贯彻|方针|为了/u.test(b)||/[\u3400-\u4DBF\uE000-\uF8FF]/u.test(b)||/^[A-Z]\d[A-Z]\d/u.test(b)||/^[((][^))]{1,12}[))]$/u.test(b)&&/名称|编号|单位|日期|签章|公章|甲方|乙方/u.test(b)||/招标人|建设单位|发包人|项目名称|工程名称/u.test(a)&&/^(?:将报|拟报|应按|应报|须报|须按|拟按)/u.test(b)||/^(?:本项目|项目|工程)(?:位于|地处|坐落在?|选址在?)/u.test(b)||/^[((]?[一二三四五六七八九十]{1,3}[))]?是/u.test(b))}function k(a,b){let c=g(a),d=g(b);if(!d||d.length<2||c.includes(d)||d.length>=10&&c.includes(d.slice(0,Math.floor(.7*d.length))))return!0;let e=b.match(/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年|万元|元|平方米|㎡|m²|立方米|m³|米|m|mm|cm|台|套|人|项|%|MPa|kPa)?/giu)||[];if(e.length>0&&e.some(a=>g(a).length>=2&&c.includes(g(a))))return!0;let f=b.split(/[、,,;;。::\s]+/u).map(a=>g(a.replace(/等$/u,""))).filter(a=>a.length>=4);if(f.length>=2){let a=f.filter(a=>c.includes(a)).reduce((a,b)=>a+b.length,0);if(a>=.5*d.length&&a>=8)return!0}return!1}function l(a,b){let c=b.filter(a=>{let b=`${a.key||""}${a.fieldName||""}${a.fieldId||""}`,c=(0,e.lG)(a.value);return!(h(`${b}${c}`)||!i(c)||j(b,c)||/项目名称|工程名称/u.test(b)&&("table"===a.processingType||"structured_data"===a.processingType||/bill_of_quantities/u.test(a.roleId||""))||/第\s*\d+\s*页|新版交易系统|操作帮助|见招标公告|未尽事宜|详见图纸|招标文件补疑|政府相关文件|规范等其它资料/u.test(`${b}${c}${a.sourceFile||""}`))&&(/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|质量标准|质量目标/u.test(b)||/危大|安全|资源|材料|机械|设备/u.test(b)&&!/^\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|m³|%|元|万元)?$/iu.test(c)||/面积|占地|建筑面积|长度|宽度|高度|厚度|深度|强度|等级|坡度|管径|直径|规格|跨度|天数|工期|周长|体积|重量/u.test(b)&&/^\d+(?:\.\d+)?\s*(?:㎡|m²|m2|m³|m3|m|mm|cm|km|MPa|kPa|kN|天|日历天|日|级|%|台|套|座|个|t|kg)/iu.test(c))}),f=new Set,g=[];for(let b of c){let c=(0,d.De)(i(b.value));if(!c)continue;let e=b.fieldName||b.key||b.fieldId||"资料事实",h=`${e}:${c}`;!f.has(h)&&(f.add(h),k(a,c)||g.push({fact:b,label:e,value:c}))}return g}function m(a,b){return l(a,b).map(a=>({level:"warning",message:`已确认事实未在正文中落位:${a.label}=${a.value}`,suggestion:"请将该事实自然写入对应章节或小节,不得改变原始数值和单位。"}))}},21702:(a,b,c)=>{c.d(b,{Cd:()=>j,J5:()=>g,KM:()=>s,SA:()=>l,gj:()=>o,jk:()=>q,lN:()=>n,mY:()=>t,mv:()=>m,o9:()=>r,oM:()=>k});var d=c(78217),e=c(40299),f=c(52922);let g=1.5,h=/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m³|m3|立方米|km|mm|cm|m|kg|t|吨|层|栋|日历天|天|%|台|套|根|处|个|kV|kW|MPa|kN|℃|次|遍|道|户|座|米|小时|min|分钟)/giu;function i(a){return new Set(a.match(h)||[]).size}function j(a){let b=(0,d.V7)(a),c=i(a),e=b>0?Math.ceil(b/1e3*g):0,f=b>0?Math.round(c/b*1e5)/100:0;return{chars:b,params:c,per1000:f,required:e,gap:b>0&&c<e}}function k(a,b){let c=j(a),d=i(b);return{verdict:c,materialParams:d,blocking:c.gap&&d>=c.required}}async function l(a){let b=(0,f.cs)(a);if(0===b.length)return{totalSentences:0,fillerSentences:0,fillerRatio:0,vagueCount:0,fillerDetails:[]};let c=await (0,f.w7)(b),d=c.map(a=>a.filler),e=d.filter(Boolean).length;return{totalSentences:b.length,fillerSentences:e,fillerRatio:e/b.length,vagueCount:c.filter(a=>a.vague).length,fillerDetails:[...new Set(b.filter((a,b)=>d[b]))].slice(0,12)}}function m(a){return a.fillerRatio>.1||a.vagueCount>=3}function n(a){let b=(0,f.c8)(a);return{count:b.length,phrases:[...new Set(b.map(a=>a.phrase))].slice(0,8),sentences:[...new Set(b.map(a=>a.sentence))].slice(0,8),totalSentences:(0,f.cs)(a).length}}function o(a){return a.count>=1}let p=/重难点|重点难点|难点分析|难点|工程特点|施工特点|项目特点/u;function q(a){return p.test(a)}async function r(a){let b=a.split("\n").filter(a=>!/^\s*#{1,6}\s/u.test(a)).join("\n"),c=(0,f.ge)(b);if(0===c.length)return{entries:0,bothRatio:1,missing:[]};let d=await (0,f.G5)(c);return{entries:c.length,bothRatio:d.ratio,missing:d.details.filter(a=>!a.attributed||!a.quantified).slice(0,8)}}function s(a){return a.entries>0&&a.bothRatio<.5}function t(a){return a.split("\n").map(a=>a.trim()).filter(a=>a.length>0&&e.Rg.test(a)).slice(0,5)}},22213:(a,b,c)=>{c.d(b,{Bk:()=>u,Ep:()=>t,I6:()=>x,KJ:()=>C,ab:()=>z,ap:()=>E,eB:()=>y,eK:()=>B,eL:()=>n,hL:()=>G,iA:()=>w,qj:()=>A,sh:()=>v,xu:()=>o,zJ:()=>D,zX:()=>F});var d=c(70933),e=c(1218);c(78217),c(70208);var f=c(22157),g=c(3063);function h(a){return a.replace(/^#{3,4}\s+.*\n+/u,"").trim()}function i(a,b){let c=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=b.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^###\\s+|^##\\s+|(?![\\s\\S]))`,"mu"));return d?d[0]:b}function j(a,b){let c=b?i(b,a):a;return/^####\s+\S+/mu.test(c)}function k(a){return(0,d.eE)(a).replace(/#{2,6}\s*[^;;。\n]+/gu,"").replace(/资料内容事实[;;::]?/gu,"").replace(/\s+/gu," ").trim()}function l(a){let b=k(a);return!(!b||b.length<4||b.length>120||/资料内容事实|#{2,6}|未尽事宜|项目编号\s*[::]?\s*[一二三四五六七八九十]?$/u.test(b)||/本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围还包含|具备有效的.*资质/u.test(b)||/未注明|以图纸为准|按设计要求确定/u.test(b)&&!/\d/u.test(b))&&(!((b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4)||!!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试/u.test(b))&&/\d|㎡|m2|m²|mm|厚|工程|材料|设备|系统|范围|改造|维修|加固|消防|水电|智能化|管网|屋面|门窗|验收|检测|调试/u.test(b)}function m(a){return a.split(/→|;|;|、|,|,/u).map(a=>k(a)).filter(a=>a&&a.length>=2&&a.length<=40).filter(a=>!/^按?施工准备$|^实施$|^检查$|^验收组织?$|^按规范和资料闭环$/u.test(a)).filter(a=>!/本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围|未尽事宜|具备有效/u.test(a))}function n(a){let b=[];for(let c of a){let a=c.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim(),d=new Set(a.split(" ").filter(a=>a.length>=2)),e=new Set([...a.match(/\d+[A-Z]{2,}[A-Za-z0-9]*/gu)||[],...a.match(/\d+(?:\.\d+)?\s*(?:台|套|个|座|㎡|m2|m²|m³|m3|kg|t|根|扇|樘|块|件|组|mm)/gu)||[]]),f=a.split(" ")[0]||"",g=b.findIndex(b=>{if(b.norm.includes(a)||a.includes(b.norm))return!0;if(!([...e].some(a=>b.models.has(a))||[...b.models].some(a=>e.has(a))))return!1;let c=(a,b)=>[...a].every(a=>b.has(a));return c(d,b.tokens)||c(b.tokens,d)||f===b.norm.split(" ")[0]});if(g>=0){let f=b[g];(d.size>f.tokens.size||d.size===f.tokens.size&&c.length<f.text.length)&&(b[g]={text:c,norm:a,tokens:d,models:e})}else b.push({text:c,norm:a,tokens:d,models:e})}return b.map(a=>a.text)}function o(a,b){let c=b.map(a=>a.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim()),d=/安装|敷设|浇筑|砌筑|抹灰|回填|拆除|吊装|固定|连接|试验|调试|养护|压实|铺设|焊接|绑扎|涂刷|灌浆|开挖|预制|穿线|放线|找平|清底|防水|密封/u;return a.filter(a=>{if(/\d+(?:\.\d+)?\s*(?:台|套|个|座|㎡|m2|m²|m³|m3|kg|t|根|扇|樘|块|件|组)/u.test(a)||/[A-Z]+\d+/u.test(a)&&/箱|柜|泵|机组|风机|面板/u.test(a))return!1;let b=a.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim();return!!(b.length<=6&&d.test(b))||(b.length<4?!c.some(a=>a.includes(b)):!c.some(a=>a.includes(b)))})}function p(a){let b=k(a);return!b||(b.match(/工程|维修|改造|安装|设备|系统|管网|屋面|门窗|消防|智能化/gu)||[]).length>=5&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告|材料|设备|规格|标准|检验批/u.test(b)}function q(a){let b=/^(.{1,18}?)(等)([\s\S]{2,})$/u.exec(a);return!b||void 0===b[1]||void 0===b[3]||/电$/u.test(b[1])||/^级/u.test(b[3])?a:b[3].length>=3?b[3]:b[1].length>=3?b[1]:a}let r=/计价|费用|税金|规费|暂列|暂估|合计|汇总|小计|措施项目|其他项目|税金项目|金额|结算管理|竣工结算/u,s=/[[\]【】]/u;function t(a,b){let c=(function(a){let b=[],c=a.match(/施工工作包结构化数据:\s*(\[[^\n]*\])/u);if(c)try{for(let a of JSON.parse(c[1])){let c=k(a.name||""),d=k(a.scope||""),e=n([...a.quantities||[],...a.materials||[],...a.methods||[]].map(k).filter(l).filter(a=>!p(a))),f=o((a.process||[]).flatMap(m),e),g=(a.acceptance||[]).map(k).filter(a=>a&&!p(a));!(!c||/项目施工$|项目$|^\d{4}年度/u.test(c))&&(!d||/资料内容事实|#{2,6}/u.test(d)||b.push({name:c,scope:d,quantities:e,process:f,acceptance:g}))}if(b.length>0)return b}catch(a){console.warn(`[gen] 结构化工作包解析失败,回退正则提取(保真度下降):${a instanceof Error?a.message:String(a)}`),b.length=0}for(let c of a.split(/\r?\n/u).filter(a=>/^\d+\.\s+.+?|范围:/u.test(a))){let a=c.match(/^\d+\.\s+(.+?)|范围:(.+?)|工程量\/材料:(.+?)|流程:(.+?)|验收:(.+)$/u);if(!a)continue;let d=k(a[1]),e=k(a[2]),f=n(a[3].split(/[;;、,,]/u).map(a=>k(a)).filter(l).filter(a=>"按证据展开"!==a)),g=o(m(a[4]),f),h=a[5].split(/[;;、,,]/u).map(a=>k(a)).filter(a=>a&&"按规范和资料闭环"!==a).filter(a=>!p(a));!(!d||/项目施工$|项目$|^\d{4}年度/u.test(d))&&(!e||/资料内容事实|#{2,6}/u.test(e)||b.push({name:d,scope:e,quantities:f,process:g,acceptance:h}))}return b.slice(0,8)})(a).map(a=>a.name).filter(Boolean),d=function(a,b){let c=[a,...b.map(a=>a.content)].filter(Boolean),d=/工程|安装|系统|通风|空调|智能化|装修|幕墙|屋面|土方|基坑|地基|基础|结构|电气|给排水|消防|防水|设备|管网|道路|景观|绿化|公厕|厕所|过路涵|涵|清淤|沟塘|塘|小菜园|菜园|排水沟|水沟|花池|树池|挡墙|护栏/u,f=(()=>{for(let a of c){let b=/(?:项目名称|工程名称)[::\s为是]+([^\n。;;]{4,120})/u.exec(a);if(!b)continue;let c=(0,e.ir)(b[1]);if(c)return c}})();for(let a of c){let b=function(a){for(let b=0;b<a.length;){let c=a.indexOf("招标范围",b);if(c<0)break;let d=a.lastIndexOf("\n",c-1)+1;if(!/^\s*[-*]?\s*(?:\*\*)?\s*\[/u.test(a.slice(d,c)))return c;b=c+4}return -1}(a);if(b<0)continue;let c=a.slice(b,b+600);if(f){let a=c.split(/[。;;\n]/u).map(a=>a.trim()).filter(Boolean).filter(a=>!(0,e.PP)(a,f));a.length>0&&(c=a.join("。"))}let g=c,h=g.indexOf("包括但不限于"),i=(g=(g=h>=0?g.slice(h+6).replace(/^[::、,,;;\s]+/u,""):g.replace(/^[^、,,;;。]{0,60}?招标范围[::]?\s*/u,"")).replace(/(?:等)?图纸[、及]?清单范围内所有工程[。.]*/u,"")).replace(/([^)]*)/gu,"").split(/[、,,;;。]/u).map(a=>k(a).replace(/["“”']/gu,"")).filter(a=>a.length>=3&&a.length<=20).filter(a=>d.test(a)).map(a=>q(a)).filter(a=>a.length>=3&&a.length<=20).filter(a=>!/招标范围|图纸|清单|补疑|答疑|具体内容|包括但不限于|投标|专用合同|未尽事宜|工程量|约束|不得|仅指导|集中交代|矛盾|参数|数字/u.test(a)).filter(a=>!/^(?:包括|涵盖|重点实施|实施|建设范围覆盖|本项目建设|主要包含|主要实施|具体包括|分别为|共计|包含|涉及)/u.test(a)).filter(a=>!/以下|以上|如下|详见|具体内容/u.test(a)).filter(a=>!/^是否/u.test(a)).filter(a=>!/及其他|以及其他/u.test(a)).filter(a=>!s.test(a)).filter(a=>!r.test(a)),j=[];for(let a of i){let b=a.replace(/\s+/gu,"");j.some(a=>a.replace(/\s+/gu,"").includes(b)||b.includes(a.replace(/\s+/gu,"")))||j.push(a)}if(j.length>=3)return j.slice(0,12)}return[]}(a,b),f=function(a){let b=(0,e.qG)(a),c=(0,e.hn)(b),d=[],f=new Set;for(let a of c){let b=a.key.replace(/^清单条目:/u,"").trim();!(!b||b.length<2||b.length>24||r.test(b)||s.test(b))&&(f.has(b)||(f.add(b),d.push(b)))}return d.slice(0,12)}(b),g=[],h=a=>{let b=q(a.trim()),c=b.replace(/\s+/gu,"");return!(!c||/^(?:包括|涵盖|重点实施|实施以下|建设范围覆盖|本项目建设|主要包含|主要实施|具体包括|分别为|共计|包含|涉及|是否)/u.test(c)||/以下|以上|如下|详见|具体内容|及其他|以及其他/u.test(c)||/^\d{4}年度/u.test(c)||/施工图|设计图|详图|平面图|剖面图|立面图|大样图|图集/u.test(c)||c.length>20||g.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(c)||c.includes(b)}))&&(g.push(b),!0)};for(let a of c)h(a);for(let a of d){if(g.length>=12)break;h(a)}let i=/公厕|厕所|过路涵|涵洞|涵管|污水|排水沟|水沟|清淤|沟塘|塘|小菜园|菜园|菜地|花池|树池|挡墙|护栏|路灯|检查井|化粪池|泵站|生态池|生态塘|护坡|驳岸|栈道|步道/u;if(g.length<3)for(let a of[...f].sort((a,b)=>Number(i.test(b))-Number(i.test(a)))){if(g.length>=12)break;h(a)}else for(let a of f){if(g.length>=16)break;i.test(a)&&h(a)}return g}function u(a,b,c=3,d){let e=d??t(a,b);if(e.length<c)return"";let f=e.map((a,b)=>`#### ${b+1} ${a}`).join("\n");return[`【小节骨架锁定】本节内部结构已由系统锁定,必须且只能按以下 ${e.length} 个工作包小节标题逐项展开(标题一字不差,不得增删改、合并或调序):`,f,"每个工作包小节必须覆盖三方面要素:作业对象与工程量、工序顺序、施工方法(三要素缺一不可),融入连贯段落叙述;禁止以“施工概况/施工流程/施工方法/工艺流程”等结构标签充当 H4 小节标题或段落开头引导。\n要素写法:作业对象与工程量(作业对象与部位、工程量或规模、材料设备规格型号,数量类数值优先取工程量清单数据);工序顺序(先后顺序清晰,相邻小节不得同句式开头,同一句式全文不得反复使用,禁止以固定句模复读);施工方法(工艺做法、工艺参数(数值+单位)、验收检测与记录闭环)。\n融合叙述示例(仅为形式示意:数值必须替换为本项目绑定资料中的真实数值,句式不得照抄、须按本节资料重新组织):\n本工程室外道排范围覆盖园区内雨水、污水管网及检查井,主要工程量 HDPE 双壁波纹管 DN300 约 1200m、检查井 45 座,管材环刚度 SN8。施工按测量放线、沟槽开挖、管道基础、管道铺设、闭水试验、分层回填、压实度检测、验收的顺序组织;沟槽机械开挖配合人工清底,槽底标高偏差控制在\xb120mm以内,接口采用承插式橡胶圈连接,回填每层虚铺厚度不超过300mm、压实度不低于95%,压实度检测结果当日整理归档。\n数值来源优先级:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据;清单未覆盖的参数(标高、坡率、构造做法等)才取图纸数据;禁止“按设计图纸执行”“详见设计图纸”“按设计文件确定”式概括话术——必须落到具体数值或具体规范条文。\n本节禁止出现 Markdown 表格;禁止写入重难点识别表、关键施工节点控制计划表等属于其他小节的内容;禁止只写综合概述而不展开工作包。"].join("\n")}function v(a,b,c=3){let d=t(a,b);return d.length>=c?d:[]}function w(a,b,c=3){let d=a.filter(a=>b.some(b=>{let c=(0,f.Sw)(b),d=(0,f.Sw)(a);return c.includes(d)||d.includes(c)}));return d.length>=c?d:[]}function x(a){let b=a.split(/\r?\n/u),c=[],d=!1;for(let a of b){let b=a.trim();if(/^\|.+\|\s*$/u.test(b)){d=!0;continue}if(d){if(""===b)continue;d=!1}c.push(a)}return c.join("\n")}function y(a,b,c=[]){let d=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${d}\\s*$`,"u"),g=a.split("\n"),h=g.findIndex(a=>e.test(a.trim()));if(h<0)return a;let i=/^####\s+/u.test(g[h].trim()),j=c.map(f.Sw),k=[g[h]];for(let a=h+1;a<g.length;a+=1){let b=g[a].trim();if(/^#{2,3}\s+/u.test(b))break;if(/^####\s+/u.test(b)&&i){let a=b.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?/u,""),c=(0,f.Sw)(a);if(!j.some(a=>c.includes(a)||a.includes(c)))break}k.push(g[a])}let l=k.join("\n"),m=x(l);return m===l?a:a.replace(l,m)}function z(a,b,c){let d=i(b,a),e=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(!RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${e}\\s*$`,"u").test(d.split("\n")[0]?.trim()||""))return[];let g=(d.match(/^#{3,4}\s+(.+)$/gmu)||[]).map(a=>a.replace(/^#{3,4}\s+/u,""));return c.filter(a=>!g.some(b=>(0,f.Sw)(b).includes((0,f.Sw)(a))))}function A(a,b,c){let d=i(b,a),e=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(!RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${e}\\s*$`,"u").test(d.split("\n")[0]?.trim()||""))return a;let g=d.split(/^####\s+/gmu),h=g.shift()||"",j=[];for(let a of g){let b=a.split("\n"),d=(b[0]||"").trim(),e=(0,f.Sw)(d),g=b.slice(1).join("\n").replace(/^#{1,6}\s+.+$/gmu,"").trim();c.some(a=>e.includes((0,f.Sw)(a)))&&g.length<80||j.push(a)}let k=`${h}${j.length>0?"#### ":""}${j.join("#### ")}`;return k===d?a:a.replace(d,k)}function B(a,b){if(/项目主要施工内容/u.test(a)){var c;let d=i(a,b);if(!j(b,a))return`${a} 缺少施工工作包三级小节`;if(!function(a){let b=h(a);return((b.match(/^####\s+(?:\d+\.\d+\.\d+\s+)?[一二三四五六七八九十\d]*[、..]?\s*\S+/gmu)||[]).length||(b.match(/^[一二三四五六七八九十]+、\S+/gmu)||[]).length)>=3&&(0,f.az)(b)}(d))return`${a} 未按施工工作包展开`;let e=d.split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(e.some(a=>!(0,f.az)(a)))return`${a} 存在工作包内容要素不全`;if(c=h(d),/资料内容事实|(?:^#{2,3}|^#{5,6})\s+|\*\*[^*]+\*\*|未尽事宜|专业施工内容统筹|招标范围还包含|具备有效的.*资质|安全生产考核合格证书|注册建造师|联合体投标|项目经理要求|投标人资格|投标人资质|营业执照|安全生产许可证|资格审查|资格后审|中标通知书|签订合同|电子交易系统|投标保证金|评标办法|踏勘现场|投标预备会/mu.test(c))return`${a} 存在脏事实或标题污染`;if(e.some(a=>/施工流程[::][\s\S]*?(未尽事宜|本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围|安全生产考核合格证书|联合体投标|注册建造师)/u.test(a)))return`${a} 存在工作包流程污染`;if(!(0,f.Z1)(d)||e.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"",c=a.match(/(?:施工流程|工艺流程)[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return(b.trim().length>0||c.trim().length>0)&&!(0,f.Z1)(b+c)}))return`${a} 存在工作包工序顺序表达缺失`;if(e.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";if(!/施工方法[::]/u.test(a))return!1;if(/安全生产考核合格证书|联合体投标|注册建造师|投标人资格|资质要求|营业执照|安全生产许可证/u.test(b)||b.length<30)return!0;let c=(b.match(/[::]\s*\d/gu)||[]).length;return/\d/u.test(b)&&!/→|采用|组织|浇筑|铺设|焊接|绑扎|砌筑|抹灰|涂刷|敷设|压实|养护|试验|调试|测量|放线|验收|检测|复试|记录|报告|吊装|灌注|埋设|嵌缝/u.test(b)&&(c>=2||!/安装|固定|挂墙|机具/u.test(b))||(b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告/u.test(b)}))return`${a} 存在工作包施工方法过弱`;let g=h(d);if(/^\s*\|.+\|\s*$/mu.test(g))return`${a} 不应使用 Markdown 表格替代工作包正文`}if(g.gG.test(a)){let c=i(a,b);if(!j(b,a))return`${a} 缺少分项工程方案三级小节`;let d=c.split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(0===d.length)return`${a} 未按分项工程方案展开`;if(d.some(a=>!(0,f.az)(a)))return`${a} 存在分项方案内容要素不全`;if(!(0,f.Z1)(c)||d.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"",c=a.match(/(?:施工流程|工艺流程)[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return(b.trim().length>0||c.trim().length>0)&&!(0,f.Z1)(b+c)}))return`${a} 存在分项方案工序顺序表达缺失`}return""}function C(a,b){let c=b;for(let b of a){if(/项目主要施工内容/u.test(b))continue;let a=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");c=c.replace(RegExp(`(^###\\s+(?:\\d+\\.\\d+\\s+)?${a}\\s*\\n)([\\s\\S]*?)(?=^###\\s+|^##\\s+|$)`,"gmu"),(a,c,d)=>{if(/^####\s+\S+/mu.test(d))return`${c}${d}`;let e=c.replace(/^#{1,6}[\s]*/,"").replace(/^\d+(?:\.\d+)*[\s]*/,"").trim();return(0,f.Sw)(e)===(0,f.Sw)(b)?`${c}
|
|
17
17
|
${d.trim()}
|
|
18
18
|
`:`${c}
|
|
19
19
|
#### ${b}
|
|
20
20
|
|
|
21
21
|
${d.trim()}
|
|
22
|
-
`})}return c}function D(a){return(0,g.lg)(a)}function E(a){return(0,g.ap)(a)}function F(a,b){let c=a.map(a=>String(a||"").trim()).filter(Boolean);if(0===c.length||!b)return{markdown:b,promoted:[],missing:[]};let d=b.split(/\r?\n/u),e=new Set;for(let a of d){let b=/^###\s+(.+?)\s*$/u.exec(a.trim());b&&e.add((0,f.Sw)(b[1]))}let g=[],h=d.map(a=>{let b=/^(#{4,5})\s+(.+?)\s*$/u.exec(a.trim());if(!b)return a;let d=(0,f.Sw)(b[2]),h=c.find(a=>(0,f.Sw)(a)===d);return!h||e.has(d)?a:(e.add(d),g.push(h),`### ${h}`)}),i=c.filter(a=>!e.has((0,f.Sw)(a)));return{markdown:h.join("\n"),promoted:g,missing:i}}function G(a,b){let c=a.map(a=>String(a||"").trim()).filter(Boolean);if(0===c.length||!b)return[];let d=new Set;for(let a of String(b).split(/\r?\n/u)){let b=/^###\s+(.+?)\s*$/u.exec(a.trim());b&&d.add((0,f.Sw)(b[1]))}return c.filter(a=>!d.has((0,f.Sw)(a)))}},23760:(a,b,c)=>{c.d(b,{AC:()=>G,AN:()=>ah,Ai:()=>P,BV:()=>S,Bs:()=>bO,D0:()=>bA,Dy:()=>bR,EJ:()=>ai,Ef:()=>N,Ff:()=>E,Fv:()=>ab,H4:()=>ag,Jn:()=>Y,K1:()=>$,KI:()=>a$,M$:()=>bG,N1:()=>bt,NS:()=>ae,Pu:()=>bh,Qi:()=>be,Qm:()=>ad,R9:()=>I,RX:()=>bi,S2:()=>bv,SN:()=>aj,ST:()=>a2,Sn:()=>T,Ty:()=>U,UO:()=>af,VW:()=>as,Wr:()=>ar,Yb:()=>a_,Z2:()=>bd,Zu:()=>a0,bM:()=>bC,cG:()=>bJ,f8:()=>X,gN:()=>V,hd:()=>bH,hr:()=>aX,i0:()=>bj,iC:()=>R,j9:()=>bD,ji:()=>bk,k0:()=>_,kQ:()=>bF,kw:()=>J,lH:()=>bf,lg:()=>bN,mJ:()=>al,mR:()=>bE,pG:()=>L,qK:()=>aq,qm:()=>aO,tW:()=>bu,uy:()=>bP,v4:()=>bK,vY:()=>bc,vZ:()=>aa,wl:()=>M,xX:()=>a1,yd:()=>bw,yw:()=>ap});var d=c(8753),e=c(98281),f=c(76193),g=c(37047),h=c(78217),i=c(11248),j=c(22213),k=c(1358),l=c(70208),m=c(40299),n=c(13145),o=c(91943),p=c(31263),q=c(31846),r=c(65667),s=c(91977),t=c(23500),u=c(31530),v=c(22157),w=c(54185),x=c(3063),y=c(52922),z=c(41991),A=c(10025),B=c(30836),C=c(35547),D=c(68977);function E(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 F(a,b){let c=a.replace(/[\][()`*_>#|{},。、“”‘’:;!?,.!?:;-]+/gu," ").replace(e.ug," ").trim();if(c.length<120)return;let d=[...c.matchAll(/[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 e=d[a][0].toLowerCase();g.set(e,(g.get(e)||0)+1);let h=!1;if(a>0){let b=d[a-1],f=c.slice((b.index??0)+b[0].length,d[a].index??0);h=e===b[0].toLowerCase()&&""===f.trim()}if(h?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 G(a,b=[]){let c=[],d=F(a,"全文");for(let a of(d&&c.push(d),b)){let b=F(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=F(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function H(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 I(a){let b=H(a);return"blocker"===b.severity&&(!!("error"===b.level&&"blocker"===b.severity&&/placeholder|source|style|format|structure/u.test(String(b.category||""))||"error"===b.level&&"blocker"===b.severity&&/交付置信度未达目标/u.test(a.message)||"error"===b.level&&"fact_consistency"===b.category&&/危大工程判定缺失|超危大工程判定缺失|支护形式与资料矛盾|支护形式未落地|设备进场时间荒谬|设备进场工序倒挂/u.test(a.message)||"error"===b.level&&"blocker"===b.severity&&"fact_consistency"===b.category&&"llm_repairable"===b.repairability||"error"===b.level&&"blocker"===b.severity&&"llm_repairable"===b.repairability||/提示词要求|疑似提示词指令标题|适用性自相矛盾|不得出现/u.test(a.message))||(/配置要求缺少必要内容/u.test(a.message)?"error"===a.level:!!/小节内容补写未完成|空小节|小节只有标题|生成未完成/u.test(a.message)||(/工序规格冲突/u.test(a.message)?"error"===a.level:!!/项目特点、重点、难点分析 正文不足|项目主要施工内容 正文不足/u.test(a.message)||(/证据使用覆盖率偏低/u.test(a.message)?"error"===a.level:!/事实一致性冲突:项目名称/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 J(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,f=new Map;for(let b of a){let a=/^###\s+(.+)$/u.exec(b.trim());if(a){let b=(0,m.xT)(a[1]);b.length>=2&&f.set(b,(f.get(b)||0)+1)}let c=/^####\s+(.+)$/u.exec(b.trim());if(!c)continue;let d=c[1],g=/^\d+(?:\.\d+)*/u.test(d);if(g&&!(0,w.cq)(d))continue;let h=g?(0,v.Sw)(d):d.replace(/\s+/gu,"");h.length<2||e.set(h,(e.get(h)||0)+1)}for(let[a,c]of f)if(!(c<2)&&(b.push({level:"error",message:`${d||"某章"} 存在同名小节重复:“${a}”出现 ${c} 次`,suggestion:"同主题内容应合并为一个小节;若确为不同方面,请重命名标题以区分内容,避免目录重复堆叠。"}),b.length>=6))return b;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 K=new Set(["如有","应用","措施","体系","管理","保障","要求","内容","工程","项目","施工"]);function L(a){return 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&&!K.has(a))}function M(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){let b=L(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 N(a,b){let c=(b||[]).flatMap(a=>(a.sections||[]).filter(a=>/新技术|新工艺|新材料|新设备|四新/u.test(a)));if(0===c.length)return[];let d=[],e=(0,v.Xl)(a,"四新",{fuzzy:!0}),f=e?(0,h.V7)(e):0;for(let b of[...new Set(c)]){let c=(0,v.Xl)(a,b,{fuzzy:!0});if(!c||200>(0,h.V7)(c)){if(f>=200)continue;d.push({level:"warning",severity:"warning",message:`大纲承诺小节“${b}”未在正文成稿(正文 ${c?(0,h.V7)(c):0} 字,要求不少于 200 字)`,suggestion:"请补写四新技术应用小节成稿,落位本项目适用的创新工艺、新材料与新设备应用计划。"})}}return d}let O=["basic_facts","source_traceability","chapter_evidence","no_missing_content"];function P(a,b,c){let d=a.map(H),g=["正文缺少提示词要求的封面","正文残留封面内容"],h=a=>g.some(b=>a.startsWith(b)),i=d.filter(a=>"error"===a.level&&I(a)&&!h(a.message)),j=d.filter(a=>"error"===a.level&&h(a.message)),k=[{key:"no_errors",label:"无阻断级校验错误",passed:0===i.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)&&I(a))},{key:"numeric_consistency",label:"跨章数值口径与资料一致",passed:!a.some(a=>"error"===a.level&&/跨章一致性冲突|跨章一致性缺口|跨章一致性复核/u.test(a.message)&&I(a))},{key:"manual_postprocess",label:`封面/页眉页脚/附图等 ${j.length} 项由后期人工完善(不阻断导出)`,passed:!0,message:j.length?j.slice(0,5).map(a=>a.message).join(";"):void 0}],l=[...i,...k.filter(a=>O.includes(a.key)&&!a.passed).map(a=>({level:"error",severity:"blocker",category:"evidence_coverage",repairability:"manual_review",owner:"user",message:`交付门禁未通过:${a.label}`,suggestion:"该项由资料完备度决定,非正文改写可解:请补齐知识库对应资料并重新生成。"}))],m=(0,f.Qi)(d).filter(a=>!l.includes(a));return{passed:0===l.length,blockingIssues:l,checklist:k,manualReviewIssues:m}}function Q(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 R(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}async function S(a){let b=[],c=(0,y._Q)(a);c.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${c.slice(0,3).join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入对象、动作、措施、检查和闭环。"});let d=a.match(/OCR|提示词|绑定片段|后台|文件路径|识别错误|知识库证据|知识库已确认事实|通用兜底段落|兜底占位|兜底模板/giu);return d?.length&&b.push({level:"warning",message:`正文包含后台或资料处理话术:${[...new Set(d)].join("、")}`,suggestion:"建议改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function T(a){return/劳动力|人员|工种/u.test(a)?"劳动力计划":/机械|设备|机具/u.test(a)?"机械设备计划":/材料|物资/u.test(a)?"材料物资计划":/冬季|雨季|高温|台风|大风/u.test(a)?"特殊气候措施":""}function U(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=T(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 V(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 W(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 X(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:W(a[2]||"")})).filter(a=>a.title):[]}(a),c=[...a.matchAll(/^###\s+(\d+\.\d+)\s+(.+)$/gmu)].map(a=>({number:a[1]||"",title:W(a[2]||"")})).filter(a=>a.title);if(0===c.length)return[];if(0===b.length)return/^#{1,6}\s*目录\s*$/mu.test(a)?[{level:"error",message:`目录未列出正文小节:正文有 ${c.length} 个二级小节,而目录未列任何小节条目(只列到章名)`,suggestion:"目录必须按正文二级小节逐条列出「编号 + 标题」,不得只列章名;目录小节数量与编号须与正文全集一致。"}]:[];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 Y(a){let b,c=[];for(let d of a.split(e.A5)){let a=d.trim(),e=/^##\s+第[一二三四五六七八九十百千万\d]+章\s+(.+)$/u.exec(a);if(e){b={ordinal:c.length+1,title:(e[1]||"").trim(),numbers:[],prefixNumbers:[]},c.push(b);continue}let f=/^###\s+(\d+)\.(\d+)\s+/u.exec(a);f&&b&&(b.prefixNumbers.push(Number(f[1])),b.numbers.push(Number(f[2])))}let d=[];for(let a of c){if(0===a.numbers.length)continue;let b=new Map;for(let c of a.prefixNumbers)b.set(c,(b.get(c)||0)+1);let c=[...b.entries()].sort((a,b)=>b[1]-a[1]||a[0]-b[0])[0]?.[0]??a.ordinal,e=[...new Set(a.prefixNumbers.filter(b=>b!==a.ordinal))].sort((a,b)=>a-b);e.length>0&&d.push({level:"error",severity:"blocker",category:"structure",message:`小节编号章号错位:第${a.ordinal}章「${a.title}」内出现 ${e.slice(0,8).map(a=>`${a}.x`).join("、")} 编号小节(应为 ${a.ordinal}.x)`,suggestion:`正文二级小节编号必须为「章序.节序」;按章序重排本章 H3 编号(降级 H4 不占 H3 编号)。`});let f=new Map;for(let b of a.numbers)f.set(b,(f.get(b)||0)+1);let g=[...f.entries()].filter(([,a])=>a>1).map(([a])=>a).sort((a,b)=>a-b);g.length>0&&d.push({level:"error",severity:"blocker",category:"structure",message:`小节编号重复:第${a.ordinal}章「${a.title}」${g.slice(0,8).map(a=>`${c}.${a}`).join("、")} 重复出现`,suggestion:"同章内同一小节编号只允许出现一次;重复编号为降级合并残留,按正文实际小节顺序重排编号。"});let h=Math.max(...a.numbers),i=Array.from({length:h},(a,b)=>b+1).filter(a=>!f.has(a));i.length>0&&d.push({level:"error",severity:"blocker",category:"structure",message:`小节编号缺号:第${a.ordinal}章「${a.title}」缺 ${i.slice(0,8).map(a=>`${c}.${a}`).join("、")}(实有 ${f.size} 个小节,最大编号 ${c}.${h})`,suggestion:"小节编号必须从 1 起连续;缺号源自降级合并占用编号或丢节,按正文小节顺序重排编号后同步重建目录。"})}return d}function Z(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,l.GQ)(b),d=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|注意事项))\s*$/u;return d.test(b)||d.test(c)||(0,l.mq)(b)||(0,l.mq)(c)}function $(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,l.GQ)(a[1]||"")).filter(Z);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function _(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=>W(a).length<=1);d&&b.push({level:"warning",message:`正文存在孤立字或残缺段落:${d}`,suggestion:"请删除残缺行或重新生成所在小节。"});let f=/^(?:[-*+]\s+|[((]?\d+[)).、]\s*)/u,g=/(?:按以下|如下|包括|分为|包含|列出).*[::]$/u,h=a=>/[::]$/u.test(c[a])&&a+1<c.length&&f.test(c[a+1]),i=a=>/[,、;:]$/u.test(c[a])&&a+1<c.length&&!f.test(c[a+1]),j=[];for(let a=0;a<c.length&&j.length<3;a+=1){let b=c[a];!(f.test(b)||g.test(b)||h(a)||i(a))&&(/[,、;:和与在为对将]$/u.test(b)||/(通过|包括|如下|主要包括|验收|合格后|复查合格后|设计风|确认后|具体如下|应符合|不少于|以及|且应|不得少于)$/u.test(b))&&j.push(b)}for(let a of j)b.push({level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文存在疑似截断句:${a}`,suggestion:"请补完整该段落,避免以连接词、逗号、冒号或无句号的动作词结尾。"});let k=c.find(a=>a.length>380);k&&b.push({level:"warning",message:`正文存在过长段落:${k}`,suggestion:"请拆分为多段或表格,改善导出版式和可读性。"});let l=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));l&&b.push({level:"error",message:`正文存在列表项粘连同一行:${l.slice(0,120)}`,suggestion:"有序列表和无序列表必须逐项独占一行,确保 Markdown/PDF/DOCX 正确排版。"});let m=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];m&&b.push({level:"error",message:`正文残留资料页码元信息:${m}`,suggestion:"正式投标正文应引用招标文件、施工图设计文件、工程量清单和相关专业图纸,不写 PDF 页码或资料页数。"});let n=c.find(a=>/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(a));return n&&b.push({level:"error",message:`正文残留内部处理说明:${n.slice(0,120)}`,suggestion:"正式投标正文不得出现内部事实抽取、后台处理或文件名引用限制说明。"}),b}function aa(a){let b=[],c=a.split(e.A5),d=/。{2,}|[!?;:,、]{2,}|。[!?;:,、]|[!?;:,、]。/u;for(let a of c){let c=a.trim();if(!c||/^#{1,6}\s+/u.test(c)||/^\s*\|/u.test(c)||/^<div\b/iu.test(c))continue;let e=d.exec(c);if(e){let a=Math.max(0,e.index-24),d=`${c.slice(a,e.index)}【${e[0]}】${c.slice(e.index+e[0].length,e.index+e[0].length+24)}`;b.push({level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文存在句读标点叠用(拼接/删节残留):${d}`,suggestion:"相邻句读标点(如「。;」「;。」「。。」)是删节拼接残留或省略号误写,请重写该句。"})}}for(let{open:d,close:e,label:f}of o.Rc){let g=a.split(d).length-1,h=a.split(e).length-1;if(g===h)continue;let i=c.find(a=>a.split(d).length-1!=a.split(e).length-1);b.push({level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文存在${f}不闭合(开 ${g} 处、闭 ${h} 处,拼接/删节残留):${i?.trim().slice(0,120)??""}`,suggestion:`${f}成对性破坏是内容丢失拼接的确定性信号,请重写所在句子/小节,补齐或删除残缺部分。`})}return b}function ab(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)&&!/^附表\s*[一二三四五六七八九十\d]{1,3}/u.test(a)).map(a=>(0,l.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,l.GQ)(a[1]||"")),h=(0,l.GQ)((e[c][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,""));1===g.length&&W(g[0])===W(h)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${e[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function ac(a,b){return!(!e.US.test(a)&&!e.s8.test(a)||b.headerCell&&/存在问题|整改措施|整改情况|复查结果|处理情况|检查情况|落实情况|验收结论|备注|说明/u.test(b.headerCell)&&/^无+$/u.test(a))&&(!/^(?:—+|-+)$/u.test(a)||!(b.cellIndex>0&&/^(?:合计|小计|总计|累计)/u.test(b.rowFirstCell||"")))}function ad(a){let b=[];for(let c of Q(a)){let a=c.split(e.A5).filter(a=>e.w7.test(a));if(a.length<2||!e.N3.test(a[1]||""))continue;let d=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>(0,n.jG)(a.trim()))),f=d[0]||[];for(let a of d.slice(2))for(let c=0;c<a.length;c+=1){let d=a[c]||"";ac(d,{rowFirstCell:a[0]||"",headerCell:f[c],cellIndex:c})&&b.push({header:f,rowFirstCell:a[0]||"",cellIndex:c,cell:d})}}return b}function ae(a){a=(0,m.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:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),Q(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=>(0,n.jG)(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)=>ac(b,{rowFirstCell:a[0]||"",headerCell:f[c],cellIndex:c})));if(k){let a=k.find((a,b)=>ac(a,{rowFirstCell:k[0]||"",headerCell:f[b],cellIndex:b}))||"";b.push({level:"error",message:`表格存在占位符单元格:${f.join("、")}(“${k[0]||""}”行“${a}”)`,suggestion:"正式交付表格不得用“—/若干/约/待定”等占位或模糊表达代替具体数据;应从资料补齐具体数值。"})}}return b}function af(a){let b=a.split(/\r?\n/u),c=[],d=(a,d,e)=>{c.some(b=>b.start===a)||c.push({start:a,end:((a,c)=>{for(let d=a+1;d<b.length;d+=1){let a=/^(#{1,4})\s+(.+)$/u.exec(b[d].trim());if(a&&(0===c||a[1].length<=c))return d}return b.length})(a,d),level:d,title:e})};for(let a of[/编制依据/u,/编制说明|编制原则|编制目的/u]){let c=!1;for(let e=0;e<b.length;e+=1){let f=b[e].trim(),g=/^(#{2,4})\s+(.+)$/u.exec(f),h=g?null:/^\*\*(.+)\*\*$/u.exec(f);if(!g&&!h)continue;let i=g?g[2]:h?.[1]??"";if(a.test(i)){d(e,g?g[1].length:0,i),c=!0;break}}if(c)break}for(let a=0;a<b.length;a+=1){let c=b[a].trim();if(!(!c.includes("编制依据")||/^#{1,6}\s/u.test(c)||/^\*\*(.+)\*\*$/u.test(c))&&!(c.includes(" ")||/[.·…]{4,}/u.test(c)))for(let c=a-1;c>=0;c-=1){let e=b[c].trim(),f=/^(#{2,4})\s+(.+)$/u.exec(e),g=f?null:/^\*\*(.+)\*\*$/u.exec(e);if(!f&&!g)continue;if(a-c>60)break;let h=f?f[2]:g?.[1]??"";if(/目录/u.test(h))break;d(c,f?f[1].length:0,h);break}}return c.sort((a,b)=>a.start-b.start)}function ag(a){let b=a.split(/\r?\n/u);return af(a).map(a=>[a.title,...b.slice(a.start+1,a.end)].join("\n")).join("\n")}function ah(a,b,c={}){let d=ag(a);if(!d){let b=/^#{1,6}\s*[^\n]{0,12}(?:编制依据|编制说明|编制原则)/mu.test(a),d=(c.chapterTitles||[]).some(a=>/编制依据|编制说明|编制原则/u.test(a)),e=/编制依据|编制说明/u.test(a);return b||e?b?[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"basis-regulations-coverage",fingerprint:(0,v.c6)(a)},message:"编制依据章节为空:存在标题但未列出任何依据条目",suggestion:"在编制依据章节下逐项列出五类依据的具体条目(法规/条例/规范须含名称与编号)。"}]:[]:d?[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"basis-regulations-coverage",fingerprint:(0,v.c6)(a)},message:"缺少编制依据章节:正文未见「编制依据/编制说明」章节,五类依据(招标文件及补疑、国家法律法规、现行规范标准、地方法规规章、企业管理体系)无从逐项列全",suggestion:"补充「编制依据」章节并按五类逐项列全:招标文件及补疑补遗、国家法律法规、国家/行业现行规范标准、地方法规规章、企业管理体系;地方法规须结合工程所在地属地。"}]:[]}let e=[],f=(d.match(/《[^《》]{2,40}(?:法|条例|办法|规程|规范|标准)》/gu)||[]).map(a=>a.replace(/《|》/gu,""));f.some(a=>/法$/u.test(a))||e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"编制依据小节缺少国家法律法规条目",suggestion:"编制依据小节必须列出具体法律名称及文号(如《中华人民共和国建筑法》),不得空写「国家现行法律、行政法规」类别话术。"}),f.some(a=>/(?:条例|办法)$/u.test(a))||e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"编制依据小节缺少条例类条目",suggestion:"编制依据小节必须列出具体条例名称(如《建设工程质量管理条例》),不得以类别话术代替。"});let g=/《[^《》]{2,40}(?:规范|规程|标准)[^《》]{0,20}》/u.test(d),h=/(?:GB|CJJ|JGJ|JTG|SL|DB|DL|YS|HG)[\s/T]*[A-Z]?[\s/]?\d{2,4}/u.test(d);g||h||e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"编制依据小节缺少施工验收规范条目",suggestion:"编制依据必须包含与本工程分部对应的现行施工验收规范名称及编号(如《给水排水管道工程施工及验收规范》(GB 50268-2008))。"});let i=[...(b?.project.location||"").matchAll(/([\u4e00-\u9fa5]{2,10}?[省市])/gu)].map(a=>a[1]);if(i.length>0&&(i.some(a=>f.some(b=>b.startsWith(a)||b.includes(a)))||e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据小节缺少${i[0]}地方性法规、条例`,suggestion:`编制依据必须列出工程所在地(${i.join("、")})现行地方性法规及条例名称。`})),b&&b.basisRegulations.length>0){let a=b.basisRegulations.filter(a=>!f.includes((a.match(/《([^》]+)》/u)||[])[1]||""));a.length===b.basisRegulations.length&&e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据小节未列招标文件引用法规:${a.slice(0,3).map(a=>a.replace(/(.*/u,"")).join("、")}`,suggestion:"招标文件引用的法规必须照抄进编制依据小节。"})}return e}function ai(a,b,c){let d=(0,r.re)(b,c);if(!d)return[];let e=[],f=new Set;for(let b of(0,r._H)(a,d))f.has(b.label)||(f.add(b.label),e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:b.message,suggestion:b.suggestion}));return e}function aj(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:"error",severity:"blocker",category:"table",owner:"llm",repairability:"llm_repairable",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",category:"table",message:`表格连续堆叠:${h} 处相邻表格无正文分隔`,suggestion:"表格之间应有正文引导叙述,禁止连续堆叠多张表格凑数。"}),b}function ak(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 al(a){return W(a)}function am(a,b){let c=W(a),d=W(b);if(!c||!d)return!1;if(c===d||c.includes(d)||d.includes(c)||(0,v.ty)(c,d))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)}function an(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:W(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function ao(a,b,c,d,f){let g=ak(d),h=e.w7.test(d)&&d.split(e.A5).some(a=>e.N3.test(a)),i=ak(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 ap(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=>!(0,w.cq)(a)&&!(x.gG.test(e.title)&&v.V.test(a.trim()))&&!/^附录/u.test(a.trim()))){let f=W(a),g=function(a,b){let c=an(a).filter(a=>am(a.rawTitle,b));return c.length<=1?c[0]:c.map(a=>({item:a,gap:ao("",b,a.level,a.body,!0),textLength:ak(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=ao(e.title,a,g.level,g.body,!0);i&&c.push(i),d.add(h)}for(let a of an(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=ao(e.title,a.title,a.level,a.body,!1);g&&"empty"===g.reason&&c.push(g),d.add(b)}}return c}function aq(a,b){return ap(a,b).filter(a=>"empty"===a.reason||"missing_planned_section"===a.reason||"too_short"===a.reason).map(a=>({level:"error",category:"structure",message:a.message,suggestion:"missing_planned_section"===a.reason?"必须补充该规划小节正式正文,不得缺节导出。":"必须补充与该小节相关的材料事实和必要内容,达到正文完整度要求。"}))}function ar(a){let b=a.content?.trim()?a.content:"";if(!b)return[];let c=(a.sections||[]).filter(b=>!(0,w.cq)(b)&&!(x.gG.test(a.title)&&v.V.test(b.trim()))&&!/^附录/u.test(b.trim())),d=[...b.matchAll(/^(#{3,4})\s+(.+)$/gmu)],e=[];return d.forEach((a,f)=>{let g=a[1].length,h=(a[2]||"").trim();if(!h)return;let i=(a.index||0)+a[0].length,j=d.slice(f+1).find(a=>a[1].length<=g),k=j?.index??b.length;if(""!==b.slice(i,k).trim())return;let l=b.slice(0,a.index||0).split("\n").length-1;e.push({line:l,rawTitle:h,level:g,planned:c.some(a=>am(a,h))})}),e}function as(a){let b=[];for(let c of a){if(!c.content?.trim())continue;let a=a=>{let b=String(a||"").trim();return!b||(0,w.cq)(b)||/^附录/u.test(b)||x.gG.test(c.title)&&v.V.test(b)},d=(c.sections||[]).filter(b=>!a(b));if(0===d.length)continue;let e=(0,m.r4)(c.content).filter(b=>!a(b));if(e.length<=d.length)continue;let f=new Set(d.map(a=>W(a))),g=e.filter(a=>!f.has(W(a)));b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:c.id,message:`成稿小节超出主题块数:「${c.title}」成稿 ${e.length} 个小节、规划主题块 ${d.length} 个${g.length?`;规划外小节:${g.slice(0,5).join("、")}`:""}`,suggestion:"成稿 H3 小节必须与规划主题块一一对应(拆半块合并为一个小节):规划外小节属相邻主题块内容时并入归属小节并降为 H4,无归属时整节删除;修复后小节编号按正文顺序自动重排。"})}return b}function at(a){return`${a.fieldName||a.key} ${(0,v.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function au(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]}let av=/占地|用地|地下|地上|办公|生活|附属|辅助|绿化|道路|广场|门卫|配电|泵房|锅炉房|车库|车棚|岗亭|传达|警卫|样板房|售楼|门房|单栋|各栋|楼层|每层|单层|架空|雨棚|堆场/u,aw=/办公区|生活区|加工区|施工区|堆场|门卫|配电|泵房|锅炉房|车库|车棚|岗亭|传达|警卫|样板房|售楼|门房|地下室|楼层|单层|每层|架空|雨棚/u,ax=/门卫|门房|岗亭|值班室|传达室|警卫室|公厕|车棚|雨棚|配电房|配电室|泵房|水泵房|锅炉房|样板房|售楼处|构筑物|用房|配套设施|\d{1,3}[栋座处]/u;function ay(a,b){let c=a.slice(Math.max(0,b-48),b),d=c.lastIndexOf("\n\n"),e=d>=0?c.slice(d+2):c;return ax.test(e.replace(/\s+/gu,""))}let az=/暂列|暂估|费率|税率|利润|规费|安全文明|措施费|人工费|材料费|机械费|管理费|暂定/u,aA=["地下建筑面积与地上建筑面积的分项指标","配套用房与附属用房的建筑面积","占地面积与绿化面积的用地指标"],aB=["总建筑面积的总体规模指标","建设规模的总量数值"],aC=["暂列金额与暂估价的子项费用","人工费与材料费的分项费用"],aD=["合同估算价的总金额口径","投资估算的总体金额"];async function aE(a){return(0,z.A)({prototypes:[...aA],negativePrototypes:[...aB],embedDocuments:a})}async function aF(a){return(0,z.A)({prototypes:[...aC],negativePrototypes:[...aD],embedDocuments:a})}async function aG(a,b,c,d,e,f,g){let h=[],i=[],j=new Set,k=RegExp(`(?:${b.source})(?:[^\\n。;;,,]{0,14}?)(\\d{2,}(?:[.,]\\d+)?\\s*万?)\\s*(${c.source})`,"giu"),l=[...a.matchAll(k)],m=f?l.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)||g&&ay(a,b.index??0))}).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)}}):[],n=m.length>0?await f(m.map(a=>a.context)):[],o=new Set(m.filter((a,b)=>n[b]).map(a=>a.index));for(let c of l){let f=c[1].replace(/[,,]/gu,"").replace(/\s+/gu,""),k=c[2],l=c[0].slice(0,c[0].indexOf(c[1])),m=a.slice(Math.max(0,(c.index??0)-16),c.index??0);if(d&&d.test(l)||e&&e.test(m)||g&&ay(a,c.index??0)||o.has(c.index??0)){i.push({value:f,unit:k,scope:c[0].slice(0,l.length).replace(/\s+/gu,""),context:`${m}${l}`.replace(/\s+/gu,"").slice(-24)});continue}let n=c[0].match(b)?.[0]||"",p=`${f}|${k}`;!f||j.has(p)||(j.add(p),h.push({value:f,unit:k,scope:n}))}return{entries:h,skipped:i}}function aH(a,b){return aG(a,aJ,aK,av,aw,b).then(({entries:b})=>{let c=b.find(a=>"建筑面积"===a.scope.replace(/^总/u,""));return/占地|用地/u.test(a)?c:b[0]})}function aI(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 aJ=/(?<![地上地下门卫室值班室配电室配电房泵房水泵房锅炉房公厕车库车棚岗亭传达室警卫室样板房售楼处门房])总?建筑面积|总?建设规模/u,aK=/㎡|m²|m2|平方米/u,aL=/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价/u,aM=/万元|亿元/u,aN=/本组配置|分组配置|按全项目总表调度|按总表调度|总表调度|按全项目机械配置总表|按机械配置总表|按设备配置总表/u;async function aO(a,b,c,d,e){let f=[],g=await aE(e),h=await aF(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(at).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),l=b.quality.map(at).find(a=>/质量|合格|优良/u.test(a));if(k){let b=au(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(at).filter(a=>/建设规模|建筑面积/u.test(a)),o=await Promise.all(n.map(a=>aH(a,g))),p=m??n.find((a,b)=>void 0!==o[b]);if(p){let c=m?j(m):await aH(p,g),{entries:d,skipped:e}=await aG(a,aJ,aK,av,aw,g,ax);if(c){let a=d.filter(a=>aI(a)!==aI(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(at).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"),s=q??b.project.map(at).find(a=>/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价/u.test(a));if(s){let b=q?j(q):(await aG(s,aL,aM,az,void 0,h)).entries[0],c=(await aG(a,aL,aM,az,void 0,h)).entries;if(b){let a=c.filter(a=>aI(a)!==aI(b));a.length>=1&&f.push({level:"error",message:`跨章一致性冲突:正文出现与资料估算价不一致的表述 ${a.slice(0,6).map(a=>`${a.value}${a.unit}`).join("、")}`,suggestion:`请统一使用资料中的估算价口径:${s.slice(0,80)}`})}}let t=new Set;for(let b of a.matchAll(RegExp(aN.source,"gu"))){let c=b.index??0,d=Math.max(a.lastIndexOf("\n",c-1),a.lastIndexOf("。",c-1),a.lastIndexOf(";",c-1),a.lastIndexOf(";",c-1)),e=["\n","。",";",";"].map(b=>a.indexOf(b,c)).filter(a=>a>=0),f=e.length>0?Math.min(...e):a.length;for(let b of(0,r.tx)(a.slice(d+1,f)))t.add(b)}let u=new Map;for(let b of(0,r.AK)(a)){if((0,C.HS)(a,b.start,b.text))continue;let c=b.name,d=String(b.count),e=a.slice(Math.max(0,b.start-20),b.start+b.text.length+24),f=/组|村/u.test(e)||aN.test(e),g=u.get(c)||{values:[],grouped:!1};g.values.includes(d)||g.values.push(d),g.grouped=g.grouped||f,u.set(c,g)}let w=new Map,x=new Map;for(let a of b.billItemFacts??[]){let b=(0,v.lG)(a.value),c=/名称[::]\s*([^\n|]+)/u.exec(b)?.[1]??"",d=(0,r.j4)(c.replace(/[((][^))]*[))]/gu,"").trim());if(!d)continue;let e=b.split("|工程量:")[1]??"",f=/(\d+(?:\.\d+)?)\s*(?:台|套|辆)/u.exec(e),g=f?Number(f[1]):NaN;Number.isFinite(g)&&!(g<=0)&&(w.set(d,(w.get(d)||0)+1),x.set(d,(x.get(d)||0)+g))}for(let[a,b]of u){if(b.values.length<2)continue;let c=b.values.join("、"),d=Math.max(...b.values.map(a=>Number(a))),e=(w.get(a)??0)>=2&&Number.isFinite(d)&&d<=(x.get(a)??0);b.grouped||t.has(a)||e?f.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备分组口径提示:正文「${a}」存在分组配置台数 ${c} 多值并存,需注明分组与全项目总量的调度关系`,suggestion:`分组配置(组/村级)与全项目总量并存时,必须在正文注明「本组配置、按总表调度」或明确分组数量与总量数量之间的对应关系,避免评标误读为口径矛盾。`}):f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性冲突:正文「${a}」配置台数出现互相矛盾的取值 ${c}`,suggestion:`全项目「${a}」配置总量必须全文唯一:以全项目机械配置总表为准统一全部表述;分组配置必须显式注明「本组配置、按总表调度」并删除与总表矛盾的全项目口径数字。`})}let y=/(?:\d+\s*[##号]|[一二三四五六七八九十]\s*[区栋座幢]|[A-Za-z]\s*[栋座幢区])/gu,z=b=>{let c=b=>Math.max(a.lastIndexOf("\n",b-1),a.lastIndexOf("。",b-1),a.lastIndexOf(";",b-1),a.lastIndexOf(";",b-1),a.lastIndexOf("!",b-1),a.lastIndexOf("?",b-1)),d=c(b)+1,e=c(d-1)+1,f=[...a.slice(0,b).matchAll(/^#{1,6}[^\n]*/gmu)].pop();return f?Math.max(0,Math.min(e,f.index)):Math.max(0,e)},A=(a,b,c)=>{let d=[...a.matchAll(y)].filter(b=>!/[与同和及跟]\s*$/u.test(a.slice(Math.max(0,(b.index||0)-3),b.index||0))).map(a=>({marker:a[0].replace(/\s+/gu,""),at:b+(a.index||0)}));if(0===d.length)return[];let e=d.map(a=>Math.abs(a.at-c)),f=Math.min(...e);return[...new Set(d.filter((a,b)=>e[b]===f).map(a=>a.marker))].sort()};for(let{label:b,re:c,contextAware:d}of[{label:"隔油池数量",re:/隔油池[^\d。;;\n|::,,、]{0,6}(\d+)\s*座/gu},{label:"挖沟槽土方",re:/挖沟槽[^\d。;;\n|]{0,15}([\d,]+(?:\.\d+)?)\s*m[³3]/gu,contextAware:!0}]){let e=[];for(let b of a.matchAll(c)){let c=b[1].replace(/,/gu,"");if(e.some(a=>a.value===c))continue;let d=b.index||0,f=z(d);e.push({value:c,context:a.slice(Math.max(0,d-24),d),markers:A(a.slice(f,d+b[0].length),f,d)})}if(e.length>=2){let a="\0未标注",c=b=>b.markers.length>0?b.markers:[a],g=(b,e)=>{let f=c(e),g=c(b).filter(a=>f.includes(a));return 0!==g.length&&(!g.every(b=>b===a)||!d||(0,B.qr)(b.context,e.context)>=6)};if(!e.some((a,b)=>e.slice(b+1).some(b=>g(a,b))))continue;let h=e.map(a=>a.value).join("、");f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性冲突:正文${b}出现互相矛盾的取值 ${h}`,suggestion:`${b}必须全文唯一:以工程量清单为最高优先级裁定正确值,将正文全部相关表述统一为该值,并删除其余矛盾口径。`})}}if(k){let b=au(k)[0],c=Number(/(\d+)\s*(?:日历天|天)/u.exec(b||"")?.[1]);for(let b of a.matchAll(/各阶段工期(?:分别)?为?\s*[::]?\s*([\d]+(?:\s*[、,,]?\s*\d+)*)\s*(?:天|日历天)/gu)){let a=b[1].split(/[、,,]/u).map(a=>Number(a.trim())).filter(a=>Number.isFinite(a)).reduce((a,b)=>a+b,0);Number.isFinite(c)&&a>0&&a!==c&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性冲突:正文各阶段工期文字表述(${b[1]}天)合计 ${a} 天,与总工期 ${c} 天不符`,suggestion:`各阶段工期加总必须等于总工期 ${c} 天:核对各阶段天数并修正文字表述,或与阶段计划表保持一致。`})}}for(let b of a.matchAll(/每间(?:可)?容纳\s*(\d+)\s*人/gu)){let a=Number(b[1]);a>=100&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`逻辑校验失败:正文出现「每间容纳 ${a} 人」的宿舍配置表述,单间宿舍不可能容纳 100 人以上`,suggestion:`宿舍容纳人数按单间 4~8 人配置计算间数(如高峰 216 人按每间 8 人需 27 间),修正配置表述为「每间 X 人、共 Y 间,满足高峰在场人数」的完整口径。`})}for(let b of a.matchAll(/第(\d+)\s*日\s*[~~—至到]\s*第(\d+)\s*日/gu))b[1]===b[2]&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`逻辑校验失败:正文出现「第 ${b[1]} 日~第 ${b[2]} 日」的零长度区间表述`,suggestion:`起止日相同的区间属笔误:按该事项所属施工阶段的实际起止日修正(如进场时间应为阶段开始前)。`});return f}let aP=/找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层|隔热层|隔离层/gu,aQ=/铺设|施工|浇筑|粘贴|铺贴|涂抹|完成|进行|待|设置|铺装|挂网|喷涂|灌注/u,aR=/(?:弯沉|压实|回弹模量|强度|模量|偏差|误差|抗渗|抗冻|标高|覆土|净空|坡度|坡率|直径|管径|宽度|长度|高度|间距|面\s*积|体积|荷载|含水率|孔隙率|比例|图号|编号|桩号|坐标)/u,aS=["施工过程与工序动作的先后描述","铺设浇筑完成后再进行的工序"],aT=["结构层的厚度与配比参数","找平层厚20毫米的规格"];async function aU(a){return(0,z.A)({prototypes:[...aS],negativePrototypes:[...aT],embedDocuments:a})}async function aV(a,b){let c=[],d=[...a.matchAll(aP)],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(!aQ.test(n)&&!("thickness"===k&&aR.test(n))){if("thickness"===k){let a=Number(h[1]??"");if(!Number.isFinite(a)||a<=0||a>=1e3)continue}if("ratio"===k){let a=Number(h[1]?.split(":")[1]??"");if(!Number.isFinite(a)||a<=0||a>100)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=function(a){let b=a.search(/[。;\n]/u);return b>=0?a.slice(0,b):a}(a.slice(g,j)),l=b>0?(d[b-1].index??0)+d[b-1][0].length:Math.max(0,f-40),m=function(a){let b=a.split(/[。;\n]/u);return b[b.length-1]??a}(a.slice(l,f)),n=f-m.length;h(k,g,/(\d+:\d+(?:\.\d+)?)/gu,"first",e,"ratio"),h(m,n,/(\d+:\d+(?:\.\d+)?)/gu,"last",e,"ratio"),h(k,g,/(\d+(?:\.\d+)?)\s*mm/gu,"first",e,"thickness"),h(m,n,/(\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 aW(a,b){let c=[],d=new Set;for(let e of(await aV(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 aX(a,b,c){let d=[],e=await aU(c),f=[...b.specifications,...b.quality,...b.preciseFacts,...b.bills].map(at).join("\n"),g=await aW(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 aW(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)))],f=i.filter(b=>b.layer===a),g=[...new Set(f.map(a=>a.thickness).filter(a=>Number.isFinite(a)))],h=[...new Set(f.map(a=>a.ratio).filter(Boolean))];if(g.length>1||h.length>1){d.push({level:"warning",message:`工序规格口径不唯一,已跳过确定性比对:正文「${a}」出现 ${g.length} 种厚度(${g.join("、")}mm)${h.length>1?`、${h.length} 种配比(${h.join("、")})`:""}——该层名在正文中指代多个对象(如道路/管沟/地坪垫层厚度本就不同),资料侧单一口径无法裁决`,suggestion:`如需确定性核对,请在正文为层名补充对象限定(如「管沟垫层 120mm」「道路垫层 200mm」),或在资料/参数桶中分别登记各对象的规格。`});continue}for(let b of f){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)&&b.thickness!==e[0]){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 aY(a,b,c){let d=await aE(c),e=await aF(c),f=await aU(c),g=[...a.specifications,...a.quality,...a.preciseFacts,...a.bills].map(at).join("\n"),h=new Map;for(let a of(await aW(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(at).filter(a=>/建设规模|建筑面积/u.test(a)),n=await Promise.all(m.map(a=>aH(a,d))),o=l??m.find((a,b)=>void 0!==n[b]),p=j("cost"),q=p??a.project.map(at).find(a=>/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价/u.test(a));return{specTargets:i,scaleTarget:o?l?k(l):await aH(o,d):void 0,costTarget:q?p?k(p):(await aG(q,aL,aM,az,void 0,e)).entries[0]:void 0,scaleGapGate:d,costGapGate:e,actionGate:f}}async function aZ(a,b){let c=[];for(let d of(await aV(a,b.actionGate))){let e=b.specTargets.get(d.layer);if(e&&(0,u.Rd)({authorityOwner:d.layer,bodyLocation:d.layer,bodyWindow:a.slice(Math.max(0,d.span[0]-24),d.span[1]+16),found:d.raw,authority:void 0!==e.thickness?String(e.thickness):e.ratio||""}).allowed){if("ratio"===d.kind&&e.ratio){let a=d.raw.match(/(\d+:\d+(?:\.\d+)?)/u)?.[1];a&&a!==e.ratio&&c.push({start:d.span[0],end:d.span[1],replacement:d.raw.replace(/(\d+:\d+(?:\.\d+)?)/u,e.ratio),detail:`${d.layer}配比 ${a}→${e.ratio}`})}if("thickness"===d.kind&&Number.isFinite(e.thickness)){let a=Number(d.raw.match(/(\d+(?:\.\d+)?)/u)?.[1]),b=a>0&&Number.isFinite(a)?Math.max(a,e.thickness)/Math.min(a,e.thickness):1/0;Number.isFinite(a)&&a!==e.thickness&&b<=5&&c.push({start:d.span[0],end:d.span[1],replacement:d.raw.replace(/(\d+(?:\.\d+)?)/u,String(e.thickness)),detail:`${d.layer}厚度 ${a}mm→${e.thickness}mm`})}}}let d=async(b,d,e,f,g,h,i,j)=>{if(!b)return;let k=RegExp(`(?:${d.source})(?:[^\\n。;;,,]{0,14}?)(\\d{2,}(?:[.,]\\d+)?\\s*万?)\\s*(${e.source})`,"giu"),l=[...a.matchAll(k)],m=i?l.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)||j&&ay(a,b.index??0))}).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)}}):[],n=m.length>0?await i(m.map(a=>a.context)):[],o=new Set(m.filter((a,b)=>n[b]).map(a=>a.index));for(let d of l){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)||j&&ay(a,d.index??0)||o.has(d.index??0))continue;let k={value:d[1].replace(/[,,]/gu,"").replace(/\s+/gu,""),unit:d[2]};if(aI(k)===aI(b))continue;let l=(d.index??0)+d[0].indexOf(d[1]),m=l+d[1].length;c.some(a=>a.start<m&&a.end>l)||c.push({start:l,end:m,replacement:b.value,detail:`${f} ${k.value}${k.unit}→${b.value}${k.unit}`})}};if(await d(b.scaleTarget,aJ,aK,"建设规模",av,aw,b.scaleGapGate,ax),await d(b.costTarget,aL,aM,"估算价",az,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 a$(a,b,c,d){let e=await aY(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 aZ(b.content,e);a.fixedCount>0&&(b.content=a.content,f+=a.fixedCount,g.push(...a.details))}return{fixedCount:f,details:g}}async function a_(a,b,c,d){let e=await aY(b,c,d);if(0===e.specTargets.size&&!e.scaleTarget&&!e.costTarget)return{markdown:a,fixedCount:0,details:[]};let f=await aZ(a,e);return{markdown:f.content,fixedCount:f.fixedCount,details:f.details}}async function a0(a){let{closedLoopBlocks:b}=await (0,y.Pm)(a),c=Math.max(6,Math.ceil((0,h.V7)(a)/1500));return b>=c?[]:[{level:"warning",message:`可落地性闭环句式密度不足:全文 ${b} 段完整闭环句式,未达每 1500 字 1 段(目标 ${c} 段)`,suggestion:"在措施类段落中补齐“责任岗位 + 检查频次 + 整改闭环”三要素齐全的闭环表述:同一自然段内同时出现岗位(如项目经理/质检员/安全员)、频次(每日/每周/不少于X次)与闭环(整改/复查/销项);三要素分散融入叙述,不得以固定句模复读。"}]}function a1(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 a2(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 a3(a){return[[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].map(at).join("\n"),...a.tables.flatMap(a=>[...a.headers,...a.rows.flat()])].join("\n")}function a4(a,b){return!(!/总工期|计划工期|合同工期|日历天|施工周期/u.test(a)||/阶段|历时|用时|合计|总计|共计|累计|预留|机动|余量|剩余|养护|编制|提交|签订|划分|闭合|控制基准|持续时间|关键|节点/u.test(`${a}${b}`))&&(b.match(/\d+(?:\.\d+)?\s*(?:工作天|天)/gu)||[]).length<2}function a5(a,b){return/^\d+(?:\.\d+)?(?:月|年)$/u.test(a)&&/开工|竣工|日期|计划|年|月/u.test(b)}function a6(a,b,c){let d=`${a} ${b}`;if(/(?:工日|人日|次|台|套|个|人|层|间|批|项|处|座|栋|根|只|组|件|块|片|面|条|道|樘|扇|盏|节|段)$/u.test(a)||/三检制|三级|5S|24\s*小时|每日|每周|每月|一次|两次|责任制|制度/u.test(d)||/暂列金额|暂估价|报价|单价|合价|综合单价|税率|增值税|预留金/u.test(d)||a5(a,b))return"soft";let e=c??b;return/(?:天|工作天|月|年)$/u.test(a)&&a4(e,b)||/(?:万元|亿元|元)$/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"}let a7=[["hm2","hm2|hm\xb2|公顷"],["m2","m2|m\xb2|㎡|平方米|平方|平米"],["m3","m3|m\xb3|立方米|立方"],["工作天","工作天|工作日"],["万元","万元|人民币万元|万元人民币"],["天","天|日历天|自然日|个日历天"],["月","月|个月"],["km","km|千米|公里"],["mm","mm|毫米"],["cm","cm|厘米"],["kg","kg|千克|公斤"],["min","min|分钟"],["t","t|吨"],["m","m|米"],["元","元|人民币元|元人民币"],["h","h|小时"]];function a8(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function a9(a){let b=[];for(let c of(0,i.zn)(a)){if(/^\d+\.\d+$/u.test(c))continue;let d=(0,i.K3)(c),e=function(a,b){let c=/^(\d+(?:\.\d+)?)/u.exec(b)?.[1];if(!c)return a.indexOf(b);let d=RegExp(`(?<![\\d.])${a8(b)}(?![\\d.])`,"u").exec(a);if(d)return d.index;let e=b.slice(c.length);if(!e)return -1;let f=a7.find(([a])=>a===e),g=f?f[1]:a8(e),h=RegExp(`(?<![\\d.])${a8(c)}\\s*(?:${g})(?![a-z0-9])`,"iu").exec(a);return h?h.index:-1}(a,c);if(e<0)continue;let f=a.lastIndexOf("\n",e-1)+1,g=a.indexOf("\n",e),h=a.slice(f,g<0?a.length:g);if(/^\s*\|/u.test(h.trim()))continue;let j=a.slice(Math.max(0,e-36),Math.min(a.length,e+c.length+36));if(/违约金|延期竣工|解除合同|缺陷责任期|质量保证金|质保金|履约保证金|保修期/u.test(j))continue;let k=a.slice(Math.max(0,e-16),e);/(?:阶段|缓冲|累计)\s*\d*$/u.test(k)||b.push({token:c,normalizedToken:d,context:j,prefix:k})}return b}function ba(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,v.lG)(a.value).slice(0,18)))&&g.push({level:"warning",message:"生成后事实反查提示:正文质量目标表述未明显匹配质量事实主表",suggestion:"请使用资料中的质量目标原文或等价表述。"}),g}let bb=/(?:天|工作天|日历天|月|年|万元|亿元|元|m2|hm2|亩|㎡|m²|平方米)$/u;function bc(a,b){let c=a3(b);if(80>(0,h.V7)(c))return[];let d=(0,i.K3)(c),e=[],f=[],g=[];for(let b of a9(a)){let{token:a,normalizedToken:c,context:h,prefix:i}=b;if("unsourced"!==(0,k.eS)({token:a,context:h}).kind)continue;let j=a6(a,h,i);"scope"!==j||d.includes(c)||e.push(a),"spec"!==j||d.includes(c)||f.push(a),"soft"!==j||d.includes(c)||g.push(a)}return ba({markdown:a,factsModel:b,scopeSuspicious:e,specSuspicious:f,softSuspicious:g})}async function bd(a,b,c){let d,e=a3(b);if(80>(0,h.V7)(e))return[];let f=(0,i.K3)(e),g=a9(a),j=g.filter(a=>bb.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 l=[],m=[],n=[];for(let a of g){let{token:b,normalizedToken:c,context:e,prefix:g}=a;if("unsourced"!==(0,k.eS)({token:b,context:e}).kind)continue;let h=a6(b,e,g);if(d&&bb.test(b)){let a=d.get(b)||"other";"scope"===h?h="scope"===a?"scope":"soft":"scope"===a&&a4(g??e,e)&&!a5(b,e)&&(h="scope")}"scope"!==h||f.includes(c)||l.push(b),"spec"!==h||f.includes(c)||m.push(b),"soft"!==h||f.includes(c)||n.push(b)}return ba({markdown:a,factsModel:b,scopeSuspicious:l,specSuspicious:m,softSuspicious:n})}let be=8;function bf(a){return/资源|材料|设备|劳动力/u.test(a)?10:be}let bg=["factuality","structure","depth","executable","specificity","consistency"];function bh(a){return 2*bg.filter(b=>a[b]).length}function bi(a){return bg.filter(b=>!a[b])}function bj(a,b){let c=[];for(let e of a){var d;let a=e.content;if(800>(0,h.V7)(a))continue;let f=(d=e.title,/概况|工程|项目/u.test(d)?"事实依据、项目特异性":/部署|总体|组织/u.test(d)?"组织结构、可执行闭环、跨章一致性":/进度|工期/u.test(d)?"进度结构、工期一致性、纠偏机制":/质量/u.test(d)?"质量深度、验收复验、资料闭环":/安全|文明|危大|风险/u.test(d)?"风险覆盖、应急响应、检查整改":/资源|材料|设备|劳动力/u.test(d)?"资源依据、进场调配、进度支撑":"事实依据、专业深度、可执行性"),g=b?.get(e.title);if(!g)continue;let i=bh(g.dimensions);if(i<bf(e.title)){let a=bi(g.dimensions).join("、")||f;c.push({level:"warning",message:`${e.title} 专业评分不足:${i}/12,薄弱维度:${a}`,suggestion:`请按章节任务卡补齐${f},并写出资料依据、实施流程、专业控制点和检查整改闭环。`,chapterId:e.id,provenance:{detectorId:"professional-score",fingerprint:(0,v.c6)(`${e.title}\u0000${i}`)}})}}return c}function bk(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 g of a){if(600>(0,h.V7)(g.content))continue;let a=b?.get(g.title);if(a){for(let b of c)if(!(!b.re.test(g.title)||"construction"===b.needKey&&c.some(a=>"construction"!==a.needKey&&a.re.test(g.title))||"construction"===b.needKey&&/总平面|平面布置|布置图/u.test(g.title))&&!("resource"===b.needKey&&/劳动力/u.test(g.title)&&!/资源|材料|设备/u.test(g.title)&&/进场|入场|退场|调配|轮转/u.test(g.content))){var e,f;a.contentNeeds[b.needKey]||(e=b.needKey,f=g.content,"schedule"===e?/关键线路|关键路径/u.test(f)&&/纠偏|穿插|平行施工|流水施工|赶工/u.test(f):"resource"===e&&/(?:材料|设备|机械|机具|物资|构件|苗木|管材)[^。;;\n|]{0,16}?(?:进场|入场|退场)/u.test(f)&&/调度|保管|台账|供应|仓储|保养/u.test(f))||d.push({level:"error",message:`${g.title}:${b.message}`,suggestion:"请按专业任务卡定向补写该章节,补齐可实施的控制措施、资料依据和闭环要求。",chapterId:g.id})}}}return d}function bl(a,b){return!!(/万元|元|报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(`${a} ${b}`)||/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂|页码|目录/u.test(b)||/^\d+$/.test(a)&&10>Number(a)||/^(?:mm|cm|dm|hm|km|kg|mg|ml|kwh|kj|kpa|mpa|kw|pa|kn|n|t|l|h|g|m|㎡|m²|m³)[23²³]?$/iu.test(a)||/^\d+(?:\.\d+)+\s*(?:项|个|份|页|批|次|条|款)$/u.test(a)||/^\d+\s*页$/u.test(a)||/^(?:COL|R\d+C)\d*$/iu.test(a)||/^[A-Za-z]\.\d+$/u.test(a)||/^[\d.]+\s*(?:天|日)$/u.test(a)&&/期限/u.test(b)||/之日起.{0,8}天内|天内.{0,10}(?:发出|提交|通知|回复|答复|完成|开工|竣工|报送|支付|更换)|天以上|天及以上|‰|暂扣|履约保证金|通过后.{0,6}天|因发包人原因|因承包人原因|未能按时|逾期|违约金/u.test(b))}function bm(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();bl(c,d)||b.add(c)}}return[...b]}function bn(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);bl(d,f)||b.add(d)}}return[...b]}function bo(a,b){let c=(0,i.K3)(b),d=0;for(let b of a)c.includes((0,i.K3)(b))&&(d+=1);return d}let bp=/日历天|个月|㎡|m²|m3|m³|MPa|kPa|kN|GB\/T|GB|JGJ|ISO|DN|φ|Φ|米\/秒|天$/u,bq=[/GB|JGJ|ISO|CJJ|DB/u,/DN|φ|Φ/u,/MPa|kPa|kN|米\/秒/u,/日历天|个月|天$/u,/㎡|m²/u,/m3|m³/u];function br(a){let b=/\d+(?:\.\d+)?/u.exec(a)?.[0];return void 0===b?-1/0:Number.parseFloat(b)}function bs(a){let b=[...a].sort((a,b)=>a.localeCompare(b,"zh")),c=b.filter(a=>bp.test(a)),d=b.filter(a=>!bp.test(a)),e=bq.map(()=>[]),f=[];for(let a of c){let b=bq.findIndex(b=>b.test(a));(b>=0?e[b]:f).push(a)}let g=[...e,f].map(a=>a.sort((a,b)=>{let c=br(a),d=br(b);return Number.isFinite(c)&&Number.isFinite(d)?d-c||a.localeCompare(b,"zh"):Number.isFinite(c)?-1:Number.isFinite(d)?1:a.localeCompare(b,"zh")})),h=[],i=0,j=0;for(;h.length<8&&j<g.length;){let a=g[i%g.length];a.length>0?(h.push(a.shift()),j=0):j+=1,i+=1}return[...h,...d.slice(0,2)].slice(0,10)}async function bt(a,b,c=[]){let d=[],f=bn(c),h=f.length>=e.mu?f:bm(b),j=bo(h,a);h.length>=e.mu&&j/h.length<e.tg&&d.push({level:"warning",message:`可靠精确参数使用不足:${j}/${h.length}`,suggestion:"请将资料中可靠的规格、参数、数量、时间、比例和标准编号写入对应章节;商务金额、单价、税率、预留金不得写入正文。"});let k=bs(h);if(k.length>=6){let b=(0,i.K3)(a),c=bo(k,a),e=k.filter(a=>!b.includes((0,i.K3)(a)));if(e.length>0&&c/k.length<.5){let b=a.split(/[。;;|]/u).map(a=>a.trim()).filter(a=>a.length>=6&&a.length<=160).slice(0,300);if(b.length>0){let a=await (0,g.Mv)(e.slice(0,10),b);e=e.filter(c=>!b.some(b=>a(c,b)>=g.Eh)),c=k.length-e.length}}if(c/k.length<.5){let b=e.slice(0,3);d.push({level:"error",message:`可靠精确参数使用不足:关键参数抽查 ${c}/${k.length}${b.length?`(缺失如 ${b.join("、")})`:""}`,suggestion:"请将资料中的关键工程参数(工期、面积、强度等级、材料规格、规范编号等)写入正文对应章节,不得因参数总量达标而遗漏核心参数。",provenance:{detectorId:"precise-fact-usage",fingerprint:(0,v.c6)(a)}})}}return b.bills.length>0&&!e.pP.test(a)&&d.push({level:"error",message:"正文未体现结构化数据资料",suggestion:"请从表格、列表或明细中提取对象、单位、数量、规格和关键参数补入对应章节。",provenance:{detectorId:"precise-fact-usage",fingerprint:(0,v.c6)(a)}}),b.drawings.length>0&&!e._U.test(a)&&d.push({level:"error",message:"正文未体现设计/方案/说明类资料",suggestion:"请从设计、方案或说明资料中提取对象、流程、节点、做法、配置、规则和标准要求。",provenance:{detectorId:"precise-fact-usage",fingerprint:(0,v.c6)(a)}}),d}function bu(a,b,c=[]){let d=(0,i.K3)(a),f=bn(c),g=bs(f.length>=e.mu?f:bm(b));return g.length<6?[]:g.filter(a=>!d.includes((0,i.K3)(a)))}async function bv(a,b,c){let d=[];if(0===(c.tables||[]).length)return d;let e=(0,k.JV)(a,c),f=e.filter(a=>!a.exempt);if(0===f.length)return d;let h=e.length-f.length,i=f.filter(a=>a.placed),j=f.filter(a=>!a.placed),l=f.length,m=i.length,n=(0,q.R8)(a,i.map(a=>a.itemName)),o=new Set;if(j.length>0&&m/l<.9){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.itemName))];if(b.length>0&&c.length>0)for(let a=0;a<c.length;a+=60){let d=c.slice(a,a+60),e=await (0,g.Mv)(d,b);for(let a of d)b.some(b=>e(a,b)>=g.Eh)&&o.add(a)}}let p=m+j.filter(a=>o.has(a.itemName)).length,r=j.filter(a=>!o.has(a.itemName)),s=a=>{if(0===b.length)return"";let c=(0,q.o7)({name:a.itemName,description:a.description||""},b);return c?`,建议落位「${c.chapterTitle.slice(0,24)}」`:""},t=new Map;for(let a of r){let b=a.itemName.slice(0,40),c=t.get(b);c?c.rows+=1:t.set(b,{name:a.itemName,rows:1,sample:a})}let u=[...t.values()].sort((a,b)=>b.rows-a.rows),w=p/l,x=[h>0?`口径行 ${h} 行(汇总/噪声/费用/标题等非清单明细)已豁免不计入分母`:"",n.size>0?`显性说明 ${n.size} 行(利旧/甲供/不涉及等说明式处置)`:""].filter(Boolean).join(";"),y=u.length>0?`未落位项(共${r.length}行/${u.length}类):${u.slice(0,30).map(a=>`${a.name.slice(0,40)}${a.rows>1?`\xd7${a.rows}`:""}${a.sample.quantity?` ${a.sample.quantity}`:""}(未落位${s(a.sample)})`).join(";")}${u.length>30?` 及其他${u.length-30}类(同类项按已列名称分组归并补写)`:""}`:"";if(w<.9)return d.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"boq-placement",fingerprint:(0,v.c6)(a)},message:`清单项落位不足:${p}/${l} 项(${Math.round(100*w)}%)${y?`。${y}`:""}`,suggestion:`请将未落位清单项按专业工程分组补写进对应章节"主要施工内容"小节(融入各专业工程的作业对象与工程量、工序顺序、施工方法叙述),优先落位主要分部分项、关键规格与大额工程量;对确实不涉及/利旧/甲供/由厂家配套的条目,在正文对应章节显性说明处置方式(说明句须含条目名称)。${y}${x?`〔落位审计:${x}〕`:""}`}),d;if(0===r.length)return d;let z=j.length>0&&p/l<.9,A=z?j.filter(a=>o.has(a.itemName)):[],B=new Set(A.map(a=>a.itemName.slice(0,40))),C=u.filter(a=>!B.has(a.name.slice(0,40))),D=C.slice(0,20).map(a=>`${a.name.slice(0,40)}${a.rows>1?`\xd7${a.rows}`:""}${a.sample.quantity?` ${a.sample.quantity}`:""}(未落位${s(a.sample)})`).join(";"),E=z?`其中语义已承接 ${A.length} 行(${B.size} 类),未承接 ${C.reduce((a,b)=>a+b.rows,0)} 行(${C.length} 类)`:`(落位率已达线,语义兜底通道未触发——下列缺口均为字面未落位,是否已被同义表述承接需人工判断)`;return d.push({level:"warning",category:"evidence_coverage",owner:"user",repairability:"manual_review",provenance:{detectorId:"boq-placement",fingerprint:(0,v.c6)(a)},message:`清单落位缺口清单(已达落位率线,残留缺口供复核):${p}/${l} 项(${Math.round(100*w)}%),字面未落位 ${r.length} 行 / ${u.length} 类;${E}${D?`。缺口项:${D}`:""}`,suggestion:`以下未落位项须逐条给出处置:补写进对应章节、或显性说明(不涉及/利旧/甲供/由厂家配套)。${D}${x?`〔落位审计:${x}〕`:""}`}),d}function bw(a,b){if(!b||0===b.groups.length)return[];let c=(0,p.SL)(b,a);if(0===c.unreferenced.length||c.rate>=.9)return[];let d=b.groups.length,e=c.unreferenced.slice(0,6).map(a=>{let b=a.factLines[0]?.slice(0,60)||"";return`${a.sourceFile.split("/").pop()||a.sourceFile}${b?`(如:${b})`:""}`}),f=Math.round(100*c.rate),g=`请将未落位图纸的设计说明、构造做法、材料规格与设备参数写入对应专业章节(按专业归属:结构/道路/排水/照明等),与清单规格一致的照抄清单权威值,不得编造;未落位图纸:${e.join("、")}`;return c.rate<.5&&d>=2?[{level:"error",severity:"blocker",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"drawing-reference",fingerprint:(0,v.c6)(a)},message:`图纸事实落位不足:${c.referenced.length}/${d} 份图纸的规格/做法事实在正文落位(${f}%)`,suggestion:g}]:[{level:"warning",severity:"warning",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"drawing-reference",fingerprint:(0,v.c6)(a)},message:`图纸事实未完全落位:${c.referenced.length}/${d} 份图纸被正文引用(${f}%,目标 ≥${Math.round(90)}%)`,suggestion:g}]}let bx=[{pattern:/按设计图纸(?:控制|计量|要求|施工|确定|执行|进行|处理|设置|选用|计算|调整)/gu,label:"按设计图纸…"},{pattern:/按(?:施工)?图纸(?:控制|计量|要求|施工|确定|执行)/gu,label:"按图纸…"},{pattern:/以(?:设计)?图纸为准|详见(?:施工)?图纸/gu,label:"以图纸为准/详见图纸"},{pattern:/详见[^。;\n]{0,16}(?:大样图|详图|节点图|工艺图|做法表)/gu,label:"详见\xd7\xd7大样图"},{pattern:/(?:资料|图纸|清单|设计文件)(?:中)?未(?:提供|明确|给出|注明)[^。;\n]{0,12}(?:参数|数据|做法|要求|规格)?/gu,label:"缺资料搪塞"},{pattern:/(?:具体(?:参数|做法|数值))?待(?:补充|确认|核实|明确)/gu,label:"待补充/待确认"}],by=/(?:参见《[^》]{2,40}》\s*)?(?:[皖烷京沪苏浙粤鲁豫鄂湘川渝陕冀晋蒙辽吉黑闽赣桂黔滇甘青宁新藏]\s?\d{4}|\d{2})\s?[A-Z]{1,2}\s?\d{2,4}(?:[//]\d{1,3})?/u,bz=/依据|编制|规范标准|标准规范|执行本|遵照/u;function bA(a){let b=String(a||"");if(!b)return[];let c=[];for(let{pattern:a,label:d}of bx)for(let e of b.matchAll(a)){let a=bB(b,e.index??0);"缺资料搪塞"===d&&bz.test(a)||c.push({label:d,sample:a.slice(0,60)})}for(let a of b.matchAll(/参见《[^》]{2,40}》[^。;\n]{0,20}/gu)){let d=bB(b,a.index??0);!bz.test(d)&&by.test(a[0])&&c.push({label:"参见《…》图集替代做法",sample:a[0].replace(/\s+/gu," ").slice(0,60)})}for(let a of b.matchAll(/(?:参见|详见|参照|见|按|依照)[^。;\n]{0,10}?((?:[皖烷京沪苏浙粤鲁豫鄂湘川渝陕冀晋蒙辽吉黑闽赣桂黔滇甘青宁新藏]\s?\d{4}|\d{2})\s?[A-Z]{1,2}\s?\d{2,4}(?:[//]\d{1,3})?)/gu)){let d=bB(b,a.index??0);bz.test(d)||c.push({label:"图集号指向替代做法",sample:a[0].replace(/\s+/gu," ").slice(0,60)})}if(0===c.length)return[];let d=new Map;for(let a of c)d.set(a.label,(d.get(a.label)||0)+1);return[{level:"error",severity:"blocker",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"drawing-pointer-phrase",fingerprint:(0,v.c6)(a)},message:`指向型表述替代具体做法:${c.length} 处(${[...d.entries()].map(([a,b])=>`${a} ${b} 处`).join("、")})`,suggestion:`请把每处指向改写为本项目已确认的具体做法与参数实值(取蓝图/工程量清单/图纸标注/规范的确定值);缺该条目权威值时按同专业已确认的等效做法+已有资料写实,不得指向图纸/图集、不得写「未提供」类搪塞。示例:${c.slice(0,4).map(a=>a.sample).join(" / ")}`}]}function bB(a,b){let c=Math.max(0,a.lastIndexOf("。",b)+1,a.lastIndexOf(";",b)+1,a.lastIndexOf("\n",b)+1),d=[a.indexOf("。",b),a.indexOf(";",b),a.indexOf("\n",b)].filter(a=>a>=0),e=d.length>0?Math.min(...d):a.length;return a.slice(c,e)}function bC(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:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见资料/按文件”。"});let c=ad(a);if(c.length>0){let a=c[0];b.push({level:"warning",message:`存在占位式表达:表格数据格占位符(${a.header.join("、")}“${a.rowFirstCell}”行“${a.cell}”)共 ${c.length} 处`,suggestion:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见资料/按文件”。"})}return b}function bD(a){return(0,C.LZ)(a).map(a=>({level:"error",message:`小节标题「${a.title}」含本小节正文未覆盖的工程类别:${a.uncovered.join("、")}`,suggestion:"标题中的工程类别必须在小节正文有对应施工内容;请将标题改为与实际施工内容一致的名称,不得照抄工程量清单章节汇总行名称。"}))}function bE(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,f=[];for(let a of(0,d.V)().autoSpecGates)(function(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})(c,a.templateMatchers)&&f.push(a);if(0===f.length)return[];let g=[],h=Q(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:"error",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:"error",message:`配置要求正式表格不足:${h}/${i}`,suggestion:"如用户提示词或章节内容要求表格,应按项目资料补充对应表格本体。"}),g}function bF(a,b,c,d,f,g,i){var j;if(!a)return b;let k=[...b],l=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),m=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,l),n=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,s.I2)(c,b)&&(e=!0),!f&&(0,s.I2)(c,b)&&(f=!0)}0!==a.length||m.has(b.name)||e||k.push({level:"warning",message:`系统暂未从知识库确认必需事实:${b.name}`,suggestion:b.extractionHint||"请扩大本地知识库检索、执行事实补抽,或调整事实字段配置。"}),f||k.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&&k.push({level:"warning",message:`章节内容深度建议:${b.title}`,suggestion:`可扩展到约 ${b.minWords} 字,但不要改变模板章节结构。`})}let o=Q(f),p=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),q=(0,h.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},h=a.target||b.target||"",j=a.value||b.value||h,r=d.find(a=>a.title===h),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:h,value:j,min:a.min||Number(b.value)||1,markdown:f,textScope:"chapter"===a.subject&&r?r.content:f,regex:j?function(a){try{return RegExp(a,"iu")}catch{return}}(j):void 0,chapter:r,factNames:m,chapterTitles:n,tableBlocks:o,imageRefs:p,estimatedPages:q,allFacts:l,factsModel:c,projectBindings:g,promptBindings:i});s&&k.push(s)}return k}function bG(a,b){let c=function(a){let b="";for(let c of(0,t.dU)(a))c.content&&(b+=`${c.content}
|
|
22
|
+
`})}return c}function D(a){return(0,g.lg)(a)}function E(a){return(0,g.ap)(a)}function F(a,b){let c=a.map(a=>String(a||"").trim()).filter(Boolean);if(0===c.length||!b)return{markdown:b,promoted:[],missing:[]};let d=b.split(/\r?\n/u),e=new Set;for(let a of d){let b=/^###\s+(.+?)\s*$/u.exec(a.trim());b&&e.add((0,f.Sw)(b[1]))}let g=[],h=d.map(a=>{let b=/^(#{4,5})\s+(.+?)\s*$/u.exec(a.trim());if(!b)return a;let d=(0,f.Sw)(b[2]),h=c.find(a=>(0,f.Sw)(a)===d);return!h||e.has(d)?a:(e.add(d),g.push(h),`### ${h}`)}),i=c.filter(a=>!e.has((0,f.Sw)(a)));return{markdown:h.join("\n"),promoted:g,missing:i}}function G(a,b){let c=a.map(a=>String(a||"").trim()).filter(Boolean);if(0===c.length||!b)return[];let d=new Set;for(let a of String(b).split(/\r?\n/u)){let b=/^###\s+(.+?)\s*$/u.exec(a.trim());b&&d.add((0,f.Sw)(b[1]))}return c.filter(a=>!d.has((0,f.Sw)(a)))}},23760:(a,b,c)=>{c.d(b,{AC:()=>G,AN:()=>ah,Ai:()=>P,BV:()=>S,Bs:()=>bO,D0:()=>bA,Dy:()=>bR,EJ:()=>ai,Ef:()=>N,Ff:()=>E,Fv:()=>ab,H4:()=>ag,Jn:()=>Y,K1:()=>$,KI:()=>a$,M$:()=>bG,N1:()=>bt,NS:()=>ae,Pu:()=>bh,Qi:()=>be,Qm:()=>ad,R9:()=>I,RX:()=>bi,S2:()=>bv,SN:()=>aj,ST:()=>a2,Sn:()=>T,Ty:()=>U,UO:()=>af,VW:()=>as,Wr:()=>ar,Yb:()=>a_,Z2:()=>bd,Zu:()=>a0,bM:()=>bC,cG:()=>bJ,f8:()=>X,gN:()=>V,hd:()=>bH,hr:()=>aX,i0:()=>bj,iC:()=>R,j9:()=>bD,ji:()=>bk,k0:()=>_,kQ:()=>bF,kw:()=>J,lH:()=>bf,lg:()=>bN,mJ:()=>al,mR:()=>bE,pG:()=>L,qK:()=>aq,qm:()=>aO,tW:()=>bu,uy:()=>bP,v4:()=>bK,vY:()=>bc,vZ:()=>aa,wl:()=>M,xX:()=>a1,yd:()=>bw,yw:()=>ap});var d=c(8753),e=c(98281),f=c(76193),g=c(37047),h=c(78217),i=c(11248),j=c(22213),k=c(1358),l=c(70208),m=c(40299),n=c(13145),o=c(91943),p=c(31263),q=c(31846),r=c(65667),s=c(91977),t=c(23500),u=c(31530),v=c(22157),w=c(54185),x=c(3063),y=c(52922),z=c(41991),A=c(10025),B=c(30836),C=c(35547),D=c(68977);function E(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 F(a,b){let c=a.replace(/[\][()`*_>#|{},。、“”‘’:;!?,.!?:;-]+/gu," ").replace(e.ug," ").trim();if(c.length<120)return;let d=[...c.matchAll(/[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 e=d[a][0].toLowerCase();g.set(e,(g.get(e)||0)+1);let h=!1;if(a>0){let b=d[a-1],f=c.slice((b.index??0)+b[0].length,d[a].index??0);h=e===b[0].toLowerCase()&&""===f.trim()}if(h?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 G(a,b=[]){let c=[],d=F(a,"全文");for(let a of(d&&c.push(d),b)){let b=F(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=F(e[1],`小节“${d}”`);f&&c.push(f)}}return c}function H(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 I(a){let b=H(a);return"blocker"===b.severity&&(!!("error"===b.level&&"blocker"===b.severity&&/placeholder|source|style|format|structure/u.test(String(b.category||""))||"error"===b.level&&"blocker"===b.severity&&/交付置信度未达目标/u.test(a.message)||"error"===b.level&&"fact_consistency"===b.category&&/危大工程判定缺失|超危大工程判定缺失|支护形式与资料矛盾|支护形式未落地|设备进场时间荒谬|设备进场工序倒挂/u.test(a.message)||"error"===b.level&&"blocker"===b.severity&&"fact_consistency"===b.category&&"llm_repairable"===b.repairability||"error"===b.level&&"blocker"===b.severity&&"llm_repairable"===b.repairability||/提示词要求|疑似提示词指令标题|适用性自相矛盾|不得出现/u.test(a.message))||(/配置要求缺少必要内容/u.test(a.message)?"error"===a.level:!!/小节内容补写未完成|空小节|小节只有标题|生成未完成/u.test(a.message)||(/工序规格冲突/u.test(a.message)?"error"===a.level:!!/项目特点、重点、难点分析 正文不足|项目主要施工内容 正文不足/u.test(a.message)||(/证据使用覆盖率偏低/u.test(a.message)?"error"===a.level:!/事实一致性冲突:项目名称/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 J(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,f=new Map;for(let b of a){let a=/^###\s+(.+)$/u.exec(b.trim());if(a){let b=(0,m.xT)(a[1]);b.length>=2&&f.set(b,(f.get(b)||0)+1)}let c=/^####\s+(.+)$/u.exec(b.trim());if(!c)continue;let d=c[1],g=/^\d+(?:\.\d+)*/u.test(d);if(g&&!(0,w.cq)(d))continue;let h=g?(0,v.Sw)(d):d.replace(/\s+/gu,"");h.length<2||e.set(h,(e.get(h)||0)+1)}for(let[a,c]of f)if(!(c<2)&&(b.push({level:"error",message:`${d||"某章"} 存在同名小节重复:“${a}”出现 ${c} 次`,suggestion:"同主题内容应合并为一个小节;若确为不同方面,请重命名标题以区分内容,避免目录重复堆叠。"}),b.length>=6))return b;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 K=new Set(["如有","应用","措施","体系","管理","保障","要求","内容","工程","项目","施工"]);function L(a){return 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&&!K.has(a))}function M(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){let b=L(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 N(a,b){let c=(b||[]).flatMap(a=>(a.sections||[]).filter(a=>/新技术|新工艺|新材料|新设备|四新/u.test(a)));if(0===c.length)return[];let d=[],e=(0,v.Xl)(a,"四新",{fuzzy:!0}),f=e?(0,h.V7)(e):0;for(let b of[...new Set(c)]){let c=(0,v.Xl)(a,b,{fuzzy:!0});if(!c||200>(0,h.V7)(c)){if(f>=200)continue;d.push({level:"warning",severity:"warning",message:`大纲承诺小节“${b}”未在正文成稿(正文 ${c?(0,h.V7)(c):0} 字,要求不少于 200 字)`,suggestion:"请补写四新技术应用小节成稿,落位本项目适用的创新工艺、新材料与新设备应用计划。"})}}return d}let O=["basic_facts","source_traceability","chapter_evidence","no_missing_content"];function P(a,b,c){let d=a.map(H),g=["正文缺少提示词要求的封面","正文残留封面内容"],h=a=>g.some(b=>a.startsWith(b)),i=d.filter(a=>"error"===a.level&&I(a)&&!h(a.message)),j=d.filter(a=>"error"===a.level&&h(a.message)),k=[{key:"no_errors",label:"无阻断级校验错误",passed:0===i.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)&&I(a))},{key:"numeric_consistency",label:"跨章数值口径与资料一致",passed:!a.some(a=>"error"===a.level&&/跨章一致性冲突|跨章一致性缺口|跨章一致性复核/u.test(a.message)&&I(a))},{key:"manual_postprocess",label:`封面/页眉页脚/附图等 ${j.length} 项由后期人工完善(不阻断导出)`,passed:!0,message:j.length?j.slice(0,5).map(a=>a.message).join(";"):void 0}],l=[...i,...k.filter(a=>O.includes(a.key)&&!a.passed).map(a=>({level:"error",severity:"blocker",category:"evidence_coverage",repairability:"manual_review",owner:"user",message:`交付门禁未通过:${a.label}`,suggestion:"该项由资料完备度决定,非正文改写可解:请补齐知识库对应资料并重新生成。"}))],m=(0,f.Qi)(d).filter(a=>!l.includes(a));return{passed:0===l.length,blockingIssues:l,checklist:k,manualReviewIssues:m}}function Q(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 R(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}async function S(a){let b=[],c=(0,y._Q)(a);c.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${c.slice(0,3).join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入对象、动作、措施、检查和闭环。"});let d=a.match(/OCR|提示词|绑定片段|后台|文件路径|识别错误|知识库证据|知识库已确认事实|通用兜底段落|兜底占位|兜底模板/giu);return d?.length&&b.push({level:"warning",message:`正文包含后台或资料处理话术:${[...new Set(d)].join("、")}`,suggestion:"建议改为正式文档语言,例如“资料文字不清”“资料口径不一致”“项目资料”,不得暴露后台处理过程。"}),b}function T(a){return/劳动力|人员|工种/u.test(a)?"劳动力计划":/机械|设备|机具/u.test(a)?"机械设备计划":/材料|物资/u.test(a)?"材料物资计划":/冬季|雨季|高温|台风|大风/u.test(a)?"特殊气候措施":""}function U(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=T(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 V(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 W(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 X(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:W(a[2]||"")})).filter(a=>a.title):[]}(a),c=[...a.matchAll(/^###\s+(\d+\.\d+)\s+(.+)$/gmu)].map(a=>({number:a[1]||"",title:W(a[2]||"")})).filter(a=>a.title);if(0===c.length)return[];if(0===b.length)return/^#{1,6}\s*目录\s*$/mu.test(a)?[{level:"error",message:`目录未列出正文小节:正文有 ${c.length} 个二级小节,而目录未列任何小节条目(只列到章名)`,suggestion:"目录必须按正文二级小节逐条列出「编号 + 标题」,不得只列章名;目录小节数量与编号须与正文全集一致。"}]:[];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 Y(a){let b,c=[];for(let d of a.split(e.A5)){let a=d.trim(),e=/^##\s+第[一二三四五六七八九十百千万\d]+章\s+(.+)$/u.exec(a);if(e){b={ordinal:c.length+1,title:(e[1]||"").trim(),numbers:[],prefixNumbers:[]},c.push(b);continue}let f=/^###\s+(\d+)\.(\d+)\s+/u.exec(a);f&&b&&(b.prefixNumbers.push(Number(f[1])),b.numbers.push(Number(f[2])))}let d=[];for(let a of c){if(0===a.numbers.length)continue;let b=new Map;for(let c of a.prefixNumbers)b.set(c,(b.get(c)||0)+1);let c=[...b.entries()].sort((a,b)=>b[1]-a[1]||a[0]-b[0])[0]?.[0]??a.ordinal,e=[...new Set(a.prefixNumbers.filter(b=>b!==a.ordinal))].sort((a,b)=>a-b);e.length>0&&d.push({level:"error",severity:"blocker",category:"structure",message:`小节编号章号错位:第${a.ordinal}章「${a.title}」内出现 ${e.slice(0,8).map(a=>`${a}.x`).join("、")} 编号小节(应为 ${a.ordinal}.x)`,suggestion:`正文二级小节编号必须为「章序.节序」;按章序重排本章 H3 编号(降级 H4 不占 H3 编号)。`});let f=new Map;for(let b of a.numbers)f.set(b,(f.get(b)||0)+1);let g=[...f.entries()].filter(([,a])=>a>1).map(([a])=>a).sort((a,b)=>a-b);g.length>0&&d.push({level:"error",severity:"blocker",category:"structure",message:`小节编号重复:第${a.ordinal}章「${a.title}」${g.slice(0,8).map(a=>`${c}.${a}`).join("、")} 重复出现`,suggestion:"同章内同一小节编号只允许出现一次;重复编号为降级合并残留,按正文实际小节顺序重排编号。"});let h=Math.max(...a.numbers),i=Array.from({length:h},(a,b)=>b+1).filter(a=>!f.has(a));i.length>0&&d.push({level:"error",severity:"blocker",category:"structure",message:`小节编号缺号:第${a.ordinal}章「${a.title}」缺 ${i.slice(0,8).map(a=>`${c}.${a}`).join("、")}(实有 ${f.size} 个小节,最大编号 ${c}.${h})`,suggestion:"小节编号必须从 1 起连续;缺号源自降级合并占用编号或丢节,按正文小节顺序重排编号后同步重建目录。"})}return d}function Z(a){let b=a.replace(/^#{1,6}\s+/u,"").replace(/^\s*\d+(?:\.\d+)*(?:[..、]|\s)+/u,"").replace(/^第[一二三四五六七八九十百千万\d]+[章节篇部分]\s*/u,"").trim(),c=(0,l.GQ)(b),d=/^(?:\d+(?:\.\d+)*\s*)?(?:[-—–]\s*)?(?:(?:判断|判定|识别|确认)?是否(?:涉及|涉|需要|适用).*|(?:如|若|如果)(?:涉及|不涉及|适用|不适用).*|.*(?:根据|结合).{0,12}(?:实际情况|项目情况|资料情况).{0,8}(?:判断|确定|编写|生成).*|.*(?:按需(?:生成|编写)|视情况|判断后|生成要求|编写要求|注意事项))\s*$/u;return d.test(b)||d.test(c)||(0,l.mq)(b)||(0,l.mq)(c)}function $(a){let b=[...a.matchAll(/^#{2,6}\s+(.+)$/gmu)].map(a=>(0,l.GQ)(a[1]||"")).filter(Z);return b.length>0?[{level:"error",message:`正文存在疑似提示词指令标题:${[...new Set(b)].slice(0,8).join("、")}`,suggestion:"请删除或改写为正式施工组织设计小节标题,目录也不得收录该类标题。"}]:[]}function _(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=>W(a).length<=1);d&&b.push({level:"warning",message:`正文存在孤立字或残缺段落:${d}`,suggestion:"请删除残缺行或重新生成所在小节。"});let f=/^(?:[-*+]\s+|[((]?\d+[)).、]\s*)/u,g=/(?:按以下|如下|包括|分为|包含|列出).*[::]$/u,h=a=>/[::]$/u.test(c[a])&&a+1<c.length&&f.test(c[a+1]),i=a=>/[,、;:]$/u.test(c[a])&&a+1<c.length&&!f.test(c[a+1]),j=[];for(let a=0;a<c.length&&j.length<3;a+=1){let b=c[a];!(f.test(b)||g.test(b)||h(a)||i(a))&&(/[,、;:和与在为对将]$/u.test(b)||/(通过|包括|如下|主要包括|验收|合格后|复查合格后|设计风|确认后|具体如下|应符合|不少于|以及|且应|不得少于)$/u.test(b))&&j.push(b)}for(let a of j)b.push({level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文存在疑似截断句:${a}`,suggestion:"请补完整该段落,避免以连接词、逗号、冒号或无句号的动作词结尾。"});let k=c.find(a=>a.length>380);k&&b.push({level:"warning",message:`正文存在过长段落:${k}`,suggestion:"请拆分为多段或表格,改善导出版式和可读性。"});let l=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));l&&b.push({level:"error",message:`正文存在列表项粘连同一行:${l.slice(0,120)}`,suggestion:"有序列表和无序列表必须逐项独占一行,确保 Markdown/PDF/DOCX 正确排版。"});let m=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];m&&b.push({level:"error",message:`正文残留资料页码元信息:${m}`,suggestion:"正式投标正文应引用招标文件、施工图设计文件、工程量清单和相关专业图纸,不写 PDF 页码或资料页数。"});let n=c.find(a=>/仅作为内部事实提取依据|正式正文不得引用文件名|后台事实|内部事实/u.test(a));return n&&b.push({level:"error",message:`正文残留内部处理说明:${n.slice(0,120)}`,suggestion:"正式投标正文不得出现内部事实抽取、后台处理或文件名引用限制说明。"}),b}function aa(a){let b=[],c=a.split(e.A5),d=/。{2,}|[!?;:,、]{2,}|。[!?;:,、]|[!?;:,、]。/u;for(let a of c){let c=a.trim();if(!c||/^#{1,6}\s+/u.test(c)||/^\s*\|/u.test(c)||/^<div\b/iu.test(c))continue;let e=d.exec(c);if(e){let a=Math.max(0,e.index-24),d=`${c.slice(a,e.index)}【${e[0]}】${c.slice(e.index+e[0].length,e.index+e[0].length+24)}`;b.push({level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文存在句读标点叠用(拼接/删节残留):${d}`,suggestion:"相邻句读标点(如「。;」「;。」「。。」)是删节拼接残留或省略号误写,请重写该句。"})}}for(let{open:d,close:e,label:f}of o.Rc){let g=a.split(d).length-1,h=a.split(e).length-1;if(g===h)continue;let i=c.find(a=>a.split(d).length-1!=a.split(e).length-1);b.push({level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文存在${f}不闭合(开 ${g} 处、闭 ${h} 处,拼接/删节残留):${i?.trim().slice(0,120)??""}`,suggestion:`${f}成对性破坏是内容丢失拼接的确定性信号,请重写所在句子/小节,补齐或删除残缺部分。`})}return b}function ab(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)&&!/^附表\s*[一二三四五六七八九十\d]{1,3}/u.test(a)).map(a=>(0,l.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,l.GQ)(a[1]||"")),h=(0,l.GQ)((e[c][1]||"").replace(/^第[一二三四五六七八九十百千万\d]+章\s*/u,""));1===g.length&&W(g[0])===W(h)&&b.push({level:"error",message:`章节只有一个且与章名同名的小节:${e[c][1]}`,suggestion:"应拆分为多个业务小节,不能用章标题重复作为唯一二级小节。"})}return b}function ac(a,b){return!(!e.US.test(a)&&!e.s8.test(a)||b.headerCell&&/存在问题|整改措施|整改情况|复查结果|处理情况|检查情况|落实情况|验收结论|备注|说明/u.test(b.headerCell)&&/^无+$/u.test(a))&&(!/^(?:—+|-+)$/u.test(a)||!(b.cellIndex>0&&/^(?:合计|小计|总计|累计)/u.test(b.rowFirstCell||"")))}function ad(a){let b=[];for(let c of Q(a)){let a=c.split(e.A5).filter(a=>e.w7.test(a));if(a.length<2||!e.N3.test(a[1]||""))continue;let d=a.map(a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split(/(?<!\\)\|/u).map(a=>(0,n.jG)(a.trim()))),f=d[0]||[];for(let a of d.slice(2))for(let c=0;c<a.length;c+=1){let d=a[c]||"";ac(d,{rowFirstCell:a[0]||"",headerCell:f[c],cellIndex:c})&&b.push({header:f,rowFirstCell:a[0]||"",cellIndex:c,cell:d})}}return b}function ae(a){a=(0,m.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:"请修复表格规范化逻辑,禁止把数据行拆成多个碎表。"}),Q(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=>(0,n.jG)(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)=>ac(b,{rowFirstCell:a[0]||"",headerCell:f[c],cellIndex:c})));if(k){let a=k.find((a,b)=>ac(a,{rowFirstCell:k[0]||"",headerCell:f[b],cellIndex:b}))||"";b.push({level:"error",message:`表格存在占位符单元格:${f.join("、")}(“${k[0]||""}”行“${a}”)`,suggestion:"正式交付表格不得用“—/若干/约/待定”等占位或模糊表达代替具体数据;应从资料补齐具体数值。"})}}return b}function af(a){let b=a.split(/\r?\n/u),c=[],d=(a,d,e)=>{c.some(b=>b.start===a)||c.push({start:a,end:((a,c)=>{for(let d=a+1;d<b.length;d+=1){let a=/^(#{1,4})\s+(.+)$/u.exec(b[d].trim());if(a&&(0===c||a[1].length<=c))return d}return b.length})(a,d),level:d,title:e})};for(let a of[/编制依据/u,/编制说明|编制原则|编制目的/u]){let c=!1;for(let e=0;e<b.length;e+=1){let f=b[e].trim(),g=/^(#{2,4})\s+(.+)$/u.exec(f),h=g?null:/^\*\*(.+)\*\*$/u.exec(f);if(!g&&!h)continue;let i=g?g[2]:h?.[1]??"";if(a.test(i)){d(e,g?g[1].length:0,i),c=!0;break}}if(c)break}for(let a=0;a<b.length;a+=1){let c=b[a].trim();if(!(!c.includes("编制依据")||/^#{1,6}\s/u.test(c)||/^\*\*(.+)\*\*$/u.test(c))&&!(c.includes(" ")||/[.·…]{4,}/u.test(c)))for(let c=a-1;c>=0;c-=1){let e=b[c].trim(),f=/^(#{2,4})\s+(.+)$/u.exec(e),g=f?null:/^\*\*(.+)\*\*$/u.exec(e);if(!f&&!g)continue;if(a-c>60)break;let h=f?f[2]:g?.[1]??"";if(/目录/u.test(h))break;d(c,f?f[1].length:0,h);break}}return c.sort((a,b)=>a.start-b.start)}function ag(a){let b=a.split(/\r?\n/u);return af(a).map(a=>[a.title,...b.slice(a.start+1,a.end)].join("\n")).join("\n")}function ah(a,b,c={}){let d=ag(a);if(!d){let b=/^#{1,6}\s*[^\n]{0,12}(?:编制依据|编制说明|编制原则)/mu.test(a),d=(c.chapterTitles||[]).some(a=>/编制依据|编制说明|编制原则/u.test(a)),e=/编制依据|编制说明/u.test(a);return b||e?b?[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"basis-regulations-coverage",fingerprint:(0,v.c6)(a)},message:"编制依据章节为空:存在标题但未列出任何依据条目",suggestion:"在编制依据章节下逐项列出五类依据的具体条目(法规/条例/规范须含名称与编号)。"}]:[]:d?[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"basis-regulations-coverage",fingerprint:(0,v.c6)(a)},message:"缺少编制依据章节:正文未见「编制依据/编制说明」章节,五类依据(招标文件及补疑、国家法律法规、现行规范标准、地方法规规章、企业管理体系)无从逐项列全",suggestion:"补充「编制依据」章节并按五类逐项列全:招标文件及补疑补遗、国家法律法规、国家/行业现行规范标准、地方法规规章、企业管理体系;地方法规须结合工程所在地属地。"}]:[]}let e=[],f=(d.match(/《[^《》]{2,40}(?:法|条例|办法|规程|规范|标准)》/gu)||[]).map(a=>a.replace(/《|》/gu,""));f.some(a=>/法$/u.test(a))||e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"编制依据小节缺少国家法律法规条目",suggestion:"编制依据小节必须列出具体法律名称及文号(如《中华人民共和国建筑法》),不得空写「国家现行法律、行政法规」类别话术。"}),f.some(a=>/(?:条例|办法)$/u.test(a))||e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"编制依据小节缺少条例类条目",suggestion:"编制依据小节必须列出具体条例名称(如《建设工程质量管理条例》),不得以类别话术代替。"});let g=/《[^《》]{2,40}(?:规范|规程|标准)[^《》]{0,20}》/u.test(d),h=/(?:GB|CJJ|JGJ|JTG|SL|DB|DL|YS|HG)[\s/T]*[A-Z]?[\s/]?\d{2,4}/u.test(d);g||h||e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"编制依据小节缺少施工验收规范条目",suggestion:"编制依据必须包含与本工程分部对应的现行施工验收规范名称及编号(如《给水排水管道工程施工及验收规范》(GB 50268-2008))。"});let i=[...(b?.project.location||"").matchAll(/([\u4e00-\u9fa5]{2,10}?[省市])/gu)].map(a=>a[1]);if(i.length>0&&(i.some(a=>f.some(b=>b.startsWith(a)||b.includes(a)))||e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据小节缺少${i[0]}地方性法规、条例`,suggestion:`编制依据必须列出工程所在地(${i.join("、")})现行地方性法规及条例名称。`})),b&&b.basisRegulations.length>0){let a=b.basisRegulations.filter(a=>!f.includes((a.match(/《([^》]+)》/u)||[])[1]||""));a.length===b.basisRegulations.length&&e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据小节未列招标文件引用法规:${a.slice(0,3).map(a=>a.replace(/(.*/u,"")).join("、")}`,suggestion:"招标文件引用的法规必须照抄进编制依据小节。"})}return e}function ai(a,b,c){let d=(0,r.re)(b,c);if(!d)return[];let e=[],f=new Set;for(let b of(0,r._H)(a,d))f.has(b.label)||(f.add(b.label),e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:b.message,suggestion:b.suggestion}));return e}function aj(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:"error",severity:"blocker",category:"table",owner:"llm",repairability:"llm_repairable",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",category:"table",message:`表格连续堆叠:${h} 处相邻表格无正文分隔`,suggestion:"表格之间应有正文引导叙述,禁止连续堆叠多张表格凑数。"}),b}function ak(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 al(a){return W(a)}function am(a,b){let c=W(a),d=W(b);if(!c||!d)return!1;if(c===d||c.includes(d)||d.includes(c)||(0,v.ty)(c,d))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)}function an(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:W(i),level:e,body:a.slice(f,h)}}).filter(a=>a.title&&(3===a.level||4===a.level))}function ao(a,b,c,d,f){let g=ak(d),h=e.w7.test(d)&&d.split(e.A5).some(a=>e.N3.test(a)),i=ak(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 ap(a,b){let c=[],d=new Set;for(let e of b){let b=e.content?.trim()?e.content:a,f=(e.sections||[]).filter(a=>!(0,w.cq)(a)&&!(x.gG.test(e.title)&&v.V.test(a.trim()))&&!/^附录/u.test(a.trim()));for(let a of f){let g=W(a),h=function(a,b){let c=an(a).filter(a=>am(a.rawTitle,b));return c.length<=1?c[0]:c.map(a=>({item:a,gap:ao("",b,a.level,a.body,!0),textLength:ak(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),i=`${e.title}|${g}|planned`;if(!h){c.push({chapterTitle:e.title,sectionTitle:a,level:3,bodyLength:0,reason:"missing_planned_section",planned:!0,message:`${e.title} 缺少规划小节:${a}`}),d.add(i);continue}let j=function(a,b,c,d){if(!a)return a;let e=W(c),f=new Set(b.map(a=>W(a)).filter(a=>a&&a!==e));if(0===f.size)return a;let g=[],h=0;for(let b of a.split("\n")){let a=/^(#{1,6})\s+(\S.*)$/u.exec(b.trim());if(a){let b=a[1].length;if(h>0&&b>h)continue;if(h=0,b>d&&f.has(W(a[2].trim()))){h=b;continue}}else if(h>0)continue;g.push(b)}return g.join("\n")}(h.body,f,a,h.level),k=ao(e.title,a,h.level,j,!0);k&&c.push(k),d.add(i)}for(let a of an(b)){let b=`${e.title}|${a.title}|actual`,f=`${e.title}|${a.title}|planned`;if(d.has(b)||d.has(f))continue;let g=ao(e.title,a.title,a.level,a.body,!1);g&&"empty"===g.reason&&c.push(g),d.add(b)}}return c}function aq(a,b){return ap(a,b).filter(a=>"empty"===a.reason||"missing_planned_section"===a.reason||"too_short"===a.reason).map(a=>({level:"error",category:"structure",message:a.message,suggestion:"missing_planned_section"===a.reason?"必须补充该规划小节正式正文,不得缺节导出。":"必须补充与该小节相关的材料事实和必要内容,达到正文完整度要求。"}))}function ar(a){let b=a.content?.trim()?a.content:"";if(!b)return[];let c=(a.sections||[]).filter(b=>!(0,w.cq)(b)&&!(x.gG.test(a.title)&&v.V.test(b.trim()))&&!/^附录/u.test(b.trim())),d=[...b.matchAll(/^(#{3,4})\s+(.+)$/gmu)],e=[];return d.forEach((a,f)=>{let g=a[1].length,h=(a[2]||"").trim();if(!h)return;let i=(a.index||0)+a[0].length,j=d.slice(f+1).find(a=>a[1].length<=g),k=j?.index??b.length;if(""!==b.slice(i,k).trim())return;let l=b.slice(0,a.index||0).split("\n").length-1;e.push({line:l,rawTitle:h,level:g,planned:c.some(a=>am(a,h))})}),e}function as(a){let b=[];for(let c of a){if(!c.content?.trim())continue;let a=a=>{let b=String(a||"").trim();return!b||(0,w.cq)(b)||/^附录/u.test(b)||x.gG.test(c.title)&&v.V.test(b)},d=(c.sections||[]).filter(b=>!a(b));if(0===d.length)continue;let e=(0,m.r4)(c.content).filter(b=>!a(b));if(e.length<=d.length)continue;let f=new Set(d.map(a=>W(a))),g=e.filter(a=>!f.has(W(a)));b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:c.id,message:`成稿小节超出主题块数:「${c.title}」成稿 ${e.length} 个小节、规划主题块 ${d.length} 个${g.length?`;规划外小节:${g.slice(0,5).join("、")}`:""}`,suggestion:"成稿 H3 小节必须与规划主题块一一对应(拆半块合并为一个小节):规划外小节属相邻主题块内容时并入归属小节并降为 H4,无归属时整节删除;修复后小节编号按正文顺序自动重排。"})}return b}function at(a){return`${a.fieldName||a.key} ${(0,v.lG)(a.value)}`.replace(/\s+/gu," ").trim()}function au(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]}let av=/占地|用地|地下|地上|办公|生活|附属|辅助|绿化|道路|广场|门卫|配电|泵房|锅炉房|车库|车棚|岗亭|传达|警卫|样板房|售楼|门房|单栋|各栋|楼层|每层|单层|架空|雨棚|堆场/u,aw=/办公区|生活区|加工区|施工区|堆场|门卫|配电|泵房|锅炉房|车库|车棚|岗亭|传达|警卫|样板房|售楼|门房|地下室|楼层|单层|每层|架空|雨棚/u,ax=/门卫|门房|岗亭|值班室|传达室|警卫室|公厕|车棚|雨棚|配电房|配电室|泵房|水泵房|锅炉房|样板房|售楼处|构筑物|用房|配套设施|\d{1,3}[栋座处]/u;function ay(a,b){let c=a.slice(Math.max(0,b-48),b),d=c.lastIndexOf("\n\n"),e=d>=0?c.slice(d+2):c;return ax.test(e.replace(/\s+/gu,""))}let az=/暂列|暂估|费率|税率|利润|规费|安全文明|措施费|人工费|材料费|机械费|管理费|暂定/u,aA=["地下建筑面积与地上建筑面积的分项指标","配套用房与附属用房的建筑面积","占地面积与绿化面积的用地指标"],aB=["总建筑面积的总体规模指标","建设规模的总量数值"],aC=["暂列金额与暂估价的子项费用","人工费与材料费的分项费用"],aD=["合同估算价的总金额口径","投资估算的总体金额"];async function aE(a){return(0,z.A)({prototypes:[...aA],negativePrototypes:[...aB],embedDocuments:a})}async function aF(a){return(0,z.A)({prototypes:[...aC],negativePrototypes:[...aD],embedDocuments:a})}async function aG(a,b,c,d,e,f,g){let h=[],i=[],j=new Set,k=RegExp(`(?:${b.source})(?:[^\\n。;;,,]{0,14}?)(\\d{2,}(?:[.,]\\d+)?\\s*万?)\\s*(${c.source})`,"giu"),l=[...a.matchAll(k)],m=f?l.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)||g&&ay(a,b.index??0))}).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)}}):[],n=m.length>0?await f(m.map(a=>a.context)):[],o=new Set(m.filter((a,b)=>n[b]).map(a=>a.index));for(let c of l){let f=c[1].replace(/[,,]/gu,"").replace(/\s+/gu,""),k=c[2],l=c[0].slice(0,c[0].indexOf(c[1])),m=a.slice(Math.max(0,(c.index??0)-16),c.index??0);if(d&&d.test(l)||e&&e.test(m)||g&&ay(a,c.index??0)||o.has(c.index??0)){i.push({value:f,unit:k,scope:c[0].slice(0,l.length).replace(/\s+/gu,""),context:`${m}${l}`.replace(/\s+/gu,"").slice(-24)});continue}let n=c[0].match(b)?.[0]||"",p=`${f}|${k}`;!f||j.has(p)||(j.add(p),h.push({value:f,unit:k,scope:n}))}return{entries:h,skipped:i}}function aH(a,b){return aG(a,aJ,aK,av,aw,b).then(({entries:b})=>{let c=b.find(a=>"建筑面积"===a.scope.replace(/^总/u,""));return/占地|用地/u.test(a)?c:b[0]})}function aI(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 aJ=/(?<![地上地下门卫室值班室配电室配电房泵房水泵房锅炉房公厕车库车棚岗亭传达室警卫室样板房售楼处门房])总?建筑面积|总?建设规模/u,aK=/㎡|m²|m2|平方米/u,aL=/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价/u,aM=/万元|亿元/u,aN=/本组配置|分组配置|按全项目总表调度|按总表调度|总表调度|按全项目机械配置总表|按机械配置总表|按设备配置总表/u;async function aO(a,b,c,d,e){let f=[],g=await aE(e),h=await aF(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(at).find(a=>/\d+\s*(?:日历天|天|个月|月)|计划工期|合同工期/u.test(a)),l=b.quality.map(at).find(a=>/质量|合格|优良/u.test(a));if(k){let b=au(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(at).filter(a=>/建设规模|建筑面积/u.test(a)),o=await Promise.all(n.map(a=>aH(a,g))),p=m??n.find((a,b)=>void 0!==o[b]);if(p){let c=m?j(m):await aH(p,g),{entries:d,skipped:e}=await aG(a,aJ,aK,av,aw,g,ax);if(c){let a=d.filter(a=>aI(a)!==aI(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(at).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"),s=q??b.project.map(at).find(a=>/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价/u.test(a));if(s){let b=q?j(q):(await aG(s,aL,aM,az,void 0,h)).entries[0],c=(await aG(a,aL,aM,az,void 0,h)).entries;if(b){let a=c.filter(a=>aI(a)!==aI(b));a.length>=1&&f.push({level:"error",message:`跨章一致性冲突:正文出现与资料估算价不一致的表述 ${a.slice(0,6).map(a=>`${a.value}${a.unit}`).join("、")}`,suggestion:`请统一使用资料中的估算价口径:${s.slice(0,80)}`})}}let t=new Set;for(let b of a.matchAll(RegExp(aN.source,"gu"))){let c=b.index??0,d=Math.max(a.lastIndexOf("\n",c-1),a.lastIndexOf("。",c-1),a.lastIndexOf(";",c-1),a.lastIndexOf(";",c-1)),e=["\n","。",";",";"].map(b=>a.indexOf(b,c)).filter(a=>a>=0),f=e.length>0?Math.min(...e):a.length;for(let b of(0,r.tx)(a.slice(d+1,f)))t.add(b)}let u=new Map;for(let b of(0,r.AK)(a)){if((0,C.HS)(a,b.start,b.text))continue;let c=b.name,d=String(b.count),e=a.slice(Math.max(0,b.start-20),b.start+b.text.length+24),f=/组|村/u.test(e)||aN.test(e),g=u.get(c)||{values:[],grouped:!1};g.values.includes(d)||g.values.push(d),g.grouped=g.grouped||f,u.set(c,g)}let w=new Map,x=new Map;for(let a of b.billItemFacts??[]){let b=(0,v.lG)(a.value),c=/名称[::]\s*([^\n|]+)/u.exec(b)?.[1]??"",d=(0,r.j4)(c.replace(/[((][^))]*[))]/gu,"").trim());if(!d)continue;let e=b.split("|工程量:")[1]??"",f=/(\d+(?:\.\d+)?)\s*(?:台|套|辆)/u.exec(e),g=f?Number(f[1]):NaN;Number.isFinite(g)&&!(g<=0)&&(w.set(d,(w.get(d)||0)+1),x.set(d,(x.get(d)||0)+g))}for(let[a,b]of u){if(b.values.length<2)continue;let c=b.values.join("、"),d=Math.max(...b.values.map(a=>Number(a))),e=(w.get(a)??0)>=2&&Number.isFinite(d)&&d<=(x.get(a)??0);b.grouped||t.has(a)||e?f.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备分组口径提示:正文「${a}」存在分组配置台数 ${c} 多值并存,需注明分组与全项目总量的调度关系`,suggestion:`分组配置(组/村级)与全项目总量并存时,必须在正文注明「本组配置、按总表调度」或明确分组数量与总量数量之间的对应关系,避免评标误读为口径矛盾。`}):f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性冲突:正文「${a}」配置台数出现互相矛盾的取值 ${c}`,suggestion:`全项目「${a}」配置总量必须全文唯一:以全项目机械配置总表为准统一全部表述;分组配置必须显式注明「本组配置、按总表调度」并删除与总表矛盾的全项目口径数字。`})}let y=/(?:\d+\s*[##号]|[一二三四五六七八九十]\s*[区栋座幢]|[A-Za-z]\s*[栋座幢区])/gu,z=b=>{let c=b=>Math.max(a.lastIndexOf("\n",b-1),a.lastIndexOf("。",b-1),a.lastIndexOf(";",b-1),a.lastIndexOf(";",b-1),a.lastIndexOf("!",b-1),a.lastIndexOf("?",b-1)),d=c(b)+1,e=c(d-1)+1,f=[...a.slice(0,b).matchAll(/^#{1,6}[^\n]*/gmu)].pop();return f?Math.max(0,Math.min(e,f.index)):Math.max(0,e)},A=(a,b,c)=>{let d=[...a.matchAll(y)].filter(b=>!/[与同和及跟]\s*$/u.test(a.slice(Math.max(0,(b.index||0)-3),b.index||0))).map(a=>({marker:a[0].replace(/\s+/gu,""),at:b+(a.index||0)}));if(0===d.length)return[];let e=d.map(a=>Math.abs(a.at-c)),f=Math.min(...e);return[...new Set(d.filter((a,b)=>e[b]===f).map(a=>a.marker))].sort()};for(let{label:b,re:c,contextAware:d}of[{label:"隔油池数量",re:/隔油池[^\d。;;\n|::,,、]{0,6}(\d+)\s*座/gu},{label:"挖沟槽土方",re:/挖沟槽[^\d。;;\n|]{0,15}([\d,]+(?:\.\d+)?)\s*m[³3]/gu,contextAware:!0}]){let e=[];for(let b of a.matchAll(c)){let c=b[1].replace(/,/gu,"");if(e.some(a=>a.value===c))continue;let d=b.index||0,f=z(d);e.push({value:c,context:a.slice(Math.max(0,d-24),d),markers:A(a.slice(f,d+b[0].length),f,d)})}if(e.length>=2){let a="\0未标注",c=b=>b.markers.length>0?b.markers:[a],g=(b,e)=>{let f=c(e),g=c(b).filter(a=>f.includes(a));return 0!==g.length&&(!g.every(b=>b===a)||!d||(0,B.qr)(b.context,e.context)>=6)};if(!e.some((a,b)=>e.slice(b+1).some(b=>g(a,b))))continue;let h=e.map(a=>a.value).join("、");f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性冲突:正文${b}出现互相矛盾的取值 ${h}`,suggestion:`${b}必须全文唯一:以工程量清单为最高优先级裁定正确值,将正文全部相关表述统一为该值,并删除其余矛盾口径。`})}}if(k){let b=au(k)[0],c=Number(/(\d+)\s*(?:日历天|天)/u.exec(b||"")?.[1]);for(let b of a.matchAll(/各阶段工期(?:分别)?为?\s*[::]?\s*([\d]+(?:\s*[、,,]?\s*\d+)*)\s*(?:天|日历天)/gu)){let a=b[1].split(/[、,,]/u).map(a=>Number(a.trim())).filter(a=>Number.isFinite(a)).reduce((a,b)=>a+b,0);Number.isFinite(c)&&a>0&&a!==c&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨章一致性冲突:正文各阶段工期文字表述(${b[1]}天)合计 ${a} 天,与总工期 ${c} 天不符`,suggestion:`各阶段工期加总必须等于总工期 ${c} 天:核对各阶段天数并修正文字表述,或与阶段计划表保持一致。`})}}for(let b of a.matchAll(/每间(?:可)?容纳\s*(\d+)\s*人/gu)){let a=Number(b[1]);a>=100&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`逻辑校验失败:正文出现「每间容纳 ${a} 人」的宿舍配置表述,单间宿舍不可能容纳 100 人以上`,suggestion:`宿舍容纳人数按单间 4~8 人配置计算间数(如高峰 216 人按每间 8 人需 27 间),修正配置表述为「每间 X 人、共 Y 间,满足高峰在场人数」的完整口径。`})}for(let b of a.matchAll(/第(\d+)\s*日\s*[~~—至到]\s*第(\d+)\s*日/gu))b[1]===b[2]&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`逻辑校验失败:正文出现「第 ${b[1]} 日~第 ${b[2]} 日」的零长度区间表述`,suggestion:`起止日相同的区间属笔误:按该事项所属施工阶段的实际起止日修正(如进场时间应为阶段开始前)。`});return f}let aP=/找平层|抹灰层|防水层|保温层|结合层|垫层|面层|粘结层|隔热层|隔离层/gu,aQ=/铺设|施工|浇筑|粘贴|铺贴|涂抹|完成|进行|待|设置|铺装|挂网|喷涂|灌注/u,aR=/(?:弯沉|压实|回弹模量|强度|模量|偏差|误差|抗渗|抗冻|标高|覆土|净空|坡度|坡率|直径|管径|宽度|长度|高度|间距|面\s*积|体积|荷载|含水率|孔隙率|比例|图号|编号|桩号|坐标)/u,aS=["施工过程与工序动作的先后描述","铺设浇筑完成后再进行的工序"],aT=["结构层的厚度与配比参数","找平层厚20毫米的规格"];async function aU(a){return(0,z.A)({prototypes:[...aS],negativePrototypes:[...aT],embedDocuments:a})}async function aV(a,b){let c=[],d=[...a.matchAll(aP)],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(!aQ.test(n)&&!("thickness"===k&&aR.test(n))){if("thickness"===k){let a=Number(h[1]??"");if(!Number.isFinite(a)||a<=0||a>=1e3)continue}if("ratio"===k){let a=Number(h[1]?.split(":")[1]??"");if(!Number.isFinite(a)||a<=0||a>100)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=function(a){let b=a.search(/[。;\n]/u);return b>=0?a.slice(0,b):a}(a.slice(g,j)),l=b>0?(d[b-1].index??0)+d[b-1][0].length:Math.max(0,f-40),m=function(a){let b=a.split(/[。;\n]/u);return b[b.length-1]??a}(a.slice(l,f)),n=f-m.length;h(k,g,/(\d+:\d+(?:\.\d+)?)/gu,"first",e,"ratio"),h(m,n,/(\d+:\d+(?:\.\d+)?)/gu,"last",e,"ratio"),h(k,g,/(\d+(?:\.\d+)?)\s*mm/gu,"first",e,"thickness"),h(m,n,/(\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 aW(a,b){let c=[],d=new Set;for(let e of(await aV(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 aX(a,b,c){let d=[],e=await aU(c),f=[...b.specifications,...b.quality,...b.preciseFacts,...b.bills].map(at).join("\n"),g=await aW(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 aW(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)))],f=i.filter(b=>b.layer===a),g=[...new Set(f.map(a=>a.thickness).filter(a=>Number.isFinite(a)))],h=[...new Set(f.map(a=>a.ratio).filter(Boolean))];if(g.length>1||h.length>1){d.push({level:"warning",message:`工序规格口径不唯一,已跳过确定性比对:正文「${a}」出现 ${g.length} 种厚度(${g.join("、")}mm)${h.length>1?`、${h.length} 种配比(${h.join("、")})`:""}——该层名在正文中指代多个对象(如道路/管沟/地坪垫层厚度本就不同),资料侧单一口径无法裁决`,suggestion:`如需确定性核对,请在正文为层名补充对象限定(如「管沟垫层 120mm」「道路垫层 200mm」),或在资料/参数桶中分别登记各对象的规格。`});continue}for(let b of f){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)&&b.thickness!==e[0]){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 aY(a,b,c){let d=await aE(c),e=await aF(c),f=await aU(c),g=[...a.specifications,...a.quality,...a.preciseFacts,...a.bills].map(at).join("\n"),h=new Map;for(let a of(await aW(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(at).filter(a=>/建设规模|建筑面积/u.test(a)),n=await Promise.all(m.map(a=>aH(a,d))),o=l??m.find((a,b)=>void 0!==n[b]),p=j("cost"),q=p??a.project.map(at).find(a=>/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价/u.test(a));return{specTargets:i,scaleTarget:o?l?k(l):await aH(o,d):void 0,costTarget:q?p?k(p):(await aG(q,aL,aM,az,void 0,e)).entries[0]:void 0,scaleGapGate:d,costGapGate:e,actionGate:f}}async function aZ(a,b){let c=[];for(let d of(await aV(a,b.actionGate))){let e=b.specTargets.get(d.layer);if(e&&(0,u.Rd)({authorityOwner:d.layer,bodyLocation:d.layer,bodyWindow:a.slice(Math.max(0,d.span[0]-24),d.span[1]+16),found:d.raw,authority:void 0!==e.thickness?String(e.thickness):e.ratio||""}).allowed){if("ratio"===d.kind&&e.ratio){let a=d.raw.match(/(\d+:\d+(?:\.\d+)?)/u)?.[1];a&&a!==e.ratio&&c.push({start:d.span[0],end:d.span[1],replacement:d.raw.replace(/(\d+:\d+(?:\.\d+)?)/u,e.ratio),detail:`${d.layer}配比 ${a}→${e.ratio}`})}if("thickness"===d.kind&&Number.isFinite(e.thickness)){let a=Number(d.raw.match(/(\d+(?:\.\d+)?)/u)?.[1]),b=a>0&&Number.isFinite(a)?Math.max(a,e.thickness)/Math.min(a,e.thickness):1/0;Number.isFinite(a)&&a!==e.thickness&&b<=5&&c.push({start:d.span[0],end:d.span[1],replacement:d.raw.replace(/(\d+(?:\.\d+)?)/u,String(e.thickness)),detail:`${d.layer}厚度 ${a}mm→${e.thickness}mm`})}}}let d=async(b,d,e,f,g,h,i,j)=>{if(!b)return;let k=RegExp(`(?:${d.source})(?:[^\\n。;;,,]{0,14}?)(\\d{2,}(?:[.,]\\d+)?\\s*万?)\\s*(${e.source})`,"giu"),l=[...a.matchAll(k)],m=i?l.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)||j&&ay(a,b.index??0))}).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)}}):[],n=m.length>0?await i(m.map(a=>a.context)):[],o=new Set(m.filter((a,b)=>n[b]).map(a=>a.index));for(let d of l){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)||j&&ay(a,d.index??0)||o.has(d.index??0))continue;let k={value:d[1].replace(/[,,]/gu,"").replace(/\s+/gu,""),unit:d[2]};if(aI(k)===aI(b))continue;let l=(d.index??0)+d[0].indexOf(d[1]),m=l+d[1].length;c.some(a=>a.start<m&&a.end>l)||c.push({start:l,end:m,replacement:b.value,detail:`${f} ${k.value}${k.unit}→${b.value}${k.unit}`})}};if(await d(b.scaleTarget,aJ,aK,"建设规模",av,aw,b.scaleGapGate,ax),await d(b.costTarget,aL,aM,"估算价",az,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 a$(a,b,c,d){let e=await aY(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 aZ(b.content,e);a.fixedCount>0&&(b.content=a.content,f+=a.fixedCount,g.push(...a.details))}return{fixedCount:f,details:g}}async function a_(a,b,c,d){let e=await aY(b,c,d);if(0===e.specTargets.size&&!e.scaleTarget&&!e.costTarget)return{markdown:a,fixedCount:0,details:[]};let f=await aZ(a,e);return{markdown:f.content,fixedCount:f.fixedCount,details:f.details}}async function a0(a){let{closedLoopBlocks:b}=await (0,y.Pm)(a),c=Math.max(6,Math.ceil((0,h.V7)(a)/1500));return b>=c?[]:[{level:"warning",message:`可落地性闭环句式密度不足:全文 ${b} 段完整闭环句式,未达每 1500 字 1 段(目标 ${c} 段)`,suggestion:"在措施类段落中补齐“责任岗位 + 检查频次 + 整改闭环”三要素齐全的闭环表述:同一自然段内同时出现岗位(如项目经理/质检员/安全员)、频次(每日/每周/不少于X次)与闭环(整改/复查/销项);三要素分散融入叙述,不得以固定句模复读。"}]}function a1(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 a2(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 a3(a){return[[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].map(at).join("\n"),...a.tables.flatMap(a=>[...a.headers,...a.rows.flat()])].join("\n")}function a4(a,b){return!(!/总工期|计划工期|合同工期|日历天|施工周期/u.test(a)||/阶段|历时|用时|合计|总计|共计|累计|预留|机动|余量|剩余|养护|编制|提交|签订|划分|闭合|控制基准|持续时间|关键|节点/u.test(`${a}${b}`))&&(b.match(/\d+(?:\.\d+)?\s*(?:工作天|天)/gu)||[]).length<2}function a5(a,b){return/^\d+(?:\.\d+)?(?:月|年)$/u.test(a)&&/开工|竣工|日期|计划|年|月/u.test(b)}function a6(a,b,c){let d=`${a} ${b}`;if(/(?:工日|人日|次|台|套|个|人|层|间|批|项|处|座|栋|根|只|组|件|块|片|面|条|道|樘|扇|盏|节|段)$/u.test(a)||/三检制|三级|5S|24\s*小时|每日|每周|每月|一次|两次|责任制|制度/u.test(d)||/暂列金额|暂估价|报价|单价|合价|综合单价|税率|增值税|预留金/u.test(d)||a5(a,b))return"soft";let e=c??b;return/(?:天|工作天|月|年)$/u.test(a)&&a4(e,b)||/(?:万元|亿元|元)$/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"}let a7=[["hm2","hm2|hm\xb2|公顷"],["m2","m2|m\xb2|㎡|平方米|平方|平米"],["m3","m3|m\xb3|立方米|立方"],["工作天","工作天|工作日"],["万元","万元|人民币万元|万元人民币"],["天","天|日历天|自然日|个日历天"],["月","月|个月"],["km","km|千米|公里"],["mm","mm|毫米"],["cm","cm|厘米"],["kg","kg|千克|公斤"],["min","min|分钟"],["t","t|吨"],["m","m|米"],["元","元|人民币元|元人民币"],["h","h|小时"]];function a8(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function a9(a){let b=[];for(let c of(0,i.zn)(a)){if(/^\d+\.\d+$/u.test(c))continue;let d=(0,i.K3)(c),e=function(a,b){let c=/^(\d+(?:\.\d+)?)/u.exec(b)?.[1];if(!c)return a.indexOf(b);let d=RegExp(`(?<![\\d.])${a8(b)}(?![\\d.])`,"u").exec(a);if(d)return d.index;let e=b.slice(c.length);if(!e)return -1;let f=a7.find(([a])=>a===e),g=f?f[1]:a8(e),h=RegExp(`(?<![\\d.])${a8(c)}\\s*(?:${g})(?![a-z0-9])`,"iu").exec(a);return h?h.index:-1}(a,c);if(e<0)continue;let f=a.lastIndexOf("\n",e-1)+1,g=a.indexOf("\n",e),h=a.slice(f,g<0?a.length:g);if(/^\s*\|/u.test(h.trim()))continue;let j=a.slice(Math.max(0,e-36),Math.min(a.length,e+c.length+36));if(/违约金|延期竣工|解除合同|缺陷责任期|质量保证金|质保金|履约保证金|保修期/u.test(j))continue;let k=a.slice(Math.max(0,e-16),e);/(?:阶段|缓冲|累计)\s*\d*$/u.test(k)||b.push({token:c,normalizedToken:d,context:j,prefix:k})}return b}function ba(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,v.lG)(a.value).slice(0,18)))&&g.push({level:"warning",message:"生成后事实反查提示:正文质量目标表述未明显匹配质量事实主表",suggestion:"请使用资料中的质量目标原文或等价表述。"}),g}let bb=/(?:天|工作天|日历天|月|年|万元|亿元|元|m2|hm2|亩|㎡|m²|平方米)$/u;function bc(a,b){let c=a3(b);if(80>(0,h.V7)(c))return[];let d=(0,i.K3)(c),e=[],f=[],g=[];for(let b of a9(a)){let{token:a,normalizedToken:c,context:h,prefix:i}=b;if("unsourced"!==(0,k.eS)({token:a,context:h}).kind)continue;let j=a6(a,h,i);"scope"!==j||d.includes(c)||e.push(a),"spec"!==j||d.includes(c)||f.push(a),"soft"!==j||d.includes(c)||g.push(a)}return ba({markdown:a,factsModel:b,scopeSuspicious:e,specSuspicious:f,softSuspicious:g})}async function bd(a,b,c){let d,e=a3(b);if(80>(0,h.V7)(e))return[];let f=(0,i.K3)(e),g=a9(a),j=g.filter(a=>bb.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 l=[],m=[],n=[];for(let a of g){let{token:b,normalizedToken:c,context:e,prefix:g}=a;if("unsourced"!==(0,k.eS)({token:b,context:e}).kind)continue;let h=a6(b,e,g);if(d&&bb.test(b)){let a=d.get(b)||"other";"scope"===h?h="scope"===a?"scope":"soft":"scope"===a&&a4(g??e,e)&&!a5(b,e)&&(h="scope")}"scope"!==h||f.includes(c)||l.push(b),"spec"!==h||f.includes(c)||m.push(b),"soft"!==h||f.includes(c)||n.push(b)}return ba({markdown:a,factsModel:b,scopeSuspicious:l,specSuspicious:m,softSuspicious:n})}let be=8;function bf(a){return/资源|材料|设备|劳动力/u.test(a)?10:be}let bg=["factuality","structure","depth","executable","specificity","consistency"];function bh(a){return 2*bg.filter(b=>a[b]).length}function bi(a){return bg.filter(b=>!a[b])}function bj(a,b){let c=[];for(let e of a){var d;let a=e.content;if(800>(0,h.V7)(a))continue;let f=(d=e.title,/概况|工程|项目/u.test(d)?"事实依据、项目特异性":/部署|总体|组织/u.test(d)?"组织结构、可执行闭环、跨章一致性":/进度|工期/u.test(d)?"进度结构、工期一致性、纠偏机制":/质量/u.test(d)?"质量深度、验收复验、资料闭环":/安全|文明|危大|风险/u.test(d)?"风险覆盖、应急响应、检查整改":/资源|材料|设备|劳动力/u.test(d)?"资源依据、进场调配、进度支撑":"事实依据、专业深度、可执行性"),g=b?.get(e.title);if(!g)continue;let i=bh(g.dimensions);if(i<bf(e.title)){let a=bi(g.dimensions).join("、")||f;c.push({level:"warning",message:`${e.title} 专业评分不足:${i}/12,薄弱维度:${a}`,suggestion:`请按章节任务卡补齐${f},并写出资料依据、实施流程、专业控制点和检查整改闭环。`,chapterId:e.id,provenance:{detectorId:"professional-score",fingerprint:(0,v.c6)(`${e.title}\u0000${i}`)}})}}return c}function bk(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 g of a){if(600>(0,h.V7)(g.content))continue;let a=b?.get(g.title);if(a){for(let b of c)if(!(!b.re.test(g.title)||"construction"===b.needKey&&c.some(a=>"construction"!==a.needKey&&a.re.test(g.title))||"construction"===b.needKey&&/总平面|平面布置|布置图/u.test(g.title))&&!("resource"===b.needKey&&/劳动力/u.test(g.title)&&!/资源|材料|设备/u.test(g.title)&&/进场|入场|退场|调配|轮转/u.test(g.content))){var e,f;a.contentNeeds[b.needKey]||(e=b.needKey,f=g.content,"schedule"===e?/关键线路|关键路径/u.test(f)&&/纠偏|穿插|平行施工|流水施工|赶工/u.test(f):"resource"===e&&/(?:材料|设备|机械|机具|物资|构件|苗木|管材)[^。;;\n|]{0,16}?(?:进场|入场|退场)/u.test(f)&&/调度|保管|台账|供应|仓储|保养/u.test(f))||d.push({level:"error",message:`${g.title}:${b.message}`,suggestion:"请按专业任务卡定向补写该章节,补齐可实施的控制措施、资料依据和闭环要求。",chapterId:g.id})}}}return d}function bl(a,b){return!!(/万元|元|报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(`${a} ${b}`)||/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂|页码|目录/u.test(b)||/^\d+$/.test(a)&&10>Number(a)||/^(?:mm|cm|dm|hm|km|kg|mg|ml|kwh|kj|kpa|mpa|kw|pa|kn|n|t|l|h|g|m|㎡|m²|m³)[23²³]?$/iu.test(a)||/^\d+(?:\.\d+)+\s*(?:项|个|份|页|批|次|条|款)$/u.test(a)||/^\d+\s*页$/u.test(a)||/^(?:COL|R\d+C)\d*$/iu.test(a)||/^[A-Za-z]\.\d+$/u.test(a)||/^[\d.]+\s*(?:天|日)$/u.test(a)&&/期限/u.test(b)||/之日起.{0,8}天内|天内.{0,10}(?:发出|提交|通知|回复|答复|完成|开工|竣工|报送|支付|更换)|天以上|天及以上|‰|暂扣|履约保证金|通过后.{0,6}天|因发包人原因|因承包人原因|未能按时|逾期|违约金/u.test(b))}function bm(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();bl(c,d)||b.add(c)}}return[...b]}function bn(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);bl(d,f)||b.add(d)}}return[...b]}function bo(a,b){let c=(0,i.K3)(b),d=0;for(let b of a)c.includes((0,i.K3)(b))&&(d+=1);return d}let bp=/日历天|个月|㎡|m²|m3|m³|MPa|kPa|kN|GB\/T|GB|JGJ|ISO|DN|φ|Φ|米\/秒|天$/u,bq=[/GB|JGJ|ISO|CJJ|DB/u,/DN|φ|Φ/u,/MPa|kPa|kN|米\/秒/u,/日历天|个月|天$/u,/㎡|m²/u,/m3|m³/u];function br(a){let b=/\d+(?:\.\d+)?/u.exec(a)?.[0];return void 0===b?-1/0:Number.parseFloat(b)}function bs(a){let b=[...a].sort((a,b)=>a.localeCompare(b,"zh")),c=b.filter(a=>bp.test(a)),d=b.filter(a=>!bp.test(a)),e=bq.map(()=>[]),f=[];for(let a of c){let b=bq.findIndex(b=>b.test(a));(b>=0?e[b]:f).push(a)}let g=[...e,f].map(a=>a.sort((a,b)=>{let c=br(a),d=br(b);return Number.isFinite(c)&&Number.isFinite(d)?d-c||a.localeCompare(b,"zh"):Number.isFinite(c)?-1:Number.isFinite(d)?1:a.localeCompare(b,"zh")})),h=[],i=0,j=0;for(;h.length<8&&j<g.length;){let a=g[i%g.length];a.length>0?(h.push(a.shift()),j=0):j+=1,i+=1}return[...h,...d.slice(0,2)].slice(0,10)}async function bt(a,b,c=[]){let d=[],f=bn(c),h=f.length>=e.mu?f:bm(b),j=bo(h,a);h.length>=e.mu&&j/h.length<e.tg&&d.push({level:"warning",message:`可靠精确参数使用不足:${j}/${h.length}`,suggestion:"请将资料中可靠的规格、参数、数量、时间、比例和标准编号写入对应章节;商务金额、单价、税率、预留金不得写入正文。"});let k=bs(h);if(k.length>=6){let b=(0,i.K3)(a),c=bo(k,a),e=k.filter(a=>!b.includes((0,i.K3)(a)));if(e.length>0&&c/k.length<.5){let b=a.split(/[。;;|]/u).map(a=>a.trim()).filter(a=>a.length>=6&&a.length<=160).slice(0,300);if(b.length>0){let a=await (0,g.Mv)(e.slice(0,10),b);e=e.filter(c=>!b.some(b=>a(c,b)>=g.Eh)),c=k.length-e.length}}if(c/k.length<.5){let b=e.slice(0,3);d.push({level:"error",message:`可靠精确参数使用不足:关键参数抽查 ${c}/${k.length}${b.length?`(缺失如 ${b.join("、")})`:""}`,suggestion:"请将资料中的关键工程参数(工期、面积、强度等级、材料规格、规范编号等)写入正文对应章节,不得因参数总量达标而遗漏核心参数。",provenance:{detectorId:"precise-fact-usage",fingerprint:(0,v.c6)(a)}})}}return b.bills.length>0&&!e.pP.test(a)&&d.push({level:"error",message:"正文未体现结构化数据资料",suggestion:"请从表格、列表或明细中提取对象、单位、数量、规格和关键参数补入对应章节。",provenance:{detectorId:"precise-fact-usage",fingerprint:(0,v.c6)(a)}}),b.drawings.length>0&&!e._U.test(a)&&d.push({level:"error",message:"正文未体现设计/方案/说明类资料",suggestion:"请从设计、方案或说明资料中提取对象、流程、节点、做法、配置、规则和标准要求。",provenance:{detectorId:"precise-fact-usage",fingerprint:(0,v.c6)(a)}}),d}function bu(a,b,c=[]){let d=(0,i.K3)(a),f=bn(c),g=bs(f.length>=e.mu?f:bm(b));return g.length<6?[]:g.filter(a=>!d.includes((0,i.K3)(a)))}async function bv(a,b,c){let d=[];if(0===(c.tables||[]).length)return d;let e=(0,k.JV)(a,c),f=e.filter(a=>!a.exempt);if(0===f.length)return d;let h=e.length-f.length,i=f.filter(a=>a.placed),j=f.filter(a=>!a.placed),l=f.length,m=i.length,n=(0,q.R8)(a,i.map(a=>a.itemName)),o=new Set;if(j.length>0&&m/l<.9){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.itemName))];if(b.length>0&&c.length>0)for(let a=0;a<c.length;a+=60){let d=c.slice(a,a+60),e=await (0,g.Mv)(d,b);for(let a of d)b.some(b=>e(a,b)>=g.Eh)&&o.add(a)}}let p=m+j.filter(a=>o.has(a.itemName)).length,r=j.filter(a=>!o.has(a.itemName)),s=a=>{if(0===b.length)return"";let c=(0,q.o7)({name:a.itemName,description:a.description||""},b);return c?`,建议落位「${c.chapterTitle.slice(0,24)}」`:""},t=new Map;for(let a of r){let b=a.itemName.slice(0,40),c=t.get(b);c?c.rows+=1:t.set(b,{name:a.itemName,rows:1,sample:a})}let u=[...t.values()].sort((a,b)=>b.rows-a.rows),w=p/l,x=[h>0?`口径行 ${h} 行(汇总/噪声/费用/标题等非清单明细)已豁免不计入分母`:"",n.size>0?`显性说明 ${n.size} 行(利旧/甲供/不涉及等说明式处置)`:""].filter(Boolean).join(";"),y=u.length>0?`未落位项(共${r.length}行/${u.length}类):${u.slice(0,30).map(a=>`${a.name.slice(0,40)}${a.rows>1?`\xd7${a.rows}`:""}${a.sample.quantity?` ${a.sample.quantity}`:""}(未落位${s(a.sample)})`).join(";")}${u.length>30?` 及其他${u.length-30}类(同类项按已列名称分组归并补写)`:""}`:"";if(w<.9)return d.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"boq-placement",fingerprint:(0,v.c6)(a)},message:`清单项落位不足:${p}/${l} 项(${Math.round(100*w)}%)${y?`。${y}`:""}`,suggestion:`请将未落位清单项按专业工程分组补写进对应章节"主要施工内容"小节(融入各专业工程的作业对象与工程量、工序顺序、施工方法叙述),优先落位主要分部分项、关键规格与大额工程量;对确实不涉及/利旧/甲供/由厂家配套的条目,在正文对应章节显性说明处置方式(说明句须含条目名称)。${y}${x?`〔落位审计:${x}〕`:""}`}),d;if(0===r.length)return d;let z=j.length>0&&p/l<.9,A=z?j.filter(a=>o.has(a.itemName)):[],B=new Set(A.map(a=>a.itemName.slice(0,40))),C=u.filter(a=>!B.has(a.name.slice(0,40))),D=C.slice(0,20).map(a=>`${a.name.slice(0,40)}${a.rows>1?`\xd7${a.rows}`:""}${a.sample.quantity?` ${a.sample.quantity}`:""}(未落位${s(a.sample)})`).join(";"),E=z?`其中语义已承接 ${A.length} 行(${B.size} 类),未承接 ${C.reduce((a,b)=>a+b.rows,0)} 行(${C.length} 类)`:`(落位率已达线,语义兜底通道未触发——下列缺口均为字面未落位,是否已被同义表述承接需人工判断)`;return d.push({level:"warning",category:"evidence_coverage",owner:"user",repairability:"manual_review",provenance:{detectorId:"boq-placement",fingerprint:(0,v.c6)(a)},message:`清单落位缺口清单(已达落位率线,残留缺口供复核):${p}/${l} 项(${Math.round(100*w)}%),字面未落位 ${r.length} 行 / ${u.length} 类;${E}${D?`。缺口项:${D}`:""}`,suggestion:`以下未落位项须逐条给出处置:补写进对应章节、或显性说明(不涉及/利旧/甲供/由厂家配套)。${D}${x?`〔落位审计:${x}〕`:""}`}),d}function bw(a,b){if(!b||0===b.groups.length)return[];let c=(0,p.SL)(b,a);if(0===c.unreferenced.length||c.rate>=.9)return[];let d=b.groups.length,e=c.unreferenced.slice(0,6).map(a=>{let b=a.factLines[0]?.slice(0,60)||"";return`${a.sourceFile.split("/").pop()||a.sourceFile}${b?`(如:${b})`:""}`}),f=Math.round(100*c.rate),g=`请将未落位图纸的设计说明、构造做法、材料规格与设备参数写入对应专业章节(按专业归属:结构/道路/排水/照明等),与清单规格一致的照抄清单权威值,不得编造;未落位图纸:${e.join("、")}`;return c.rate<.5&&d>=2?[{level:"error",severity:"blocker",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"drawing-reference",fingerprint:(0,v.c6)(a)},message:`图纸事实落位不足:${c.referenced.length}/${d} 份图纸的规格/做法事实在正文落位(${f}%)`,suggestion:g}]:[{level:"warning",severity:"warning",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"drawing-reference",fingerprint:(0,v.c6)(a)},message:`图纸事实未完全落位:${c.referenced.length}/${d} 份图纸被正文引用(${f}%,目标 ≥${Math.round(90)}%)`,suggestion:g}]}let bx=[{pattern:/按设计图纸(?:控制|计量|要求|施工|确定|执行|进行|处理|设置|选用|计算|调整)/gu,label:"按设计图纸…"},{pattern:/按(?:施工)?图纸(?:控制|计量|要求|施工|确定|执行)/gu,label:"按图纸…"},{pattern:/以(?:设计)?图纸为准|详见(?:施工)?图纸/gu,label:"以图纸为准/详见图纸"},{pattern:/详见[^。;\n]{0,16}(?:大样图|详图|节点图|工艺图|做法表)/gu,label:"详见\xd7\xd7大样图"},{pattern:/(?:资料|图纸|清单|设计文件)(?:中)?未(?:提供|明确|给出|注明)[^。;\n]{0,12}(?:参数|数据|做法|要求|规格)?/gu,label:"缺资料搪塞"},{pattern:/(?:具体(?:参数|做法|数值))?待(?:补充|确认|核实|明确)/gu,label:"待补充/待确认"}],by=/(?:参见《[^》]{2,40}》\s*)?(?:[皖烷京沪苏浙粤鲁豫鄂湘川渝陕冀晋蒙辽吉黑闽赣桂黔滇甘青宁新藏]\s?\d{4}|\d{2})\s?[A-Z]{1,2}\s?\d{2,4}(?:[//]\d{1,3})?/u,bz=/依据|编制|规范标准|标准规范|执行本|遵照/u;function bA(a){let b=String(a||"");if(!b)return[];let c=[];for(let{pattern:a,label:d}of bx)for(let e of b.matchAll(a)){let a=bB(b,e.index??0);"缺资料搪塞"===d&&bz.test(a)||c.push({label:d,sample:a.slice(0,60)})}for(let a of b.matchAll(/参见《[^》]{2,40}》[^。;\n]{0,20}/gu)){let d=bB(b,a.index??0);!bz.test(d)&&by.test(a[0])&&c.push({label:"参见《…》图集替代做法",sample:a[0].replace(/\s+/gu," ").slice(0,60)})}for(let a of b.matchAll(/(?:参见|详见|参照|见|按|依照)[^。;\n]{0,10}?((?:[皖烷京沪苏浙粤鲁豫鄂湘川渝陕冀晋蒙辽吉黑闽赣桂黔滇甘青宁新藏]\s?\d{4}|\d{2})\s?[A-Z]{1,2}\s?\d{2,4}(?:[//]\d{1,3})?)/gu)){let d=bB(b,a.index??0);bz.test(d)||c.push({label:"图集号指向替代做法",sample:a[0].replace(/\s+/gu," ").slice(0,60)})}if(0===c.length)return[];let d=new Map;for(let a of c)d.set(a.label,(d.get(a.label)||0)+1);return[{level:"error",severity:"blocker",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"drawing-pointer-phrase",fingerprint:(0,v.c6)(a)},message:`指向型表述替代具体做法:${c.length} 处(${[...d.entries()].map(([a,b])=>`${a} ${b} 处`).join("、")})`,suggestion:`请把每处指向改写为本项目已确认的具体做法与参数实值(取蓝图/工程量清单/图纸标注/规范的确定值);缺该条目权威值时按同专业已确认的等效做法+已有资料写实,不得指向图纸/图集、不得写「未提供」类搪塞。示例:${c.slice(0,4).map(a=>a.sample).join(" / ")}`}]}function bB(a,b){let c=Math.max(0,a.lastIndexOf("。",b)+1,a.lastIndexOf(";",b)+1,a.lastIndexOf("\n",b)+1),d=[a.indexOf("。",b),a.indexOf(";",b),a.indexOf("\n",b)].filter(a=>a>=0),e=d.length>0?Math.min(...d):a.length;return a.slice(c,e)}function bC(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:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见资料/按文件”。"});let c=ad(a);if(c.length>0){let a=c[0];b.push({level:"warning",message:`存在占位式表达:表格数据格占位符(${a.header.join("、")}“${a.rowFirstCell}”行“${a.cell}”)共 ${c.length} 处`,suggestion:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见资料/按文件”。"})}return b}function bD(a){return(0,C.LZ)(a).map(a=>({level:"error",message:`小节标题「${a.title}」含本小节正文未覆盖的工程类别:${a.uncovered.join("、")}`,suggestion:"标题中的工程类别必须在小节正文有对应施工内容;请将标题改为与实际施工内容一致的名称,不得照抄工程量清单章节汇总行名称。"}))}function bE(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,f=[];for(let a of(0,d.V)().autoSpecGates)(function(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})(c,a.templateMatchers)&&f.push(a);if(0===f.length)return[];let g=[],h=Q(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:"error",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:"error",message:`配置要求正式表格不足:${h}/${i}`,suggestion:"如用户提示词或章节内容要求表格,应按项目资料补充对应表格本体。"}),g}function bF(a,b,c,d,f,g,i){var j;if(!a)return b;let k=[...b],l=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),m=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,l),n=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,s.I2)(c,b)&&(e=!0),!f&&(0,s.I2)(c,b)&&(f=!0)}0!==a.length||m.has(b.name)||e||k.push({level:"warning",message:`系统暂未从知识库确认必需事实:${b.name}`,suggestion:b.extractionHint||"请扩大本地知识库检索、执行事实补抽,或调整事实字段配置。"}),f||k.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&&k.push({level:"warning",message:`章节内容深度建议:${b.title}`,suggestion:`可扩展到约 ${b.minWords} 字,但不要改变模板章节结构。`})}let o=Q(f),p=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),q=(0,h.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},h=a.target||b.target||"",j=a.value||b.value||h,r=d.find(a=>a.title===h),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:h,value:j,min:a.min||Number(b.value)||1,markdown:f,textScope:"chapter"===a.subject&&r?r.content:f,regex:j?function(a){try{return RegExp(a,"iu")}catch{return}}(j):void 0,chapter:r,factNames:m,chapterTitles:n,tableBlocks:o,imageRefs:p,estimatedPages:q,allFacts:l,factsModel:c,projectBindings:g,promptBindings:i});s&&k.push(s)}return k}function bG(a,b){let c=function(a){let b="";for(let c of(0,t.dU)(a))c.content&&(b+=`${c.content}
|
|
23
23
|
|
|
24
24
|
`);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[]}function bH(a,b=[]){let c=[];if(!a||0===b.length)return c;let d=a.split(/\r?\n/u),e=[];for(let f of(d.forEach((a,b)=>{let c=/^##\s+(.+?)\s*$/u.exec(a.trim());c&&!/^(目录|附表)/u.test(c[1])&&e.push({index:b,title:c[1].replace(/\s+/gu,"")})}),b)){let b=(f.sections||[]).filter(Boolean);if(0===b.length)continue;let g=f.title.replace(/\s+/gu,""),h=e.find(a=>a.title.includes(g)||g.includes(a.title));if(!h)continue;let i=e.find(a=>a.index>h.index),k=d.slice(h.index+1,i?i.index:d.length).join("\n"),m=(0,j.hL)(b,k);0!==m.length&&c.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"planned-section-placement",fingerprint:(0,v.c6)(a)},message:`规划小节未落位:「${(0,l.GQ)(f.title)}」缺少 ${m.length} 个规划小节(${m.slice(0,6).join("、")}${m.length>6?" 等":""})——章级规划小节必须以三级标题逐节落地,不得漏写或降级为四级标题`,suggestion:`请补齐以下小节并各自成节(三级标题「### X.X 小节名」,小节名与规划逐字一致,每节下写实质内容):${m.join("、")}。`})}return c}let bI=/^(?:按(?:清单|设计|图纸|规范|方案|要求|合同|实际|甲方|业主)[^,。;]{0,14}|符合(?:设计|规范|标准|要求)[^,。;]{0,8}|根据(?:实际|现场)情况[^,。;]{0,10}|视(?:现场)?情况[^,。;]{0,10}|详见(?:图纸|设计|招标文件|清单)|相关(?:人员|部门|岗位)(?:及时)?[^,。;]{0,10}|及时(?:处理|整改|跟进|上报)|加强管理|严格控制|按需(?:配置|投入)|按实(?:计算|结算)|综合考虑|按有关规定)$/u;function bJ(a){let b=[];if(!a)return b;let c=a.split(/\r?\n/u),d=new Map,e=0,f=[];for(let a=0;a<c.length;a+=1){let b=c[a];if(!/^\s*\|/.test(b)){f=[];continue}if(/^\s*\|[\s:|-]+\|\s*$/u.test(b)){e+=1;continue}let g=b.split("|").slice(1,-1).map(a=>a.trim());if(0===f.length){f=g;continue}g.forEach((a,b)=>{let c=f[b]||`第${b+1}列`;if(!a){let a=`${e}\u0000${c}`,b=d.get(a)||{tableIndex:e,column:c,count:0,samples:[]};b.count+=1,b.samples.length<3&&b.samples.push("(空单元格)"),d.set(a,b);return}if(/\d/u.test(a)||!bI.test(a))return;let g=`${e}\u0000${c}`,h=d.get(g)||{tableIndex:e,column:c,count:0,samples:[]};h.count+=1,h.samples.length<3&&h.samples.push(a),d.set(g,h)})}for(let[c,e]of d)b.push({level:"error",severity:"blocker",category:"table",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"hollow-table-cell",fingerprint:(0,v.c6)(a)},message:`表格空话/空单元格:第 ${e.tableIndex} 张表的「${e.column}」列有 ${e.count} 格无具体数据(如「${e.samples.join("」「")}」)——每格必须有内容且有值,空单元格与「按…」式表述等价于留空`,suggestion:`请把该列的「按…」式表述替换为具体值:工程量列写清单原值(数值+单位,如 12792.800m3);规格/尺寸/净距列写图纸或清单给出的具体数值;确实无该字段数据时写可追溯来源(如「按施工图结施-03」),不得用“按清单工程量/按设计标高”类表述搪塞。同类数据在同章正文中通常已存在,请直接引用同一口径。`});return b}function bK(a,b={}){if(!a)return[];let c=[...a.matchAll(/(?:总工期|计划工期|合同工期|工期)[^。;;\n]{0,12}?(\d{2,4})\s*个?\s*(?:日历天|天|日)/gu)].map(a=>Number(a[1])).filter(Number.isFinite);if(0===c.length)return[];let d=new Map;for(let a of c)d.set(a,(d.get(a)||0)+1);let e=[...d.entries()].sort((a,b)=>b[1]-a[1]||a[0]-b[0])[0][0];if(!Number.isFinite(e)||e<=0)return[];let f=[];for(let b of a.matchAll(/第\s*(\d{1,4})\s*[~~—–-]\s*(\d{1,4})\s*天/gu))f.push(Number(b[2]));for(let b of a.matchAll(/(?:第|不迟于第|至第)\s*(\d{2,4})\s*天/gu))f.push(Number(b[1]));if(0===f.length)return[];let g=Math.max(...f),h=Math.max(b.toleranceDays??3,Math.round(.02*e));return g<=e+h?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"schedule-duration-overrun",fingerprint:(0,v.c6)(a)},message:`进度计划超出声明工期:正文声明总工期 ${e} 日历天,而进度计划/节点的天序排到第 ${g} 天(超出 ${g-e} 天)——工期口径必须单一(招标工期经答疑澄清变更时以变更后为准)`,suggestion:`请统一工期口径:以答疑/澄清后的生效工期(${e} 日历天)为唯一基准,重排进度计划表与各阶段节点的起止天序,使最大天序不超过 ${e} 天(可留 ${h} 天收尾余量);正文任何位置的工期表述必须与此一致。`}]}let bL=[["日历天","天"],["万元","亿元","元"],["mm","cm","米","m"],["吨","kg","kN","t"]],bM=new Set(["measure","money","date","standard","spec"]);function bN(a,b=[]){let c=[];if(!a||0===b.length)return c;let d=a.replace(/\s+/gu,"");for(let e of b){let b=String(e.value||"").replace(/\s+/gu,"");!1!==e.caliber&&b.length>=3&&bM.has((0,A.dm)(String(e.value||"")))&&!d.includes(b)&&c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"caliber-consistency",fingerprint:(0,v.c6)(a)},message:`口径不一致:「${e.attribute}」真值层生效值为「${e.value}」(裁决 ${e.rule}),正文未按该口径落位`,suggestion:`请将「${e.attribute}」统一为现行口径「${e.value}」(裁决依据:${e.evidence[0]?.source||"资料"});不得使用被取代的旧口径,也不得改用其他数值。`});let f=(e.superseded||[]).map(a=>({superseded:a,re:function(a){let b=String(a||"").replace(/\s+/gu,""),c=bL.find(a=>a.some(a=>b.endsWith(a)));if(!c)return;let d=c.find(a=>b.endsWith(a)),e=b.slice(0,b.length-d.length).replace(/,/gu,"");if(!/^\d+(?:\.\d+)?$/u.test(e))return;let f=c.map(a=>a8(a)).join("|");return RegExp(`(?<![\\d.])${a8(e)}\\s*(?:${f})`,"u")}(a)})).filter(a=>!!a.re),g=a=>{for(let b of d.matchAll(RegExp(a.source,"gu"))){let a=b.index??0,c=d.slice(Math.max(0,a-16),a+b[0].length+16);if(!/原(?:为|值|内容|计划|合同|招标)|此前|变更过程/u.test(c)&&!/由[^,。;]{0,12}(?:变更|调整)/u.test(c))return!0}return!1},h=f.filter(a=>g(a.re));h.length>0&&c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"caliber-consistency",fingerprint:(0,v.c6)(a)},message:`被取代口径残留:「${e.attribute}」现行值为「${e.value}」,正文仍出现被取代值 ${h.map(a=>`「${a.superseded}」`).join("、")}(被取代值仅可在陈述变更过程时引用)`,suggestion:`请将正文中所有被取代值(${h.map(a=>a.superseded).join("、")})改为现行口径「${e.value}」;确需说明变更过程的,写成「原为 X,经答疑澄清变更为 Y」的形式,不得单独陈述旧值。`})}return c}function bO(a,b=[]){let c=[];if(!a)return c;let d=b.map(a=>({attribute:a.attribute,token:String(a.value||"").replace(/\s+/gu,"")})).filter(a=>/\d/u.test(a.token)&&a.token.length>=3).filter(a=>/深度|高度|跨度|重量|支护|层高/u.test(a.attribute)).filter(a=>a.token.length>=3||/\d\s*(?:m|米|mm|cm|t|吨|kg|kN|%)/u.test(a.token));if(0===d.length)return/(?:开挖深度|搭设高度|支撑高度|吊装重量|跨度|基坑深度)[^。;]{0,14}?(?:超过|达到|不小于|大于)\s*\d+(?:\.\d+)?\s*(?:m|米|t|吨|kg)/u.test(a)?[{level:"warning",severity:"warning",category:"fact_consistency",owner:"system",repairability:"manual_review",provenance:{detectorId:"hazard-parameter-binding",fingerprint:(0,v.c6)(a)},message:"危大参数绑定未能核对:正文出现危大判定阈值表述,但真值层无「深度/高度/跨度/重量/支护/层高」类工程测量实参可比对——本项目是否以规范阈值充作项目实参,本次无法判定",suggestion:"请在资料中确认本项目实际测量参数(开挖深度/支撑高度/搭设高度/起吊重量等)并使其进入真值层,再重跑;本次该维度按未核对处理。"}]:c;let e=/(\d+(?:\.\d+)?)\s*(mm|cm|m|米|t|吨|kg|kN)/gu,f=/深度|高度|跨度|重量|起吊|吊装|开挖|搭设|支撑|基坑/u,g=(a,b)=>"mm"===b?a/1e3:"cm"===b?a/100:"t"===b||"吨"===b?9.8*a:"kg"===b?.0098*a:a,h=new Set;for(let a of Object.values(D.gQ))for(let b of[...a.hazardous,...a.superHazardous])void 0!==b.value&&b.dimension&&h.add(`${b.dimension}:${b.value}`);let i=a=>{let b=(a=>{let b=/(开挖深度|基坑深度|搭设高度|支撑高度|吊装重量|起吊重量|跨度)/u.exec(a)?.[1];if(b)return/深度/u.test(b)?"深度":/高度/u.test(b)?"高度":/跨度/u.test(b)?"跨度":"重量"})(a),c=/(\d+(?:\.\d+)?)\s*(mm|cm|m|米|t|吨|kg|kN)\s*$/u.exec(a);if(!b||!c)return!1;let d=g(Number(c[1]),c[2]);for(let a of h){let[c,e]=a.split(":");if(c!==b)continue;let f=Number(e);if(Math.abs(d-f)<=Math.max(.05,.03*f))return!0}return!1},j=(a,b)=>{for(let c of a.matchAll(e)){let d=c.index??0;if(!f.test(a.slice(Math.max(0,d-8),d)))continue;let e=c[0].replace(/\s+/gu,"");if(!b||e!==b.replace(/\s+/gu,"")){if(b){let a=/(\d+(?:\.\d+)?)\s*(mm|cm|m|米|t|吨|kg|kN)\s*$/u.exec(b);if(a&&.001>=Math.abs(g(Number(c[1]),c[2])-g(Number(a[1]),a[2])))continue}return e}}},k=[];for(let b of a.matchAll(/(?:开挖深度|搭设高度|支撑高度|吊装重量|跨度|基坑深度)[^。;]{0,14}?(?:超过|达到|不小于|大于)\s*\d+(?:\.\d+)?\s*(?:mm|cm|m|米|t|吨|kg|kN)/gu)){let c=Math.max(0,a.lastIndexOf("。",b.index??0)+1),e=a.indexOf("。",(b.index??0)+b[0].length),f=a.slice(c,-1===e?a.length:e+1);if(d.some(a=>f.replace(/\s+/gu,"").includes(a.token))||j(f,b[0])||!i(b[0]))continue;let g=b[0].replace(/\s+/gu,"");k.push(g)}if(0===k.length)return c;let l=a.replace(/\s+/gu,""),m=(()=>{for(let b of a.matchAll(e)){let c=b.index??0;if(f.test(a.slice(Math.max(0,c-8),c)))return!0}return!1})(),n=d.some(a=>l.includes(a.token))||m;return c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"hazard-parameter-binding",fingerprint:(0,v.c6)(a)},message:`危大工程只写规范阈值、未落本项目实参:${k.slice(0,3).join("、")}${n?"":"(全文亦未出现本项目开挖深度/支护/高度类实参)"}——危大分级必须写「本项目实际参数 + 判定阈值对照 + 结论」,不得只抄规范阈值`,suggestion:`请在危大工程判定处写明本项目实际参数并给出对照结论(如「本项目基坑开挖深度 ${d[0]?.token||"1.75m"},对照《危险性较大的分部分项工程安全管理规定》3m 阈值判定为/不属于危大工程」);参数取自资料原文,不得编造。`}),c}function bP(a,b){let c=[];if(!a||!b)return c;let d=a.replace(/\s+/gu,""),e=[],f=(a,b,c)=>{let e=a8(String(a)),f=b?a8(b):"",g=f?RegExp(`(?<![\\d.])${e}\\s*${f}`,"u"):void 0;return!!g?.test(d)||!c&&RegExp(`(?<![\\d.])${e}(?![\\d.])`,"u").test(d)},g=b.resources?.labor?.peakValue;if("number"==typeof g&&g>0){let a=String(g);f(g,"人",!0)||RegExp(`峰值[^。;]{0,20}(?<![\\d.])${a8(a)}(?![\\d.])`,"u").test(d)||e.push(`劳动力峰值 ${g} 人`)}for(let a of(b.resources?.equipment||[]).slice(0,12))"number"==typeof a.count&&!(a.count<=0)&&(f(a.count,"台",!0)||e.push(`${a.name} ${a.count} 台`));return 0===e.length||c.push({level:"error",severity:"blocker",category:"professional_chain",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"blueprint-value-placement",fingerprint:(0,v.c6)(a)},message:`蓝图权威值未落位:${e.slice(0,6).join("、")}——资源配置类数值由系统蓝图统一裁决,正文必须以具体数值写出,不得以「按…控制/按部署确定」类表述代替`,suggestion:`请在对应章节(劳动力配置/机械设备配置)写明蓝图权威值:${e.slice(0,6).join("、")};这些数值为系统裁决的唯一口径,不得自行推算另设、也不得只写控制原则。`}),c}let bQ=/[^。;!?\n]{18,}?(?:以及|和|与|及|或|并)\s*[。;]/gu;function bR(a){let b=[];if(!a)return b;let c=[];for(let b of a.matchAll(bQ))c.push(b[0].trim());return 0===c.length||b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"dangling-conjunction",fingerprint:(0,v.c6)(a)},message:`截断句(悬空连接词):${c.length} 处句子以连接词/助词收尾且无后续成分——如「${c[0].slice(-30)}」`,suggestion:"请补全被截断的句子成分(宾语/并列项),或删除悬空连接词使句子完整;不得出现半截句。"}),b}},25284:(a,b,c)=>{c.d(b,{OO:()=>N,TD:()=>F,Tt:()=>A,Ut:()=>C,b3:()=>M,hp:()=>H,xv:()=>L});var d=c(77598),e=c(73024),f=c(76760),g=c(19898),h=c(44533),i=c(37095),j=c(32434),k=c(70963),l=c(36003),m=c(22157);let n="project-intelligence-v13";function o(a,b){let c=f.join(function(a){let b=f.join((0,h.a2)(),"projects",(0,g.computeProjectId)(a),"project-intelligence");return e.mkdirSync(b,{recursive:!0}),b}(a),"packs");return e.mkdirSync(c,{recursive:!0}),f.join(c,function(a){let b=encodeURIComponent(a),c=`${b}.json`;if(200>=Buffer.byteLength(c,"utf8"))return c;let e=b.slice(0,120).replace(/%[0-9A-F]{0,2}$/u,"");return`${e}-${(0,d.createHash)("sha1").update(a,"utf8").digest("hex").slice(0,12)}.json`}(b))}function p(a,b){let c=`${a}.tmp-${process.pid}`;e.writeFileSync(c,JSON.stringify(b,null,2)),e.renameSync(c,a)}let q="intelligence-mixed-";function r(a){return`${q}${encodeURIComponent(a)}`}function s(a){return a.replace(/资料参数行摘要\s*[::]?/gu,"").replace(/#{1,6}\s*/gu," ").replace(/[##]{1,6}(?=[\u4e00-\u9fa5])/gu," ").replace(/(?:PDF\s*)?第\s*\d+\s*页(?:\s*共\s*\d+\s*页)?/giu," ").replace(/资料类型\s*[::]\s*[^\s;;]+/giu," ").replace(/MIME\s*[::]\s*[^\s;;]+/giu," ").replace(/文件大小\s*[::]\s*[^\s;;]+/giu," ").replace(/(?:项目编号|招标编号|备案编号|工程编号)\s*[::]\s*[^\s;;,。]+/giu," ").replace(/\s+/gu," ").trim()}function t(a){return/投标函|保证金|开标|评标|交易系统|账户|协议书|示范文本|报价|税率|利润|我方已仔细研究|中标|签订合同|专用账户监管|联合体投标|注册建造师|安全生产考核合格证书|安全生产许可证|营业执照|资质要求|投标人资格|资格审查|资格后审|资格预审|业绩要求|信誉要求|财务要求|投标有效期|投标截止|递交投标文件|递交电子投标文件|获取招标文件|获取方式|获取时间|踏勘现场|投标预备会|备选投标方案|分包内容|电子交易系统|电子服务系统|联系方式|联系人|邮编|技术支持|全流程电子化交易|异议|投诉|评标委员会|评标办法|公告发布|媒介|咨询电话|拨打电话|招标工程量清单|最高投标限价|不可竞争费|招标总说明|招标需求|招标范围|招标控制价|编制补疑|计价依据|计价定额|措施项目费|暂列金额|投标总价|综合单价|计价格式|取费标准|清单编制说明|招标文件正文|招标图纸目录|投标人/u.test(a)}let u={工期进度:["工期","进度","计划","节点","流水","穿插","日历天"],质量验收:["质量","验收","检验","试验","复试","见证","取样","规范","标准"],安全危大:["安全","危大","风险","脚手架","深基坑","吊装","临电","消防","应急"],施工部署:["部署","总平面","临设","场地","施工组织","施工顺序"],施工方法:["施工方法","施工工艺","道路","桥梁","排水","照明","园林","绿化","交通","结构"],人材机:["劳动力","材料","机械","设备","周转","进场","资源"],环境文明:["环保","扬尘","文明","噪声","水土保持","绿色施工"],工程概况:["项目","工程","建设地点","建设规模","招标范围","发包人要求"]};function v(a){let b=[],c=(c,d,e=.72)=>{d&&b.push({key:c,value:d,sourceFile:a.relativePath,roleId:a.roles[0]||"project_overview",processingType:"project_intelligence",confidence:e})};for(let b of(c("资料文件",a.fileName,.6),a.root&&c("资料组",a.root,.65),a.roles))c("资料角色",b,.58);for(let b of a.contentFacts)c("资料内容事实",b,.76);for(let b of a.chapterHints)c("章节意图候选",b,.68);let d=a.relativePath.match(/([^/\\]*项目[^/\\]*)/u)?.[1]||a.root;return d&&c("项目名称候选",d,.62),b}function w(a){return(0,m.c6)(a.map(a=>({path:a.relativePath,hash:a.contentHash,chunkCount:a.chunkCount,status:a.status})).sort((a,b)=>a.path.localeCompare(b.path)))}function x(a,b){return w((0,h.Yy)(a).filter(a=>(0,g.materialRootOf)(a.relativePath)===b).filter(j.PZ).map(a=>({relativePath:a.relativePath,contentHash:a.contentHash,chunkCount:a.chunkCount,status:a.status,indexedAt:a.indexedAt})))}let y=new Map;function z(a,b){let c=`${a}::${b}`,d=Date.now();d-(y.get(c)||0)<6e4||(y.set(c,d),M(a,b))}function A(a,b){let c=o(a,b);if(e.existsSync(c))try{let d=function(a,b,c){if(c.version!==n||c.packRoot!==b||!c.projectGraph||!Array.isArray(c.files)||0===c.files.length)return;let d=w(c.files);if(d!==x(a,b))return;let e=c.constructionOrganizationGraph||E(c.projectGraph,c.files),f={...c,version:n,projectRoot:a,packRoot:b,projectId:c.projectId||(0,g.computeProjectId)(a),sourceHash:d,constructionOrganizationGraph:e};return c.constructionOrganizationGraph&&c.sourceHash===d||p(o(a,b),f),f}(a,b,JSON.parse(e.readFileSync(c,"utf8")));if(!d)return void z(a,b);return d.graphDegraded&&z(a,b),d}catch{z(a,b);return}}let B=/评标办法|评标(?:委员会|细则)|评分档位|分值构成|评审|地质勘察|地勘|土壤氡/u;function C(a){return B.test(a.replace(/\s+/gu," "))}function D(a,b){return[...new Set(a.map(a=>a.replace(/\s+/gu," ").trim()).filter(Boolean))].slice(0,b)}function E(a,b){let c=new Map(b.map(a=>[a.relativePath,a.contentFacts])),d=new Set(b.map(a=>a.root).filter(Boolean)),e=new Set(b.map(a=>a.fileName).filter(Boolean)),f=a=>/资料文件|资料组|资料角色|资料内容事实|章节意图候选|项目名称候选/u.test(a),g=(a,b)=>D(a,b).filter(a=>!(t(a)||f(a))&&!/\d+\s*[.、]/u.test(a.split(/[::]/u).slice(1).join(":"))),h=new Map;for(let a of b){if(!/工程量清单EXCEL/iu.test(a.relativePath)||!/\.xls$/iu.test(a.relativePath))continue;let b=a.relativePath.split("/"),c=b[b.length-1]||"",d=(b[b.length-2]||"").replace(/^\d+\s*/,"").trim()||c.replace(/\.xls$/iu,"").trim();!d||/项目施工$|清单编制说明|图纸目录|可调整价差|汇总|一览表/u.test(d)||(h.has(d)||h.set(d,[]),h.get(d).push(a.relativePath))}let i=new Map;for(let b of a.works)for(let a of b.sourceFiles||[])i.has(a)||i.set(a,b.scope||"");let j=[],k=new Set,l=(b,h,i,l=[])=>{if(!b||k.has(b)||d.has(b)||e.has(b)||/投标|报价|保证金|合同协议|账户|开标|评标|资质要求|资格审查|资料目录|招标范围|招标需求|招标总说明|最高投标限价|不可竞争费|补疑|清单编制说明|图纸目录/u.test(`${b}${i||""}`)||/项目施工$/u.test(b.trim()))return;let m=g([...l,...(h||[]).flatMap(a=>c.get(a)||[])],16),n=`${b}
|
|
25
25
|
${i||""}
|
|
@@ -43,70 +43,71 @@ ${e.join("\n")}`;return b[0]===f?{markdown:a,fixedCount:0,details:[]}:{markdown:
|
|
|
43
43
|
]{18,60})[。!?!?]`,"gu");function aa(a){let b=[],c=new Map;for(let b of a.matchAll(_)){let a=b[1].trim(),d=a.replace(/[\d,,.。%%㎡m2²]/gu,"").slice(0,16);if(d.length<10)continue;let e=c.get(d)||{count:0,sample:a};e.count+=1,c.set(d,e)}for(let{count:a,sample:d}of c.values())a<3||b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`段首固定开场机械重复 ${a} 次:“${d.slice(0,30)}…”`,suggestion:"同一段首句式只保留首次出现处,其余处按所在章节语境改写为差异化开场,避免模板化套话观感。"});return b}function ab(a){let b,c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let e=/^(#{2,4})\s+(.+)$/u.exec(c[a].trim());if(e){let c=e[1].length;/(?:工程概况|项目概况|基本信息)/u.test(e[2])?b={index:a,level:c}:b&&c<=b.level&&(d.push([b.index,a]),b=void 0)}}b&&d.push([b.index,c.length]);let e=a=>d.some(([b,c])=>a>=b&&a<c),f=c.filter((a,b)=>e(b)).join("\n"),g=[];for(let a=0;a<c.length;a+=1){if(e(a))continue;let b=/本项目为|本工程为|该项目为|该工程为/u.exec(c[a]);if(!b)continue;let d=c[a].slice(b.index).split(/[。!?!?]/u)[0];d&&d.length>=12&&g.push(d)}return{overviewBody:f,sentences:g}}function ac(a,b){return(0,n.qr)(a,b)>=8||a.split("、").map(a=>(a.match(/[\p{Script=Han}]/gu)||[]).join("")).filter(a=>a.length>=3).filter(a=>b.includes(a)).length>=2}function ad(a){let b=[],{overviewBody:c,sentences:d}=ab(a);if(0===d.length||!c)return b;let f=(c.match(/[\p{Script=Han}]/gu)||[]).join("");if(!f)return b;let g=[];for(let a of d)if(ac(a,f)&&g.push(a.slice(0,36)),g.length>=3)break;return 0===g.length||b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`项目概况段跨章复述不得出现:概况章外有 ${g.length} 处以“本项目为/本工程为”等总述开头整段复述概况内容:${g.map(a=>`“${a}…”`).join("、")}`,suggestion:"总述数据只在工程概况类小节集中交代一次:其他章节直接写本章内容,仅可引用所需的具体数字(如计划工期天数),不得复述完整概况段。",provenance:{detectorId:"overview-recap",fingerprint:(0,e.c6)(a)}}),b}let ae=["销项","复查","整改","闭环"];function af(a){let b=[],c=(0,d.V7)(a);if(c<3e3)return b;let e=[];for(let b of ae){let d=a.split(b).length-1;e.push(d/c*1e3)}let f=Math.max(...e),g=ae[e.indexOf(f)];return f>=3&&b.push({level:"warning",severity:"warning",category:"style",owner:"llm",repairability:"llm_repairable",message:`闭环句式模板化密集:“${g}”达 ${f.toFixed(1)} 次/千字(销项/复查/整改/闭环统一结尾高度重复)`,suggestion:"保留关键控制环节的闭环表述,其余改为差异化的过程控制语言(检验批验收、实测实量、旁站记录等),提升语言精练度。"}),b}let ag=["专项设计文件尚未完成,待后续补充","评分指标存在缺口尚未明确","依据承诺函后续跟踪完善","本项目未采用行业认定的新技术、新工艺、新设备、新材料"],ah=/编制范围为[^。;;]{0,40}?所界定的全部施工内容|作为施工组织的控制性约束条件|分项验收[,,]?验收记录经监理工程师签字确认后归档|(?:执行|按|依据|按照)[^。;;]{0,10}?(?:〔|【)?20\d{2}(?:〕|】)?\s*\d+\s*号\s*(?:文件|办法|规定)?/u,ai=/未落实[^。;;]{0,24}?(?:整改|复查|销项|复验)|未(?:明确|列明|注明)[^。;;]{0,36}?按[^。;;]{0,44}?(?:执行|选取|确定|取用|调整|选用)|(?:发现|对|明确|约定|签订|制定|建立|规定|凡|任何|所有|新增)[^。;;]{0,48}?(?:缺失|损坏|不全|脱岗|未审批|不合格|未完成|未明确|未落实|隐患)[^。;;]{0,72}?(?:整改|复查|销项|约谈|补齐|补拍|重拍|补传|重新上传|补测|复测|补报|归档|复核|确认|登记|通知|上报|通报|更新|处置|修复|更换|纠正|恢复|完善|处理|落实|责任|时限|考核|处罚|扣减|调离|清退|停止作业|恢复施工|补录|追查)|(?:不得|严禁|禁止)[^。;;]{0,40}?(?:避免|防止)[^。;;]{0,20}?(?:返工|窝工|损失|事故)|(?:重难点|难点)(?:源于|在于)[^。;;]{0,80}?(?:若|如)未[^。;;]{0,40}?(?:将|会|可能)|(?:考核|考评|评比|评分)[^。;;]{0,50}?(?:不合格|不达标|不到位|不称职|失职|缺失|超时|违规)[^。;;]{0,36}?(?:绩效扣减|扣减|扣款|调离|清退|退场|问责|处罚|奖惩|奖罚)|(?:如|若)[^。;;]{0,60}?(?:发包人|招标人|建设单位)[^。;;]{0,60}?(?:有权|可要求|可以要求|可提出|可以提出)|[^。;;]{0,24}?时[,,][^。;;]{0,32}?(?:发包人|招标人|建设单位)[^。;;]{0,60}?(?:有权|可要求|可以要求|可提出|可以提出)|未[^。;;]{0,16}?不放过|(?:凡|任何|所有)[^。;;]{0,24}?未[^。;;]{0,40}?(?:人员|工人)[^。;;]{0,20}?(?:不得|严禁|禁止)[^。;;]{0,20}?(?:进入|上岗|进场|作业)|未[^。;;]{0,32}?(?:前|的)[^。;;]{0,32}?(?:不得|严禁|禁止|不予|不办理|不签发|不安排|不组织|不批准|不开放|不下发|不投入使用)|(?:未能|未按|未完成|未明确|未落实|未闭合|未审批|缺失|损坏|缺漏|不合格|隐患)[^。;;]{0,40}?(?:整改|复查|销项|恢复|复核|确认|登记|更新|处置|修复|更换|纠正|完善|落实|补齐|补测|复测|归档|通知|上报|通报|约谈|扣减|停止作业)[^。;;]{0,20}?(?:复查|销项|确认|登记|归档|责任|时限|考核|处罚|扣减|调离|清退|落实|复核|恢复|整改|处置|更新|完成|闭合)|未(?:完成|通过|复审|核验|审查|审核|验收|办理|达标|整改|闭合|接受|取得)[^。;;]{0,32}?(?:不得|严禁|禁止|不予|不办理|不签发|不安排|不组织|不批准|不开放)[^。;;]{0,16}?(?:上岗|作业|进场|进入|担任|从事|投用|使用|操作|开工|复工|施工|回填|浇筑|砌筑|铺筑|摊铺|安装|隐蔽|覆盖|封闭|推进|实施|开放|通行|吊装|拆除|验收)|(?:对|针对)[^。;;]{0,20}?未[^。;;]{0,24}?(?:的|区段|部位|工序|作业面|任务|班组)[^。;;]{0,60}?(?:调整|调拨|调配|增派|增补|加强|优化)[^。;;]{0,60}?(?:确保|保障|保证)[^。;;]{0,24}?(?:不突破|不超|满足|达标|完成|实现)|(?:统计|评估|分析|核算|汇总|排查|监测)[^。;;]{0,30}?(?:未能|未按|未完成|未明确|未落实|缺失|损坏|损失|不合格|隐患|滞后|影响)[^。;;]{0,50}?(?:组织|调整|调拨|调配|增派|增补|补充|加密|加强|优化|纠偏|补位)[^。;;]{0,50}?(?:确保|保障|保证)[^。;;]{0,24}?(?:不[^。;;]{0,6}?(?:突破|超期|滞后|延误|影响|低于|少于|超过)|满足|达标|完成|实现|符合)|(?:缺失|损坏|缺漏|过期|失效|不符|不合格|不达标)[^。;;]{0,24}?(?:当日|当天|立即|及时|随时|限期|按批|按次|定期|一律|一律不得|不得)[^。;;]{0,16}?(?:补充|更换|修复|整改|处置|更新|补齐|完善|销项|退场|拒收|退回|清退|退货|不予进场|拒绝接收|重新采购)|未[^。;;]{0,20}?(?:的|区段|部位|工序|作业面|任务|班组|段落)[^。;;]{0,48}?(?:由|经|责成|交|指定)[^。;;]{0,16}?(?:组织|安排|负责|落实|实施|调配|增派|督办|责成)[^。;;]{0,40}?(?:清运|清理|处置|处理|整改|完善|补充|调整|加固|返工|修复|恢复|回填|浇筑|作业|施工|外运|归集)[^。;;]{0,40}?(?:直至|确保|保证|实现|不留|无遗留|达标|闭合|清零|完成|销项)/u,aj=/未[^,。;;\n]{1,12}的[,,]?(?:由|经|应|须|需|统一|一律|责成)[^,。;;\n]{0,16}?(?:补齐|补正|补录|补报|整改|纠正|复核|复验|复测|返工|修整|处理)[^,。;;\n]{0,20}?(?:方可|才能|不得|严禁)/gu,ak=/(?:无|没有|不存在|未发现|未出现|杜绝|避免|防止|严禁|不得出现)(?:出现|发生|存在|产生)?(?:尚未完成|尚未|未完成|未明确|未采用|未落实|未确定|未闭合|存在缺口|有待|待补充|待完善|跟踪完善|不够|不明确|缺失|缺少|缺乏|风险较大|难以保证|无法保证|正在办理|暂未|未能|需进一步)/gu,al=/(?:不得|严禁|禁止|绝不|不能|不可)以[^,。;]{1,24}为(?:由|借口|理由)/gu,am=/(?:倘若|如果|一旦|万一|若(?!干))/u;async function an(a){let b=[],c=a.split(/\n+/u).filter(a=>a.trim()&&!/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12);if(0===c.length)return b;let d=/尚未|未完成|未明确|未采用|未落实|未确定|未闭合|存在缺口|有待|待补充|待完善|跟踪完善|不够|不明确|缺失|缺少|缺乏|风险较大|难以保证|无法保证|正在办理|暂未|未能|需进一步|不进行分包|不再分包|不转包/u,e=await (0,f.Mv)(c,[...ag]),g=[...new Set(c.filter(a=>d.test(function(a){let b=a.replace(aj,"").replace(ak,"").replace(al,""),c=b.match(am);return c&&void 0!==c.index?b.slice(0,c.index):b}(a))&&!ah.test(a)&&!ai.test(a)&&ag.some(b=>e(a,b)>=f.Eh)))];if(0===g.length)return b;for(let a of g)b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`自伤表述候选:“${a}”暴露投标短板,需按上下文判定后改写`,suggestion:"投标文件不得主动暴露“专项设计未完成/指标存在缺口”等短板:改写为正向落实表述(如“按施工图绿色建筑专篇编制专项方案,逐项落实评分项并跟踪验收”);如属现场条件合理风险描述(地质/管线尚不明确),保留但需配套勘查与应对措施。"});return b}let ao=/(?<!分)([\u4e00-\u9fa5]{2})\1(?!项)/gu;function ap(a){let b=[...new Set(a.match(ao)||[])].slice(0,3);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文存在叠词重复表述:${b.map(a=>`“${a}”`).join("、")}`,suggestion:"删除紧邻重复字词,保持语句完整通顺(“执行执行”改为“执行”)。"}]}let aq="抹面|打底|找平|坐浆|结合层|粘结层|罩面|批嵌|腻子";function ar(a){let b=[];for(let c of a.matchAll(RegExp(`(${aq})[^。;;
|
|
44
44
|
|]{0,10}?(\\d{3,})\\s*mm`,"gu"))){let a=Number(c[2]);a>=100&&b.push(`“${c[1]}”厚度 ${a}mm`)}for(let c of a.matchAll(RegExp(`(\\d{3,})\\s*mm厚?[^。;;
|
|
45
45
|
|]{0,18}(${aq})`,"gu"))){let a=Number(c[1]);a>=100&&b.push(`“${c[2]}”厚度 ${a}mm`)}let c=[...new Set(b)].slice(0,3);return 0===c.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`装饰层工艺参数异常:${c.join("、")} 远超工艺常规厚度(抹面/打底/找平 20mm、坐浆 20~30mm)`,suggestion:"装饰层(抹面/打底/找平/坐浆/结合层)厚度按工艺常规取值:抹面打底找平 20mm、坐浆 20~30mm,与结构层厚度(墙体/垫层/回填)区分,不得串用。"}]}function as(a){let b=[],c=[...a.matchAll(/高峰期总人数(\d+)人|劳动力总人数(\d+)人|总人数(\d+)人/gu)].map(a=>Number(a[1]||a[2]||a[3])).filter(a=>a>0),d=[...a.matchAll(/高峰(?:期)?人数(\d+)人|峰值(?:需求|人数)?[为约]?(\d+)人/gu)].map(a=>Number(a[1]||a[2])).filter(a=>a>0),e=[...new Set(c)],f=[...new Set(d)];e.filter(a=>f.some(b=>b!==a)).length>0&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`劳动力峰值口径矛盾:正文「总人数」出现 ${e.join("人、")}人 与「高峰人数」出现 ${f.join("人、")}人 并存,峰值人数必须唯一`,suggestion:"全文劳动力峰值只允许一个口径:统一总人数与高峰人数为同一数值,删除矛盾口径;分阶段梯次投入人数(准备阶段/主体阶段/竣工阶段)属合法动态配置,不在统一范围内。"});let g=new Map;for(let b of(0,i.Rm)(a)){if(!b.hasTradeCol||0===b.tradeCells.length)continue;let a=new Map;for(let c of b.tradeCells){let b=a.get(c.trade)??0;c.value>b&&a.set(c.trade,c.value)}for(let[b,c]of a){let a=g.get(b)??[];a.push(c),g.set(b,a)}}let h=[...g.entries()].filter(([,a])=>a.length>=2&&new Set(a).size>=2);return h.length>0&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`同工种跨表高峰人数矛盾:${h.map(([a,b])=>`${a} ${b.join("人、")}人`).join(";")} 各表并存,同一工种高峰人数必须唯一`,suggestion:"同一工种在各表中的高峰人数必须一致:以工种配置表(第五章)为权威口径统一各表数值;分阶段投入计划表内同工种不同阶段的动态配置属合法数据,不参与统一。"}),b}function at(a){let b=function(a){let b=[];for(let c of a.matchAll(/(?:生活用水|施工用水|临时用水|用水)[^。;;\n]{0,24}(?:高峰(?:期)?人数|高峰人数)[^。;;\n]{0,8}?([\d,]+)\s*人/gu)){let a=Number(c[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&b.push(a)}return b}(a);if(0===b.length)return[];let c=[];for(let b of a.matchAll(/高峰(?:期)?人数([\d,]+)人|峰值(?:需求|人数)?[为约]?([\d,]+)人|劳动力峰值[^。;;\n]{0,8}?([\d,]+)\s*人/gu)){let d=Number((b[1]||b[2]||b[3]||"").replace(/[,,]/gu,""));if(!Number.isFinite(d)||d<=0)continue;let e=(b.index??0)+b[0].indexOf(b[1]||b[2]||b[3]||""),f=a.slice(Math.max(0,e-24),e);!/生活用水|施工用水|临时用水|用水/u.test(f)&&((0,i.rx)(a,e)||c.push(d))}let d=[...new Set(c)];if(0===d.length)return[];let e=[...new Set(b)];return 0===e.filter(a=>d.every(b=>b!==a)).length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`用水高峰人数与劳动力峰值不一致:临时用水按高峰人数 ${e.join("人、")}人 计算,而劳动力峰值为 ${d.join("人、")}人,两处引用必须为同一数值`,suggestion:"临时用水高峰人数与劳动力峰值为同一批施工人员的两个引用口径:统一改为劳动力峰值人数,删除自编的用水人数口径。"}]}let au=/不再另行(?:出现|统计|编制|设置|单列|重复)[^。;;\u000A]{0,40}|以[^。;;\u000A]{0,16}为唯一[^。;;\u000A]{0,24}不再[^。;;\u000A]{0,20}|不再另行[^。;;\u000A]{0,24}/gu;function av(a){let b=[...a.matchAll(au)].map(a=>a[0].trim().slice(0,30));return 0===b.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文存在元话语声明句 ${b.length} 处(${[...new Set(b)].slice(0,3).join("、")}):声明≠数据,正文只保留数据不保留口径声明`,suggestion:"删除「不再另行出现其他口径」「不再另行统计累计投入人次」「以 X 为唯一控制基准,不再…」类自我声明句;数据本身的唯一性由数值一致体现,不需要文字声明。"}]}let aw=/(?:[Pp]\s*=\s*[^。;;\n]{0,60}(?:Σ|cosφ|[Kk][12])|[qQ]\s*=\s*[^。;;\n]{0,40}|Σ\s*P|cos\s*φ|[Kk][12]\s*[×*]\s*Σ|[Kk][12]\s*Σ\s*P)/gu;function ax(a){let b=[...a.matchAll(aw)].map(a=>a[0].trim().slice(0,30));return 0===b.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文出现公式形态残留 ${b.length} 处(${[...new Set(b)].slice(0,3).join("、")}):正文只允许计算值不允许计算公式`,suggestion:"删除公式符号(P =、Σ、cosφ、K1、q =),只保留计算结果值:如「用电负荷约 48kW」「高峰日生活用水量约 X m\xb3」;公式推导过程一律不进入正文。"}]}let ay=/暂列金额|暂估价|报价明细|综合单价|清单合价|预留金|投标报价|异常低价|评标基准价/u,az=/(?:税率|增值税)[^。;;\n]{0,12}\d/u,aA=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,aB=/材料价格|商务报价|投标总价|合同总价|工程总价/u,aC=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","投标报价与费率标准的商务条款"],aD=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息","商务数据不得写入施工组织设计正文的约束说明"];async function aE(a){return(0,g.A)({prototypes:[...aC],negativePrototypes:[...aD],embedDocuments:a})}async function aF(a,b){let c=[],d=await aE(b),e=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();if(!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a))&&(ay.test(b)||az.test(b)||aB.test(b)))for(let a of(az.test(b)&&c.push("税率/增值税"),b.split(/(?<=[。;;])\s*/u))){let b=a.match(ay)||[],d=aA.test(a),f=aB.test(a);!(b.length>0)||d||f?(b.length>0&&(d||f)||f&&0===b.length)&&e.push(a):c.push(...b)}}if(e.length>0){let a=await d(e);e.forEach((b,d)=>{if(!a[d])return;let e=b.match(ay)||[],f=b.match(aB)||[];c.push(...e.length>0?e:f)})}let f=[...new Set(c)].slice(0,4);return 0===f.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文出现商务条款数据:${f.join("、")}`,suggestion:"商务数据(暂列金额/暂估价/综合单价/税率等)不得写入施组正文:删除该句,商务口径仅保留在项目信息表中;技术内容如需保留,改写为不含商务参数的正式技术表述。"}]}let aG=[{key:"excavation",label:"基坑支护及土方外运",re:/基坑支护/u},{key:"zero",label:"地下结构出正负零",re:/正负零|地下室结构/u},{key:"topping",label:"主体结构封顶",re:/主体(?:结构)?封顶/u},{key:"decoration",label:"装饰装修及幕墙",re:/装饰装修/u},{key:"mep",label:"机电安装及智能化调试",re:/机电安装/u},{key:"completion",label:"室外工程及竣工验收",re:/竣工验收/u}];function aH(a){let b=[],c=(a,c,d)=>{let e=(a=>{let b="封顶"===a?"主体结构封顶":a;return aG.find(a=>a.re.test(b))?.key})(a);void 0!==e&&Number.isFinite(c)&&c>=1&&c<=3e3&&b.push({key:e,day:c,raw:d})};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n,、]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu))c(b[2],Number(b[1]),b[0].slice(0,40));for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of a.matchAll(/(主体(?:结构)?封顶)(?!后)(?:(?!(?:第\d{2,3}[日天]|,|、|完成|\||[。;;\n])).){0,20}?第(\d{2,3})日/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of aG){let d=RegExp(`^\\s*\\|\\s*[^|]*${b.re.source}[^|]*\\s*\\|\\s*开工(?:令下发)?后第(\\d{2,3})日\\s*\\|`,"gum");for(let b of a.matchAll(d))c(b[0],Number(b[1]),b[0].slice(0,40))}let d=new Set;return b.filter(a=>{let b=`${a.key}:${a.raw}`;return!d.has(b)&&(d.add(b),!0)})}function aI(a){let b=[],c=new Map;for(let b of aH(a)){let a=c.get(b.key)||[];a.push(b),c.set(b.key,a)}for(let a of aG){let d=c.get(a.key);if(!d||d.length<2)continue;let e=[...new Set(d.map(a=>a.day))];if(e.length<2)continue;let f=[...new Set(d.map(a=>a.raw))].slice(0,4).join("、");b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`节点工期口径矛盾:“${a.label}”节点出现 ${e.map(a=>`${a}日`).join(" 与 ")} 两套口径:${f}`,suggestion:`关键节点完成时间必须全文唯一:以总进度计划表为准统一“${a.label}”节点日期,删除正文/其他表中矛盾的“第N日”表述。`})}return b}let aJ=[{key:"xps",label:"挤塑聚苯板(XPS)厚度",unit:"mm",kind:"number",patterns:[/(?:挤塑聚苯|XPS)(?:(?!(?:宽度|拼缝|不大于|不超过|小于|≤|采用|使用|选用|铺设|粘贴|半径|倒角|圆弧|弧度)).){0,40}?(\d+(?:\.\d+)?)\s*mm/gu,/(\d+(?:\.\d+)?)\s*mm[^。;;\n|]{0,10}?(?:挤塑聚苯|XPS)/gu]},{key:"cushion",label:"垫层混凝土强度等级",unit:"C标号",kind:"code",patterns:[/(?<!混凝土)垫层(?![一-龥]{1,4}[、,,])[^。;;\n|]{0,20}?(C\d{2})/gu]},{key:"transformer",label:"箱式变压器容量",unit:"kVA",kind:"number",patterns:[/(\d+)\s*kVA[^。;;\n|]{0,12}?变压器/gu,/变压器[^。;;\n|]{0,12}?(\d+)\s*kVA/gu]},{key:"formwork",label:"模板周转次数",unit:"次",kind:"number",patterns:[/模板周转(?:次数|使用)?[^。;;\n|]{0,15}?(\d+)\s*次/gu]},{key:"block",label:"蒸压加气混凝土砌块强度等级",unit:"A标号",kind:"code",patterns:[/(?:蒸压加气混凝土|加气混凝土)?砌块[^。;;\n|]{0,24}?(?<![A-Za-z])(A\d+(?:\.\d+)?)/gu]},{key:"extinguisher",label:"干粉灭火器数量",unit:"具",kind:"number",patterns:[/灭火器[^。;;\n]{0,24}?(\d+)\s*具/gu]},{key:"pump",label:"潜水泵(提升泵)数量",unit:"台",kind:"number",patterns:[/(?:潜水泵|提升泵)[^。;;\n]{0,24}?(\d+)\s*台/gu]},{key:"firstaid",label:"急救箱数量",unit:"套/个",kind:"number",patterns:[/急救箱[^。;;\n|]{0,24}?(\d+)\s*(?:套|个)/gu]},{key:"scheduleDays",label:"计划总工期",unit:"日历天",kind:"number",patterns:[/^\s*\|\s*计划工期\s*\|\s*(\d{1,4})\s*个?\s*日历天\s*\|/gum,/(?:计划工期|合同工期|工期总日历天数|工期控制|工期目标|总工期)[^。;;\n|]{0,12}?(\d{1,4})\s*个?\s*日历天/gu,/(\d{1,4})\s*个?\s*日历天[^。;;\n|]{0,8}?(?:总工期|倒排|分解|为唯一|完成)/gu]},{key:"prefabRatio",label:"装配率",unit:"%",kind:"number",patterns:[/装配率[^。;;\n|]{0,14}?(\d+(?:\.\d+)?)\s*%/gu,/装配率[^。;;\n|]{0,44}?计算为(\d+(?:\.\d+)?)\s*%/gu,/(\d+(?:\.\d+)?)\s*%(?:(?![,,。;;\n|]).){0,10}?装配率/gu]},{key:"projectCode",label:"项目编号",unit:"",kind:"code",patterns:[/(?:招标项目编号|项目编号)[^。;;\n|]{0,8}?(20\d{2}[A-Z]{1,8}\d{2,10})/gu]},{key:"towerCrane",label:"塔式起重机(塔吊)数量",unit:"台",kind:"number",patterns:[/(?:塔式起重机|塔吊)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:塔式起重机|塔吊)/gu]},{key:"hoist",label:"施工升降机(施工电梯)数量",unit:"台",kind:"number",patterns:[/(?:施工升降机|施工电梯)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:施工升降机|施工电梯)/gu]},{key:"truckCrane",label:"汽车起重机(汽车吊)数量",unit:"台",kind:"number",patterns:[/(?:汽车起重机|汽车吊)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:汽车起重机|汽车吊)/gu]},{key:"rebarCutter",label:"钢筋切断机数量",unit:"台",kind:"number",patterns:[/钢筋切断机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"rebarBender",label:"钢筋弯曲机数量",unit:"台",kind:"number",patterns:[/钢筋弯曲机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"slackDays",label:"机动工期(工序衔接与验收缓冲)",unit:"天",kind:"number",patterns:[/(?:机动工期|缓冲)[^。;;\n|]{0,16}?(\d{1,3})\s*天/gu,/预留[^。;;\n|]{0,8}?(\d{1,3})\s*天[^。;;\n|]{0,10}?(?:机动|缓冲)/gu]},{key:"villageCount",label:"自然村数量",unit:"个自然村",kind:"number",patterns:[/(\d+)\s*个[^,。;、\s\n]{0,8}?自然村(?!分组|施工组)/gu]},{key:"circularSaw",label:"圆盘锯数量",unit:"台",kind:"number",patterns:[/圆盘锯[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"excavator",label:"挖掘机数量",unit:"台",kind:"number",patterns:[/(?:履带式)?挖掘机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?(?:履带式)?挖掘机/gu]},{key:"dumpTruck",label:"自卸汽车数量",unit:"台/辆",kind:"number",patterns:[/自卸汽车[^。;;\n、,]{0,40}?(\d+)\s*(?:台|辆)/gu,/(\d+)\s*(?:台|辆)[^、,。;\n|]{0,12}?自卸汽车/gu]},{key:"roller",label:"压路机数量",unit:"台",kind:"number",patterns:[/(?:振动)?压路机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?(?:振动)?压路机/gu]},{key:"rammer",label:"蛙式打夯机数量",unit:"台",kind:"number",patterns:[/蛙式打夯机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?蛙式打夯机/gu]},{key:"mixerTruck",label:"混凝土搅拌运输车数量",unit:"台",kind:"number",patterns:[/混凝土搅拌运输车[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?混凝土搅拌运输车/gu]},{key:"concreteMixer",label:"混凝土搅拌机数量",unit:"台",kind:"number",patterns:[/混凝土搅拌机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?混凝土搅拌机/gu]},{key:"sprinkler",label:"洒水车数量",unit:"台/辆",kind:"number",patterns:[/洒水车[^。;;\n、,]{0,40}?(\d+)\s*(?:台|辆)/gu,/(\d+)\s*(?:台|辆)[^、,。;\n|]{0,12}?洒水车/gu]},{key:"aerialLift",label:"高空作业车数量",unit:"台",kind:"number",patterns:[/高空作业车[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?高空作业车/gu]},{key:"pondBackfill",label:"沟塘回填方量",unit:"m\xb3",kind:"number",patterns:[/(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)[^。;;\n|]{0,30}?回填方(?:总量)?[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³]/gu,/(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)[^;;\n|]{0,30}?回填方总量[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³]/gu,/回填方(?:总量)?[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³][^。;;\n|]{0,30}?(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)/gu]},{key:"trenchClearing",label:"沟槽槽底人工清底预留厚度",unit:"mm",kind:"number",patterns:[/槽底预留(\d+)mm人工清底/gu]},{key:"houseExcavation",label:"距房屋人工开挖保护距离",unit:"m",kind:"number",patterns:[/距房屋(\d+(?:\.\d+)?)m(?:内|范围内)[^。;;\n|]{0,10}?人工开挖/gu]}],aK={pump:/潜水泵|提升泵/u,towerCrane:/塔式起重机|塔吊/u,hoist:/施工升降机|施工电梯/u,truckCrane:/汽车起重机|汽车吊/u,rebarCutter:/钢筋切断机/u,rebarBender:/钢筋弯曲机/u,circularSaw:/圆盘锯/u,excavator:/挖掘机/u,dumpTruck:/自卸汽车|自卸车/u,roller:/压路机/u,rammer:/蛙式打夯机|打夯机/u,mixerTruck:/混凝土搅拌运输车|搅拌车/u,concreteMixer:/混凝土搅拌机/u,sprinkler:/洒水车/u,aerialLift:/高空作业车/u,extinguisher:/灭火器/u,firstaid:/急救箱/u};function aL(a,b){let c=(0,i.Dq)(b);if(void 0===c)return[];let d=new Set;for(let b of a.matchAll(/养护[^。;;\n|]{0,16}?([一二两三四五六七八九十]+|\d{1,2})\s*年/gu)){let c=a.lastIndexOf("\n",b.index)+1,e=a.indexOf("\n",b.index);if(-1===e&&(e=a.length),aO.test(a.slice(c,e)))continue;let f=(0,i.a0)(b[1]??"");void 0!==f&&f>0&&d.add(f)}if(0===d.size)return[];let e=[...d].filter(a=>a!==c);return 0===e.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`绿化养护期清单红线:正文出现养护期 ${e.map(a=>`${a}年`).join("、")},与工程量清单锁定口径「养护 ${c} 年」矛盾`,suggestion:`绿化养护期必须与工程量清单一致(清单锁定「养护 ${c} 年」):将正文所有养护期表述统一为 ${c} 年并删除矛盾口径;养护期属清单实质性条款,不得以常规值替代。`}]}function aM(a,b){let c=(0,i.Mb)(b);if(void 0===c)return[];let d=[];for(let b of a.matchAll(/路灯[^。;;\n|]{0,28}?(\d+)\s*(?:套|盏|杆)/gu)){if(/批/u.test(b[0]))continue;let c=a.lastIndexOf("\n",b.index)+1,e=a.indexOf("\n",b.index);if(-1===e&&(e=a.length),aO.test(a.slice(c,e)))continue;let f=Number(b[1]);Number.isFinite(f)&&f>0&&d.push(f)}if(0===d.length)return[];let e=d.length>=2?d.reduce((a,b)=>a+b,0):d[0]??0;return e===c?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`路灯数量口径矛盾:正文路灯配置合计约 ${e} 套,与工程量清单锁定口径 ${c} 套不一致(相差 ${Math.round(Math.abs(e-c)/c*100)}%)`,suggestion:`路灯数量必须以工程量清单为准(清单锁定 ${c} 套):按清单核定各型号路灯数量并统一正文全部表述,删除与清单矛盾的套数口径。`}]}let aN=/\d+(?:\.\d+)?\s*(?:mm|kVA|次|具|台|套|个)\s*[//]\s*\d+/u,aO=/不再出现|不得出现|严禁出现|避免出现|不采用|未采用|予以删除|已删除|取消|纠正为|更正为/u,aP=/再浇筑|再浇|后浇筑|后浇|然后浇筑|然后再浇|上层|上部|面层浇筑|其上浇筑|浇筑完成后再/u,aQ=/分层厚度|分层浇筑|分层振捣|焊缝高度|焊缝厚度|焊脚尺寸|锚固深度|保护层厚度|搭接长度|锚固长度|预留|踏步高度|踏步宽度|踏步高|踏步宽|台阶高度|台阶宽度|内厚|外厚|抹面|抹灰|粉刷|垫高|架空|离地|支垫/u,aR=/分别为|分别对应|分别用于|分别按|依次为|依次/u,aS="女儿墙|外墙|内墙|隔墙|地梁|圈梁|构造柱|过梁|垫层|承台|筏板|底板|基础|主体|梁|柱|墙|楼板|屋面|地面|楼面|顶板|楼梯|阳台|雨篷|台阶|散水|坡道|找坡|找平|保护层|防水层|保温层|隔汽层|地坪|办公区|生活区|库房|加工区|堆放区|驻地|周转场|停放区|仓库|材料库|路基|沟槽|基槽|基坑|路槽",aT=/每[台辆架套部][一-龥A-Za-z0-9]{1,8}/gu,aU=/项目部|总协调|工人生活|施工办公|办公|生活|临时|总部|标段|片区/u;function aV(a,b,c){let d=b.slice(Math.max(0,c-8),c),e=d.match(aU);if(!e||void 0===e.index)return a;let f=d.slice((e.index??0)+e[0].length);return/^[的施工区域现场]{0,3}$/u.test(f)?`${e[0]}${a}`:a}function aW(a,b,c,d){let e=a.indexOf("\n",b),f=a.slice(d,-1===e?a.length:e);if(/^\s*\|/u.test(f)&&/\|\s*$/u.test(f.trim())){let a=f.replace(/[\u4e00-\u9fa5]{2,6}阶段/gu,""),b=[...a.matchAll(RegExp(aS,"gu"))],c=b[b.length-1];return c?aV(c[0],a,c.index??0):""}let g=Math.max(d,b-16),h=a.slice(g,b),i=Math.max(h.lastIndexOf(","),h.lastIndexOf("、"),h.lastIndexOf(","),h.lastIndexOf(";"),h.lastIndexOf(";"),h.lastIndexOf("。")),j=a.slice(i>=0?g+i+1:g,b+c.length).replace(/[\u4e00-\u9fa5]{2,6}阶段/gu,""),k=[...j.matchAll(aT)];if(k.length>0)return k[k.length-1]?.[0]??"";let l=[...j.matchAll(RegExp(aS,"gu"))],m=l[l.length-1];return m?aV(m[0],j,m.index??0):""}function aX(a,b,c){let d=Math.max(a.lastIndexOf(",",b),a.lastIndexOf(",",b),a.lastIndexOf("。",b),a.lastIndexOf(";",b),a.lastIndexOf(";",b),a.lastIndexOf("\n",b),a.lastIndexOf("|",b))+1,e=a.slice(d,b+c.length);return/每[^,,。;;\n|]{0,16}(?:对应|配备|配置|配套|编组|配)[^,,。;;\n|]{0,10}\d+\s*[台辆][^,,。;;\n|]{0,6}$/u.test(e)}let aY=/共用[^。;;\n]{0,10}|不(?:再)?单独(?:增配|新增|购置|添置|配置)|不另行(?:增配|新增|购置)|轮换使用|周转使用|交叉使用/u;function aZ(a){let b=[];for(let c of aJ){let d=new Map,e=new Map,f="pump"===c.key&&/潜水泵/u.test(a)&&/提升泵/u.test(a);for(let b of c.patterns)for(let g of a.matchAll(b)){let b=g[0].slice(0,40);if(void 0!==g[1]){let a=aK[c.key],d=a?a.exec(b):null,e=b.indexOf(g[1]);if(d&&e>=0&&d.index>e){let a=b.slice(e+String(g[1]).length,d.index);if(/^\s*(?:台|辆|套|个|座|m|mm|天)?\s*[与和及、,,]{1,2}\s*$/u.test(a))continue}}if(/(?:循环使用|轮换使用|交替使用|分组使用)/u.test(a.slice(g.index||0,(g.index||0)+b.length+30))&&/(?:作业面|区段|分段|片区|分区|工区)/u.test(a.slice(Math.max(0,(g.index||0)-20),g.index||0)))continue;if("trenchClearing"===c.key){let c=Math.max(a.lastIndexOf("。",g.index),a.lastIndexOf(";",g.index),a.lastIndexOf("\n",g.index))+1;if(/基槽|围栏|菜园/u.test(a.slice(c,(g.index||0)+b.length)))continue}if(aN.test(b))continue;{let c=void 0!==g[1]?b.indexOf(String(g[1])):-1;if(c>=0){let b=(g.index||0)+c;if(/半径|倒角|圆弧|弧度/u.test(a.slice(Math.max(0,b-6),b)))continue}}if(aP.test(b))continue;if("scheduleDays"===c.key){let c=b.indexOf(String(g[1]));if(c>=0&&/(?:阶段|第\d+日|至第|共|集中)/u.test(a.slice(Math.max(0,(g.index||0)+c-16),(g.index||0)+c)))continue;let d=Math.max(a.lastIndexOf("。",g.index),a.lastIndexOf(";",g.index),a.lastIndexOf("\n",g.index))+1,e=a.indexOf("。",(g.index||0)+b.length),f=a.slice(d,-1===e?a.length:e);if(/合理期限|书面技术要求|审核认可|响应闭环|答复期限|反馈期限|技术澄清/u.test(f))continue}if(/按不少于|不少于/u.test(b)||/[中内](?:调配|取用|挪用|借用|调用|划拨)|(?:从|由)[^。;;\n]{0,20}?[中内](?:调配|取用|挪用|借用|调用|划拨)/u.test(b)||/增配|增补|追加|补足|另配|增设/u.test(b))continue;if("villageCount"===c.key){let c=a.slice((g.index||0)+b.length,(g.index||0)+b.length+12);if(/分组|施工组|网格|责任区|单元|片区|班组|包保|作业面|施工点|施工段/u.test(c))continue}if(aX(a,g.index||0,b))continue;let h=a.lastIndexOf("\n",g.index)+1,i=a.indexOf("\n",g.index);if(-1===i&&(i=a.length),aO.test(a.slice(h,i))||/(?:变更|澄清|修改|调整|更正|修正)(?:为|至|如下|后)/u.test(a.slice(Math.max(0,(g.index||0)-20),g.index||0))||function(a,b,c){let d=a.indexOf("\n",b),e=-1===d?a.length:d,f=a.slice(c,e);if(!/^\s*\|/u.test(f)||!/\|\s*$/u.test(f.trim()))return!1;let g=a=>{for(let b of a)if(!/^\s*\|/u.test(b)&&b.trim()&&!/^\s*\*{0,2}表\s*[\d一二三四五六七八九十]+\s*[-–—][\d.]+/u.test(b)){if(/^#{1,6}\s/u.test(b))return!1;return aY.test(b)}return!1},h=Math.max(0,c-1200),i=a.slice(h,c).split("\n");return i.pop(),!!g(i.reverse())||g(a.slice(e+1,e+1+1200).split("\n"))}(a,g.index||0,h))continue;let j=aW(a,g.index||0,b,h);if(j&&"code"===c.kind&&function(a,b,c,d){let e=c.lastIndexOf(d);if(e<0)return!1;let f=a5(a,b+e);return!!f&&(!!a6.test(f)||!a4.test(f)&&!a3.test(f))}(a,g.index||0,b,j))continue;let k=f&&j?`${b.match(/潜水泵|提升泵/u)?.[0]??""}|${j}`:j,l=d.get(k)||new Set;l.add(g[1]),d.set(k,l);let m=e.get(k)||[];m.push(b),e.set(k,m)}for(let a of[...d.keys()].filter(a=>""===a||a.endsWith("|"))){let b=d.get(a);if(!b||0===b.size)continue;let c=[...d.keys()].filter(b=>b!==a&&b.startsWith(a)&&!b.slice(a.length).includes("|"));if(1!==c.length)continue;let f=c[0]||"",g=d.get(f);if(!g)continue;for(let a of b)g.add(a);let h=e.get(f)||[];h.push(...e.get(a)||[]),e.set(f,h),d.delete(a),e.delete(a)}for(let[a,f]of d){if(f.size<2)continue;let d=a.includes("|")?a.slice(a.indexOf("|")+1):a,g=e.get(a)||[];if("code"===c.kind)b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料参数口径矛盾:“${c.label}”${d?`在部位「${d}」`:"在未标注部位语境下"}出现 ${[...f].map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(g)].slice(0,3).join("、")}`,suggestion:`同一材料同一部位只允许一个口径:以设计图纸/工程量清单为准统一“${c.label}”${d?`在部位「${d}」的取值`:""},删除矛盾表述;不同部位允许不同规格,不得全文归一为一种。`});else{let a=[...f].map(Number).filter(Number.isFinite);if(a.length<2)continue;b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料/设备数量口径矛盾:“${c.label}”${d?`在部位「${d}」`:"在未标注部位语境下"}出现 ${a.map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(g)].slice(0,3).join("、")}`,suggestion:`同一设备/材料同一部位只允许一个口径:以应急物资清单/施工部署为准统一“${c.label}”${d?`在部位「${d}」的取值`:""},删除矛盾表述;总量与分区配置属不同口径,不得互相归一。`})}}}return b}function a$(a){return/^C\d{2,3}$/.test(a)?/(?<![A-Za-z0-9])C\d{2,3}(?!\d)/u:/^M\d/.test(a)?/M\d+(?:\.\d+)?/u:/^P\d{1,2}$/.test(a)?/(?<![A-Za-z])P\d{1,2}/u:/^A\d+(?:\.\d+)?$/.test(a)?/A\d+(?:\.\d+)?/u:/^B\d+(?:\.\d+)?$/.test(a)?/B\d+(?:\.\d+)?/u:/^HRB/.test(a)||/^HPB/.test(a)?/HRB\d{3,4}|HPB\d{3}/u:/mm$/.test(a)?/\d+(?:\.\d+)?\s*mm/u:null}function a_(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}let a0=/^(?:采用|选用|使用|本工程|其中|以及|详见|按|为|的|该|各|所有|其他|喷涂|喷刷|涂刷|施工|设计|用|为)$/u,a1=/(?:采用|选用|使用|应用|为|用)([一-龥]{2,6})$/u;function a2(a){let b=(a1.exec(a)?.[1]||a).replace(/^(?:本工程|其中|以及|详见|按|为|的|该|各|所有|其他|喷涂|喷刷|涂刷|施工|设计|中|的)+/u,"");return b.length<2||b.length>6||a0.test(b)?"":b}let a3=/(?:型|系列|级别|等级|型号|牌号|级|类|种)$/u,a4=RegExp(`(?:${aS}|${k.fc})$`,"u");function a5(a,b){return/([一-龥]{1,8})$/u.exec(a.slice(Math.max(0,b-8),b))?.[1]||""}let a6=/(?:办公区|生活区|加工区|堆放区|停放区|周转场|驻地|仓库|材料库|库房|工区|作业区|场区)$/u,a7=/^\d+(?:\.\d+)?\s*mm$/u;function a8(a,b,c=8){let d=[],e=0,f=0;if(!b)return d;let g=[...new Set(Object.values(b).flat().map(a=>a.location).filter(Boolean))];for(let h of Object.values(b)){if(h.length<2)continue;let b=new Set;for(let i of h){let{location:j,spec:m}=i;if(!j||!m||j.length<2)continue;let n=a$(m);if(!n)continue;let o=`${j}|${n.source}`;if(b.has(o))continue;b.add(o);let p=h.find(a=>a.location===j&&a$(a.spec))?.location??j,q=new Set(h.filter(a=>a.location===j).map(a=>{let b=a$(a.spec);if(b&&b.source===n.source)return a.spec;let c=RegExp(`^(?:${n.source})`,"u").exec(a.spec);return c?c[0]:null}).filter(a=>null!==a).filter(a=>(0,l.Zg)(a))),r=RegExp(`${a_(j)}[^。;;
|
|
46
|
-
|]{0,40}?(${n.source})`,"gu");for(let b of a.matchAll(r)){let i=b[1]||"";if(aP.test(b[0])||aQ.test(b[0])||aR.test(b[0]))continue;let m=a.slice(Math.max(0,(b.index||0)-40),b.index||0);if(aR.test(m))continue;let o=a.slice((b.index||0)+b[0].length,(b.index||0)+b[0].length+10);if(/范围内|范围/u.test(o)||/(?:工作宽度|作业宽度|操作空间|工作面)/u.test(o)||/^、\s*\d/u.test(o)||/^\s*厚(?:\s*[\d::]|覆膜|木|胶合)/u.test(o)||RegExp(`^(?:或|[、,,/])\\s*(?:${n.source})`,"u").test(o))continue;let r=a.slice(Math.max(0,b.index||0),(b.index||0)+b[0].length);if(/(?:标高|高程|平整度|轴线|垂直度|高差)[^。;;\n|]{0,10}(?:偏差|误差|不超过|不得大于|不大于)/u.test(r.slice(-28))||/(?:偏差|误差|公差|缝隙|接缝|拼缝|高差|顺直度|垂直度|平整度|轴线|标高|高程)[^。;;\n|]{0,16}(?:不超过|不得大于|不大于|控制在|±|≤)/u.test(r.slice(-36)))continue;let s=b[0].slice(0,b[0].indexOf(i));if(/(?:间距|中心距|净距|排距|间隔)[^。;;\n|,,、]{0,8}$/u.test(s))continue;let t=b[0].indexOf(i);if(t>j.length&&/(?:涵头|面层|基层|垫层|管基|基础|梁|板|柱|墙|地坪|路面)/u.test(b[0].slice(j.length,t)))continue;let u=b.index||0,v=g.find(b=>b.length>j.length&&b.endsWith(j)&&a.slice(u+j.length-b.length,u+j.length)===b);if(v){let a=new Set(h.filter(a=>a.location===v&&a$(a.spec)?.source===n.source).map(a=>a.spec));if(a.has(i)||a.size>0)continue}if(q.has(i)||!(0,l.Zg)(i))continue;let w=1===q.size?[...q][0]:void 0,x=void 0===w?function(a,b,c,d,e){if(d.size<2)return;let f=a2(/([一-龥]{1,12})$/u.exec(a.slice(Math.max(0,c-12),c))?.[1]||"");if(!f)return;let g=RegExp(`([一-龥]{1,12})${a_(b)}[^。;;\\n|]{0,24}?(${e.source})`,"gu"),h=new Set;for(let b of a.matchAll(g))a2(b[1]||"")===f&&d.has(b[2]||"")&&h.add(b[2]||"");return 1===h.size?[...h][0]:void 0}(a,j,b.index||0,q,n):void 0,y=w??x,z=u+t;if("other-class"===function(a,b,c,d){let e=a5(a,b);return e?d.some(a=>a.length>c.length&&a===`${e}${c}`)?"same-class":a6.test(e)?"other-class":a4.test(e)||a3.test(e)?"same-class":"other-class":"bare"}(a,u,j,g))continue;let A=a.slice(Math.max(0,z-24),z+i.length+16),B=/([^。;;,、|\n]*)$/u.exec(a.slice(0,z))?.[1]||"",C=(0,l.W_)(`${B}${i}`,i),D=!!(C&&C.includes(j)),E=y?function(a,b){if(!a7.test(a.trim())||!a7.test(b.trim()))return;let c=(0,k.Bk)(a),d=(0,k.Bk)(b);if(void 0===c||void 0===d)return;let e=Math.max(c,d)/Math.min(c,d);return e>k.do?e:void 0}(i,y):void 0,F=!!y&&(!!x||D)&&void 0===E,G=(0,k.Rd)({authorityOwner:y?p:void 0,bodyLocation:j,bodyWindow:A,found:i,authority:y||""}),H=F&&G.allowed?y:void 0;if(!F&&f>=c)continue;F?e+=1:f+=1;let I=[...q].join("/");if(d.push({issue:F?{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格错位:“${j}”使用的规格 ${i} 与工程量清单权威(${I})不一致`,suggestion:`按工程量清单将“${j}”的规格统一为 ${I};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。`}:{level:"warning",severity:"warning",category:"fact_consistency",owner:"system",repairability:"not_repair_needed",message:`规格错位:“${j}”使用的规格 ${i} 与工程量清单权威(${I})不一致`,suggestion:`按工程量清单将“${j}”的规格统一为 ${I};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。(本条已降级为告警:${void 0===E?`正文该处未能绑定到清单条目的具体对象${void 0===w?"或权威本身逐项多值无唯一口径":""}`:`正文该处尺寸与清单权威跨量级(${i} vs ${y},${E.toFixed(1)} 倍),不是同一属性维度的量(如板材厚度 vs 构件高度/长度)`},不作机器改写,交人工复核)`},location:j,replacement:H?{start:z,end:z+i.length,replacement:H,detail:`规格错位“${j}” ${i}→${H}(以工程量清单锁定口径为准)`}:void 0}),e>=c)return d}}}return d}function a9(a,b){return a8(a,b).map(a=>a.issue)}let ba=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function bb(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>ba.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&ba.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let bc=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,bd=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function be(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=bc.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&bd.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b}let bf=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u,bg=/^(?:焊接|螺栓连接|铆接|法兰连接|承插连接|卡箍连接|粘接|卡压连接|卡扣连接|螺纹连接|高强螺栓连接)(?:固定|安装|连接|紧固)?$/u,bh=/(?:焊接|螺栓连接|铆接|法兰连接|承插连接|卡箍连接|粘接|卡压连接|卡扣连接|螺纹连接|高强螺栓连接)$/u;function bi(a){let b=a.replace(/\s+/gu,""),c=new Set,d=[];{let b=a.split(/\n/u);for(let a=0;a+1<b.length;a+=1){let c=b[a]??"";if(/^\s*\|/u.test(c)&&/^\s*\|[\s:|-]+\|\s*$/u.test((b[a+1]??"").trim()))for(let a of c.split("|")){let b=a.replace(/\s+/gu,"");b.length>=2&&d.push(b)}}}let e=a=>d.some(b=>b.includes(a));for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){let d=bf.test(a[1])||bf.test(a[2]),f=(0,j.m4)(a[1],a[2]);if(!d&&!f||e(a[0]))continue;let g=Math.max(0,(a.index||0)-12),h=Math.min(b.length,(a.index||0)+a[0].length+12),i=b.slice(g,h);!/管线|管道|电缆|给水|排水/u.test(i)&&(!/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(i)&&(!f||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(i))||c.add(`“${a[1]}/${a[2]}”`))}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);bf.test(f)&&c.add(a[0].slice(0,30))}for(let a of b.matchAll(/([一-龥]{2,8})或([一-龥]{2,8})/gu)){let d=bf.test(a[1])||bf.test(a[2]),f=(0,j.m4)(a[1],a[2]);if(!d&&!f||/(?:可能)?(?:达到|超过|大于|小于|高于|低于|不少于|不超过)或(?:达到|超过|大于|小于|高于|低于|不少于|不超过)/u.test(a[0]))continue;let g=b.slice(0,(a.index||0)+a[1].length).split(/[。;,,、]/u).pop()||"";if(/造成|导致|引发|致使|诱发|酿成/u.test(g)||e(a[1])||e(a[2]))continue;let h=Math.max(0,(a.index||0)-12),i=b.slice(h,(a.index||0)+a[1].length);if(/管线|管道|电缆|给水|排水/u.test(i)||!/按|采用|选用|拟用|拟采用|方案|为/u.test(i)&&(!f||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(i)))continue;let k=b.slice(Math.max(0,(a.index||0)-6),a.index||0);if(/临时/u.test(k+a[0])&&/支护|围护|放坡|坡率|开挖/u.test(a[0])||/围挡|警示|防护栏|爬梯|栈桥|便道/u.test(a[0]))continue;let l=b.slice(Math.max(0,(a.index||0)-30),(a.index||0)+a[0].length+12);if(/临时|临建|可拆卸|可周转|撤场/u.test(l)&&/集装箱|活动房|板房|棚房|岗亭|彩钢/u.test(a[1]+a[2])||/顺接|衔接|接顺|接入|连通|找坡|找平/u.test(a[2]))continue;let m=b.slice((a.index||0)+a[0].length,(a.index||0)+a[0].length+6);if(/^(?:顺接|衔接|接顺|接入|连通|找坡|找平)/u.test(m)||/(?:前|后)$/u.test(a[0])||/^(?:之前|之后|前|后)/u.test(m))continue;{let c=Math.max(0,(a.index||0)-8),d=Math.min(b.length,(a.index||0)+a[0].length+8);if(b.slice(c,d).includes("→"))continue}let n=a[1]+a[2];if(/(?:强度不足|固定不牢|松动|变形|开裂|渗漏|破损|脱落|锈蚀|超差|不合格|缺陷|损坏|缺失|偏差|偏移|沉降|位移|错台|起皮|空鼓)/u.test(n)){let c=b.slice((a.index||0)+a[0].length,(a.index||0)+a[0].length+40);if(/返工|返修|整改|修复|加固|更换|补强|补做|处理|消除|纠正|复验|复查|销项|验收/u.test(c))continue}if(bh.test(a[1])&&bg.test(a[2]))continue;let o=a[1].replace(/^.*?(地下连续墙|钢板桩|灌注桩|支护桩|土钉墙|基础|支护|围护|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|形式|体系)/u,"$1");c.add(`${o}或${a[2]}`)}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function bj(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];let c=(()=>{let b=a.split(/\r?\n/u),c=[],d=!1;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b){b[1].length<=3&&(d=/基坑|开挖|支护|土方/u.test(b[2])),d&&c.push(a);continue}d&&c.push(a)}return c.join("\n")})();for(let a of(c?c.replace(/\s+/gu,""):b).matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|低于|高于|按|倍|依据|详见|参考|示意|每|以上|以下|偏差|±0|0\.000)/u.test(b)&&!/\d+(?:\.\d+)?\s*(?:h|小时|天|日|min|周|月|昼夜)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}function bk(a,b){let c=(0,i.z4)(b);if(void 0===c||c<3)return[];let d=[],e=a_(String(c)),f=RegExp(`(?<![\\d.])${e}(?![\\d])`,"u"),g=a.replace(/\s+/gu,""),h=a=>{for(let b of g.matchAll(RegExp(a,"gu"))){let a=b.index??0,c=g.slice(Math.max(0,a-120),a+b[0].length+120);if(f.test(c))return!0}return!1};return c>=3&&!h("危大工程")&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程判定缺失:资料基坑开挖深度 ${c}m(≥3m),正文未在判定结论邻近处给出本工程实际深度值(仅出现判定规则套话不算落地)`,suggestion:`依据住建部令第37号,开挖深度≥3m 属危大工程:在基坑支护/危大工程清单小节写明本工程实际深度 ${c}m 与危大工程判定结论,不得只写判定规则不落地本项目。`}),c>=5&&!h("超过一定规模")&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`超危大工程判定缺失:资料基坑开挖深度 ${c}m(≥5m),正文未在「超过一定规模」判定邻近处给出本工程实际深度值(须同时写明专家论证要求)`,suggestion:`开挖深度≥5m 属超过一定规模的危大工程:写明本工程深度 ${c}m 对应分级结论,专项施工方案必须经专家论证,不得只写判定规则不落地分级。`}),d}function bl(a,b){let c=[b.canonical?.byKey.foundation_support_form?.value,...(b.drawings||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.project||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.preciseFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`)].filter(Boolean).filter(a=>/基坑支护形式|基坑支护方式|支护形式|支护方式|土钉|放坡|喷锚|护坡/u.test(a)&&!/监测|监测频次|闭环|基坑开挖深度/u.test(a));if(0===c.length)return[];let d=[];for(let a of c)for(let b of["土钉墙","放坡","喷锚","挂网喷浆","排桩","灌注桩","地下连续墙","内支撑","锚杆","锚索"])a.includes(b)&&d.push(b);let f=[],g=/不采用|未采用|不设置|未设置|不使用|不宜采用|不得采用|不再出现|不得出现|严禁出现|避免出现|已删除|取消/u,h=["支护桩","冠梁","钻孔灌注桩","灌注桩","地下连续墙","排桩","咬合桩","内支撑"].filter(b=>(b=>{let c=RegExp(b,"gu");for(let b of a.matchAll(c)){let c=a.lastIndexOf("\n",b.index)+1,d=a.indexOf("\n",b.index);-1===d&&(d=a.length);let e=a.slice(c,d).slice(Math.max(0,b.index-c-12),b.index-c);if(!g.test(e))return!0}return!1})(b)&&!d.includes(b));return h.length>0&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式与资料矛盾:正文出现资料中不存在的支护体系词 ${h.join("、")}`,suggestion:`资料基坑支护形式为「${d.join("、")||c[0]?.slice(0,60)}」:删除编造的支护桩/冠梁/灌注桩类表述与对应参数(垂直度偏差/冠梁顶面标高等),按资料支护形式改写。`}),0===d.filter(b=>RegExp(b,"u").test(a)).length&&/基坑|支护/u.test(a)&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式未落地:资料基坑支护形式「${d.join("、")||c[0]?.slice(0,60)}」未在正文中出现`,suggestion:`在基坑支护小节写明本工程实际支护形式(${d.join("、")})及对应工艺参数(土钉长度/间距/坡度等),不得以泛化表述回避。`}),f}let bm=["塔式起重机","施工升降机","施工电梯","汽车起重机","汽车吊","混凝土泵车","混凝土泵","挖掘机","装载机","推土机","压路机","平地机","空压机","注浆机","锚杆钻机","混凝土喷射机","喷射机","吊篮","钢筋加工设备","塔吊"],bn=/挖掘机|空压机|注浆机|锚杆钻机|混凝土喷射机|喷射机|推土机/u;function bo(a,b){let c={late:[],inverted:[]},d=function(a){let b=[];for(let c of a.matchAll(/第(\d{2,3})日[^。;;\n|]{0,8}?(?:进场|投入使用|安装|调试)/gu)){let d=c.index||0,e=a.slice(Math.max(0,d-24),d),f=bm.find(a=>e.includes(a));f&&b.push({equipment:f,day:Number(c[1]),raw:`${e.slice(-18)}${c[0].slice(0,20)}`,start:d,end:d+c[1].length+2})}let c=new Set;return b.filter(a=>{let b=`${a.equipment}:${a.raw}`;return!c.has(b)&&(c.add(b),!0)})}(a);if(0===d.length)return c;let f=function(a,b){for(let c of[a,...(b.schedule||[]).map(a=>`${a.key||""}${(0,e.lG)(a.value)}`)]){let a=/(?:计划工期|合同工期|总工期|工期总日历天数)[^\d。;;\n|]{0,12}(\d{1,4})\s*个?\s*日历天/u.exec(c);if(a){let b=Number(a[1]);if(Number.isFinite(b)&&b>=30&&b<=3e3)return b}}}(a,b);void 0!==f&&(c.total=f,c.late=d.filter(a=>a.day>=f));let g=aH(a).filter(a=>"excavation"===a.key).map(a=>a.day);if(g.length>0){let a=Math.min(...g);c.pitDone=a,c.inverted=d.filter(b=>bn.test(b.equipment)&&b.day>a)}return c}function bp(a,b){let c=bo(a,b),d=[];return void 0!==c.total&&c.late.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场时间荒谬:${c.late.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 已达/超过总工期(${c.total}日历天),工程结束时设备尚未进场`,suggestion:`以总进度计划为准核对设备进场计划:大型施工设备必须在总工期结束前进场并完成使用,${c.late.map(a=>a.equipment).join("、")} 的进场日应提前至工程开始阶段,删除矛盾的尾期进场表述。`}),void 0!==c.pitDone&&c.inverted.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场工序倒挂:${c.inverted.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 晚于基坑支护及土方外运完成节点(第${c.pitDone}日),基坑阶段设备未在工序开始前进场`,suggestion:`基坑阶段专用设备必须在基坑开挖/支护开始前完成进场与报验:将 ${c.inverted.map(a=>a.equipment).join("、")} 的进场日调整为早于基坑支护完成节点(第${c.pitDone}日)的日期,删除工序倒挂表述。`}),d}let bq=/关于|定于|对于|至于|由于|基于|鉴于|处于|位于|在于|置于|用于|属于|终于|便于|善于|现在|正在|存在|所在|潜在|实在$/u;function br(a,b){let c=a,d=[];for(let a=1;a<=3;a+=1){let a=bo(c,b),e=new Map;for(let b of[...a.late,...a.inverted])e.set(`${b.start}:${b.end}`,b);if(0===e.size)break;let f=0,g=1/0;for(let a of[...e.values()].sort((a,b)=>b.start-a.start)){let b=a.start,e=c[b-1];if("于"!==e&&"在"!==e||bq.test(c.slice(Math.max(0,b-2),b))||(b-=1),a.end>g)continue;let h=c.slice(b,a.end);c=c.slice(0,b)+"按进度计划"+c.slice(a.end),g=b,f+=1,d.push(`「${h}」→「按进度计划」`)}if(0===f)break}return{markdown:c,fixedCount:d.length,details:d}}let bs=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,bt=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function bu(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let bv=/^\s*\|[\s:|-]+\|/u;function bw(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>bv.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataRows:e.map(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(bx(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function bx(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function by(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let bz=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,bA=a=>a.filter(a=>!bz.test(a));function bB(a){let b=[];for(let c of bw(a)){let a=c.dataRows;if(a.length<4)continue;let d=a=>(a[0]||"").trim(),e=(a,b)=>bx(a,b);for(let f=Math.floor(a.length/2);f<=Math.ceil(a.length/2);f+=1){let g=a.slice(0,f),h=a.slice(f);if(g.length<2||h.length<2)continue;let i=0,j=-1;for(let a of h){let b=d(a);if(b){for(let c=j+1;c<g.length;c+=1)if(d(g[c])===b&&e(a,g[c])>=.5){i+=1,j=c;break}}}let k=i/h.length;if(!(k<.8)){b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`表格内部数据行重复:第 ${c.startLine+1}~${c.endLine+1} 行表格(表头:${c.header.slice(0,3).join("|")})数据行两遍粘贴(${f} 行 + ${h.length} 行,重复匹配率 ${Math.round(100*k)}%)`,suggestion:`删除第二遍重复数据行(保留第一遍 ${f} 行),删除后表格仅保留一份完整数据。`});break}}}return b}function bC(a){let b=[],c=bw(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=bx(e.header,f.header),i=bx(e.firstCol,f.firstCol),j=bx(e.dataCells,f.dataCells),k=Math.max(by(bA(e.dataCells),bA(f.dataCells)),by(bA(f.dataCells),bA(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function bD(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}let bE=15;function bF(a){let b=function(a){let b=[];for(let c of a.split(/\n\s*\n/u)){let a=c.trim();if(!a)continue;let d=a.split(/\n/u).filter(a=>{let b=a.trim();return b&&!/^#{1,6}\s/u.test(b)&&!b.startsWith("|")}).join("\n"),e=[];for(let a of d.split(/[。!?!?]/u)){let b=a.trim().replace(/\s+/gu,"");if(b.length<bE)continue;let c=e.findIndex(a=>a.sentence===b||a.sentence.length>b.length&&a.sentence.length-b.length<=bE&&a.sentence.endsWith(b));c>=0?e[c].count+=1:e.push({sentence:b,count:1})}for(let a of e)a.count>=2&&b.push({sentence:a.sentence,count:a.count})}return b}(a);return 0===b.length?[]:b.slice(0,3).map(({sentence:a,count:b})=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`段落内句子复读 ${b} 次:“${a.slice(0,30)}…”`,suggestion:"同一段落内相同句子只保留首次出现,删除段尾复读的重复句(确定性修复器已接入自动剥离)。"}))}let bG=/^(.+?)(?:((?:\d+|[一二三四五六七八九十]+)))+$/u;function bH(a){let b=[];for(let c of a.matchAll(/^###\s+(.+)$/gmu)){let d=c[1].trim();bG.test(d)&&b.push({raw:d,index:a.lastIndexOf("\n",c.index??0)+1})}return b}function bI(a){let b=bH(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"local_deterministic",message:`目录小节标题含防撞名编号后缀:“${a}”`,suggestion:"正式投标文件目录不允许「(1)(2)」编号后缀小节:确定性修复器已接入(按主题域重命名为语义化标题或合并同基线拆半小节)。"}))}let bJ=/第(\d{1,3})日(?:至|到|~|~|—|-)第(\d{1,3})日/gu;function bK(a){let b=[];for(let c of a.matchAll(bJ))Number(c[1])<=Number(c[2])||b.push({start:c.index??0,end:(c.index??0)+c[0].length,raw:c[0]});return b}function bL(a){let b=bK(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`时间区间倒挂:“${a}”起点大于终点,属时间拼接病句`,suggestion:"删除倒挂区间起点,仅保留终点日期表述(确定性修复器已接入自动剥离)。"}))}function bM(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=bD(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}let bN=/\d{2,}(?:\.\d+)?/gu,bO=/\d+\s*#/gu;function bP(a){return(function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){let d=b[a].trim();!(!d||/^#{1,6}\s/u.test(d)||d.startsWith("|")||/^(?:[-*+•]|\d{1,3}[.、)])\s*/u.test(d))&&((d.match(/[一-龥]/gu)||[]).length<40||c.push({line:a+1,text:d,skeleton:function(a,b){let c=a.replace(/[\s\u3000|*`_]/gu,""),d=new Set;for(let a=0;a+5<=c.length;a+=1)d.add(c.slice(a,a+5));return d}(d.replace(/\d+(?:\.\d+)?/gu,"#"),5),numbers:new Set(d.match(bN)||[]),markers:new Set((d.match(bO)||[]).map(a=>a.replace(/\s/gu,"")))}))}let d=new Map;c.forEach((a,b)=>{for(let c of a.numbers){let a=d.get(c)||[];a.push(b),d.set(c,a)}});let e=new Map;for(let a of d.values())for(let b=0;b<a.length;b+=1)for(let c=b+1;c<a.length;c+=1){let d=`${a[b]}|${a[c]}`;e.set(d,(e.get(d)||0)+1)}let f=[];for(let[a,b]of e){if(b<2)continue;let[d,e]=a.split("|").map(Number),g=c[d],h=c[e];if(2>Math.abs(g.line-h.line))continue;let i=new Set([...g.numbers,...h.numbers]).size,j=0===i?0:b/i;if(j<.6)continue;let k=function(a,b){if(0===a.size||0===b.size)return 0;let c=0;for(let d of a)b.has(d)&&(c+=1);return c/(a.size+b.size-c)}(g.skeleton,h.skeleton);!(k<.3)&&(!(g.markers.size>0)||!(h.markers.size>0)||[...g.markers].some(a=>h.markers.has(a)))&&f.push({firstLine:g.line,secondLine:h.line,skeletonJaccard:Number(k.toFixed(3)),numberOverlap:Number(j.toFixed(2)),excerpt:h.text.slice(0,40)})}return f.sort((a,b)=>a.secondLine-b.secondLine).slice(0,20)})(a).slice(0,3).map(a=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落近似重复:第 ${a.secondLine} 行与第 ${a.firstLine} 行叙述同一批对象与工程量(骨架一致度 ${a.skeletonJaccard}、数值一致度 ${a.numberOverlap}):“${a.excerpt}…”`,suggestion:"两处仅保留信息完整的一处并合并差异(不得改写既有数值与工序事实);重复段落后含原文粘贴来源的,以正文归纳口径为准。",provenance:{detectorId:"paragraph-near-duplicate",fingerprint:(0,e.c6)(`${a.firstLine}|${a.secondLine}|${a.excerpt}`)}}))}function bQ(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(bs))d.add(bu(b[0]));if(c?.extracted)for(let a of c.entries)for(let b of a.text.matchAll(bs))d.add(bu(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(bs)){let a=bu(b[0]);!d.has(a)&&(bt.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位,禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function bR(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let bS=/(?:荣获|曾获|获得过|被评为)\s*[^。;\n]{2,24}/gu,bT=/奖|杯|荣誉|称号|优秀|先进|示范|观摩|文明工地|优质工程/u,bU=/(?:承接过|承建过)\s*[^。;\n]{2,24}/gu,bV=/工程|项目|标段|业绩/u,bW=/完成过\s*(?:[0-90-9一二三四五六七八九十两]+|[多若干]+)\s*(?:个|项|例|座|条|余项|余个)?\s*(?:类似|同类|以上的?)?\s*(?:工程|项目)/gu,bX=/资质证书编号|证书编号|安全生产许可证编号|资质编号|营业执照注册号|统一社会信用代码|证号[::]/gu,bY=/(?:设计|勘察|监理)单位|设计院|勘察院|监理公司|设计研究总院|设计研究院|设计总院/u;function bZ(a,b){if(!b)return[];let c=[];for(let b of a.matchAll(bS))bT.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(bU))bV.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(bW))c.push(b[0].trim());for(let b of a.matchAll(bX))bY.test(function(a,b){let c=b;for(;c>0&&!/[。;;\n]/u.test(a[c-1]);)c-=1;let d=b;for(;d<a.length&&!/[。;;\n]/u.test(a[d]);)d+=1;return a.slice(c,d)}(a,b.index??0))||c.push(b[0].trim());if(0===c.length)return[];let d=[...new Set(c)];return[{level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人身份标记 ${d.length} 处:${d.slice(0,3).map(a=>`“${a.slice(0,30)}”`).join("、")}${d.length>3?" 等":""}(招标暗标要求不得出现明示或暗示具体投标人的说明及标记,包括以往的施工业绩)`,suggestion:"删除或改写身份标记句:以往业绩/获奖表述一律删除;证书资质类表述改写为不自证身份的施工管理口径(如“按规定持证上岗”),不得保留证书编号与奖项名称。"}]}let b$=/人[、,,]材[、,,]机/u,b_=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function b0(a){let b=a.match(b_)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function b1(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!b$.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:b0(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=b0(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}async function b2(a,b,c={}){let d=[],e=(a,b)=>1e-6>Math.abs(a-b),f=[];for(let c of b){let b=c.groups??[];if(b.length<2||new Set(b.map(a=>Math.round(100*a.value))).size<2)continue;let d=RegExp((0,i.Lp)(c.name),"gu"),e=RegExp(`(?<![\\dA-Za-z])(\\d(?:[\\d,]*(?:\\.\\d+)?))\\s*${(0,i.YZ)(c.unit)}(?![0-9a-zA-Z])`,"gui"),g=[];for(let f of a.matchAll(d)){let d=f.index??0,h=d+f[0].length,i=a.lastIndexOf("\n",d)+1,j=a.indexOf("\n",d);if(-1===j&&(j=a.length),/^\s*\|/u.test(a.slice(i,j)))continue;let k=Math.max(i,d-24),l=a.slice(k,d),n=Math.max(l.lastIndexOf("。"),l.lastIndexOf(";"),l.lastIndexOf(";")),o=n>=0?l.slice(n+1):l,p=b.filter(a=>a.group&&o.includes(a.group));if(1!==p.length)continue;let q=p[0],r=a.slice(h,h+24),s=Math.min(...[r.search(/[、。;,]/u),r.search(/\n/u)].filter(a=>a>=0).concat([r.length])),t=r.slice(0,s),u=null;for(let a of t.matchAll(e)){let b=a[1],d=Number(b.replace(/,/gu,""));Number.isFinite(d)&&!(d<=0)&&(null===u||Math.abs(d-c.value)<Math.abs(u.value-c.value))&&(u={offset:h+(a.index??0)+a[0].indexOf(b),value:d,raw:b})}if(!u)continue;let v=a.slice(h,u.offset);(!/[A-Za-z]/u.test(v)||/[\u4e00-\u9fa5]/u.test(v))&&g.push({group:q.group,value:u.value,excerpt:a.slice(d,u.offset+u.raw.length),sentence:(0,m.kE)(a,d,u.offset+u.raw.length-d),flatIndex:-1})}0!==g.length&&f.push({authority:{name:c.name,value:c.value,unit:c.unit},detail:b,pairings:g})}if(0===f.length)return d;let g=[];for(let a of f)for(let b of a.pairings){b.flatIndex=g.length;let c=a.detail.find(a=>a.group===b.group);g.push({id:`xp${b.flatIndex}`,kind:"quantity",subject:`${a.authority.name}(${b.group})`,value:b.value,unit:a.authority.unit,authority:c?.value??a.authority.value,sentence:b.sentence,facts:[`该条目清单分工程明细:${a.detail.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}`]})}let h=c.adjudicate??m.hy,j=await h(g,{diagnostics:c.diagnostics,signal:c.signal});for(let a of f){let b=a.pairings.filter(a=>j.records.get(`xp${a.flatIndex}`)?.conclusion!=="consistent");if(0===b.length)continue;let c=!1;for(let f of b){let b=a.detail.find(a=>a.group===f.group);if(!b||e(b.value,f.value))continue;let g=a.detail.find(a=>a.group!==f.group&&e(a.value,f.value));if(g){d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${f.excerpt.slice(0,40)}”在“${f.group}”语境处取值 ${f.value}${a.authority.unit},该值是“${g.group}”的清单明细值(${f.group} 的清单明细值为 ${b.value}${a.authority.unit})`,suggestion:`以工程量清单分工程明细为准修正“${f.group}”语境:应为 ${b.value}${a.authority.unit},不得沿用“${g.group}”的明细值 ${f.value}${a.authority.unit};修复后全文该条目分工程取值必须与清单明细逐一对应。`}),c=!0;break}}if(c)continue;let f=new Map;for(let a of b){let b=a.value.toFixed(2),c=f.get(b)??new Set;c.add(a.group),f.set(b,c)}for(let[c,e]of f){if(e.size<2)continue;let f=a.detail.filter(a=>e.has(a.group));if(new Set(f.map(a=>Math.round(100*a.value))).size<2)continue;let g=b.find(a=>a.value.toFixed(2)===c);d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${g.excerpt.slice(0,40)}”数值 ${c}${a.authority.unit} 同时出现在“${[...e].join("”“")}”等 ${e.size} 个工程对象语境,而清单明细值互不相同(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")})——至少一处属跨工程同值复制`,suggestion:`逐工程对象按清单明细值修正取值(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}),不得多工程共用同一数值。`});break}}return d}function b3(a){let{phrase:b,first:c,second:d}=a,e=(0,n.Qk)(b,c.phase),f=(0,n.Qk)(b,d.phase);if(e.length<4||f.length<4)return null;let g=e.start<=f.start?c:d,h=g===c?d:c;return{leading:g,trailing:h}}function b4(a,b){let c=[],d=[];if(0===b.length)return{claims:c,ambiguities:d};let e=new Set,f=(f,g,h,i)=>{if(e.has(f))return;let j=Number(g.replace(/[,,]/gu,""));if(!Number.isFinite(j)||j<=0)return;let k=a.lastIndexOf("\n",f)+1,l=a.indexOf("\n",f);-1===l&&(l=a.length);let m=a.slice(k,l);if(/^\s*\|.*\|\s*$/u.test(m)||aO.test(m))return;let o=a.slice(Math.max(k,f-12),f);if(/不少于|不低于|至少|最低|不小于|≥/u.test(o)||/(?:[\u4e00-\u9fa5]{1,3}(?:工|员|长)|司机|班组|队伍?)\s*$/u.test(o))return;let p=function(a,b){let c=(a.match(/[\p{Script=Han}]/gu)||[]).length;if(0===c)return null;let d=null,e={length:0,start:0,end:0};for(let c of b){let b=(0,n.Qk)(a,c.phase);b.length>=4&&(null===d||b.length>e.length)&&(d=c,e=b)}if(!d)return null;if(e.length>=c)return{best:d};for(let c=1;c<a.length-1;c+=1){if(!/[与及和、,,]/u.test(a[c]))continue;let d=b.find(b=>b.phase===a.slice(0,c).trim());if(!d)continue;let e=b.find(b=>b.phase===a.slice(c+1).trim());if(e&&d.value===e.value)return{best:d}}for(let c of[a.slice(0,e.start),a.slice(e.end)])if(!((c.match(/[\p{Script=Han}]/gu)||[]).length<2)){for(let a of b)if(a.phase!==d.phase&&(0,n.Qk)(c,a.phase).length>=4)return{best:d,second:a}}return{best:d}}(h,b);if(!p)return;let q=a.slice(Math.max(k,f-24),Math.min(a.length,f+g.length+1)).trim();if(p.second){e.add(f),d.push({start:f,raw:g,actual:j,phrase:h,first:{phase:p.best.phase,value:p.best.value,trace:p.best.trace},second:{phase:p.second.phase,value:p.second.value,trace:p.second.trace},excerpt:q});return}if(j===p.best.value)return void e.add(f);e.add(f),c.push({start:f,end:f+g.length,raw:g,actual:j,expected:p.best.value,phase:p.best.phase,trace:p.best.trace,channel:i,excerpt:q})};for(let b of a.matchAll(w)){let c=(b.index??0)+b[0].indexOf(b[1]),d=a.lastIndexOf("\n",c)+1,e=z(a,d,c);e&&f(c,b[1],e.replace(/阶段$/u,""),"base")}for(let b of a.matchAll(y)){if(!b[1]||!b[2])continue;let c=b[2],d=(b.index??0)+b[0].lastIndexOf(c);if(e.has(d))continue;let g=Math.max(a.lastIndexOf("。",d),a.lastIndexOf(";",d),a.lastIndexOf(";",d))+1,h=a.length;for(let b of["。",";",";"]){let c=a.indexOf(b,d);-1!==c&&c<h&&(h=c)}/阶段/u.test(a.slice(g,h))&&f(d,c,b[1].trim(),"enumeration")}return{claims:c,ambiguities:d}}function b5(a,b){let{claims:c,ambiguities:d}=b4(a,b),e=[];for(let a of c)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段劳动力数据矛盾:正文“${a.excerpt.slice(0,60)}”取值 ${a.actual} 人,与蓝图分阶段劳动力推导不符(“${a.phase}”阶段应为 ${a.expected} 人)`,suggestion:`分阶段劳动力人数必须以蓝图推导为准:将“${a.phase}”阶段人数统一为 ${a.expected} 人${a.trace?`(依据:${a.trace})`:""},删除其他口径数字。`}});for(let a of d)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段名疑似拼接:正文“${a.excerpt.slice(0,60)}”中的阶段名“${a.phrase}”同时混含“${a.first.phase}”与“${a.second.phase}”两个蓝图阶段,人数 ${a.actual} 人无法归属`,suggestion:`将阶段名拆分表述:“${a.first.phase}”按 ${a.first.value} 人、“${a.second.phase}”按 ${a.second.value} 人(蓝图推导)分句列出,不得把两个阶段名连写成单一阶段。`}});return e.sort((a,b)=>a.position-b.position).slice(0,8).map(a=>a.issue)}function b6(a,b){return b7(a,b).map(a=>a.issue)}function b7(a,b){let c=[];if(0===b.length)return c;let d=/首批|第一批|首期|第一期/gu,e=/剩余|补充|追加/gu,f=/保持|维持|确保|不少于|不低于|控制在|以内|以下/u;for(let g of b){if(!g.name||!Number.isFinite(g.count)||g.count<=0)continue;let b=(0,i.Lp)(g.name),h=RegExp(`${b}[^\\n。;;、,,]{0,4}?([\\d,]+)\\s*(?:台|辆)`,"gu"),j=new Set,k=new Set,l=[],m="";for(let b of a.matchAll(/[^。;;\n]+/gu)){let c=b[0],g=b.index??0,i=[...c.matchAll(d)].map(a=>a.index??0),n=[...c.matchAll(e)].map(a=>a.index??0);if(0!==i.length||0!==n.length)for(let b of c.matchAll(h)){if(!b[1])continue;let c=Number(b[1].replace(/[,,]/gu,""));if(!Number.isFinite(c)||c<=0)continue;let d=b.index??0,e=g+d,h=a.lastIndexOf("\n",e)+1,o=a.indexOf("\n",e);-1===o&&(o=a.length);let p=a.slice(h,o);if(/^\s*\|.*\|\s*$/u.test(p)||aO.test(p))continue;let q=b[0];if(f.test(q)||/以内|以下|上限/u.test(a.slice(e+q.length,e+q.length+4)))continue;let r=i.filter(a=>a<d&&d-a<=40).pop(),s=n.filter(a=>a<d&&d-a<=40).pop();if(void 0!==r||void 0!==s){if(void 0!==s&&(void 0===r||s>r)){k.add(c);let b=/([\d,]+)\s*(?:台|辆)\s*$/u.exec(q);if(b){let c=/(?:约|共|计|近|至少)\s*$/u.exec(q.slice(0,b.index)),d=e+b.index-(c?c[0].length:0),f=e+q.length;l.push({start:d,end:f,excerpt:a.slice(d,f)})}}else j.add(c);m||(m=a.slice(Math.max(h,e-20),Math.min(o,e+q.length)).trim())}}}if(0===j.size||0===k.size)continue;let n=[...j],o=[...k];if(!n.some(a=>o.some(b=>a+b===g.count))&&(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`机械设备分批台数矛盾:“${g.name}”分批投入(首批 ${n.join("/")} 台+剩余 ${o.join("/")} 台)各批组合之和均不等于蓝图机械汇总 ${g.count} 台${m?`(原文“${m.slice(0,50)}”)`:""}`,suggestion:`分批投入的台数之和必须等于蓝图机械汇总台数:将“${g.name}”各批次调整为首批与剩余合计 ${g.count} 台,或删除分批描述仅保留“${g.name} ${g.count} 台”汇总口径。`},removals:l}),c.length>=5))break}return c}function b8(a,b){let c=[];if(!b||!Number.isFinite(b)||b<=0)return c;let d=/交底|考察|封样|编制|审批|报审|报批|培训|演练|签订|组建|建立|采购|调查|备案|申报|进场确认/u;for(let e of a.matchAll(/(?:开工令下发|开工令下达|下达开工令|开工|计划开工)[^。;;\n年月]{0,8}?(?:第\s*(\d+)\s*(?:个)?(?:日历)?日|(\d+)\s*(?:个)?(?:日历)?日)/gu)){let f=e[1]||e[2];if(!f)continue;if("内"===a.slice((e.index??0)+e[0].length,(e.index??0)+e[0].length+1)){let b=a.slice(Math.max(0,(e.index??0)-40),(e.index??0)+e[0].length+40);if(!d.test(b))continue}let g=Number(f);if(!Number.isFinite(g)||g<=0||g<b)continue;let h=(e.index??0)+e[0].lastIndexOf(f),i=a.lastIndexOf("\n",h)+1,j=a.indexOf("\n",h);-1===j&&(j=a.length);let k=a.slice(i,j);if(/^\s*\|.*\|\s*$/u.test(k))continue;let l=a.slice(Math.max(i,h-40),Math.min(j,h+f.length+40));if(!d.test(l)||aO.test(l))continue;let m=a.slice(Math.max(i,h-30),Math.min(j,h+f.length+14)).trim(),n=e.index??0;if(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`前期动作时限矛盾:正文“${m}”将前期准备动作时限设在开工后第 ${g} 日,已达到/超过总工期 ${b} 日(竣工日)——前期动作不可能安排在项目末期`,suggestion:`前期准备动作时限必须落在施工准备阶段内:将第 ${g} 日改为与施工准备阶段相匹配的早期天数(早于总工期 ${b} 日),或删除具体天数改述为“开工令下发后在施工准备阶段内完成”。`},start:n,end:n+e[0].length+ +!!/[前内]/u.test(a[n+e[0].length]||"")}),c.length>=5)break}return c}function b9(a,b){return b8(a,b).map(a=>a.issue)}function ca(a,b){let c=b8(a,b);if(0===c.length)return{markdown:a,fixedCount:0,details:[]};let d=a,e=[],f=1/0;for(let a of[...c].sort((a,b)=>b.start-a.start)){if(a.end>f)continue;let b="在"===d[a.start-1]?"施工准备阶段内":"在施工准备阶段内",c=d.slice(a.start,a.end);d=d.slice(0,a.start)+b+d.slice(a.end),f=a.start,e.push(`「${c}」→「${b}」`)}return{markdown:d,fixedCount:e.length,details:e}}function cb(a){let b=a.split(/\r?\n/u),c=[];b.forEach((a,b)=>{let d=/^(#{3,4})\s+([^\n]+)$/u.exec(a.trim());d&&c.push({index:b,level:d[1].length,title:d[2].trim()})});let d=[];for(let a=0;a<c.length;a+=1){let{index:e,level:f,title:g}=c[a],h=g.replace(/^[\d.]+[\s\u00a0]*/u,"");if(!/工程\s*$/u.test(h))continue;let i=h.replace(/\s*工程\s*$/u,"");if(!i||!/[、与及]/u.test(i))continue;let j=i.split(/[、与及]/u).map(a=>a.trim()).filter(a=>a.length>=2);if(j.length<2)continue;let k=b.length;for(let b=a+1;b<c.length;b+=1)if(c[b].level<=f){k=c[b].index;break}let l=b.slice(e+1,k).join("\n"),m=l.replace(/[、,,]/gu,""),n=j.filter(a=>{if(/^(?:配套|附属|其他|其它|零星|通用)$/u.test(a)||l.includes(a))return!1;let b=a.replace(/[、,,]/gu,"").replace(/(?:安装|施工|工程|作业)$/u,"");if(b.length>=2&&m.includes(b))return!1;if(b.length>=4){let a=b.match(/.{2}/gu)??[];if(a.length>=2&&a.every(a=>m.includes(a)))return!1}return!0});0!==n.length&&d.push({lineIndex:e,level:f,title:g,parts:j,uncovered:n})}return d}let cc=/^(?:合计|小计|总计|汇总|共计|总和|总额|总价|总数量|总量|合价)/u,cd=/^(?:其他|其它|其余|剩余|差额|补差)/u,ce=/^(?:其中|占比|比例|备注|说明|注[::])/u,cf=/待定|待补|待明确|待确认|未定|未明确|暂定|暂按|视情况|部分|若干/u,cg=/约(?![定束])|左右|以上|以下|以内|以外|不少于|不超过|不大于|不小于|不低于|不高于|至少|最少|最多|至多|超过|超出|不足|按实|据实|根据实际|不含|含\s*\d|其中|扣除|另计|另含|除外|等(?![级于额])|±|[≥≤≧≦><><]/u,ch=/[\d))]\s*[~~\-—–至到]\s*[\d((]/u,ci=/^(?:[-—–-//\\]+|无|不适用|不涉及|不包含|n\/a)$/iu,cj="(?<![A-Za-z0-9\\-Φφ])(-?(?:\\d{1,3}(?:[,,]\\d{3})+|\\d+)(?:\\.\\d+)?)\\s*(平方米|立方米|平方|立方|万元|亿元|千元|公里|厘米|毫米|公斤|日历天|小时|分钟|台班|工日|千米|盏|棵|株|袋|桶|块|片|条|根|座|台|套|个|处|道|项|批|次|人|名|户|间|层|樘|孔|眼|栋|幢|米|吨|元|万|千|百|天|周|月|年|℃|cm|kVA|mm|km|kg|kW|m2|m3|m\xb2|m\xb3|㎡|MPa|kPa|ml|L|t|m|%|%|‰|A|V|W)?";function ck(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu,"").replace(/^[((]?\d{1,2}(?:\.\d{1,2})?[.、))]?/u,"")}function cl(a){let b=a.replace(/[*_`]/gu,"").trim(),c={values:[],units:[],uncertain:!1};if(!b||ci.test(b))return c;let d=b.replace(/(?:GB|JGJ|CJJ|CJ|DB|DG|SL|JT|JTS|JTG|TSG|CECS|YB|SH|HG|SY|TB|AQ|JG|JB|ISO|GA|JC|MZ|WW|WH|GH|FZ|QB|YY|HY|LY|NY|SB|SN|WS|YZ|CB|EJ|HB|HS|MH|QJ|SC|SJ|TY|ZB)\s*\d*(?:\s*[A-Za-z])?(?:\s*\/\s*T)?\s*[\d.\-/·]+/giu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*[-/.月]\s*\d{1,2}\s*日?/gu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*月?/gu," ").replace(/\d{1,2}\s*月\s*\d{1,2}\s*日/gu," ").replace(/(?:19|20)\d{2}\s*年/gu," ").replace(/\d{1,2}(?:\.\d+)?\s*[::]\s*\d{1,2}(?:\.\d+)?/gu," ").replace(/第\s*\d+(?:\.\d+)?\s*(?:章|节|条|款|项|页|版|期|批|次|轮|步|道|层|日历天|季度|个?季度|阶段|部分|天|日|周|月|年)/gu," ").replace(/(?:详见|参见)\s*(?:第\s*)?\d[\d.]*(?:节|条|章|表|图|页|款)?/gu," ").replace(/(?:见|根据|依据|按照|依照|执行|符合)\s*第?\s*\d[\d.]*(?:节|条|章|表|图|页|款)/gu," ").replace(/[A-Za-z]{1,4}\s*[--]\s*\d+(?:\.\d+)?/gu," ").replace(/(?<![\d.])\d{1,2}(?:\.\d{1,2}){2,}(?!\d)/gu," ").replace(/(?:^|[\s、,,;;((])\d{1,2}\s*[.、))](?=\s*(?:\D|$))/gu," ").replace(/\d[\d,]*(?:\.\d+)?(?:\s*[×✕xX*]\s*\d[\d,]*(?:\.\d+)?)+/gu," ").replace(/\d{1,4}(?:\s*\/\s*\d{1,4})+/gu," ");if(cf.test(d))return{...c,uncertain:!0};if(!/\d/u.test(d))return c;if(cg.test(d)||ch.test(d))return{...c,uncertain:!0};let e=[...d.matchAll(RegExp(cj,"gu"))];if(0===e.length)return c;if(""!==d.replace(RegExp(cj,"gu")," ").replace(/[^\u4e00-\u9fa5a-z]/giu,"")&&e.some(a=>!a[2]))return{...c,uncertain:!0};for(let a of e){let b=Number(a[1].replace(/[,,]/gu,""));Number.isFinite(b)&&(c.values.push(b),c.units.push(function(a){let b=(a??"").trim().toLowerCase();return""===b?"":/^(?:m2|m²|㎡|平方米|平方|平米)$/u.test(b)?"m2":/^(?:m3|m³|立方米|立方|方)$/u.test(b)?"m3":/^(?:人|名|员|人员)$/u.test(b)?"人":"%"===b||"%"===b?"%":/^(?:千米|公里)$/u.test(b)?"km":/^(?:米|m)$/u.test(b)?"m":/^(?:吨|t)$/u.test(b)?"t":/^(?:公斤|千克|kg)$/u.test(b)?"kg":b}(a[2])))}return c}function cm(a){let b=cl(a);return b.uncertain||1!==b.values.length?null:{value:b.values[0],unit:b.units[0]??""}}function cn(a){let b=0,c=0,d=new Set;for(let e of a){let a=e.replace(/[*_`]/gu,"").trim();if(!a)continue;let f=cl(a);if(f.uncertain||cd.test(ck(a))&&0===f.values.length)return null;if(0!==f.values.length){for(let a of f.values)b+=a,c+=1;for(let a of f.units)a&&d.add(a)}}return d.size>1?null:{sum:b,count:c,unit:1===d.size?[...d][0]:""}}function co(a){return String(Math.round(100*a)/100)}function cp(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu," ").trim().slice(0,24)}function cq(a){let b=a.header,c=a.dataRows;if(0===c.length||0===b.length)return[];let d=b.map((a,b)=>b).filter(a=>cc.test(ck(b[a]??""))),e=c.map((a,b)=>b).filter(a=>cc.test(ck(c[a][0]??"")));if(d.length>1||e.length>1)return[];let f=[],g=Math.max(b.length,...c.map(a=>a.length)),h=1===d.length?d[0]:-1,i=1===e.length?e[0]:-1;if(h>0&&c.forEach((a,c)=>{if(c===i||ce.test(ck(a[0]??"")))return;let d=a[h];if(void 0===d)return;let e=cm(d);if(!e)return;let j=[];for(let b=1;b<g;b+=1)b!==h&&j.push(a[b]??"");let k=cn(j);if(!k||k.count<2||e.unit&&k.unit&&e.unit!==k.unit)return;let l=Math.abs(e.value-k.sum);if(l<=Math.max(1,.005*Math.abs(e.value)))return;let m=cp(a[0]??"")||`第 ${c+1} 行`,n=cp(b[h]??"")||"合计";f.push(`「${m}」行:${n} ${co(e.value)}${e.unit} ≠ 分项和 ${co(k.sum)}${k.unit}(差 ${co(l)})`)}),i>=0){let a=c[i];for(let d=1;d<g;d+=1){if(d===h)continue;let e=a[d];if(void 0===e)continue;let g=cm(e);if(!g)continue;let j=cn(c.filter((a,b)=>b!==i&&!ce.test(ck(a[0]??""))).map(a=>a[d]??""));if(!j||j.count<2||g.unit&&j.unit&&g.unit!==j.unit)continue;let k=Math.abs(g.value-j.sum);if(k<=Math.max(1,.005*Math.abs(g.value)))continue;let l=cp(a[0]??"")||"合计",m=cp(b[d]??"")||`第 ${d+1} 列`;f.push(`「${m}」列:${l} ${co(g.value)}${g.unit} ≠ 分项和 ${co(j.sum)}${j.unit}(差 ${co(k)})`)}}return f}function cr(a){let b=bw(a);if(0===b.length)return[];let c=[];for(let a of b){let b=cq(a);if(0!==b.length&&(c.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",message:`生成后事实反查失败:表格算术不自洽 ${b.length} 处(${b.slice(0,3).join(";")}${b.length>3?" 等":""})`,suggestion:"表内「合计」必须等于分项之和:以分项重算合计,或按权威数据修正分项;台账类保留显性「其他」差额项并给出数值;只允许修正表内数值,严禁编造无来源数据。"}),c.length>=5))break}return c}function cs(a){return bw(a).reduce((a,b)=>a+cq(b).length,0)}function ct(a,b){let c=b.projectName||"";if("village-municipal"===b.blueprintStrategyId||/自然村|美丽乡村|宜居|乡村振兴|行政村|村组|村庄/u.test(c))return[];let d=["自然村","村内","村庄","村民","多村并行","村组","各村"].map(b=>({term:b,count:(a.match(RegExp(b,"gu"))||[]).length})).filter(a=>a.count>0);if(0===d.length)return[];let e=d.reduce((a,b)=>a+b.count,0);return[{level:"error",severity:"blocker",category:"scope",message:`项目类型与正文用词矛盾:本项目非乡村类${c?`(${c})`:""},正文却出现乡村专有表述 ${d.map(a=>`「${a.term}」${a.count} 处`).join("、")}(合计 ${e} 处)`,suggestion:"按项目实际类型统一叙述口径:乡村专有表述应改为对应业务称谓(如「自然村分组」→「单位工程/施工区段」、「村内流水作业」→「区段内流水作业」);若项目确为乡村类,请检查项目名与蓝图策略选型后重新生成。"}]}let cu=[{figure:/进度|工期|横道|网络/u,table:/进度|工期|节点|工序/u,label:"进度计划表"},{figure:/平面|布置|总平面/u,table:/临时设施|临时用地|平面|设施配置/u,label:"临时设施/用地表"},{figure:/组织|机构|岗位|职责/u,table:/岗位|职责|机构|管理人员/u,label:"项目管理机构/岗位职责表"},{figure:/劳动力|人力/u,table:/劳动力|工种|人数/u,label:"劳动力计划表"},{figure:/机械|设备/u,table:/机械|设备|进场/u,label:"机械设备表"},{figure:/材料|物资/u,table:/材料|物资/u,label:"材料计划表"}];function cv(a,b){let c=[],d=a.split("\n"),f=/^图\s*\d+(?:[-—–-]\d+)?\s+\S+$/u,g=/^图\s+[^\s,。;:]{2,36}$/u,h=d.map((a,b)=>({text:a.trim(),index:b})).filter(a=>f.test(a.text)||g.test(a.text)),i=d.map((a,b)=>({text:a.trim(),index:b})).filter(a=>/!\[[^\]]*\]\([^)]*\)/u.test(a.text)||/<img\b/iu.test(a.text));for(let f of((h.length>0||i.length>0)&&c.push({level:"error",severity:"blocker",category:"format",provenance:{detectorId:"figure-substitute-table",fingerprint:(0,e.c6)(a)},message:`正文零图口径违规:图题/图号 ${h.length} 处、图片引用 ${i.length} 处`,suggestion:`正文只出表:删除全部图题、图号与图片引用,图类要求一律改写为等效数据表(进度类→工序表、机构类→岗位层级表、平面类→临时设施用地表)并加表题。示例:${(h[0]?.text||i[0]?.text||"").slice(0,40)}`}),b)){let a=cu.find(a=>a.figure.test(f.name)),b=a?.table??/./u;d.some(a=>{let c=a.trim();return!!/^\|.+\|$/u.test(c)&&b.test(c)})||c.push({level:"warning",severity:"warning",category:"structure",message:`图类要求未以数据表落实:「${f.name}」(${f.chapterTitle})${a?`(应至少提供${a.label})`:""}`,suggestion:"图类要求一律以等效数据表承载同一信息(进度图→进度计划表、平面布置图→临时设施用地表、机构图→岗位层级表);无对应数据则该项要求落空,须补齐数据而非留空。"})}return c}},36003:(a,b,c)=>{c.d(b,{AI:()=>U,Br:()=>W,D6:()=>Z,Y8:()=>D,Ym:()=>J,_9:()=>Y,eL:()=>q.eL,fk:()=>$,hZ:()=>E,nl:()=>ac,qX:()=>F,uQ:()=>V,w9:()=>B,xu:()=>q.xu});var d=c(76760),e=c(78217),f=c(70933),g=c(30836),h=c(40299),i=c(95734),j=c(22157),k=c(46482),l=c(71001),m=c(43378),n=c(52639),o=c(40693),p=c(49350),q=c(22213),r=c(91943),s=c(56963),t=c(18274),u=c(76193),v=c(21702),w=c(41991),x=c(1358),y=c(3063),z=c(54185),A=c(80572);function B(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];for(let a of(c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),c)){let b=function(a){let b=a.blockDegradation;if(b&&Array.isArray(b.droppedBlocks)&&0!==b.droppedBlocks.length)return b}(a);if(!b)continue;let{head:c,details:e}=$(b),f=b.droppedBlocks.map(a=>a.title).join("、"),g=[...new Set(b.droppedBlocks.map(a=>a.reason))].join(";");d.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"manual_review",chapterId:a.id,sectionTitle:b.droppedBlocks[0]?.title,message:`${a.title} 章级显式降级:${c}(失败原因:${g})`,suggestion:`本章已保留其余块正文,失守块无正文(不填充兜底内容)。请针对「${f}」在「${a.title}」对应位置定向补写或重生成后重新导出:${g}`,provenance:{detectorId:"chapter-block-degradation",fingerprint:(0,j.c6)(e.join("|"))}})}return b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}let C=/\b\d+(?:\.\d+)?\s*(?:日历天|小时|分钟|天|周|月|年|万元|元|台|套|个|项|批|次|份|人)(?=[。,,;;::、\s]|$)/gu;function D(a){let b=new Set;for(let c of a){let a=(0,j.lG)(c.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let c of a.matchAll(t._W))b.add(c[0].trim());for(let c of a.matchAll(C))b.add(c[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}function E(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,f.eE)((0,j.lG)(a.value))}`),g=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),h=a.indexedFacts||[],i=g.length>0?[]:h.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,f.eE)((0,j.lG)(a.value))}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),k=[...g,...h].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,j.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,j.lG)(a.value)}`)===b),l=[...new Set([...D(a.evidence),...g.map(a=>(0,j.lG)(a.value)).filter(a=>t.sv.test(a)),...h.map(a=>(0,j.lG)(a.value)).filter(a=>t.sv.test(a))])],m=new Set([...a.evidence.map(a=>a.filePath),...g.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,n=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label),o=function(a){if(!a)return[];let b=[];for(let[c,d]of Object.entries(a)){if(d.length<2)continue;let a=d.filter((a,b,c)=>c.findIndex(b=>b.location===a.location&&b.spec===a.spec)===b);a.length<2||b.push(`- ${c}:${a.slice(0,8).map(a=>`${a.location}:${a.spec}`).join("|")}`)}return b.slice(0,12)}(a.specAuthorityMap);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
|
|
46
|
+
|]{0,40}?(${n.source})`,"gu");for(let b of a.matchAll(r)){let i=b[1]||"";if(aP.test(b[0])||aQ.test(b[0])||aR.test(b[0]))continue;let m=a.slice(Math.max(0,(b.index||0)-40),b.index||0);if(aR.test(m))continue;let o=a.slice((b.index||0)+b[0].length,(b.index||0)+b[0].length+10);if(/范围内|范围/u.test(o)||/(?:工作宽度|作业宽度|操作空间|工作面)/u.test(o)||/^、\s*\d/u.test(o)||/^\s*厚(?:\s*[\d::]|覆膜|木|胶合)/u.test(o)||RegExp(`^(?:或|[、,,/])\\s*(?:${n.source})`,"u").test(o))continue;let r=a.slice(Math.max(0,b.index||0),(b.index||0)+b[0].length);if(/(?:标高|高程|平整度|轴线|垂直度|高差)[^。;;\n|]{0,10}(?:偏差|误差|不超过|不得大于|不大于)/u.test(r.slice(-28))||/(?:偏差|误差|公差|缝隙|接缝|拼缝|高差|顺直度|垂直度|平整度|轴线|标高|高程)[^。;;\n|]{0,16}(?:不超过|不得大于|不大于|控制在|±|≤)/u.test(r.slice(-36)))continue;let s=b[0].slice(0,b[0].indexOf(i));if(/(?:间距|中心距|净距|排距|间隔)[^。;;\n|,,、]{0,8}$/u.test(s))continue;let t=b[0].indexOf(i);if(t>j.length&&/(?:涵头|面层|基层|垫层|管基|基础|梁|板|柱|墙|地坪|路面)/u.test(b[0].slice(j.length,t)))continue;let u=b.index||0,v=g.find(b=>b.length>j.length&&b.endsWith(j)&&a.slice(u+j.length-b.length,u+j.length)===b);if(v){let a=new Set(h.filter(a=>a.location===v&&a$(a.spec)?.source===n.source).map(a=>a.spec));if(a.has(i)||a.size>0)continue}if(q.has(i)||!(0,l.Zg)(i))continue;let w=1===q.size?[...q][0]:void 0,x=void 0===w?function(a,b,c,d,e){if(d.size<2)return;let f=a2(/([一-龥]{1,12})$/u.exec(a.slice(Math.max(0,c-12),c))?.[1]||"");if(!f)return;let g=RegExp(`([一-龥]{1,12})${a_(b)}[^。;;\\n|]{0,24}?(${e.source})`,"gu"),h=new Set;for(let b of a.matchAll(g))a2(b[1]||"")===f&&d.has(b[2]||"")&&h.add(b[2]||"");return 1===h.size?[...h][0]:void 0}(a,j,b.index||0,q,n):void 0,y=w??x,z=u+t;if("other-class"===function(a,b,c,d){let e=a5(a,b);return e?d.some(a=>a.length>c.length&&a===`${e}${c}`)?"same-class":a6.test(e)?"other-class":a4.test(e)||a3.test(e)?"same-class":"other-class":"bare"}(a,u,j,g))continue;let A=a.slice(Math.max(0,z-24),z+i.length+16),B=/([^。;;,、|\n]*)$/u.exec(a.slice(0,z))?.[1]||"",C=(0,l.W_)(`${B}${i}`,i),D=!!(C&&C.includes(j)),E=y?function(a,b){if(!a7.test(a.trim())||!a7.test(b.trim()))return;let c=(0,k.Bk)(a),d=(0,k.Bk)(b);if(void 0===c||void 0===d)return;let e=Math.max(c,d)/Math.min(c,d);return e>k.do?e:void 0}(i,y):void 0,F=!!y&&(!!x||D)&&void 0===E,G=(0,k.Rd)({authorityOwner:y?p:void 0,bodyLocation:j,bodyWindow:A,found:i,authority:y||""}),H=F&&G.allowed?y:void 0;if(!F&&f>=c)continue;F?e+=1:f+=1;let I=[...q].join("/");if(d.push({issue:F?{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格错位:“${j}”使用的规格 ${i} 与工程量清单权威(${I})不一致`,suggestion:`按工程量清单将“${j}”的规格统一为 ${I};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。`}:{level:"warning",severity:"warning",category:"fact_consistency",owner:"system",repairability:"not_repair_needed",message:`规格错位:“${j}”使用的规格 ${i} 与工程量清单权威(${I})不一致`,suggestion:`按工程量清单将“${j}”的规格统一为 ${I};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。(本条已降级为告警:${void 0===E?`正文该处未能绑定到清单条目的具体对象${void 0===w?"或权威本身逐项多值无唯一口径":""}`:`正文该处尺寸与清单权威跨量级(${i} vs ${y},${E.toFixed(1)} 倍),不是同一属性维度的量(如板材厚度 vs 构件高度/长度)`},不作机器改写,交人工复核)`},location:j,replacement:H?{start:z,end:z+i.length,replacement:H,detail:`规格错位“${j}” ${i}→${H}(以工程量清单锁定口径为准)`}:void 0}),e>=c)return d}}}return d}function a9(a,b){return a8(a,b).map(a=>a.issue)}let ba=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function bb(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>ba.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&ba.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let bc=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,bd=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function be(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=bc.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&bd.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b}let bf=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u,bg=/^(?:焊接|螺栓连接|铆接|法兰连接|承插连接|卡箍连接|粘接|卡压连接|卡扣连接|螺纹连接|高强螺栓连接)(?:固定|安装|连接|紧固)?$/u,bh=/(?:焊接|螺栓连接|铆接|法兰连接|承插连接|卡箍连接|粘接|卡压连接|卡扣连接|螺纹连接|高强螺栓连接)$/u;function bi(a){let b=a.replace(/\s+/gu,""),c=new Set,d=[];{let b=a.split(/\n/u);for(let a=0;a+1<b.length;a+=1){let c=b[a]??"";if(/^\s*\|/u.test(c)&&/^\s*\|[\s:|-]+\|\s*$/u.test((b[a+1]??"").trim()))for(let a of c.split("|")){let b=a.replace(/\s+/gu,"");b.length>=2&&d.push(b)}}}let e=a=>d.some(b=>b.includes(a));for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){let d=bf.test(a[1])||bf.test(a[2]),f=(0,j.m4)(a[1],a[2]);if(!d&&!f||e(a[0]))continue;let g=Math.max(0,(a.index||0)-12),h=Math.min(b.length,(a.index||0)+a[0].length+12),i=b.slice(g,h);!/管线|管道|电缆|给水|排水/u.test(i)&&(!/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(i)&&(!f||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(i))||c.add(`“${a[1]}/${a[2]}”`))}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);bf.test(f)&&c.add(a[0].slice(0,30))}for(let a of b.matchAll(/([一-龥]{2,8})或([一-龥]{2,8})/gu)){let d=bf.test(a[1])||bf.test(a[2]),f=(0,j.m4)(a[1],a[2]);if(!d&&!f||/(?:可能)?(?:达到|超过|大于|小于|高于|低于|不少于|不超过)或(?:达到|超过|大于|小于|高于|低于|不少于|不超过)/u.test(a[0]))continue;let g=b.slice(0,(a.index||0)+a[1].length).split(/[。;,,、]/u).pop()||"";if(/造成|导致|引发|致使|诱发|酿成/u.test(g)||e(a[1])||e(a[2]))continue;let h=Math.max(0,(a.index||0)-12),i=b.slice(h,(a.index||0)+a[1].length);if(/管线|管道|电缆|给水|排水/u.test(i)||!/按|采用|选用|拟用|拟采用|方案|为/u.test(i)&&(!f||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(i)))continue;let k=b.slice(Math.max(0,(a.index||0)-6),a.index||0);if(/临时/u.test(k+a[0])&&/支护|围护|放坡|坡率|开挖/u.test(a[0])||/围挡|警示|防护栏|爬梯|栈桥|便道/u.test(a[0]))continue;let l=b.slice(Math.max(0,(a.index||0)-30),(a.index||0)+a[0].length+12);if(/临时|临建|可拆卸|可周转|撤场/u.test(l)&&/集装箱|活动房|板房|棚房|岗亭|彩钢/u.test(a[1]+a[2])||/顺接|衔接|接顺|接入|连通|找坡|找平/u.test(a[2]))continue;let m=b.slice((a.index||0)+a[0].length,(a.index||0)+a[0].length+6);if(/^(?:顺接|衔接|接顺|接入|连通|找坡|找平)/u.test(m)||/(?:前|后)$/u.test(a[0])||/^(?:之前|之后|前|后)/u.test(m))continue;{let c=Math.max(0,(a.index||0)-8),d=Math.min(b.length,(a.index||0)+a[0].length+8);if(b.slice(c,d).includes("→"))continue}let n=a[1]+a[2];if(/(?:强度不足|固定不牢|松动|变形|开裂|渗漏|破损|脱落|锈蚀|超差|不合格|缺陷|损坏|缺失|偏差|偏移|沉降|位移|错台|起皮|空鼓)/u.test(n)){let c=b.slice((a.index||0)+a[0].length,(a.index||0)+a[0].length+40);if(/返工|返修|整改|修复|加固|更换|补强|补做|处理|消除|纠正|复验|复查|销项|验收/u.test(c))continue}if(bh.test(a[1])&&bg.test(a[2]))continue;let o=a[1].replace(/^.*?(地下连续墙|钢板桩|灌注桩|支护桩|土钉墙|基础|支护|围护|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|形式|体系)/u,"$1");c.add(`${o}或${a[2]}`)}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function bj(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];let c=(()=>{let b=a.split(/\r?\n/u),c=[],d=!1;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b){b[1].length<=3&&(d=/基坑|开挖|支护|土方/u.test(b[2])),d&&c.push(a);continue}d&&c.push(a)}return c.join("\n")})();for(let a of(c?c.replace(/\s+/gu,""):b).matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|低于|高于|按|倍|依据|详见|参考|示意|每|以上|以下|偏差|±0|0\.000)/u.test(b)&&!/\d+(?:\.\d+)?\s*(?:h|小时|天|日|min|周|月|昼夜)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}function bk(a,b){let c=(0,i.z4)(b);if(void 0===c||c<3)return[];let d=[],e=a_(String(c)),f=RegExp(`(?<![\\d.])${e}(?![\\d])`,"u"),g=a.replace(/\s+/gu,""),h=a=>{for(let b of g.matchAll(RegExp(a,"gu"))){let a=b.index??0,c=g.slice(Math.max(0,a-120),a+b[0].length+120);if(f.test(c))return!0}return!1};return c>=3&&!h("危大工程")&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程判定缺失:资料基坑开挖深度 ${c}m(≥3m),正文未在判定结论邻近处给出本工程实际深度值(仅出现判定规则套话不算落地)`,suggestion:`依据住建部令第37号,开挖深度≥3m 属危大工程:在基坑支护/危大工程清单小节写明本工程实际深度 ${c}m 与危大工程判定结论,不得只写判定规则不落地本项目。`}),c>=5&&!h("超过一定规模")&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`超危大工程判定缺失:资料基坑开挖深度 ${c}m(≥5m),正文未在「超过一定规模」判定邻近处给出本工程实际深度值(须同时写明专家论证要求)`,suggestion:`开挖深度≥5m 属超过一定规模的危大工程:写明本工程深度 ${c}m 对应分级结论,专项施工方案必须经专家论证,不得只写判定规则不落地分级。`}),d}function bl(a,b){let c=[b.canonical?.byKey.foundation_support_form?.value,...(b.drawings||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.project||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.preciseFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`)].filter(Boolean).filter(a=>/基坑支护形式|基坑支护方式|支护形式|支护方式|土钉|放坡|喷锚|护坡/u.test(a)&&!/监测|监测频次|闭环|基坑开挖深度/u.test(a));if(0===c.length)return[];let d=[];for(let a of c)for(let b of["土钉墙","放坡","喷锚","挂网喷浆","排桩","灌注桩","地下连续墙","内支撑","锚杆","锚索"])a.includes(b)&&d.push(b);let f=[],g=/不采用|未采用|不设置|未设置|不使用|不宜采用|不得采用|不再出现|不得出现|严禁出现|避免出现|已删除|取消/u,h=["支护桩","冠梁","钻孔灌注桩","灌注桩","地下连续墙","排桩","咬合桩","内支撑"].filter(b=>(b=>{let c=RegExp(b,"gu");for(let b of a.matchAll(c)){let c=a.lastIndexOf("\n",b.index)+1,d=a.indexOf("\n",b.index);-1===d&&(d=a.length);let e=a.slice(c,d).slice(Math.max(0,b.index-c-12),b.index-c);if(!g.test(e))return!0}return!1})(b)&&!d.includes(b));return h.length>0&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式与资料矛盾:正文出现资料中不存在的支护体系词 ${h.join("、")}`,suggestion:`资料基坑支护形式为「${d.join("、")||c[0]?.slice(0,60)}」:删除编造的支护桩/冠梁/灌注桩类表述与对应参数(垂直度偏差/冠梁顶面标高等),按资料支护形式改写。`}),0===d.filter(b=>RegExp(b,"u").test(a)).length&&/基坑|支护/u.test(a)&&f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式未落地:资料基坑支护形式「${d.join("、")||c[0]?.slice(0,60)}」未在正文中出现`,suggestion:`在基坑支护小节写明本工程实际支护形式(${d.join("、")})及对应工艺参数(土钉长度/间距/坡度等),不得以泛化表述回避。`}),f}let bm=["塔式起重机","施工升降机","施工电梯","汽车起重机","汽车吊","混凝土泵车","混凝土泵","挖掘机","装载机","推土机","压路机","平地机","空压机","注浆机","锚杆钻机","混凝土喷射机","喷射机","吊篮","钢筋加工设备","塔吊"],bn=/挖掘机|空压机|注浆机|锚杆钻机|混凝土喷射机|喷射机|推土机/u;function bo(a,b){let c={late:[],inverted:[]},d=function(a){let b=[];for(let c of a.matchAll(/第(\d{2,3})日[^。;;\n|]{0,8}?(?:进场|投入使用|安装|调试)/gu)){let d=c.index||0,e=a.slice(Math.max(0,d-24),d),f=bm.find(a=>e.includes(a));f&&b.push({equipment:f,day:Number(c[1]),raw:`${e.slice(-18)}${c[0].slice(0,20)}`,start:d,end:d+c[1].length+2})}let c=new Set;return b.filter(a=>{let b=`${a.equipment}:${a.raw}`;return!c.has(b)&&(c.add(b),!0)})}(a);if(0===d.length)return c;let f=function(a,b){for(let c of[a,...(b.schedule||[]).map(a=>`${a.key||""}${(0,e.lG)(a.value)}`)]){let a=/(?:计划工期|合同工期|总工期|工期总日历天数)[^\d。;;\n|]{0,12}(\d{1,4})\s*个?\s*日历天/u.exec(c);if(a){let b=Number(a[1]);if(Number.isFinite(b)&&b>=30&&b<=3e3)return b}}}(a,b);void 0!==f&&(c.total=f,c.late=d.filter(a=>a.day>=f));let g=aH(a).filter(a=>"excavation"===a.key).map(a=>a.day);if(g.length>0){let a=Math.min(...g);c.pitDone=a,c.inverted=d.filter(b=>bn.test(b.equipment)&&b.day>a)}return c}function bp(a,b){let c=bo(a,b),d=[];return void 0!==c.total&&c.late.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场时间荒谬:${c.late.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 已达/超过总工期(${c.total}日历天),工程结束时设备尚未进场`,suggestion:`以总进度计划为准核对设备进场计划:大型施工设备必须在总工期结束前进场并完成使用,${c.late.map(a=>a.equipment).join("、")} 的进场日应提前至工程开始阶段,删除矛盾的尾期进场表述。`}),void 0!==c.pitDone&&c.inverted.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场工序倒挂:${c.inverted.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 晚于基坑支护及土方外运完成节点(第${c.pitDone}日),基坑阶段设备未在工序开始前进场`,suggestion:`基坑阶段专用设备必须在基坑开挖/支护开始前完成进场与报验:将 ${c.inverted.map(a=>a.equipment).join("、")} 的进场日调整为早于基坑支护完成节点(第${c.pitDone}日)的日期,删除工序倒挂表述。`}),d}let bq=/关于|定于|对于|至于|由于|基于|鉴于|处于|位于|在于|置于|用于|属于|终于|便于|善于|现在|正在|存在|所在|潜在|实在$/u;function br(a,b){let c=a,d=[];for(let a=1;a<=3;a+=1){let a=bo(c,b),e=new Map;for(let b of[...a.late,...a.inverted])e.set(`${b.start}:${b.end}`,b);if(0===e.size)break;let f=0,g=1/0;for(let a of[...e.values()].sort((a,b)=>b.start-a.start)){let b=a.start,e=c[b-1];if("于"!==e&&"在"!==e||bq.test(c.slice(Math.max(0,b-2),b))||(b-=1),a.end>g)continue;let h=c.slice(b,a.end);c=c.slice(0,b)+"按进度计划"+c.slice(a.end),g=b,f+=1,d.push(`「${h}」→「按进度计划」`)}if(0===f)break}return{markdown:c,fixedCount:d.length,details:d}}let bs=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,bt=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function bu(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let bv=/^\s*\|[\s:|-]+\|/u;function bw(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>bv.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataRows:e.map(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(bx(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function bx(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function by(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let bz=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,bA=a=>a.filter(a=>!bz.test(a));function bB(a){let b=[];for(let c of bw(a)){let a=c.dataRows;if(a.length<4)continue;let d=a=>(a[0]||"").trim(),e=(a,b)=>bx(a,b);for(let f=Math.floor(a.length/2);f<=Math.ceil(a.length/2);f+=1){let g=a.slice(0,f),h=a.slice(f);if(g.length<2||h.length<2)continue;let i=0,j=-1;for(let a of h){let b=d(a);if(b){for(let c=j+1;c<g.length;c+=1)if(d(g[c])===b&&e(a,g[c])>=.5){i+=1,j=c;break}}}let k=i/h.length;if(!(k<.8)){b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`表格内部数据行重复:第 ${c.startLine+1}~${c.endLine+1} 行表格(表头:${c.header.slice(0,3).join("|")})数据行两遍粘贴(${f} 行 + ${h.length} 行,重复匹配率 ${Math.round(100*k)}%)`,suggestion:`删除第二遍重复数据行(保留第一遍 ${f} 行),删除后表格仅保留一份完整数据。`});break}}}return b}function bC(a){let b=[],c=bw(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=bx(e.header,f.header),i=bx(e.firstCol,f.firstCol),j=bx(e.dataCells,f.dataCells),k=Math.max(by(bA(e.dataCells),bA(f.dataCells)),by(bA(f.dataCells),bA(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function bD(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}let bE=15;function bF(a){let b=function(a){let b=[];for(let c of a.split(/\n\s*\n/u)){let a=c.trim();if(!a)continue;let d=a.split(/\n/u).filter(a=>{let b=a.trim();return b&&!/^#{1,6}\s/u.test(b)&&!b.startsWith("|")}).join("\n"),e=[];for(let a of d.split(/[。!?!?]/u)){let b=a.trim().replace(/\s+/gu,"");if(b.length<bE)continue;let c=e.findIndex(a=>a.sentence===b||a.sentence.length>b.length&&a.sentence.length-b.length<=bE&&a.sentence.endsWith(b));c>=0?e[c].count+=1:e.push({sentence:b,count:1})}for(let a of e)a.count>=2&&b.push({sentence:a.sentence,count:a.count})}return b}(a);return 0===b.length?[]:b.slice(0,3).map(({sentence:a,count:b})=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`段落内句子复读 ${b} 次:“${a.slice(0,30)}…”`,suggestion:"同一段落内相同句子只保留首次出现,删除段尾复读的重复句(确定性修复器已接入自动剥离)。"}))}let bG=/^(.+?)(?:((?:\d+|[一二三四五六七八九十]+)))+$/u;function bH(a){let b=[];for(let c of a.matchAll(/^###\s+(.+)$/gmu)){let d=c[1].trim();bG.test(d)&&b.push({raw:d,index:a.lastIndexOf("\n",c.index??0)+1})}return b}function bI(a){let b=bH(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"local_deterministic",message:`目录小节标题含防撞名编号后缀:“${a}”`,suggestion:"正式投标文件目录不允许「(1)(2)」编号后缀小节:确定性修复器已接入(按主题域重命名为语义化标题或合并同基线拆半小节)。"}))}let bJ=/第(\d{1,3})日(?:至|到|~|~|—|-)第(\d{1,3})日/gu;function bK(a){let b=[];for(let c of a.matchAll(bJ))Number(c[1])<=Number(c[2])||b.push({start:c.index??0,end:(c.index??0)+c[0].length,raw:c[0]});return b}function bL(a){let b=bK(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`时间区间倒挂:“${a}”起点大于终点,属时间拼接病句`,suggestion:"删除倒挂区间起点,仅保留终点日期表述(确定性修复器已接入自动剥离)。"}))}function bM(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=bD(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}let bN=/\d{2,}(?:\.\d+)?/gu,bO=/\d+\s*#/gu;function bP(a){return(function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){let d=b[a].trim();!(!d||/^#{1,6}\s/u.test(d)||d.startsWith("|")||/^(?:[-*+•]|\d{1,3}[.、)])\s*/u.test(d))&&((d.match(/[一-龥]/gu)||[]).length<40||c.push({line:a+1,text:d,skeleton:function(a,b){let c=a.replace(/[\s\u3000|*`_]/gu,""),d=new Set;for(let a=0;a+5<=c.length;a+=1)d.add(c.slice(a,a+5));return d}(d.replace(/\d+(?:\.\d+)?/gu,"#"),5),numbers:new Set(d.match(bN)||[]),markers:new Set((d.match(bO)||[]).map(a=>a.replace(/\s/gu,"")))}))}let d=new Map;c.forEach((a,b)=>{for(let c of a.numbers){let a=d.get(c)||[];a.push(b),d.set(c,a)}});let e=new Map;for(let a of d.values())for(let b=0;b<a.length;b+=1)for(let c=b+1;c<a.length;c+=1){let d=`${a[b]}|${a[c]}`;e.set(d,(e.get(d)||0)+1)}let f=[];for(let[a,b]of e){if(b<2)continue;let[d,e]=a.split("|").map(Number),g=c[d],h=c[e];if(2>Math.abs(g.line-h.line))continue;let i=new Set([...g.numbers,...h.numbers]).size,j=0===i?0:b/i;if(j<.6)continue;let k=function(a,b){if(0===a.size||0===b.size)return 0;let c=0;for(let d of a)b.has(d)&&(c+=1);return c/(a.size+b.size-c)}(g.skeleton,h.skeleton);!(k<.3)&&(!(g.markers.size>0)||!(h.markers.size>0)||[...g.markers].some(a=>h.markers.has(a)))&&f.push({firstLine:g.line,secondLine:h.line,skeletonJaccard:Number(k.toFixed(3)),numberOverlap:Number(j.toFixed(2)),excerpt:h.text.slice(0,40)})}return f.sort((a,b)=>a.secondLine-b.secondLine).slice(0,20)})(a).slice(0,3).map(a=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落近似重复:第 ${a.secondLine} 行与第 ${a.firstLine} 行叙述同一批对象与工程量(骨架一致度 ${a.skeletonJaccard}、数值一致度 ${a.numberOverlap}):“${a.excerpt}…”`,suggestion:"两处仅保留信息完整的一处并合并差异(不得改写既有数值与工序事实);重复段落后含原文粘贴来源的,以正文归纳口径为准。",provenance:{detectorId:"paragraph-near-duplicate",fingerprint:(0,e.c6)(`${a.firstLine}|${a.secondLine}|${a.excerpt}`)}}))}function bQ(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(bs))d.add(bu(b[0]));if(c?.extracted)for(let a of c.entries)for(let b of a.text.matchAll(bs))d.add(bu(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(bs)){let a=bu(b[0]);!d.has(a)&&(bt.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位,禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function bR(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let bS=/(?:荣获|曾获|获得过|被评为)\s*[^。;\n]{2,24}/gu,bT=/奖|杯|荣誉|称号|优秀|先进|示范|观摩|文明工地|优质工程/u,bU=/(?:承接过|承建过)\s*[^。;\n]{2,24}/gu,bV=/工程|项目|标段|业绩/u,bW=/完成过\s*(?:[0-90-9一二三四五六七八九十两]+|[多若干]+)\s*(?:个|项|例|座|条|余项|余个)?\s*(?:类似|同类|以上的?)?\s*(?:工程|项目)/gu,bX=/资质证书编号|证书编号|安全生产许可证编号|资质编号|营业执照注册号|统一社会信用代码|证号[::]/gu,bY=/(?:设计|勘察|监理)单位|设计院|勘察院|监理公司|设计研究总院|设计研究院|设计总院/u;function bZ(a,b){if(!b)return[];let c=[];for(let b of a.matchAll(bS))bT.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(bU))bV.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(bW))c.push(b[0].trim());for(let b of a.matchAll(bX))bY.test(function(a,b){let c=b;for(;c>0&&!/[。;;\n]/u.test(a[c-1]);)c-=1;let d=b;for(;d<a.length&&!/[。;;\n]/u.test(a[d]);)d+=1;return a.slice(c,d)}(a,b.index??0))||c.push(b[0].trim());if(0===c.length)return[];let d=[...new Set(c)];return[{level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人身份标记 ${d.length} 处:${d.slice(0,3).map(a=>`“${a.slice(0,30)}”`).join("、")}${d.length>3?" 等":""}(招标暗标要求不得出现明示或暗示具体投标人的说明及标记,包括以往的施工业绩)`,suggestion:"删除或改写身份标记句:以往业绩/获奖表述一律删除;证书资质类表述改写为不自证身份的施工管理口径(如“按规定持证上岗”),不得保留证书编号与奖项名称。"}]}let b$=/人[、,,]材[、,,]机/u,b_=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function b0(a){let b=a.match(b_)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function b1(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!b$.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:b0(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=b0(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}async function b2(a,b,c={}){let d=[],e=(a,b)=>1e-6>Math.abs(a-b),f=[];for(let c of b){let b=c.groups??[];if(b.length<2||new Set(b.map(a=>Math.round(100*a.value))).size<2)continue;let d=RegExp((0,i.Lp)(c.name),"gu"),e=RegExp(`(?<![\\dA-Za-z])(\\d(?:[\\d,]*(?:\\.\\d+)?))\\s*${(0,i.YZ)(c.unit)}(?![0-9a-zA-Z])`,"gui"),g=[];for(let f of a.matchAll(d)){let d=f.index??0,h=d+f[0].length,i=a.lastIndexOf("\n",d)+1,j=a.indexOf("\n",d);if(-1===j&&(j=a.length),/^\s*\|/u.test(a.slice(i,j)))continue;let k=Math.max(i,d-24),l=a.slice(k,d),n=Math.max(l.lastIndexOf("。"),l.lastIndexOf(";"),l.lastIndexOf(";")),o=n>=0?l.slice(n+1):l,p=b.filter(a=>a.group&&o.includes(a.group));if(1!==p.length)continue;let q=p[0],r=a.slice(h,h+24),s=Math.min(...[r.search(/[、。;,]/u),r.search(/\n/u)].filter(a=>a>=0).concat([r.length])),t=r.slice(0,s),u=null;for(let a of t.matchAll(e)){let b=a[1],d=Number(b.replace(/,/gu,""));Number.isFinite(d)&&!(d<=0)&&(null===u||Math.abs(d-c.value)<Math.abs(u.value-c.value))&&(u={offset:h+(a.index??0)+a[0].indexOf(b),value:d,raw:b})}if(!u)continue;let v=a.slice(h,u.offset);(!/[A-Za-z]/u.test(v)||/[\u4e00-\u9fa5]/u.test(v))&&g.push({group:q.group,value:u.value,excerpt:a.slice(d,u.offset+u.raw.length),sentence:(0,m.kE)(a,d,u.offset+u.raw.length-d),flatIndex:-1})}0!==g.length&&f.push({authority:{name:c.name,value:c.value,unit:c.unit},detail:b,pairings:g})}if(0===f.length)return d;let g=[];for(let a of f)for(let b of a.pairings){b.flatIndex=g.length;let c=a.detail.find(a=>a.group===b.group);g.push({id:`xp${b.flatIndex}`,kind:"quantity",subject:`${a.authority.name}(${b.group})`,value:b.value,unit:a.authority.unit,authority:c?.value??a.authority.value,sentence:b.sentence,facts:[`该条目清单分工程明细:${a.detail.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}`]})}let h=c.adjudicate??m.hy,j=await h(g,{diagnostics:c.diagnostics,signal:c.signal});for(let a of f){let b=a.pairings.filter(a=>j.records.get(`xp${a.flatIndex}`)?.conclusion!=="consistent");if(0===b.length)continue;let c=!1;for(let f of b){let b=a.detail.find(a=>a.group===f.group);if(!b||e(b.value,f.value))continue;let g=a.detail.find(a=>a.group!==f.group&&e(a.value,f.value));if(g){d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${f.excerpt.slice(0,40)}”在“${f.group}”语境处取值 ${f.value}${a.authority.unit},该值是“${g.group}”的清单明细值(${f.group} 的清单明细值为 ${b.value}${a.authority.unit})`,suggestion:`以工程量清单分工程明细为准修正“${f.group}”语境:应为 ${b.value}${a.authority.unit},不得沿用“${g.group}”的明细值 ${f.value}${a.authority.unit};修复后全文该条目分工程取值必须与清单明细逐一对应。`}),c=!0;break}}if(c)continue;let f=new Map;for(let a of b){let b=a.value.toFixed(2),c=f.get(b)??new Set;c.add(a.group),f.set(b,c)}for(let[c,e]of f){if(e.size<2)continue;let f=a.detail.filter(a=>e.has(a.group));if(new Set(f.map(a=>Math.round(100*a.value))).size<2)continue;let g=b.find(a=>a.value.toFixed(2)===c);d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${g.excerpt.slice(0,40)}”数值 ${c}${a.authority.unit} 同时出现在“${[...e].join("”“")}”等 ${e.size} 个工程对象语境,而清单明细值互不相同(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")})——至少一处属跨工程同值复制`,suggestion:`逐工程对象按清单明细值修正取值(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}),不得多工程共用同一数值。`});break}}return d}function b3(a){let{phrase:b,first:c,second:d}=a,e=(0,n.Qk)(b,c.phase),f=(0,n.Qk)(b,d.phase);if(e.length<4||f.length<4)return null;let g=e.start<=f.start?c:d,h=g===c?d:c;return{leading:g,trailing:h}}function b4(a,b){let c=[],d=[];if(0===b.length)return{claims:c,ambiguities:d};let e=new Set,f=(f,g,h,i)=>{if(e.has(f))return;let j=Number(g.replace(/[,,]/gu,""));if(!Number.isFinite(j)||j<=0)return;let k=a.lastIndexOf("\n",f)+1,l=a.indexOf("\n",f);-1===l&&(l=a.length);let m=a.slice(k,l);if(/^\s*\|.*\|\s*$/u.test(m)||aO.test(m))return;let o=a.slice(Math.max(k,f-12),f);if(/不少于|不低于|至少|最低|不小于|≥/u.test(o)||/(?:[\u4e00-\u9fa5]{1,3}(?:工|员|长)|司机|班组|队伍?)\s*$/u.test(o))return;let p=function(a,b){let c=(a.match(/[\p{Script=Han}]/gu)||[]).length;if(0===c)return null;let d=null,e={length:0,start:0,end:0};for(let c of b){let b=(0,n.Qk)(a,c.phase);b.length>=4&&(null===d||b.length>e.length)&&(d=c,e=b)}if(!d)return null;if(e.length>=c)return{best:d};for(let c=1;c<a.length-1;c+=1){if(!/[与及和、,,]/u.test(a[c]))continue;let d=b.find(b=>b.phase===a.slice(0,c).trim());if(!d)continue;let e=b.find(b=>b.phase===a.slice(c+1).trim());if(e&&d.value===e.value)return{best:d}}for(let c of[a.slice(0,e.start),a.slice(e.end)])if(!((c.match(/[\p{Script=Han}]/gu)||[]).length<2)){for(let a of b)if(a.phase!==d.phase&&(0,n.Qk)(c,a.phase).length>=4)return{best:d,second:a}}return{best:d}}(h,b);if(!p)return;let q=a.slice(Math.max(k,f-24),Math.min(a.length,f+g.length+1)).trim();if(p.second){e.add(f),d.push({start:f,raw:g,actual:j,phrase:h,first:{phase:p.best.phase,value:p.best.value,trace:p.best.trace},second:{phase:p.second.phase,value:p.second.value,trace:p.second.trace},excerpt:q});return}if(j===p.best.value)return void e.add(f);e.add(f),c.push({start:f,end:f+g.length,raw:g,actual:j,expected:p.best.value,phase:p.best.phase,trace:p.best.trace,channel:i,excerpt:q})};for(let b of a.matchAll(w)){let c=(b.index??0)+b[0].indexOf(b[1]),d=a.lastIndexOf("\n",c)+1,e=z(a,d,c);e&&f(c,b[1],e.replace(/阶段$/u,""),"base")}for(let b of a.matchAll(y)){if(!b[1]||!b[2])continue;let c=b[2],d=(b.index??0)+b[0].lastIndexOf(c);if(e.has(d))continue;let g=Math.max(a.lastIndexOf("。",d),a.lastIndexOf(";",d),a.lastIndexOf(";",d))+1,h=a.length;for(let b of["。",";",";"]){let c=a.indexOf(b,d);-1!==c&&c<h&&(h=c)}/阶段/u.test(a.slice(g,h))&&f(d,c,b[1].trim(),"enumeration")}return{claims:c,ambiguities:d}}function b5(a,b){let{claims:c,ambiguities:d}=b4(a,b),e=[];for(let a of c)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段劳动力数据矛盾:正文“${a.excerpt.slice(0,60)}”取值 ${a.actual} 人,与蓝图分阶段劳动力推导不符(“${a.phase}”阶段应为 ${a.expected} 人)`,suggestion:`分阶段劳动力人数必须以蓝图推导为准:将“${a.phase}”阶段人数统一为 ${a.expected} 人${a.trace?`(依据:${a.trace})`:""},删除其他口径数字。`}});for(let a of d)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段名疑似拼接:正文“${a.excerpt.slice(0,60)}”中的阶段名“${a.phrase}”同时混含“${a.first.phase}”与“${a.second.phase}”两个蓝图阶段,人数 ${a.actual} 人无法归属`,suggestion:`将阶段名拆分表述:“${a.first.phase}”按 ${a.first.value} 人、“${a.second.phase}”按 ${a.second.value} 人(蓝图推导)分句列出,不得把两个阶段名连写成单一阶段。`}});return e.sort((a,b)=>a.position-b.position).slice(0,8).map(a=>a.issue)}function b6(a,b){return b7(a,b).map(a=>a.issue)}function b7(a,b){let c=[];if(0===b.length)return c;let d=/首批|第一批|首期|第一期/gu,e=/剩余|补充|追加/gu,f=/保持|维持|确保|不少于|不低于|控制在|以内|以下/u;for(let g of b){if(!g.name||!Number.isFinite(g.count)||g.count<=0)continue;let b=(0,i.Lp)(g.name),h=RegExp(`${b}[^\\n。;;、,,]{0,4}?([\\d,]+)\\s*(?:台|辆)`,"gu"),j=new Set,k=new Set,l=[],m="";for(let b of a.matchAll(/[^。;;\n]+/gu)){let c=b[0],g=b.index??0,i=[...c.matchAll(d)].map(a=>a.index??0),n=[...c.matchAll(e)].map(a=>a.index??0);if(0!==i.length||0!==n.length)for(let b of c.matchAll(h)){if(!b[1])continue;let c=Number(b[1].replace(/[,,]/gu,""));if(!Number.isFinite(c)||c<=0)continue;let d=b.index??0,e=g+d,h=a.lastIndexOf("\n",e)+1,o=a.indexOf("\n",e);-1===o&&(o=a.length);let p=a.slice(h,o);if(/^\s*\|.*\|\s*$/u.test(p)||aO.test(p))continue;let q=b[0];if(f.test(q)||/以内|以下|上限/u.test(a.slice(e+q.length,e+q.length+4)))continue;let r=i.filter(a=>a<d&&d-a<=40).pop(),s=n.filter(a=>a<d&&d-a<=40).pop();if(void 0!==r||void 0!==s){if(void 0!==s&&(void 0===r||s>r)){k.add(c);let b=/([\d,]+)\s*(?:台|辆)\s*$/u.exec(q);if(b){let c=/(?:约|共|计|近|至少)\s*$/u.exec(q.slice(0,b.index)),d=e+b.index-(c?c[0].length:0),f=e+q.length;l.push({start:d,end:f,excerpt:a.slice(d,f)})}}else j.add(c);m||(m=a.slice(Math.max(h,e-20),Math.min(o,e+q.length)).trim())}}}if(0===j.size||0===k.size)continue;let n=[...j],o=[...k];if(!n.some(a=>o.some(b=>a+b===g.count))&&(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`机械设备分批台数矛盾:“${g.name}”分批投入(首批 ${n.join("/")} 台+剩余 ${o.join("/")} 台)各批组合之和均不等于蓝图机械汇总 ${g.count} 台${m?`(原文“${m.slice(0,50)}”)`:""}`,suggestion:`分批投入的台数之和必须等于蓝图机械汇总台数:将“${g.name}”各批次调整为首批与剩余合计 ${g.count} 台,或删除分批描述仅保留“${g.name} ${g.count} 台”汇总口径。`},removals:l}),c.length>=5))break}return c}function b8(a,b){let c=[];if(!b||!Number.isFinite(b)||b<=0)return c;let d=/交底|考察|封样|编制|审批|报审|报批|培训|演练|签订|组建|建立|采购|调查|备案|申报|进场确认/u;for(let e of a.matchAll(/(?:开工令下发|开工令下达|下达开工令|开工|计划开工)[^。;;\n年月]{0,8}?(?:第\s*(\d+)\s*(?:个)?(?:日历)?日|(\d+)\s*(?:个)?(?:日历)?日)/gu)){let f=e[1]||e[2];if(!f)continue;if("内"===a.slice((e.index??0)+e[0].length,(e.index??0)+e[0].length+1)){let b=a.slice(Math.max(0,(e.index??0)-40),(e.index??0)+e[0].length+40);if(!d.test(b))continue}let g=Number(f);if(!Number.isFinite(g)||g<=0||g<b)continue;let h=(e.index??0)+e[0].lastIndexOf(f),i=a.lastIndexOf("\n",h)+1,j=a.indexOf("\n",h);-1===j&&(j=a.length);let k=a.slice(i,j);if(/^\s*\|.*\|\s*$/u.test(k))continue;let l=a.slice(Math.max(i,h-40),Math.min(j,h+f.length+40));if(!d.test(l)||aO.test(l))continue;let m=a.slice(Math.max(i,h-30),Math.min(j,h+f.length+14)).trim(),n=e.index??0;if(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`前期动作时限矛盾:正文“${m}”将前期准备动作时限设在开工后第 ${g} 日,已达到/超过总工期 ${b} 日(竣工日)——前期动作不可能安排在项目末期`,suggestion:`前期准备动作时限必须落在施工准备阶段内:将第 ${g} 日改为与施工准备阶段相匹配的早期天数(早于总工期 ${b} 日),或删除具体天数改述为“开工令下发后在施工准备阶段内完成”。`},start:n,end:n+e[0].length+ +!!/[前内]/u.test(a[n+e[0].length]||"")}),c.length>=5)break}return c}function b9(a,b){return b8(a,b).map(a=>a.issue)}function ca(a,b){let c=b8(a,b);if(0===c.length)return{markdown:a,fixedCount:0,details:[]};let d=a,e=[],f=1/0;for(let a of[...c].sort((a,b)=>b.start-a.start)){if(a.end>f)continue;let b="在"===d[a.start-1]?"施工准备阶段内":"在施工准备阶段内",c=d.slice(a.start,a.end);d=d.slice(0,a.start)+b+d.slice(a.end),f=a.start,e.push(`「${c}」→「${b}」`)}return{markdown:d,fixedCount:e.length,details:e}}function cb(a){let b=a.split(/\r?\n/u),c=[];b.forEach((a,b)=>{let d=/^(#{3,4})\s+([^\n]+)$/u.exec(a.trim());d&&c.push({index:b,level:d[1].length,title:d[2].trim()})});let d=[];for(let a=0;a<c.length;a+=1){let{index:e,level:f,title:g}=c[a],h=g.replace(/^[\d.]+[\s\u00a0]*/u,"");if(!/工程\s*$/u.test(h))continue;let i=h.replace(/\s*工程\s*$/u,"");if(!i||!/[、与及]/u.test(i))continue;let j=i.split(/[、与及]/u).map(a=>a.trim()).filter(a=>a.length>=2);if(j.length<2)continue;let k=b.length;for(let b=a+1;b<c.length;b+=1)if(c[b].level<=f){k=c[b].index;break}let l=b.slice(e+1,k).join("\n"),m=l.replace(/[、,,]/gu,""),n=j.filter(a=>{if(/^(?:配套|附属|其他|其它|零星|通用)$/u.test(a)||l.includes(a))return!1;let b=a.replace(/[、,,]/gu,"").replace(/(?:安装|施工|工程|作业)$/u,"");if(b.length>=2&&m.includes(b))return!1;if(b.length>=4){let a=b.match(/.{2}/gu)??[];if(a.length>=2&&a.every(a=>m.includes(a)))return!1}return!0});0!==n.length&&d.push({lineIndex:e,level:f,title:g,parts:j,uncovered:n})}return d}let cc=/^(?:合计|小计|总计|汇总|共计|总和|总额|总价|总数量|总量|合价)/u,cd=/^(?:其他|其它|其余|剩余|差额|补差)/u,ce=/^(?:其中|占比|比例|备注|说明|注[::])/u,cf=/待定|待补|待明确|待确认|未定|未明确|暂定|暂按|视情况|部分|若干/u,cg=/约(?![定束])|左右|以上|以下|以内|以外|不少于|不超过|不大于|不小于|不低于|不高于|至少|最少|最多|至多|超过|超出|不足|按实|据实|根据实际|不含|含\s*\d|其中|扣除|另计|另含|除外|等(?![级于额])|±|[≥≤≧≦><><]/u,ch=/[\d))]\s*[~~\-—–至到]\s*[\d((]/u,ci=/^(?:[-—–-//\\]+|无|不适用|不涉及|不包含|n\/a)$/iu,cj="(?<![A-Za-z0-9\\-Φφ])(-?(?:\\d{1,3}(?:[,,]\\d{3})+|\\d+)(?:\\.\\d+)?)\\s*(平方米|立方米|平方|立方|万元|亿元|千元|公里|厘米|毫米|公斤|日历天|小时|分钟|台班|工日|千米|盏|棵|株|袋|桶|块|片|条|根|座|台|套|个|处|道|项|批|次|人|名|户|间|层|樘|孔|眼|栋|幢|米|吨|元|万|千|百|天|周|月|年|℃|cm|kVA|mm|km|kg|kW|m2|m3|m\xb2|m\xb3|㎡|MPa|kPa|ml|L|t|m|%|%|‰|A|V|W)?";function ck(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu,"").replace(/^[((]?\d{1,2}(?:\.\d{1,2})?[.、))]?/u,"")}function cl(a){let b=a.replace(/[*_`]/gu,"").trim(),c={values:[],units:[],uncertain:!1};if(!b||ci.test(b))return c;let d=b.replace(/(?:GB|JGJ|CJJ|CJ|DB|DG|SL|JT|JTS|JTG|TSG|CECS|YB|SH|HG|SY|TB|AQ|JG|JB|ISO|GA|JC|MZ|WW|WH|GH|FZ|QB|YY|HY|LY|NY|SB|SN|WS|YZ|CB|EJ|HB|HS|MH|QJ|SC|SJ|TY|ZB)\s*\d*(?:\s*[A-Za-z])?(?:\s*\/\s*T)?\s*[\d.\-/·]+/giu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*[-/.月]\s*\d{1,2}\s*日?/gu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*月?/gu," ").replace(/\d{1,2}\s*月\s*\d{1,2}\s*日/gu," ").replace(/(?:19|20)\d{2}\s*年/gu," ").replace(/\d{1,2}(?:\.\d+)?\s*[::]\s*\d{1,2}(?:\.\d+)?/gu," ").replace(/第\s*\d+(?:\.\d+)?\s*(?:章|节|条|款|项|页|版|期|批|次|轮|步|道|层|日历天|季度|个?季度|阶段|部分|天|日|周|月|年)/gu," ").replace(/(?:详见|参见)\s*(?:第\s*)?\d[\d.]*(?:节|条|章|表|图|页|款)?/gu," ").replace(/(?:见|根据|依据|按照|依照|执行|符合)\s*第?\s*\d[\d.]*(?:节|条|章|表|图|页|款)/gu," ").replace(/[A-Za-z]{1,4}\s*[--]\s*\d+(?:\.\d+)?/gu," ").replace(/(?<![\d.])\d{1,2}(?:\.\d{1,2}){2,}(?!\d)/gu," ").replace(/(?:^|[\s、,,;;((])\d{1,2}\s*[.、))](?=\s*(?:\D|$))/gu," ").replace(/\d[\d,]*(?:\.\d+)?(?:\s*[×✕xX*]\s*\d[\d,]*(?:\.\d+)?)+/gu," ").replace(/\d{1,4}(?:\s*\/\s*\d{1,4})+/gu," ");if(cf.test(d))return{...c,uncertain:!0};if(!/\d/u.test(d))return c;if(cg.test(d)||ch.test(d))return{...c,uncertain:!0};let e=[...d.matchAll(RegExp(cj,"gu"))];if(0===e.length)return c;if(""!==d.replace(RegExp(cj,"gu")," ").replace(/[^\u4e00-\u9fa5a-z]/giu,"")&&e.some(a=>!a[2]))return{...c,uncertain:!0};for(let a of e){let b=Number(a[1].replace(/[,,]/gu,""));Number.isFinite(b)&&(c.values.push(b),c.units.push(function(a){let b=(a??"").trim().toLowerCase();return""===b?"":/^(?:m2|m²|㎡|平方米|平方|平米)$/u.test(b)?"m2":/^(?:m3|m³|立方米|立方|方)$/u.test(b)?"m3":/^(?:人|名|员|人员)$/u.test(b)?"人":"%"===b||"%"===b?"%":/^(?:千米|公里)$/u.test(b)?"km":/^(?:米|m)$/u.test(b)?"m":/^(?:吨|t)$/u.test(b)?"t":/^(?:公斤|千克|kg)$/u.test(b)?"kg":b}(a[2])))}return c}function cm(a){let b=cl(a);return b.uncertain||1!==b.values.length?null:{value:b.values[0],unit:b.units[0]??""}}function cn(a){let b=0,c=0,d=new Set;for(let e of a){let a=e.replace(/[*_`]/gu,"").trim();if(!a)continue;let f=cl(a);if(f.uncertain||cd.test(ck(a))&&0===f.values.length)return null;if(0!==f.values.length){for(let a of f.values)b+=a,c+=1;for(let a of f.units)a&&d.add(a)}}return d.size>1?null:{sum:b,count:c,unit:1===d.size?[...d][0]:""}}function co(a){return String(Math.round(100*a)/100)}function cp(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu," ").trim().slice(0,24)}function cq(a){let b=a.header,c=a.dataRows;if(0===c.length||0===b.length)return[];let d=b.map((a,b)=>b).filter(a=>cc.test(ck(b[a]??""))),e=c.map((a,b)=>b).filter(a=>cc.test(ck(c[a][0]??"")));if(d.length>1||e.length>1)return[];let f=[],g=Math.max(b.length,...c.map(a=>a.length)),h=1===d.length?d[0]:-1,i=1===e.length?e[0]:-1;if(h>0&&c.forEach((a,c)=>{if(c===i||ce.test(ck(a[0]??"")))return;let d=a[h];if(void 0===d)return;let e=cm(d);if(!e)return;let j=[];for(let b=1;b<g;b+=1)b!==h&&j.push(a[b]??"");let k=cn(j);if(!k||k.count<2||e.unit&&k.unit&&e.unit!==k.unit)return;let l=Math.abs(e.value-k.sum);if(l<=Math.max(1,.005*Math.abs(e.value)))return;let m=cp(a[0]??"")||`第 ${c+1} 行`,n=cp(b[h]??"")||"合计";f.push(`「${m}」行:${n} ${co(e.value)}${e.unit} ≠ 分项和 ${co(k.sum)}${k.unit}(差 ${co(l)})`)}),i>=0){let a=c[i];for(let d=1;d<g;d+=1){if(d===h)continue;let e=a[d];if(void 0===e)continue;let g=cm(e);if(!g)continue;let j=cn(c.filter((a,b)=>b!==i&&!ce.test(ck(a[0]??""))).map(a=>a[d]??""));if(!j||j.count<2||g.unit&&j.unit&&g.unit!==j.unit)continue;let k=Math.abs(g.value-j.sum);if(k<=Math.max(1,.005*Math.abs(g.value)))continue;let l=cp(a[0]??"")||"合计",m=cp(b[d]??"")||`第 ${d+1} 列`;f.push(`「${m}」列:${l} ${co(g.value)}${g.unit} ≠ 分项和 ${co(j.sum)}${j.unit}(差 ${co(k)})`)}}return f}function cr(a){let b=bw(a);if(0===b.length)return[];let c=[];for(let a of b){let b=cq(a);if(0!==b.length&&(c.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",message:`生成后事实反查失败:表格算术不自洽 ${b.length} 处(${b.slice(0,3).join(";")}${b.length>3?" 等":""})`,suggestion:"表内「合计」必须等于分项之和:以分项重算合计,或按权威数据修正分项;台账类保留显性「其他」差额项并给出数值;只允许修正表内数值,严禁编造无来源数据。"}),c.length>=5))break}return c}function cs(a){return bw(a).reduce((a,b)=>a+cq(b).length,0)}function ct(a,b){let c=b.projectName||"";if("village-municipal"===b.blueprintStrategyId||/自然村|美丽乡村|宜居|乡村振兴|行政村|村组|村庄/u.test(c))return[];let d=["自然村","村内","村庄","村民","多村并行","村组","各村"].map(b=>({term:b,count:(a.match(RegExp(b,"gu"))||[]).length})).filter(a=>a.count>0);if(0===d.length)return[];let e=d.reduce((a,b)=>a+b.count,0);return[{level:"error",severity:"blocker",category:"scope",message:`项目类型与正文用词矛盾:本项目非乡村类${c?`(${c})`:""},正文却出现乡村专有表述 ${d.map(a=>`「${a.term}」${a.count} 处`).join("、")}(合计 ${e} 处)`,suggestion:"按项目实际类型统一叙述口径:乡村专有表述应改为对应业务称谓(如「自然村分组」→「单位工程/施工区段」、「村内流水作业」→「区段内流水作业」);若项目确为乡村类,请检查项目名与蓝图策略选型后重新生成。"}]}let cu=[{figure:/进度|工期|横道|网络/u,table:/进度|工期|节点|工序/u,label:"进度计划表"},{figure:/平面|布置|总平面/u,table:/临时设施|临时用地|平面|设施配置/u,label:"临时设施/用地表"},{figure:/组织|机构|岗位|职责/u,table:/岗位|职责|机构|管理人员/u,label:"项目管理机构/岗位职责表"},{figure:/劳动力|人力/u,table:/劳动力|工种|人数/u,label:"劳动力计划表"},{figure:/机械|设备/u,table:/机械|设备|进场/u,label:"机械设备表"},{figure:/材料|物资/u,table:/材料|物资/u,label:"材料计划表"}];function cv(a,b){let c=[],d=a.split("\n"),f=/^图\s*\d+(?:[-—–-]\d+)?\s+\S+$/u,g=/^图\s+[^\s,。;:]{2,36}$/u,h=d.map((a,b)=>({text:a.trim(),index:b})).filter(a=>f.test(a.text)||g.test(a.text)),i=d.map((a,b)=>({text:a.trim(),index:b})).filter(a=>/!\[[^\]]*\]\([^)]*\)/u.test(a.text)||/<img\b/iu.test(a.text));for(let f of((h.length>0||i.length>0)&&c.push({level:"error",severity:"blocker",category:"format",provenance:{detectorId:"figure-substitute-table",fingerprint:(0,e.c6)(a)},message:`正文零图口径违规:图题/图号 ${h.length} 处、图片引用 ${i.length} 处`,suggestion:`正文只出表:删除全部图题、图号与图片引用,图类要求一律改写为等效数据表(进度类→工序表、机构类→岗位层级表、平面类→临时设施用地表)并加表题。示例:${(h[0]?.text||i[0]?.text||"").slice(0,40)}`}),b)){let a=cu.find(a=>a.figure.test(f.name)),b=a?.table??/./u;d.some(a=>{let c=a.trim();return!!/^\|.+\|$/u.test(c)&&b.test(c)})||c.push({level:"warning",severity:"warning",category:"structure",message:`图类要求未以数据表落实:「${f.name}」(${f.chapterTitle})${a?`(应至少提供${a.label})`:""}`,suggestion:"图类要求一律以等效数据表承载同一信息(进度图→进度计划表、平面布置图→临时设施用地表、机构图→岗位层级表);无对应数据则该项要求落空,须补齐数据而非留空。"})}return c}},36003:(a,b,c)=>{c.d(b,{AI:()=>V,Br:()=>X,D6:()=>$,Y8:()=>E,Ym:()=>K,_9:()=>Z,eL:()=>q.eL,fk:()=>_,hZ:()=>F,nl:()=>ad,qX:()=>G,uQ:()=>W,w9:()=>C,xu:()=>q.xu});var d=c(76760),e=c(78217),f=c(70933),g=c(30836),h=c(40299),i=c(95734),j=c(22157),k=c(46482),l=c(71001),m=c(43378),n=c(52639),o=c(40693),p=c(49350),q=c(22213),r=c(91943),s=c(56963),t=c(18274),u=c(76193),v=c(21702),w=c(52922),x=c(41991),y=c(1358),z=c(3063),A=c(54185),B=c(80572);function C(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];for(let a of(c.some(a=>/资料未提供|系统暂未从知识库确认/u.test(a.content))&&d.push({level:"warning",message:"存在系统暂未从知识库确认的章节内容",suggestion:"请检查项目角色配置、文件绑定顺序和事实抽取落位结果。"}),c)){let b=function(a){let b=a.blockDegradation;if(b&&Array.isArray(b.droppedBlocks)&&0!==b.droppedBlocks.length)return b}(a);if(!b)continue;let{head:c,details:e}=_(b),f=b.droppedBlocks.map(a=>a.title).join("、"),g=[...new Set(b.droppedBlocks.map(a=>a.reason))].join(";");d.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"manual_review",chapterId:a.id,sectionTitle:b.droppedBlocks[0]?.title,message:`${a.title} 章级显式降级:${c}(失败原因:${g})`,suggestion:`本章已保留其余块正文,失守块无正文(不填充兜底内容)。请针对「${f}」在「${a.title}」对应位置定向补写或重生成后重新导出:${g}`,provenance:{detectorId:"chapter-block-degradation",fingerprint:(0,j.c6)(e.join("|"))}})}return b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"warning",message:a,suggestion:"请根据当前模板绑定的角色、文件证据和用户要求复核取值口径。"}))),d}let D=/\b\d+(?:\.\d+)?\s*(?:日历天|小时|分钟|天|周|月|年|万元|元|台|套|个|项|批|次|份|人)(?=[。,,;;::、\s]|$)/gu;function E(a){let b=new Set;for(let c of a){let a=(0,j.lG)(c.content).replace(/\s+/gu," ");if((!/报价明细|投标报价|单价|合价|综合单价|预留金|税率|增值税|利润|结算/u.test(a)||/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(a))&&!/OCR|识别错误|乱码|无法确认|疑似|不确定|语义断裂/u.test(a)){for(let c of a.matchAll(t._W))b.add(c[0].trim());for(let c of a.matchAll(D))b.add(c[0].trim());if(b.size>=40)break}}return[...b].slice(0,40)}function F(a){let b=a.spec?.chapterRules.find(b=>b.id===a.chapter.id||b.title===a.chapter.title),c=(b?.requiredFactIds||[]).map(b=>a.spec?.factFields.find(a=>a.id===b)?.name).filter(Boolean),d=[...new Set([...a.chapter.requiredFacts,...c,...a.plan?.requiredContents||[],...a.plan?.evidenceNeeds||[],...(a.resolvedFactNeeds||[]).filter(a=>a.need.required).map(a=>a.need.label)].filter(Boolean))],e=a.roleFacts.map(({fact:a})=>`- ${a.key}:${(0,f.eE)((0,j.lG)(a.value))}`),g=(a.resolvedFactNeeds||[]).flatMap(a=>a.facts),h=a.indexedFacts||[],i=g.length>0?[]:h.map(a=>`- ${a.key||a.fieldName||"资料事实"}:${(0,f.eE)((0,j.lG)(a.value))}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`),k=[...g,...h].filter(a=>/建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`)).filter((a,b,c)=>c.findIndex(b=>`${b.key||b.fieldName}:${(0,j.lG)(b.value)}`==`${a.key||a.fieldName}:${(0,j.lG)(a.value)}`)===b),l=[...new Set([...E(a.evidence),...g.map(a=>(0,j.lG)(a.value)).filter(a=>t.sv.test(a)),...h.map(a=>(0,j.lG)(a.value)).filter(a=>t.sv.test(a))])],m=new Set([...a.evidence.map(a=>a.filePath),...g.map(a=>a.sourceFile),...(a.indexedFacts||[]).map(a=>a.sourceFile)]).size,n=(a.resolvedFactNeeds||[]).filter(a=>"satisfied"!==a.status&&a.need.required).map(a=>a.need.label),o=function(a){if(!a)return[];let b=[];for(let[c,d]of Object.entries(a)){if(d.length<2)continue;let a=d.filter((a,b,c)=>c.findIndex(b=>b.location===a.location&&b.spec===a.spec)===b);a.length<2||b.push(`- ${c}:${a.slice(0,8).map(a=>`${a.location}:${a.spec}`).join("|")}`)}return b.slice(0,12)}(a.specAuthorityMap);return["【本章事实覆盖与参数落位要求】",d.length?`必须优先覆盖的事实/要求:
|
|
47
47
|
${d.map(a=>`- ${a}`).join("\n")}`:"",e.length?`角色节点已抽取事实:
|
|
48
48
|
${e.join("\n")}`:"",k.length?`项目基础事实卡片(资料已明确,必须优先使用,不得输出任何占位话术;其中工程地点、建设规模、计划工期等总述数据只在项目概况/工程概况类章节集中交代,其他章节仅可引用所需的具体数字,不得复述完整概况段):
|
|
49
49
|
${k.map(a=>`- ${a.key||a.fieldName}:${(0,f.eE)((0,j.lG)(a.value))}${a.sourceFile?`(来源:${a.sourceFile.split("/").pop()})`:""}`).join("\n")}
|
|
50
50
|
项目基本信息表必须使用固定表头:| 信息项 | 内容 |,不得使用“序号|项目名称|内容参数”表头,不得输出后台溯源列。`:"",o.length?`本章材料规格-部位对照表(同一材料的多种规格必须按所属部位/分部分项分别使用,禁止全文统一为一种规格;对照关系以工程量清单为准,写错部位视同数据错误):
|
|
51
51
|
${o.join("\n")}`:"",l.length?`本章资料中可直接使用的可靠精确参数/编号:${l.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、项目概况、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。量化参数落位是硬性验收项:本章正文必须达到每千字不少于 2 个不同量化参数的密度(以上方清单参数优先),同一参数不得反复堆砌凑数;当本章绑定材料可落位参数不足 2 个/千字时,以材料全部参数落位为准,不得从行业惯例或相邻章节借参数凑数——参数不足仅在「材料中仍有未落位参数」时构成打回理由。项目基础事实中的合同估算价、计划工期可用于项目概况;不得写入报价明细、单价、税率、预留金。`:"",n.length?`当前事实需求仍未充分确认:${n.join("、")}。未确认项不得编造;但已满足事实需求中的资料事实必须写入对应小节。`:"",a.missingFacts.length?`模板显式要求中当前检索未充分命中的项:${a.missingFacts.join("、")}。未命中项不得编造,但不得因此省略上方已经明确的可靠参数。`:"",a.factNeedsPrompt||"",i.length?`全局资料事实索引匹配到的本章可写事实:
|
|
52
|
-
${i.join("\n")}`:"",`本章可用材料来源约 ${m} 个文件,正文必须按事实需求把可用事实内化到对应小节,不得单列后台资料清单。`].filter(Boolean).join("\n")}function
|
|
53
|
-
${j}`:a}async function
|
|
52
|
+
${i.join("\n")}`:"",`本章可用材料来源约 ${m} 个文件,正文必须按事实需求把可用事实内化到对应小节,不得单列后台资料清单。`].filter(Boolean).join("\n")}function G(a){let b=(0,B.z)().factCoverageCap;if(0===b)return a;let c=Number.isFinite(b)&&b>0?Math.floor(b):6e3;if(!a||a.length<=c)return a;let d=a.split("\n"),e=[],f=0;for(let a of d){if(f+a.length+1>c)break;e.push(a),f+=a.length+1}let g=d.slice(e.length).filter(Boolean),h=[],i=0;for(let a of g){let b=a.slice(0,40);if(i+b.length+1>600)break;h.push(b),i+=b.length+1}let j=g.length>0?`(本章事实索引超出注入预算已截断 ${g.length} 条${h.length>0?`,缺口清单:${h.join(";")}${h.length<g.length?" 等":""}`:""}。注意:这部分事实**本次未注入写作上下文**,绑定材料与证据注入另有独立预算、不保证覆盖它们;如需全量注入,可将 DOCUMENT_TUNING_PROFILE.factCoverageCap 设为 0)`:"";return j?`${e.join("\n")}
|
|
53
|
+
${j}`:a}async function H(a,b,c,d,e,g,j,k="",p={}){let q=(0,f.QO)(b,c),r=!!p.sharedFactLayerText,s={requiredFacts:b.requiredFacts,skipT0:r,skipT2Catalog:!!p.skipT2Catalog,rankBoost:p.evidenceRankBoost,onlyRankBoosted:p.onlyRankBoosted,diagnostics:p.diagnostics},t=(0,f.ks)(q,{maxChars:(0,f.Pc)(p.targetWords||p.minWords,p.evidenceFloorChars,p.evidenceCeilingChars),...s}),u=function(a){let b=function(a){if(!a)return[];let b=[];for(let c of a.split(/\r?\n|[。;;]/u)){let a=c.trim();if(!(a.length<4)&&!(a.length>240)&&/计划工期|合同工期|工期|日历天|建设地点|工程地点|建设规模|工程规模|建筑面积|质量标准|质量目标|招标范围|施工范围|工作内容|合同估算|投资估算|最高投标限价|招标控制价|暂列金额|安全目标|文明施工目标|项目名称|工程名称/u.test(a)&&(!/(?:请|务必|不得|禁止|不要|要求你|你需要|生成|输出|格式|模板)/u.test(a)||/(?:日历天|㎡|m2|平方米|万元|元|米|天|%|层|栋|台|套)/u.test(a))&&(b.push(a),b.length>=24))break}return[...new Set(b)]}(a);return 0===b.length?"":["【用户提示词明确给定的事实——最高优先级,必须原样写入正文相关小节】",...b.map(a=>`- ${a}`),"这些事实来自用户要求;若与绑定材料中的数值冲突,以绑定材料为准。"].join("\n")}(j),v=b.sections?.length?`本章小节由生成前规划得到(含用户提示词/大纲声明的固定小节),必须**逐节**以下列名称输出为三级标题(形如「### X.X 小节名」),顺序与之保持一致:
|
|
54
54
|
${b.sections.map(a=>`- ${a}`).join("\n")}
|
|
55
|
-
约束:小节名必须与本清单逐字一致(不得改名、不得合并、不得省略);下列条目的列表符号仅用于排序,禁止把编号或列表符号写进标题;禁止把小节降级为四级标题、也禁止把小节名写成正文中的列举条目;每个小节标题下必须有实质正文。`:"本章没有预设小节;请按用户提示词、模板章节、角色要求和绑定材料自然组织正文。",w=function(a,b,c){let d=function(a,b,c){let d=(0,l.k2)(a.sections?.filter(Boolean)||[],a.title);if(0===d.length)return[];if(c&&c.length>0){let a=d.map(a=>{let b=c.find(b=>b.words>0&&b.title===a);return b?b.words:c.find(b=>b.words>0&&(0,l.kw)(b.title,a))?.words});if(a.every(a=>"number"==typeof a&&a>0))return d.map((b,c)=>({title:b,targetWords:a[c]}))}let e=Math.max(1,Math.floor(b/d.length)),f=Math.max(0,b-e*d.length);return d.map((a,b)=>({title:a,targetWords:0===b?e+f:e}))}(a,b,c);return 0===d.length?"":["本节小节篇幅上限(逐点控制、不得超出;在各自上限内按材料深度展开):",...d.map(a=>`- ${a.title}:不超过 ${
|
|
55
|
+
约束:小节名必须与本清单逐字一致(不得改名、不得合并、不得省略);下列条目的列表符号仅用于排序,禁止把编号或列表符号写进标题;禁止把小节降级为四级标题、也禁止把小节名写成正文中的列举条目;每个小节标题下必须有实质正文。`:"本章没有预设小节;请按用户提示词、模板章节、角色要求和绑定材料自然组织正文。",w=function(a,b,c){let d=function(a,b,c){let d=(0,l.k2)(a.sections?.filter(Boolean)||[],a.title);if(0===d.length)return[];if(c&&c.length>0){let a=d.map(a=>{let b=c.find(b=>b.words>0&&b.title===a);return b?b.words:c.find(b=>b.words>0&&(0,l.kw)(b.title,a))?.words});if(a.every(a=>"number"==typeof a&&a>0))return d.map((b,c)=>({title:b,targetWords:a[c]}))}let e=Math.max(1,Math.floor(b/d.length)),f=Math.max(0,b-e*d.length);return d.map((a,b)=>({title:a,targetWords:0===b?e+f:e}))}(a,b,c);return 0===d.length?"":["本节小节篇幅上限(逐点控制、不得超出;在各自上限内按材料深度展开):",...d.map(a=>`- ${a.title}:不超过 ${I(a.targetWords)} 字,并写入与该小节相关的材料事实、适用边界和必要说明。`)].join("\n")}(b,p.targetWords||p.minWords||0,p.sectionQuotas),x=(0,n._C)(p.bidComposition)?"":(0,m.T4)(b),y=(0,n._C)(p.bidComposition)?"":(0,m.Y$)(b),A=(0,o.Ls)(b),B=(0,o.db)(b),C=(0,o.FI)({templateName:a.name,requirement:j,chapters:[b],materialText:g}),D=(0,z.vN)(b.title,b.sections||[]),E=p.compactProjectContext?p.scopedProjectContext?function(a,b=2e3){let c=a.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean),d=[],e=[],f=[],g=[],h=[],i="body";for(let a of c){if(a.startsWith("【招标文件评分项要求")){i="requirements",d.push(a);continue}if(a.startsWith("可信基础事实主表")){i="facts",e.push(a);continue}if(a.startsWith("章节专业任务卡:")){i="taskCard",f.push(a);continue}if(a.startsWith("章节实施方案:")){i="executionPlan",g.push(a);continue}if("requirements"===i)if(a.startsWith("【"))i="body";else{d.push(a);continue}if("facts"===i){if(a.startsWith("- ")){e.push(a);continue}i="body"}if("taskCard"===i){f.push(a);continue}if("executionPlan"===i){if(a.startsWith("- ")){g.push(a);continue}i="body"}h.push(a)}let j=h.filter(a=>/【.+】/u.test(a)||/=/u.test(a)||/^\d+\.\s+/u.test(a)||/:\S{1,40}$/u.test(a)),k=j.length>=8?j:h,l=[d.join("\n").trim(),e.join("\n").trim(),f.join("\n").trim(),g.join("\n").trim()].filter(Boolean).join("\n"),m=k.join("\n").trim(),n=(a,b)=>a.length<=b?a:`${a.slice(0,b)}
|
|
56
56
|
(上下文已截断,完整信息见绑定材料与证据)`;return l?`${l}
|
|
57
57
|
${n(m,Math.max(400,b-l.length-20))}`:n(m,b)}(g):function(a,b=2e3){let c=a.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean),d=[],e=[],f=!1;for(let a of c){if(a.startsWith("【招标文件评分项要求")){f=!0,d.push(a);continue}f&&a.startsWith("【")&&(f=!1),(f?d:e).push(a)}let g=[],h=[],i=!1;for(let a of e){if(a.startsWith("可信基础事实主表")){i=!0,g.push(a);continue}if(i&&a.startsWith("- ")){g.push(a);continue}i&&!a.startsWith("- ")&&(i=!1),h.push(a)}let j=h.filter(a=>/【.+】/u.test(a)||/=/u.test(a)||/^\d+\.\s+/u.test(a)||/:\S{1,40}$/u.test(a)),k=j.length>=8?j:h,l=d.join("\n").trim(),m=g.join("\n").trim(),n=k.join("\n").trim(),o=(a,b)=>a.length<=b?a:`${a.slice(0,b)}
|
|
58
58
|
(上下文已截断,完整信息见绑定材料与证据)`,p=[l,m].filter(Boolean).join("\n");return p?`${p}
|
|
59
|
-
${o(n,Math.max(400,b-p.length-20))}`:o(n,b)}(g):g,F=[(0,h.b_)(),p.forbidDrawingImages?"图片类材料只作为文本事实依据;禁止插入图片或 Markdown 图片语法。":"",(0,n.nD)(p.bidComposition)].filter(Boolean).join("\n\n"),
|
|
59
|
+
${o(n,Math.max(400,b-p.length-20))}`:o(n,b)}(g):g,F=[(0,h.b_)(),p.forbidDrawingImages?"图片类材料只作为文本事实依据;禁止插入图片或 Markdown 图片语法。":"",(0,n.nD)(p.bidComposition)].filter(Boolean).join("\n\n"),G=function(a){let b=I(a);return`- 保留章节标题;本节正文总字数不超过 ${b} 字(控制在 ${Math.round(.85*b)}~${b} 字之间),超出即不合格。`}(p.targetWords||p.minWords||1e3),J=[e?`配置写作主控提示词:
|
|
60
60
|
${e}`:"",`文档模板:${a.name}`,`章节目的:${b.purpose}`,j?`用户要求:${j}`:"",u,g?`上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
|
|
61
|
-
${E}`:"",p.sharedFactLayerText||"",p.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"",p.chapterLevelContext||"","请生成可直接导出的 Markdown 章节,要求:","- 内容必须遵循用户提示词、模板章节、提示词角色、项目资料包和自动识别的资料类型;不得编造材料未提供的项目专属事实;任何带数值、工程量、规格、型号、品牌、参数的表述必须逐字来自绑定材料、蓝图参数桶或清单事实锁,材料中没有对应值时不得猜测填充、不得以行业惯例或公共知识为由虚构数值;公共知识豁免仅限法律法规名称、标准规范名称与编号(不带本项目数值)以及通用工艺做法表述,可依据现行有效版本直接引用。","- 将材料要点自然融入正文;不要输出系统证据清单、中间分析过程或后台流程话术。",h.KX,`章节标题:${b.title}`,
|
|
61
|
+
${E}`:"",p.sharedFactLayerText||"",p.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"",p.chapterLevelContext||"","请生成可直接导出的 Markdown 章节,要求:","- 内容必须遵循用户提示词、模板章节、提示词角色、项目资料包和自动识别的资料类型;不得编造材料未提供的项目专属事实;任何带数值、工程量、规格、型号、品牌、参数的表述必须逐字来自绑定材料、蓝图参数桶或清单事实锁,材料中没有对应值时不得猜测填充、不得以行业惯例或公共知识为由虚构数值;公共知识豁免仅限法律法规名称、标准规范名称与编号(不带本项目数值)以及通用工艺做法表述,可依据现行有效版本直接引用。","- 将材料要点自然融入正文;不要输出系统证据清单、中间分析过程或后台流程话术。",h.KX,`章节标题:${b.title}`,G,b.sections?.length?"- 必须完整包含已规划小节,每节以「### X.X 小节名」三级标题逐节输出(小节名逐字一致,不得改名/合并/省略,不得降级为四级标题或写成列举条目);不要新增未规划的二级小节。":"- 未预设小节时,不要为了凑结构强行新增小节。",(0,n._C)(p.bidComposition)?"":b.tablePlans?.length?"- 本章存在结构化表格规划时,必须输出正式 Markdown 表格;表头必须严格使用规划字段,不得擅自改字段、删字段或增加后台溯源列。":b.tableSections?.length?`- 以下小节可使用表格辅助表达:${b.tableSections.join("、")}。`:"",(0,n._C)(p.bidComposition)?"":b.tablePlans?.length?"- 表格字段值必须优先来自项目图谱、可信事实和绑定材料;projectFactOnly 字段不得编造,也不得写任何固定占位话术。":"",v,w,x,y,A,B,C,...D,p.blueprintDataText||"",p.blueprintSliceText||"",p.blueprintMustCiteHint?`【本章蓝图锁定数值(正文必须逐条原样出现且与给定值完全一致)】${p.blueprintMustCiteHint}`:"",k||"","",t?"绑定材料:":"",t].filter(Boolean).join("\n"),K={l0:F.length,l1:(0,i.CX)([e?`配置写作主控提示词:
|
|
62
62
|
${e}`:"",j?`用户要求:${j}`:"",u,"请生成可直接导出的 Markdown 章节,要求:","- 内容必须遵循用户提示词、模板章节、提示词角色、项目资料包和自动识别的资料类型;不得编造材料未提供的项目专属事实;任何带数值、工程量、规格、型号、品牌、参数的表述必须逐字来自绑定材料、蓝图参数桶或清单事实锁,材料中没有对应值时不得猜测填充、不得以行业惯例或公共知识为由虚构数值;公共知识豁免仅限法律法规名称、标准规范名称与编号(不带本项目数值)以及通用工艺做法表述,可依据现行有效版本直接引用。","- 将材料要点自然融入正文;不要输出系统证据清单、中间分析过程或后台流程话术。",h.KX]),l2:(0,i.CX)([`文档模板:${a.name}`,`章节目的:${b.purpose}`,g?`上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
|
|
63
|
-
${E}`:"",p.sharedFactLayerText||"",p.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"",p.chapterLevelContext||""]),l3:(0,i.CX)([`章节标题:${b.title}`,
|
|
63
|
+
${E}`:"",p.sharedFactLayerText||"",p.factCoverageContext||"",d.length?`需要特别补足的信息:${d.join("、")}`:"",p.chapterLevelContext||""]),l3:(0,i.CX)([`章节标题:${b.title}`,G,b.sections?.length?"- 必须完整包含已规划小节;不要新增未规划的二级小节。":"- 未预设小节时,不要为了凑结构强行新增小节。",b.tablePlans?.length?"- 本章存在结构化表格规划时,必须输出正式 Markdown 表格;表头必须严格使用规划字段,不得擅自改字段、删字段或增加后台溯源列。":b.tableSections?.length?`- 以下小节可使用表格辅助表达:${b.tableSections.join("、")}。`:"",b.tablePlans?.length?"- 表格字段值必须优先来自项目图谱、可信事实和绑定材料;projectFactOnly 字段不得编造,也不得写任何固定占位话术。":"",v,w,x,y,A,B,C,...D,p.blueprintDataText||"",p.blueprintSliceText||"",k||"",t?"绑定材料:":"",t])},L=await (0,i.rI)(F,J,!1,{maxTokens:p.maxTokens,signal:p.signal,diagnostics:p.diagnostics,contextLayers:K,prefixKey:`writer-block:${b.id}`});if(L&&!(L.length<120))return(0,h.kT)((0,h.FD)(L.startsWith("## ")?L:`## ${b.title}
|
|
64
64
|
|
|
65
|
-
${L}`,!!p.forbidDrawingImages))}function
|
|
65
|
+
${L}`,!!p.forbidDrawingImages))}function I(a){return Math.max(1,Math.round(.75*a))}function J(a){return[...new Set((a.match(/[\p{Script=Han}]{2,}|[A-Za-z0-9_-]{3,}/gu)||[]).map(a=>a.toLowerCase()))]}function K(a,b,c){let d=J([a,b.title,...b.requiredFacts||[]].join(" ")),e=/项目概况|工程概况|总体|部署|施工方案|工期|进度|质量|安全|资源|材料|设备/u.test(a),f=c.map((b,c)=>{let f=`${b.filePath}
|
|
66
66
|
${b.sectionTitle||""}
|
|
67
67
|
${b.content}`.toLowerCase(),g=`${b.filePath}
|
|
68
68
|
${b.sectionTitle||""}
|
|
69
69
|
${b.content}`,h=d.reduce((a,b)=>a+ +!!f.includes(b),0),i=b.sectionTitle&&(a.includes(b.sectionTitle)||b.sectionTitle.includes(a))?4:0,j=t.sv.test(g)||/合同估算价|合同估算价格|计划工期/u.test(g)?1.5:0,k=e&&/计划工期|合同工期|合同估算价|合同估算价格|投资估算|建设地点|建设规模|质量标准|招标范围/u.test(g)?5:0,l=.8*!!/table|sheet|bill|data|drawing|图纸|表格|清单|参数|数据|说明/u.test(`${b.roleId||""} ${b.processingType||""} ${b.filePath}`);return{item:b,score:h+i+j+k+l+.1*b.score-.001*c}}).sort((a,b)=>b.score-a.score),g=f.filter(a=>a.score>0).map(a=>a.item);if(0===g.length)return c;let h=new Set(g);return[...g,...f.filter(({item:a})=>!h.has(a)).filter(({item:a})=>/招标范围|建设规模|建设地点|计划工期|质量标准|施工内容|管理机构|岗位职责|施工部署|现场交通|人车分流/u.test(`${a.sectionTitle||""}
|
|
70
|
-
${a.content}`)).map(a=>a.item)]}let
|
|
70
|
+
${a.content}`)).map(a=>a.item)]}let L=/计划工期|合同工期|建设地点|建设规模|质量标准|招标范围|施工范围|工作内容|项目特征|材料|设备|规格|型号|数量|单位|做法|节点|系统|管径|标高|尺寸|厚度|强度|等级|验收|检测|试验|安全|文明|扬尘|环保|消防|临时用电|临水|排水|交叉施工|地下管线|有限空间|危大|专项方案|专家论证|进度节点|保修|移交/iu,M=/报价明细|综合单价|税率|增值税|利润|结算|预留金|暂列金额|暂估价/u,N=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,O=/材料价格|商务报价|投标总价|合同总价|工程总价/u,P=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","材料价格与商务报价的商务条款"],Q=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息"];async function R(a){return(0,x.A)({prototypes:[...P],negativePrototypes:[...Q],embedDocuments:a})}function S(a){return(0,j.lG)(a).replace(/\s+/gu,"").replace(/[,。,.;;::、()()【】[\]《》“”"'`]/gu,"")}function T(a){return(0,j.lG)(a).replace(/^\s*#{1,6}\s*/u,"").replace(/^\s*\d+(?:\.\d+)*\s*/u,"").replace(/\s+/gu," ").trim()}function U(a,b){let c=S(b),d=function(a){let b=T(a),c=S(b),d=new Set,e=a=>{let b=S(a);b.length<2||/^(本项目|施工|工程|资料|要求|进行|应当|按照|落实|管理|检查|验收)$/u.test(b)||d.add(b)};for(let a of b.split(/[,。,.;;::、()()【】[\]\s]+/u))e(a);let f=b.match(/^\s*([^::]{2,12})[::]\s*(.+)$/u);for(let a of(f&&(e(f[1]||""),e(f[2]||"")),c.matchAll(/\d+(?:\.\d+)?(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|L|ml|MPa|kPa|℃|%|台|套|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年)?|DN\d+|φ\d+|Φ\d+|GB\d+|JGJ\d+/giu)))e(a[0]);return[...d].slice(0,18)}(a);if(0===d.length)return 0;let e=d.filter(a=>/\d/u.test(a));return e.length>0?e.filter(a=>c.includes(a)).length:d.filter(a=>c.includes(a)).length}async function V(a,b,c){let e=[],f=new Set,g=J(a).filter(a=>a.length>=2),h=[];for(let a of b)for(let b of(0,j.lG)(a.content).split(/\r?\n/u)){let c=(0,y.rj)(T(b));!(c.length<4)&&!(c.length>280)&&(0,y.SR)(c)&&!(/^(?:工作表|序号|COL\d+|资料类型|PDF\s*第|第\d+页)/iu.test(c)||/\|.*\|/u.test(c)&&!/(工程名称|建设地点|建设规模|计划工期|招标范围|合同估算|暂列金额|建筑面积)/u.test(c)||/^(?:[.。;;、\s]+)?(?:工程重点难点|确保安全文明生产|项目概况与招标范围)$/u.test(c)||/^[.。;;、\s]*[^::]{2,40}(?:是否|符合|在采购范围内).{0,30}\d{3,}$/u.test(c)||/^[.。;;、\s]*(?:系统|综合布线系统|智能化设备).{0,40}\d{3,}$/u.test(c)||/^[.。;;、\s]*(?:工程重点难点及危大工程的保障体系与措施|确保安全文明生产的管理体系与措施)$/u.test(c)||/第二章投标人须知|不得存在|报价|中标后不予调整|清单不再单独列项|自行踏勘|元\/条|安全生产许可证|营业执照|联合体投标|投标人资格|投标人资质|资质要求|资格审查|资格后审|业绩要求|信誉要求|财务要求|中标通知书|签订合同|评标办法|电子交易系统|踏勘现场|投标预备会/u.test(c))&&1&&h.push({line:c,filePath:a.filePath,roleId:a.roleId})}let i=await R(c),k=h.filter(({line:a})=>{let b=M.test(a),c=N.test(a),d=O.test(a);return b&&(c||d)||d&&!b}),l=k.length>0?await i(k.map(({line:a})=>a)):[],n=new Set(k.filter((a,b)=>l[b]).map(({line:a})=>a));for(let{line:a,filePath:b,roleId:c}of h){let d=M.test(a),h=N.test(a),i=O.test(a);if(d&&!h&&!i||n.has(a))continue;let j=t.AM.test(a),k=L.test(a),l=g.some(b=>a.includes(b));if(!j&&!k&&!l)continue;let m=S(a).slice(0,160);if(!f.has(m)&&(f.add(m),e.push({text:a,sourceFile:b,roleId:c,quantified:j}),e.length>=16))break}let o=e.map(a=>`- ${a.text}(来源:${d.basename(a.sourceFile)}${a.roleId?`,角色:${a.roleId}`:""})`),p=o.length?`【当前小节写作任务卡】
|
|
71
71
|
小节:${a}
|
|
72
72
|
必须优先落位的资料事实:
|
|
73
|
-
${
|
|
74
|
-
成稿要求:1)至少自然写入其中 2 条资料事实;2)如存在数字、规格、标准编号、数量、工期,必须至少原样写入 1 条;3)本节必须**完整包含**下列要素(终检逐项判定,缺项即打回):①
|
|
75
|
-
本节资料中可直接落位的可靠精确参数/编号:${
|
|
73
|
+
${o.join("\n")}
|
|
74
|
+
成稿要求:1)至少自然写入其中 2 条资料事实;2)如存在数字、规格、标准编号、数量、工期,必须至少原样写入 1 条;3)本节必须**完整包含**下列要素(终检逐项判定,缺项即打回):① 作业对象与工程量——写出具体部位/单体并引用清单数量(数量照抄资料/清单原文,不得改写或换算);② 工序顺序——编号步骤、箭头链、表格均可,但**不得全篇复用「先…再…随后…最后」同一句式**;③ 施工方法——含不少于 4 个工艺参数(材料牌号/强度等级/厚度/间距/偏差/试验压力等);④ 检查验收与闭环——责任岗位 + 检查频次 + 整改销项;不得写成"结合实际、按规范执行"的泛化空话;4)不得改写、换算或编造资料未提供的参数;5)量化参数落位硬性要求:本节正文每千字不少于 2 个不同量化参数(优先使用上方清单参数与资料原文参数),同一参数不得反复堆砌凑数;当本节资料可落位参数不足 2 个/千字时,以全部可落位参数写入为准,不得虚构参数凑数——「参数不足」仅在资料中仍有未落位参数时构成打回理由;6)**本节出现的每一个数值都必须来自上方资料事实、量化参数清单或蓝图锁定值**,不得出现清单外的数值,也不得用「约/左右/若干」变通;涉及危险性较大的分部分项工程时,必须写「本项目实际参数 + 判定阈值对照 + 结论」,禁止只抄规范阈值;7)${m.l9}${w.Il}`:"",q=E(b),r=q.length?`【量化参数落位清单】
|
|
75
|
+
本节资料中可直接落位的可靠精确参数/编号:${q.join("、")}。这些参数来自绑定资料,不属于编造;涉及对应对象、部位、工序、材料、设备、质量验收或安全控制时必须自然写入正文,并保持原样或等价专业表达。`:"";return{items:e,quantifiedCount:e.filter(a=>a.quantified).length,preciseTokens:q,prompt:[p,r].filter(Boolean).join("\n\n")}}function W(a,b,c){if(0===c.items.length)return;let d=(0,e.V7)(b);if(d<180)return`小节正文过短,需补写专业做法和证据依据`;let f=/概况|范围|清单|图纸|设计|材料|设备|工期|质量|安全|危大|资源|验收/u.test(a),g=c.items.filter(a=>U(a.text,b)>=(a.quantified?1:2)),h=c.items.filter(a=>a.quantified&&U(a.text,b)>=1),i=f?Math.min(c.items.length,2):Math.min(c.items.length,1),j=f&&c.quantifiedCount>0?1:0;if(g.length>=i&&h.length>=j||!f&&d>=650&&/复核|检查|验收|交底|台账|整改|闭环|进场|协调|保护/u.test(b))return;let k=c.items.filter(a=>!g.includes(a)).slice(0,f?4:2).map(a=>a.text);return`知识库事实落位不足:当前小节已落位 ${g.length}/${c.items.length} 条知识库事实、${h.length}/${c.quantifiedCount} 条量化事实;建议补入:${k.join(";")}`}function X(a){let{sections:b,exhaustedBlocks:c,blockTargetWords:d}=a;if(0===c.length||b.length!==d.length)return;let f=[...b],g=[];for(let a of c){if(a.index<0||a.index>=f.length)return;let b=a.lastAttempt;if(!b||!b.trim())return;let c=a.failureKinds||[];if(1!==c.length||"over-produce"!==c[0])return;let d=f[a.index];if(d&&d.trim())return;f[a.index]=b,g.push(a.index)}if(f.some(a=>!a||!a.trim()))return;let h=(0,e.V7)(f.join("\n\n")),i=d.reduce((a,b)=>a+(Number.isFinite(b)&&b>0?b:0),0),j=Math.floor(.85*i),k=Math.ceil(1.2*i);if(!(i<=0)&&!(h<j)&&!(h>k))return{sections:f,detail:`章级超产对冲接纳 ${g.length} 块(块序号 ${g.join("、")},末轮仅篇幅超产):章总量 ${h} 字 vs 块预算合计 ${i} 字(接纳区间 ${j}~${k} 字,累计放大由章/文档级观测兜底)`}}let Y={"over-produce":"篇幅超产","under-produce":"篇幅欠产","structure-titles":"小节标题结构缺陷(缺标题/重复 H4/清单外标题)","structure-integrity":"正文结构缺陷(截断/空节/同标题重复)",numeric:"数值一致性缺陷","flow-form":"行文形态缺陷(模板化结构标签)",templating:"模板化套话超标",density:"量化参数密度不足",attribution:"归因量化不足",format:"后台话术/格式缺陷"};function Z(a,b){return{...a,blockDegradation:b}}function $(a){let{sections:b,blockTitles:c,exhaustedBlocks:d}=a;if(0===b.length||0===d.length)return;let e=a=>!!(a&&a.trim()),f=b.filter(e).length;if(0===f)return;let g=[];for(let a of d){if(a.index<0||a.index>=b.length||e(b[a.index]))continue;let d=(a.retryFeedback||"").replace(/\s+/gu," ").trim().slice(0,160)||void 0;g.push({index:a.index,title:a.title||c[a.index]||`第 ${a.index+1} 个主题块`,reason:function(a,b){let c=(a||[]).map(a=>Y[a]||a).filter(Boolean);return c.length>0?c.join("、"):(b||"").replace(/\s+/gu," ").trim().slice(0,80)||"块质检未达标(无类别与反馈记录)"}(a.failureKinds,a.retryFeedback),feedback:d})}if(0!==g.length&&!(g.length>=b.length))return{plannedBlocks:b.length,deliveredBlocks:f,droppedBlocks:g}}function _(a){let b=a.deliveredBlocks,c=`${b}/${a.plannedBlocks} 块成稿、丢弃 ${a.droppedBlocks.length} 块:${a.droppedBlocks.map(a=>a.title).join("、")}`,d=[c,...a.droppedBlocks.map(b=>`失守块「${b.title}」(第 ${b.index+1}/${a.plannedBlocks} 块):${b.reason}${b.feedback?`;缺陷反馈:${b.feedback}`:""}`),`已保留 ${b} 块正文;失守块不产出正文(不填充兜底内容);已登记 structure/blocker 进导出门禁与交付复核清单,请按上方标题定向补写。`];return{head:c,details:d}}let aa=["农村","村村","全村","本村","各村","每村","乡村","跨村","入村","出村","邻村","沿村","自然村","所有村","多村"],ab=["村","社区","小区","家园","片区","工区","标段"].map(a=>RegExp(`[\\u4e00-\\u9fa5A-Za-z0-9]{1,6}${a}`,"gu"));function ac(a){let b=new Set;for(let c of ab)for(let d of a.matchAll(c))aa.some(a=>d[0].includes(a))||b.add(d[0]);return b}async function ad(a,b){let c,d=b.blocks;if(0===d.length)return;let l=(a,b)=>a.replace(/^###\s+[^\n]*\n+/u,a=>{let c=a.replace(/^###\s+/u,"").trim();return(0,j.Sw)(c)===b?"":a}),n=d.flatMap(a=>a.subPoints.flatMap(a=>a.sources)),o=(0,m.nn)(a.chapter,n),t=d.map((b,c)=>{let e=(a.chapter.tablePlans||[]).filter(a=>{if(o.includes(a))return!1;let c=a.title||"";return b.subPoints.some(a=>a.sources.some(a=>c.includes(a)||a.includes(c))||c.includes(a.title)||a.title.includes(c))});return c===d.length-1?[...e,...o]:e}),x=(0,B.z)().plannedBlockConcurrency||d.length,y=Math.max(1,Math.min(d.length,(0,i.Sq)(),Number.isFinite(x)?Math.floor(x):d.length)),C=Array(d.length).fill(void 0),D=function(a,b){let c=a.map(a=>`${a.title} ${a.subPoints.map(a=>a.title).join(" ")}`),d=c.map(a=>new Set(J(a).filter(a=>a.length>=2))),e=c.map(a=>ac(a)),f=a.map(()=>[]);if(0===b.length)return f;for(let a of b){let b=J(a).filter(a=>a.length>=2),c=ac(a),g=-1,h=0;d.forEach((a,d)=>{let f=e[d],i=0;if(f.size>0&&c.size>0){if(![...c].some(a=>[...f].some(b=>a.includes(b)||b.includes(a))))return;i=100}let j=b.reduce((b,c)=>b+ +!!a.has(c),0)+i;j>h&&(h=j,g=d)}),g>=0&&h>0&&f[g].push(a)}return f}(d,[...new Set(a.evidence.flatMap(a=>(0,f.oW)(a.content).split("\n").filter(Boolean)))]),E=(0,B.z)().chapterPoolChars||5e3,F=(0,f.R7)((0,f.QO)(a.chapter,a.evidence),a.chapter.requiredFacts||[],Number.isFinite(E)?Math.floor(E):8e3),G=(0,B.z)().blockEvidenceChars||1e3,K=Number.isFinite(G)&&G>0?Math.floor(G):1e3,L=new Map,M=new Map,N=new Map,O=async(b,c)=>{var f;let i=(0,j.Sw)(b.title),l=b.subPoints.filter(a=>(0,j.Sw)(a.title)!==i),n=l.map(a=>a.title),o=new Set([b.title,...b.subPoints.map(a=>a.title)].map(j.Sw).filter(Boolean)),x=new Set(d.flatMap(a=>[a.title,...a.subPoints.map(a=>a.title)]).filter(a=>!o.has((0,j.Sw)(a))).map(j.Sw).filter(Boolean)),y=J(`${b.title} ${n.join(" ")}`).filter(a=>a.length>=2),C=a=>Math.min(24,y.reduce((b,c)=>b+6*!!a.content.includes(c),0)),E=[...a.evidence.map(a=>({item:a,score:y.reduce((b,c)=>b+ +!!a.content.includes(c),0)})).sort((a,b)=>b.score-a.score).map(a=>a.item),...a.sectionEvidenceProvider?await a.sectionEvidenceProvider(b.title).catch(c=>(a.diagnostics&&(a.diagnostics.llm.lastError=`块级专属证据召回失败(${b.title}):${c instanceof Error?c.message:String(c)}`),console.error(`[gen] 块级专属证据召回失败(${b.title})`,c),[])):[]],G=z.Yp.test(b.title)?"major":z.gG.test(b.title)||z.gG.test(a.chapter.title)?"division":"",O=z.gG.test(a.chapter.title)&&z.gG.test(b.title),P=a.skeletonProjectContext??a.projectContext,Q=G&&!O?(0,q.sh)(P,E):[],R=b.subPoints.map(a=>a.title).filter(Boolean),S=O?[]:(0,q.iA)(Q,R),T=O?[]:S.length>0?S:R.length>=3?R:[],U=G?(0,q.Bk)(P,E,3,T):"",V="division"!==G||0!==T.length||O?"":`【分部工程施工方案要素要求】本节为一个分部分项工程的施工方案,写成连贯散文叙述(禁止 Markdown 表格;禁止以“施工概况/施工流程/施工方法”等结构标签充当小节标题或段落开头):
|
|
76
76
|
要素自然融入叙述:作业对象与部位、工程量或规模、材料设备规格型号(数量类数值优先取工程量清单数据);工序先后顺序清晰;工艺做法与工艺参数(数值+单位);验收检测与记录闭环。
|
|
77
|
-
数值来源优先级:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据;清单未覆盖的参数(标高、坡率、构造做法等)才取图纸数据;禁止“按设计图纸执行”“详见设计图纸”“按设计文件确定”式概括话术——必须落到具体数值或具体规范条文。${
|
|
78
|
-
本节覆盖以下分部分项工作内容,正文必须逐项落实、不得遗漏任何一项:${
|
|
77
|
+
数值来源优先级:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据;清单未覆盖的参数(标高、坡率、构造做法等)才取图纸数据;禁止“按设计图纸执行”“详见设计图纸”“按设计文件确定”式概括话术——必须落到具体数值或具体规范条文。${n.length>0?`
|
|
78
|
+
本节覆盖以下分部分项工作内容,正文必须逐项落实、不得遗漏任何一项:${n.join("、")}。`:""}`,W=O?(f=b.targetWords,`【分部分项工程施工方案总述】本节为本章各分部分项工程施工方案的总体概述小节:各分部工程的具体施工方案已在本章其他小节逐项展开,本节不得复写任何单个分部工程的施工方案,也不得把本章其他小节(各分部工程方案)标题作为本节任何标题。正文直接展开、无需四级标题,禁止 Markdown 表格,按以下四部分组织:
|
|
79
79
|
一、分部工程划分与专业分组:按专业分组(如道路、排水、景观绿化、电气照明、公建配套等)列明本章覆盖的分部工程范围与作业内容,说明各专业间的相互关系;
|
|
80
80
|
二、施工总体部署:施工分区与流水段划分、总体施工顺序安排、关键线路与节点控制、各专业施工穿插衔接原则;
|
|
81
81
|
三、施工组织与资源配置:按专业划分的施工队伍与作业面安排、总体资源投入与调配原则、多专业协调管理机制;
|
|
82
82
|
四、质量、安全与进度接口:各分部工程间的成品保护与工序交接安排、总体质量控制与检测验收安排、安全文明施工总体要求。
|
|
83
|
-
每部分不少于 ${Math.floor(f/4)} 字,全文合计不少于 ${f} 字;结合本项目资料中的具体工程内容(单体、部位、专业、工程量)展开,禁止空泛原则表述。`):"",
|
|
84
|
-
${
|
|
85
|
-
${
|
|
83
|
+
每部分不少于 ${Math.floor(f/4)} 字,全文合计不少于 ${f} 字;结合本项目资料中的具体工程内容(单体、部位、专业、工程量)展开,禁止空泛原则表述。`):"",X=[...new Set([b.title,...b.subPoints.map(a=>a.title),...b.subPoints.flatMap(a=>a.sources||[]),...T].filter(Boolean))],Y=a.blueprintData?(0,p.Rx)(a.blueprintData,{blockTokens:X,quantityCharsCap:(0,B.z)().blueprintBlockQuantityCap,materialCharsCap:(0,B.z)().blueprintBlockMaterialCap}):"",Z=a.blueprintChapter&&a.blueprintData?(0,p.TF)(a.blueprintChapter,a.blueprintData,{blockTitle:b.title,subPointTitles:n,skeletonNames:T,sliceCharsCap:(0,B.z)().blueprintBlockSliceCap}):"",$={...a.chapter,title:b.title,sections:n,tablePlans:t[c]||[]},_=l.map(a=>({title:a.title,words:a.quotaWords||0})),aa=[...b.facts||[],...D[c]],ab=aa.length?`【本主题块专属事实(只能在本节使用,不得重复出现在本章其他节;本章其他节已认领各自专属事实,本节不得重复展开其他节专属事实)】${aa.map(a=>`- ${a}`).join("\n")}`:"",ac=b.subPoints.map(a=>{let c=a.quotaWords&&a.quotaWords>0?`篇幅不超过 ${I(a.quotaWords)} 字`:"";return(0,j.Sw)(a.title)===i?`- ### ${b.title}(本节标题,覆盖评分细目:${a.sources.join("、")};正文直接展开,无需四级标题;如按细目分节,仅可使用上述细目标题作为四级标题${c?`;${c}`:""})`:a.sources.length>1?`- #### ${a.title}(覆盖评分细目:${a.sources.join("、")}${c?`;${c}`:""})`:`- #### ${a.title}${c?`(${c})`:""}`}).join("\n"),ad=x.size>0?`严禁将以下属于本章其他小节的标题作为本节任何标题输出(H3 仅允许「${b.title}」,H4 仅允许上面清单中的标题):${[...x].join("、")}。`:"",ae=[ab,...E.map(a=>a.content)].filter(Boolean).join("\n"),af=(0,u.yT)("clause-recitation",()=>(0,w.tq)(ae)),ag=af.length>0?`${w.Il}(本节材料中含 ${af.length} 处条款体/承诺式原文,属高风险抄用源——必须改写为本项目做法后方可写入,不得整句照抄。)`:w.Il,ah=`【表格题注】${m.l9}`,ai=`【要素完整性】本节必须**完整包含**下列要素(终检逐项判定,缺项即打回):① 作业对象与工程量——写出具体部位/单体并引用清单数量(数量照抄资料/清单原文,不得改写或换算);② 工序顺序——编号步骤、箭头链、表格均可,但**不得全篇复用「先…再…随后…最后」同一句式**;③ 施工方法——含不少于 4 个工艺参数(材料牌号/强度等级/厚度/间距/偏差/试验压力等);④ 检查验收与闭环——责任岗位 + 检查频次 + 整改销项。`,aj=`【数值来源】本节出现的**每一个数值**都必须来自上方资料事实、量化参数清单或蓝图锁定值;不得出现清单外的数值,也不得用「约/左右/若干」变通;涉及危险性较大的分部分项工程时,必须写「本项目实际参数 + 判定阈值对照 + 结论」,禁止只抄规范阈值。`,ak=[ab,U,W,V,G&&!O?(0,A.gn)(c):"",b.subPoints.length>0?`本节是「${a.chapter.title}」章的一个主题小节,只写本节标题覆盖的内容,不得重复本章其他节内容;必须按以下清单逐点写出实施性正文,标题必须与给定标题完全一致,不得改名、合并或遗漏;每个要点必须覆盖其标注的全部评分细目内容,但不得为这些细目单独开设小节标题;清单标注的篇幅为该要点字数上限,按标注控制详略、不得超出:
|
|
84
|
+
${ac}${ad?`
|
|
85
|
+
${ad}`:""}`:`本节是「${a.chapter.title}」章的唯一小节(本章无细分小节规划):正文在 H3 标题下直接展开为连贯的正式叙述,不使用四级标题;覆盖本节标题对应的全部实质内容,不得重复章外内容。`,"【防复读硬约束】本节内同一句话只允许出现一次:同一段落内不得复读任何已写出的句子,不同段落之间不得整句复制,同一工艺/措施只在一处完整表述、其余位置引用结论不重述原文;段落结尾不得复读段内前句(禁止“为此/综上/因此”后接照抄句)。",ah,ag,ai,aj].filter(Boolean).join("\n\n"),al=[],am=[],an=[],ao=0,ap="",aq="",ar="",as="",at="",au="",av="",aw="",ax="",ay="",az="",aA="",aB=!1,aC=(0,q.zJ)(b.title)?Math.min((0,q.ap)(b.title),Math.max(500,b.targetWords)):0,aD=Math.max(Math.floor(.85*b.targetWords),aC),aE=Math.floor(.7*b.targetWords),aF=z.Yp.test(b.title),aG=!aF&&z.gG.test(b.title),aH=!O&&(aF?n.length>=3:aG&&n.length>0),aI=!1,aJ=c=>["【上一轮未通过质检】",al.length?`缺失 H4 要点标题:${al.join("、")}。必须逐点补齐以上 H4 标题并展开正式正文,H4 标题与给定标题完全一致。`:"",am.length?`重复展开的 H4 要点标题:${am.join("、")}。同一小节内相同要点被重复展开多轮,必须只保留一轮完整展开,其余重复小节连同标题整体删除,不得以换编号方式重复同一内容。`:"",an.length?`清单外标题(属于本章其他小节或不在本节要点清单内):${an.join("、")}。这些标题连同其正文整块删除,本节只允许输出上面清单中的 H4 标题与「${b.title}」H3 标题。`:"",0===al.length&&0===am.length&&0===an.length?"必须完整包含每个 H4 要点标题并展开正文,不得合并或遗漏要点。":"",ap,aq,ar,as,at,au,av,aw,ax,ay,az,a.blueprintMustCiteHint?`【蓝图锁定数值检查】正文必须逐条出现以下蓝图锁定数值且与给定值完全一致:${a.blueprintMustCiteHint}。`:"",c?ao>0?ao<aD?`当前输出仅 ${ao} 字,距篇幅下限 ${aD} 字还缺 ${aD-ao} 字,必须逐点展开补足(区间上限 ${Math.ceil(1.15*b.targetWords)} 字)。`:ao>Math.ceil(1.15*b.targetWords)?"":`当前输出 ${ao} 字(本节合同区间 ${aD}~${Math.ceil(1.15*b.targetWords)} 字),保持篇幅并修正上述缺陷。`:`本节篇幅合同区间为 ${aD}~${Math.ceil(1.15*b.targetWords)} 字(目标 ${b.targetWords} 字)。`:""].filter(Boolean).join(""),aK=async(c,d)=>{let f=Math.max(aD,b.targetWords),g=c,i=d,k=0;for(let c=0;c<2;c+=1){(0,j.Te)(a.signal);let c=f-i;if(c<=0)break;let d=[ak,`【本节欠产续写】本节已有正文如下(**不得重复、不得改写、不得重新输出**),请**只输出续写部分**,接着上文把未充分展开的要点继续写完。当前 ${i} 字,本节目标 ${b.targetWords} 字,还缺约 ${c} 字(达 ${aD} 字即可收稿,上限 ${Math.ceil(1.15*b.targetWords)} 字)。只输出新写的正文,不要重复已写内容、不要重写本节标题。`,"【已有正文开始】",g,"【已有正文结束】"].join("\n\n"),l=await H(a.template,$,E,a.missingFacts,a.promptTexts,a.projectContext,a.requirement,d,{forbidDrawingImages:a.forbidDrawingImages,bidComposition:a.bidComposition,compactProjectContext:a.compactProjectContext,scopedProjectContext:a.scopedProjectContext,chapterLevelContext:a.roleContext||"",minWords:b.targetWords,targetWords:b.targetWords,sectionQuotas:_,maxTokens:Math.max(3200,Math.ceil(1.5*b.targetWords)),sharedFactLayerText:F,evidenceRankBoost:C,onlyRankBoosted:!0,signal:a.signal,diagnostics:a.diagnostics});if(!l)break;let m=(0,h.kT)(String(l).trim());if(!m)break;let o=g.replace(/\s+/gu,"").slice(-40),p=o&&m.replace(/\s+/gu,"").includes(o)?m:`${g}
|
|
86
86
|
|
|
87
|
-
${
|
|
87
|
+
${m}`,q=(0,j.Me)(p,n);q.aligned.length>0&&(p=q.markdown);let t=(0,s.Rk)(p,a.chapter.tablePlans);t.normalized>0&&(p=t.markdown);let u=(0,r.vi)(p);u.cleaned.length>0&&(p=u.markdown);let v=(0,e.V7)(p);if(v<=i)break;g=p,i=v,k+=1}if(0===k||i<aD)return;let l=Math.ceil(1.15*b.targetWords);if(!(i>Math.ceil(1.2*b.targetWords)))return console.error(`[gen][block-qc] 欠产续写收敛(${d} → ${i} 字,下限 ${aD},上限 ${l}):${b.title}`),a.diagnostics&&(a.diagnostics.llm.lastInfo=`欠产块续写收敛:${b.title}(${d} → ${i} 字)`),g};for(let d=0;d<2;d+=1){let f=0===d?a.initialFeedback||"":aJ(!0);try{let h,i,l,m,o,p,t=()=>H(a.template,$,E,a.missingFacts,a.promptTexts,a.projectContext,a.requirement,f?`${ak}
|
|
88
88
|
|
|
89
|
-
${f}`:
|
|
89
|
+
${f}`:ak,{forbidDrawingImages:a.forbidDrawingImages,bidComposition:a.bidComposition,compactProjectContext:a.compactProjectContext,scopedProjectContext:a.scopedProjectContext,chapterLevelContext:a.roleContext||"",minWords:b.targetWords,targetWords:b.targetWords,sectionQuotas:_,maxTokens:Math.max(3200,Math.ceil(1.5*b.targetWords)),sharedFactLayerText:F,evidenceRankBoost:C,onlyRankBoosted:!0,skipT2Catalog:!0,evidenceFloorChars:1e3,evidenceCeilingChars:K,factCoverageContext:a.factCoverageContext||"",blueprintDataText:Y,blueprintSliceText:Z,blueprintMustCiteHint:a.blueprintMustCiteHint,signal:a.signal,diagnostics:a.diagnostics}),w=a.diagnostics?await (0,k.X6)(a.diagnostics,`block-draft:${a.chapter.id}:${c}:a${d}`,t):await t();if(!w){console.error(`[gen][block-qc] 块写作返回空内容 attempt=${d}: ${b.title}(目标 ${b.targetWords} 字)`);continue}let z=w.replace(/^##\s+.+$/mu,"").trim(),B=(0,q.KJ)(n,z),D=/^###\s+\S+/mu.test(B)?B:`### ${b.title}
|
|
90
90
|
|
|
91
|
-
${
|
|
92
|
-
${
|
|
91
|
+
${B}`,I=(0,j.Me)(D,n);I.aligned.length>0&&(D=I.markdown,a.diagnostics&&(a.diagnostics.llm.lastInfo=`块要点标题近似对齐:${b.title}(${I.aligned.join("、")})`));let J=[];if(G){let a=(0,q.I6)(D);a!==D&&(D=a);let b=(D.match(/^#{3,4}\s+(.+)$/gmu)||[]).map(a=>a.replace(/^#{3,4}\s+/u,""));J=T.filter(a=>!b.some(b=>(0,j.Sw)(b).includes((0,j.Sw)(a))))}let L=(0,s.Rk)(D,a.chapter.tablePlans);L.normalized>0&&(D=L.markdown,a.diagnostics&&(a.diagnostics.llm.lastInfo=`块表格表题归一:${b.title}(${L.normalized} 处表名混入表头)`));let P=(0,r.vi)(D);P.cleaned.length>0&&(D=P.markdown,a.diagnostics&&(a.diagnostics.llm.lastInfo=`块结构确定性清理:${b.title}(${P.cleaned.length} 项)`));let Q=(0,r.$t)(D),R=Q.blocking.length>0;R&&(aw=(0,r.G5)(Q,b.title)||"",console.error(`[gen][block-qc] 结构完整性阻断 attempt=${d}(${Q.blocking.length} 处): ${b.title}: ${Q.blocking.slice(0,3).map(a=>a.message).join(" / ")}`));let S=(0,e.V7)(D);aA=D,ao=S;let U=`${F}
|
|
92
|
+
${E.map(a=>a.content).join("\n")}`,V=a.evidence.map(a=>a.content).join("\n"),W=(0,u.yT)("block-numeric-reconciliation",()=>(0,g.I)(D,U,V));if(W.mismatched.length>0&&a.diagnostics&&(a.diagnostics.llm.lastInfo=`数值核验:${b.title} 发现 ${W.mismatched.length} 处疑似错误数值(${W.mismatched.map(a=>`${a.found}→${a.expected}`).join("、")})`),J.length>0){let a=0===d&&J.length>2;console.error(`[gen][block-qc] 骨架缺口 ${J.length} 个 attempt=${d}(${a?"阻断重试":"放行交修复链"}): ${b.title}: ${J.join("、")}`)}let X=0===d&&J.length>2?J:[];if(0===d){for(let a=0;a<2&&void 0===h;a+=1)try{h=await (0,u.yT)("block-templating",()=>(0,v.SA)(D))}catch(c){i=c instanceof Error?c.message:String(c),console.error(`[gen][block-qc] 模板化扫描第 ${a+1} 次失败: ${b.title}`,c)}i&&a.diagnostics&&(a.diagnostics.llm.lastError=`块级模板化质检未完成(按未通过处理):${b.title} —— ${i}`)}let ab=0===d&&(void 0!==i||void 0!==h&&(0,v.mv)(h));if(ab&&h&&console.error(`[gen][block-qc] 首轮模板化阻断(套话 ${h.fillerSentences}/${h.totalSentences} 句、占比 ${(100*h.fillerRatio).toFixed(1)}%、模糊 ${h.vagueCount} 处): ${b.title}: ${h.fillerDetails.slice(0,3).join(" / ")}`),0===d){for(let a=0;a<2&&void 0===l;a+=1)try{l=(0,u.yT)("block-filler-phrase",()=>(0,v.lN)(D))}catch(c){m=c instanceof Error?c.message:String(c),console.error(`[gen][block-qc] 短语级套话扫描第 ${a+1} 次失败: ${b.title}`,c)}m&&a.diagnostics&&(a.diagnostics.llm.lastError=`块级短语级套话质检未完成(按未通过处理):${b.title} —— ${m}`)}let ac=0===d&&(void 0!==m||void 0!==l&&(0,v.gj)(l));ac&&l&&console.error(`[gen][block-qc] 首轮短语级套话阻断(命中 ${l.count} 处/${l.totalSentences} 句): ${b.title}: ${l.phrases.slice(0,3).join(" / ")}`);let ad=[...E.filter(a=>y.some(b=>a.content.includes(b))).map(a=>a.content),...aa].join("\n"),ae=(0,u.yT)("block-fact-density",()=>(0,v.oM)(D,ad)),af=0===d&&ae.blocking;af&&console.error(`[gen][block-qc] 首轮密度缺口阻断(${ae.verdict.params}/${ae.verdict.required} 参数,材料 ${ae.materialParams} 个): ${b.title}`);let ag=(0,v.jk)(`${a.chapter.title} ${b.title}`);if(0===d&&ag){for(let a=0;a<2&&void 0===o;a+=1)try{o=await (0,u.yT)("block-attribution-quantification",()=>(0,v.o9)(D))}catch(c){p=c instanceof Error?c.message:String(c),console.error(`[gen][block-qc] 归因量化扫描第 ${a+1} 次失败: ${b.title}`,c)}p&&a.diagnostics&&(a.diagnostics.llm.lastError=`块级归因量化质检未完成(按未通过处理):${b.title} —— ${p}`)}let ah=0===d&&(void 0!==p||void 0!==o&&(0,v.KM)(o));ah&&o&&console.error(`[gen][block-qc] 首轮归因量化阻断(双达标率 ${(100*o.bothRatio).toFixed(0)}%,${o.entries} 条目): ${b.title}`);let ai=(0,u.yT)("block-format-constraints",()=>(0,v.mY)(D)),aj=0===d&&ai.length>0;aj&&console.error(`[gen][block-qc] 首轮格式硬约束阻断(后台话术 ${ai.length} 行): ${b.title}: ${ai.slice(0,2).join(" / ")}`);let{missing:aF,duplicates:aG,extraneous:aJ}=(0,u.yT)("block-structure-contract",()=>{let a=D.split("\n").map(a=>(0,j.Sw)(a)).filter(Boolean);return{missing:[...n.filter(b=>{let c=(0,j.Sw)(b);return!!c&&!a.some(a=>a.includes(c))}),...X.map(a=>`工作包小节:${a}`)],duplicates:(0,j.W6)(D),extraneous:(0,j.wx)(D,b.title,n,[...x],[...b.subPoints.flatMap(a=>a.sources),...T])}}),aL=aH?(0,q.eK)(b.title,D):"",aM=0===d&&""!==aL;aM&&console.error(`[gen][block-qc] 首轮工作包结构/要素门禁阻断: ${b.title}: ${aL}`);let aN=W.mismatched.length>0,aO=G&&!O?(0,A.V0)(c):void 0,aP=aO?(0,A.v_)(D):void 0,aQ=0===d&&void 0!==aO&&void 0!==aP&&aP!==aO,aR=Math.ceil(1.15*b.targetWords),aS=Math.ceil(1.4*b.targetWords),aT=1===d?aS:aR,aU=0===d&&S<aE,aV=S>aT,aW=0===d&&aC>0&&S<aC;if(aU||aV?console.error(`[gen][block-qc] 篇幅失守阻断 attempt=${d}(${S} 字 vs 块目标 ${b.targetWords} 字,欠产线 <${aE}${aC>0?`(含关键小节深度门槛 ${aC})`:""} / 超产线 >${aT})${d>0&&aV?"[二轮仍超产 → 块失败]":""}: ${b.title}`):S>aR?(console.error(`[gen][block-qc] 篇幅超产末轮容差放行(${S} 字 vs 块目标 ${b.targetWords} 字,合同超产线 ${aR} / 容差线 ${aS}): ${b.title}`),a.diagnostics&&(a.diagnostics.llm.lastInfo=`块篇幅超产末轮容差放行:${b.title}(${S} 字,合同超产线 ${aR} / 容差线 ${aS})`)):S<Math.floor(.85*b.targetWords)&&console.error(`[gen][block-qc] 篇幅欠产接受区放行(${S} 字 vs 块目标 ${b.targetWords} 字,达标区 ${Math.floor(.85*b.targetWords)}~${Math.ceil(1.15*b.targetWords)}): ${b.title}`),aW&&console.error(`[gen][block-qc] 关键小节深度门槛阻断 attempt=${d}(${S} 字 vs 绝对门槛 ${aC} 字,块目标 ${b.targetWords} 字): ${b.title}`),aB=(aU||aW)&&!aV&&!aM&&0===aF.length&&0===aG.length&&0===aJ.length&&!aN&&!aQ&&!ab&&!ac&&!R&&!af&&!ah&&!aj,!aU&&!aV&&!aW&&!aM&&0===aF.length&&0===aG.length&&0===aJ.length&&!aN&&!aQ&&!ab&&!ac&&!R&&!af&&!ah&&!aj){if(S<Math.floor(.95*b.targetWords)){let a=await aK(D,S);if(a)return a}return D}if(1===d&&aN&&!aU&&!aV&&!aW&&!aM&&0===aF.length&&0===aG.length&&0===aJ.length&&!aQ&&!ab&&!ac&&!R&&!af&&!ah&&!aj){let c=W.mismatched.length;return console.warn(`[gen][block-qc] 块仅数值冲突,末轮接受该块并交数值修复链(冲突 ${c} 处): ${b.title}`),a.diagnostics&&(a.diagnostics.llm.lastInfo=`块仅数值冲突已接受(不丢弃整块):${b.title}(冲突 ${c} 处,交 numeric-verification / numericConflictArbiter 定向替换;未收敛由终检照常报出)`),D}if(al=aF,am=aG,an=aJ,aI=!0,ap=(0,g.n8)(W),aq=void 0!==aO&&aP!==aO?`【上一轮工序表达形式不符】本块指定的工序顺序表达形式为「${aO}」,上一轮正文${aP?`使用了「${aP}」形式`:"未见明确的工序顺序表达"}。必须改用「${aO}」形式重写工序顺序表达,内容与数值保持不变。`:"",ar=ab&&h?`【上一轮空话套话句】以下句子是空泛口号(无责任岗位、量化标准、检查频次等可核查信息):${h.fillerDetails.map(a=>`“${a}”`).join("、")}。必须删除或改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”式具体措施,并嵌入本节项目事实(不得编造数值)。`:"",as=ac&&l?`【上一轮套话短语】以下短语是空泛口号(不承载任何可核查信息):${l.phrases.map(a=>`“${a}”`).join("、")}。命中位置所在句子见:${l.sentences.map(a=>`“${a.slice(0,60)}”`).join("、")}。**只改写这些短语**(换成具体做法、责任岗位、执行动作或量化标准),句中其余实质信息(部位、工序、参数)必须原样保留;不得删除整句,也不得改写句内其它内容。`:"",at=af?`【上一轮量化参数密度不足】本节 ${ae.verdict.chars} 字仅落位 ${ae.verdict.params} 个不同量化参数(要求 ≥${ae.verdict.required} 个,约 ${v.J5} 个/千字),材料中仍有未落位参数。必须从本节材料事实/证据中选取适用参数自然写入对应部位与工序(同一参数不得反复堆砌,不得从行业惯例或相邻章节借参数,不得编造)。`:"",au=ah&&o?`【上一轮归因量化不达标】以下条目缺少“成因归因链”或“量化控制目标”的完整表达:${o.missing.map(a=>`“${a.text.slice(0,60)}”`).join("、")}。必须逐条补齐:先写难点/特点成因分析(为什么难),再写可核查的量化目标与控制措施(数值/指标),不得只写口号式措施。`:"",av=aj?`【上一轮后台/兜底话术】以下句子属于后台处理话术(不得出现在正式正文):${ai.map(a=>`“${a.slice(0,60)}”`).join("、")}。必须删除或改写为正式表述——用绑定资料中的明确事实替换“待确认/不适用/以招标文件为准”类表述;确实无资料支撑的内容直接删除该句,不得保留任何后台痕迹。`:"",ax=aV?`【上一轮篇幅超限】当前输出 ${S} 字,超出本节篇幅上限 ${Math.ceil(1.15*b.targetWords)} 字(目标 ${b.targetWords} 字)。必须压缩重写:同类工序/措施合并叙述,相同内容只完整表述一次,删除重复铺陈与并列复述;保留全部 H4 标题与关键数值,把总字数压缩到 ${Math.floor(.8*b.targetWords)}~${Math.floor(.95*b.targetWords)} 字。`:"",ay=aW?`【上一轮关键小节深度不足】本节「${b.title}」为关键小节,首轮正文仅 ${S} 字,低于绝对深度门槛 ${aC} 字(篇幅下限 ${aD} 字,块目标 ${b.targetWords} 字)。必须逐点补足至 ${aD}~${Math.ceil(1.15*b.targetWords)} 字:每个要点按「作业对象与工程量、工序顺序、施工方法」三方面要素展开,落到具体部位/规模、工序环节与工艺参数、验收检测与资料闭环上;材料中已确认的事实优先落位,不得编造数值,不得以空泛表述凑数。`:"",az=aM?`【上一轮工作包结构/要素未达门禁】${aL}。必须按上面给定的小节/要点清单逐包展开,每个工作包正文覆盖「作业对象与工程量(部位、规模、工程量)、工序顺序(先后顺序清晰)、施工方法(工具机具、工艺参数、验收检测与记录闭环)」三方面要素并融入连贯散文叙述;不得以“施工概况/施工流程/施工方法”等结构标签充当小节标题或段落开头,不得以表格替代工作包正文,不得混入项目概况、招标范围、未尽事宜、资格审查等非本节事实;标题必须与清单完全一致,不得新增清单外标题,也不得为凑数重复同一工作包。`:"",0===aF.length&&!R&&!aN&&!ab&&!ac&&!af&&!ah&&!aj&&!aM&&!aW){let c=(0,j.dY)((0,j.wq)(D),b.title,n,[...b.subPoints.flatMap(a=>a.sources)]),d=(0,e.V7)(c),f=d>aT,g=d<aE;if(!f&&!g)return a.diagnostics&&(aJ.length>0||aG.length>0)&&(a.diagnostics.llm.lastInfo=`块标题层已确定性修复:${b.title}(清单外 ${aJ.length} 个、重复 H4 ${aG.length} 个;${S}→${d} 字)`),c}M.set(c,D),N.set(c,[...aV?["over-produce"]:[],...aU?["under-produce"]:[],...aF.length>0||aG.length>0||aJ.length>0?["structure-titles"]:[],...R?["structure-integrity"]:[],...aN?["numeric"]:[],...aQ?["flow-form"]:[],...ab||ac?["templating"]:[],...af?["density"]:[],...ah?["attribution"]:[],...aj?["format"]:[]]),a.diagnostics&&(a.diagnostics.llm.lastError=`规划块质检未达标:${b.title}(${S} 字,缺 ${aF.join("、")||"无"}${aG.length?`,重复 H4 ${aG.join("、")}`:""}${aJ.length?`,清单外 ${aJ.slice(0,5).join("、")}${aJ.length>5?" 等":""}`:""}${aW?`,关键小节深度不足 ${S}/${aC} 字`:""}${aM?`,工作包结构/要素门禁 ${aL}`:""}${Q.blocking.length?`,结构缺陷 ${Q.blocking.length} 处`:""}${af?`,密度缺口 ${ae.verdict.params}/${ae.verdict.required}`:""}${ah&&o?`,归因量化 ${(100*o.bothRatio).toFixed(0)}%`:""}${aj?`,后台话术 ${ai.length} 行`:""}${ac?m?`,短语级套话扫描失败按未通过处理(${m})`:`,短语级套话 ${l?.count??1} 处`:""})`),console.error(`[gen][block-qc] 块质检不达标 attempt=${d}: ${b.title}(目标 ${b.targetWords} 字,实际 ${S} 字,缺 ${aF.join("、")||"无"},重复 ${aG.join("、")||"无"},清单外 ${aJ.join("、")||"无"},结构缺陷 ${Q.blocking.length} 处,关键小节深度 ${aW?`${S}<${aC}`:"达标/不适用"},工作包要素门禁 ${aM?aL:"通过/不适用"},密度缺口 ${af?"是":"否"},归因量化 ${ah?"不达标":"达标"},后台话术 ${aj?"有":"无"},短语级套话 ${ac?m?"扫描失败(按未通过处理)":`${l?.count??1} 处`:"无"},keySection=${G||"none"})`)}catch(b){a.diagnostics&&(a.diagnostics.llm.lastError=b instanceof Error?b.message:String(b))}}if(aI&&L.set(c,aJ(!1)),aA&&aB){let a=await aK(aA,(0,e.V7)(aA));if(a)return a}},P=async(b,c)=>{C[c]=await O(b,c),C[c]&&a.onSectionProgress?.({completed:C.filter(Boolean).length,total:d.length,sectionTitle:b.title,phase:"complete",partialSections:[...C]})};d.length>0&&((0,j.Te)(a.signal),await P(d[0],0));for(let b=1;b<d.length;b+=y){(0,j.Te)(a.signal);let c=d.slice(b,b+y);await Promise.all(c.map((a,c)=>P(a,b+c)))}let Q=d.map((a,b)=>({index:b,block:a,retryFeedback:L.get(b),lastAttempt:M.get(b),failureKinds:N.get(b)})).filter(({index:a})=>!C[a]),R=[];for(let a=0;a<d.length;a+=1){let b=C[a];if(!b){c=void 0;continue}let e=(0,j.Sw)(d[a].title);c===e&&R.length>0?R[R.length-1]=`${R[R.length-1]}
|
|
93
93
|
|
|
94
|
-
${l(b,e)}`:
|
|
94
|
+
${l(b,e)}`:R.push(b),c=e}let S=(0,h.kT)((0,h.FD)(`## ${a.chapter.title}
|
|
95
95
|
|
|
96
|
-
${
|
|
97
|
-
`,"utf8"),d.renameSync(e,c);let g=k.get(a);g&&(g.mtimeMs=l(c))}let j=Math.round(Date.now()-1e3*process.uptime()),k=new Map;function l(a){try{return d.statSync(a).mtimeMs}catch{return 0}}function m(a){let b=h(a),c=l(b),e=k.get(a);if(e&&e.mtimeMs===c)return e.records;let f=function(a){let b=function(a){let b=h(a);return d.existsSync(b)?d.readFileSync(b,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}):[]}(a),c=b.filter(a=>"processing"===a.status&&a.updatedAt<j);if(c.length>0){let d=Date.now();for(let a of c)a.status="error",a.stage="error",a.error="服务重启导致任务中断,未完成",a.message=a.error,a.updatedAt=d;i(a,b)}return b}(a);return k.set(a,{mtimeMs:l(b),records:f}),f}function n(a,b){let c=Date.now(),d=m(a),e=d.findIndex(a=>a.id===b.id),f=e>=0?d[e]:void 0,g={id:b.id,type:b.type,title:b.title,stage:b.stage??f?.stage??"uploading",status:b.status??f?.status??"processing",message:b.message??f?.message??"",percent:b.percent??f?.percent??0,fileName:b.fileName??f?.fileName,filePath:b.filePath??f?.filePath,chunkCount:b.chunkCount??f?.chunkCount,textLength:b.textLength??f?.textLength,extractionMode:b.extractionMode??f?.extractionMode,error:b.status&&"error"!==b.status?void 0:b.error??f?.error,details:b.details??f?.details,createdAt:f?.createdAt??c,updatedAt:c};return e>=0?d[e]=g:d.push(g),i(a,d),g}function o(a,b=50){return m(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function p(a,b){return m(a).filter(a=>a.id.startsWith(b))}function q(a,b){return m(a).find(a=>a.id===b)}function r(a,b){return m(a).filter(a=>!b||a.type===b).sort((a,b)=>b.updatedAt-a.updatedAt)[0]}function s(a){return m(a).filter(a=>"processing"===a.status).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a){let b=m(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),k.delete(a),b.length}function u(a,b){let c=m(a),d=c.findIndex(a=>a.id===b);return!(d<0)&&(c.splice(d,1),i(a,c),!0)}},39372:(a,b,c)=>{c.d(b,{DR:()=>l,EG:()=>n,EK:()=>o,G2:()=>u,Il:()=>s,M6:()=>i,NJ:()=>t,R_:()=>k,_8:()=>p,bz:()=>r,gq:()=>h,md:()=>j});var d=c(76760),e=c(78217),f=c(23500),g=c(3063);function h(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=e?Math.max(j,b):Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}function i(a,b=[],c){let d=[],e=[];for(let b of a)0===b.evidence.length&&d.push(`${b.title} 未检索到资料证据`),b.content.length<80&&d.push(`${b.title} 内容较短,建议人工补充或重新生成`);return c&&a.length<c.chapters.length&&e.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,f.zY)(c).length&&e.push("模板未绑定任何提示词"),{passed:0===e.length,warnings:d,errors:e}}function j(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))||c.some(a=>/空小节|缺少规划小节/u.test(a))?"failed":"success"}function k(a){return(0,g.ap)(a)}function l(a,b){return 0>=(0,e.V7)(a.content)?"failed":"completed"}function m(a,b,c=12){if(0===b.length)return[];let e=b.slice(0,c).map(a=>d.basename(a)),f=b.length>c?` 等 ${b.length} 个文件`:"";return[`${a}:${e.join("、")}${f}`]}function n(a){return a?({ready:"就绪",pending:"待构建",partial:"部分就绪",error:"异常",unavailable:"不可用"})[a]??"未知":"未知"}function o(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),l=k.map(a=>a.relativePath),o=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),p=[...m("部分绑定文件未完成索引,已自动跳过",f),...m("部分绑定文件没有可用切片,已自动跳过",g),...m("部分绑定文件索引失败,已自动跳过",h)],q=c.size>0&&0===o?["所有绑定文件均无可用切片"]:[],r=[...p,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为${n(j.status)},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:o,blockingIssues:q,warnings:r}}function p(a){return[...a].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",")}function q(a,b=5){return a?Object.entries(a).sort((a,b)=>b[1].inputChars-a[1].inputChars).slice(0,b):[]}function r(a,b=5){return q(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字${b.schemaFailures?`(schema失败${b.schemaFailures})`:""}`).join(",")}function s(a){return a.filter(a=>a.name.startsWith("phase:")).sort((a,b)=>a.startedAt-b.startedAt).map(a=>`${a.name}:${(a.durationMs/1e3).toFixed(1)} 秒`)}function t(a,b=5){return q(a,b).map(([a,b])=>{let c=b.cacheHitTokens+b.cacheMissTokens,d=c>0?`,缓存命中 ${Math.round(b.cacheHitTokens/c*100)}%(${b.cacheHitTokens}/${c} token)`:"",e=b.schemaFailures?`,schema 失败 ${b.schemaFailures} 次`:"";return`${a}:${b.calls} 次,输入 ${(b.inputChars/1e4).toFixed(1)} 万字(L3 ${(b.l3Chars/1e4).toFixed(1)} 万字)${d}${e}`})}function u(a,b,c){if(Number.isFinite(c)&&c>0)return Math.ceil(c);let d=new Set(b.filter(Boolean)),e=a.listFiles?.().filter(a=>0===d.size||d.has(a.relativePath)).reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0)??0;return e>0?e:Math.max(1,d.size)}},40693:(a,b,c)=>{c.d(b,{Av:()=>K,CS:()=>R,DK:()=>Z,FI:()=>A,Fw:()=>B,Hl:()=>D,Ls:()=>z,Qe:()=>y,b7:()=>L,db:()=>F,eS:()=>S,iX:()=>E,jW:()=>X,l5:()=>Y,ot:()=>C,y1:()=>J});var d=c(29055),e=c(3063),f=c(22157),g=c(41991);let h=a=>a.split(/\n(?=#{1,3}\s)/u)[0].trim(),i=/按设计图纸执行|按设计文件执行|详见设计图纸|按.{0,10}设计总说明执行|详见图纸|以设计图纸为准/u,j=/按设计确定/u,k=/\d+(?:\.\d+)?\s*(?:㎡|m²|m2|m3|m³|mm|cm|m|MPa|kPa|%|日历天|天|小时|层|台|套|个|座|次|kN|t|N|颗|樘|扇)/giu,l=/(?:间距|偏差|坡度|养护|搭接|试验压力|含水率|饱满度|压实度|厚度|饱满)[^\n]{0,10}\d/giu;function m(a,b){return!!i.test(a)||!!j.test(a)&&(a.match(k)||[]).length+(a.match(l)||[]).length<b}let n=["精心组织","科学管理","精益求精","全力保障","高效推进","力争一流","最大限度","显著提升","大力落实","充分确保","严格把控"],o=RegExp(n.join("|"),"u"),p=["精心组织科学管理确保工程质量","严格把控质量安全进度各项指标","最大限度提升项目管理水平","全力保障项目顺利推进","大力落实各项管理措施"],q=["精心组织劳动力分批进场并登记交底","每道工序完成后实测实量并记录数据","混凝土浇筑后每天洒水养护不少于两次"];async function r(a){return(0,g.A)({prototypes:[...p],negativePrototypes:[...q],lexicalHints:o,embedDocuments:a})}let s=[{pattern:/质量|验收|隐蔽|样板|通病/u,label:"质量闭环",required:["自检","互检","交接检","整改","复查","归档"],prompt:"质量类内容必须形成“自检—互检—交接检—整改—复查—资料归档”闭环。",ownerRe:/质量/u},{pattern:/安全|风险|危大|临电|消防|吊装|高处/u,label:"安全闭环",required:["辨识","交底","检查","整改","复查","销项"],prompt:"安全类内容必须形成“风险辨识—专项交底—现场检查—隐患整改—复查销项”闭环。"},{pattern:/进度|工期|节点|计划/u,label:"进度闭环",required:["计划","检查","偏差","纠偏","复核"],prompt:"进度类内容必须形成“计划分解—日/周检查—偏差识别—资源纠偏—节点复核”闭环。",ownerRe:/进度|工期/u},{pattern:/文明|扬尘|噪声|绿色|环保|垃圾/u,label:"环保闭环",required:["监测","预警","处置","台账"],prompt:"文明环保类内容必须形成“监测—预警—联动处置—台账记录”闭环。"},{pattern:/工资|劳务|实名/u,label:"工资闭环",required:["实名","考勤","核算","公示","代发","归档"],prompt:"工资保障类内容必须形成“实名登记—考勤—核算—公示—银行代发—归档”闭环。",ownerRe:/劳务|工资|劳动力|实名|用工/u},{pattern:/应急|预案|救援|事故/u,label:"应急闭环",required:["发现","警戒","疏散","处置","上报","复盘"],prompt:"应急类内容必须形成“发现险情—警戒疏散—初期处置—救援上报—复盘整改”闭环。"}],t={building:{label:"房建工程",chain:["施工准备","土方/基础","主体结构","二次结构/砌体","防水","机电安装","装饰装修","室外工程","竣工验收"],forbidden:["管道闭水试验","沥青摊铺","水稳层","交通导改"],prompt:"房建类章节应按“施工准备—基础—主体—二次结构—防水—机电—装饰—室外—验收”组织,不得混入市政道路工序。"},municipal:{label:"市政工程",chain:["测量放线","管线探测","围挡导行","沟槽/路基","管道/管涵/检查井","回填","水稳/沥青/铺装","标线/标志/路灯","验收移交"],forbidden:["主体结构","二次结构","塔吊","外脚手架","屋面防水"],prompt:"市政类章节应按“测量放线—管线探测—围挡导行—沟槽/路基—管道/结构—回填—路面恢复—验收移交”组织,不得写成房建主体结构逻辑。"},renovation:{label:"老旧小区改造",chain:["居民沟通","分区施工","既有保护","外墙/屋面/管网改造","扰民控制","竣工恢复"],forbidden:["大面积深基坑","高支模","大体量主体结构","长距离交通导改"],prompt:"老旧小区改造类章节必须体现“居民沟通—分区施工—既有保护—改造作业—扰民控制—竣工恢复”,不得忽略居民通行和既有设施保护。"},decoration:{label:"装饰装修工程",chain:["基层处理","防水/闭水","吊顶/龙骨","墙地面/铺装","收口/收边","成品保护","空气质量/环境检测"],forbidden:["深基坑","路基压实","水稳层","沥青摊铺","大体量土方"],prompt:"装饰装修类章节应按“基层处理—防水闭水—吊顶墙面—地面铺装—细部收口—成品保护—空气质量验收”组织,不得混入基坑、路基等无关内容。"}},u=[{title:"招标评分项响应索引",pattern:/技术标|施工组织设计|评分|响应/u,prompt:"设置招标评分项响应索引,逐项对应章节、响应内容和位置。"},{title:"主要工程量一览表",pattern:/工程量|清单|土方|钢筋|混凝土|管道|路面/u,prompt:"将主要工程量表格化,关联资源配置和进度节点。"},{title:"影像资料留存",pattern:/隐蔽|危大|整改|验收|样板/u,prompt:"隐蔽、危大、材料验收、样板和整改前后对比必须留存影像资料。"},{title:"变更签证管理",pattern:/改造|市政|工期紧|变更|签证/u,prompt:"改造、市政或工期紧项目应补充变更识别、技术核定、签证资料和影响跟踪。"},{title:"危险品专项管理",pattern:/装修|装饰|动火|油漆|稀释剂|氧气|乙炔/u,prompt:"涉及动火、油漆、稀释剂、氧气乙炔时应补充危险品分区存放与动火审批。"},{title:"材料损耗与周转控制",pattern:/钢筋|模板|周转|材料|大体量/u,prompt:"体量大或材料占比高时应补充钢筋翻样、模板周转、余料回收和限额领料。"},{title:"分户验收",pattern:/住宅|住户|交付|分户/u,prompt:"住宅项目应补充分户实测、问题清单、整改销项和交付资料。"}];function v(a){return a.replace(/\s+/gu,"").toLowerCase()}function w(a,b){return a.split("/").some(a=>b.includes(v(a)))}function x(a){return a.split("/")[0]}function y(a){let b=[];for(let c of a.chapters)for(let a of String(c.content||"").split(/(?=^#{3}\s)/mu)){if(!a.trim())continue;let e=a.match(/^#{1,6}\s*(.+)$/mu);if(!e)continue;let f=e[1].trim().slice(0,40);if(!f)continue;let g=v(a);for(let{type:a,pattern:e}of d.s){if(!e.test(f))continue;let d=t[a],h=d.forbidden.filter(a=>g.includes(v(a)));h.length>=2&&b.push({chapter:c,kind:"mixed",domain:a,label:d.label,sectionTitle:f,hits:[...h],missing:[],prompt:d.prompt})}}let c=v(a.documentText);for(let d of Object.keys(t)){let e=t[d],f=e.chain.filter(a=>w(a,c));if(!(RegExp(e.label,"u").test(a.documentText)||f.length>=3)||f.length>=Math.min(3,e.chain.length))continue;let g=[...a.chapters].map(a=>({chapter:a,hits:e.chain.filter(b=>w(b,v(`${a.title} ${a.content||""}`))).length})).sort((a,b)=>b.hits-a.hits)[0];g&&0!==g.hits&&b.push({chapter:g.chapter,kind:"insufficient",domain:d,label:e.label,hits:f.map(x),missing:e.chain.filter(a=>!w(a,c)).map(x),prompt:e.prompt})}return b}function z(a){let b=`${a.title} ${(a.sections||[]).join(" ")}`;return/施工组织设计|施工组织|施组|技术标|施工方案|质量|安全|文明施工/u.test(b)?["【施工组织设计专项写作规则】","- 禁止空话套话:不要只写“加强管理、严格控制、确保质量、精心组织、科学管理、周密部署、狠抓落实、统筹兼顾”等零信息口号(全文质检会按语义原型拦截并要求重写),必须写成“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”。","- 落地措施范例:“由质检员每周不少于1次对级配碎石层压实度抽检,不足95%的当日返工复验”——每句措施要能回答“谁、做什么、什么标准、多久一次、不达标怎么办”;项目特有数据必须来自资料或图谱。",...s.filter(a=>a.pattern.test(b)).map(a=>`- ${a.prompt}`),...u.filter(a=>a.pattern.test(b)).map(a=>`- 高分补充:${a.prompt}`)].join("\n"):""}function A(a){let b={id:"runtime",name:a.templateName,outputTitle:a.outputTitle||"",description:"",category:"",chapters:[]},c=a.chapters.map(a=>({...a,title:`${a.title} ${(a.sections||[]).join(" ")}`.trim()})),e=(0,d.y)({template:{...b,name:"",outputTitle:""},chapters:c}).filter(a=>"general"!==a),f=(e.length?e:(0,d.y)({template:b,chapters:[],requirement:a.requirement,materialText:a.materialText})).filter(a=>"general"!==a).map(a=>t[a].prompt);return f.length?`【专业工序链约束】
|
|
98
|
-
${f.map(a=>`- ${a}`).join("\n")}`:""}async function B(a,b){let c=[],d=await r(b);for(let b of a){let a=b.content.split(/[。;;\n]/u).map(a=>a.trim()).filter(a=>a.length>=8);if(0===a.length)continue;let e=await d(a),f=new Set;a.forEach((a,b)=>{if(e[b])for(let b of n)a.includes(b)&&f.add(b)}),f.size>0&&c.push({level:"warning",message:`${b.title} 存在施工组织设计空泛套话:${[...f].slice(0,8).join("、")}`,suggestion:"请按“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”重写相关措施。"})}return c}function C(a){let b=[];for(let c of s){if(!c.ownerRe)continue;let d=a.find(a=>c.ownerRe.test(a.title));if(!d)continue;let e=c.required.filter(a=>!d.content.includes(a));0!==e.length&&b.push({chapter:d,deficit:{label:c.label,required:[...c.required],missing:e,prompt:c.prompt}})}return b}function D(a){let b=[];for(let{chapter:c,deficit:d}of C(a))b.push({level:"warning",severity:"warning",category:"control_loop",message:`${c.title} 缺少${d.label}关键链条:${d.missing.join("、")}`,suggestion:`${d.prompt}链条要素缺失须补写:在该章对应小节内自然融入缺失环节,保持既有内容与结构不变。`,chapterId:c.id,provenance:{detectorId:"construction-org-control-loop",fingerprint:(0,f.c6)(`${d.label}\u0000${c.id}`)}});for(let c of s)if(!c.ownerRe)for(let d of a){let a=`${d.title} ${(d.sections||[]).join(" ")}`;if(!c.pattern.test(a))continue;let e=c.required.filter(a=>!d.content.includes(a));e.length>=Math.ceil(c.required.length/2)&&b.push({level:"warning",message:`${d.title} 缺少${c.label}关键链条:${e.join("、")}`,suggestion:c.prompt})}return b}function E(a){let b=`${a.factsModel.project.map(a=>a.value).join(" ")} ${a.factsModel.preciseFacts.map(a=>a.value).join(" ")}`,c=`${a.markdown} ${b}`,d=[];if(a.chapters.length>0)for(let b of y({chapters:a.chapters,documentText:c})){let a=t[b.domain];"mixed"===b.kind?d.push({level:"warning",severity:"warning",category:"professional_chain",message:`${b.chapter.title}「${b.sectionTitle}」疑似${a.label}内容混入不匹配工序:${b.hits.join("、")}`,suggestion:a.prompt,chapterId:b.chapter.id,provenance:{detectorId:"construction-org-professional-chain",fingerprint:(0,f.c6)(`mixed\u0000${b.domain}\u0000${b.chapter.id}\u0000${b.sectionTitle}`)}}):d.push({level:"warning",severity:"warning",category:"professional_chain",message:`${a.label}工序链覆盖不足:仅识别到 ${b.hits.join("、")||"未识别到关键工序"}`,suggestion:a.prompt,chapterId:b.chapter.id,provenance:{detectorId:"construction-org-professional-chain",fingerprint:(0,f.c6)(`insufficient\u0000${b.domain}\u0000${b.chapter.id}`)}})}return d}function F(a){let b=`${a.title} ${(a.sections||[]).join(" ")} ${(a.queries||[]).join(" ")}`,c=u.filter(a=>a.pattern.test(b));return 0===c.length?"":["【隐藏高分模块触发】",...c.map(a=>`- ${a.title}:${a.prompt}`)].join("\n")}function G(a){let b=a.split("\n"),c=b.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容)\s*$/u.test(a.trim()));if(c<0){let a=b.findIndex(a=>/^###\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*主要施工\s*内容[^\n]*$/u.test(a.trim()));if(a>=0){let d=b.length;for(let c=a+1;c<b.length;c+=1)if(/^#{2,3}\s+/u.test(b[c].trim())){d=c;break}let e=b.slice(a,d).join("\n").split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);e.length>=5&&e.every(f.az)&&(c=a)}if(c<0)return""}let d=b.length;for(let a=c+1;a<b.length;a+=1)if(/^#{2,3}\s+/u.test(b[a].trim())){d=a;break}return b.slice(c,d).join("\n").replace(/^\*\*([^*\n]{2,50})\*\*\s*$/gmu,"#### $1").replace(/承包人法(?=[::])/gu,"施工方法")}function H(a){let b=a.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容)\s*\n+/mu,""),c=(b.match(/^####\s+(?:\d+(?:\.\d+)*\s+)?[一二三四五六七八九十\d]*[、..]?\s*\S+/gmu)||[]).length||(b.match(/^[一二三四五六七八九十]+、\S+/gmu)||[]).length,d=b.split(/^####\s+/gmu).slice(1).map(a=>h(a)).filter(Boolean),g=d.filter(a
|
|
96
|
+
${R.join("\n\n")}`,a.forbidDrawingImages));if(0===Q.length)return{sections:C,failedBlocks:Q,allSucceeded:!0,markdown:S};if(a.diagnostics&&Q.length>0){let b=a.isolatedRetry?"定向重写仍失败":Q.length===d.length?"全部失败":"部分失败";a.diagnostics.llm.lastError=`规划块${b}:${Q.map(({block:a})=>a.title).join("、")}`}return{sections:C,failedBlocks:Q,allSucceeded:!1,markdown:S}}},37095:(a,b,c)=>{c.d(b,{CU:()=>u,H7:()=>t,JB:()=>q,Qf:()=>n,kW:()=>r,oy:()=>o,sn:()=>s,wG:()=>p});var d=c(29021),e=c(21820),f=c(33873),g=c(19898);function h(a){return f.join(e.homedir(),".customize-agent","projects",(0,g.computeProjectId)(a),"kb-operations.jsonl")}function i(a,b){let c=h(a);d.mkdirSync(f.dirname(c),{recursive:!0});let e=`${c}.${process.pid}.${Date.now()}.tmp`;d.writeFileSync(e,`${(function(a){if(a.length<=200)return a;let b=new Set([...a].sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,200).map(a=>a.id));return a.filter(a=>b.has(a.id))})(b).map(a=>JSON.stringify(a)).join("\n")}
|
|
97
|
+
`,"utf8"),d.renameSync(e,c);let g=k.get(a);g&&(g.mtimeMs=l(c))}let j=Math.round(Date.now()-1e3*process.uptime()),k=new Map;function l(a){try{return d.statSync(a).mtimeMs}catch{return 0}}function m(a){let b=h(a),c=l(b),e=k.get(a);if(e&&e.mtimeMs===c)return e.records;let f=function(a){let b=function(a){let b=h(a);return d.existsSync(b)?d.readFileSync(b,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}):[]}(a),c=b.filter(a=>"processing"===a.status&&a.updatedAt<j);if(c.length>0){let d=Date.now();for(let a of c)a.status="error",a.stage="error",a.error="服务重启导致任务中断,未完成",a.message=a.error,a.updatedAt=d;i(a,b)}return b}(a);return k.set(a,{mtimeMs:l(b),records:f}),f}function n(a,b){let c=Date.now(),d=m(a),e=d.findIndex(a=>a.id===b.id),f=e>=0?d[e]:void 0,g={id:b.id,type:b.type,title:b.title,stage:b.stage??f?.stage??"uploading",status:b.status??f?.status??"processing",message:b.message??f?.message??"",percent:b.percent??f?.percent??0,fileName:b.fileName??f?.fileName,filePath:b.filePath??f?.filePath,chunkCount:b.chunkCount??f?.chunkCount,textLength:b.textLength??f?.textLength,extractionMode:b.extractionMode??f?.extractionMode,error:b.status&&"error"!==b.status?void 0:b.error??f?.error,details:b.details??f?.details,createdAt:f?.createdAt??c,updatedAt:c};return e>=0?d[e]=g:d.push(g),i(a,d),g}function o(a,b=50){return m(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function p(a,b){return m(a).filter(a=>a.id.startsWith(b))}function q(a,b){return m(a).find(a=>a.id===b)}function r(a,b){return m(a).filter(a=>!b||a.type===b).sort((a,b)=>b.updatedAt-a.updatedAt)[0]}function s(a){return m(a).filter(a=>"processing"===a.status).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a){let b=m(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),k.delete(a),b.length}function u(a,b){let c=m(a),d=c.findIndex(a=>a.id===b);return!(d<0)&&(c.splice(d,1),i(a,c),!0)}},39372:(a,b,c)=>{c.d(b,{DR:()=>l,EG:()=>n,EK:()=>o,G2:()=>u,Il:()=>s,M6:()=>i,NJ:()=>t,R_:()=>k,_8:()=>p,bz:()=>r,gq:()=>h,md:()=>j});var d=c(76760),e=c(78217),f=c(23500),g=c(3063);function h(a){let{budgetTarget:b,sectionCount:c,title:d,longformStrict:e}=a,f=/[、,,;;]/u.test(d),g=/工期|进度|质量|安全|危大|资源|人材机|保障|措施|重难点/u.test(d),h=/概况|结语|附录|说明/u.test(d),i=c>0?c*(f?720:g?900:780):g?5200:3600,j=e?h?2600:g?5200:3600:Math.min(1200,b),k=e?Math.min(Math.max(4200,b),c>=30?9800:f?8800:g?9200:7200):b,l=e?Math.max(j,b):Math.max(j,Math.min(b,i,k));return{budgetTarget:b,roundTarget:l,structureTarget:i,maxWords:Math.ceil(l*(a.longformStrict?1.12:1.18)),label:`章节预算约 ${b} 字,本轮生成约 ${l} 字,结构目标约 ${i} 字`}}function i(a,b=[],c){let d=[],e=[];for(let b of a)0===b.evidence.length&&d.push(`${b.title} 未检索到资料证据`),b.content.length<80&&d.push(`${b.title} 内容较短,建议人工补充或重新生成`);return c&&a.length<c.chapters.length&&e.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===(0,f.zY)(c).length&&e.push("模板未绑定任何提示词"),{passed:0===e.length,warnings:d,errors:e}}function j(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))||c.some(a=>/空小节|缺少规划小节/u.test(a))?"failed":"success"}function k(a){return(0,g.ap)(a)}function l(a,b){return 0>=(0,e.V7)(a.content)?"failed":"completed"}function m(a,b,c=12){if(0===b.length)return[];let e=b.slice(0,c).map(a=>d.basename(a)),f=b.length>c?` 等 ${b.length} 个文件`:"";return[`${a}:${e.join("、")}${f}`]}function n(a){return a?({ready:"就绪",pending:"待构建",partial:"部分就绪",error:"异常",unavailable:"不可用"})[a]??"未知":"未知"}function o(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),l=k.map(a=>a.relativePath),o=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),p=[...m("部分绑定文件未完成索引,已自动跳过",f),...m("部分绑定文件没有可用切片,已自动跳过",g),...m("部分绑定文件索引失败,已自动跳过",h)],q=c.size>0&&0===o?["所有绑定文件均无可用切片"]:[],r=[...p,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为${n(j.status)},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:l,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:o,blockingIssues:q,warnings:r}}function p(a){return[...a].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",")}function q(a,b=5){return a?Object.entries(a).sort((a,b)=>b[1].inputChars-a[1].inputChars).slice(0,b):[]}function r(a,b=5){return q(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字${b.schemaFailures?`(schema失败${b.schemaFailures})`:""}`).join(",")}function s(a){return a.filter(a=>a.name.startsWith("phase:")).sort((a,b)=>a.startedAt-b.startedAt).map(a=>`${a.name}:${(a.durationMs/1e3).toFixed(1)} 秒`)}function t(a,b=5){return q(a,b).map(([a,b])=>{let c=b.cacheHitTokens+b.cacheMissTokens,d=c>0?`,缓存命中 ${Math.round(b.cacheHitTokens/c*100)}%(${b.cacheHitTokens}/${c} token)`:"",e=b.schemaFailures?`,schema 失败 ${b.schemaFailures} 次`:"";return`${a}:${b.calls} 次,输入 ${(b.inputChars/1e4).toFixed(1)} 万字(L3 ${(b.l3Chars/1e4).toFixed(1)} 万字)${d}${e}`})}function u(a,b,c){if(Number.isFinite(c)&&c>0)return Math.ceil(c);let d=new Set(b.filter(Boolean)),e=a.listFiles?.().filter(a=>0===d.size||d.has(a.relativePath)).reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0)??0;return e>0?e:Math.max(1,d.size)}},40693:(a,b,c)=>{c.d(b,{Av:()=>K,CS:()=>T,DK:()=>_,FI:()=>A,Fw:()=>B,Hl:()=>D,Ls:()=>z,Qe:()=>y,b7:()=>L,db:()=>F,eS:()=>U,iX:()=>E,jW:()=>Z,l5:()=>$,ot:()=>C,y1:()=>J});var d=c(29055),e=c(3063),f=c(22157),g=c(41991);let h=a=>a.split(/\n(?=#{1,3}\s)/u)[0].trim(),i=/按设计图纸执行|按设计文件执行|详见设计图纸|按.{0,10}设计总说明执行|详见图纸|以设计图纸为准/u,j=/按设计确定/u,k=/\d+(?:\.\d+)?\s*(?:㎡|m²|m2|m3|m³|mm|cm|m|MPa|kPa|%|日历天|天|小时|层|台|套|个|座|次|kN|t|N|颗|樘|扇)/giu,l=/(?:间距|偏差|坡度|养护|搭接|试验压力|含水率|饱满度|压实度|厚度|饱满)[^\n]{0,10}\d/giu;function m(a,b){return!!i.test(a)||!!j.test(a)&&(a.match(k)||[]).length+(a.match(l)||[]).length<b}let n=["精心组织","科学管理","精益求精","全力保障","高效推进","力争一流","最大限度","显著提升","大力落实","充分确保","严格把控"],o=RegExp(n.join("|"),"u"),p=["精心组织科学管理确保工程质量","严格把控质量安全进度各项指标","最大限度提升项目管理水平","全力保障项目顺利推进","大力落实各项管理措施"],q=["精心组织劳动力分批进场并登记交底","每道工序完成后实测实量并记录数据","混凝土浇筑后每天洒水养护不少于两次"];async function r(a){return(0,g.A)({prototypes:[...p],negativePrototypes:[...q],lexicalHints:o,embedDocuments:a})}let s=[{pattern:/质量|验收|隐蔽|样板|通病/u,label:"质量闭环",required:["自检","互检","交接检","整改","复查","归档"],prompt:"质量类内容必须形成“自检—互检—交接检—整改—复查—资料归档”闭环。",ownerRe:/质量/u},{pattern:/安全|风险|危大|临电|消防|吊装|高处/u,label:"安全闭环",required:["辨识","交底","检查","整改","复查","销项"],prompt:"安全类内容必须形成“风险辨识—专项交底—现场检查—隐患整改—复查销项”闭环。"},{pattern:/进度|工期|节点|计划/u,label:"进度闭环",required:["计划","检查","偏差","纠偏","复核"],prompt:"进度类内容必须形成“计划分解—日/周检查—偏差识别—资源纠偏—节点复核”闭环。",ownerRe:/进度|工期/u},{pattern:/文明|扬尘|噪声|绿色|环保|垃圾/u,label:"环保闭环",required:["监测","预警","处置","台账"],prompt:"文明环保类内容必须形成“监测—预警—联动处置—台账记录”闭环。"},{pattern:/工资|劳务|实名/u,label:"工资闭环",required:["实名","考勤","核算","公示","代发","归档"],prompt:"工资保障类内容必须形成“实名登记—考勤—核算—公示—银行代发—归档”闭环。",ownerRe:/劳务|工资|劳动力|实名|用工/u},{pattern:/应急|预案|救援|事故/u,label:"应急闭环",required:["发现","警戒","疏散","处置","上报","复盘"],prompt:"应急类内容必须形成“发现险情—警戒疏散—初期处置—救援上报—复盘整改”闭环。"}],t={building:{label:"房建工程",chain:["施工准备","土方/基础","主体结构","二次结构/砌体","防水","机电安装","装饰装修","室外工程","竣工验收"],forbidden:["管道闭水试验","沥青摊铺","水稳层","交通导改"],prompt:"房建类章节应按“施工准备—基础—主体—二次结构—防水—机电—装饰—室外—验收”组织,不得混入市政道路工序。"},municipal:{label:"市政工程",chain:["测量放线","管线探测","围挡导行","沟槽/路基","管道/管涵/检查井","回填","水稳/沥青/铺装","标线/标志/路灯","验收移交"],forbidden:["主体结构","二次结构","塔吊","外脚手架","屋面防水"],prompt:"市政类章节应按“测量放线—管线探测—围挡导行—沟槽/路基—管道/结构—回填—路面恢复—验收移交”组织,不得写成房建主体结构逻辑。"},renovation:{label:"老旧小区改造",chain:["居民沟通","分区施工","既有保护","外墙/屋面/管网改造","扰民控制","竣工恢复"],forbidden:["大面积深基坑","高支模","大体量主体结构","长距离交通导改"],prompt:"老旧小区改造类章节必须体现“居民沟通—分区施工—既有保护—改造作业—扰民控制—竣工恢复”,不得忽略居民通行和既有设施保护。"},decoration:{label:"装饰装修工程",chain:["基层处理","防水/闭水","吊顶/龙骨","墙地面/铺装","收口/收边","成品保护","空气质量/环境检测"],forbidden:["深基坑","路基压实","水稳层","沥青摊铺","大体量土方"],prompt:"装饰装修类章节应按“基层处理—防水闭水—吊顶墙面—地面铺装—细部收口—成品保护—空气质量验收”组织,不得混入基坑、路基等无关内容。"}},u=[{title:"招标评分项响应索引",pattern:/技术标|施工组织设计|评分|响应/u,prompt:"设置招标评分项响应索引,逐项对应章节、响应内容和位置。"},{title:"主要工程量一览表",pattern:/工程量|清单|土方|钢筋|混凝土|管道|路面/u,prompt:"将主要工程量表格化,关联资源配置和进度节点。"},{title:"影像资料留存",pattern:/隐蔽|危大|整改|验收|样板/u,prompt:"隐蔽、危大、材料验收、样板和整改前后对比必须留存影像资料。"},{title:"变更签证管理",pattern:/改造|市政|工期紧|变更|签证/u,prompt:"改造、市政或工期紧项目应补充变更识别、技术核定、签证资料和影响跟踪。"},{title:"危险品专项管理",pattern:/装修|装饰|动火|油漆|稀释剂|氧气|乙炔/u,prompt:"涉及动火、油漆、稀释剂、氧气乙炔时应补充危险品分区存放与动火审批。"},{title:"材料损耗与周转控制",pattern:/钢筋|模板|周转|材料|大体量/u,prompt:"体量大或材料占比高时应补充钢筋翻样、模板周转、余料回收和限额领料。"},{title:"分户验收",pattern:/住宅|住户|交付|分户/u,prompt:"住宅项目应补充分户实测、问题清单、整改销项和交付资料。"}];function v(a){return a.replace(/\s+/gu,"").toLowerCase()}function w(a,b){return a.split("/").some(a=>b.includes(v(a)))}function x(a){return a.split("/")[0]}function y(a){let b=[];for(let c of a.chapters)for(let a of String(c.content||"").split(/(?=^#{3}\s)/mu)){if(!a.trim())continue;let e=a.match(/^#{1,6}\s*(.+)$/mu);if(!e)continue;let f=e[1].trim().slice(0,40);if(!f)continue;let g=v(a);for(let{type:a,pattern:e}of d.s){if(!e.test(f))continue;let d=t[a],h=d.forbidden.filter(a=>g.includes(v(a)));h.length>=2&&b.push({chapter:c,kind:"mixed",domain:a,label:d.label,sectionTitle:f,hits:[...h],missing:[],prompt:d.prompt})}}let c=v(a.documentText);for(let d of Object.keys(t)){let e=t[d],f=e.chain.filter(a=>w(a,c));if(!(RegExp(e.label,"u").test(a.documentText)||f.length>=3)||f.length>=Math.min(3,e.chain.length))continue;let g=[...a.chapters].map(a=>({chapter:a,hits:e.chain.filter(b=>w(b,v(`${a.title} ${a.content||""}`))).length})).sort((a,b)=>b.hits-a.hits)[0];g&&0!==g.hits&&b.push({chapter:g.chapter,kind:"insufficient",domain:d,label:e.label,hits:f.map(x),missing:e.chain.filter(a=>!w(a,c)).map(x),prompt:e.prompt})}return b}function z(a){let b=`${a.title} ${(a.sections||[]).join(" ")}`;return/施工组织设计|施工组织|施组|技术标|施工方案|质量|安全|文明施工/u.test(b)?["【施工组织设计专项写作规则】","- 禁止空话套话:不要只写“加强管理、严格控制、确保质量、精心组织、科学管理、周密部署、狠抓落实、统筹兼顾”等零信息口号(全文质检会按语义原型拦截并要求重写),必须写成“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”。","- 落地措施范例:“由质检员每周不少于1次对级配碎石层压实度抽检,不足95%的当日返工复验”——每句措施要能回答“谁、做什么、什么标准、多久一次、不达标怎么办”;项目特有数据必须来自资料或图谱。",...s.filter(a=>a.pattern.test(b)).map(a=>`- ${a.prompt}`),...u.filter(a=>a.pattern.test(b)).map(a=>`- 高分补充:${a.prompt}`)].join("\n"):""}function A(a){let b={id:"runtime",name:a.templateName,outputTitle:a.outputTitle||"",description:"",category:"",chapters:[]},c=a.chapters.map(a=>({...a,title:`${a.title} ${(a.sections||[]).join(" ")}`.trim()})),e=(0,d.y)({template:{...b,name:"",outputTitle:""},chapters:c}).filter(a=>"general"!==a),f=(e.length?e:(0,d.y)({template:b,chapters:[],requirement:a.requirement,materialText:a.materialText})).filter(a=>"general"!==a).map(a=>t[a].prompt);return f.length?`【专业工序链约束】
|
|
98
|
+
${f.map(a=>`- ${a}`).join("\n")}`:""}async function B(a,b){let c=[],d=await r(b);for(let b of a){let a=b.content.split(/[。;;\n]/u).map(a=>a.trim()).filter(a=>a.length>=8);if(0===a.length)continue;let e=await d(a),f=new Set;a.forEach((a,b)=>{if(e[b])for(let b of n)a.includes(b)&&f.add(b)}),f.size>0&&c.push({level:"warning",message:`${b.title} 存在施工组织设计空泛套话:${[...f].slice(0,8).join("、")}`,suggestion:"请按“责任岗位+执行动作+量化标准+检查频次+整改时限+复查销项”重写相关措施。"})}return c}function C(a){let b=[];for(let c of s){if(!c.ownerRe)continue;let d=a.find(a=>c.ownerRe.test(a.title));if(!d)continue;let e=c.required.filter(a=>!d.content.includes(a));0!==e.length&&b.push({chapter:d,deficit:{label:c.label,required:[...c.required],missing:e,prompt:c.prompt}})}return b}function D(a){let b=[];for(let{chapter:c,deficit:d}of C(a))b.push({level:"warning",severity:"warning",category:"control_loop",message:`${c.title} 缺少${d.label}关键链条:${d.missing.join("、")}`,suggestion:`${d.prompt}链条要素缺失须补写:在该章对应小节内自然融入缺失环节,保持既有内容与结构不变。`,chapterId:c.id,provenance:{detectorId:"construction-org-control-loop",fingerprint:(0,f.c6)(`${d.label}\u0000${c.id}`)}});for(let c of s)if(!c.ownerRe)for(let d of a){let a=`${d.title} ${(d.sections||[]).join(" ")}`;if(!c.pattern.test(a))continue;let e=c.required.filter(a=>!d.content.includes(a));e.length>=Math.ceil(c.required.length/2)&&b.push({level:"warning",message:`${d.title} 缺少${c.label}关键链条:${e.join("、")}`,suggestion:c.prompt})}return b}function E(a){let b=`${a.factsModel.project.map(a=>a.value).join(" ")} ${a.factsModel.preciseFacts.map(a=>a.value).join(" ")}`,c=`${a.markdown} ${b}`,d=[];if(a.chapters.length>0)for(let b of y({chapters:a.chapters,documentText:c})){let a=t[b.domain];"mixed"===b.kind?d.push({level:"warning",severity:"warning",category:"professional_chain",message:`${b.chapter.title}「${b.sectionTitle}」疑似${a.label}内容混入不匹配工序:${b.hits.join("、")}`,suggestion:a.prompt,chapterId:b.chapter.id,provenance:{detectorId:"construction-org-professional-chain",fingerprint:(0,f.c6)(`mixed\u0000${b.domain}\u0000${b.chapter.id}\u0000${b.sectionTitle}`)}}):d.push({level:"warning",severity:"warning",category:"professional_chain",message:`${a.label}工序链覆盖不足:仅识别到 ${b.hits.join("、")||"未识别到关键工序"}`,suggestion:a.prompt,chapterId:b.chapter.id,provenance:{detectorId:"construction-org-professional-chain",fingerprint:(0,f.c6)(`insufficient\u0000${b.domain}\u0000${b.chapter.id}`)}})}return d}function F(a){let b=`${a.title} ${(a.sections||[]).join(" ")} ${(a.queries||[]).join(" ")}`,c=u.filter(a=>a.pattern.test(b));return 0===c.length?"":["【隐藏高分模块触发】",...c.map(a=>`- ${a.title}:${a.prompt}`)].join("\n")}function G(a){let b=a.split("\n"),c=b.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容)\s*$/u.test(a.trim()));if(c<0){let a=b.findIndex(a=>/^###\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*主要施工\s*内容[^\n]*$/u.test(a.trim()));if(a>=0){let d=b.length;for(let c=a+1;c<b.length;c+=1)if(/^#{2,3}\s+/u.test(b[c].trim())){d=c;break}let e=b.slice(a,d).join("\n").split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);e.length>=5&&e.every(f.az)&&(c=a)}if(c<0)return""}let d=b.length;for(let a=c+1;a<b.length;a+=1)if(/^#{2,3}\s+/u.test(b[a].trim())){d=a;break}return b.slice(c,d).join("\n").replace(/^\*\*([^*\n]{2,50})\*\*\s*$/gmu,"#### $1").replace(/承包人法(?=[::])/gu,"施工方法")}function H(a){let b=a.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容)\s*\n+/mu,""),c=(b.match(/^####\s+(?:\d+(?:\.\d+)*\s+)?[一二三四五六七八九十\d]*[、..]?\s*\S+/gmu)||[]).length||(b.match(/^[一二三四五六七八九十]+、\S+/gmu)||[]).length,d=b.split(/^####\s+/gmu).slice(1).map(a=>h(a)).filter(Boolean),g=d.filter(a=>!N(a)&&!(0,f.az)(a)),i=d.filter(a=>/资料内容事实|#{2,6}\s+|^\*\*[^*]+\*\*$|未尽事宜|专业施工内容统筹|招标范围还包含|具备有效的.*资质/um.test(a)),j=d.filter(a=>{if(!/施工方法[::]/u.test(a))return!1;let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return b.length<30||(b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告/u.test(b)}),k=d.filter(a=>{let b=a.match(/施工流程[::]([\s\S]*?)(?=\n施工方法|$)/u)?.[1]||"";return/未尽事宜|本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围/u.test(b)}),l=d.map(a=>(a.split("\n")[0]||"").replace(/^\d+(?:\.\d+)*\s+/u,"").replace(/工程$/u,"").replace(/[、..]/gu,"").trim()),n=[...new Set(l.filter((a,b)=>a&&l.indexOf(a)!==b))],o=d.filter(a=>m(a,e.Ck.minParamsPerPackage)),p=!(0,f.Z1)(a),q=(a.match(/\d+(?:\.\d+)?\s*(?:㎡|m²|mm|cm|m|MPa|kPa|%|日历天|层|台|套|个|座|项|批|次|小时|年)/giu)||[]).length,r=(a.match(/工程量|材料|设备|范围|流程|验收|检测|复试|调试|隐蔽|检验批|资料|记录|系统|部位|接口|规格|标准/gu)||[]).length,s=a.split(/\r?\n/u).filter(a=>/^\s*\|.+\|\s*$/u.test(a.trim())),t=a.split(/\r?\n/u).filter(a=>!/^\s*\|.+\|\s*$/u.test(a.trim())).join("").replace(/[\s#*_`>-]/gu,"").length;return{packageCount:c,packageBlocks:d,incompletePackages:g,duplicateTitles:n,genericReferencePackages:o,dirtyPackages:i,weakMethodPackages:j,dirtyProcessPackages:k,missingProcessSequence:p,parameterCount:q,factDetailCount:r,tableCarried:s.length>=3&&t<50}}function I(a){return Math.max(0,3-a.packageCount)+a.incompletePackages.length+a.genericReferencePackages.length+a.dirtyPackages.length+a.weakMethodPackages.length+a.dirtyProcessPackages.length+a.duplicateTitles.length+ +!!a.missingProcessSequence+ +(a.parameterCount<2||a.factDetailCount<12)+ +!!a.tableCarried}function J(a,b=""){let c=b||a.map(a=>`${a.title}
|
|
99
99
|
${(a.sections||[]).join("\n")}
|
|
100
100
|
${a.content}`).join("\n\n"),d=a.filter(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)),e=/施工组织设计|施工组织|计划工期|质量标准|项目经理|工程概况/u.test(c)&&/施工/u.test(c),f=0;if(0===d.length&&e){let a=G(c);return a?I(H(a)):1}for(let a of d){let b=G(a.content)||G(c);if(!b){f+=1;continue}f+=I(H(b))}return f}function K(a,b=""){let c=[],d=b||a.map(a=>`${a.title}
|
|
101
101
|
${(a.sections||[]).join("\n")}
|
|
102
|
-
${a.content}`).join("\n\n"),e=a.filter(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)),g=/施工组织设计|施工组织|计划工期|质量标准|项目经理|工程概况/u.test(d)&&/施工/u.test(d),h=(a,b)=>({...b,chapterId:a.id,provenance:{detectorId:"construction-org-major-content",fingerprint:(0,f.c6)(a.title)}}),i=(a,b,d)=>{let e=b=>({...b,chapterId:d,provenance:{detectorId:"construction-org-major-content",fingerprint:(0,f.c6)(a)}}),g=H(b),{packageCount:h,incompletePackages:i,duplicateTitles:j,genericReferencePackages:k,dirtyPackages:l,weakMethodPackages:m,dirtyProcessPackages:n}=g;j.length>0&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${j.length} 组重复专业工程小节:${j.slice(0,5).join("、")}`,suggestion:"同一专业工程只保留一个小节,将重复小节的独有内容合并后删除冗余小节,避免专业工程重复铺陈。"})),h<3&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容专业工程不足:当前 ${h} 个,要求不少于 3 个`,suggestion:"按资料识别专业工程/分部分项工程逐项展开,每项覆盖作业对象与工程量、工序顺序、施工方法三方面要素(融入连贯叙述,不得以结构标签充当小节标题或段落开头引导)。"})),i.length>0&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${i.length} 个专业工程内容要素不全(作业对象与工程量/工序顺序/施工方法至少缺一):${function(a){let b=a.slice(0,8).map(a=>{let b=(0,f.se)(a),c=[!b.scope&&"作业对象与工程量",!b.process&&"工序顺序",!b.method&&"施工方法"].filter(Boolean).join("/");return`${
|
|
103
|
-
${
|
|
102
|
+
${a.content}`).join("\n\n"),e=a.filter(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)),g=/施工组织设计|施工组织|计划工期|质量标准|项目经理|工程概况/u.test(d)&&/施工/u.test(d),h=(a,b)=>({...b,chapterId:a.id,provenance:{detectorId:"construction-org-major-content",fingerprint:(0,f.c6)(a.title)}}),i=(a,b,d)=>{let e=b=>({...b,chapterId:d,provenance:{detectorId:"construction-org-major-content",fingerprint:(0,f.c6)(a)}}),g=H(b),{packageCount:h,incompletePackages:i,duplicateTitles:j,genericReferencePackages:k,dirtyPackages:l,weakMethodPackages:m,dirtyProcessPackages:n}=g;j.length>0&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${j.length} 组重复专业工程小节:${j.slice(0,5).join("、")}`,suggestion:"同一专业工程只保留一个小节,将重复小节的独有内容合并后删除冗余小节,避免专业工程重复铺陈。"})),h<3&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容专业工程不足:当前 ${h} 个,要求不少于 3 个`,suggestion:"按资料识别专业工程/分部分项工程逐项展开,每项覆盖作业对象与工程量、工序顺序、施工方法三方面要素(融入连贯叙述,不得以结构标签充当小节标题或段落开头引导)。"})),i.length>0&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${i.length} 个专业工程内容要素不全(作业对象与工程量/工序顺序/施工方法至少缺一):${function(a){let b=a.slice(0,8).map(a=>{let b=(0,f.se)(a),c=[!b.scope&&"作业对象与工程量",!b.process&&"工序顺序",!b.method&&"施工方法"].filter(Boolean).join("/");return`${P(a)}(缺${c})`});return a.length>8?`${b.join("、")} 等 ${a.length} 个`:b.join("、")}(i)}`,suggestion:"每个专业工程需覆盖作业对象与工程量、工序安排、施工方法三方面要素,融入连贯段落叙述(禁止以“施工概况/施工流程/施工方法”等结构标签充当标题或段落开头引导)。"})),k.length>0&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${k.length} 个工作包正文含“按设计图纸执行”式概括话术`,suggestion:"工作包正文必须落到具体数值与参数:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据,清单未覆盖的参数(标高、坡率、构造做法)取图纸具体数值;禁止“按设计图纸执行/详见设计图纸/按设计文件确定”式留白。"})),l.length>0&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容存在脏事实或标题污染`,suggestion:"清理“资料内容事实”、嵌入的 ### 标题、粗体伪标题、未尽事宜、招标范围罗列等污染内容,只保留可交付正文。"})),m.length>0&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${m.length} 个专业工程施工方法过弱`,suggestion:"施工方法不能只是专业工程名称或专业范围罗列,必须写资料已确认的工程量、材料、检测、调试、验收或记录要求。"})),n.length>0&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容存在 ${n.length} 个专业工程流程污染`,suggestion:"施工流程只能写工序链条,不能混入项目概况、总建筑面积、招标范围、未尽事宜等说明性事实。"})),g.missingProcessSequence&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容缺少工序顺序表达`,suggestion:"施工流程须有明确的工序顺序表达,工序环节按先后顺序分步展开,相邻小节不得同句式开头、同一句式全文不得反复使用(禁止以固定句模复读)。"})),(g.parameterCount<2||g.factDetailCount<12)&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容事实细度不足:参数 ${g.parameterCount} 项、事实细节 ${g.factDetailCount} 项`,suggestion:"主要施工内容必须落到资料已确认的范围、工程量/材料、流程、验收和记录要求;资料未明确的工具、型号、参数不得编造。"})),g.tableCarried&&c.push(e({level:"error",severity:"blocker",message:`${a} 主要施工内容不应使用 Markdown 表格替代专业工程正文`,suggestion:"主要施工内容应采用三级小节和段落式专业工程写法,不使用表格承载主体内容。"}))};if(0===e.length&&g){let a=G(d);return a?(i("全文",a),c):[{level:"error",severity:"blocker",message:"施工组织设计缺少“项目主要施工内容”小节",suggestion:"必须生成“### 项目主要施工内容”,并在该小节内部使用“#### 专业工程名称”逐项展开。"}]}for(let a of e){let b=G(a.content)||G(d);if(!b){c.push(h(a,{level:"error",severity:"blocker",message:`${a.title} 主要施工内容小节缺失或标题结构异常`,suggestion:"必须生成“### 项目主要施工内容”,并在该小节内部使用“#### 专业工程名称”逐项展开。"}));continue}i(a.title,b,a.id)}return c}function L(a){let b=[];for(let c of a){let a=`${c.title} ${(c.sections||[]).join(" ")} ${c.content}`;for(let d of u)d.pattern.test(a)&&!c.content.includes(d.title)&&b.push({level:"info",message:`${c.title} 可补充隐藏高分模块:${d.title}`,suggestion:d.prompt})}return b}function M(a){let b=a.split("\n"),c=b.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*?(?:主要分部分项(?:工程)?施工方案|主要施工方法)[^\n]*$/u.test(a.trim()));if(c>=0){let a=b.length;for(let d=c+1;d<b.length;d+=1)if(/^#{2,3}\s+/u.test(b[d].trim())){a=d;break}return b.slice(c+1,a).join("\n")}let d=b.findIndex(a=>{let b=a.trim();return!(!/^##\s+/u.test(b)||/主要分部分项(?:工程)?施工方案/u.test(b))&&/^##\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*?主要施工方法[^\n]*$/u.test(b)});if(d>=0){let a=b.length;for(let c=d+1;c<b.length;c+=1)if(/^##\s+/u.test(b[c].trim())){a=c;break}let c=b.slice(d+1,a).join("\n");return/^#{3,4}\s+/mu.test(c)?c:""}return/^#{3,4}\s+/mu.test(a)?a.trim():""}function N(a){let b=(a.split("\n")[0]||"").trim();return/^[\d..、\s]*(?:其他|其它)/u.test(b)}let O=/编制依据|编制说明|编制原则|法律法规|规范标准|标准规范|技术标准|地方性法规|政府规章|文明施工|环境保护|进度计划|网络图|横道图|施工部署|平面布置|组织机构|资源配置|职责分工/u;function P(a){let b=(a.split("\n")[0]??"").trim(),c=b.match(/^\*\*([^*]+)\*\*/u),d=(c?c[1]:b).replace(/[::].*$/u,"").trim();return d.length>24?`${d.slice(0,24)}…`:d}function Q(a){let b=a.map(P).filter(Boolean),c=b.slice(0,10).join("、");return b.length>10?`${c} 等 ${b.length} 个`:c}function R(a){let b=[...a.matchAll(/^####\s+/gmu)].map(a=>({at:a.index??0,contentStart:(a.index??0)+a[0].length})),c=b.map((c,d)=>{let e=d+1<b.length?b[d+1].at:a.length;return{offset:c.at,block:h(a.slice(c.contentStart,e))}}).filter(a=>!!a.block),d=c.length>0;0===c.length&&(c=[...a.matchAll(/^\*\*[^*]+\*\*[\s\S]*?(?=^\*\*[^*]+\*\*|\s*$)/gmu)].map(a=>({offset:a.index??0,block:h(a[0])})).filter(a=>!!a.block),d=!1),0===c.length&&(c=a.split(/^###\s+/gmu).slice(1).map(a=>({offset:0,block:h(a)})).filter(a=>!!a.block),d=!1);let g=c.map(a=>a.block),i=c.map(b=>d?function(a,b){let c;for(let d of a.matchAll(/^###\s+([^\n]*)/gmu)){let a=d.index??0;if(a>=b)break;c={title:(d[1]??"").trim(),end:a+d[0].length}}if(!c)return{title:"",preamble:""};let d=[];for(let b of a.slice(c.end).split("\n")){if(/^#{1,6}\s/u.test(b.trim()))break;d.push(b)}return{title:c.title,preamble:d.join("\n").trim()}}(a,b.offset):{title:"",preamble:""}),j=c.map((a,b)=>N(a.block)||O.test(`${i[b].title} ${a.block.split("\n")[0]??""}`)),n=c.filter((a,b)=>j[b]).map(a=>a.block),o=c.filter((a,b)=>{if(j[b])return!1;let c=i[b].preamble?`${i[b].preamble}
|
|
103
|
+
${a.block}`:a.block;return!(0,f.az)(c)}).map(a=>a.block),p=g.filter(a=>/资料内容事实|#{2,6}\s+|^\*\*[^*]+\*\*$|未尽事宜|按规范施工|结合实际执行|招标范围还包含/um.test(a)),q=g.filter(a=>{let b=a.match(/(?:\*\*)?施工方法(?:\*\*)?[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"",c=a.match(/(?:\*\*)?(?:施工流程|工艺流程)(?:\*\*)?[::]([\s\S]*?)(?=\n(?:施工|工艺)|$)/u)?.[1]||"",d=b.trim()||c.trim()?`${b}
|
|
104
|
+
${c}`:a;return!(0,f.Z1)(d)}),r=g.filter(a=>(a.match(k)||[]).length+(a.match(l)||[]).length<e.Ck.minParamsPerPackage),s=g.filter(a=>m(a,e.Ck.minParamsPerPackage)),t=g.filter(a=>a.replace(/\s/gu,"").length<e.Ck.minPackageChars),u=g.map(a=>a.replace(/\s/gu,"").length);return{packageBlocks:g,incompletePackages:o,categoryExemptPackages:n,genericReferencePackages:s,dirtyPackages:p,weakChainPackages:q,weakParamPackages:r,shallowPackages:t,imbalanced:u.length>1&&Math.min(...u)>0&&Math.min(...u)<Math.max(...u)*e.Ck.balanceRatio}}function S(a){return Math.max(0,e.Ck.blockerMinPackages-a.packageBlocks.length)+a.incompletePackages.length+a.genericReferencePackages.length+a.dirtyPackages.length+a.weakChainPackages.length+a.weakParamPackages.length+a.shallowPackages.length}function T(a,b=""){let c=[],d=b||a.map(a=>`${a.title}
|
|
104
105
|
${(a.sections||[]).join("\n")}
|
|
105
|
-
${a.content}`).join("\n\n"),g=a.filter(a=>e.gG.test(`${a.title} ${(a.sections||[]).join(" ")}`)),h=(a,b,d)=>{let g=
|
|
106
|
-
${a.content}`);if(!e){c.push({level:"error",severity:"blocker",message:`${a.title} 分部分项工程施工方案小节缺失或标题结构异常`,suggestion:"主要施工方法章下必须逐项展开分项工程方案:既可用「### 主要分部分项工程施工方案」包装后在内部使用「#### 分项工程方案」,也可章下 H3 小节直接承载各分项方案。",chapterId:a.id,provenance:{detectorId:"construction-org-division-section",fingerprint:(0,f.c6)(a.title)}});continue}h(a.title,e,a.id)}return c}function
|
|
106
|
+
${a.content}`).join("\n\n"),g=a.filter(a=>e.gG.test(`${a.title} ${(a.sections||[]).join(" ")}`)),h=(a,b,d)=>{let g=R(b),{packageBlocks:h,incompletePackages:i,genericReferencePackages:j,dirtyPackages:k,weakChainPackages:l,weakParamPackages:m,shallowPackages:n}=g,o=b=>({...b,chapterId:d,provenance:{detectorId:"construction-org-division-section",fingerprint:(0,f.c6)(a)}}),p=h.length;p<e.Ck.blockerMinPackages?c.push(o({level:"error",severity:"blocker",message:`${a} 分部分项工程施工方案分项不足:当前 ${p} 个,要求不少于 ${e.Ck.blockerMinPackages} 个`,suggestion:"按资料识别的专业工程/分部分项工程逐项展开,每项覆盖作业对象与工程量、工序顺序、施工方法三方面要素(融入连贯叙述,不得以结构标签充当小节标题或段落开头引导)。"})):p<e.Ck.minPackages&&c.push(o({level:"warning",message:`${a} 分部分项工程施工方案建议扩充:当前 ${p} 个分项方案,建议不少于 ${e.Ck.minPackages} 个`,suggestion:"优先覆盖资料明确的专业工程范围(土方、基础、主体、装饰、安装、室外等)。"})),i.length>0&&c.push(o({level:"error",severity:"blocker",message:`${a} 分部分项工程施工方案存在 ${i.length} 个分项方案内容要素不全(作业对象与工程量/工序顺序/施工方法至少缺一):${Q(i)}`,suggestion:"每个分项方案需覆盖作业对象与工程量、工序安排、施工方法三方面要素,融入连贯段落叙述(禁止以“施工概况/工艺流程/施工方法”等结构标签充当小节标题或段落开头引导)。"})),j.length>0&&c.push(o({level:"error",severity:"blocker",message:`${a} 分部分项工程施工方案存在 ${j.length} 个分项方案正文含“按设计图纸执行”式概括话术:${Q(j)}`,suggestion:"分项方案正文必须落到具体数值与参数:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据,清单未覆盖的参数取图纸具体数值;禁止“按设计图纸执行/详见设计图纸/按设计文件确定”式留白。"})),k.length>0&&c.push(o({level:"error",severity:"blocker",message:`${a} 分部分项工程施工方案存在脏事实或空话污染:${Q(k)}`,suggestion:"清理“资料内容事实”、嵌入的 ### 标题、粗体伪标题、未尽事宜、“按规范施工/结合实际执行”式空话,只保留可交付正文。"})),l.length>0&&c.push(o({level:"error",severity:"blocker",message:`${a} 分部分项工程施工方案存在 ${l.length} 个分项方案施工方法缺少工序顺序表达:${Q(l)}`,suggestion:"每个分项方案的施工方法段/施工流程段必须有明确的工序顺序表达,工序环节按先后顺序逐步写清(相邻小节不得同句式开头、同一句式全文不得反复使用,禁止以固定句模复读),保证工序先后顺序清晰。"})),m.length>0&&c.push(o({level:"error",severity:"blocker",message:`${a} 分部分项工程施工方案存在 ${m.length} 个分项方案工艺参数不足(少于 ${e.Ck.minParamsPerPackage} 个):${Q(m)}`,suggestion:"每个分项方案必须落位至少 4 个具体工艺参数(mm、MPa、间距、偏差、坡度、养护天数、试验压力、搭接长度等),参数来自绑定材料或行业通用规范值,不得编造。"})),n.length>0&&c.push(o({level:"error",severity:"blocker",message:`${a} 分部分项工程施工方案存在 ${n.length} 个分项方案正文过短(少于 ${e.Ck.minPackageChars} 字):${Q(n)}`,suggestion:"每个分项方案都要写足作业对象与工程量、工序安排、施工方法三方面要素,门窗维修、立面修补等小分项同样需要展开,不得一句话带过。"})),g.imbalanced&&c.push(o({level:"warning",message:`${a} 分部分项工程施工方案分项深度失衡:最短分项不足最长分项三分之一`,suggestion:"参照最长分项(如拆除、结构加固)的展开深度,为偏短分项补足机具、材料规格、工艺参数与验收标准。"}))};if(0===g.length){let a=M(d);return a&&h("全文",a),c}for(let a of g){let d=function(a,b){if(!a)return null;let c=a=>a.replace(/^第[一二三四五六七八九十百\d]+章[、..::\s]*/u,"").replace(/\s+/gu,"").trim(),d=c(b.title);if(d.length<2)return null;let e=a.split("\n"),f=e.findIndex(a=>{let b=a.trim();if(!/^##\s+/u.test(b))return!1;let e=c(b.replace(/^##\s+/u,""));return!(e.length<2)&&(e===d||e.length>=3&&d.length>=3&&(e.includes(d)||d.includes(e)))});if(f<0)return null;let g=e.length;for(let a=f+1;a<e.length;a+=1)if(/^##\s+/u.test(e[a].trim())){g=a;break}return e.slice(f,g).join("\n")}(b,a),e=null!==d?M(d):M(/^##\s+/mu.test(a.content)?a.content:`## ${a.title}
|
|
107
|
+
${a.content}`);if(!e){c.push({level:"error",severity:"blocker",message:`${a.title} 分部分项工程施工方案小节缺失或标题结构异常`,suggestion:"主要施工方法章下必须逐项展开分项工程方案:既可用「### 主要分部分项工程施工方案」包装后在内部使用「#### 分项工程方案」,也可章下 H3 小节直接承载各分项方案。",chapterId:a.id,provenance:{detectorId:"construction-org-division-section",fingerprint:(0,f.c6)(a.title)}});continue}h(a.title,e,a.id)}return c}function U(a,b=""){let c=b||a.map(a=>`${a.title}
|
|
107
108
|
${(a.sections||[]).join("\n")}
|
|
108
|
-
${a.content}`).join("\n\n"),d=a.filter(a=>e.gG.test(`${a.title} ${(a.sections||[]).join(" ")}`));if(0===d.length){let a=M(c);return a?
|
|
109
|
-
${a.content}`);f+=b?
|
|
109
|
+
${a.content}`).join("\n\n"),d=a.filter(a=>e.gG.test(`${a.title} ${(a.sections||[]).join(" ")}`));if(0===d.length){let a=M(c);return a?S(R(a)):0}let f=0;for(let a of d){let b=M(/^##\s+/mu.test(a.content)?a.content:`## ${a.title}
|
|
110
|
+
${a.content}`);f+=b?S(R(b)):1}return f}let V=/^####\s+(?:\d+(?:\.\d+)*\s+)?(?:施工概况|施工流程|施工方法|工艺流程)(?:[::]|\s*$)/u;function W(a){let b=[];return a.scope||b.push("作业对象与工程量"),a.process||b.push("工序顺序"),a.method||b.push("施工方法"),b.join("、")}function X(a){let b=a.split(/\r?\n/u),c=[],d=(a,c)=>{for(let d=a;d<b.length;d+=1){let a=/^(#{1,6})\s+/u.exec(b[d].trim());if(a&&a[1].length<=c)return d}return b.length};for(let a=0;a<b.length;a+=1){let f=/^##\s+(.+)$/u.exec(b[a].trim());if(f){let g=f[1].trim();if(!e.Yp.test(g)&&!e.gG.test(g))continue;let h=d(a+1,2),i=[];for(let c=a+1;c<h;c+=1)/^###\s+/u.test(b[c].trim())&&i.push(c);if(0===i.length){c.push({title:g,startLine:a+1,endLine:h});continue}for(let a=0;a<i.length;a+=1){let d=i[a],e=a+1<i.length?i[a+1]:h;c.push({title:b[d].trim().replace(/^###\s+/u,""),startLine:d+1,endLine:e})}continue}let g=/^###\s+(.+)$/u.exec(b[a].trim());if(g){let b=g[1].trim();if(!e.Yp.test(b)&&!e.gG.test(b))continue;let f=d(a+1,3);c.push({title:b,startLine:a+1,endLine:f})}}return c}function Y(a){let b=a.split(/\r?\n/u);return X(a).map(a=>({title:a.title,bodyLines:b.slice(a.startLine,a.endLine)}))}function Z(a){let b=[],c=(a,c,d)=>{let e=d.includes("作业对象")?"作业对象与工程量(本项目部位、规模/工程量、系统边界,工程量取工程量清单汇总值)":"",f=d.includes("工序")?"工序顺序(先后清晰,至少 1 处不少于 4 个环节的工序顺序表达)":"",g=d.includes("施工方法")?"施工方法(工具机具、工艺参数、验收闭环)":"";b.push({level:"error",severity:"blocker",message:c?`「${a}」${c}专业工程块缺少三要素:${d}`:`「${a}」小节缺少三要素:${d}`,suggestion:`请在「${c||a}」补写缺失要素:${[e,f,g].filter(Boolean).join(";")}。要素融入连贯段落叙述,禁止以“施工概况/施工流程/施工方法”等结构标签充当标题或段落开头引导。`})};for(let b of Y(a)){let a=b.bodyLines.map((a,b)=>({line:a.trim(),offset:b})).filter(a=>/^####\s+/u.test(a.line));if(0===a.length||a.every(a=>V.test(a.line))){let a=W((0,f.se)(b.bodyLines.join("\n")));a&&c(b.title,"",a);continue}for(let d=0;d<a.length;d+=1){let e=a[d].offset,g=d+1<a.length?a[d+1].offset:b.bodyLines.length;if(V.test(a[d].line))continue;let h=a[d].line.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?/u,"").replace(/[::]\s*$/u,""),i=b.bodyLines.slice(e,g).join("\n"),j=W((0,f.se)(i));j&&c(b.title,h,j)}}return b}function $(a){let b=[];for(let c of Y(a)){let a=c.bodyLines.join("\n");if(!a.trim())continue;let d=a.split(/\r?\n/u).filter(a=>/^\s*\|.+\|\s*$/u.test(a.trim())),e=a.split(/\r?\n/u).filter(a=>!/^\s*\|.+\|\s*$/u.test(a.trim())).join("").replace(/[\s#*_`>-]/gu,"").length;d.length>=3&&e<50&&b.push({level:"error",severity:"blocker",message:`「${c.title}」小节不应使用 Markdown 表格承载专业工程正文`,suggestion:"主要施工内容/主要施工方法应采用三级小节与段落式专业工程写法:每个专业工程一个 #### 小节,覆盖作业对象与工程量、工序顺序、施工方法三方面要素;表格数据改写成连贯叙述。"});let f=[...new Set((a.match(/[^\n]{0,18}(?:分部小计|本页小计|按实(?!际|测|\d)|暂估|综合单价|规费|税金)[^\n]{0,18}/gu)||[]).map(a=>a.trim()))],g=[...new Set([...f,...new Set((a.match(/[^\n]{0,18}(?:措施项目费|措施项目[^\n]{0,8}(?:清单|计价|费率))[^\n]{0,18}/gu)||[]).map(a=>a.trim())),...new Set((a.match(/[^\n]{0,10}(?:合计|小计)[^\n]{0,16}(?:㎡|m²|m2|m³|m3|吨|t|项|处|座|樘)/gu)||[]).map(a=>a.trim()))])];g.length>0&&b.push({level:"error",severity:"blocker",message:`「${c.title}」小节正文含工程量清单内部口径词:${g.slice(0,6).join(";")}`,suggestion:"“分部小计/本页小计/合计/按实/暂估/综合单价/措施项目费/规费/税金”等清单计价表专用口径不得进入正式正文:工程量只写清单汇总的项目总量(数值与工程量清单一致),删除全部清单内部口径行。"})}return b}function _(a){let b=X(a);if(0===b.length)return{markdown:a,fixedCount:0,details:[]};let c=a.split(/\r?\n/u),d=[];for(let a of b)for(let b=a.startLine;b<Math.min(a.endLine,c.length);b+=1){let a=c[b];if(!a||/^\s*\|.+\|\s*$/u.test(a.trim())||/^#{1,6}\s+/u.test(a.trim()))continue;let e=a.replace(/(合计|小计)(?=[^\n]{0,16}(?:㎡|m²|m2|m³|m3|吨|t|项|处|座|樘))/gu,"");e!==a&&(d.push(`「${a.trim().slice(0,36)}」→「${e.trim().slice(0,36)}」`),c[b]=e)}return 0===d.length?{markdown:a,fixedCount:0,details:[]}:{markdown:c.join("\n"),fixedCount:d.length,details:d}}},44505:(a,b,c)=>{c.d(b,{$$:()=>e.$$,$h:()=>f.$h,AD:()=>e.AD,BR:()=>f.BR,CJ:()=>e.CJ,Co:()=>f.Co,Dq:()=>d.Dq,EJ:()=>f.EJ,EN:()=>f.EN,Et:()=>e.Et,Fd:()=>f.Fd,Fr:()=>e.Fr,GG:()=>d.GG,GI:()=>f.GI,H:()=>e.H,IJ:()=>e.IJ,Ih:()=>e.Ih,JF:()=>f.JF,KE:()=>e.KE,LA:()=>e.LA,MM:()=>e.MM,N$:()=>f.N$,ON:()=>e.ON,P3:()=>d.P3,Pl:()=>f.Pl,Pt:()=>d.Pt,QM:()=>f.QM,Qc:()=>f.Qc,Rv:()=>e.Rv,SZ:()=>f.SZ,Tz:()=>e.Tz,Vc:()=>f.Vc,Vl:()=>e.Vl,Vw:()=>f.Vw,WB:()=>f.WB,WY:()=>e.WY,X_:()=>e.X_,Xc:()=>e.Xc,Y4:()=>f.Y4,YN:()=>e.YN,_D:()=>f._D,__:()=>f.__,a8:()=>e.a8,bq:()=>e.bq,br:()=>f.br,cJ:()=>e.cJ,cT:()=>e.cT,cf:()=>e.cf,cl:()=>e.cl,cv:()=>e.cv,dF:()=>e.dF,dW:()=>f.dW,dc:()=>d.dc,eS:()=>e.eS,ek:()=>e.ek,ev:()=>e.ev,ex:()=>e.N$,fE:()=>f.fE,fI:()=>f.fI,fK:()=>f.fK,fQ:()=>e.fQ,fg:()=>e.fg,g4:()=>f.g4,gD:()=>f.gD,gk:()=>f.gk,hI:()=>d.hI,hu:()=>e.hu,iY:()=>e.iY,ir:()=>f.ir,iy:()=>e.iy,jP:()=>e.jP,kp:()=>f.kp,l4:()=>e.l4,lR:()=>f.lR,m6:()=>e.m6,mB:()=>e.mB,mC:()=>e.Ve,mG:()=>f.mG,nm:()=>e.nm,qE:()=>e.qE,qG:()=>f.qG,qj:()=>f.qj,r8:()=>e.r8,rA:()=>e.rA,rU:()=>f.rU,r_:()=>f.r_,s3:()=>e.s3,sn:()=>e.sn,u2:()=>e.u2,uL:()=>f.uL,ub:()=>e.ub,vH:()=>e.vH,x5:()=>e.x5,xR:()=>e.xR,y2:()=>e.y2,y4:()=>f.y4,yV:()=>f.yV,z4:()=>d.z4,zP:()=>e.zP,zj:()=>f.zj});var d=c(12863),e=c(35547),f=c(32691)},46482:(a,b,c)=>{c.d(b,{Zk:()=>x,X6:()=>z,fC:()=>G,kD:()=>y,l8:()=>F,XG:()=>v,JP:()=>w});var d=c(98281);c(25840);var e=c(70933),f=c(70208),g=c(40299),h=c(52639),i=c(78217),j=c(30355),k=c(44505),l=c(85016),m=c(23760),n=c(22157),o=c(69527);let p=[...j.P9.filter(a=>!n.Kd.includes(a)),...l.D$.source.split("|")],q=["WRITER_MISSING_SECTION","Writer 未完成"],r=[/:\s*:/u,/;:/u,/。:/u,/。;/u,/;。/u,/。,/u,/,。/u,/。{2,}/u,/、{2,}/u];var s=c(80572),t=c(95734);function u(a,b,c){if(!a)return;let d=a.llm.patchGuardStats??(a.llm.patchGuardStats={}),e=d[b]??(d[b]={hits:0,rejects:0,rollbacks:0});e[c]+=1,"hits"===c?a.llm.patchGuardHits=(a.llm.patchGuardHits??0)+1:a.llm.patchGuardRejects=(a.llm.patchGuardRejects??0)+1}function v(a,b){let c=process.env.DOCUMENT_QINGTIAN_PATCH_GUARD||"observe";if("0"!==c)return{observeOnly:"enforce"!==c,repairRound:a,diagnostics:b}}function w(a){let b=a.template.chapters.length,c=b>0?a.targetWords/b:a.targetWords,d=`${a.template.name}
|
|
110
111
|
${a.template.category||""}
|
|
111
112
|
${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,enableFinalQualityReview:!0,globalReviewSamplingRate:k&&j?.35:1}}function x(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}}}function y(a,b){Number.isFinite(b)&&!(b<=0)&&a?.quality&&(a.quality.repairedCount=(a.quality.repairedCount??0)+b)}async function z(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 A(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 B(a){return Math.max(2600,Math.min(16e3,Math.ceil(.45*(0,i.V7)(a))))}function C(a,b,c){let d=(a.match(/```/gu)||[]).length,e=b.replace(/^第[一二三四五六七八九十百千万]+章\s*/u,"").trim();if(c){let b=a=>(a.match(/^###\s+\S/gmu)||[]).length;if(b(a)<b(c))return!1}return d%2==0&&(!e||a.includes(e))&&!/^\s*$/u.test(a)}function D(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 E(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 F(a){(0,n.Te)(a.signal);let b=a.repairType||function(a){let b=a.join("\n");for(let a of d.NP)if(a.pattern.lastIndex=0,a.pattern.test(b))return a.type;return"generic"}(a.issues),c=a.contextChapters?.length?`
|
|
112
113
|
|
|
@@ -138,7 +139,7 @@ ${a.content}`).join("\n\n")||"",k=r(b||f.executionStages,h),l=S(ac({...f,title:"
|
|
|
138
139
|
${b.join("\n")}`)}else g.push(...i);let k=function(a,b){let c=aA.filter(b=>b.chapterPattern.test(a.title)).map(a=>a.domain),d=(0,at.Bf)((0,at.IV)(b),c);aC.test(a.title)&&d.push(...function(a){let b=[];return(a.basisRegulations??[]).length>0&&b.push(`- 招标文件引用法规(项目专属事实,编制依据小节必须列出法规名称及文号):${a.basisRegulations.join("、")}`),b.push("- 编制依据小节由写作模型自行列写:国家法律法规及文号、工程所在地地方性法规、与本工程分部对应的现行施工验收规范名称及编号;不得空写「国家现行法律、行政法规」等类别话术,不得编造文号"),b}(b));let e=aB(a.title),f=e.length>0?function(a,b){let c=new Set,d=[];for(let e of a){if(c.has(e))continue;c.add(e);let a=av(e,b);a&&d.push(`- \`{{AUTH:${e}}}\` → ${a}`)}return d}(e,b):[];return(f.length>0&&d.push("【数值占位符协议】下列计划类数值请**原样写出占位符**,不要自行写数(生成后由系统确定性填充为权威值):",...f),0===d.length)?"":["【本章数值锚点——计划类数值必须且只能引用以下锚点值;禁止将各工种人数相加推导峰值、禁止按定额自行估算、禁止改写或自设任何计划类数值】",...d].join("\n")}(a,b),l=c.sliceCharsCap??6e3,m=g.join("\n\n");if(m.length>l){let a=[],b=0;for(let c of m.split("\n")){if(b+c.length+1>l)break;a.push(c),b+=c.length+1}m=`${a.join("\n")}
|
|
139
140
|
(本节蓝图切片过长已截断,未展开工作包见本章其他小节与绑定材料)`}return[...f,m,k].filter(Boolean).join("\n\n")}function aE(a,b){let c=a.outline.chapters.find(a=>a.title===b);return c||a.outline.chapters.find(a=>b.includes(a.title)||a.title.includes(b))}function aF(a,b,c){let d=[],e=[],f=a,g=[...b.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode&&a.strict)),...aB(b.title).map(a=>({path:a,mode:"must_cite",strict:!0}))],h=new Set;for(let a of g)if(!h.has(a.path)){if(h.add(a.path),"data.contract.total_days"===a.path){if(c.contract.totalDays<=0)continue;let a=/(?:总工期|施工工期|合同工期|工期)(?:为|约|共计|控制)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*(?:日历)?天/gu,b=!1;f=f.replace(a,(a,e)=>{b=!0;let f=Number(e);return f===c.contract.totalDays||f<=0?a:(d.push({anchor:"总工期",from:`${f}天`,to:`${c.contract.totalDays}天`}),a.replace(e,String(c.contract.totalDays)))}),b||e.push(`总工期 ${c.contract.totalDays} 日历天`);continue}if("data.resources.labor.peak_value"===a.path){let a=c.resources.labor.peakValue;if(a<=0)continue;let b=/(?:高峰(?:期)?(?:人数)?|峰值|劳动力(?:总人数|峰值)|各专业班组高峰人数)[^。;;\n]{0,24}?(?:约)?\s*([\d,]+)\s*人/gu,g=!1;f=f.replace(b,(b,c)=>{g=!0;let e=Number(String(c).replace(/,/g,""));return!Number.isFinite(e)||e===a||e<=0?b:(d.push({anchor:"劳动力峰值",from:`${c}人`,to:`${a}人`}),b.replace(c,String(a)))}),g||e.push(`劳动力峰值 ${a} 人`);continue}if("data.redline.greening_maintenance"===a.path){let a=c.redLineFacts.find(a=>/养护/u.test(a.key));if(!a)continue;let b=/养护[^。;;|]{0,10}?([一二两三四五六七八九十]+|\d{1,2})\s*年/u.exec(a.value);if(!b)continue;let g=(0,ax._P)(b[1]??"");if(void 0===g||!Number.isFinite(g)||g<=0)continue;let h=/养护[^。;;\n|]{0,16}?([一二两三四五六七八九十]+|\d{1,2})\s*年/gu,i=!1;f=f.replace(h,(a,b)=>{i=!0;let c=(0,ax._P)(b);return void 0===c||!Number.isFinite(c)||c===g||c<=0?a:(d.push({anchor:"养护期",from:`${b}年`,to:`${g}年`}),a.replace(b,String(g)))}),i||e.push(`养护期 ${g} 年`);continue}}return{markdown:f,fixed:d,missing:e}}function aG(a,b){let c=new Set,d=[];for(let e of a.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode&&a.strict))){if(c.has(e.path))continue;c.add(e.path);let a=av(e.path,b);if(!a)continue;let f="data.contract.total_days"===e.path?"总工期":e.path.startsWith("data.quantities.")?e.path.slice(16):"";d.push(f?`${f} ${a}`:a)}return d.join(";")}var aH=c(55965),aI=c(12863);function aJ(a,b){return Math.abs(a-b)<=.01+1e-6*Math.max(Math.abs(a),Math.abs(b))}let aK="土建|安装|装饰|市政",aL=RegExp(`(${aK})工程$`,"u");async function aM(a,b,c={}){let d=function(a,b){let c=[],d=new Map,e=[],f=a.split("\n").map(a=>/^\s*\|/u.test(a.trim())?" ".repeat(a.length):a).join("\n"),g=0,h=a=>{g+=1;let b=`c${g}`;c.push({id:b,kind:a.kind,subject:a.subject,value:a.value,unit:a.unit,authority:a.authority,sentence:a.sentence,facts:a.facts}),d.set(b,{subject:a.subject,value:a.value,unit:a.unit,authority:a.authority,start:a.start,end:a.end})};for(let c of b.redLineFacts.filter(a=>!a.amount&&"自然村数量"!==a.key)){let b=String(c.value).split(/[,。;、()()\]【】::\s\n[]+/u).map(a=>a.trim()).filter(a=>a.length>=3&&!/^[\d.]+$/u.test(a)&&!/^(?:其他|具体详见|满足设计要求|设计图纸|图集|招标文件|政府相关文件|规范等|资料)$/u.test(a));0!==b.length&&(b.some(b=>a.includes(b))||e.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实缺口:正文未体现「${c.key}=${c.value}」`,suggestion:`请在对应章节补写该红线事实(数值必须与蓝图一致)`}))}if(b.resources.labor.peakValue>0)for(let a of f.matchAll(/(?:劳动力峰值|施工高峰|高峰人数|高峰期劳动力|劳动力高峰)(?:为|约|达到|共计)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*人/gu)){let c=Number(a[1]);if(!(c>0)||c===b.resources.labor.peakValue)continue;let d=(a.index??0)+a[0].indexOf(a[1]);h({kind:"labor-peak",subject:"劳动力峰值",value:c,unit:"人",authority:b.resources.labor.peakValue,start:d,end:d+a[1].length,sentence:(0,aH.kE)(f,a.index??0,a[0].length)})}if(b.contract.totalDays>0)for(let a of f.matchAll(/(?:总工期|施工工期|合同工期|工期)(?:为|约|共计|控制)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*(?:日历)?天/gu)){let c=Number(a[1]);if(!(c>0)||c===b.contract.totalDays)continue;let d=(a.index??0)+a[0].indexOf(a[1]),e=Math.max(f.lastIndexOf(",",d),f.lastIndexOf(",",d),f.lastIndexOf("。",d),f.lastIndexOf(";",d),f.lastIndexOf("\n",d))+1;/预留|机动|缓冲|关键线路|首件|样板|分区|分片|阶段|单体/u.test(f.slice(e,d))||h({kind:"total-days",subject:"总工期",value:c,unit:"日历天",authority:b.contract.totalDays,start:d,end:d+a[1].length,sentence:(0,aH.kE)(f,a.index??0,a[0].length)})}let i=b.redLineFacts.find(a=>"自然村数量"===a.key),j=i?Number(/(\d+)/u.exec(i.value)?.[1]):0;if(j>0){let a=b.project.scope?[`蓝图项目范围:${b.project.scope}`]:void 0;for(let b of f.matchAll(/(\d+)\s*个[^,。;、\s\n]{0,8}?自然村(?!分组|施工组|作业面|施工点|施工段)/gu)){let c=Number(b[1]);if(!(c>0)||c===j)continue;let d=(b.index??0)+b[0].indexOf(b[1]);h({kind:"village-count",subject:"自然村数量",value:c,unit:"个",authority:j,start:d,end:d+b[1].length,sentence:(0,aH.kE)(f,b.index??0,b[0].length),facts:a})}}let k=[];for(let[a,c]of Object.entries(b.quantities))if(c&&!(c.value<=0))for(let[b,d]of[[(0,aI.Lp)(a),!0],[(0,aI.nv)(a),!1]]){let e=RegExp(b,"gu");for(let b of f.matchAll(e)){let e=b.index??0;k.push({name:a,quantity:c,start:e,end:e+b[0].length,strict:d})}}k.sort((a,b)=>(a.strict!==b.strict?a.strict?-1:1:0)||a.start-b.start||b.end-b.start-(a.end-a.start)||b.name.length-a.name.length);let l=[],m=k.map(a=>a.start).sort((a,b)=>a-b),n=a=>{let b=0,c=m.length;for(;b<c;){let d=b+c>>1;m[d]<=a?b=d+1:c=d}return b<m.length?m[b]:1/0};for(let a of k){let{name:b,quantity:c}=a,d=a.start,e=a.end;if(l.some(a=>d<a.end&&e>a.start))continue;l.push({start:d,end:e});let g=c.unit||"",i=g?`${(0,aI.YZ)(g)}(?![0-9A-Za-z])`:"",j=f.slice(e,e+40),k=Math.min(...[j.search(/[、。;;,,\n]/u)].filter(a=>a>=0).concat([j.length,n(e)-e])),m=j.slice(0,k),o=RegExp(`(?<![\\dA-Za-z])(\\d+(?:\\.\\d+)?)\\s*${i}`,"u").exec(m);if(!o)continue;let p=Number(o[1]);if(!Number.isFinite(p)||p<=0||p===c.value)continue;let q=e+(o.index??0)+o[0].indexOf(o[1]);if((c.specBreakdown??[]).filter(a=>!aJ(a.value,c.value)).map(a=>a.value).some(a=>aJ(a,p))||(c.groups??[]).filter(a=>!aJ(a.value,c.value)).some(a=>aJ(a.value,p)&&function(a,b,c){let d=c.replace(RegExp(`(?:${aK})?工程$`,"u"),"").trim();if(d.length<2)return!1;let e=aL.exec(c)?.[1],f=e?RegExp(`${d.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}(${aK})工程`,"u"):void 0,g=7,h=a.indexOf("\n",b),i=a.lastIndexOf("\n",b)+1;for(;;){let b=a.slice(i,h<0?a.length:h),j=/^\s*(#{1,6})\s/u.exec(b);if(j&&j[1].length<g&&(g=j[1].length,b.includes(d)||b.includes(c))){let a=f?.exec(b)?.[1];if(a&&a!==e)return!1;return!0}if(0===i)return!1;h=i-1,i=a.lastIndexOf("\n",h-1)+1}}(f,d,a.group)))continue;let r=c.groups??[],s=r.length>0?[`该条目清单分工程明细:${r.map(a=>`${a.group} ${a.value}${g}`).join("、")}`]:void 0;h({kind:"quantity",subject:b,value:p,unit:g,authority:c.value,start:q,end:q+o[1].length,sentence:(0,aH.kE)(f,d,q+o[1].length-d),facts:s})}return{candidates:c,entries:d,gapIssues:e}}(a,b),e=[...d.gapIssues],f=[],g={total:d.candidates.length,conflicts:0,consistent:0,uncertain:0,records:[]};if(d.candidates.length>0){let a=c.adjudicate??aH.hy,b=await a(d.candidates,{diagnostics:c.diagnostics,signal:c.signal});g.unavailable=b.unavailable;let h=new Set,i=new Set;for(let a of d.candidates){let c=b.records.get(a.id),j=c?.conclusion??"uncertain",k=c?.rationale??b.unavailable??"判定层未返回结论";if(g.records.push({id:a.id,subject:a.subject,conclusion:j,rationale:k}),"consistent"===j){g.consistent+=1;continue}if("uncertain"===j){g.uncertain+=1;let b=`${a.subject}|${a.value}`;i.has(b)||(i.add(b),e.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用未决:${a.subject} ${a.value}${a.unit} 与蓝图口径 ${a.authority}${a.unit} 的一致性无法判定(${k})`,suggestion:`请核对后统一使用蓝图口径:${a.subject} ${a.authority}${a.unit}`}));continue}if(g.conflicts+=1,"quantity"===a.kind){let b=d.entries.get(a.id);b&&f.push({name:a.subject,value:a.value,unit:a.unit,authorityValue:a.authority,start:b.start,end:b.end})}h.has(a.subject)||(h.add(a.subject),"village-count"===a.kind?e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实冲突:正文出现与蓝图不一致的自然村数量 ${a.value} 个(判定依据:${k})`,suggestion:`请统一使用蓝图口径:${a.subject} ${a.authority}${a.unit}`}):"labor-peak"===a.kind?e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的劳动力峰值 ${a.value} 人(判定依据:${k})`,suggestion:`请统一使用蓝图口径:${a.subject} ${a.authority}${a.unit}`}):"total-days"===a.kind?e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工期表述 ${a.value} 日历天(判定依据:${k})`,suggestion:`请统一使用蓝图口径:${a.subject} ${a.authority}${a.unit}`}):e.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工程量 ${a.subject} ${a.value}${a.unit}(判定依据:${k})`,suggestion:`请统一使用蓝图工程量:${a.subject} ${a.authority}${a.unit}`}))}b.unavailable&&e.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用语义判定不可用:${b.unavailable}(${d.candidates.length} 条候选按未决显式暴露,未回退词表猜测)`,suggestion:"请检查语义模型可用性后重新生成;未决项不阻断定稿"})}return c.onAdjudication?.(g),{issues:e,anchors:f,summary:g}}async function aN(a,b,c={}){return(await aM(a,b,c)).issues}function aO(a,b){let c=b.map(()=>[]),d=0;return b.forEach((b,e)=>{let f=d+b.length;for(let b of a)b.start>=d&&b.end<=f&&c[e].push({...b,start:b.start-d,end:b.end-d});d=f+2}),c}function aP(a){let b=Date.now(),c={stage:"阶段 0",laborDerivationBasis:"清单汇总 \xd7 经验区间系数(定额工效知识不全,降级区间表达)",llmCalls:0,fallbackUsed:[],warnings:[],durationMs:0},d={version:"2.0.0",projectCode:function(a,b){let c=a=>a.replace(/^\d+(?:\.\d+)*\s*--\s*(?=\d{4}年)/u,""),d=/项目名称[::]\s*([^\n]{2,60})/u.exec(a);if(d){let a=c(d[1].trim()),b=a.split(/计划工期[::]|合同工期[::]|总工期[::]|工期[::]|质量标准[::]|计价[::]|施工地点/u)[0]?.trim()||a;if(b)return b}let e=/(\d{4}\s*年度\S{2,40}建设项目)/u.exec(a);return e?c(e[1].trim()):b||""}(a.basicFacts||"",a.templateName)||void 0,docType:"单位工程施工组织设计",createdAt:new Date().toISOString().slice(0,10),sourceMaterials:[...a.boundFilePaths]},e=R({projectRoot:a.projectRoot,boundFilePaths:a.boundFilePaths});e.warning&&c.warnings.push(e.warning);let f=e.boq;f&&(c.boq={sourceFile:f.sourceFile,totalEntries:f.totalEntries,complete:f.complete,groupCount:f.villages.length,pagesMissingTotal:f.villages.reduce((a,b)=>a+b.pagesMissing.length,0)},f.complete||c.warnings.push("清单解析完整性校验未通过(序号缺口/页码缺失),蓝图覆盖校验将兜底报告")),c.stage="阶段 A";let j=f||{entries:[],villages:[],totalEntries:0,sourceFile:"",complete:!1,diagnostics:{totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0}},q=function(a){let b=[...new Set(a.boq.entries.map(a=>`${a.section} ${a.subsection} ${a.name}`))].join(" "),c=[/管网|排水|雨污|污水|给水|检查井/u,/道路|路床|路面|路缘石|青砖|散水/u,/绿化|栽植|种植|苗木|景观|喷播/u,/路灯|亮化|照明/u].filter(a=>a.test(b)).length,d=`${a.templateName||""} ${a.basicFacts||""}`,e=a.boq.villages.map(a=>a.villageGroup).filter(Boolean),f=/自然村|美丽乡村|宜居|乡村振兴|行政村|村组|村庄/u.test(d)||e.length>0&&e.filter(a=>/村/u.test(a)).length>=Math.max(2,Math.ceil(e.length/2)),g=/产业园|标准化厂房|标准厂房|厂房|住宅|办公楼|综合楼|安置房|车间|仓库|宿舍楼|教学楼|医院|商场/u.test(d);if(a.boq.villages.length>0&&c>=3&&f&&!g)return k;let h=[{strategy:l,patterns:[/砌体|装饰|幕墙|地下室|层高|户型|塔吊|塔式起重机|脚手架|抹灰|门窗|屋面|防水/u]},{strategy:n,patterns:[/桥墩|桥台|墩柱|盖梁|系梁|箱梁|梁板|支座|伸缩缝|桥面|隧道|洞身|衬砌|锚杆/u]},{strategy:o,patterns:[/路基|路面|沥青|水稳|摊铺|压实|面层/u]},{strategy:p,patterns:[/闸室|闸墩|闸门|启闭机|围堰|导流|堤防|护坡|护岸|疏浚|水下/u]}].map(a=>({strategy:a.strategy,count:a.patterns.reduce((a,c)=>{let d=b.match(RegExp(c.source,"gu"));return a+(d?d.length:0)},0)})).sort((a,b)=>b.count-a.count);if((h[0]?.count||0)>=2)return h[0].strategy;let i=function(a){let b,c=[["市政",/市政|管网|排水|给水|雨污|污水|燃气/gu],["公路",/公路|路基|路面|沥青/gu],["桥梁与隧道",/桥梁|隧道/gu],["水利水电",/水利|河道|灌溉|防洪/gu],["电力",/电力|供配电|电压|电缆/gu],["机电安装",/机电|暖通|通风|空调|消防|给排水|智能化|电梯/gu],["装饰装修",/装饰|装修|幕墙/gu],["园林绿化",/园林|绿化|景观|苗木/gu],["铁路",/铁路|轨道/gu],["港口与航道",/港口|航道/gu],["矿山冶金",/矿山|冶金/gu],["房建",/房建|建筑|住宅|楼|结构|砌体|基坑|地下室|主体|层高|户型|公共建筑|产业园|厂房/gu]].map(([b,c])=>(c.lastIndex=0,{type:b,count:(a.match(c)||[]).length})).sort((a,b)=>b.count-a.count),d=c[0],e=0,f=0;for(let[c,d]of[["房建",/产业园|标准厂房|安置房|住宅小区|保障房|卫生院|门诊楼|办公楼/gu],["市政",/老旧小区|海绵城市|雨污分流|管网改造|管廊/gu],["桥梁与隧道",/桥梁|隧道|盾构|箱梁|斜拉|悬索|涵洞/gu],["公路",/公路|路基|路面|沥青|桩号|互通|匝道/gu],["水利水电",/堤防|水库|泵站|水闸|疏浚|节制闸|水电站|大坝|围堰/gu],["电力",/变电站|输电线路|配电|GIS设备|电缆|架空线路|铁塔|箱变/gu],["铁路",/铁路|轨道|道床|站台|信号机|接触网/gu],["港口与航道",/港口|码头|航道|护岸|堆场|泊位/gu],["矿山冶金",/矿山|矿井|选矿|冶炼|尾矿|轧钢/gu]]){d.lastIndex=0;let g=(a.match(d)||[]).length;g>=3&&g>e?(f=e,b=c,e=g):g>f&&(f=g)}if(b){if(f>0&&e<2*f&&d&&d.count>e)return d.type;let a=c.find(a=>a.type===b)?.count||0;return d&&d.type!==b&&d.count>2*a&&d.count>=2*e?d.type:b}return d&&d.count>0?d.type:"其他"}(`${a.templateName||""} ${a.basicFacts||""} ${a.chapterTitles.join(" ")} ${b}`);return"房建"===i||"装饰装修"===i?l:"桥梁与隧道"===i?n:"公路"===i?o:"水利水电"===i?p:m}({basicFacts:a.basicFacts,templateName:a.templateName,chapterTitles:a.chapterTitles,boq:j});c.boq&&(c.boq.groupLabel=q.groupLabel);let r=function(a){var b;let{boq:c}=a,d=a.strategy,e=U(c),f=function(a){let b=[];for(let c of V)for(let d of a.entries){if(!c.namePattern.test(`${d.name} ${d.description}`))continue;let a=c.extract(d);if(a){b.push({key:c.key,value:a,source:`清单条目 ${d.seq}「${d.name}」特征原文`,amount:c.amount});break}}return b}(c),j=d.villageOriented?function(a,b){let c=/(\d+)\s*个[^,。;、\s\n]{0,8}?自然村/u.exec(a);if(c)return Number(c[1]);let d=/(\d+)\s*个[^,。;、\s\n]{0,8}?自然村/u.exec(b);return d?Number(d[1]):0}(a.projectName,a.basicFacts||"")||c.villages.length:0;j>0&&f.push({key:"自然村数量",value:`${j} 个自然村`,source:"招标文件项目名称(清单自然村分组兜底)"});let k=function(a){let b={},c=a.entries.filter(a=>"垫层"===a.name).map(a=>/C\d{2}/u.exec(a.description)?.[0]).filter(a=>!!a);if(c.length>0){let a=new Map;for(let b of c)a.set(b,(a.get(b)||0)+1);b.cushion=[...a.entries()].sort((a,b)=>b[1]-a[1]||(a[0]<b[0]?-1:1))[0][0]}return b}(c),l=[...(a.truthEvidence||a.evidence||[]).map(a=>({text:String(a.content||""),source:`${a.filePath||""} ${a.sectionTitle||""}`})),...(a.facts||[]).map(a=>({text:String(a.value??""),source:String(a.sourceFile||"")}))],m=new Map((0,A.iC)({facts:(a.facts||[]).map(a=>({key:a.key,label:a.fieldName,value:a.value,sourceFile:a.sourceFile})),overrides:(0,B.Oq)((0,B.UD)(l)),labeledValues:(0,B.Su)(l)}).resolved.map(a=>[a.attribute,a.value])),n=function(a,b,c){let d=c?.计划工期?Number(/(\d{1,4})\s*个?\s*日历天/u.exec(c.计划工期)?.[1]??NaN):NaN,e=Number.isFinite(d)?d:function(a){let b=/(?:变更为|变更修改为|澄清为|修改为|调整为|更正为|修正为|变更至|调整至)\s*[::]?\s*(\d{1,4})\s*个?\s*日历天/u.exec(a);if(b)return Number(b[1]);let c=/(?<!节点)(?<!阶段)(?<!分项)(?<!关键)(?:计划工期|合同工期|工期总日历天数|工期控制|工期目标|总工期|工期)[^。;;\n]{0,12}?(\d{1,4})\s*个?\s*日历天/u.exec(a)||/(\d{1,4})\s*个?\s*日历天[^。;;\n]{0,8}?(?:总工期|倒排|分解|完成)/u.exec(a);return c?Number(c[1]):0}(a),f=/质量(?:标准|要求)[^。;;\n]{0,20}?[::]\s*([^。;;\n]{1,20})/u.exec(a)||/合格/u.exec(a),g=(c?.质量标准&&c.质量标准.length<=20?c.质量标准.trim():"")||(f?(f[1]||"合格").trim():""),h=/([\u4e00-\u9fa5]{1,6}?价〔\d{4}〕\d+号)/u.exec(a),i=h?h[1]:"",j=/(?:合同估算价|招标控制价|最高投标限价|项目总投资|投资估算|工程概算)[^。;;\n]{0,20}?([\d,]+(?:\.\d+)?)\s*万/u.exec(a),k=(()=>{let a=String(c?.合同金额||""),b=/([\d,]+(?:\.\d+)?)\s*万元/u.exec(a)?.[1];if(b)return Number(b.replace(/,/g,""));let d=/([\d,]+(?:\.\d+)?)\s*元/u.exec(a)?.[1];return d?Number((Number(d.replace(/,/g,""))/1e4).toFixed(2)):NaN})();return{totalDays:e,qualityStandard:g,pricingFile:i,estimatedAmount:Number.isFinite(k)?k:j?Number(j[1].replace(/,/g,"")):0}}(a.basicFacts||"",0,{计划工期:m.get("计划工期"),质量标准:m.get("质量标准"),合同金额:m.get("合同金额")}),o=function(a,b,c){let d=b>0?b:360,e=c.milestoneGroups,f=e.map(b=>({...b,weight:a.entries.filter(a=>b.pattern.test(`${a.name} ${a.description}`)).reduce((a,b)=>a+b.quantity,0)})),g=Math.max(1,Math.round(.08*d)),h=d-g,i=f.slice(1),j=i.reduce((a,b)=>a+b.weight,0),k=f.reduce((a,b)=>a+b.weight,0),l=j<=0||k>0&&j/k<.05,m=l?0:j,n=i.length>0?Math.max(2,Math.round(.95*h/i.length)):0,o=[{key:"prep",label:e[0]?.label||"施工准备与清杂拆除",duration:g,basis:`前导工作封顶 8% 总工期(清杂整治可与主体并行穿插,不按工程量权重独占)`}];for(let a of i){if(l){o.push({key:a.key,label:a.label,duration:n,basis:`分部特征未命中策略分组(非 prep 权重占比 ${k>0?(j/k*100).toFixed(1):"0.0"}% < 5%),按总工期均分降级(每组 ${n} 天)`});continue}if(a.weight<=0)continue;let b=Math.max(2,Math.round(a.weight/m*h*.95));o.push({key:a.key,label:a.label,duration:b,basis:`分部工程量权重 ${(a.weight/m*100).toFixed(1)}% \xd7 剩余工期 ${h} 天`})}let p=o.reduce((a,b)=>a+(b.duration||0),0);for(let a=o.length-1;a>=0&&p>d;a--){let b=p-d,c=Math.min(o[a]?.duration||0,b);o[a]&&c>0&&(o[a].duration=(o[a].duration||0)-c,p-=c)}return o}(c,n.totalDays,d),p=function(a,b,c=[],d){let e=b>0?b:360,{groupOfEntry:f,laborUnitRange:g,tradeMapping:h,milestoneGroups:i}=d,j=new Map;for(let b of a.entries){if(b.quantity<=0)continue;let a=f(b),c=d.laborQuotaTable?.find(a=>a.pattern.test(`${b.name} ${b.description}`)&&a.unit===b.unit),e=c||g[a];if(!e||b.unit!==e.unit)continue;let i=h.find(a=>a.pattern.test(`${b.name} ${b.description}`))?.trade;if(!i)continue;let k=`${a}|${i}`,l=j.get(k)||{trade:i,workdaysMin:0,workdaysMax:0,unit:e.unit,basisQty:0,quota:c};l.quota!==c&&(l.quota=void 0),l.workdaysMin+=b.quantity*e.min,l.workdaysMax+=b.quantity*e.max,l.basisQty+=b.quantity,j.set(k,l)}let k=new Map;for(let a of j.values()){let b=k.get(a.trade)||{min:0,max:0,unit:a.unit,qty:0,quota:a.quota};b.quota!==a.quota&&(b.quota=void 0),b.min+=a.workdaysMin,b.max+=a.workdaysMax,b.qty+=a.basisQty,k.set(a.trade,b)}let l=[...k.entries()].sort((a,b)=>b[1].max-a[1].max).map(([a,b])=>({trade:a,min:Math.max(1,Math.round(b.min/e)),max:Math.max(1,Math.round(b.max/e)),basis:b.quota?`工种工程量约 ${Math.round(b.qty)}${b.unit} \xd7 定额工效(${b.quota.subName} ${b.quota.code},${b.quota.min}~${b.quota.max} 工日/${b.unit})\xf7 工期 ${e} 天(定额知识库命中)`:`工种工程量约 ${Math.round(b.qty)}${b.unit} \xd7 经验工效区间 \xf7 工期 ${e} 天(定额工效知识不全,降级区间表达)`})),m=l.reduce((a,b)=>a+(b.min||0),0),n=l.reduce((a,b)=>a+(b.max||0),0),o={min:m,max:n},p=`各工种人数区间之和 ${m}~${n} 人(同期在场上界口径,不做无依据折算)`,q=Math.round((o.min+o.max)/2),r=[];for(let b of i){let j=a=>d.laborQuotaTable?.find(b=>b.pattern.test(`${a.name} ${a.description}`)&&b.unit===a.unit)||g[f(a)],k=a.entries.filter(a=>{if(a.quantity<=0||!b.pattern.test(`${a.name} ${a.description}`))return!1;let c=j(a);return!!c&&a.unit===c.unit&&h.some(b=>b.pattern.test(`${a.name} ${a.description}`))});if(0===k.length)continue;let l=k.reduce((a,b)=>a+b.quantity*(j(b)?.min||0),0),m=k.reduce((a,b)=>a+b.quantity*(j(b)?.max||0),0),n=c.find(a=>a.key===b.key)?.duration||Math.max(1,Math.round(e/i.length)),o=Math.max(1,Math.round(l/n)),p=Math.max(o,Math.round(m/n));r.push({phase:b.label,min:Math.min(o,q),max:Math.min(p,q),basis:`阶段条目工程量约 ${Math.round(k.reduce((a,b)=>a+b.quantity,0))} \xd7 经验工效区间 \xf7 阶段 ${n} 天(同时在场人数按峰值 ${q} 人封顶)`})}let s=l.map(a=>({trade:a.trade,mid:Math.max(1,Math.round(((a.min??1)+(a.max??a.min??1))/2))})),t=s.reduce((a,b)=>a+b.mid,0)||1,u=s.map(a=>({trade:a.trade,quota:a.mid*q/t})),v=u.map(a=>({trade:a.trade,count:Math.max(1,Math.floor(a.quota))})),w=q-v.reduce((a,b)=>a+b.count,0);if(w>0){let a=u.map((a,b)=>({index:b,frac:a.quota-Math.floor(a.quota)})).sort((a,b)=>b.frac-a.frac);for(let b=0;w>0&&b<a.length;b+=1){let c=a[b];if(!c)continue;let d=v[c.index];d&&(d.count+=1,w-=1)}}else if(w<0){let a=u.map((a,b)=>({index:b,quota:a.quota})).sort((a,b)=>a.quota-b.quota);for(let b=0;w<0&&b<a.length;b+=1){let c=a[b];if(!c)continue;let d=v[c.index];d&&!(d.count<=1)&&(d.count-=1,w+=1)}}let x=v.map(a=>({trade:a.trade,count:a.count,basis:`工种构成唯一口径:按工种工程量区间中值比例收敛(合计恒等于峰值 ${q} 人)`}));return{peak:o,peakValue:q,peakBasis:p,byPhase:r,byTrade:l,composition:x}}(c,n.totalDays,o,d),q=function(a,b){let c=[];for(let d of b.equipmentMapping){let b=a.entries.filter(a=>d.pattern.test(`${a.name} ${a.description}`)&&(!d.unit||a.unit===d.unit));if(0===b.length)continue;let e=b.reduce((a,b)=>a+b.quantity,0),f=Math.max(1,Math.min(4,Math.ceil(Math.log10(Math.max(10,e))-1))),g=Math.max(f,Math.min(8,f+2)),h={};for(let a of b)Object.assign(h,function(a){let b=String(a||"").replace(/\r/gu,""),c={};if(!b)return c;let d=[...b.matchAll(/(?:^|[\s,,;;。]|[0-9]{1,2}\s*[..、]\s*)([\u4e00-\u9fa5、]{2,14})\s*[::]/gu)].map(a=>({label:a[1].trim(),valueStart:(a.index??0)+a[0].length,matchStart:a.index??0}));for(let a=0;a<d.length;a+=1){let e=d[a],f=a+1<d.length?d[a+1].matchStart:b.length;if(f<=e.valueStart)continue;let g=b.slice(e.valueStart,f).replace(/[\s,,;;。]+$/gu,"").trim();g&&(c[e.label]=g.length>60?g.slice(0,60):g)}return c}(a.description||""));if(!d.spec){let a=Object.entries(h).find(([a])=>/规格|型号/.test(a))?.[1];a&&(h["型号规格"]=a)}c.push({name:d.name,spec:d.spec||h["型号规格"],min:f,max:g,basis:`${d.basis};相关条目工程量合计约 ${Math.round(e)}${b[0]?.unit||""}`,...Object.keys(h).length>0?{attributes:h}:{}})}return c}(c,d),r=function(a){let b=new Map;for(let c of a.entries){if(!c.name||c.quantity<=0)continue;let a=function(a){let b=[];for(let c of $){let d=c.exec(a);d&&d[0]&&(b.some(a=>a.includes(d[0])||d[0].includes(a))||b.push(d[0]))}return b.join(" ")}(`${c.name} ${c.description}`),d=a?`${c.name}||${a}`:c.name,e=b.get(d);e?e.quantity+=c.quantity:b.set(d,{name:c.name,quantity:c.quantity,unit:c.unit,spec:a||void 0})}return[...b.values()].sort((a,b)=>b.quantity-a.quantity).map(a=>({name:a.name,quantity:Math.round(1e3*a.quantity)/1e3,unit:a.unit,spec:a.spec,batchDesc:"按施工段分批进场",basis:"清单汇总 + 进度匹配"}))}(c),s=function(a,b){let c=[];for(let d of b.inspectionBatchRules){let b=a.entries.filter(a=>d.namePattern.test(a.name)&&(!d.unit||a.unit===d.unit)).reduce((a,b)=>a+b.quantity,0);if(b<=0)continue;let e=d.divisor>0?Math.max(1,Math.ceil(b/d.divisor)):0,f=d.descTemplate.replace("{count}",String(e)).replace("{total}",String(Math.round(1e3*b)/1e3));c.push({scope:d.scope,planDesc:f})}return c}(c,d),t=function(a){let b=a.entries.filter(a=>/挖一般土方|挖沟槽土方|挖基坑土方|清淤/u.test(a.name)&&"m3"===a.unit).reduce((a,b)=>a+b.quantity,0),c=a.entries.filter(a=>/回填|路肩土|种植土/u.test(a.name)&&"m3"===a.unit).reduce((a,b)=>a+b.quantity,0),d=Math.max(0,Math.round((b-c)*1e3)/1e3);return{excavation:Math.round(1e3*b)/1e3,backfill:Math.round(1e3*c)/1e3,disposal:d,basis:"清单挖/填/弃量汇总(挖方含清淤),补疑口径:购土回填运距自行考虑"}}(c),u=function(a,b,c){let{machinePowerTable:d,powerFallbackText:e,waterNoteText:f}=c,g=a.filter(a=>!_.has(a.name)).reduce((a,b)=>a+(d.find(a=>a.name===b.name)?.kw||0)*(b.min||1),0),h=g>0?`按电动机具负荷计算,用电负荷约 ${Math.round(.7*g)} kW(电动机具总功率约 ${Math.round(g)} kW,同时系数 0.7),${e}`:e,i=Math.round(60*b.peakValue/1e3*10)/10;return{powerLoad:h,waterUsage:`生活用水按高峰人数 ${b.peakValue} 人、每人每日 60L 计算,高峰日生活用水量约 ${i} m\xb3;${f}`}}(q,p,d),w=(a.evidence||[]).map(a=>String(a.content||"")).join("\n"),x=function(a,b){let c=a.villages.map(a=>a.villageGroup).map(a=>({name:a,basis:`清单按${b.groupLabel}(工程名称)`})),d=c.length>1&&b.multiVillageFlow?.(c.length)||b.deploymentFlowFallback,e=[...new Set(a.entries.map(a=>a.section).filter(Boolean))];return{sections:c,sequence:e.length>0?e.join(" → "):b.sequenceFallback,sequenceBasis:"清单分部分项编排顺序归纳",flow:d}}(c,d),y=function(a,b){let c=[];for(let d of b.difficultyTemplates)d.test(a)&&c.push({name:"function"==typeof d.name?d.name(a):d.name,measure:d.measure,basis:d.basis});return 0===c.length&&c.push({name:"多工序交叉施工组织",measure:"按清单分部分项编排顺序组织流水作业,加强工序衔接检查",basis:"清单分部分项结构"}),c}(c,d),z=function(a){let b=v({facts:a.facts||[],evidence:a.evidence||[]}),c=[];a.contract&&a.contract.totalDays>0&&c.push({id:"contract_days",label:"总工期",values:[`${a.contract.totalDays} 日历天`]}),a.labor&&a.labor.peakValue>0&&c.push({id:"labor_peak",label:"劳动力峰值",values:[`${a.labor.peakValue} 人`]});let d=a.villageCount||0;if(d>0&&c.push({id:"village_count",label:"自然村数量",values:[`${d} 个自然村`]}),a.boq){let b=function(a){let b=new Map;for(let c of a.entries){if(!c.name||c.quantity<=0||/暂列|金额|计日工|税|费/u.test(c.name)||!c.section)continue;let a=b.get(c.section)||[];a.push(c),b.set(c.section,a)}return[...b.entries()].sort((a,b)=>b[1].length-a[1].length).slice(0,3).map(([a,b])=>{let c=[...b].sort((a,b)=>b.quantity-a.quantity||(a.name<b.name?-1:1))[0];return`${c.name} ${c.quantity}${c.unit}(${a})`})}(a.boq);b.length>0&&c.push({id:"core_quantities",label:"核心工程量",values:b})}return{entries:[...b,...c]}}({facts:a.facts,evidence:a.evidence,contract:n,labor:p,boq:c,villageCount:j}),C=[...new Set(c.entries.map(a=>a.section).filter(Boolean))],D=function(a){if(!a)return"";let b=/建设地点[:: \t|]*([^。;;\n|]{2,40}?)(?=[,,。;;\n|]|工期|质量标准|合同估算)/u.exec(a);return b?b[1].trim().replace(/[,,、\s]+$/gu,""):""}(a.basicFacts||""),E=D?function(a){for(let b of i)if(b.pattern.test(a))return{...b.climate};return{rainySeason:"",highTemp:"",winter:""}}(D):(b=d.climateZone)&&i.find(a=>a.zone===b)?.climate||{rainySeason:"",highTemp:"",winter:""},F=[];o.some(a=>a.basis.includes("均分降级"))&&F.push("里程碑分组未命中策略特征(非 prep 权重占比 < 5%),已按总工期均分降级,详见 data.milestones.basis");let G=new Set(o.map(a=>a.key)),H=d.milestoneGroups.slice(1).filter(a=>!G.has(a.key));if(H.length>0&&F.push(`策略阶段未命中清单,本阶段不产出:${H.map(a=>a.label).join("、")}(本项目清单中无对应分部条目;若确有该分部工作,请检查清单解析完整性或策略分部特征是否覆盖)`),p.peakValue<=0)F.push("劳动力数据未产出(清单中无可用工效推导条目):正文不引用劳动力数值,不得自行估计");else{let a=o[o.length-1];a&&!p.byPhase.some(b=>b.phase===a.label)&&F.push(`分阶段劳动力缺「${a.label}」行:该阶段条目无可用工效系数(分组/计量单位未匹配到工效,策略组未配置该类工效;不编造人数)`)}return E.rainySeason||F.push("气候区域未识别,季节施工由写作层按建设地点常识处理"),{data:{strategyId:d.id,project:{name:a.projectName||"(待提取:项目名称)",scope:c.villages.length>0?`${c.villages.length} 个${d.groupLabel}(${c.villages.map(a=>a.villageGroup).join("、")})`:"",works:C,location:D},contract:{totalDays:n.totalDays,qualityStandard:n.qualityStandard,pricingFile:n.pricingFile,estimatedAmount:n.estimatedAmount||void 0},climate:E,milestones:o,resources:{labor:p,equipment:q},materialsPlan:r,fundPlan:{wageRule:"工资性工程款按工程所在地造价管理规定执行",usagePlan:"按进度分阶段使用"},testPlan:[],testInstruments:(d.instrumentTable||g).map(a=>({name:a.name,spec:a.spec,quantity:a.quantity,purpose:a.purpose,basis:"检定合格后投入使用"})),tempLand:(d.siteFacilityTable||h).map(a=>({purpose:a.name,area:a.area||(a.areaPerCapita?Math.max(10,Math.round(p.peakValue*a.areaPerCapita)):void 0),location:a.locationHint,duration:a.durationHint,note:a.note,basis:"施工总平面布置规划"})),schedule:function(a){let b=[],c=1;for(let[d,e]of a.entries()){let a=Math.max(1,e.duration||1),f=c,g=c+a-1;b.push({seq:d+1,label:e.label,duration:a,startDay:f,endDay:g,critical:"prep"!==e.key,basis:"prep"===e.key?"前导工作,与主体施工穿插进行":"按里程碑顺序衔接"}),c=g+1}return b}(o),earthworkBalance:t,tempUtilities:u,redLineFacts:f,amountRule:"商务禁区延续:金额类数据禁入正文(合同估算价例外),fund_plan/red_line_facts 渲染时遵守",decisionLock:z,quantities:e,specAuthorities:k,inspectionBatches:s,constructionDeployment:x,keyDifficulties:y,basisRegulations:function(a){if(!a)return[];let b=[],c=new Set;for(let d of a.matchAll(/《([^《》]{2,40}(?:法|条例|办法|规程|规范|标准))》(?:[((][^))]{0,24}?(?:国令|令|主席令|〔\d{4}〕)[^))]{0,24}?[))])?/gu)){let a=d[1].replace(/[\s#]/gu,"").trim();if(/通知|意见|公示|公告/u.test(a)||a.length<4||a.length>20)continue;let e=(d[0].match(/[((]([^))]{0,24}?(?:国令|令|主席令|〔\d{4}〕)[^))]{0,24}?)[))]/u)||[])[1],f=e?`《${a}》(${e.trim()})`:`《${a}》`;if(!c.has(f)&&(c.add(f),b.push(f),b.length>=14))break}return b}(`${a.basicFacts||""}
|
|
140
141
|
${w}`),drawingNote:"总平面布置图/横道图/组织机构图为后期人工配图,蓝图只规划对应章节正文内容"},diagnostics:{warnings:F}}}({boq:j,basicFacts:a.basicFacts,evidence:a.evidence,facts:a.facts,projectName:d.projectCode||"",strategy:q});if(c.warnings.push(...r.diagnostics.warnings),a.composition&&a.composition.appendixPlan.length>0){let b=[];for(let c of a.composition.appendixPlan)"table"===c.kind&&("blueprint.equipment"===c.dataSource&&0===(r.data.resources?.equipment?.length||0)?b.push(`${c.title}(机械设备数据为空)`):"blueprint.labor"===c.dataSource&&0===(r.data.resources?.labor?.composition?.length||0)?b.push(`${c.title}(劳动力构成数据为空)`):"blueprint.testInstruments"===c.dataSource?b.push(`${c.title}(绑定资料未提供试验检测仪器数据)`):"blueprint.tempLand"===c.dataSource&&b.push(`${c.title}(绑定资料未提供临时用地数据)`));b.length>0&&c.warnings.push(`文末附表数据源缺口 ${b.length} 项:${b.join("、")}(终稿按招标表头骨架渲染并显性标注,由编制人补齐)`)}c.stage="阶段 B/C";let s=function(a){let{chapterTitles:b,boq:c}=a;return{chapters:b.map((b,d)=>{var e;let f=String(d+1),g=/主要分部分项|施工方案|施工方法/u.test(b)?function(a,b){let c=new Map;for(let b of a.entries){if(!b.section)continue;let a=c.get(b.section)||[];a.push(b),c.set(b.section,a)}let d=[],e=0;for(let[a,f]of c){let c=ai(a,f),g=f.some(a=>"unit-project"===a.sectionKind),h=[];if(g){let a=new Map;for(let b of f){let d=b.subsection||c,e=a.get(d)||[];e.push(b),a.set(d,e)}for(let[b,c]of a)h.push(aj(ai(b,c),c))}else h.push(aj(c,f));e+=1,d.push({id:`${b}.${e}`,title:c,targetWords:ah.gF,requiredParams:h.flatMap(a=>Object.keys(a.quantities).slice(0,5).map(a=>({path:`data.quantities.${a}`,mode:"must_cite",strict:!0}))),tablePlans:[],workPackages:h})}return d}(c,f):[];return{id:f,title:b,isActive:(e=a.docType,!(/专项施工方案|专项方案|危大/u.test(e)&&/总平面|平面布置|施工部署|总体部署/u.test(b))),requiredParams:[],subSections:g}})}}({chapterTitles:a.chapterTitles,boq:j,docType:d.docType});c.stage="阶段 D";let t={meta:d,data:{...r.data,composition:a.composition},outline:s,validation:{passed:!1,checks:[]},diagnostics:c};return t.validation=function(a,b){let c=[],d=!b||0===b.entries.length;c.push({name:"0. 清单源可用性",passed:!d,message:d?"工程量清单缺失或未解析出任何条目:工程量/规格/资源计划类权威值全部无法推导,蓝图不可用。请确认资料包内含工程量清单且已成功解析入库后重试。":`清单可用:${b.entries.length} 条目、${b.villages.length} 个单位工程`});let e=(0,an.Jx)(a,Z);c.push({name:"1. Schema 校验",passed:0===e.length,message:0===e.length?"结构/类型/必填/边界全部通过":e.join(";")});let f=function(a,b){let c=[];if(b){let d=U(b);for(let[b,e]of Object.entries(a.data.quantities)){let a=d[b];if(!a){c.push(`quantities.${b} 不在清单解析产物值集中(疑似编造)`);continue}a.value!==e.value&&c.push(`quantities.${b} 数值 ${e.value} 与清单聚合值 ${a.value} 不一致`)}}for(let b of a.data.redLineFacts)b.value&&b.source||c.push(`红线事实「${b.key}」缺值或缺来源`);if(b){let d=ao[a.data.strategyId];if(d)for(let e of a.data.resources?.equipment||[]){let a=d.equipmentMapping.find(a=>a.name===e.name);if(!a)continue;let f=b.entries.filter(b=>a.pattern.test(`${b.name} ${b.description}`)&&b.unit===a.unit).reduce((a,b)=>a+b.quantity,0),g=/合计约\s*([\d.]+)/u.exec(e.basis);g&&Number(g[1])!==Math.round(f)&&c.push(`机械「${e.name}」basis 工程量 ${g[1]} 与清单同单位聚合 ${Math.round(f)} 不一致`)}else c.push(`蓝图推导策略 id「${a.data.strategyId}」不在策略组登记表(设备单位一致性校验无法执行)`)}return c}(a,b);c.push({name:"2. 事实锚定校验",passed:0===f.length,message:0===f.length?"L1a 值全部 ∈ 清单解析产物值集,红线事实逐条有源":f.join(";")});let g=function(a,b){let c=[],d=a.outline.chapters.flatMap(a=>a.subSections).flatMap(a=>a.workPackages);if(b){let a=new Set;for(let b of d)for(let c of b.coveredSeqs)a.add(c);let e=b.entries.filter(b=>b.section&&!a.has(b.seq));e.length>0&&c.push(`清单条目零丢失校验失败:${e.length} 条未被工作包覆盖(如序号 ${e.slice(0,5).map(a=>a.seq).join("、")})`)}return 0===a.data.keyDifficulties.length&&c.push("重难点及保证措施未逐项列明"),c}(a,b);c.push({name:"3. 覆盖校验",passed:0===g.length,message:0===g.length?"清单条目零丢失、重难点逐项列明":g.join(";")});let h=function(a){let b=[],c=a.data.contract?.totalDays||0,d=(a.data.milestones||[]).reduce((a,b)=>a+(b.duration||0),0);c>0&&d>c&&b.push(`里程碑总和 ${d} 天超过总工期 ${c} 天`);let{labor:e}=a.data.resources||{};if(e)for(let a of(e.peak&&e.peak.min>e.peak.max&&b.push(`劳动力峰值区间异常(min ${e.peak.min} > max ${e.peak.max})`),e.peakValue>0&&e.peak&&(e.peakValue<e.peak.min||e.peakValue>e.peak.max)&&b.push(`劳动力峰值唯一口径 ${e.peakValue} 人超出推导区间 ${e.peak.min}~${e.peak.max} 人`),e.byTrade||[]))(a.min||0)>(a.max||0)&&b.push(`工种「${a.trade}」人数区间异常`);let f=new Set((a.data.decisionLock?.entries??[]).map(a=>a.id));for(let c of(a.data.contract?.totalDays>0&&!f.has("contract_days")&&b.push(`决策锁缺失数据条目 contract_days(总工期 ${a.data.contract.totalDays} 日历天未入锁)`),e&&e.peakValue>0&&!f.has("labor_peak")&&b.push(`决策锁缺失数据条目 labor_peak(劳动力峰值 ${e.peakValue} 人未入锁)`),a.data.redLineFacts?.some(a=>"自然村数量"===a.key)&&!f.has("village_count")&&b.push("决策锁缺失数据条目 village_count(自然村数量红线事实未入锁)"),a.data.resources?.equipment||[]))(c.min||0)>(c.max||0)&&b.push(`机械「${c.name}」台数区间异常`);return b}(a);c.push({name:"4. 内部一致性校验",passed:0===h.length,message:0===h.length?"里程碑/劳动力/机械区间自洽":h.join(";")}),c.push({name:"5. 标书编制规格承接",passed:!0,message:function(a){let b=a.data.composition;if(!b)return"未承接标书编制规格(生成输入未提供阶段 1 判定,正文口径与文末附表按常规处理)";let c="blind"===b.bidType?"暗标":"open"===b.bidType?"明标":"未识别勾选标记(按常规口径)",d=b.appendixPlan.filter(a=>"table"===a.kind).length,e=b.appendixPlan.filter(a=>"figure"===a.kind).length;return[`标书类型:${c}`,`正文口径:${["forbidden"===b.bodyTablePolicy?"禁表格(显式禁表句)":"表格允许","forbidden"===b.bodyFigurePolicy?"禁图片":"图片允许"].join("/")}`,b.appendixPlan.length>0?`文末附表 ${b.appendixPlan.length} 项(表类 ${d}/图类 ${e})`:""].filter(Boolean).join(";")}(a)});let i=function(a){let b=!a.consistencyErrors.some(a=>/里程碑|总工期/u.test(a)),c=!a.consistencyErrors.some(a=>/劳动力|工种/u.test(a)),d=!a.consistencyErrors.some(a=>/机械/u.test(a)),e=!1!==a.boqAvailable;return{laborPeak:e&&a.schemaPassed&&a.factPassed&&c,schedule:e&&a.schemaPassed&&a.factPassed&&b,blueprint:e&&a.schemaPassed&&a.factPassed&&a.coveragePassed&&d}}({schemaPassed:0===e.length,factPassed:0===f.length,coveragePassed:0===g.length,consistencyErrors:h,boqAvailable:!d});return{passed:c.every(a=>a.passed),checks:c,authorityAvailability:i}}(t,f),t.validation.passed||c.warnings.push(`蓝图校验未通过:${t.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}(一期旁路仅报告,不阻断生成)`),c.durationMs=Date.now()-b,t}function aQ(a,b){let c=e.join((0,f.Gl)(a),"assets","blueprint.json");return d.writeFileSync(c,JSON.stringify(b,null,2),"utf8"),c}},51190:(a,b,c)=>{c.d(b,{nC:()=>j,A:()=>D,GZ:()=>E,qD:()=>F,mN:()=>t,KX:()=>z,UT:()=>s,nD:()=>o,pm:()=>B,Bf:()=>C});var d=c(73024),e=c(76760),f=c(1218),g=c(22157),h=c(48161),i=c(28366);let j=[{key:"project_name",label:"项目名称",aliases:["项目名称","工程名称","招标项目名称"],valueType:"text"},{key:"project_code",label:"项目编号",aliases:["项目编号","招标项目编号","工程编号"],valueType:"identifier"},{key:"owner",label:"招标人",aliases:["招标人","项目业主","建设单位","发包人","采购人"],valueType:"organization"},{key:"project_location",label:"建设地点",aliases:["建设地点","实施地点","服务地点","交付地点"],valueType:"location"},{key:"project_scale",label:"建设规模",aliases:["建设规模","工程规模","项目规模"],valueType:"scale"},{key:"schedule_requirement",label:"计划工期",aliases:["计划工期","合同工期","总工期","工期","实施周期","服务期限"],valueType:"duration"},{key:"quality_standard",label:"质量标准",aliases:["质量标准","质量目标","验收标准","服务标准"],valueType:"standard"},{key:"project_investment_estimate",label:"合同估算价",aliases:["合同估算价","合同估算价格","投资估算","估算价格","最高投标限价","招标控制价","预算金额"],valueType:"money"},{key:"labor_peak",label:"劳动力高峰人数",aliases:["劳动力高峰","高峰期劳动力","高峰人数","劳动力峰值","高峰期人数","劳动力配置"],valueType:"count"},{key:"assembly_rate",label:"装配率",aliases:["装配率","装配式建筑占比","装配式比例","装配式建筑面积占比"],valueType:"percentage"},{key:"foundation_support_form",label:"基坑支护形式",aliases:["基坑支护形式","基坑支护方式","支护形式","支护方式"],valueType:"text"},{key:"excavation_depth",label:"基坑开挖深度",aliases:["基坑开挖深度","基坑深度","开挖深度","基坑底标高","坑底标高","坡底线","坑底"],valueType:"text"},{key:"award_clause",label:"创优奖惩条款",aliases:["创优奖惩","优质优价","创优目标","奖惩条款","创优奖项"],valueType:"award"}],k=[{pattern:/土钉/u,form:"土钉墙"},{pattern:/锚杆|锚索/u,form:"锚杆支护"},{pattern:/喷锚/u,form:"喷锚支护"},{pattern:/放坡/u,form:"放坡开挖"},{pattern:/地下连续墙/u,form:"地下连续墙"},{pattern:/支护桩/u,form:"支护桩"}];function l(a){return/^(见|详见|参见|按|以).{0,30}(招标公告|招标文件|投标人须知|前附表|合同|附件|图纸|清单|约定|规定|执行)/u.test(a)||/见招标公告|见投标人须知前附表|详见|按.*执行/u.test(a)}function m(a,b){switch(b.valueType){case"duration":if(!/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确工期数值和时间单位"};if(/延误|逾期|违约|赔偿|罚款|处罚|扣除|扣留|切除/u.test(a))return{rejected:!0,score:-90,reason:"命中工期违约条款而非计划工期"};return{rejected:!1,score:45,reason:"包含明确工期数值和时间单位"};case"money":if(!/\d+(?:\.\d+)?\s*(?:万元|元|亿元)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确金额数值和单位"};if(/综合单价|税率|增值税|利润|报价明细/u.test(a))return{rejected:!0,score:-90,reason:"命中非目标商务明细"};return{rejected:!1,score:45,reason:"包含明确金额数值和单位"};case"standard":if(!/合格|优良|一次性验收|达到|满足|符合/u.test(a))return{rejected:!0,score:-70,reason:"不符合标准类字段表达"};if(/工期|投标|技术标准|有效期/u.test(a))return{rejected:!0,score:-90,reason:"标准字段包含其他字段或投标条款"};return{rejected:!1,score:40,reason:"符合标准类字段表达"};case"location":if(l(a))return{rejected:!1,score:-40,reason:"引用型地点弱值"};if(!/(省|市|区|县|镇|街道|路|园区|大道|巷|内|号)/u.test(a))return{rejected:!1,score:-10,reason:"地点具体性不足"};return{rejected:!1,score:35,reason:"包含具体地址特征"};case"organization":if(/监督管理部门|投标人|中标候选人|评标委员会/u.test(a))return{rejected:!0,score:-90,reason:"组织字段角色串位"};if(/(公司|集团|单位|委员会|机关|中心|局|院|所|政府|运营管理)/u.test(a))return{rejected:!1,score:35,reason:"包含组织名称特征"};return{rejected:!1,score:5,reason:"组织名称特征较弱"};case"identifier":if(!/^[A-Za-z0-9\-_.()()]+$/u.test(a))return{rejected:!0,score:-70,reason:"编号格式不合法"};if(/(?:㎡|m²|m2|m3|m³|平方米|米|万元|元|日历天|个月)/u.test(a))return{rejected:!0,score:-60,reason:"编号中混入量纲单位,疑似字段串位"};return{rejected:!1,score:35,reason:"符合编号格式"};case"scale":if(/\d+(?:\.\d+)?\s*(?:㎡|平方米|m²|米|m|层|栋|座|万元|元)/iu.test(a))return{rejected:!1,score:30,reason:"包含规模数值或单位"};return{rejected:!1,score:5,reason:"规模字段为文本描述"};case"count":if(!/\d+(?:\.\d+)?\s*人/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确人数数值"};if(/面积|工期|金额|报价|万元/u.test(a))return{rejected:!0,score:-70,reason:"人数字段混入其他量纲"};return{rejected:!1,score:40,reason:"包含明确人数数值"};case"percentage":if(!/\d+(?:\.\d+)?\s*(?:%|%)/u.test(a))return{rejected:!0,score:-80,reason:"缺少百分比数值"};if(/工期|金额|报价/u.test(a))return{rejected:!0,score:-70,reason:"百分比字段混入其他量纲"};return{rejected:!1,score:40,reason:"包含百分比数值"};case"award":if(!/(?:杯|奖|万元|优质优价)/u.test(a))return{rejected:!0,score:-70,reason:"缺少奖项或奖惩金额特征"};if(/评标|保证金|报价明细|综合单价/u.test(a))return{rejected:!0,score:-90,reason:"奖项字段串入评标条款"};return{rejected:!1,score:40,reason:"包含奖项/奖惩金额特征"};default:if("project_name"===b.key){if(/存在部位|风险等级|管控措施|监测频次|闭环要求|序号|内容|范围|不适用/u.test(a))return{rejected:!0,score:-90,reason:"项目名称字段串位或表头噪声"};if(!/项目|工程|学院|宿舍|楼|校区|施工总承包/u.test(a))return{rejected:!0,score:-70,reason:"项目名称缺少工程名称特征"};return{rejected:!1,score:35,reason:"符合项目名称特征"}}if("foundation_support_form"===b.key){if(!(k.some(b=>b.pattern.test(a)||a.includes(b.form))||/支护|放坡|锚|桩|喷|开挖|护坡/u.test(a)))return{rejected:!0,score:-70,reason:"基坑支护形式缺少支护工艺特征"};if(/监测|监测频次|闭环/u.test(a))return{rejected:!0,score:-80,reason:"支护形式字段串入监测管控内容"};return{rejected:!1,score:30,reason:"包含支护工艺特征"}}if("excavation_depth"===b.key){if(!/\d+(?:\.\d+)?/u.test(a))return{rejected:!0,score:-70,reason:"基坑开挖深度缺少数值"};if(/监测|监测频次|闭环|验收|支护桩/u.test(a))return{rejected:!0,score:-80,reason:"开挖深度字段串入监测管控内容"};return{rejected:!1,score:30,reason:"包含开挖深度数值"}}return{rejected:!1,score:a.length>=2?10:-20,reason:"文本字段"}}}function n(a,b){let c=(0,f.de)(a.value),d=[],e=30,g=!1;(!c||c.length>260)&&(g=!0,e-=100,d.push("空值或过长")),/###|投标文件的编制|备选投标方案|投标将被否决|投标人提供|投标有效期|电子交易系统|公共资源交易监督管理部门|中标候选|评标委员会|实质性内容作出响应|招标人有权核查/u.test(c)&&(g=!0,e-=100,d.push("大段条款或 Markdown 噪声")),/(?<=[日天])\s*[0-9]+(?:\.[0-9]+)?(?=[\s]*(?:招标|建设|质量|合同|项目|工程|资金|投标|开标|评标|付款|工期|开工|计划|计价|现场|资质|标段|[0-9]{1,3}[.、.]|[,,。;;]|$))/u.test(c)&&(g=!0,e-=100,d.push("值尾部编号粘连,疑似 PDF 编号串行残留")),j.some(a=>a.key!==b.key&&a.aliases.some(a=>c.includes(a)))&&(e-=45,d.push("包含其他字段名,疑似字段串位")),l(c)&&(e-=35,d.push("引用型弱值"));let h=m(c,b);return e+=h.score,d.push(h.reason),h.rejected&&(g=!0),"evidence"===a.sourceType&&(e+=20,d.push("来源为证据原文")),a.sourceName&&/补疑|答疑|澄清|补充|更正|修改/u.test(a.sourceName)&&(e+=35,d.push("补疑/澄清类修正文件,权威最高")),a.sourceName&&/招标文件|招标公告|前附表|合同|需求书|正文/u.test(a.sourceName)&&(e+=15,d.push("来源文件可信")),"generated_markdown"===a.sourceType&&(e-=10),{...a,value:c,confidence:e,rejected:g,reasons:d}}function o(a){let b=`${a.fieldId||""}${a.key||""}${a.fieldName||""}`;return j.find(c=>c.key===a.fieldId||c.aliases.some(a=>b.includes(a)))}let p=/坡底线|坑底标高|基坑底标高|开挖深度|基坑深度/u,q=RegExp(k.map(a=>a.pattern.source).join("|"),"u"),r=/(?:超过|大于|小于|不[大低小]于|不低于|及以上|及以下|以上|以下)/u;function s(a){let b=[],c=new Map,d=new Map;for(let b of a){let a=String(b.content||""),e=b.filePath||b.sectionTitle||"drawing_annotation";if(!("drawing"===b.processingType||/dwg|图纸|CAD/iu.test(`${b.filePath||""} ${b.sectionTitle||""}`))&&!/CAD 语义标注/u.test(a)||!p.test(a)&&!q.test(a))continue;let f=a.split(/\r?\n/u);for(let a=0;a<f.length;a+=1){let b=f[a].trim();if(b){if(p.test(b)&&!/坑底H/u.test(b)&&!r.test(b)){let d=a=>Number.isFinite(a)&&a>=.5&&a<=20,g=b.search(p),h=g<0?0:g+(b.match(p)?.[0].length??0),i=[...b.matchAll(/-?(\d+(?:\.\d{1,3})?)/gu)].filter(a=>{let c=a.index??0,d=b[c-1],e=b.slice(c+a[0].length),f=b[c+a[0].length];return!/^\s*(?:\/|每|m\s*\/\s*s|m2|m²|m3|m³|kg|t|%|℃)/iu.test(e)&&":"!==d&&":"!==f&&"#"!==f}).map(a=>{let b=a.index??0,c=b>=h?b-h:h-(b+a[0].length);return{value:Math.abs(Number(a[1])),distance:c}}).filter(a=>d(a.value));i.sort((a,b)=>a.distance-b.distance||b.value-a.value);let j=i.length>0?i[0].value:NaN,k=!1;if(!Number.isFinite(j)&&a>0&&/^-?[\d.,]+\s*$/u.test(f[a-1].trim())){let b=Math.abs(Number(f[a-1].trim().replace(/,/gu,"")));d(b)&&(j=b,k=!0)}if(Number.isFinite(j)){let d=(k?`${f[a-1].trim()} ${b}`:b).replace(/[|]/gu," ").replace(/\s+/gu," ").trim().slice(0,48),g=`${e}:${j.toFixed(2)}`;c.has(g)||c.set(g,{value:j,context:d})}}if(q.test(b))for(let a of k.filter(a=>a.pattern.test(b)).map(a=>a.form))d.has(a)||d.set(a,{form:a,context:b.replace(/\s+/gu," ").slice(0,60)})}}}if(c.size>0){let a=Math.max(...[...c.values()].map(a=>a.value)),d=[...c.values()].map(a=>a.context).slice(0,3).join(";");b.push({key:"基坑开挖深度",fieldId:"excavation_depth",fieldName:"基坑开挖深度",value:`${a}m(图纸标注:${d})`,sourceFile:"图纸标注",roleId:"drawing",processingType:"drawing",confidence:90})}if(d.size>0){let a=[...d.values()],c=a.map(a=>a.context).slice(0,3).join(";");b.push({key:"基坑支护形式",fieldId:"foundation_support_form",fieldName:"基坑支护形式",value:`${a.map(a=>a.form).join("、")}(图纸标注:${c})`,sourceFile:"图纸标注",roleId:"drawing",processingType:"drawing",confidence:90})}return b}function t(a){return function(a,b=j){let c=new Map;for(let d of b){let b=a.filter(a=>a.fieldKey===d.key).sort((a,b)=>b.confidence-a.confidence),e=b.find(a=>!a.rejected&&a.confidence>0);e&&c.set(d.key,{fieldKey:d.key,label:d.label,value:e.value,source:e.sourceName||e.sourceType,confidence:e.confidence,candidates:b,selectedReason:e.reasons.join(";")})}return c}([...function(a){let b=[];for(let c of a){let a=o(c);if(!a)continue;let d=(0,g.lG)(c.value);b.push(n({fieldKey:a.key,label:a.label,value:d,sourceType:"structured_fact",sourceName:c.sourceFile||c.sourceRef?.sectionTitle||"structured_fact"},a))}let c=j.find(a=>"excavation_depth"===a.key);if(c)for(let d of a){if("excavation_depth"===d.fieldId)continue;let a=(0,g.lG)(d.value),e=`${d.fieldId||""}${d.key||""}${d.fieldName||""} ${a}`;if(!/坡底线|坑底|电梯井|坑底标高/u.test(e))continue;let f=[...a.matchAll(/-?(\d+(?:\.\d{1,3})?)(?=[^0-9.]|$)/gu)].map(a=>Math.abs(Number(a[1]))).filter(a=>Number.isFinite(a)&&a>.5&&a<50);if(0===f.length)continue;let h=Math.max(...f);b.push(n({fieldKey:"excavation_depth",label:c.label,value:`${h}m(图纸标注:${a.slice(0,60)})`,sourceType:"structured_fact",sourceName:d.sourceFile||d.sourceRef?.sectionTitle||"drawing_annotation"},c))}return b}(a.facts),...function(a,b="generated_markdown"){let c=[];for(let d of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(d)||/^\|\s*:?-{3,}:?/u.test(d))continue;let a=d.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let e="序号"===a[0]&&a.length>=3?a[1]:a[0],f="序号"===a[0]&&a.length>=3?a[2]:a[1],g="序号"===a[0]&&a.length>=4?a[3]:a[2],h=j.find(a=>a.aliases.some(a=>e.includes(a))||a.label===e);!h||!f||/内容|参数|资料未明确|系统暂未确认|暂未从知识库确认/u.test(f)||c.push(n({fieldKey:h.key,label:h.label,value:f,sourceType:"generated_markdown",sourceName:g||b},h))}return c}(a.markdown||"")])}function u(a){return({user:100,addendum:96,contract:90,tender:85,boq:75,drawing:70,standard:60,evidence:55,structured_fact:50,projectGraph:40,generated_markdown:30,derived:20,unknown:10})[a]}function v(a){let b=e.join(process.env.HOME||process.cwd(),".customize-agent","cache","document-workflow",(0,g.c6)(a||"default"));return d.mkdirSync(b,{recursive:!0}),b}let w=new Map;function x(a){let b=w.get(a);return b||(b=RegExp(a,"u"),w.set(a,b)),b}function y(a,b){let c=`${a||""} ${b||""}`;return/补疑|答疑|澄清|补充|更正|修改/u.test(c)?95:/合同/u.test(c)?90:/招标文件|招标公告|前附表|投标人须知|需求书/u.test(c)?85:/清单|工程量|BOQ|编制说明/u.test(c)?75:/图纸|设计/u.test(c)?70:50}function z(a,b=(0,i.bC)()){let c=[];for(let d of["area","cost","duration","floors","parkingSpaces"]){let e=new Set,f=[];for(let c of a){let a=(0,g.lG)(c.value),h=y(c.sourceFile,c.roleId);for(let g of function(a,b,c,d){let e=[],f="area"===b?/(?<![地上地下门卫室值班室配电室配电房泵房水泵房锅炉房公厕车库车棚岗亭传达室警卫室样板房售楼处门房])总?建筑面积|建设规模/u:"cost"===b?/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价/u:"floors"===b?/总?层数|建筑层数|地上层数|地下层数|楼层数/u:"parkingSpaces"===b?/总?车位|停车位|机动车位|车位数/u:/计划工期|合同工期|总工期|施工周期/u,g="floors"===b||"parkingSpaces"===b?"\\d+(?:[.,]\\d+)?":"\\d{2,}(?:[.,]\\d+)?",h=RegExp(`(?:${f.source})(?:[^0-9\\n]{0,14}?)(${g})\\s*${"area"===b?"(万?㎡|万?m\xb2|万?m2|万?平方米)":"cost"===b?"(万元|亿元|万?元)":"floors"===b?"(层)":"parkingSpaces"===b?"(个|个车位|个停车位)":"(日历天|天|个月|月)"}`,"giu"),i=RegExp(g,"u");for(let g of a.matchAll(h)){let h,j=g[0].match(f),k=j?.[0]||"",l=g[1].replace(/[,,]/gu,"").trim(),m=(g[2]||"").trim();if(!k||!l||!i.test(l))continue;let n=(g.index??0)+(j?.index??0),o=(g.index??0)+g[0].indexOf(g[1]),p=o-(n+k.length),q=a.slice(n+k.length,o);if("area"===b&&/占地|用地/u.test(q))continue;let r=function(a,b,c,d,e,f){let g=a.slice(Math.max(0,b-10),b),h=a.slice(b+c,d),i=`${g}${h}`,{addendumSource:j,amendmentContext:k,thresholdComparison:l,aspirationalPrefix:m}=f.factGovernance;return x(j).test(e||"")&&x(k).test(i)?"amendment":x(l).test(i)?"threshold":x(m).test(g)?"aspirational":"ontological"}(a,n,k.length,o,c,d);if("threshold"!==r&&"aspirational"!==r){if("duration"===b||"floors"===b||"parkingSpaces"===b)h=`${l}|${m}`;else{let a=+!!/万/u.test(m),b=Number(l)*(a?1e4:1);if(!Number.isFinite(b))continue;h=String(/亿元/u.test(m)?1e8*b:/万元/u.test(m)?1e4*b:b)}e.push({scope:k,value:l,unit:m,compareKey:h,contextClass:r,anchorScore:(p<=3?3:p<=9?2:1)+("ontological"===r||"amendment"===r?2:1),gapLength:p})}}return e}(a,d,c.sourceFile,b)){let a=`${c.sourceFile||""}|${g.scope}|${g.compareKey}`;e.has(a)||(e.add(a),f.push({...g,sourceFile:c.sourceFile,priority:h}))}}if(!(f.length<2))for(let[a,e]of f.reduce((a,b)=>{let c=b.scope.replace(/^总/u,""),d=a.get(c)||[];return d.push(b),a.set(c,d),a},new Map)){let f;if(new Set(e.map(a=>a.compareKey)).size<2||new Set(e.map(a=>a.sourceFile).filter(Boolean)).size<2)continue;let g=Math.max(...e.map(a=>a.priority)),h=e.filter(a=>a.priority===g),i=Math.max(...h.map(a=>a.anchorScore)),j=h.filter(a=>a.anchorScore===i),k=1===new Set(j.map(a=>a.compareKey)).size?j[0]:void 0;if(k){let a=k.gapLength>b.factGovernance.weakAnchorGapThreshold;f="amendment"===k.contextClass?a?"medium":"high":a?"low":"medium"}c.push({kind:d,scope:`${a}(${"area"===d?"面积":"cost"===d?"金额":"floors"===d?"层数":"parkingSpaces"===d?"车位数":"工期"}口径)`,values:[...new Map(e.map(a=>[`${a.value}${a.unit}|${a.sourceFile||""}`,{value:a.value,unit:a.unit,sourceFile:a.sourceFile,priority:a.priority}])).values()],resolution:k?`${k.value}${k.unit}`:void 0,...f?{confidence:f}:{}})}}return c}function A(a){let b=new Map;for(let c of a){if(!c.resolution||"low"===c.confidence||b.has(c.kind))continue;let a=c.values.find(a=>`${a.value}${a.unit}`===c.resolution),d=a?a.value.replace(/[,,]/gu,""):"",e=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution).map(a=>({value:a.value.replace(/[,,]/gu,""),unit:a.unit}));d&&0!==e.length&&b.set(c.kind,{winnerNum:d,losers:e})}return b}function B(a,b){return b?.length?a.map(a=>{let c=function(a,b){let c=a;for(let{winnerNum:a,losers:d}of A(b).values())for(let b of d)b.unit&&c.includes(`${b.value}${b.unit}`)?c=c.split(`${b.value}${b.unit}`).join(`${a}${b.unit}`):c.includes(b.value)&&(c=c.split(b.value).join(a));return c}(a.content,b);return c===a.content?a:{...a,content:c}}):a}function C(a){let b=[];for(let c of a){if(!c.resolution)continue;let a=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution);if(0===a.length)continue;let d=a.map(a=>`${a.value}${a.unit}`).join("、");"high"===c.confidence?b.push(`${c.scope}必须统一为 ${c.resolution}(补疑/答疑/澄清类修正文件权威最高;${d} 已被修正,正文禁止出现)`):"medium"===c.confidence?b.push(`${c.scope}应统一为 ${c.resolution}(按资料来源优先级裁决;${d} 为败选值,正文避免使用)`):b.push(`${c.scope}参考口径为 ${c.resolution}(锚定较弱,请人工复核;${d} 不参与自动改写)`)}return b}function D(a,b){let c=A(b);if(0===c.size)return a;let d={area:/建设规模|工程规模|建筑面积|用地面积|占地面积|project_scale|scale/u,cost:/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价|project_cost|cost|price|amount/u,duration:/计划工期|合同工期|总工期|施工周期|duration|schedule/u,floors:/总层数|建筑层数|地上层数|地下层数|楼层数|project_floors|floors/u,parkingSpaces:/总车位|停车位|机动车位|车位数|project_parking|parking/u};return a.map(a=>{let b=[...c.keys()].find(b=>d[b].test(a.key)||d[b].test(a.value));if(!b)return a;let{winnerNum:e,losers:f}=c.get(b),g=a.value,h=!1;for(let a of f)a.unit&&g.includes(`${a.value}${a.unit}`)?(g=g.split(`${a.value}${a.unit}`).join(`${e}${a.unit}`),h=!0):g.includes(a.value)&&(g=g.split(a.value).join(e),h=!0);return h?{...a,value:g}:a})}function E(a,b){if(a.length<=1)return a;let c=z(a,(0,i.bC)(b)),d=D(a,c),e=/项目名称|工程名称|招标人|建设单位|建设地点|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期|劳动力高峰|装配率|支护形式|创优奖惩|结构形式|总层数|建筑层数|建筑面积|建设规模|计划工期|合同工期|总工期/u,h=a=>e.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`),j=a=>a.fieldId||a.key||a.fieldName||"",k=new Map;for(let a of d){if(!h(a))continue;let b=j(a),c=k.get(b);if(!c){k.set(b,a);continue}let d=a=>({priority:y(a.sourceFile,a.roleId),normalized:(0,f.de)((0,g.lG)(a.value))}),e=d(c),i=d(a);(i.priority>e.priority||i.priority===e.priority&&i.normalized!==e.normalized&&i.normalized.length<e.normalized.length)&&k.set(b,a)}if(0===k.size)return d;let l=new Set;for(let a of d)h(a)&&k.get(j(a))!==a&&l.add(a);return 0===l.size?d:d.filter(a=>!l.has(a))}function F(a){var b;let c=(0,g.c6)({version:"canonical-facts-v7",rulesHash:(0,i.TG)(a.projectRoot),requirement:a.requirement||"",templateId:a.templateId||"",requiredKeys:a.requiredKeys||[],facts:a.facts.map(a=>({key:a.key,fieldId:a.fieldId,fieldName:a.fieldName,value:a.value,sourceFile:a.sourceFile,roleId:a.roleId,confidence:a.confidence})).sort((a,b)=>`${a.sourceFile}${a.key}${a.value}`.localeCompare(`${b.sourceFile}${b.key}${b.value}`)),graphHash:a.projectGraph?(0,g.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,g.c6)(a.markdown.slice(0,2e4)):""}),k=function(a,b){let c=v(a);if(c)try{let a=JSON.parse(d.readFileSync(e.join(c,`canonical-facts-${b}.json`),"utf8"));return a&&a.byKey&&Array.isArray(a.scopeConflicts)?a:void 0}catch{return}}(a.projectRoot,c);if(k)return k;let l=a.facts||[],n=z(l,(0,i.bC)(a.projectRoot));for(let a of n.map(a=>({caseType:"scope_conflict_arbitration",recordedAt:Date.now(),kind:a.kind,scope:a.scope,values:a.values.map(a=>({value:a.value,unit:a.unit,sourceFile:a.sourceFile,priority:a.priority})),winner:a.resolution,confidence:a.confidence,manualReviewRequired:!a.resolution})))try{d.appendFileSync(e.join(function(){let a=e.join(h.homedir(),".customize-agent","cache","document-workflow","case-log");return d.mkdirSync(a,{recursive:!0}),a}(),"arbitration-cases.jsonl"),`${JSON.stringify(a)}
|
|
141
|
-
`,"utf-8")}catch{}let o=D(l,n),p=t({facts:o,markdown:a.markdown}),q={};for(let[a,b]of p.entries())q[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:(0,f.de)(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:u(b),locked:u(b)>=80,selectedReason:a.selectedReason}}(b);if(q.project_scale){let a=q.project_scale;if(/占地|用地/u.test(a.value)&&/建筑面积/u.test(a.value)){let b=a.value.search(/(?:单体)?总?建筑面积/u);if(b>0){let c=(0,f.wj)(a.value.slice(b)).trim();q.project_scale={...a,value:c,normalizedValue:(0,f.de)(c),selectedReason:`${a.selectedReason};混合口径已净化,scale 只取建筑面积段`}}}}let r=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity",valueType:"text"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity",valueType:"identifier"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity",valueType:"organization"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity",valueType:"location"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope",valueType:"scale"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope",valueType:"text"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule",valueType:"duration"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality",valueType:"standard"}]){let b=function(a,b,c,d,e){let h=j.find(a=>a.key===b);return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,f.iG)((0,g.lG)(a.value)),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/补疑|答疑|澄清|补充|更正|修改/u.test(b)?"addendum":/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:(0,f.de)(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:(()=>{let b=Number(a.confidence)||.5;return Math.round(100*("rule"===a.processingType&&b>1?.5:Math.min(b,.99)))})(),priority:u(e),locked:u(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).filter(a=>{let d=e??h?.valueType;return!d||"text"===d||!m(a.value,{key:b,label:c,aliases:[],valueType:d}).rejected}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(o,a.key,a.label,a.pattern,a.valueType);!q[a.key]&&b.length>0&&(q[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&r.push(c)}let s=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:(0,f.de)([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:u("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:(0,f.de)([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:u("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],w=s.filter(a=>/resource_/u.test(a.key)),x=s.filter(a=>/risk_/u.test(a.key));for(let a of s)q[a.key]||(q[a.key]=a);let y=(a.requiredKeys||[]).filter(a=>!q[a]).map(a=>({key:a,label:j.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),A={projectIdentity:{projectName:q.project_name,projectCode:q.project_code,owner:q.owner,location:q.project_location},projectScope:{scale:q.project_scale,constructionScope:q.construction_scope},schedule:{duration:q.duration||q.schedule_requirement},quality:{target:q.quality_target||q.quality_standard},safety:{risks:x},resources:{resources:w},environment:{},constraints:{},byKey:q,conflicts:r,gaps:y,scopeConflicts:n},B=v(a.projectRoot);return B&&d.writeFileSync(e.join(B,`canonical-facts-${c}.json`),JSON.stringify(A,null,2)),A}},52639:(a,b,c)=>{c.d(b,{Lf:()=>p,SD:()=>u,_C:()=>v,bh:()=>y,iJ:()=>A,kO:()=>w,nD:()=>x,zs:()=>z});var d=c(71001);let e="[☑√✔✓■●◼☒⊠▣]",f="[\\uFE0E\\uFE0F\\s()()【】\\[\\]〔〕]*";function g(a){let b=[...a],c=`${b[0]}\\s*${b[1]}`;return[RegExp(`${e}${f}${c}`,"u"),RegExp(`${c}${f}${e}`,"u")]}let h=g("暗标"),i=g("明标"),j=[/暗标(?:评审项目)?的?编制要求/u,/(?<!不)按暗标/u,/(?<!不)(?:采用|执行|实行)暗标(?:评审|方式|编制|形式)/u,/暗标(?:评审|编制)(?:方式|办法|程序)/u],k=[/明标(?:评审项目)?的?编制要求/u,/(?<!不)按明标/u,/(?<!不)(?:采用|执行|实行)明标(?:评审|方式|编制|形式)/u,/明标(?:评审|编制)(?:方式|办法|程序)/u];function l(a,b){for(let c of b){let b=c.exec(a);if(b)return(b[0]||"").trim()}}let m={初号:42,小初:36,一号:26,小一:24,二号:22,小二:18,三号:16,小三:15,四号:14,小四:12,五号:10.5,小五:9,六号:7.5,小六:6.5};function n(a){let b=String(a||"").replace(/[((][^))]*[))]/gu,"").trim();if(b)return({仿宋_GB2312:'"仿宋_GB2312", "FangSong_GB2312", "仿宋", FangSong, serif',仿宋:'"仿宋", FangSong, serif',楷体_GB2312:'"楷体_GB2312", "KaiTi_GB2312", "楷体", KaiTi, serif',楷体:'"楷体", KaiTi, serif',宋体:'"宋体", SimSun, serif',黑体:'"黑体", SimHei, sans-serif'})[b]||`"${b}", serif`}function o(a){let b=String(a||"").replace(/\s+/gu,"");if(!b)return;let c=m[b];if(void 0!==c)return`${c}pt`;let d=/([\d.]+)\s*(?:pt|磅)?/iu.exec(b);return d&&Number.isFinite(Number(d[1]))?`${Number(d[1])}pt`:void 0}function p(a,b){if(!b)return{settings:a,applied:[]};let c=[],d={...a||{}},e={...d.page||{}},f={...d.typography||{}},g={...d.targetPages||{}},h=n(b.bodyFont);h&&(f.bodyFont=h,c.push(`正文字体=${h}`));let i=n(b.headingFont);i&&(f.headingFont=i,c.push(`标题字体=${i}`));let j=o(b.bodySize);j&&(f.bodySize=j,c.push(`正文字号=${j}`));let k=o(b.headingSize);k&&(f.titleSize=k,c.push(`标题字号=${k}`));let l=function(a){let b=/([\d.]+)/u.exec(String(a||""));return b&&Number.isFinite(Number(b[1]))?`${Number(b[1])}pt`:void 0}(b.lineHeight);return l&&(f.lineHeight=l,c.push(`行距=${l}`)),b.gutter&&(e.gutter=b.gutter,c.push(`装订线=${b.gutter}`)),"number"==typeof b.pageLimit&&b.pageLimit>0&&(g.max=b.pageLimit,c.push(`页数上限=${b.pageLimit}`)),d.page=e,d.typography=f,Object.keys(g).length>0&&(d.targetPages=g),{settings:d,applied:c}}function q(a,b){let c=b.exec(a);return c?(c[0]||"").trim():void 0}let r=[/正文(?:部分)?[\s\S]{0,16}?(?:不得|不允许|禁止|严禁)[\s\S]{0,16}?(?:使用|出现|插入|包含|采用|列入|设置|添加|附带|有|存在)[\s\S]{0,8}?(?:任何|所有|全部|其它|其他)?(?:表格|图表|框图)/u,/(?:不得|不允许|禁止|严禁)[\s\S]{0,10}?(?:在)?正文(?:部分|中|内|里)?[\s\S]{0,10}?(?:使用|出现|插入|包含|采用|列入|设置|添加|附带|有|存在)[\s\S]{0,8}?(?:任何|所有|全部|其它|其他)?(?:表格|图表|框图)/u,/(?:任何|所有|全部|其它|其他)?(?:表格|图表|框图)[\s\S]{0,16}?(?:一律|均|全部|都)?(?:不得|不允许|禁止|严禁)[\s\S]{0,12}?(?:出现|写入|进入|列入|使用|用于|插入)[\s\S]{0,12}?正文/u,/正文(?:部分)?[\s\S]{0,12}?(?:一律|均|只能|仅)[\s\S]{0,8}?(?:纯文字|文字表述|文字叙述|文字描述)(?![\s\S]{0,2}?(?:结合|及|与|和))/u],s=/颜色|彩色|单色|黑白|无关|不相干|非文字需要/u,t=[/文字(?:表述|叙述|说明|描述)?[\s\S]{0,4}?(?:结合|相结合)[\s\S]{0,4}?(?:图表|表格|框图)/u,/除(?:采用)?文字(?:表述|叙述)?外[\s\S]{0,4}?(?:可|可以)?附[\s\S]{0,4}?(?:下列|如下|相关|相应)?(?:图表|表格|框图)/u,/(?:横道图|网络图|进度(?:表|图)|平面布置图|框图|表格|图表)[\s\S]{0,26}?(?:自行确定|由投标人自定|不作规定|不作限制|不做要求)/u,/(?:表格|图表|框图)[\s\S]{0,16}?(?:可采用|可用|可以使用|应采用)[\s\S]{0,6}?A3/u,/(?:施工进度(?:表|图)?|总进度(?:表|图|计划)?|进度计划)[\s\S]{0,8}?(?:可|应)?采用[\s\S]{0,6}?(?:网络图|横道图)/u,/(?:图表|框图|表格)[\s\S]{0,10}?(?:一律|均|全部)[\s\S]{0,6}?单(?:黑色|色)/u,/图表及格式要求附后/u];function u(a){let b=[...a.tenderTexts,a.requirement||""].filter(Boolean).join("\n").replace(/\\n/gu,"\n").replace(/\r/gu,""),c=[],e=function(a){let b=[];for(let c of a.matchAll(/施工组织设计\s*采用\s*[::]?/gu)){let d=c.index||0;b.push(a.slice(d,d+320))}return b}(b),f=e.length>0?e.join("\n"):b,g=l(f,h),m=l(f,i),n=l(b,j),o=l(b,k),p="unknown";g?(p="blind",c.push(`标书类型勾选证据:${g}`)):m?(p="open",c.push(`标书类型勾选证据:${m}`)):n?(p="blind",c.push(`结构证据:识别到「${n}」条款(语义判定通道——勾选标记不可见或未被提取时的兜底,招标文件为该标段设定暗标编制条款)`)):o&&(p="open",c.push(`结构证据:识别到「${o}」条款(语义判定通道——按明标口径编制)`));let u=q(b,/正文内不允许[\s\S]{0,24}?出现非文字需要的其他任何符号和标志/u),v=q(b,/不得有图片和扉页|不得有图片/u),w=l(b,r),x=l(b,t),y=w&&!s.test(w)?w:void 0,z=y?"forbidden":"allowed";y?c.push(`正文禁表证据:${y}`):(x&&c.push(`正文表格允许证据:${x}`),u&&c.push(`排版格式证据:${u}(禁与投标内容无关符号标记的排版条款,不构成正文禁表)`));let A="blind"===p||v?"forbidden":"allowed";v&&c.push(`图片口径证据:${v}`);let B=(0,d.eB)(b).titles.map(a=>{let b=a.replace(/^附表\s*/u,"").split(/\s+/u)[0]||"",c=a.replace(/^附表\s*[一二三四五六七八九十\d]{1,3}\s*/u,"").trim();return{no:b,title:a,.../施工设备表|机械设备表|施工机械.*设备/u.test(c)?{kind:"table",dataSource:"blueprint.equipment"}:/试验.*仪器|检测仪器|试验仪器|仪器设备表/u.test(c)?{kind:"table",dataSource:"blueprint.testInstruments"}:/劳动力/u.test(c)?{kind:"table",dataSource:"blueprint.labor"}:/临时用地/u.test(c)?{kind:"table",dataSource:"blueprint.tempLand"}:/网络图|进度图|横道图|开.*竣工/u.test(c)?{kind:"figure",dataSource:"blueprint.schedule"}:/总平面/u.test(c)?{kind:"figure",dataSource:"blueprint.tempLand"}:{kind:"table",dataSource:"manual"}}});B.length>0&&c.push(`文末附表清单 ${B.length} 项:${B.map(a=>a.title).join("、")}`);let C=/正文(?:部分)?(?:一律|均)?采用\s*(小?[一二三四五六七八九十]号)?\s*([\u4e00-\u9fffA-Za-z_]{2,10})/u.exec(b),D=/大标题用\s*([小]?[一二三四五六七八九十]号)\s*([\u4e00-\u9fffA-Za-z_]{2,10})/u.exec(b),E=/装订线\s*([\d.]+\s*[-~-—]\s*[\d.]+\s*cm|[\d.]+\s*cm)/u.exec(b),F=/行间距为固定值\s*(\d+)\s*磅/u.exec(b),G=/(?:总页数上限|页数上限)\s*[::]?\s*(\d+)|不得超过\s*(\d+)\s*页/u.exec(b),H={monoColor:!!/一律单黑色|全部单黑色|均单黑色/u.test(b)||void 0,cover:/不设内封(?:面)?/u.test(b)?"forbidden":void 0,headersFooters:/不需编制页眉、页脚|不编制页眉|不需要页眉|不需编制页眉/u.test(b)?"forbidden":void 0,bodyFont:C?.[2]?`${C[2]}${/GB2312/iu.test(b)?"(GB2312)":""}`:void 0,bodySize:C?.[1]||void 0,headingSize:D?.[1]||void 0,headingFont:D?.[2]||void 0,gutter:E?.[1]?.replace(/\s+/gu,"")||void 0,lineHeight:F?.[1]?`固定值${F[1]}磅`:void 0,pageLimit:G&&Number(G[1]||G[2])||void 0},I=/明示或暗示具体投标人|以往的施工业绩/u.test(b);I&&c.push("投标人身份禁语证据:任何部位、任何条文出现明示或暗示具体投标人的说明及标记(包括以往的施工业绩等)");let J=[];if("forbidden"===z&&(a.requiredTables||[]).length>0)for(let b of a.requiredTables||[]){let a=b.trim();if(!a)continue;let c=B.find(b=>(function(a,b){let c=a.replace(/^附表\s*[一二三四五六七八九十\d]{1,3}\s*/u,"").replace(/\s+/gu,"").replace(/表$/u,""),d=b.replace(/\s+/gu,"").replace(/表$/u,"");return!!c&&!!d&&(c.includes(d)||d.includes(c))})(b.title,a));J.push({rule:`提示词必需表格《${a}》`,source:"用户提示词",resolution:c?`招标正文禁表(显式禁表句):该表已收敛入文末《${c.title}》,正文不再输出表格`:"招标正文禁表(显式禁表句):该表取消表格形式,数据以对应章节文字表述呈现"})}return{bidType:p,bodyTablePolicy:z,bodyFigurePolicy:A,appendixPlan:B,formatRules:H,identityMarksForbidden:I,conflicts:J,evidence:c}}function v(a){return a?.bodyTablePolicy==="forbidden"}function w(a){return a?.bodyFigurePolicy==="forbidden"}function x(a){if(!a)return"";let b="forbidden"===a.bodyTablePolicy,c="forbidden"===a.bodyFigurePolicy;if(!b&&!c&&!a.formatRules.monoColor&&!a.identityMarksForbidden)return"";let d=["【正文编制口径(招标文件要求,硬性验收项)】"];return b?(d.push("1. 正文一律纯文字表述:不得输出任何 Markdown 表格或管道符表格结构;数据性内容以段落文字表述(人数、台数、工艺参数、计划节点等数值一律原样引用蓝图权威锚点,不得编造或自设)。"),d.push("2. 结构化数据表由系统在文末附表区按招标附表清单统一生成,正文不重复列出表格。")):(d.push("1. 正文表格按系统表格计划输出:只输出任务中明确列出的表格(表格计划),不得自行新增、改名或改变列结构;数据一律原样引用蓝图权威锚点,不得编造或自设。"),d.push("2. 图类数据(进度/网络/横道/平面布置等)以表格化数据表达,不绘制图片;表格与图类数据位置服从任务中给定的表格计划。")),c&&d.push(`${d.length}. 不得插入图片、Markdown 图片语法或图件占位;图类内容由系统统一数据化处理。`),a.formatRules.monoColor&&d.push(`${d.length}. 表格与文字一律单黑色(黑白)表述,不得出现彩色标注、高亮或颜色说明。`),a.identityMarksForbidden&&d.push(`${d.length}. 不得出现任何明示或暗示具体投标人的说明及标记(投标人名称、以往施工业绩、获奖情况等一律不得写入正文)。`),d.join("\n")}function y(a){return`招标正文禁表(显式禁表句,违反即施工组织设计部分不得分):本章正文出现 ${a} 处 Markdown 表格结构。请把每处表格的承载数据改写为段落式连贯叙述(数值、口径保持不变,数据原样保留),删除表格表头与分隔线结构;不得新增或删除其它正文内容。`}function z(a){return`本章正文出现 ${a} 处 Markdown 表格结构,但本章未列入系统表格计划(正文表格须由招标附表清单与评分要求统一规划,不得自设)。请将表格承载数据改写为段落式连贯叙述(数值、口径保持不变),删除表格表头与分隔线结构;确属必要的表格由系统在表格计划中补齐,不得新增其它正文内容。`}function A(a){let b="blind"===a.bidType?"暗标":"open"===a.bidType?"明标":"未识别(按常规口径)",c=[`标书类型:${b}`,`正文表格:${"forbidden"===a.bodyTablePolicy?"禁表格(招标显式禁表句)":"允许(表格按系统表格计划输出)"}`,`正文图片:${"forbidden"===a.bodyFigurePolicy?"禁图片(图类数据化输出)":"允许"}`,a.appendixPlan.length>0?`文末附表 ${a.appendixPlan.length} 项(表类 ${a.appendixPlan.filter(a=>"table"===a.kind).length} / 图类 ${a.appendixPlan.filter(a=>"figure"===a.kind).length})`:"未识别文末附表清单",a.formatRules.pageLimit?`总页数上限 ${a.formatRules.pageLimit} 页`:""].filter(Boolean),d=[...a.evidence.map(a=>`证据:${a}`),..."unknown"===a.bidType?["核查指引:检索招标文件「施工组织设计采用」勾选项(标记字符变体 ☑/√/■/▣ 与「按暗标/采用暗标评审」语义条款均已覆盖)或「暗标编制要求」条款,确认标书类型后重跑以切换编制口径"]:[],...a.appendixPlan.map(a=>`附表${a.no}:${a.title}(${"figure"===a.kind?"图类\xb7编制人补图":`数据源 ${a.dataSource}`})`),a.formatRules.gutter?`格式:装订线 ${a.formatRules.gutter}${a.formatRules.lineHeight?`、行距${a.formatRules.lineHeight}`:""}`:"",a.formatRules.bodyFont?`格式:正文 ${[a.formatRules.bodySize,a.formatRules.bodyFont].filter(Boolean).join(" ")}${a.formatRules.headingSize?`、大标题 ${a.formatRules.headingSize}`:""}`:"","forbidden"===a.formatRules.cover?"格式:不设内封面(终稿移除封面块)":"",a.formatRules.monoColor?"格式:图表一律单黑色":"",a.identityMarksForbidden?"身份禁语:正文不得出现投标人名称/以往业绩等标记":"",...a.conflicts.map(a=>`冲突裁决:${a.rule}——${a.resolution}`)].filter(Boolean);return{status:"unknown"===a.bidType?"skipped":"success",message:"unknown"===a.bidType?"⚠ 标书类型未判定(告警):未识别到「本项目施工组织设计采用:□明标/☑暗标」勾选标记与暗标编制要求语义证据,本次按常规口径生成(正文表格策略按招标证据判定、正文图片允许)——若本项目实为暗标,正文图片与投标人标记可能未被禁止(暗标通常不得出现),请核对招标文件后重跑":`标书编制规格:${c.join(";")}`,details:d}}},52922:(a,b,c)=>{c.d(b,{Bt:()=>x,G5:()=>E,JD:()=>O,Pm:()=>A,T4:()=>K,W0:()=>s,X9:()=>p,Ye:()=>l,_Q:()=>w,bH:()=>R,cs:()=>q,e1:()=>v,gE:()=>F,ge:()=>D,nY:()=>T,w7:()=>r});var d=c(37047),e=c(7148),f=c(41991);let g=["基本满足","大致符合","力争","原则上","大概","左右","尽可能","尽量满足"],h=/基本|大致|力争|原则上|大概|左右|尽可能|尽量/u,i=["基本满足招标文件要求","大致符合相关规范标准","力争达到优良质量标准","原则上按照规范执行","尽可能保证工程质量","尽量满足工期要求"],j=["结构构件左右对称布置","平面布置左右对称合理","力争上游的企业精神"];async function k(a){return(0,f.A)({prototypes:[...i],negativePrototypes:[...j],lexicalHints:h,embedDocuments:a})}function l(a){return g.filter(b=>a.includes(b)).map(b=>({phrase:b,count:a.split(b).length-1}))}let m=["精心组织","科学统筹","科学管理","精益求精","全力保障","高效推进","力争优质","力争一流","一流水平","完善体系","最大限度","显著提升","大力落实","严格把控","充分确保","竭力打造","现代化管理","加强管理","提高意识","强化监督","持续完善","及时处理","全方位","常态化","提质增效","高标准","统筹推进"];[...m];let n=["精心组织、科学管理,确保工程质量","严格执行相关规范和设计要求","根据实际情况适当调整施工安排","建立健全管理体系,加强过程管理","全力保障项目顺利推进","加强管理、严格控制,确保工程质量达到优良标准","精心策划、周密部署,全力以赴完成任务目标","高度重视、狠抓落实,层层压实责任","统筹兼顾、合理安排,确保各项工作有序推进","严格管理、严格要求,确保一次成优","认真贯彻落实各项管理制度,不断提升管理水平","加强安全管理,杜绝各类安全事故发生","合理安排施工工序,确保工程按期完工","坚持质量第一、安全至上,认真做好各项工作"],o=/^\s*(?:第[一二三四五六七八九十百\d]+[章节篇]|\d+(?:\.\d+){0,3})\s+[^。;;,,]*$/u;function p(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!!(!b||/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(b))||o.test(b)}function q(a){return a.split("\n").filter(a=>!p(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12)}async function r(a,b){if(0===a.length)return[];let c=await (0,d.Mv)(a,[...n],b),e=await k(b),f=await e(a);return a.map((a,b)=>{let d=Math.max(...n.map(b=>c(a,b))),e=d>=.8,g=f[b];return{sentence:a,semantic:e,vague:g,filler:e||g,similarity:d}})}function s(a){let b=a.replace(/\s+/gu,"");return!(0===b.length||b.length>60||/[0-90-9]/u.test(b)||/项目经理|技术负责人|施工员|质检员|专职安全员|安全员|材料员|资料员|监理|班组|责任人|岗位/u.test(b)||/每日|每周|每月|每季|每年|每\d+|定期|不定期|不少于|不低于|至少/u.test(b)||/合同|约定|承诺|保证金|履约|招标|投标|中标|资质|奖项|证书|备案|报审|报验|审批|签证|变更/u.test(b))}let t=/^(?:#{1,6}\s*)?(?:(?:\d+(?:\.\d+)*)(?:[.、))]|\s)+|(\d+)|[((][一二三四五六七八九十]+[))]|[-*•]\s+)?\s*/u,u=/^(?:(?:本节|本章|本小节|本部分|本(?:文|篇章))(?:将|拟|主要|重点|首先|从|围绕|按|结合|针对|以|通过|对|就|分|共|内容|的|内)|(?:以下|下述|下面)(?:从|将|为|是|内容|主要|就|围绕|介绍|说明)|综上所述|通过以上|由此可见|总的来说|总体而言)/u;function v(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!!b&&u.test(b.replace(t,""))}function w(a){return a.split("\n").map(a=>a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim()).filter(a=>a&&!p(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12&&v(a))}async function x(a,b){let c=q(a),d=await r(c,b),e=c.filter(a=>h.test(a)).length,f=d.filter(a=>a.vague).length,g=d.map(a=>a.filler),i=g.filter(Boolean).length,j=[...new Set(c.filter((a,b)=>g[b]))].slice(0,40),k=new Set;c.forEach((a,b)=>{if(g[b])for(let b of m)a.includes(b)&&k.add(b)});let l=k.size,n=c.length?i/c.length:0;return{totalSentences:c.length,fillerSentences:i,ratio:n,level:n>=.4?"heavy":n>=.2?"medium":"light",vagueCandidateSentences:e,vagueSemanticSentences:f,forbiddenEmptyPhraseHits:l,fillerSentenceDetails:j}}let y={plan:"制定专项施工方案与管理制度,明确技术措施",process:"施工工序流程与工艺步骤顺序",role:"由项目经理、技术负责人等岗位人员分工负责",frequency:"每日、每周等检查频次与时间节点安排",acceptance:"经检查验收合格后整改销项闭环"},z={plan:/专项施工方案|专项方案|施工方案|施工组织设计|技术措施|管理制度|技术交底|作业指导书|操作规程/u,process:/施工工序|工艺流程|施工流程|作业流程|施工顺序|施工步骤|工艺步骤|流水段|流水作业|依次施工|工序/u,role:/项目经理|技术负责人|施工员|质检员|安全员|材料员|资料员|测量员|劳资员|班组长|监理工程师|试验员/u,frequency:/每日|每天|每周|每月|每季度|每批|不少于\s*\d+\s*次|至少\s*\d+\s*次|每周\s*\d+\s*次|每日\s*\d+\s*次|每\s*\d+\s*日/u,acceptance:/整改|复查|销项|复验|闭环|返工/u};async function A(a,b){let c=a.split(/\n{2,}/u).filter(a=>a.trim().length>=30),e=Object.values(y),f=await (0,d.Mv)(c,e,b),g=z.role,h=z.frequency,i=z.acceptance,j=z.plan,k=z.process,l=(a,b)=>{let c=(b!==y.plan||!!j.test(a))&&(!!(b===y.plan&&j.test(a))||(b!==y.process||!!k.test(a))&&(!!(b===y.process&&k.test(a))||(b!==y.role||!!g.test(a))&&(!!(b===y.role&&g.test(a))||(b!==y.frequency||!!h.test(a))&&(!!(b===y.frequency&&h.test(a))||(b!==y.acceptance||!!i.test(a))&&(!!(b===y.acceptance&&i.test(a))||void 0)))));return void 0!==c?c:f(a,b)>=d.Eh},m=0,n=0,o=0;for(let a of c)e.filter(b=>l(a,b)).length>=4?m+=1:l(a,y.role)&&l(a,y.frequency)||(n+=1),l(a,y.role)&&l(a,y.frequency)&&l(a,y.acceptance)&&(o+=1);return{blocks:c.length,completeBlocks:m,incompleteBlocks:n,closedLoopBlocks:o}}let B="分析该工程难点的成因与风险来源",C=/\d+(?:\.\d+)?\s*(?:mm|cm|m|米|℃|%|kN|MPa|次|天|日历天|小时|h|Hz|m³|㎡|m²|t|吨|座|套|个)/u;function D(a){return a.trim().startsWith("|")?a.split(/\n/u).filter(a=>{let b=a.trim();return b.startsWith("|")&&!/^\|\s*-+\s*\|/u.test(b)&&!/重难点/u.test(b.split("|")[1]||"")}).filter(a=>a.trim().length>=20):a.split(/\n{2,}/u).filter(a=>a.trim().length>=20)}async function E(a,b,c={}){let e,f=async c=>k>=0?l(c,k).length>=4:(e??=await (0,d.Mv)(a,[B],b))(c,B)>=d.Eh,g=0,h=0,i=0,j=[],k=c.attributionColumnIndex??-1,l=(a,b)=>(a.split("|").slice(1,-1)[b]??"").trim();for(let b of a){let a=await f(b),c=C.test(b);a&&(g+=1),c&&(h+=1),a&&c&&(i+=1),j.push({text:b,attributed:a,quantified:c})}return{entries:a,attributed:g,quantified:h,bothCount:i,ratio:a.length?i/a.length:0,details:j}}async function F(a,b){let c=D(function(a){let b=a.match(/^#{2,4}\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\n/mu);if(b&&void 0!==b.index){let c=b.index+b[0].length,d=a.slice(c),e=b[0].match(/^#+/u)?.[0].length??3,f=RegExp(`^#{2,${Math.max(2,e)}}\\s+`,"mu"),g=d.search(f);return g>=0?d.slice(0,g):d}let c=a.match(/^\|?\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\|\s*$/mu);if(!c||void 0===c.index)return"";let d=a.slice(c.index).split(/\n/u),e=[];for(let a of d){let b=a.trim();if(!b||!b.startsWith("|")){if(e.length>0)break;continue}e.push(a)}return e.join("\n")}(a)),d=(()=>{let a=c.find(a=>a.trim().startsWith("|"));return a?a.split("|").slice(1,-1).map(a=>a.trim()).findIndex(a=>/成因|风险|致险|难点分析/u.test(a)):-1})(),e=await E(c,b,{attributionColumnIndex:d});return{countermeasures:c.length,attributed:e.attributed,quantified:e.quantified,bothCount:e.bothCount,ratio:e.ratio,heavyTemplated:c.length>0&&e.quantified/c.length<.5,entries:e.details.slice(0,24)}}let G=/建筑业10项新技术|10项新技术|新技术推广目录|建设领域推广/u,H=/替代|取代|淘汰.{0,10}(?:工艺|技术|做法)|(?:较|比).{0,10}(?:传统|常规|普通)/u,I=/(?:提升|提高|节省|节约|降低|缩短|减少).{0,10}(?:效率|工期|成本|损耗|能耗|人工|周期)|升级价值|效益显著/u,J=["BIM","铝模","附着式升降脚手架","跳仓法","直螺纹","装配式","灌浆套筒","自动化监测","智慧工地","再生利用","非开挖","CCTV","碳纤维","薄贴法","干法施工","液压提升","预制","光伏一体化","BIPV","模块化"];function K(a){let b=J.filter(b=>a.includes(b)),c=G.test(a),d=H.test(a),e=I.test(a),f=[c,d,e].filter(Boolean).length;return{found:[...b],catalogCited:c,replaceClaimed:d,upgradeClaimed:e,effective:b.length>0&&f>=2}}let L=[/基坑|沟槽/u,/模板支撑|高支模/u,/脚手架|悬挑|附着式/u,/起重吊装|吊装/u,/幕墙/u,/人工挖孔桩/u,/装配式|钢结构安装/u,/拆除工程/u,/顶管|盾构|暗挖/u,/有限空间|水下作业/u,/吊篮/u,/塔吊|施工电梯|升降机/u,/沉井/u],M=/超危大|超规模|专家论证|一般危大/u,N=/(?:深度|高度|跨度|开挖).{0,8}\d+(?:\.\d+)?\s*(?:m|米)|(?:重量|吊装).{0,8}\d+(?:\.\d+)?\s*(?:kN|千牛)/u;function O(a){let b=L.filter(b=>b.test(a)).map(a=>a.source.replace(/\\u\w*|\\|\(|\||\)/gu,"")),c=M.test(a),d=N.test(a);return{categories:b,graded:c,paramMatched:d,twoStepComplete:b.length>0&&c&&d}}let P=[{name:"总则",pattern:/总则/u},{name:"组织机构及职责",pattern:/应急(?:组织|领导)|组织机构|应急指挥部|应急小组/u},{name:"风险分析与危险源辨识",pattern:/风险分析|危险源辨识|风险辨识/u},{name:"应急物资设备通讯保障",pattern:/应急物资|物资.{0,8}(?:保障|储备)|通讯保障|通信保障/u},{name:"专项应急预案",pattern:/专项应急预案|专项预案/u},{name:"应急响应流程",pattern:/应急响应|响应流程|响应程序/u},{name:"后期处置",pattern:/后期处置|善后|事故调查/u},{name:"培训演练",pattern:/(?:应急)?演练|培训.{0,6}演练/u}],Q=["高处坠落","物体打击","坍塌","触电","火灾","起重","防汛","防台风","中暑","中毒窒息","管线破坏"];function R(a){let b=P.filter(b=>b.pattern.test(a)).map(a=>a.name),c=P.filter(b=>!b.pattern.test(a)).map(a=>a.name),d=Q.filter(b=>a.includes(b));return{coveredParts:[...b],missingParts:[...c],coverage:b.length/P.length,planHits:[...d]}}let S=[/其他项目/u,/其他标段/u,/其他城市/u,/本公司(?:其他|承建)/u,/某(?:市|县|区|项目)(?:的)?/u,/他项目/u,/兄弟项目/u];function T(a){let b=a.replace(/及其他项目/gu,"及〔清单列举项〕");return S.filter(a=>a.test(b)).map(a=>a.source.replace(/\\u/gu,""))}let U=`${e.wA}|mm|cm|kW|kV|MPa|kN|kPa|℃|\xb0|%|min|分钟|小时|天|日历天|次|遍|处|户|层|栋|区|名|位|人|项|份|道`;RegExp(`[0-90-9](?:\\.[0-9]+)?\\s*(?:万|亿)?(?:${U})`,"iu"),RegExp(`[一二三四五六七八九十百千两](?:${U})`)},55807:(a,b,c)=>{c.d(b,{C_:()=>g.C_,DR:()=>h.DR,EG:()=>h.EG,EK:()=>h.EK,Fc:()=>g.Fc,G2:()=>h.G2,Ht:()=>g.Ht,Il:()=>h.Il,Iu:()=>d.Iu,M6:()=>h.M6,Mz:()=>d.Mz,NJ:()=>h.NJ,QP:()=>d.xs,R_:()=>h.R_,UG:()=>d.UG,Xr:()=>f.Xr,_8:()=>h._8,_k:()=>g._k,br:()=>e.br,bz:()=>h.bz,gq:()=>h.gq,h:()=>f.h,hS:()=>e.hS,hW:()=>d.hW,jO:()=>f.jO,jX:()=>d.jX,md:()=>h.md,t7:()=>d.t7,w_:()=>g.w_,xs:()=>f.xs});var d=c(64753),e=c(18292),f=c(87635),g=c(13145),h=c(39372)},55965:(a,b,c)=>{c.d(b,{hy:()=>m,kE:()=>j});var d=c(22157),e=c(95734);let f=new Map,g={"labor-peak":"项目劳动力峰值(人)","total-days":"项目总工期(日历天)","village-count":"项目自然村数量(个)",quantity:"工程量清单条目汇总工程量"},h=`你是施工组织设计文档的数值引用裁决器。任务:判断正文句中的数值是否「以该项目级数据的口径」陈述(项目级 = 全项目汇总/锁定口径)。
|
|
142
|
+
`,"utf-8")}catch{}let o=D(l,n),p=t({facts:o,markdown:a.markdown}),q={};for(let[a,b]of p.entries())q[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:(0,f.de)(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:u(b),locked:u(b)>=80,selectedReason:a.selectedReason}}(b);if(q.project_scale){let a=q.project_scale;if(/占地|用地/u.test(a.value)&&/建筑面积/u.test(a.value)){let b=a.value.search(/(?:单体)?总?建筑面积/u);if(b>0){let c=(0,f.wj)(a.value.slice(b)).trim();q.project_scale={...a,value:c,normalizedValue:(0,f.de)(c),selectedReason:`${a.selectedReason};混合口径已净化,scale 只取建筑面积段`}}}}let r=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity",valueType:"text"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity",valueType:"identifier"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity",valueType:"organization"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity",valueType:"location"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope",valueType:"scale"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope",valueType:"text"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule",valueType:"duration"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality",valueType:"standard"}]){let b=function(a,b,c,d,e){let h=j.find(a=>a.key===b);return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,f.iG)((0,g.lG)(a.value)),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/补疑|答疑|澄清|补充|更正|修改/u.test(b)?"addendum":/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:(0,f.de)(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:(()=>{let b=Number(a.confidence)||.5;return Math.round(100*("rule"===a.processingType&&b>1?.5:Math.min(b,.99)))})(),priority:u(e),locked:u(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).filter(a=>{let d=e??h?.valueType;return!d||"text"===d||!m(a.value,{key:b,label:c,aliases:[],valueType:d}).rejected}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(o,a.key,a.label,a.pattern,a.valueType);!q[a.key]&&b.length>0&&(q[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&r.push(c)}let s=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:(0,f.de)([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:u("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:(0,f.de)([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:u("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],w=s.filter(a=>/resource_/u.test(a.key)),x=s.filter(a=>/risk_/u.test(a.key));for(let a of s)q[a.key]||(q[a.key]=a);let y=(a.requiredKeys||[]).filter(a=>!q[a]).map(a=>({key:a,label:j.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),A={projectIdentity:{projectName:q.project_name,projectCode:q.project_code,owner:q.owner,location:q.project_location},projectScope:{scale:q.project_scale,constructionScope:q.construction_scope},schedule:{duration:q.duration||q.schedule_requirement},quality:{target:q.quality_target||q.quality_standard},safety:{risks:x},resources:{resources:w},environment:{},constraints:{},byKey:q,conflicts:r,gaps:y,scopeConflicts:n},B=v(a.projectRoot);return B&&d.writeFileSync(e.join(B,`canonical-facts-${c}.json`),JSON.stringify(A,null,2)),A}},52639:(a,b,c)=>{c.d(b,{Lf:()=>p,SD:()=>u,_C:()=>v,bh:()=>y,iJ:()=>A,kO:()=>w,nD:()=>x,zs:()=>z});var d=c(71001);let e="[☑√✔✓■●◼☒⊠▣]",f="[\\uFE0E\\uFE0F\\s()()【】\\[\\]〔〕]*";function g(a){let b=[...a],c=`${b[0]}\\s*${b[1]}`;return[RegExp(`${e}${f}${c}`,"u"),RegExp(`${c}${f}${e}`,"u")]}let h=g("暗标"),i=g("明标"),j=[/暗标(?:评审项目)?的?编制要求/u,/(?<!不)按暗标/u,/(?<!不)(?:采用|执行|实行)暗标(?:评审|方式|编制|形式)/u,/暗标(?:评审|编制)(?:方式|办法|程序)/u],k=[/明标(?:评审项目)?的?编制要求/u,/(?<!不)按明标/u,/(?<!不)(?:采用|执行|实行)明标(?:评审|方式|编制|形式)/u,/明标(?:评审|编制)(?:方式|办法|程序)/u];function l(a,b){for(let c of b){let b=c.exec(a);if(b)return(b[0]||"").trim()}}let m={初号:42,小初:36,一号:26,小一:24,二号:22,小二:18,三号:16,小三:15,四号:14,小四:12,五号:10.5,小五:9,六号:7.5,小六:6.5};function n(a){let b=String(a||"").replace(/[((][^))]*[))]/gu,"").trim();if(b)return({仿宋_GB2312:'"仿宋_GB2312", "FangSong_GB2312", "仿宋", FangSong, serif',仿宋:'"仿宋", FangSong, serif',楷体_GB2312:'"楷体_GB2312", "KaiTi_GB2312", "楷体", KaiTi, serif',楷体:'"楷体", KaiTi, serif',宋体:'"宋体", SimSun, serif',黑体:'"黑体", SimHei, sans-serif'})[b]||`"${b}", serif`}function o(a){let b=String(a||"").replace(/\s+/gu,"");if(!b)return;let c=m[b];if(void 0!==c)return`${c}pt`;let d=/([\d.]+)\s*(?:pt|磅)?/iu.exec(b);return d&&Number.isFinite(Number(d[1]))?`${Number(d[1])}pt`:void 0}function p(a,b){if(!b)return{settings:a,applied:[]};let c=[],d={...a||{}},e={...d.page||{}},f={...d.typography||{}},g={...d.targetPages||{}},h=n(b.bodyFont);h&&(f.bodyFont=h,c.push(`正文字体=${h}`));let i=n(b.headingFont);i&&(f.headingFont=i,c.push(`标题字体=${i}`));let j=o(b.bodySize);j&&(f.bodySize=j,c.push(`正文字号=${j}`));let k=o(b.headingSize);k&&(f.titleSize=k,c.push(`标题字号=${k}`));let l=function(a){let b=/([\d.]+)/u.exec(String(a||""));return b&&Number.isFinite(Number(b[1]))?`${Number(b[1])}pt`:void 0}(b.lineHeight);return l&&(f.lineHeight=l,c.push(`行距=${l}`)),b.gutter&&(e.gutter=b.gutter,c.push(`装订线=${b.gutter}`)),"number"==typeof b.pageLimit&&b.pageLimit>0&&(g.max=b.pageLimit,c.push(`页数上限=${b.pageLimit}`)),d.page=e,d.typography=f,Object.keys(g).length>0&&(d.targetPages=g),{settings:d,applied:c}}function q(a,b){let c=b.exec(a);return c?(c[0]||"").trim():void 0}let r=[/正文(?:部分)?[\s\S]{0,16}?(?:不得|不允许|禁止|严禁)[\s\S]{0,16}?(?:使用|出现|插入|包含|采用|列入|设置|添加|附带|有|存在)[\s\S]{0,8}?(?:任何|所有|全部|其它|其他)?(?:表格|图表|框图)/u,/(?:不得|不允许|禁止|严禁)[\s\S]{0,10}?(?:在)?正文(?:部分|中|内|里)?[\s\S]{0,10}?(?:使用|出现|插入|包含|采用|列入|设置|添加|附带|有|存在)[\s\S]{0,8}?(?:任何|所有|全部|其它|其他)?(?:表格|图表|框图)/u,/(?:任何|所有|全部|其它|其他)?(?:表格|图表|框图)[\s\S]{0,16}?(?:一律|均|全部|都)?(?:不得|不允许|禁止|严禁)[\s\S]{0,12}?(?:出现|写入|进入|列入|使用|用于|插入)[\s\S]{0,12}?正文/u,/正文(?:部分)?[\s\S]{0,12}?(?:一律|均|只能|仅)[\s\S]{0,8}?(?:纯文字|文字表述|文字叙述|文字描述)(?![\s\S]{0,2}?(?:结合|及|与|和))/u],s=/颜色|彩色|单色|黑白|无关|不相干|非文字需要/u,t=[/文字(?:表述|叙述|说明|描述)?[\s\S]{0,4}?(?:结合|相结合)[\s\S]{0,4}?(?:图表|表格|框图)/u,/除(?:采用)?文字(?:表述|叙述)?外[\s\S]{0,4}?(?:可|可以)?附[\s\S]{0,4}?(?:下列|如下|相关|相应)?(?:图表|表格|框图)/u,/(?:横道图|网络图|进度(?:表|图)|平面布置图|框图|表格|图表)[\s\S]{0,26}?(?:自行确定|由投标人自定|不作规定|不作限制|不做要求)/u,/(?:表格|图表|框图)[\s\S]{0,16}?(?:可采用|可用|可以使用|应采用)[\s\S]{0,6}?A3/u,/(?:施工进度(?:表|图)?|总进度(?:表|图|计划)?|进度计划)[\s\S]{0,8}?(?:可|应)?采用[\s\S]{0,6}?(?:网络图|横道图)/u,/(?:图表|框图|表格)[\s\S]{0,10}?(?:一律|均|全部)[\s\S]{0,6}?单(?:黑色|色)/u,/图表及格式要求附后/u];function u(a){let b=[...a.tenderTexts,a.requirement||""].filter(Boolean).join("\n").replace(/\\n/gu,"\n").replace(/\r/gu,""),c=[],e=function(a){let b=[];for(let c of a.matchAll(/施工组织设计\s*采用\s*[::]?/gu)){let d=c.index||0;b.push(a.slice(d,d+320))}return b}(b),f=e.length>0?e.join("\n"):b,g=l(f,h),m=l(f,i),n=l(b,j),o=l(b,k),p="unknown";g?(p="blind",c.push(`标书类型勾选证据:${g}`)):m?(p="open",c.push(`标书类型勾选证据:${m}`)):n?(p="blind",c.push(`结构证据:识别到「${n}」条款(语义判定通道——勾选标记不可见或未被提取时的兜底,招标文件为该标段设定暗标编制条款)`)):o&&(p="open",c.push(`结构证据:识别到「${o}」条款(语义判定通道——按明标口径编制)`));let u=q(b,/正文内不允许[\s\S]{0,24}?出现非文字需要的其他任何符号和标志/u),v=q(b,/不得有图片和扉页|不得有图片/u),w=l(b,r),x=l(b,t),y=w&&!s.test(w)?w:void 0,z=y?"forbidden":"allowed";y?c.push(`正文禁表证据:${y}`):(x&&c.push(`正文表格允许证据:${x}`),u&&c.push(`排版格式证据:${u}(禁与投标内容无关符号标记的排版条款,不构成正文禁表)`));let A="blind"===p||v?"forbidden":"allowed";v&&c.push(`图片口径证据:${v}`);let B=(0,d.eB)(b).titles.map(a=>{let b=a.replace(/^附表\s*/u,"").split(/\s+/u)[0]||"",c=a.replace(/^附表\s*[一二三四五六七八九十\d]{1,3}\s*/u,"").trim();return{no:b,title:a,.../施工设备表|机械设备表|施工机械.*设备/u.test(c)?{kind:"table",dataSource:"blueprint.equipment"}:/试验.*仪器|检测仪器|试验仪器|仪器设备表/u.test(c)?{kind:"table",dataSource:"blueprint.testInstruments"}:/劳动力/u.test(c)?{kind:"table",dataSource:"blueprint.labor"}:/临时用地/u.test(c)?{kind:"table",dataSource:"blueprint.tempLand"}:/网络图|进度图|横道图|开.*竣工/u.test(c)?{kind:"figure",dataSource:"blueprint.schedule"}:/总平面/u.test(c)?{kind:"figure",dataSource:"blueprint.tempLand"}:{kind:"table",dataSource:"manual"}}});B.length>0&&c.push(`文末附表清单 ${B.length} 项:${B.map(a=>a.title).join("、")}`);let C=/正文(?:部分)?(?:一律|均)?采用\s*(小?[一二三四五六七八九十]号)?\s*([\u4e00-\u9fffA-Za-z_]{2,10})/u.exec(b),D=/大标题用\s*([小]?[一二三四五六七八九十]号)\s*([\u4e00-\u9fffA-Za-z_]{2,10})/u.exec(b),E=/装订线\s*([\d.]+\s*[-~-—]\s*[\d.]+\s*cm|[\d.]+\s*cm)/u.exec(b),F=/行间距为固定值\s*(\d+)\s*磅/u.exec(b),G=/(?:总页数上限|页数上限)\s*[::]?\s*(\d+)|不得超过\s*(\d+)\s*页/u.exec(b),H={monoColor:!!/一律单黑色|全部单黑色|均单黑色/u.test(b)||void 0,cover:/不设内封(?:面)?/u.test(b)?"forbidden":void 0,headersFooters:/不需编制页眉、页脚|不编制页眉|不需要页眉|不需编制页眉/u.test(b)?"forbidden":void 0,bodyFont:C?.[2]?`${C[2]}${/GB2312/iu.test(b)?"(GB2312)":""}`:void 0,bodySize:C?.[1]||void 0,headingSize:D?.[1]||void 0,headingFont:D?.[2]||void 0,gutter:E?.[1]?.replace(/\s+/gu,"")||void 0,lineHeight:F?.[1]?`固定值${F[1]}磅`:void 0,pageLimit:G&&Number(G[1]||G[2])||void 0},I=/明示或暗示具体投标人|以往的施工业绩/u.test(b);I&&c.push("投标人身份禁语证据:任何部位、任何条文出现明示或暗示具体投标人的说明及标记(包括以往的施工业绩等)");let J=[];if("forbidden"===z&&(a.requiredTables||[]).length>0)for(let b of a.requiredTables||[]){let a=b.trim();if(!a)continue;let c=B.find(b=>(function(a,b){let c=a.replace(/^附表\s*[一二三四五六七八九十\d]{1,3}\s*/u,"").replace(/\s+/gu,"").replace(/表$/u,""),d=b.replace(/\s+/gu,"").replace(/表$/u,"");return!!c&&!!d&&(c.includes(d)||d.includes(c))})(b.title,a));J.push({rule:`提示词必需表格《${a}》`,source:"用户提示词",resolution:c?`招标正文禁表(显式禁表句):该表已收敛入文末《${c.title}》,正文不再输出表格`:"招标正文禁表(显式禁表句):该表取消表格形式,数据以对应章节文字表述呈现"})}return{bidType:p,bodyTablePolicy:z,bodyFigurePolicy:A,appendixPlan:B,formatRules:H,identityMarksForbidden:I,conflicts:J,evidence:c}}function v(a){return a?.bodyTablePolicy==="forbidden"}function w(a){return a?.bodyFigurePolicy==="forbidden"}function x(a){if(!a)return"";let b="forbidden"===a.bodyTablePolicy,c="forbidden"===a.bodyFigurePolicy;if(!b&&!c&&!a.formatRules.monoColor&&!a.identityMarksForbidden)return"";let d=["【正文编制口径(招标文件要求,硬性验收项)】"];return b?(d.push("1. 正文一律纯文字表述:不得输出任何 Markdown 表格或管道符表格结构;数据性内容以段落文字表述(人数、台数、工艺参数、计划节点等数值一律原样引用蓝图权威锚点,不得编造或自设)。"),d.push("2. 结构化数据表由系统在文末附表区按招标附表清单统一生成,正文不重复列出表格。")):(d.push("1. 正文表格按系统表格计划输出:只输出任务中明确列出的表格(表格计划),不得自行新增、改名或改变列结构;数据一律原样引用蓝图权威锚点,不得编造或自设。"),d.push("2. 图类数据(进度/网络/横道/平面布置等)以表格化数据表达,不绘制图片;表格与图类数据位置服从任务中给定的表格计划。")),c&&d.push(`${d.length}. 不得插入图片、Markdown 图片语法或图件占位;图类内容由系统统一数据化处理。`),a.formatRules.monoColor&&d.push(`${d.length}. 表格与文字一律单黑色(黑白)表述,不得出现彩色标注、高亮或颜色说明。`),a.identityMarksForbidden&&d.push(`${d.length}. 不得出现任何明示或暗示具体投标人的说明及标记(投标人名称、以往施工业绩、获奖情况等一律不得写入正文)。`),d.join("\n")}function y(a){return`招标正文禁表(显式禁表句,违反即施工组织设计部分不得分):本章正文出现 ${a} 处 Markdown 表格结构。请把每处表格的承载数据改写为段落式连贯叙述(数值、口径保持不变,数据原样保留),删除表格表头与分隔线结构;不得新增或删除其它正文内容。`}function z(a){return`本章正文出现 ${a} 处 Markdown 表格结构,但本章未列入系统表格计划(正文表格须由招标附表清单与评分要求统一规划,不得自设)。请将表格承载数据改写为段落式连贯叙述(数值、口径保持不变),删除表格表头与分隔线结构;确属必要的表格由系统在表格计划中补齐,不得新增其它正文内容。`}function A(a){let b="blind"===a.bidType?"暗标":"open"===a.bidType?"明标":"未识别(按常规口径)",c=[`标书类型:${b}`,`正文表格:${"forbidden"===a.bodyTablePolicy?"禁表格(招标显式禁表句)":"允许(表格按系统表格计划输出)"}`,`正文图片:${"forbidden"===a.bodyFigurePolicy?"禁图片(图类数据化输出)":"允许"}`,a.appendixPlan.length>0?`文末附表 ${a.appendixPlan.length} 项(表类 ${a.appendixPlan.filter(a=>"table"===a.kind).length} / 图类 ${a.appendixPlan.filter(a=>"figure"===a.kind).length})`:"未识别文末附表清单",a.formatRules.pageLimit?`总页数上限 ${a.formatRules.pageLimit} 页`:""].filter(Boolean),d=[...a.evidence.map(a=>`证据:${a}`),..."unknown"===a.bidType?["核查指引:检索招标文件「施工组织设计采用」勾选项(标记字符变体 ☑/√/■/▣ 与「按暗标/采用暗标评审」语义条款均已覆盖)或「暗标编制要求」条款,确认标书类型后重跑以切换编制口径"]:[],...a.appendixPlan.map(a=>`附表${a.no}:${a.title}(${"figure"===a.kind?"图类\xb7编制人补图":`数据源 ${a.dataSource}`})`),a.formatRules.gutter?`格式:装订线 ${a.formatRules.gutter}${a.formatRules.lineHeight?`、行距${a.formatRules.lineHeight}`:""}`:"",a.formatRules.bodyFont?`格式:正文 ${[a.formatRules.bodySize,a.formatRules.bodyFont].filter(Boolean).join(" ")}${a.formatRules.headingSize?`、大标题 ${a.formatRules.headingSize}`:""}`:"","forbidden"===a.formatRules.cover?"格式:不设内封面(终稿移除封面块)":"",a.formatRules.monoColor?"格式:图表一律单黑色":"",a.identityMarksForbidden?"身份禁语:正文不得出现投标人名称/以往业绩等标记":"",...a.conflicts.map(a=>`冲突裁决:${a.rule}——${a.resolution}`)].filter(Boolean);return{status:"unknown"===a.bidType?"skipped":"success",message:"unknown"===a.bidType?"⚠ 标书类型未判定(告警):未识别到「本项目施工组织设计采用:□明标/☑暗标」勾选标记与暗标编制要求语义证据,本次按常规口径生成(正文表格策略按招标证据判定、正文图片允许)——若本项目实为暗标,正文图片与投标人标记可能未被禁止(暗标通常不得出现),请核对招标文件后重跑":`标书编制规格:${c.join(";")}`,details:d}}},52922:(a,b,c)=>{c.d(b,{Bt:()=>x,G5:()=>E,GI:()=>ag,Il:()=>ac,JD:()=>O,Pm:()=>A,T4:()=>K,W0:()=>s,X9:()=>p,Ye:()=>l,_Q:()=>w,bH:()=>R,c8:()=>U,cs:()=>q,e1:()=>v,gE:()=>F,ge:()=>D,nY:()=>T,tq:()=>ab,w7:()=>r});var d=c(37047),e=c(7148),f=c(41991);let g=["基本满足","大致符合","力争","原则上","大概","左右","尽可能","尽量满足"],h=/基本|大致|力争|原则上|大概|左右|尽可能|尽量/u,i=["基本满足招标文件要求","大致符合相关规范标准","力争达到优良质量标准","原则上按照规范执行","尽可能保证工程质量","尽量满足工期要求"],j=["结构构件左右对称布置","平面布置左右对称合理","力争上游的企业精神"];async function k(a){return(0,f.A)({prototypes:[...i],negativePrototypes:[...j],lexicalHints:h,embedDocuments:a})}function l(a){return g.filter(b=>a.includes(b)).map(b=>({phrase:b,count:a.split(b).length-1}))}let m=["精心组织","科学统筹","科学管理","精益求精","全力保障","高效推进","力争优质","力争一流","一流水平","完善体系","最大限度","显著提升","大力落实","严格把控","充分确保","竭力打造","现代化管理","加强管理","提高意识","强化监督","持续完善","及时处理","全方位","常态化","提质增效","高标准","统筹推进"];[...m];let n=["精心组织、科学管理,确保工程质量","严格执行相关规范和设计要求","根据实际情况适当调整施工安排","建立健全管理体系,加强过程管理","全力保障项目顺利推进","加强管理、严格控制,确保工程质量达到优良标准","精心策划、周密部署,全力以赴完成任务目标","高度重视、狠抓落实,层层压实责任","统筹兼顾、合理安排,确保各项工作有序推进","严格管理、严格要求,确保一次成优","认真贯彻落实各项管理制度,不断提升管理水平","加强安全管理,杜绝各类安全事故发生","合理安排施工工序,确保工程按期完工","坚持质量第一、安全至上,认真做好各项工作"],o=/^\s*(?:第[一二三四五六七八九十百\d]+[章节篇]|\d+(?:\.\d+){0,3})\s+[^。;;,,]*$/u;function p(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!!(!b||/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(b))||o.test(b)}function q(a){return a.split("\n").filter(a=>!p(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12)}async function r(a,b){if(0===a.length)return[];let c=await (0,d.Mv)(a,[...n],b),e=await k(b),f=await e(a);return a.map((a,b)=>{let d=Math.max(...n.map(b=>c(a,b))),e=d>=.8,g=f[b];return{sentence:a,semantic:e,vague:g,filler:e||g,similarity:d}})}function s(a){let b=a.replace(/\s+/gu,"");return!(0===b.length||b.length>60||/[0-90-9]/u.test(b)||/项目经理|技术负责人|施工员|质检员|专职安全员|安全员|材料员|资料员|监理|班组|责任人|岗位/u.test(b)||/每日|每周|每月|每季|每年|每\d+|定期|不定期|不少于|不低于|至少/u.test(b)||/合同|约定|承诺|保证金|履约|招标|投标|中标|资质|奖项|证书|备案|报审|报验|审批|签证|变更/u.test(b))}let t=/^(?:#{1,6}\s*)?(?:(?:\d+(?:\.\d+)*)(?:[.、))]|\s)+|(\d+)|[((][一二三四五六七八九十]+[))]|[-*•]\s+)?\s*/u,u=/^(?:(?:本节|本章|本小节|本部分|本(?:文|篇章))(?:将|拟|主要|重点|首先|从|围绕|按|结合|针对|以|通过|对|就|分|共|内容|的|内)|(?:以下|下述|下面)(?:从|将|为|是|内容|主要|就|围绕|介绍|说明)|综上所述|通过以上|由此可见|总的来说|总体而言)/u;function v(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!!b&&u.test(b.replace(t,""))}function w(a){return a.split("\n").map(a=>a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim()).filter(a=>a&&!p(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12&&v(a))}async function x(a,b){let c=q(a),d=await r(c,b),e=c.filter(a=>h.test(a)).length,f=d.filter(a=>a.vague).length,g=d.map(a=>a.filler),i=g.filter(Boolean).length,j=[...new Set(c.filter((a,b)=>g[b]))].slice(0,40),k=new Set;c.forEach((a,b)=>{if(g[b])for(let b of m)a.includes(b)&&k.add(b)});let l=k.size,n=c.length?i/c.length:0;return{totalSentences:c.length,fillerSentences:i,ratio:n,level:n>=.4?"heavy":n>=.2?"medium":"light",vagueCandidateSentences:e,vagueSemanticSentences:f,forbiddenEmptyPhraseHits:l,fillerSentenceDetails:j}}let y={plan:"制定专项施工方案与管理制度,明确技术措施",process:"施工工序流程与工艺步骤顺序",role:"由项目经理、技术负责人等岗位人员分工负责",frequency:"每日、每周等检查频次与时间节点安排",acceptance:"经检查验收合格后整改销项闭环"},z={plan:/专项施工方案|专项方案|施工方案|施工组织设计|技术措施|管理制度|技术交底|作业指导书|操作规程/u,process:/施工工序|工艺流程|施工流程|作业流程|施工顺序|施工步骤|工艺步骤|流水段|流水作业|依次施工|工序/u,role:/项目经理|技术负责人|施工员|质检员|安全员|材料员|资料员|测量员|劳资员|班组长|监理工程师|试验员/u,frequency:/每日|每天|每周|每月|每季度|每批|不少于\s*\d+\s*次|至少\s*\d+\s*次|每周\s*\d+\s*次|每日\s*\d+\s*次|每\s*\d+\s*日/u,acceptance:/整改|复查|销项|复验|闭环|返工/u};async function A(a,b){let c=a.split(/\n{2,}/u).filter(a=>a.trim().length>=30),e=Object.values(y),f=await (0,d.Mv)(c,e,b),g=z.role,h=z.frequency,i=z.acceptance,j=z.plan,k=z.process,l=(a,b)=>{let c=(b!==y.plan||!!j.test(a))&&(!!(b===y.plan&&j.test(a))||(b!==y.process||!!k.test(a))&&(!!(b===y.process&&k.test(a))||(b!==y.role||!!g.test(a))&&(!!(b===y.role&&g.test(a))||(b!==y.frequency||!!h.test(a))&&(!!(b===y.frequency&&h.test(a))||(b!==y.acceptance||!!i.test(a))&&(!!(b===y.acceptance&&i.test(a))||void 0)))));return void 0!==c?c:f(a,b)>=d.Eh},m=0,n=0,o=0;for(let a of c)e.filter(b=>l(a,b)).length>=4?m+=1:l(a,y.role)&&l(a,y.frequency)||(n+=1),l(a,y.role)&&l(a,y.frequency)&&l(a,y.acceptance)&&(o+=1);return{blocks:c.length,completeBlocks:m,incompleteBlocks:n,closedLoopBlocks:o}}let B="分析该工程难点的成因与风险来源",C=/\d+(?:\.\d+)?\s*(?:mm|cm|m|米|℃|%|kN|MPa|次|天|日历天|小时|h|Hz|m³|㎡|m²|t|吨|座|套|个)/u;function D(a){return a.trim().startsWith("|")?a.split(/\n/u).filter(a=>{let b=a.trim();return b.startsWith("|")&&!/^\|\s*-+\s*\|/u.test(b)&&!/重难点/u.test(b.split("|")[1]||"")}).filter(a=>a.trim().length>=20):a.split(/\n{2,}/u).filter(a=>a.trim().length>=20)}async function E(a,b,c={}){let e,f=async c=>k>=0?l(c,k).length>=4:(e??=await (0,d.Mv)(a,[B],b))(c,B)>=d.Eh,g=0,h=0,i=0,j=[],k=c.attributionColumnIndex??-1,l=(a,b)=>(a.split("|").slice(1,-1)[b]??"").trim();for(let b of a){let a=await f(b),c=C.test(b);a&&(g+=1),c&&(h+=1),a&&c&&(i+=1),j.push({text:b,attributed:a,quantified:c})}return{entries:a,attributed:g,quantified:h,bothCount:i,ratio:a.length?i/a.length:0,details:j}}async function F(a,b){let c=D(function(a){let b=a.match(/^#{2,4}\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\n/mu);if(b&&void 0!==b.index){let c=b.index+b[0].length,d=a.slice(c),e=b[0].match(/^#+/u)?.[0].length??3,f=RegExp(`^#{2,${Math.max(2,e)}}\\s+`,"mu"),g=d.search(f);return g>=0?d.slice(0,g):d}let c=a.match(/^\|?\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\|\s*$/mu);if(!c||void 0===c.index)return"";let d=a.slice(c.index).split(/\n/u),e=[];for(let a of d){let b=a.trim();if(!b||!b.startsWith("|")){if(e.length>0)break;continue}e.push(a)}return e.join("\n")}(a)),d=(()=>{let a=c.find(a=>a.trim().startsWith("|"));return a?a.split("|").slice(1,-1).map(a=>a.trim()).findIndex(a=>/成因|风险|致险|难点分析/u.test(a)):-1})(),e=await E(c,b,{attributionColumnIndex:d});return{countermeasures:c.length,attributed:e.attributed,quantified:e.quantified,bothCount:e.bothCount,ratio:e.ratio,heavyTemplated:c.length>0&&e.quantified/c.length<.5,entries:e.details.slice(0,24)}}let G=/建筑业10项新技术|10项新技术|新技术推广目录|建设领域推广/u,H=/替代|取代|淘汰.{0,10}(?:工艺|技术|做法)|(?:较|比).{0,10}(?:传统|常规|普通)/u,I=/(?:提升|提高|节省|节约|降低|缩短|减少).{0,10}(?:效率|工期|成本|损耗|能耗|人工|周期)|升级价值|效益显著/u,J=["BIM","铝模","附着式升降脚手架","跳仓法","直螺纹","装配式","灌浆套筒","自动化监测","智慧工地","再生利用","非开挖","CCTV","碳纤维","薄贴法","干法施工","液压提升","预制","光伏一体化","BIPV","模块化"];function K(a){let b=J.filter(b=>a.includes(b)),c=G.test(a),d=H.test(a),e=I.test(a),f=[c,d,e].filter(Boolean).length;return{found:[...b],catalogCited:c,replaceClaimed:d,upgradeClaimed:e,effective:b.length>0&&f>=2}}let L=[/基坑|沟槽/u,/模板支撑|高支模/u,/脚手架|悬挑|附着式/u,/起重吊装|吊装/u,/幕墙/u,/人工挖孔桩/u,/装配式|钢结构安装/u,/拆除工程/u,/顶管|盾构|暗挖/u,/有限空间|水下作业/u,/吊篮/u,/塔吊|施工电梯|升降机/u,/沉井/u],M=/超危大|超规模|专家论证|一般危大/u,N=/(?:深度|高度|跨度|开挖).{0,8}\d+(?:\.\d+)?\s*(?:m|米)|(?:重量|吊装).{0,8}\d+(?:\.\d+)?\s*(?:kN|千牛)/u;function O(a){let b=L.filter(b=>b.test(a)).map(a=>a.source.replace(/\\u\w*|\\|\(|\||\)/gu,"")),c=M.test(a),d=N.test(a);return{categories:b,graded:c,paramMatched:d,twoStepComplete:b.length>0&&c&&d}}let P=[{name:"总则",pattern:/总则/u},{name:"组织机构及职责",pattern:/应急(?:组织|领导)|组织机构|应急指挥部|应急小组/u},{name:"风险分析与危险源辨识",pattern:/风险分析|危险源辨识|风险辨识/u},{name:"应急物资设备通讯保障",pattern:/应急物资|物资.{0,8}(?:保障|储备)|通讯保障|通信保障/u},{name:"专项应急预案",pattern:/专项应急预案|专项预案/u},{name:"应急响应流程",pattern:/应急响应|响应流程|响应程序/u},{name:"后期处置",pattern:/后期处置|善后|事故调查/u},{name:"培训演练",pattern:/(?:应急)?演练|培训.{0,6}演练/u}],Q=["高处坠落","物体打击","坍塌","触电","火灾","起重","防汛","防台风","中暑","中毒窒息","管线破坏"];function R(a){let b=P.filter(b=>b.pattern.test(a)).map(a=>a.name),c=P.filter(b=>!b.pattern.test(a)).map(a=>a.name),d=Q.filter(b=>a.includes(b));return{coveredParts:[...b],missingParts:[...c],coverage:b.length/P.length,planHits:[...d]}}let S=[/其他项目/u,/其他标段/u,/其他城市/u,/本公司(?:其他|承建)/u,/某(?:市|县|区|项目)(?:的)?/u,/他项目/u,/兄弟项目/u];function T(a){let b=a.replace(/及其他项目/gu,"及〔清单列举项〕");return S.filter(a=>a.test(b)).map(a=>a.source.replace(/\\u/gu,""))}function U(a){let b=[];for(let c of q(a))for(let a of function(a){let b=[];return[...a.replace(/["“”'']([^"“”'']{2,40})["“”'']/gu,(a,c)=>(b.push(c),",")).split(/[,,、]/u).map(a=>a.trim()),...b].filter(a=>a.replace(/\s+/gu,"").length>=6)}(c))(function(a){return m.some(b=>{for(let c=a.indexOf(b);c>=0;c=a.indexOf(b,c+1)){let b=c>0?a[c-1]:"";if(!b||!"最更较尤极超过偏".includes(b))return!0}return!1})})(a)&&s(a)&&b.push({phrase:a,sentence:c,similarity:0,channel:"zero-info"});return b}let V=/(?<![相响适对供感反效因顺])(?:应负责|应当|应(?!用|急|对|酬|诉|邀|允|聘|试|考)|必须|不得|须)/u,W=`${e.wA}|mm|cm|kW|kV|MPa|kN|kPa|℃|\xb0|%|min|分钟|小时|天|日历天|次|遍|处|户|层|栋|区|名|位|人|项|份|道`,X=[/[0-90-9]\s*[##号]\s*[厂栋楼座幢区段]/u,/(?:工程量清单|清单)(?:序号|编号|条目|项)|第[0-9]+(?:项|条)|[0-9]+(?:\.[0-9]+)+条/u,RegExp(`[0-90-9](?:\\.[0-9]+)?\\s*(?:万|亿)?(?:${W})`,"iu"),/(?<![A-Za-z0-9])(?:MU|HRB|HPB|HRBF|Q|C|M)\s?[0-9]{1,4}(?:[..][0-9]+)?(?![A-Za-z0-9])/iu,RegExp(`[一二三四五六七八九十百千两](?:${W})`),/轴线|标高|层高|跨度|断面|大样|节点|预埋|构件/u],Y=/(?:承担|承诺|保证|确保|负责|配备|投入|设置|提供|办理|填报|报送|报审|报验|完成|按期|保修|维护|满足|服从)[^。;;]{0,24}(?:费用|金额|价款|工期|日历天|质量目标|数量|台|套|份|人|名|次|项|手续|资料|责任|要求|内容|进度|义务)|(?:报|经|由)[^。;;]{0,10}(?:确认|认可|审核|批准|同意|签字|备案)/u,Z=/本(?:工程|项目|设计|方案|标段|项目部)/u,$=/项目经理|技术负责人|施工员|质检员|专职安全员|安全员|材料员|资料员|试验员|测量员|班组长|监理|责任人|岗位|班组/u,_=/登记|领证|核验|签认|签字|归档|留存|台账|记录|备案|报审|报验/u,aa=/浇筑|养护|摊铺|碾压|回填|砌筑|焊接|绑扎|安装|调试|试压|打压|涂装|降水|开挖|支模|振捣|张拉|防腐|保温|导流|闭水|夯实|铺设|铺贴|抹灰|吊装|测量|放线|取样|送检|检验批|隐蔽验收/u;function ab(a){return q(a).filter(a=>(function(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").replace(/\s+/gu,"");return!(b.length<12||!V.test(b)||X.some(a=>a.test(b))||Y.test(b)||Z.test(b)||$.test(b)||_.test(b))&&!aa.test(b)})(a))}let ac="【写作红线】不得整句复述规范/合同/招标文件的条款原文(“应/必须/不得”式义务复述语体,且句中无本项目实体、无可核查承诺)——把条款内容改写为本项目的具体做法:谁执行、何时执行、在哪个部位、频次多少、留什么记录,只写本项目实际执行的内容。",ad=/《[^《》]{1,60}》/gu,ae=/[((]?\s*(?:GB|JGJ|CJJ|CECS|JG|DB|JTG|SL|DL|TB|SH|HG|NB|YS)\s*\/?\s*T?\s*\d{2,5}(?:\s*[-—]\s*\d{2,4})?\s*[))]?/giu,af=/执行|依据|按照|根据|采用|编制|组织|实施|施工|验收|安装|浇筑|检测|检查|管理|控制|负责|承担|落实|开展|进行|完成|建立|设置|确保|保证|满足|符合|规定|要求|参见|详见|遵照|遵守|结合|作为|包括|覆盖/u;function ag(a){return a.split(/\n{2,}/u).map(a=>a.split("\n").map(a=>a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim()).filter(a=>a.length>0&&!(/^(?:#{1,6}\s|[-*+]\s|>|\|)/u.test(a)||/[||]/u.test(a))).join("\n")).filter(a=>(function(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").replace(/\s+/gu,"");if(!b||(b.match(ad)?.length??0)<3)return!1;let c=b.replace(ad,"").replace(ae,"");return!(c.length>.35*b.length)&&!af.test(c)})(a))}},55807:(a,b,c)=>{c.d(b,{C_:()=>g.C_,DR:()=>h.DR,EG:()=>h.EG,EK:()=>h.EK,Fc:()=>g.Fc,G2:()=>h.G2,Ht:()=>g.Ht,Il:()=>h.Il,Iu:()=>d.Iu,M6:()=>h.M6,Mz:()=>d.Mz,NJ:()=>h.NJ,QP:()=>d.xs,R_:()=>h.R_,UG:()=>d.UG,Xr:()=>f.Xr,_8:()=>h._8,_k:()=>g._k,br:()=>e.br,bz:()=>h.bz,gq:()=>h.gq,h:()=>f.h,hS:()=>e.hS,hW:()=>d.hW,jO:()=>f.jO,jX:()=>d.jX,md:()=>h.md,t7:()=>d.t7,w_:()=>g.w_,xs:()=>f.xs});var d=c(64753),e=c(18292),f=c(87635),g=c(13145),h=c(39372)},55965:(a,b,c)=>{c.d(b,{hy:()=>m,kE:()=>j});var d=c(22157),e=c(95734);let f=new Map,g={"labor-peak":"项目劳动力峰值(人)","total-days":"项目总工期(日历天)","village-count":"项目自然村数量(个)",quantity:"工程量清单条目汇总工程量"},h=`你是施工组织设计文档的数值引用裁决器。任务:判断正文句中的数值是否「以该项目级数据的口径」陈述(项目级 = 全项目汇总/锁定口径)。
|
|
142
143
|
判定结论三选一:
|
|
143
144
|
- consistent:该句并非以该数据的项目级口径陈述该数值。典型非冲突形态:规格参数(间距/直径/厚度/强度等级)、检测频次或测点密度、分区/分段/分等级声明、分部分项或单体(单座/单栋/每座)工程量、分村/分工程/分标段明细值、计划或阶段工期、工期管理阈值(延误/预留/机动/占用天数)、施工组织分配(每X覆盖N个)、型号编号、其他概念的同形数字;或该句确以项目级口径陈述且数值与权威值一致。
|
|
144
145
|
- conflict:该句确以该项目级数据的口径陈述该数值,且数值与权威值不一致。
|
|
@@ -190,19 +191,19 @@ ${b.styleRequirements.map(a=>`- ${a}`).join("\n")}`]:[]].join("\n"),i=[...new Se
|
|
|
190
191
|
表题命名要求:概括该表内容与用途的业务表名(10~24 字),以“表/台账/清单/计划/记录/一览表”等名词结尾;不得使用“表格/数据表/明细”类无信息泛化名。
|
|
191
192
|
缺表题表格原文(只允许在各表正上方补一行表题;严禁修改表头、数据行、表格列数与其余正文,严禁删除表格):
|
|
192
193
|
${f.map(a=>a.blockText).join("\n\n")}
|
|
193
|
-
以局部 patch 方式输出:每处 patch 只包含新增表题行与必要定位上下文,不得重写其他内容。`,m=await av({originalContent:e.content,repairRound:"table-caption-repair",diagnostics:a.generationDiagnostics,beforeMetrics:[f.length],shouldRollback:(a,b)=>b[0]>=f.length,apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:e.id,title:e.title,content:e.content,evidence:e.evidence,missingFacts:e.missingFacts,sections:e.sections},issues:[`正文存在 ${f.length} 张缺少表题的表格`],promptTexts:l,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("table-caption-repair",a.generationDiagnostics)}));return b.content&&b.content!==e.content?b.content:e.content},recheck:a=>[b(a)]}),o=m.content;m.rolledBack||o===e.content||(a.finalChapterDrafts[c]={...e,content:h?(0,n.w_)(o,h):o},d+=1);let p=m.rolledBack?f.length:m.afterMetrics[0],q=(0,j.X5)({type:"llm_review",roleId:i,status:m.rolledBack||p>0?"failed":"success",message:m.rolledBack?`表格题名补全已回滚:${e.title}(补名后无题表数未下降,保留修复前正文)`:p>0?`表格题名补全未完全生效:${e.title}(残留 ${p} 张无题表由终检复核)`:`表格题名补全完成:${e.title}`,details:[`无题表 ${f.length} 张 → 残留 ${p} 张`]},{subtitle:"表格题名补全"});(0,j.fx)(a.progressStages,q),(0,j.fx)(a.finalGateRepairStages,q),a.emitProgress(a.finalChapterDrafts,a.progressStages)}(c>0||d>0)&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle())}async function fw(a){let b=new Map;for(let c of a.finalChapterDrafts){let a=(0,aG.qE)(c.content);a.length>0&&b.set(c.id,a)}let c=[...b.keys()].reduce((b,c)=>{let d=a.finalChapterDrafts.find(a=>a.id===c);return b+(d?(0,aG.OV)(d.content):0)},0);if(0===b.size){let b=(0,j.X5)({type:"validation",roleId:"table-arithmetic-repair",status:"success",message:"表内算术自洽核对通过:全部含合计标记的表格分项和=合计"},{subtitle:"表内算术自洽"});(0,j.fx)(a.progressStages,b),(0,j.fx)(a.finalGateRepairStages,b),a.emitProgress(a.finalChapterDrafts,a.progressStages);return}let d=0,e=0;for(let[c,f]of b){let b=a.finalChapterDrafts.findIndex(a=>a.id===c);if(b<0)continue;let h=a.finalChapterDrafts[b],i=h.content,k=(0,aG.OV)(i),l=0,m=!1,n=!1,o=[k];for(;k>0&&l<2;){l+=1;let d=(0,aG.qE)(i),e=(0,j.X5)({type:"llm_review",roleId:`agent-table-arithmetic-${c}`,status:"running",message:`表格算术不自洽 ${d.length} 张表,第 ${l} 轮定向修复中:${h.title}`,details:d.map(a=>a.message)},{subtitle:"表内算术自洽"});(0,j.fx)(a.progressStages,e),(0,j.fx)(a.finalGateRepairStages,e),a.emitProgress(a.finalChapterDrafts,a.progressStages);let f=["【表格算术自洽修复】下列表格的「合计」(合计行/合计列)与分项之和对不上,请逐表修正表内数值:",...l>1?[`本轮为第 ${l} 轮(最多 2 轮):上一轮修复后仍有残留,必须让合计与分项之和完全相等。`]:[],"1. 以分项为准重算合计:合计 = 该行/该列已列出的分项之和(单位一致);","2. 若分项数值本身与资料/清单/上下文矛盾,按权威值修正分项,使分项和 = 合计;","3. 台账类表(含「其他/其余」差额项的)保留显性「其他」项并给出数值,使合计 = 全部分项(含其他)之和;","4. 只允许修正表格内的数值(合计格/分项格);严禁编造无来源数值、严禁删除表格、严禁改动表格外正文。","以局部 patch 方式输出:每个 patch 只包含表格区域的数值修正与必要定位上下文。",d.map(a=>`- ${a.message}`).join("\n")].join("\n"),p=await av({originalContent:i,repairRound:"table-arithmetic-repair",diagnostics:a.generationDiagnostics,beforeMetrics:[k],shouldRollback:(a,b)=>b[0]>=a[0],apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:h.id,title:h.title,content:i,evidence:h.evidence,missingFacts:h.missingFacts,sections:h.sections},issues:d.map(a=>a.message),promptTexts:f,requirement:a.requirement,forbidDrawingImages:!1,bidComposition:a.bidComposition,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("table-arithmetic-repair",a.generationDiagnostics)}));return b.content&&b.content!==i?b.content:i},recheck:a=>[(0,aG.OV)(a)]});p.rolledBack||p.content===i||(i=p.content,a.finalChapterDrafts[b]={...h,content:i},m=!0),p.rolledBack&&(n=!0);let q=(0,aG.OV)(i);if(o.push(q),0===q||q>=k||l>=2)break;k=q}m&&(d+=1);let p=(0,aG.OV)(i);e+=p;let q=(0,j.X5)({type:"llm_review",roleId:`agent-table-arithmetic-${c}`,status:au({before:f.length,after:p,repaired:m,rolledBack:n}),message:0===p?`表内算术自洽修复完成:${h.title}(残留轨迹 ${o.join("→")})`:m?`表内算术自洽修复部分生效:${h.title}(不自洽处数残留轨迹 ${o.join("→")},已执行 ${l} 轮定向修复(每章最多 2 轮);残留由终检照常复核)`:n?`表内算术自洽修复已回滚:${h.title}(修复后不自洽处数未下降,保留修复前正文;残留 ${p} 处由终检照常复核)`:`表内算术自洽修复未生效:${h.title}(模型未产生有效修改;残留 ${p} 处由终检照常复核)`,details:[...f.map(a=>a.message),p>0?`已执行 ${l} 轮定向修复,残留由终检照常复核`:""]},{subtitle:"表内算术自洽"});(0,j.fx)(a.progressStages,q),(0,j.fx)(a.finalGateRepairStages,q),a.emitProgress(a.finalChapterDrafts,a.progressStages)}d>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.generationDiagnostics.llm.lastInfo=`表内算术自洽修复:${c} 处不自洽,${d} 章完成定向修复,残留 ${e} 处(每章最多 2 轮收敛修复,残留由终检照常复核)`}async function fx(a){let b=function(a){let b=0,c=[];return a.forEach((a,d)=>{let e=a.content;if(!e?.trim())return;let f=(a.sections||[]).map(a=>(0,af.mJ)(a)).filter(Boolean),g=e.split("\n"),h=new Set,i=a=>(0,af.mJ)(a.replace(/^#{2,6}\s*/u,"").replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").trim());for(let a=0;a<g.length;a+=1){let e=/^(#{3,4})\s+(.+?)\s*$/u.exec((g[a]||"").trim());if(!e)continue;let j=e[1],k=i(e[2]);if(!k||!f.includes(k))continue;let l=a+1,m=0;for(;l<g.length;){let a=(g[l]||"").trim();if(RegExp(`^#{2,${j.length}}\\s`).test(a))break;a&&!/^#{1,6}\s/u.test(a)&&(m+=a.length),l+=1}if(m>=12||l>=g.length)continue;let n=RegExp(`^${j}\\s+(.+?)\\s*$`).exec((g[l]||"").trim());if(!n)continue;let o=i(n[1]);!(!o||f.includes(o))&&([...new Set(o.split(""))].filter(a=>k.includes(a)).length<2||(h.add(l),b+=1,c.push(`第 ${d+1} 章「${k}」归位:合并自拟标题「${o}」`)))}if(0===h.size)return;a.content=g.filter((a,b)=>!h.has(b)).join("\n").replace(/\n{3,}/gu,"\n\n");let j=(0,ck.PA)(a.content,{chapterNumber:d+1});a.content=j.markdown}),{mergedCount:b,details:c}}(a.finalChapterDrafts),c=function(a){let b=0,c=0,d=[];return a.forEach((a,e)=>{if(!a.content?.trim())return;let f=0;for(let b=0;b<4;b+=1){let b=(0,af.Wr)(a);if(0===b.length)break;let c=new Set(b.map(a=>a.line));for(let g of(a.content=a.content.split("\n").filter((a,b)=>!c.has(b)).join("\n").replace(/\n{3,}/gu,"\n\n"),f+=b.length,b))d.push(`第 ${e+1} 章移除空壳标题「${g.rawTitle}」${g.planned?"(规划小节未落位,缺口由规划落位检测器单一报出)":""}`)}if(0===f)return;b+=f;let g=(0,ck.PA)(a.content,{chapterNumber:e+1});a.content=g.markdown,g.fixedCount>0&&(c+=1)}),{removedCount:b,renumberedChapters:c,details:d}}(a.finalChapterDrafts),d=(0,j.X5)({type:"validation",roleId:"empty-section-sweep",status:"success",message:b.mergedCount>0||c.removedCount>0?`空节清扫完成:规划标题归位 ${b.mergedCount} 处、移除无依据空壳标题 ${c.removedCount} 处(${c.renumberedChapters} 章重排编号)`:"空节清扫核对通过:无空壳小节",details:[...b.details,...c.details].length>0?[...b.details,...c.details]:void 0},{subtitle:"空节清扫"});(0,j.fx)(a.progressStages,d),(0,j.fx)(a.finalGateRepairStages,d),(b.mergedCount>0||c.removedCount>0)&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fy(a){let b=eo(a.finalChapterDrafts),c=function(a){let b=0,c=[];return a.forEach((a,d)=>{if(!a.content?.trim())return;let e=b=>{let c=String(b||"").trim();return!c||(0,cl.cq)(c)||/^附录/u.test(c)||ee.gG.test(a.title)&&f.V.test(c)},g=(a.sections||[]).filter(a=>!e(a));if(0===g.length||(0,ad.r4)(a.content).filter(a=>!e(a)).length<=g.length)return;let h=g.map(a=>(0,af.mJ)(a)),i=new Set(h),j=a.content.split("\n"),k=[];j.forEach((a,b)=>{if(!/^\s*###\s+\S/u.test(a))return;let c=(0,f.Jb)(a),d=c?(0,af.mJ)(c):"";d&&k.push({line:b,title:c,normalized:d})});let l=-1,m=0;for(let a of k){if(i.has(a.normalized)){l=a.line;continue}!(e(a.title)||h.some(b=>(0,f.ty)(a.normalized,b))||/(?:((?:\d+|[一二三四五六七八九十]+)))+$/u.test(a.title))&&(l<0||(j[a.line]=`#### ${a.title}`,m+=1,c.push(`第 ${d+1} 章「${a.title}」降为 H4(并入上方规划小节主题块)`)))}0!==m&&(b+=m,a.content=(0,ck.PA)(j.join("\n"),{chapterNumber:d+1}).markdown)}),{demotedCount:b,details:c}}(a.finalChapterDrafts),d=0;a.finalChapterDrafts.forEach((a,b)=>{if(!a.content?.trim())return;let c=(0,ck.PA)(a.content,{chapterNumber:b+1});c.fixedCount>0&&(a.content=c.markdown,d+=1)});let e=b.mergedCount+c.demotedCount,h=e>0||d>0;(0,g.kD)(a.generationDiagnostics,e+d);let i=[...b.details,...c.details],k=(0,j.X5)({type:"validation",roleId:"section-alignment-sweep",status:"success",message:h?`小节结构对齐收口:近名对齐/合并 ${b.mergedCount} 处、规划外小节降级 ${c.demotedCount} 处、编号重放 ${d} 章`:"小节结构对齐核对通过:成稿小节与规划主题块一一对应",details:i.length>0?i.slice(0,6):void 0},{subtitle:"结构对齐收口"});(0,j.fx)(a.progressStages,k),(0,j.fx)(a.finalGateRepairStages,k),h&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fz(a){let b=dM(a.finalChapterDrafts),c=b.length>0?dN(a.finalChapterDrafts,b):{deletedCount:0,deletedSentences:[],remaining:b},d=0;for(let b of a.finalChapterDrafts){if(!b.content?.trim())continue;let a=(0,s.Vc)(b.content);a.removedCount>0&&(b.content=a.markdown,d+=a.removedCount)}let e=c.deletedCount+d,f=(0,j.X5)({type:"validation",roleId:"templating-sweep",status:"success",message:e>0?`模板化链尾清理:零信息前缀句删除 ${c.deletedCount} 处、重复段落去重 ${d} 处`:"模板化链尾核对通过:无零信息前缀句与重复段落残留",details:c.deletedSentences.length>0?c.deletedSentences.slice(0,3).map(a=>`前缀句删除:「${a.slice(0,40)}」`):void 0},{subtitle:"模板化清理收口"});(0,j.fx)(a.progressStages,f),(0,j.fx)(a.finalGateRepairStages,f),e>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fA(a){let b=function(a){let b=0,c=[];return a.forEach((a,d)=>{if(!a.content?.trim())return;let e=0;for(let g=0;g<6;g+=1){let g=a.sections||[],h=g.map((a,b)=>({section:String(a||"").trim(),index:b})).filter(a=>a.section),i=new Map;for(let a of h){let b=(0,af.Sn)(a.section);b&&i.set(b,[...i.get(b)||[],a])}let j=[...i.values()].find(a=>a.length>=2);if(!j)break;let k=a.content.split("\n"),l=[];k.forEach((a,b)=>{if(!/^\s*###\s+\S/u.test(a))return;let c=(0,f.Jb)(a),d=c?(0,af.mJ)(c):"";d&&l.push({line:b,title:c,normalized:d})});let m=a=>{let b=(0,af.mJ)(a);return l.find(a=>a.normalized===b)||l.find(a=>(0,f.ty)(a.normalized,b))},n=j.flatMap(a=>{let b=m(a.section);return b?[{section:a.section,index:a.index,heading:b}]:[]}),o=n.filter((a,b)=>n.findIndex(b=>b.heading.line===a.heading.line)===b),p=new Map;for(let a of n)p.set(a.heading.line,[...p.get(a.heading.line)||[],a]);let q=[...p.values()].find(a=>a.length>1);if(q){let f=q.find(a=>a.heading.normalized===(0,af.mJ)(a.section))||q[0],h=q.filter(a=>a!==f).map(a=>a.index);a.sections=g.filter((a,b)=>!h.includes(b)),b+=1,e+=1,c.push(`「${q.filter(a=>a!==f).map(a=>a.section).join("、")}」与「${f.section}」同节对齐去重(第 ${d+1} 章)`);continue}if(o.length<2)break;o.sort((a,b)=>a.heading.line-b.heading.line);let r=o[0],s=o[1],t=em(k,r.heading.line),u=em(k,s.heading.line),v=k.slice(r.heading.line+1,t);for(;v.length>0&&""===v[v.length-1].trim();)v.pop();let w=k.slice(s.heading.line+1,u);for(;w.length>0&&""===w[w.length-1].trim();)w.pop();for(;w.length>0&&""===w[0].trim();)w.shift();let x=w.length>0?[...v,"",...w,""]:[...v,""],y=r.heading.normalized===(0,af.mJ)(r.section)?k[r.heading.line]:`${en(k[r.heading.line])}${r.section}`;a.content=[...k.slice(0,r.heading.line),y,...x,...k.slice(t,s.heading.line),...k.slice(u)].join("\n").replace(/\n{3,}/gu,"\n\n"),a.sections=g.filter((a,b)=>b!==s.index),b+=1,e+=1,c.push(`「${s.section}」并入「${r.section}」(第 ${d+1} 章)`)}if(e>0){let b=(0,ck.PA)(a.content,{chapterNumber:d+1});a.content=b.markdown}}),{mergedCount:b,details:c}}(a.finalChapterDrafts),c=(0,j.X5)({type:"validation",roleId:"duplicate-theme-merge",status:"success",message:b.mergedCount>0?`重复主题小节合并:${b.mergedCount} 处(保留首现小节,后续标题行摘除、正文并入,规划数组同步)`:"重复主题小节核对通过:同桶小节无并存",details:b.details.length>0?b.details.slice(0,6):void 0},{subtitle:"重复主题合并"});(0,j.fx)(a.progressStages,c),(0,j.fx)(a.finalGateRepairStages,c),b.mergedCount>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fB(a){let b=[],c=(0,ae._G)(a.finalMarkdown),d=0;c!==a.finalMarkdown&&(a.finalMarkdown=c,d+=1,b.push("附表区内部话术清洗:内部推导口径已中性化(唯一口径/经验工效区间/清单批注等)"));{let c=(a.effectiveChapters||[]).map(a=>({title:(0,cj.GQ)(a.title),sections:(a.sections||[]).filter(Boolean)}));if(c.length>0){let e=a.finalMarkdown.split(/\r?\n/u),f=[];e.forEach((a,b)=>{let c=/^##\s+(.+?)\s*$/u.exec(a.trim());c&&!/^(目录|附表)/u.test(c[1])&&f.push({index:b,title:c[1].replace(/\s+/gu,"")})});let g=0,h=[];for(let a=c.length-1;a>=0;a-=1){let d=c[a],i=d.title.replace(/\s+/gu,""),j=f.find(a=>a.title.includes(i)||i.includes(a.title));if(!j)continue;let k=f.find(a=>a.index>j.index),l=k?k.index:e.length,m=e.slice(j.index+1,l).join("\n"),n=(0,ed.zX)(d.sections,m);(0!==n.promoted.length||0!==n.missing.length)&&(n.promoted.length>0&&(e.splice(j.index+1,l-j.index-1,...n.markdown.split(/\r?\n/u)),g+=n.promoted.length,b.push(`规划小节层级提升:${d.title}(${n.promoted.join("、")})`)),n.missing.length>0&&h.push(`${d.title}:${n.missing.join("、")}`))}g>0&&(a.finalMarkdown=e.join("\n"),d+=g),h.length>0&&b.push(`规划小节未落位(交终门禁复核):${h.join(";")}`)}}let e=(0,dz.av)(a.finalMarkdown);e.markdown!==a.finalMarkdown&&(a.finalMarkdown=e.markdown,d+=e.splitCount,b.push(`超长段落切分:消除 >380 字符段落 ${e.splitCount} 处`));{let c=(a.truthValues||[]).flatMap(a=>(a.superseded||[]).map(b=>({superseded:b,effective:a.value,scope:[a.attribute],evidence:a.evidence,kind:"override"})));if(c.length>0){let e=(0,z.M0)(a.finalMarkdown,c);e.applied.length>0&&(a.finalMarkdown=e.text,d+=e.applied.length,b.push(`现行口径落地:${e.applied.length} 处(${[...new Set(e.applied.map(a=>`${a.from}→${a.to}`))].slice(0,3).join("、")})`))}}{let c=(0,ck.PA)(a.finalMarkdown);c.fixedCount>0&&(a.finalMarkdown=c.markdown,d+=c.fixedCount,b.push(`小节编号重放:${c.fixedCount} 处(删除/合并小节后的编号空档收口)`))}let f=(0,s._D)(a.finalMarkdown);f.fixedCount>0&&(a.finalMarkdown=f.markdown,d+=f.fixedCount,b.push(...f.details)),(0,g.kD)(a.generationDiagnostics,d);let h=b.length>0,i=(0,j.X5)({type:"validation",roleId:"delivery-structure-closure",status:"success",message:h?`交付结构收口:${b.join(";")}`:"交付结构收口核对通过:目录与正文一致、无超长段落",details:h?b:void 0},{subtitle:"交付结构收口"});(0,j.fx)(a.progressStages,i),(0,j.fx)(a.finalGateRepairStages,i),h&&await a.recomputeFinalValidationBundle(),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fC(a){let b=(0,cl.yp)(a.finalMarkdown),c=(0,j.X5)({type:"validation",roleId:"sentence-pattern-sweep",status:"success",message:b.removedCount>0?`句模复读链尾收口:宣告引导句确定性剥离 ${b.removedCount} 处(列表引导语删除无损,列表内容保留)`:"句模复读链尾核对通过:无宣告引导句残留",details:b.removedSentences.length>0?b.removedSentences.slice(0,4).map(a=>`引导句剥离:「${a.slice(0,40)}」`):void 0},{subtitle:"模板化清理收口"});(0,j.fx)(a.progressStages,c),(0,j.fx)(a.finalGateRepairStages,c),b.removedCount>0&&(a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fD(a){let b=function(a){let b=a.split("\n"),c=[],d="(文首)";b.forEach((a,b)=>{let e=a.trim();/^##\s+/u.test(e)&&(d=e),c[b]=d});let e=[],f=[],g=new Map,h=0,i=0;for(let b of cV(a)){let a=b.occurrences;if(a.length<2)continue;let d=1===new Set(a.map(a=>c[a.lineIndex])).size,j=cl.Lw.test(a[0].raw);if(!d&&!j){f.push(a[0].raw);continue}for(let b of a.slice(1)){let a=g.get(b.lineIndex)||[];a.push({start:b.start,end:b.end}),g.set(b.lineIndex,a),e.push(b.raw),d?h+=1:i+=1}}if(0===e.length)return{markdown:a,removedCount:0,removedSentences:e,keptSentences:f,sameChapterRemoved:h,generalizedRemoved:i};for(let[a,c]of g){let d=b[a];for(let a of c.sort((a,b)=>b.start-a.start)){let b=a.start;for(;b>0&&/\s/u.test(d[b-1]);)b-=1;let c=a.end;for(;c<d.length&&/\s/u.test(d[c]);)c+=1;/[。;;]/u.test(d[c]||"")&&(c+=1),d=d.slice(0,b)+d.slice(c)}b[a]=""===d.trim()?"":d.replace(/^[ \t]+/u,"").replace(/[ \t]+$/u,"")}return{markdown:b.join("\n").replace(/\n{4,}/gu,"\n\n\n"),removedCount:e.length,removedSentences:e,keptSentences:f,sameChapterRemoved:h,generalizedRemoved:i}}(a.finalMarkdown),c=b.removedSentences.slice(0,3).map(a=>`复读坍塌:「${a.slice(0,40)}」`);b.keptSentences.length>0&&c.push(`跨章业务复读保留 ${b.keptSentences.length} 种(合理重申不坍塌)`);let d=(0,j.X5)({type:"validation",roleId:"duplicate-sentence-collapse",status:"success",message:b.removedCount>0?`句级复读坍塌:完全重复句保首次删后续 ${b.removedCount} 处(同章复读 ${b.sameChapterRemoved} 处、跨章泛化归口复读 ${b.generalizedRemoved} 处)`:"句级复读核对通过:无完全重复句残留",details:c.length>0?c:void 0},{subtitle:"模板化清理收口"});(0,j.fx)(a.progressStages,d),(0,j.fx)(a.finalGateRepairStages,d),b.removedCount>0&&(a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fE(a){let b=function(a){let b,c=a.split("\n"),d=[];if(c.forEach((a,e)=>{let f=a.trim();/^##\s+/u.test(f)&&(b&&(b.endLine=e,d.push(b)),b={startLine:e,endLine:c.length,title:f.replace(/^#+\s*/u,"")})}),b&&d.push(b),0===d.length)return{markdown:a,prefixRemoved:0,prefixSentences:[],paragraphRemoved:0,targetCount:0};let e=d.map((a,b)=>({id:`md-chapter-${b}`,title:a.title,content:c.slice(a.startLine,a.endLine).join("\n"),evidence:[],missingFacts:[]})),f=dM(e),g=f.length>0?dN(e,f):{deletedCount:0,deletedSentences:[],remaining:f},h=0;for(let a of e){if(!a.content?.trim())continue;let b=(0,s.Vc)(a.content);b.removedCount>0&&(a.content=b.markdown,h+=b.removedCount)}if(0===g.deletedCount&&0===h)return{markdown:a,prefixRemoved:0,prefixSentences:[],paragraphRemoved:0,targetCount:f.length};let i=[...c];for(let a=d.length-1;a>=0;a-=1){let b=d[a];i.splice(b.startLine,b.endLine-b.startLine,...e[a].content.split("\n"))}return{markdown:i.join("\n"),prefixRemoved:g.deletedCount,prefixSentences:g.deletedSentences,paragraphRemoved:h,targetCount:f.length}}(a.finalMarkdown),c=b.prefixRemoved+b.paragraphRemoved,d=(0,j.X5)({type:"validation",roleId:"templating-tail-replay",status:"success",message:c>0?`模板化链尾重放(markdown):零信息前缀句删除 ${b.prefixRemoved} 处、重复段落去重 ${b.paragraphRemoved} 处`:"模板化链尾重放核对通过:无零信息前缀句与重复段落残留",details:b.prefixSentences.length>0?b.prefixSentences.slice(0,3).map(a=>`前缀句删除:「${a.slice(0,40)}」`):void 0},{subtitle:"模板化清理收口"});(0,j.fx)(a.progressStages,d),(0,j.fx)(a.finalGateRepairStages,d),c>0&&(a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}function fF(a){return Math.max(0,Math.min(100,Math.round(a)))}async function fG(a){let b=await dK(a),c=a.reduce((a,b)=>a+(b.content.match(/本小节围绕|交底覆盖率按100%|24小时内形成整改责任|按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织|按作业条件确认→技术交底→过程实施|依据本项目已确认资料中的项目边界/gu)||[]).length,0),d=await (0,cI.Bt)(a.map(a=>a.content).join("\n")),e=400*Math.max(0,d.ratio-.1);return{score:fF(100-15*c-25*b.filter(a=>"error"===a.level).length-e),detail:`模板化空话命中 ${c} 处,套话句占比 ${(100*d.ratio).toFixed(1)}%(docx 达标线 ≤10%),废话段问题 ${b.length} 项`}}async function fH(a,b="",c={}){let d=function(a){let b=a.map(a=>`${a.title} ${(a.sections||[]).join(" ")} ${a.content}`).filter(a=>cL(a).reduce((a,b)=>a+b.length,0)>=200).join("\n"),c=[{label:"工程概况",pattern:/工程概况|项目概况|基本概况/u},{label:"主要施工内容",pattern:/主要施工内容/u},{label:"重难点分析",pattern:/重点.{0,4}难点/u},{label:"施工部署",pattern:/施工部署|总体部署|流水/u},{label:"进度计划",pattern:/进度计划|工期保障|工期计划/u},{label:"质量保证",pattern:/质量保证|质量管理|质量控制/u},{label:"安全文明",pattern:/安全.{0,8}(?:管理|措施|文明)|文明施工/u},{label:"资源配置",pattern:/劳动力|机械设备|材料.{0,4}计划|资源配置/u},{label:"绿色环保",pattern:/绿色施工|扬尘|噪声|环保/u},{label:"应急管理",pattern:/应急/u}],d=c.filter(a=>a.pattern.test(b)),e=fF(d.length/c.length*100),f=c.filter(a=>!a.pattern.test(b)).map(a=>a.label);return{score:e,detail:`覆盖 ${d.length}/${c.length} 个核心结构组${f.length?`;缺失:${f.join("、")}`:""}`}}(a),e=function(a){let b=a.map(a=>a.content).join("\n"),c=cM(b,dA.s2),d=cM(b,/工程量|材料|设备|范围|流程|验收|检测|复试|调试|隐蔽|检验批|资料|记录|系统|部位|接口|规格|标准/gu),e=Math.max(1,b.length),f=c.size/(e/1e3);return{score:fF(Math.min(100,22*f+d.size/18*15)),detail:`量化参数 ${c.size} 项(每千字 ${f.toFixed(1)}),专业事实词 ${d.size}/18 类`}}(a),f=function(a){let b=a.map(a=>a.content).join("\n"),c=cM(b,dA.aX),d=Math.max(1,b.length),e=c.size/(d/1e3);return{score:fF(Math.min(100,20*e+40)),detail:`工艺参数 ${c.size} 项(每千字 ${e.toFixed(1)})`}}(a),g=function(a,b=""){let c=(b||a.map(a=>a.content).join("\n\n")).split("\n"),d=0,e=0,f=0;for(;f<c.length;){let a=c[f].trim();if(!/^\|.+\|$/u.test(a)){f+=1;continue}let b=[];for(;f<c.length&&/^\|.+\|$/u.test(c[f].trim());)b.push(c[f].trim()),f+=1;b.length<3||(d+=1,0===b.slice(1).filter(a=>a.replace(/\|/gu,"").replace(/[\s\-:]/gu,"").length>0).reduce((a,b)=>{let c=b.split("|").slice(1,-1).map(a=>(0,dz.jG)(a.trim())),d=/^[\s|]*\|?\s*(?:合计|小计|总计|累计)/u.test(b);return a+c.filter((a,b)=>(""===a||"-"===a||"—"===a||"/"===a)&&(!d||"—"!==a)).length},0)&&(e+=1))}return{score:0===d?40:fF(e/d*100),detail:`表格 ${d} 个,其中字段完整 ${e} 个`}}(a,b),h=await fG(a),i=function(a){let b=dJ(a);return{score:fF(100-20*b.length-20*b.filter(a=>"error"===a.level).length),detail:`重复段落问题 ${b.length} 项`}}(a),j=function(a,b=""){let c=cL(b||a.map(a=>a.content).join("\n\n")),d=[{label:"质量标准",pattern:/质量标准|质量要求|合格率/u},{label:"计划工期",pattern:/计划工期|工期要求|日历天/u},{label:"保修",pattern:/缺陷责任期|保修|质保/u},{label:"安全目标",pattern:/安全.{0,8}目标|文明.{0,8}目标/u},{label:"项目经理",pattern:/项目经理|项目负责人/u}],e=d.filter(a=>c.some(b=>a.pattern.test(b)&&cN.test(b))),f=d.filter(a=>!e.includes(a));return{score:fF(e.length/d.length*100),detail:`招标硬性要求响应 ${e.length}/${d.length} 项${f.length?`(未响应:${f.map(a=>a.label).join("、")})`:""}`}}(a,b),k=function(a){if(!a)return{score:100,detail:"模板化未检测(无信号,按满分计)"};let b=300*Math.max(0,a.fillerRatio-.1),c=Math.min(40,8*a.vagueHitCount),d=a.difficultyCountermeasures>0?a.difficultyQuantifiedCount/a.difficultyCountermeasures:1,e=a.difficultyCountermeasures>0?Math.min(30,60*Math.max(0,.5-d)):0,f=Math.min(30,10*a.crossProjectResidue.length);return{score:fF(100-b-c-e-f),detail:`套话句占比 ${(100*a.fillerRatio).toFixed(1)}%(线 ≤10%)、模糊应答词 ${a.vagueHitCount} 处、重难点量化达标 ${a.difficultyQuantifiedCount}/${a.difficultyCountermeasures}(线 ≥50%)、跨项目残留 ${a.crossProjectResidue.length} 处;扣分 ${b.toFixed(0)}+${c.toFixed(0)}+${e.toFixed(0)}+${f.toFixed(0)}`}}(c.templating),l=[{key:"structure",label:"结构完整度",score:d.score,detail:d.detail,weight:0,baseWeight:.18},{key:"factLanding",label:"事实落位率",score:e.score,detail:e.detail,weight:0,baseWeight:.18},{key:"processParameter",label:"工艺参数密度",score:f.score,detail:f.detail,weight:0,baseWeight:.16},{key:"table",label:"表格完整度",score:g.score,detail:g.detail,weight:0,baseWeight:.12},{key:"filler",label:"废话控制",score:h.score,detail:h.detail,weight:0,baseWeight:.14},{key:"duplication",label:"重复控制",score:i.score,detail:i.detail,weight:0,baseWeight:.12},{key:"reviewResponse",label:"评标响应度",score:j.score,detail:j.detail,weight:0,baseWeight:.1}],m=.2*!!c.templating,n=[...l.map(({baseWeight:a,...b})=>({...b,weight:Number((a*(1-m)).toFixed(4))})),...m>0?[{key:"templating",label:"表述实质性",score:k.score,detail:k.detail,weight:m}]:[]],o=fF(n.reduce((a,b)=>a+b.score*b.weight,0)),p=o>=85?"专业":o>=70?"良好":o>=55?"合格":"待提升",q=[...dJ(a),...await dK(a),...dO(a),...dP(a)].slice(0,5).map(a=>a.message),r=n.filter(a=>a.score<70).map(a=>`${a.label}(${a.score}分)`);return{total:o,grade:p,dimensions:n,summary:`施工组织设计专业度评分 ${o} 分(${p};从属口径,交付主尺见六维质量报告)${c.templating&&"light"!==c.templating.level?`;模板化等级:${"heavy"===c.templating.level?"重度":"中度"}(已按「表述实质性」维度计分,不再封顶总分)`:""}${r.length?`;待提升:${r.join("、")}`:""}`,topIssues:q,caliber:c4}}async function fI(a){var b;if(!("heavy"===(b=a.templating).level||b.vagueHitCount>0||b.difficultyHeavyTemplated))return{issues:[],reviewed:!1};let c=(0,cI.T4)(a.markdown),d=[`确定性检测信号:模板化等级=${a.templating.level},套话句占比=${(100*a.templating.fillerRatio).toFixed(1)}%,模糊应答词命中=${a.templating.vagueHitCount}(${a.templating.vaguePhrases.join("、")||"无"}),重难点归因+量化双达标占比=${(100*a.templating.difficultyCountermeasureRatio).toFixed(0)}%,跨项目残留=${a.templating.crossProjectResidue.join("、")||"无"}${c.found.length?`,四新技术命中=${c.found.join("、")}`:""}`,`待复核正文(节选):
|
|
194
|
-
${function(a,b=6e3){return[a.match(/#{2,3}\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\n[\s\S]{0,3500}/u)?.[0]||"",a.replace(/#{1,6}\s+[^\n]*\n/gu,"").replace(/\s+/gu," ").slice(0,b)].filter(Boolean).join("\n\n").slice(0,b+4e3)}(a.markdown)}`,'返回 JSON:{"issues":["问题1","问题2"]}'];try{let b=await (0,dr.bb)((0,ad.y4)('你是招标技术标评审专家。对施工组织设计做语义级复核,只报告确定性规则覆盖不到的语义问题。\n复核维度(按《施工组织设计全维度校验提示词》判定标尺):\n1. 重难点三级判定:识别精准性(是否点明本项目真实难点而非泛泛而谈)→ 归因合理性(是否说明难点成因/风险来源)→ 对策匹配度(对策是否针对该难点的成因,而非通用措施堆砌);\n2. 术语等效性:同一对象是否前后术语一致(如"砼"与"混凝土"混用需统一),是否出现词面不同但概念等效的双重标准表述;\n3. 四新技术升级价值:若正文声称采用四新技术,其价值表述是否停留在"提升效率"式套话,缺少可对标官方推广目录或替代落后工艺的实质说明。\n每条问题必须包含:问题所在内容简述+判定依据(对应上面哪条维度)+一句话改进建议。\n只报告真实存在的问题,正文无问题时返回空数组;不得编造问题。只返回 JSON。'),d.join("\n\n"),{maxTokens:1200,temperature:0,signal:a.signal,diagnostics:a.diagnostics,taskKind:"structuredGeneration"});return{issues:Array.isArray(b?.issues)?b.issues.filter(a=>"string"==typeof a&&a.length>0):[],reviewed:!0}}catch(a){return{issues:[`⚠ 语义级模板化复核未完成(模型调用失败,本项未复核):${a instanceof Error?a.message:String(a)}`],reviewed:!1}}}var fJ=c(73024),fK=c.n(fJ),fL=c(76760),fM=c.n(fL),fN=c(48661);function fO(a){return Math.round(10*a)/10}function fP(a,b){let c=a.replace(/\s+/gu," ").trim();return c.length>b?`${c.slice(0,b)}…`:c}let fQ={success:"通过",failed:"失败",skipped:"跳过",running:"进行中",partial:"部分生效"},fR={blind:"暗标",open:"明标",unknown:"未判定(按明标口径)"};async function fS(a){var b;a.reviewChecklist=[{key:"export-gate",label:"导出门禁",passed:(b={exportGate:a.qualityBundle.finalExportGate,qualityReport:a.qualityBundle.qualityReport,repairStrategies:a.qualityBundle.repairStrategies}).exportGate.passed,message:b.exportGate.passed?"导出门禁通过":`仍有 ${b.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:b.qualityReport.passed,message:`${b.qualityReport.deliveryProbability}% / ${b.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:b.qualityReport.scores.completeness>=85,message:`${b.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:b.qualityReport.scores.specificity>=85,message:`${b.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:b.qualityReport.scores.compliance>=80,message:`${b.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===b.repairStrategies.filter(a=>"high"===a.priority).length,message:b.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}];let c=(0,af.Ff)(a.validationIssues);a.generationDiagnostics.quality.blockingCount+=c.blocking,a.generationDiagnostics.quality.importantCount+=c.important,a.generationDiagnostics.quality.minorCount+=c.minor,a.telemetry=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs})),c={};for(let[b,d]of Object.entries(a.diagnostics.llm.patchGuardStats||{}))c[b]={hits:d.hits+d.rejects,repaired:d.hits,failed:d.rejects+(d.rollbacks??0)};return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0,repairHeat:Object.keys(c).length>0?c:void 0}}({diagnostics:a.generationDiagnostics});let d=a.qualityBundle.finalExportGate.blockingIssues.length,e=(a.generationDiagnostics.evidence.retrievalFailures??0)>0?`,⚠ 检索失败 ${a.generationDiagnostics.evidence.retrievalFailures} 次(非「无命中」,请看进度中的 failed 事件)`:"",f=(a.generationDiagnostics.evidence.pinnedEvidenceMissed??0)>0?`,⚠ 固定证据未命中 ${a.generationDiagnostics.evidence.pinnedEvidenceMissed} 处(资料包绑定漂移)`:"";a.telemetry.qualityIssues.blockingCount=d,a.professionalScore=await fH(a.finalChapterDrafts,a.finalMarkdown,{templating:a.qualityBundle.qualityReport.templating}),a.templatingReview=a.qualityBundle.qualityReport.templating?await a.withProgressHeartbeat(()=>fI({templating:a.qualityBundle.qualityReport.templating,markdown:a.finalMarkdown,diagnostics:a.generationDiagnostics,signal:a.signal})):{issues:[],reviewed:!1},a.finalStages=[...a.executionStages,...a.finalGateRepairStages],a.suspensionChecklist=a.qualityBundle.finalExportGate.passed?void 0:(0,l.aF)(a.qualityBundle.finalExportGate.blockingIssues,a.finalChapterDrafts),a.finalStages.push((0,j.X5)({type:"validation",roleId:"agent-final-gate",status:a.qualityBundle.finalExportGate.passed?"success":"failed",message:a.qualityBundle.finalExportGate.passed?"Agent 最终门禁通过":`Agent 最终门禁未通过 ${d} 个问题(不计入交付阻断,文档照常可导出;人工复核清单见明细)`,details:a.suspensionChecklist?(0,l.$w)(a.suspensionChecklist):[]},{subtitle:"Agent 最终门禁"}));let g=a.qualityBundle.qualityReport.deliveryProbability<70;a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-delivery-score",status:a.qualityBundle.qualityReport.passed?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:a.qualityBundle.finalExportGate.passed&&!a.qualityBundle.qualityReport.passed?`${a.qualityBundle.qualityReport.summary}${g?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:a.qualityBundle.qualityReport.summary,details:g&&a.qualityBundle.finalExportGate.passed?[...a.qualityBundle.qualityReport.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:a.qualityBundle.qualityReport.actions},{subtitle:"交付评分"})),a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===a.professionalScore.grade||"良好"===a.professionalScore.grade?"success":"skipped",message:a.professionalScore.summary,details:[...a.professionalScore.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...a.professionalScore.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),a.qualityBundle.qualityReport.templating&&"light"!==a.qualityBundle.qualityReport.templating.level&&a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===a.qualityBundle.qualityReport.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*a.qualityBundle.qualityReport.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*a.qualityBundle.qualityReport.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${a.qualityBundle.qualityReport.templating.vagueHitCount} 处)`,details:a.templatingReview.issues},{subtitle:"模板化检测"})),a.writingTaskBrief&&a.finalStages.push((0,j.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${a.writingTaskBrief.documentType},${a.writingTaskBrief.chapters.length} 章任务卡,全局写作焦点 ${a.writingTaskBrief.globalWritingFocus.length} 条`,details:[...a.writingTaskBrief.globalWritingFocus,...a.writingTaskBrief.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),a.finalStages.push((0,j.X5)({type:"reference",roleId:"knowledge-coverage",status:a.qualityBundle.knowledgeCoverage.score>=85?"success":"failed",message:`资料确认覆盖率:${a.qualityBundle.knowledgeCoverage.score}%(证据 ${a.qualityBundle.knowledgeCoverage.evidenceCount} 条,文件 ${a.qualityBundle.knowledgeCoverage.confirmedFiles} 份)`,details:[a.qualityBundle.knowledgeCoverage.remediation]},{subtitle:"资料覆盖"})),a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-review-checklist",status:a.reviewChecklist.every(a=>a.passed)?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:`交付复核清单:通过 ${a.reviewChecklist.filter(a=>a.passed).length}/${a.reviewChecklist.length}${a.qualityBundle.finalExportGate.passed&&!a.reviewChecklist.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:a.reviewChecklist.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let h=(0,n._8)(a.generationDiagnostics.metrics),i=(0,n.bz)(a.generationDiagnostics.llm.callBreakdown),k=a.generationDiagnostics.factSanitize?`,事实净化 截断${a.generationDiagnostics.factSanitize.truncated}/丢弃${a.generationDiagnostics.factSanitize.dropped}/编号补全${a.generationDiagnostics.factSanitize.repaired}`:"";if(a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${a.generationDiagnostics.llm.calls} 次,失败 ${a.generationDiagnostics.llm.failures} 次,瞬态重试 ${a.generationDiagnostics.llm.retries} 次,schema 校验失败 ${a.generationDiagnostics.llm.schemaFailures} 次,峰值并行 ${a.generationDiagnostics.llm.maxActive},检索 ${a.generationDiagnostics.evidence.searchQueries} 次/${Math.round(a.generationDiagnostics.evidence.searchMs/1e3)} 秒,证据上下文 ${a.generationDiagnostics.evidence.contextChars} 字,噪声过滤 ${a.generationDiagnostics.evidence.filteredNoise} 条,预算裁剪 ${a.generationDiagnostics.evidence.budgetDropped} 条,质量问题 阻断${a.generationDiagnostics.quality.blockingCount}/重要${a.generationDiagnostics.quality.importantCount}/轻微${a.generationDiagnostics.quality.minorCount}${k}${e}${f}${h?`,Top耗时:${h}`:""}${i?`,调用输入Top5:${i}`:""}`,details:[...(0,n.Il)(a.generationDiagnostics.metrics),...(0,n.NJ)(a.generationDiagnostics.llm.callBreakdown)]},{subtitle:"后台诊断"})),a.documentId)try{let b=function(a){let b=a.qualityReport,c=a.exportGate,d=new Date(a.generatedAt??Date.now()),e=b.mode?fR[b.mode]:"未判定(按明标口径)",f=[];f.push(`# 交付三件套报告:${a.title}`),f.push(""),f.push(`> 文档 ID:${a.documentId??"未提供"};生成时间:${d.toISOString()}`),f.push(`> 评分口径:${c2}(主尺=六维;招标六项/专业分为从属展示口径)`),f.push(`> 导出门禁:${c.passed?"通过":`未通过(${c.blockingIssues.length} 项阻断,文档照常可导出,人工复核清单见下)`};标书类型:${e}`),f.push(""),f.push("## 一、评分报告"),f.push(""),f.push("### 1.1 六维质量评分(主尺)");let g=b.dimensions||[];if(g.length>0)for(let a of(f.push("| 维度 | 得分 | 权重 | 构成明细 |"),f.push("|---|---|---|---|"),g))f.push(`| ${a.label} | ${a.score} | ${Math.round(100*a.weight)}% | ${a.detail??"—"} |`);else f.push("- (六维构成明细缺失——评级输入不完整,仅综合分可用)");if(f.push(`- 综合评分:**${b.overall}**/100;交付置信度 **${b.deliveryProbability}%** / 目标 ${b.target}%;低雷同性 ${b.scores?.uniqueness??"—"}${b.passed?";已达当前质量目标":";未达目标(按第三节预估路径补强)"}`),f.push(""),f.push("### 1.2 专业度评分(从属口径,交付主尺见六维)"),f.push(`- 总分 ${a.professionalScore.total}/100(${a.professionalScore.grade}):${a.professionalScore.summary}`),a.professionalScore.dimensions.length>0)for(let b of(f.push(""),f.push("| 维度 | 得分 | 权重 | 明细 |"),f.push("|---|---|---|---|"),a.professionalScore.dimensions))f.push(`| ${b.label} | ${b.score} | ${Math.round(100*b.weight)}% | ${b.detail} |`);if(a.professionalScore.topIssues.length>0)for(let b of(f.push(""),f.push("待修复:"),a.professionalScore.topIssues.slice(0,12)))f.push(`- ${fP(b,220)}`);if(f.push(""),f.push("### 1.3 阻断明细(终门禁)"),0===c.blockingIssues.length)f.push("- 无阻断:终检检测器全部通过。");else for(let a of c.blockingIssues){let b=a.severity?`[${a.severity}]`:`[${a.level}]`,c=a.chapterId?`(章:${a.chapterId}${a.sectionTitle?` / ${a.sectionTitle}`:""})`:"";f.push(`- ${b} ${fP(a.message,320)}${c}`),a.suggestion&&f.push(` - 建议:${fP(a.suggestion,260)}`)}let h=c.manualReviewIssues||[];if(h.length>0){for(let a of(f.push(""),f.push(`### 1.4 人工复核清单(${h.length} 项,不阻断导出)`),f.push(""),f.push("> 下列发现由声明「无自动修复路径」的检测器产出,需人工判断后处理;系统不会自动改写。"),h.slice(0,30))){let b=a.provenance?.detectorId?`[${a.provenance.detectorId}]`:"";f.push(`- ${b} ${fP(a.message,320)}`),a.suggestion&&f.push(` - 建议:${fP(a.suggestion,260)}`)}h.length>30&&f.push(`- …另有 ${h.length-30} 项未展开`)}if(c.checklist.length>0){let a=c.checklist.filter(a=>!a.passed);f.push(""),f.push(`- 门禁复核清单:通过 ${c.checklist.length-a.length}/${c.checklist.length}${a.length>0?`;未过项:${a.slice(0,10).map(a=>a.label).join("、")}${a.length>10?` 等 ${a.length} 项`:""}`:""}`)}for(let b of(f.push(""),f.push("## 二、进度(阶段/耗时/修复轮次)"),f.push(""),f.push(`### 2.1 阶段执行(共 ${a.stages.length} 个阶段)`),a.stages)){let a=b.subtitle||b.roleId,c=b.message?`:${fP(b.message,240)}`:"";f.push(`- [${fQ[b.status]}] ${a}${c}`)}f.push(""),f.push("### 2.2 耗时(按耗时降序)");let i=[...a.metrics].sort((a,b)=>b.durationMs-a.durationMs);if(0===i.length)f.push("- (无性能指标记录)");else for(let a of i){var j;f.push(`- ${a.name}:${!Number.isFinite(j=a.durationMs)||j<0?"0ms":j<1e3?`${Math.round(j)}ms`:j<6e4?`${(j/1e3).toFixed(1)}s`:`${(j/6e4).toFixed(1)}min`}`)}for(let b of(f.push(""),f.push("### 2.3 修复轮次(detectorFixerRegistry 轮序声明表口径)"),o.rk)){let c=[...a.stages].reverse().find(a=>a.roleId===b);if(c){let a=c.message?` — ${fP(c.message,200)}`:"";f.push(`- ${b}:${fQ[c.status]}${a}`)}else f.push(`- ${b}:未记录(无触发或静默通过)`)}f.push(""),f.push("## 三、下轮预估目标(按当前六维缺口)"),f.push("");let k=function(a){let b=(a.dimensions||[]).filter(a=>Number.isFinite(a.score)&&Number.isFinite(a.weight)&&a.weight>0);if(0===b.length)return;let c=b.reduce((a,b)=>a+b.weight,0),d=fO(b.reduce((a,b)=>a+b.score*b.weight,0)/c),e=Math.min(1,(a.scores?.uniqueness??90)/90),f=b.map(a=>({key:a.key,label:a.label,score:a.score,gap:Math.max(0,100-a.score),effectiveGain:fO(Math.max(0,100-a.score)*(a.weight/c)*e),detail:a.detail})).sort((a,b)=>b.effectiveGain-a.effectiveGain||a.label.localeCompare(b.label,"zh-Hans-CN")),g=fO(a.target-a.overall),h=null;if(g>0){let b=[],c=0;for(let a of f)if(a.effectiveGain<=0||(b.push(a),(c=fO(c+a.effectiveGain))>=g))break;h={target:a.target,gap:g,picks:b,covered:c}}return{dimensions:f,currentWeighted:d,uniquenessFactor:e,projectedOverall:Math.min(100,Math.round(100*e)),pathToTarget:h}}(b);if(k){for(let a of(f.push("| 维度 | 当前分 | 提升空间 | 对综合分贡献 | 补强方向 |"),f.push("|---|---|---|---|---|"),k.dimensions))f.push(`| ${a.label} | ${a.score} | ${a.gap>0?`+${a.gap}`:"0(满分)"} | ${a.effectiveGain>0?`+${a.effectiveGain.toFixed(1)}`:"0"} | ${a.detail?fP(a.detail,120):"—"} |`);f.push(`- 当前加权综合分:${k.currentWeighted.toFixed(1)}/100(uniqueness 因子 ${k.uniquenessFactor.toFixed(2)})`);let a=k.projectedOverall<b.target;if(f.push(`- 预计总分上限:**${k.projectedOverall}**/100(全维补满、uniqueness 不变的理论口径${a?`;低于目标 ${b.target}——受低雷同性因子 ${k.uniquenessFactor.toFixed(2)} 约束,需同步提升 uniqueness`:""};实际以重生成/续修产物复评)`),k.pathToTarget){let{target:a,gap:b,picks:c,covered:d}=k.pathToTarget,e=c.map(a=>`${a.label}(+${a.effectiveGain.toFixed(1)})`).join(" → ");d>=b?f.push(`- 达标路径(目标 ${a}):补强 ${e},合计 +${d.toFixed(1)} ≥ 缺口 ${b.toFixed(1)}。`):f.push(`- 达标路径(目标 ${a}):补强 ${e},合计 +${d.toFixed(1)} < 缺口 ${b.toFixed(1)}——六维补满仍不足,须按上限提示先提升低雷同性(uniqueness)再复评。`)}else f.push(`- 当前已达目标 ${b.target},无需补强路径(维持口径与阻断清零即可)。`)}else f.push("- 六维构成明细缺失,无法计算下轮预估(降级不猜数;补全评级输入后自动生成)。");return f.push(""),f.join("\n")}({documentId:a.documentId,title:a.template.outputTitle,qualityReport:a.qualityBundle.qualityReport,professionalScore:a.professionalScore,exportGate:a.qualityBundle.finalExportGate,stages:a.finalStages,metrics:a.generationDiagnostics.metrics}),c=function(a,b,c){let d=function(a,b){let c=b.trim().replace(/[^A-Za-z0-9_-]/gu,"_");if(!c)throw Error("交付报告文件名缺少文档 ID");return fM().join((0,fN.Gl)(a),"reports",`${c}-review.md`)}(a,b);fK().mkdirSync(fM().dirname(d),{recursive:!0});let e=`${d}.${process.pid}.${Date.now()}.tmp`;return fK().writeFileSync(e,c,"utf8"),fK().renameSync(e,d),d}(a.projectRoot,a.documentId,b),d=a.qualityBundle.finalExportGate.blockingIssues.length;a.finalStages.push((0,j.X5)({type:"reference",roleId:"delivery-review-report",status:"success",message:`交付三件套报告已产出:${c}`,details:[a.qualityBundle.qualityReport.summary,`专业度(从属口径):${a.professionalScore.summary}`,`阻断:${d} 项${d>0?"(人工复核清单随报告归档,不阻断交付)":"(终检检测器全部通过)"}`,"下轮预估目标:按当前六维缺口计算各维提升空间与达标路径(见报告第三节)"]},{subtitle:"交付报告"}))}catch(c){let b=c instanceof Error?c.message:String(c);a.finalStages.push((0,j.X5)({type:"reference",roleId:"delivery-review-report",status:"failed",message:`交付三件套报告产出失败(不阻断交付):${b}`},{subtitle:"交付报告"}))}}let fT={prefixCacheHitRateFloor:.4,budgetDropRatioCeiling:.3,llmFailureRateCeiling:.1};async function fU(a){let b=function(a){let b=[],c=a.llm.promptCacheHitTokens??0,d=c+(a.llm.promptCacheMissTokens??0),e=d>0?c/d:null;null!==e&&e<fT.prefixCacheHitRateFloor&&b.push(`固定前缀缓存命中率 ${(100*e).toFixed(1)}% 低于 40%:固定前缀未收敛,检查 L0/L2 恒定段结构`);let f=a.llm.reasoningTokens??0;f>0&&b.push(`推理 token 累计 ${f}:disableThinking 未生效,检查模型 provider 配置`);let g=a.evidence.raw>0?a.evidence.budgetDropped/a.evidence.raw:null;null!==g&&g>fT.budgetDropRatioCeiling&&b.push(`证据预算裁剪 ${(100*g).toFixed(1)}%(${a.evidence.budgetDropped}/${a.evidence.raw}):裁剪过重,疑似预算配置失配`);let h=a.llm.calls>0?a.llm.failures/a.llm.calls:null;return null!==h&&h>fT.llmFailureRateCeiling&&b.push(`LLM 失败率 ${(100*h).toFixed(1)}%(${a.llm.failures}/${a.llm.calls}):失败率偏高,检查限流与重试策略`),{alerts:b,metrics:{prefixCacheHitRate:e,reasoningTokens:f,budgetDropRatio:g,llmFailureRate:h}}}(a.generationDiagnostics),c=process.memoryUsage(),d=Math.round(c.rss/1048576),e=Math.round(c.heapUsed/1048576),f=function(){let a=Number(process.env.DOCUMENT_MEMORY_ALERT_MB??3072);return Number.isFinite(a)&&a>0?a:3072}();console.log(`[gen] memory(finalize) rss=${d}MB heap=${e}MB threshold=${f}MB`);let g=d>=f?[...b.alerts,`进程内存 rss=${d}MB 超过告警阈值 ${f}MB:大文档生成建议 NODE_OPTIONS=--max-old-space-size=4096,并控制并发生成任务数(DOCUMENT_MAX_CONCURRENT_GENERATIONS)`]:b.alerts;a.telemetry.healthAlerts=g,0!==g.length&&a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-health-diagnosis",status:"skipped",message:`自动健康诊断:${g.length} 项告警(不阻断,供配置优化参考)`,details:g},{subtitle:"健康诊断"}))}async function fV(a){var b;(0,o.wF)();let{chapterDraftsByOrder:c,chapterGenerationStagesByOrder:e,chapterGenerationStages:f,effectiveChapters:g,input:q,failedChapterMessages:r}=a,{requirement:t}=q,v=function(a){let{signal:b,requirement:c}=a.input;return{input:a,template:a.template,effectiveChapters:a.effectiveChapters,requirement:c,signal:b,projectRoot:a.projectRoot,projectId:a.projectId,documentId:a.documentId,projectMaterialSummary:a.projectMaterialSummary,documentSpec:a.documentSpec,documentBudget:a.documentBudget,promptBindings:a.promptBindings,promptDocumentRules:a.promptDocumentRules,domainProfile:a.domainProfile,scopeConflicts:a.scopeConflicts,evaluationCriteriaItems:a.evaluationCriteriaItems,tenderRequirements:a.tenderRequirements,requirementAssignments:a.requirementAssignments,requirementsSimilarity:a.requirementsSimilarity,factTokenScopeClassifier:a.factTokenScopeClassifier,professionalDepthClassifier:a.professionalDepthClassifier,blueprintData:a.blueprintData,bidComposition:a.bidComposition,billFactLock:a.billFactLock,drawingFactLock:a.drawingFactLock,requirementSemantics:a.requirementSemantics,generationDiagnostics:a.generationDiagnostics,repairPromptTexts:a.repairPromptTexts,progressStages:a.progressStages,chapterGenerationStages:a.chapterGenerationStages,emitProgress:a.emitProgress,withProgressHeartbeat:a.withProgressHeartbeat,missingItems:a.missingItems,failedChapterMessages:a.failedChapterMessages,indexHealth:a.indexHealth,webResearchReport:a.webResearchReport,retrievalCoverageReports:a.retrievalCoverageReports,writingTaskBrief:a.writingTaskBrief,clarificationOverrides:a.clarificationOverrides,clarificationAmendments:a.clarificationAmendments,globalConsistencyIssues:a.globalConsistencyIssues,agentWorkflow:a.agentWorkflow,factExtractionPromptTexts:a.factExtractionPromptTexts,readiness:a.readiness,allEvidence:a.allEvidence,facts:{},structuredFacts:[],governedStructuredFacts:[],factsModel:void 0,chapterDrafts:[],finalChapterDrafts:[],finalMarkdown:"",validationIssues:[],baseValidationIssues:[],executionStages:[],finalGateRepairStages:[],sources:[],qualityBundle:void 0,scheduleAuthority:void 0,assemblyRateAuthority:void 0,scaleSummary:void 0,supportAuthority:void 0,laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,surfaceFixContext:{laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,resourceBreakdownAuthority:void 0,supportFormAuthority:void 0},decisionLockEntries:[],finalStages:[],reviewChecklist:[],telemetry:void 0,professionalScore:void 0,templatingReview:{issues:[],reviewed:!1},assets:[],validation:void 0,rebuildFinalMarkdown:()=>"",recomputeFinalValidationBundle:async()=>void 0}}(a),w=c.filter(a=>!!a);v.chapterDrafts=w,f.push(...e.filter(a=>!!a));let x=0===(b={chapterDraftCount:w.length,failedChapterMessages:r}).chapterDraftCount?`章节生成未完成:${b.failedChapterMessages.join(";")||"没有生成任何有效章节"}`:null;if(x)throw Error(x);await u(v),await dW(v),function(a){let b=(0,s.dW)(a.chapterDrafts);b.insertedIn&&(a.chapterDrafts=b.chapters,a.generationDiagnostics.llm.lastInfo=`安全目标承诺句兜底:${b.insertedIn}(写作侧未写出安全目标,按投标人承诺口径补入)`);let c=(0,k._C)(a.bidComposition),d=(0,k.kO)(a.bidComposition),e=a.bidComposition?.formatRules.cover==="forbidden",f=(0,ad.rs)((0,ad.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,exportSettings:a.template.exportSettings,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.chapterDrafts,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:a.chapterDrafts.map(b=>({id:b.id,title:b.title,chars:(0,i.V7)(b.content),status:(0,n.DR)(b,a.documentBudget.chapterTargets.get(b.id)),updatedAt:Date.now()})),checkpointChapters:a.chapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}),a.chapterDrafts,{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e});a.finalChapterDrafts=f.chapters.map(b=>{let c=a.effectiveChapters.find(a=>a.id===b.id)||b;return{...b,sections:b.sections||[],content:(0,n.w_)(b.content,c)}}),a.finalMarkdown=(0,ad.rs)((0,ad.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,exportSettings:a.template.exportSettings,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.finalChapterDrafts,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:[],checkpointChapters:a.finalChapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}),a.finalChapterDrafts,{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}).markdown,a.finalMarkdown=(0,s._D)((0,n.Ht)((0,ad.bR)((0,n.Xr)((0,ad.kT)((0,ad.K7)(dR((0,n.jO)(a.finalMarkdown,a.structuredFacts,{bodyTableForbidden:c}),a.projectMaterialSummary))))))).markdown,c||(a.finalMarkdown=(0,c_.gA)(a.finalMarkdown),a.finalMarkdown=(0,c_.aH)(a.finalMarkdown,dX(a),{substituteTable:b=>(0,dx.Ik)(a.blueprintData,b)}).markdown),a.finalMarkdown=(0,ae.u7)(a.finalMarkdown,{plan:a.bidComposition?.appendixPlan||[],blueprintData:a.blueprintData})}(v),await dZ(v),await d$(v),await er(v),await es(v),await eu(v),await aA(v),await eX(v),await e6(v),await fk(v),await fn(v),await fq(v),await e_(v),await fu(v),await e5(v),await fw(v),await fx(v),await fy(v),await fz(v),await fA(v),await fv(v),await e2(v),await e0(v),await e1(v),await e$(v);{let a=(0,p.tI)(v.finalMarkdown,v.truthValues||[]);if(a.inserted.length>0){v.finalMarkdown=a.markdown;let b=(0,j.X5)({type:"validation",roleId:"caliber-placement-backfill",status:"success",message:`口径链尾回填:${a.inserted.length} 项项目级口径在正文逐字缺位,已按真值层生效值补写(${a.inserted.map(a=>`${a.attribute}=${a.value}`).slice(0,6).join("、")})`},{subtitle:"口径回填"});(0,j.fx)(v.executionStages,b),await v.recomputeFinalValidationBundle()}}await fB(v),await fC(v),await fD(v),await fE(v),await e3(v);{let a=function(a){let b=a.finalMarkdown;if(!b)return{markdown:b,restored:0,labels:[]};let c=cD(b),e=cp(c),f=cq(c);if(0===e.length&&0===f.length)return{markdown:b,restored:0,labels:[]};let g=b,h=0,i=[];for(let b of a.finalChapterDrafts)for(let a of(b.content??"").split(/(?<=[。;\n])/u)){let b=a.trim();if(b.length<8)continue;let c=(0,aH.eI)(b).text;if(c===b||c.trim().length<8||!(cp(b).some(a=>e.some(b=>cv(a,b)))||cq(b).some(a=>f.some(b=>cw(a,b)))))continue;let j=function(a){let b=a.split(/([,,、;;])/u),c=[];for(let a=0;a<b.length;a+=2){let e=b[a]??"";if(eK(e)&&!function(a){return!!eK(a)&&!!(cq(a).length>0||(d||(d=RegExp(cm.source,"u")),d.test(a)))&&!eK(a.replace(cn,"").replace(cm,""))}(e))continue;c.push(e);let f=b[a+1];f&&a+2<b.length&&c.push(f)}return c.join("").replace(/^[,,、]+/u,"").replace(/[,,、]+$/u,"")}(b);if(j===c||!g.includes(c)||g.includes(j))continue;let k=cp(j).filter(a=>!cp(c).some(b=>cv(b,a)));if(0!==k.length||0!==cq(j).length)for(let a of(g=g.replace(c,()=>j),h+=1,k)){let b=cs(a);i.includes(b)||i.push(b)}}return 0===h||eD(g)<eD(b)?{markdown:b,restored:0,labels:[]}:{markdown:g,restored:h,labels:i}}(v);if(a.restored>0){v.finalMarkdown=a.markdown,await v.recomputeFinalValidationBundle();let b=`链尾编制依据引用回补:${a.restored} 处被链尾指向型清洗误删的标准引用小句按章草稿恢复(覆盖 ${a.labels.slice(0,6).join("、")}${a.labels.length>6?" 等":""})`;v.generationDiagnostics.llm.lastInfo=b,(0,j.fx)(v.finalGateRepairStages,(0,j.X5)({type:"reference",roleId:"basis-regulations-tail-citation-replay",status:"success",message:b,details:a.labels.slice(0,12)},{subtitle:"链尾编制依据引用回补"}))}}{let a=function(a){let b=cE(a.finalMarkdown);if(0===b.usedNotDeclared.length)return{inserted:0,labels:[]};let c=cD(a.finalMarkdown);if(!c)return{inserted:0,labels:[]};let d=b.usedNotDeclared.filter(a=>!eG(c,a));if(0===d.length)return{inserted:0,labels:[]};let e=eI(a.finalMarkdown,d.map(b=>eH(b,a.finalMarkdown)));return e?{inserted:d.length,labels:d.map(cF),markdown:e}:{inserted:0,labels:[]}}(v);if(a.inserted>0&&a.markdown){v.finalMarkdown=a.markdown,await v.recomputeFinalValidationBundle();let b=`链尾编制依据回补:${a.inserted} 条引用未声明的标准补入编制依据小节(${a.labels.slice(0,6).join("、")})`;v.generationDiagnostics.llm.lastInfo=b,(0,j.fx)(v.finalGateRepairStages,(0,j.X5)({type:"reference",roleId:"basis-regulations-tail-backfill",status:"success",message:b,details:a.labels.slice(0,12)},{subtitle:"链尾编制依据回补"}))}}await e0(v),await fS(v),await fU(v);let y=v.finalChapterDrafts.map(a=>({...a,evidence:(0,h.QR)(a.evidence||[],{preservePinned:!0})}));v.finalChapterDrafts=y;let z=(0,k.Lf)(v.template.exportSettings,v.bidComposition?.formatRules);return z.applied.length>0&&(0,j.fx)(v.finalStages,(0,j.X5)({type:"reference",roleId:"tender-format-applied",status:"success",message:`招标规定排版已应用(${z.applied.length} 项):${z.applied.slice(0,5).join("、")}`,details:["来源:招标文件「格式要求」条款(正文/标题字体、字号、行距、装订线、页数上限)","优先级:招标规定 > 模板导出设置(前者为强制要求)",...z.applied]},{subtitle:"招标排版应用"})),{templateId:v.template.id,templateName:v.template.name,title:v.template.outputTitle,requirement:t||"",projectRoot:v.projectRoot,projectId:v.projectId,exportSettings:z.settings,generationSettings:v.template.generationSettings,facts:v.facts,structuredFacts:v.structuredFacts,factsModel:v.factsModel,chapters:y,sources:v.sources,missingItems:[...new Set(v.missingItems)],validation:v.validation,validationIssues:v.validationIssues,exportGate:v.qualityBundle.finalExportGate,executionStages:v.finalStages,assets:v.assets,partialChapters:v.finalChapterDrafts.map(a=>({id:a.id,title:a.title,chars:(0,i.V7)(a.content),status:(0,n.DR)(a,v.documentBudget.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:y,promptRules:v.promptDocumentRules,agentWorkflow:v.agentWorkflow,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:v.generationDiagnostics,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:v.template,chapters:g,requirement:t}),knowledgeCoverage:v.qualityBundle.knowledgeCoverage,factTraces:v.qualityBundle.factTraces,chapterCoverage:v.qualityBundle.chapterCoverage,retrievalCoverage:v.retrievalCoverageReports,qualityReport:v.qualityBundle.qualityReport,repairStrategies:v.qualityBundle.repairStrategies,reviewChecklist:v.reviewChecklist,professionalScore:v.professionalScore,templatingReviewIssues:v.templatingReview.issues,authorityAudit:v.authorityAuditReport,suspensionChecklist:v.suspensionChecklist??(v.qualityBundle.finalExportGate.passed?void 0:(0,l.aF)(v.qualityBundle.finalExportGate.blockingIssues,v.finalChapterDrafts)),writingTaskBrief:v.writingTaskBrief,workflowVersion:m.x,telemetry:v.telemetry},generatedAt:Date.now(),markdown:v.finalMarkdown,bidComposition:v.bidComposition}}var fW=c(71678),fX=c(29055),fY=c(30111);let fZ=[{id:"overview",title:"工程概况与总体理解",requiredSectionPatterns:[/编制依据|编制说明/u,/工程概况|项目概况|基本概况/u,/现场踏勘|施工条件|现场条件/u],chapterPatterns:[/概况|总体|理解|说明|编制|项目/u],remedy:"应设置工程概况章节,包含编制依据、工程基本概况、现场条件与总体理解。",level:"required"},{id:"major-content",title:"项目主要施工内容",requiredSectionPatterns:[/主要施工内容|主要施工项目|施工内容/u],chapterPatterns:[/概况|总体|理解|主要施工|工程/u],remedy:'必须包含"项目主要施工内容"小节,按工作包展开施工概况、施工流程、施工方法。',level:"required"},{id:"key-difficulty",title:"重难点分析与对策",requiredSectionPatterns:[/重点.*难点|难点.*对策|重难点/u],chapterPatterns:[/概况|总体|理解|重点|难点|施工/u],remedy:"应设置项目特点、重点、难点分析小节,并逐项给出应对措施与责任闭环。",level:"required"},{id:"deployment",title:"施工部署与施工组织",requiredSectionPatterns:[/施工部署|总体部署|流水|施工顺序|施工区段/u],chapterPatterns:[/部署|组织|总体|方案/u],remedy:"应设置施工部署小节,明确流水段划分、施工顺序与资源调配。",level:"required"},{id:"schedule",title:"进度计划与工期保障",requiredSectionPatterns:[/进度计划|工期|节点/u],chapterPatterns:[/进度|工期|计划|保障/u],remedy:"应设置进度计划与工期保障小节,含总进度计划、关键节点与纠偏措施。",level:"required"},{id:"quality",title:"质量保证体系与措施",requiredSectionPatterns:[/质量/u],chapterPatterns:[/质量|验收|保障|措施/u],remedy:"应设置质量保证体系与措施小节,含质量目标、三检、隐蔽验收、通病防治。",level:"required"},{id:"safety",title:"安全文明施工与危大工程管控",requiredSectionPatterns:[/安全/u,/危大工程|危大/u],chapterPatterns:[/安全|文明|风险|危大|保障|措施/u],remedy:"应设置安全管理与危大工程管控小节,含危险源辨识、危大清单、专项方案。",level:"required"},{id:"resources",title:"劳动力材料机械设备配置",requiredSectionPatterns:[/劳动力|机械设备|材料.*计划|资源配置|人材机/u],chapterPatterns:[/资源|劳动力|机械|材料|设备|计划/u],remedy:"应设置资源配置小节,含分阶段劳动力、机械设备投入与材料进场计划。",level:"required"},{id:"environment",title:"绿色文明施工与环保措施",requiredSectionPatterns:[/文明施工|扬尘|噪声|绿色|环保|四节/u],chapterPatterns:[/文明|绿色|环保|扬尘|噪声|保障|措施/u],remedy:"应设置文明施工与绿色施工小节,含扬尘噪声管控与四节一环保措施。",level:"required"},{id:"emergency",title:"应急管理体系",requiredSectionPatterns:[/应急/u],chapterPatterns:[/应急|安全|保障|措施/u],remedy:"应设置应急管理小节,含应急组织、物资储备与专项预案。",level:"recommended"}],f$={building:[{id:"key-difficulty",title:"危大工程专项管控(房建)",requiredSectionPatterns:[/深基坑|高支模|起重吊装|脚手架/u],chapterPatterns:[/危大|安全|专项/u],remedy:"房建项目应对深基坑、高支模、起重吊装、脚手架等危大工程逐项给出专项方案与安全管理措施。",level:"recommended"}],municipal:[{id:"key-difficulty",title:"交通导改与管线保护(市政)",requiredSectionPatterns:[/交通导改|交通导行|占道施工/u,/管线保护|管线探测/u],chapterPatterns:[/交通|管线|安全|专项|保障/u],remedy:"市政项目应设置交通导改与既有管线保护专项内容。",level:"recommended"}],renovation:[{id:"key-difficulty",title:"居民协调与既有保护(改造)",requiredSectionPatterns:[/居民|扰民|既有.*保护|不中断/u],chapterPatterns:[/居民|协调|保护|保障|专项/u],remedy:"改造项目应设置居民沟通协调与既有设施保护专项内容。",level:"recommended"}],decoration:[{id:"key-difficulty",title:"成品保护与交叉施工(装饰)",requiredSectionPatterns:[/成品保护/u,/交叉施工|工序穿插/u],chapterPatterns:[/成品保护|交叉|协调|保障|专项/u],remedy:"装饰项目应设置成品保护与交叉施工工序优化专项内容。",level:"recommended"}]};function f_(a){return(0,cj.GQ)(a).replace(/\s+/gu,"").toLowerCase()}function f0(a){return f_(`${a.title} ${(a.sections||[]).join(" ")}`).slice(0,800)}function f1(a){var b;let c,d=(b=a.chapters,[...fZ].map(a=>{let c=[],d=new Set;for(let e of b){let b=f_(`${e.title} ${(e.sections||[]).join(" ")}`);for(let f of a.requiredSectionPatterns)f.test(b)&&!d.has(f)&&(d.add(f),c.push(e.title))}let e=[...new Set(c)],f=a.requiredSectionPatterns.filter(a=>!d.has(a)).map(a=>(function(a){let b=a.source.replace(/[\\/^$.*+?()[\]{}]/gu,"").replace(/u$/u,"");return b.split("|").map(a=>a.trim()).find(Boolean)||b})(a)),g=d.size===a.requiredSectionPatterns.length?e.length>1?"fragmented":"satisfied":"missing";return{groupId:a.id,groupTitle:a.title,level:a.level,status:g,carrierChapters:e,missingSections:f,remedy:a.remedy}})),e=[],f=d.filter(a=>"required"===a.level&&"missing"===a.status);for(let a of f)e.push({level:"error",severity:"blocker",message:`评标结构缺失:${a.groupTitle}(缺少:${a.missingSections.join("、")})`,suggestion:a.remedy});for(let a of d.filter(a=>"fragmented"===a.status))e.push({level:"warning",severity:"warning",message:`${a.groupTitle} 小节散落在 ${a.carrierChapters.length} 个章节(${a.carrierChapters.join("、")}),结构可能失真`,suggestion:"建议将同类内容集中到一个承载章节,避免章节间职责重叠。"});for(let b of a.chapters){let a=(b.sections||[]).length;a>18&&e.push({level:"warning",severity:"warning",message:`${b.title} 规划小节 ${a} 个,超过 18 个上限,易产生内容膨胀与重复`,suggestion:"合并语义相近的小节,或将细分内容下移为三级小节而非二级小节。"})}let g=a.chapters.map(a=>({...a,sections:[...a.sections||[]]})),h=new Set;for(let a of f){let b=fZ.find(b=>b.id===a.groupId);if(!b)continue;let c=g.findIndex(a=>{let c=f_(a.title);return b.chapterPatterns.some(a=>a.test(c))&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线/u.test(c)}),d=g[c>=0?c:0];for(let c of a.missingSections.filter(a=>!h.has(a))){h.add(c);let a=!function(a){let b=(0,cj.GQ)(a).replace(/\s+/gu,"");return b.length>0&&b.length<=3&&/^[\u4e00-\u9fa5]+$/u.test(b)}(c)?c:b.title;!(0,fW.xb)(a)&&(d.sections.some(b=>f_(b).includes(f_(a))||f_(a).includes(f_(b)))||d.sections.push(a))}}let i=/^(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施$/u;for(let a of g){if(!/人[、,,]材[、,,]机/u.test(a.title))continue;let b=new Set,c=[];for(let d of a.sections){if(f_(d)===f_(a.title))continue;let e=i.exec(d.trim());e?b.has(e[1])||(b.add(e[1]),c.push(d.trim())):c.push(d)}for(let a of["人","材","机"])b.has(a)||c.push(`确保${a}的保障体系与措施`);c.length!==a.sections.length&&(a.sections=c)}if(a.evaluationItems?.length){let b=a.chapters.map(f0);for(let{item:d}of(c=function(a,b,c){let d=[],e=a.map(f0);for(let a of b){let b=a.title;if(!b||e.some(a=>(function(a,b){let c=f_(b);return!!c&&(a.includes(c)||c.includes(a.slice(0,40)))})(a,b)))continue;let f=0;if(c?.semanticSimilarity)for(let a of e)f=Math.max(f,c.semanticSimilarity(b,a));f>=aX.Eh||d.push({item:a,title:b,bestSimilarity:c?.semanticSimilarity?f:void 0})}return{items:b,uncovered:d}}(a.chapters,a.evaluationItems,{semanticSimilarity:a.semanticSimilarity})).uncovered){let c=d.title;if(!c||(0,cj.Fe)(c)||(0,cj.ob)(c)||(0,fW.xb)(c))continue;let f=b.reduce((b,d,e)=>{let f=a.semanticSimilarity?a.semanticSimilarity(c,d):+!!d.includes(f_(c));return f>b.score?{index:e,score:f}:b},{index:-1,score:-1}).index,h=g[f>=0?f:0];h.sections.some(a=>f_(a).includes(f_(c))||f_(c).includes(f_(a)))||(h.sections.push(c),h.purpose=`${h.purpose||""};系统已按招标文件技术评审条目自动补足小节“${c}”,必须基于项目资料与适用技术展开实质内容。`,e.push({level:"warning",severity:"warning",message:`评分标准条目“${c}”无承接章节,已自动补小节“${c}”至“${h.title}”`,suggestion:"请确认补充小节与招标文件评审条目口径一致。"}))}}for(let b of(0,fX.y)(a))if("general"!==b)for(let a of f$[b]){let b=f_(g.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" "));if(a.requiredSectionPatterns.some(a=>a.test(b)))continue;let c=g.findIndex(b=>{let c=f_(b.title);return a.chapterPatterns.some(a=>a.test(c))}),d=g[c>=0?c:0];(0,fW.xb)(a.title)||d.sections.push(a.title)}return{diagnostics:d,issues:e,enrichedChapters:g,criteriaAudit:c}}function f2(a){return a.replace(/\s+/gu,"").toLowerCase()}var f3=c(81892),f4=c(30355),f5=c(2773),f6=c(38115),f7=c(31129);async function f8(a){a.planning.generationDiagnostics.metrics.push({name:"phase:plan",startedAt:a.planning.planPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-a.planning.planPhaseStartedAt}),a.chapterLoop.draftPhaseStartedAt=Date.now();let b=(0,v.UO)(a.blueprint.billFactLock,a.planning.effectiveChapters),c=(0,bX.ym)(a.understanding.writerEvidence,{基坑开挖深度:a.understanding.canonicalFacts?.byKey?.excavation_depth?.value}),d=function(a){let b=[],c=[],d=[],e=new Set,f=0,g=0,h=0,i=0,j=a.maxAmendments??80;for(let k of a.texts||[]){let a=String(k?.text||""),l=String(k?.source||"");if(!a||!bf(l))continue;f+=1;let m=new Set;for(let d of function(a){let b=[],c=[...a.matchAll(bt)];for(let d=0;d<c.length;d+=1){let e=c[d],f=e.index||0,g=f+e[0].length,h=a.slice(g,by(a,g).end).trim(),i=bz(h);if(!i)continue;let j=by(a,f).start,k=c[d-1],l=k?.index===void 0?0:k.index+k[0].length,m=Math.max(a.slice(j,f).trim()?j:function(a,b){let c=b;for(;c>0;){let b="\n"===a[c-1]?c-1:c,d=a.lastIndexOf("\n",Math.max(0,b-1))+1;if(a.slice(d,b).trim())return d;c=d}return 0}(a,j),l);b.push({question:function(a){let b=[...a.matchAll(RegExp(bu.source,"gu"))],c=b[b.length-1],d=c?.index===void 0?a:a.slice(c.index+c[0].length),e=[...d.matchAll(RegExp(bv.source,"gu"))],f=e[e.length-1];if(f?.index!==void 0&&f.index>0){let a=d.slice(f.index+f[0].length);a.trim().length>=6&&(d=a)}return bx(d).slice(-300)}(a.slice(m,f)),answer:i,questionParagraph:a.slice(m,f).trim(),answerParagraph:h})}return b}(a)){g+=1,m.add(d.questionParagraph),m.add(d.answerParagraph);let a=(function(a){let b=a.filter(a=>"cancel"===a.kind),c=a.map(a=>{if("cancel"===a.kind)return a;let c=a.after;for(let a of b)a.object.length>=3&&c.includes(a.object)&&(c=c.replace(a.object,""));return c===a.after?a:{...a,after:bP(c)}});return c.filter((a,b)=>!(a.after.length<2)&&!c.some((c,d)=>d!==b&&!(c.after.length<4)&&(!!((0,w.K3)(c.object)===(0,w.K3)(a.object)&&"confirm"===a.kind&&a.after.includes(c.after))||c.after.length<a.after.length&&a.after.includes(c.after)&&bE.test(a.action))))})(function(a,b,c){let d=[],e=b.slice(0,200),f=function(a){let b=bR(a);if(b.length>0)return b[0].object;let c=bQ(a);for(let a=c.length-1;a>=0;a-=1){let b=c[a],d=bO(b.split(/是否|要不要|需不需要|可否|能否|多少|多大|怎么|如何|为何|为什么|请明确|请确认|请问|有无/u)[0]||b);if(d.length>=2)return d}return bO(c[c.length-1]||a)}(a),g=bR(a),h={source:c,excerpt:e},i=bQ(b);for(let a=0;a<i.length;a+=1){let b=i[a];if(b.length<2)continue;let c=bA.exec(b);if(c){let e=(()=>{let b=i[a+1];return!b||!/^(?:并|且|同时|另|还|再)/u.test(b)||bA.test(b)||bB.test(b)?"":b})(),j=bP(`${b.slice(c.index+c[0].length)}${e?`。${e}`:""}`),k=bO(b.slice(0,c.index));if(j.length<2||j.length>60||bH.test(j)||bI.test(j))continue;let l=[...k.length>=2&&k!==f&&!bJ.test(k)?[bS(k)]:[],...g.filter(a=>a.complement!==j).map(a=>bS(a.complement))];d.push({kind:"replace",object:k.length>=2&&k!==f?k:f,action:c[0].trim(),after:j,before:l,...h});continue}let e=bB.exec(b);if(e){let a=bO(b.slice(0,e.index)),c=a.length>=2?a:f,g=bP(b.slice(e.index+e[0].length)),i=`${e[0]}${g}`.slice(0,40);if(/^不予/u.test(e[0])&&bJ.test(b))continue;let j=a.length>=2&&(bC.test(e[0])||"strong"===bN(a))?[bS(a)]:[];d.push({kind:"cancel",object:c,action:e[0].trim(),after:i,before:j,...h});continue}}let j=bD.exec(b);if(j&&!bH.test(b)&&!bI.test(b)){let a=bP(bz(b)),c=bO(/以([^,。;]{2,12})为(?:准|分界(?:线|点)?|依据|界限|原则)/u.exec(a)?.[1]||f);a.length>=4&&d.push({kind:"confirm",object:c||f,action:j[0].slice(0,16),after:a,before:[],...h})}for(let c of bQ(b)){var k;if(bF.test(c)||!bE.test(c))continue;let b=bP((String((k=a)||"").split(/[。;;\n]/u).map(a=>a.trim()).filter(Boolean).pop()||k).replace(/[??]+$/u,"").replace(/^(?:请明确|请确认|请设计确认|请问|明确)+/u,"").replace(/是否|要不要|需不需要|可否|能否|能不能|可不可以/u,a=>"需不需要"===a?"需":"可否"===a||"能否"===a||"能不能"===a||"可不可以"===a?"可以":"").replace(/有无/u,"").trim());if(!(b.length<4)){d.push({kind:"confirm",object:f,action:c.replace(/[。!]$/u,""),after:b,before:[],...h});break}}if(0===d.length){let c=bP(b.replace(/[。!]$/u,"").replace(/^(?:无误|正确|无异议|没问题|没有问题|符合)[,,、]?/u,""));c.length>=2&&c.length<=40&&/[??]/u.test(a)&&bG.test(a)&&!bH.test(c)&&!bI.test(c)&&!bJ.test(c)&&!bA.test(c)&&!bB.test(c)&&d.push({kind:"confirm",object:f,action:"短答",after:c,before:[],...h})}return d.slice(0,3)}(d.question,d.answer,l)).filter(a=>a.object.length>=2&&a.after.length>=2);if(0===a.length){let a=d.answer.trim();a.length>=2&&a.length<=40&&!bH.test(a)&&!bJ.test(a)&&c.push({question:d.question.slice(0,80),answer:a.slice(0,80),source:l});continue}for(let c of a){let a=`${(0,w.K3)(c.object)}|${(0,w.K3)(c.after)}`;e.has(a)||b.length>=j||(e.add(a),b.push(c))}}for(let b of a.split(/\n+/u)){let a=b.trim();!(a.length<8||m.has(a))&&bp.test(a)&&bq.test(a)&&(h+=1,br.test(a)&&(i+=1),d.push({text:a.slice(0,120),source:l}))}}return{amendments:b,unparsedAnswers:c,uncoveredStatements:{count:h,measureShaped:i,samples:[...d].sort((a,b)=>bs(a.text)-bs(b.text)).slice(0,20)},sourceCount:f,pairCount:g}}({texts:function(a,b){let c=[],d=new Set;for(let e of a||[]){if(!e||!bf(e))continue;let a=b(e);if(!a?.chunks?.length)continue;let f=a.file?.relativePath||e;if(d.has(f))continue;d.add(f);let g=[];for(let b of a.chunks){let a=String(b.sectionTitle||"").trim(),c=String(b.content||"").trim();a&&g.push(a),c&&c!==a&&g.push(c)}let h=g.join("\n").trim();h&&c.push({text:h,source:f})}return c}([...a.understanding.availableEvidenceScopePaths,...a.prepare.materialFilePaths],b=>a.understanding.getCachedFileDetail(b))}),e=function(a,b=[]){return 0===b.length?[...a]:a.map(a=>{let c=(0,v.o7)({name:a.object,description:`${a.object} ${a.after}`},b);return c?{...a,chapterTitle:c.chapterTitle,...c.section?{section:c.section}:{}}:a})}(d.amendments,a.planning.effectiveChapters);if(d.sourceCount>0||e.length>0){a.planning.clarificationAmendments={...d,amendments:e};let b=e.filter(a=>a.chapterTitle).length;for(let a of(console.warn(`[clarification] 答疑技术性修正账本:${e.length} 条(按章归属 ${b} / 全文适用 ${e.length-b}),源 ${d.sourceCount} 份、问答对 ${d.pairCount};缺口:未解析短答 ${d.unparsedAnswers.length} 条、未覆盖平铺技术陈述 ${d.uncoveredStatements.count} 条(其中量值形态 ${d.uncoveredStatements.measureShaped} 条最像漏抽的技术口径,需人工过目)`),d.unparsedAnswers.slice(0,5)))console.warn(`[clarification] 未解析答句(人工复核):Q「${a.question}」→ A「${a.answer}」`);for(let a of d.uncoveredStatements.samples.slice(0,5))console.warn(`[clarification] 未覆盖平铺陈述(无问答结构,判据不抽):${a.text}`)}let h=a=>bf(a)?(0,p.eA)(a)/bU:1;for(let d=0;d<a.planning.effectiveChapters.length;d+=a.blueprint.chapterConcurrency){let l=a.planning.effectiveChapters.slice(d,d+a.blueprint.chapterConcurrency);for(let m of(await Promise.all(l.map(async(l,m)=>{let o,p=d+m;(0,f.Te)(a.global.input.signal);let u=a.understanding.rolePoolRisk??dm({totalChunks:0,loadedChunks:0,vectorReady:void 0}),w=a.blueprint.blueprintActive?{missing:[],failedChecks:[]}:(0,t.RT)(l.title,a.blueprint.integratedBlueprint?.validation,a.planning.chapterIntentClassifier);if(w.missing.length>0){let b=w.failedChecks.length>0?`蓝图校验项「${w.failedChecks.join("、")}」未通过`:"蓝图校验未通过或构建异常",c=(a.blueprint.integratedBlueprint?.diagnostics?.warnings??[]).filter(a=>/清单|知识库索引|索引/u.test(a)).slice(0,3),d=`${(0,cj.GQ)(l.title)} 依赖蓝图权威 [${w.missing.join("、")}],${b},已按节点级把关阻断生成`,e=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:d,details:["数值密集型章所需蓝图权威不可用时禁止无权威成稿",...c,c.length>0?"以上为清单侧诊断:按提示补齐资料/重建索引后重试;若本项目确无工程量清单,请在模板资料需求中确认「工程量清单」为必需项":"请检查清单解析与蓝图构建诊断后重试"],progress:{current:p+1,total:a.planning.effectiveChapters.length,label:"章节阻断"}},{subtitle:(0,cj.GQ)(l.title),order:p});a.global.progressStages.push(e),a.understanding.failedChapterMessages.push(d),a.understanding.chapterGenerationStagesByOrder[p]=e,a.global.emitProgress();return}let x=Date.now(),A=a.global.progressStages.length;try{var B;let d,m,C,D;a.global.progressStages.push((0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,cj.GQ)(l.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${p+1}/${a.planning.effectiveChapters.length}`,`二级小节:${l.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:p+1,total:a.planning.effectiveChapters.length,label:"章节生成"}},{subtitle:(0,cj.GQ)(l.title),order:p})),a.global.emitProgress();let E=a.global.input.resumeChapters?.find(a=>a.id===l.id||a.title===l.title),F=E?.content?.trim(),G=E?.evidence?.length?[...E.evidence]:[],H=a.prepare.projectUnderstanding.chapterPlans.find(a=>a.chapterId===l.id||a.chapterTitle===l.title),I=H?Object.values(H.evidenceQueries).flat().filter(Boolean):[],J=l.queries.length>0?l.queries:[a.prepare.template.name,a.prepare.template.outputTitle,l.title],N=a.understanding.chapterGraphMap.get(l.id);if(a.understanding.projectGraph&&N&&N.graphFiles.size>0)for(let b of[...N.graphFiles]){let c=a.understanding.getCachedFileDetail(b);if(c?.chunks?.length)for(let d of c.chunks)G.push({chapterId:l.id,filePath:c.file?.relativePath||b,score:5+(N.graphWorks.length+N.graphMethods.length)*.5,content:d.content,roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),sectionTitle:d.sectionTitle,source:"graph-evidence"})}let O=a.planning.chapterIntentClassifier.needsBasicFacts(l.title),P=a.blueprint.billFactLock?(0,v.Zc)(a.blueprint.billFactLock,l.title,l.sections||[]):[],Q=(0,n.QP)(l,[...J,...I,...P],[]),R=Date.now();a.global.progressStages[A]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,cj.GQ)(l.title)} 正在执行质量优先的章节检索${N?.graphFiles.size?`(图谱匹配 ${N.graphFiles.size} 个文件)`:""}`,details:Q.map(a=>`检索:${a.slice(0,42)}`),progress:{current:p+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,cj.GQ)(l.title),order:p}),a.global.emitProgress();let S=F?[]:[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),T=F?[]:a.understanding.scopedIntelligence?.evidenceByChapterId?.[l.id]||[];if(T.length>0){G.push(...T);let b=a.planning.generationDiagnostics.evidence;b.intentEvidenceInjected=(b.intentEvidenceInjected??0)+T.length}let U=[],V=(l.requiredFacts||[]).filter(a=>!!a&&!Q.some(b=>b.includes(a)||a.includes(b))).map(a=>`${l.title} ${a}`),W=(a.prepare.requirementSemantics?.factClues||[]).filter(a=>!Q.some(b=>b.includes(a)||a.includes(b))&&!V.some(b=>b.includes(a)||a.includes(b))).map(a=>`${l.title} ${a}`.trim()).slice(0,8),X=[...Q,...V,...W];if(S.length>0&&X.length>0){(0,f.Te)(a.global.input.signal);let b=await (0,f.l$)(X,async b=>a.understanding.searchWithCache(b,S,Math.min(a.understanding.requestedEvidencePerChapter,12),l.title,a.prepare.materialScope.selectedMaterialRoots),{kind:"search"});U.push(...b)}for(let b of(a.planning.generationDiagnostics.evidence.searchQueries+=X.length,a.planning.generationDiagnostics.evidence.searchMs+=Date.now()-R,a.global.progressStages[A]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,cj.GQ)(l.title)} KB 检索完成:${X.length} 组查询,准备深度召回与语义排序`,progress:{current:p+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,cj.GQ)(l.title),order:p}),a.global.emitProgress(),U)){G.push(...b.map(b=>({chapterId:l.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:b.source})));let c=a.planning.generationDiagnostics.evidence;c.retrievedEvidenceInjected=(c.retrievedEvidenceInjected??0)+b.length}O&&S.length>0&&a.blueprint.basicFactSearchResults.length>0&&G.push(...a.blueprint.basicFactSearchResults.map(b=>({chapterId:l.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"basic-fact-cache"})));let Y=F?[]:await (0,f5.$b)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:l,plan:H,profile:a.prepare.projectMaterialProfile,scopedFilePaths:S,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,limitPerQuery:Math.min(a.understanding.requestedEvidencePerChapter,10),signal:a.global.input.signal}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`计划材料证据召回失败(${l.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 计划材料证据召回失败(${l.title})`,b),[]));G.push(...Y);let Z=[];a.planning.chapterIntentClassifier.needsBasicFacts(l.title)&&G.push(...a.understanding.safeProjectBasicEvidence.map(a=>({...a,chapterId:l.id,source:"pinned-evidence"})));let $=a.understanding.writerEvidence.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));/概况|工程|项目|总体|部署/u.test(l.title)&&$.length>0&&G.push(...$.map(a=>({...a,chapterId:l.id,source:"pinned-evidence"})));let _=a.prepare.materialScope.selectedMaterialRoots[0]||"";for(let b of(l.pinnedEvidenceFilePaths||[]).filter(Boolean)){let c=b.replace(/\\/gu,"/").replace(/^\.\//u,"").replace(/^\/+/u,""),d=_&&c!==_&&!c.startsWith(`${_}/`)?`${_}/${c}`:c,e=a.understanding.getCachedFileDetail(d);if(!e){let c=a.planning.generationDiagnostics?.evidence;c&&(c.pinnedEvidenceMissed=(c.pinnedEvidenceMissed??0)+1),console.warn("[stage-chapter-loop] pinned 证据文件未命中知识库(配置漂移或文件未入库)",{chapter:l.title,pinnedPath:b,resolvedPath:d});continue}G.push(...e.chunks.map(b=>({chapterId:l.id,filePath:e.file.relativePath,score:1,content:b.content,roleId:a.understanding.fileRoleByPath.get(e.file.relativePath),processingType:a.understanding.fileProcessingByPath.get(e.file.relativePath),sectionTitle:b.sectionTitle,source:"pinned-evidence"})))}let aa=G;if(!F&&a.prepare.webAccessConfig.enabled&&a.prepare.webAccessConfig.allowProjectFacts){let b=await aP({config:a.prepare.webAccessConfig,chapterId:l.id,chapterTitle:l.title,sectionTitles:l.sections||[],runtimeRules:a.prepare.runtimePromptRules,localFacts:[...a.understanding.preliminaryFactsModel.project,...a.understanding.preliminaryFactsModel.schedule,...a.understanding.preliminaryFactsModel.quality,...a.understanding.preliminaryFactsModel.safety,...a.understanding.preliminaryFactsModel.resources,...a.understanding.preliminaryFactsModel.preciseFacts],signal:a.global.input.signal});a.understanding.webResearchReport.queries.push(...b.queries),a.understanding.webResearchReport.filteredCount+=b.filtered,a.understanding.webResearchReport.evidenceCount+=b.evidence.length,b.evidence.length>0&&(a.understanding.webResearchReport.chapters.push(l.title),aa.push(...b.evidence.map(a=>({...a,chapterId:l.id})))),b.failedQueries>0&&(a.understanding.webResearchReport.failedCount=(a.understanding.webResearchReport.failedCount??0)+b.failedQueries,a.planning.generationDiagnostics.llm.lastError=`联网检索失败 ${b.failedQueries} 次(${l.title}):${b.failures.slice(0,3).join(";")}`)}let ab=F?[]:(0,f5.SK)({project:a.understanding.project,chapter:l,plan:H,profile:a.prepare.projectMaterialProfile,scopedFilePaths:S,highRisk:u.highRisk});ab.length>0&&aa.push(...ab);let ac=b=>((0,z.f2)(b,a.planning.earlyOverrideList),a.understanding.excludedEvidenceKeys.size>0?b.filter(b=>!a.understanding.excludedEvidenceKeys.has((0,fW.hM)(b))):b);aa=ac(aa);let ae=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),ag=(0,n.Mz)(l,aa,ae,h),ai=await (0,aX.Mv)([f0(l)],ag.map(n.t7)),aj=(0,n.UG)(l,aa,{preservePinned:!0,carrierBoost:h,semantic:{similarity:ai,queryText:f0(l)}},a.planning.generationDiagnostics);aj=(0,r.pm)(aj,a.understanding.canonicalFacts.scopeConflicts);let ak=l.requiredFacts.filter(a=>!aj.some(b=>(0,dk.Lk)(b,a))),al=0,am=(0,k.kO)(a.understanding.bidComposition),an=N?[N.graphWorks.length?`图谱识别本章工程内容:${N.graphWorks.join("、")}`:"",N.graphMethods.length?`图谱识别本章施工方法:${N.graphMethods.join("、")}`:"",N.graphBoqItems.length?`图谱识别本章BOQ清单项(${N.graphBoqItems.length}项):${N.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",N.gaps.length?`图谱识别本章资料缺口:${N.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",ao=(0,r.Bf)(a.understanding.canonicalFacts.scopeConflicts),ap=(()=>{if(0===a.blueprint.requirementAssignments.length)return"";let b=(0,aY.NT)(l.title),c=a.blueprint.requirementAssignments.filter(a=>a.chapterTitle===b).map(a=>a.entry);return(0,aY.HF)(c)})(),aq=(()=>{if(0===a.blueprint.structureAssignments.length)return"";let b=(0,aY.NT)(l.title),c=a.blueprint.structureAssignments.filter(a=>a.chapterTitle===b).map(a=>a.requirement);return(0,aY.FR)(c,{bodyTableForbidden:(0,k._C)(a.understanding.bidComposition),bodyFigureForbidden:am})})(),ar=a.planning.chapterIntentClassifier.needsDustControl(l.title)||a.planning.chapterIntentClassifier.needsDustControl(`${l.title}${l.purpose||""}`)?[`【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“${aG.z1}”必须显性写明“${aG.Dm}”,不得省略】`,...aG.No.map(a=>`- ${a.name}`)].join("\n"):"",as=(l.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),at=as.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${as.join("、")}`:"",av=a.blueprint.billFactLock?(0,v.uD)(a.blueprint.billFactLock,l.title,{sections:l.sections||[]}):"",aw=a.blueprint.billFactLock?(0,v.zK)(a.blueprint.billFactLock,b,l.title):[],ax=a.blueprint.drawingFactLock?(0,c0.pH)(a.blueprint.drawingFactLock,l.title,{sections:l.sections||[]}):"",ay=function(a,b,c={}){let d=function(a,b,c={}){let{usable:d}=K(a,c.supersededValues);if(0===d.length)return[];let e=L(b,c.sections||[]);return 0===e.length?[]:d.map(a=>({fact:a,score:M(a,e)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score||String(a.fact.key).localeCompare(String(b.fact.key),"zh")||String(a.fact.value).localeCompare(String(b.fact.value),"zh")).map(a=>a.fact)}(a,b,c);if(0===d.length)return[];let e=Math.max(1,c.maxChars??3600),f=[],g=0;for(let a of d){let b=a.fieldName&&a.fieldName!==a.key?`(${a.fieldName})`:"",c=String(a.objectName||"").trim(),d=c?`- ${c}|${a.key}${b}=${String(a.value).slice(0,80)}`:`- ${a.key}${b}:${String(a.value).slice(0,80)}`;if(g+d.length+1>e)break;f.push(d),g+=d.length+1}let h=d.slice(f.length);return 0===f.length?[]:[`【本章可靠参数清单(资料事实链参数索引:${d.length} 项与本章相关的规格/参数/数量/时间/比例/标准编号,须逐项在正文对应位置自然写入,保持原值原形态(数字、单位、编号中的连字符与年份不得改写、拆分或省略);商务金额/单价/税率/预留金类数据一律不得写入正文)】`,'【逐对象写实铁律】带对象前缀的条目(「对象|属性=值」)必须写到**该对象**的正文处——**禁止把某对象的参数写到另一对象**;同一属性在不同对象下各有其值(如「基础垫层 100mm」与「地坪垫层 300mm」并列)是**正确**的,不得"统一"或只取其一。',...f,...h.length>0?[`- 另需落位(仅列名,共${h.length}项,须同样逐项写入正文):${h.map(a=>String(a.key)).join("、")}`]:[]]}(a.understanding.preliminaryFactsModel,l.title,{sections:l.sections||[]}),az=function(a,b){let c=b.indexOf(a),d=(a,b)=>`${(0,cj.tb)(a,b.title)}${b.sections?.length?`(小节:${b.sections.join("、")})`:""}`,e=b.map((a,b)=>({item:a,index:b})).filter(b=>b.item!==a);return["【跨章写作职责分工——只就本章主题展开,写时即不产生跨章重复】",`- 本章职责:${d(c>=0?c:0,a)}`,...e.length>0?["- 其他章节职责(不得展开复述其主题内容):",...e.map(a=>` - ${d(a.index,a.item)}`)]:[],"- 写作规范:只就本章主题展开;其他章节主题的内容如需关联,一句话引用(“详见第X章”,X 替换为实际章号),不得展开复述;篇幅以本节合同字数为准,不得借写其他章节主题充数。"].join("\n")}(l,a.planning.effectiveChapters),aA=/施工方法|施工方案|施工工艺|主要施工内容|分部分项/u.test(l.title)?(()=>{let b=(0,y.Hp)((0,y.v7)(a.understanding.preliminaryFactsModel));return b?`【本章必须覆盖的清单分部分项全景(下列专有分项逐项写入正文施工方法,不得只写道路/铺装/绿化等大类而遗漏清单独有分项)】
|
|
195
|
-
${b}`:""})():"",
|
|
194
|
+
以局部 patch 方式输出:每处 patch 只包含新增表题行与必要定位上下文,不得重写其他内容。`,m=await av({originalContent:e.content,repairRound:"table-caption-repair",diagnostics:a.generationDiagnostics,beforeMetrics:[f.length],shouldRollback:(a,b)=>b[0]>=f.length,apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:e.id,title:e.title,content:e.content,evidence:e.evidence,missingFacts:e.missingFacts,sections:e.sections},issues:[`正文存在 ${f.length} 张缺少表题的表格`],promptTexts:l,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("table-caption-repair",a.generationDiagnostics)}));return b.content&&b.content!==e.content?b.content:e.content},recheck:a=>[b(a)]}),o=m.content;m.rolledBack||o===e.content||(a.finalChapterDrafts[c]={...e,content:h?(0,n.w_)(o,h):o},d+=1);let p=m.rolledBack?f.length:m.afterMetrics[0],q=(0,j.X5)({type:"llm_review",roleId:i,status:m.rolledBack||p>0?"failed":"success",message:m.rolledBack?`表格题名补全已回滚:${e.title}(补名后无题表数未下降,保留修复前正文)`:p>0?`表格题名补全未完全生效:${e.title}(残留 ${p} 张无题表由终检复核)`:`表格题名补全完成:${e.title}`,details:[`无题表 ${f.length} 张 → 残留 ${p} 张`]},{subtitle:"表格题名补全"});(0,j.fx)(a.progressStages,q),(0,j.fx)(a.finalGateRepairStages,q),a.emitProgress(a.finalChapterDrafts,a.progressStages)}(c>0||d>0)&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle())}async function fw(a){let b=new Map;for(let c of a.finalChapterDrafts){let a=(0,aG.qE)(c.content);a.length>0&&b.set(c.id,a)}let c=[...b.keys()].reduce((b,c)=>{let d=a.finalChapterDrafts.find(a=>a.id===c);return b+(d?(0,aG.OV)(d.content):0)},0);if(0===b.size){let b=(0,j.X5)({type:"validation",roleId:"table-arithmetic-repair",status:"success",message:"表内算术自洽核对通过:全部含合计标记的表格分项和=合计"},{subtitle:"表内算术自洽"});(0,j.fx)(a.progressStages,b),(0,j.fx)(a.finalGateRepairStages,b),a.emitProgress(a.finalChapterDrafts,a.progressStages);return}let d=0,e=0;for(let[c,f]of b){let b=a.finalChapterDrafts.findIndex(a=>a.id===c);if(b<0)continue;let h=a.finalChapterDrafts[b],i=h.content,k=(0,aG.OV)(i),l=0,m=!1,n=!1,o=[k];for(;k>0&&l<2;){l+=1;let d=(0,aG.qE)(i),e=(0,j.X5)({type:"llm_review",roleId:`agent-table-arithmetic-${c}`,status:"running",message:`表格算术不自洽 ${d.length} 张表,第 ${l} 轮定向修复中:${h.title}`,details:d.map(a=>a.message)},{subtitle:"表内算术自洽"});(0,j.fx)(a.progressStages,e),(0,j.fx)(a.finalGateRepairStages,e),a.emitProgress(a.finalChapterDrafts,a.progressStages);let f=["【表格算术自洽修复】下列表格的「合计」(合计行/合计列)与分项之和对不上,请逐表修正表内数值:",...l>1?[`本轮为第 ${l} 轮(最多 2 轮):上一轮修复后仍有残留,必须让合计与分项之和完全相等。`]:[],"1. 以分项为准重算合计:合计 = 该行/该列已列出的分项之和(单位一致);","2. 若分项数值本身与资料/清单/上下文矛盾,按权威值修正分项,使分项和 = 合计;","3. 台账类表(含「其他/其余」差额项的)保留显性「其他」项并给出数值,使合计 = 全部分项(含其他)之和;","4. 只允许修正表格内的数值(合计格/分项格);严禁编造无来源数值、严禁删除表格、严禁改动表格外正文。","以局部 patch 方式输出:每个 patch 只包含表格区域的数值修正与必要定位上下文。",d.map(a=>`- ${a.message}`).join("\n")].join("\n"),p=await av({originalContent:i,repairRound:"table-arithmetic-repair",diagnostics:a.generationDiagnostics,beforeMetrics:[k],shouldRollback:(a,b)=>b[0]>=a[0],apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:h.id,title:h.title,content:i,evidence:h.evidence,missingFacts:h.missingFacts,sections:h.sections},issues:d.map(a=>a.message),promptTexts:f,requirement:a.requirement,forbidDrawingImages:!1,bidComposition:a.bidComposition,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("table-arithmetic-repair",a.generationDiagnostics)}));return b.content&&b.content!==i?b.content:i},recheck:a=>[(0,aG.OV)(a)]});p.rolledBack||p.content===i||(i=p.content,a.finalChapterDrafts[b]={...h,content:i},m=!0),p.rolledBack&&(n=!0);let q=(0,aG.OV)(i);if(o.push(q),0===q||q>=k||l>=2)break;k=q}m&&(d+=1);let p=(0,aG.OV)(i);e+=p;let q=(0,j.X5)({type:"llm_review",roleId:`agent-table-arithmetic-${c}`,status:au({before:f.length,after:p,repaired:m,rolledBack:n}),message:0===p?`表内算术自洽修复完成:${h.title}(残留轨迹 ${o.join("→")})`:m?`表内算术自洽修复部分生效:${h.title}(不自洽处数残留轨迹 ${o.join("→")},已执行 ${l} 轮定向修复(每章最多 2 轮);残留由终检照常复核)`:n?`表内算术自洽修复已回滚:${h.title}(修复后不自洽处数未下降,保留修复前正文;残留 ${p} 处由终检照常复核)`:`表内算术自洽修复未生效:${h.title}(模型未产生有效修改;残留 ${p} 处由终检照常复核)`,details:[...f.map(a=>a.message),p>0?`已执行 ${l} 轮定向修复,残留由终检照常复核`:""]},{subtitle:"表内算术自洽"});(0,j.fx)(a.progressStages,q),(0,j.fx)(a.finalGateRepairStages,q),a.emitProgress(a.finalChapterDrafts,a.progressStages)}d>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.generationDiagnostics.llm.lastInfo=`表内算术自洽修复:${c} 处不自洽,${d} 章完成定向修复,残留 ${e} 处(每章最多 2 轮收敛修复,残留由终检照常复核)`}async function fx(a){let b=function(a){let b=0,c=[];return a.forEach((a,d)=>{let e=a.content;if(!e?.trim())return;let f=(a.sections||[]).map(a=>(0,af.mJ)(a)).filter(Boolean),g=e.split("\n"),h=new Set,i=a=>(0,af.mJ)(a.replace(/^#{2,6}\s*/u,"").replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").trim());for(let a=0;a<g.length;a+=1){let e=/^(#{3,4})\s+(.+?)\s*$/u.exec((g[a]||"").trim());if(!e)continue;let j=e[1],k=i(e[2]);if(!k||!f.includes(k))continue;let l=a+1,m=0;for(;l<g.length;){let a=(g[l]||"").trim();if(RegExp(`^#{2,${j.length}}\\s`).test(a))break;a&&!/^#{1,6}\s/u.test(a)&&(m+=a.length),l+=1}if(m>=12||l>=g.length)continue;let n=RegExp(`^${j}\\s+(.+?)\\s*$`).exec((g[l]||"").trim());if(!n)continue;let o=i(n[1]);!(!o||f.includes(o))&&([...new Set(o.split(""))].filter(a=>k.includes(a)).length<2||(h.add(l),b+=1,c.push(`第 ${d+1} 章「${k}」归位:合并自拟标题「${o}」`)))}if(0===h.size)return;a.content=g.filter((a,b)=>!h.has(b)).join("\n").replace(/\n{3,}/gu,"\n\n");let j=(0,ck.PA)(a.content,{chapterNumber:d+1});a.content=j.markdown}),{mergedCount:b,details:c}}(a.finalChapterDrafts),c=function(a){let b=0,c=0,d=[];return a.forEach((a,e)=>{if(!a.content?.trim())return;let f=0;for(let b=0;b<4;b+=1){let b=(0,af.Wr)(a);if(0===b.length)break;let c=new Set(b.map(a=>a.line));for(let g of(a.content=a.content.split("\n").filter((a,b)=>!c.has(b)).join("\n").replace(/\n{3,}/gu,"\n\n"),f+=b.length,b))d.push(`第 ${e+1} 章移除空壳标题「${g.rawTitle}」${g.planned?"(规划小节未落位,缺口由规划落位检测器单一报出)":""}`)}if(0===f)return;b+=f;let g=(0,ck.PA)(a.content,{chapterNumber:e+1});a.content=g.markdown,g.fixedCount>0&&(c+=1)}),{removedCount:b,renumberedChapters:c,details:d}}(a.finalChapterDrafts),d=(0,j.X5)({type:"validation",roleId:"empty-section-sweep",status:"success",message:b.mergedCount>0||c.removedCount>0?`空节清扫完成:规划标题归位 ${b.mergedCount} 处、移除无依据空壳标题 ${c.removedCount} 处(${c.renumberedChapters} 章重排编号)`:"空节清扫核对通过:无空壳小节",details:[...b.details,...c.details].length>0?[...b.details,...c.details]:void 0},{subtitle:"空节清扫"});(0,j.fx)(a.progressStages,d),(0,j.fx)(a.finalGateRepairStages,d),(b.mergedCount>0||c.removedCount>0)&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fy(a){let b=eo(a.finalChapterDrafts),c=function(a){let b=0,c=[];return a.forEach((a,d)=>{if(!a.content?.trim())return;let e=b=>{let c=String(b||"").trim();return!c||(0,cl.cq)(c)||/^附录/u.test(c)||ee.gG.test(a.title)&&f.V.test(c)},g=(a.sections||[]).filter(a=>!e(a));if(0===g.length||(0,ad.r4)(a.content).filter(a=>!e(a)).length<=g.length)return;let h=g.map(a=>(0,af.mJ)(a)),i=new Set(h),j=a.content.split("\n"),k=[];j.forEach((a,b)=>{if(!/^\s*###\s+\S/u.test(a))return;let c=(0,f.Jb)(a),d=c?(0,af.mJ)(c):"";d&&k.push({line:b,title:c,normalized:d})});let l=-1,m=0;for(let a of k){if(i.has(a.normalized)){l=a.line;continue}!(e(a.title)||h.some(b=>(0,f.ty)(a.normalized,b))||/(?:((?:\d+|[一二三四五六七八九十]+)))+$/u.test(a.title))&&(l<0||(j[a.line]=`#### ${a.title}`,m+=1,c.push(`第 ${d+1} 章「${a.title}」降为 H4(并入上方规划小节主题块)`)))}0!==m&&(b+=m,a.content=(0,ck.PA)(j.join("\n"),{chapterNumber:d+1}).markdown)}),{demotedCount:b,details:c}}(a.finalChapterDrafts),d=0;a.finalChapterDrafts.forEach((a,b)=>{if(!a.content?.trim())return;let c=(0,ck.PA)(a.content,{chapterNumber:b+1});c.fixedCount>0&&(a.content=c.markdown,d+=1)});let e=b.mergedCount+c.demotedCount,h=e>0||d>0;(0,g.kD)(a.generationDiagnostics,e+d);let i=[...b.details,...c.details],k=(0,j.X5)({type:"validation",roleId:"section-alignment-sweep",status:"success",message:h?`小节结构对齐收口:近名对齐/合并 ${b.mergedCount} 处、规划外小节降级 ${c.demotedCount} 处、编号重放 ${d} 章`:"小节结构对齐核对通过:成稿小节与规划主题块一一对应",details:i.length>0?i.slice(0,6):void 0},{subtitle:"结构对齐收口"});(0,j.fx)(a.progressStages,k),(0,j.fx)(a.finalGateRepairStages,k),h&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fz(a){let b=dM(a.finalChapterDrafts),c=b.length>0?dN(a.finalChapterDrafts,b):{deletedCount:0,deletedSentences:[],remaining:b},d=0;for(let b of a.finalChapterDrafts){if(!b.content?.trim())continue;let a=(0,s.Vc)(b.content);a.removedCount>0&&(b.content=a.markdown,d+=a.removedCount)}let e=c.deletedCount+d,f=(0,j.X5)({type:"validation",roleId:"templating-sweep",status:"success",message:e>0?`模板化链尾清理:零信息前缀句删除 ${c.deletedCount} 处、重复段落去重 ${d} 处`:"模板化链尾核对通过:无零信息前缀句与重复段落残留",details:c.deletedSentences.length>0?c.deletedSentences.slice(0,3).map(a=>`前缀句删除:「${a.slice(0,40)}」`):void 0},{subtitle:"模板化清理收口"});(0,j.fx)(a.progressStages,f),(0,j.fx)(a.finalGateRepairStages,f),e>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fA(a){let b=function(a){let b=0,c=[];return a.forEach((a,d)=>{if(!a.content?.trim())return;let e=0;for(let g=0;g<6;g+=1){let g=a.sections||[],h=g.map((a,b)=>({section:String(a||"").trim(),index:b})).filter(a=>a.section),i=new Map;for(let a of h){let b=(0,af.Sn)(a.section);b&&i.set(b,[...i.get(b)||[],a])}let j=[...i.values()].find(a=>a.length>=2);if(!j)break;let k=a.content.split("\n"),l=[];k.forEach((a,b)=>{if(!/^\s*###\s+\S/u.test(a))return;let c=(0,f.Jb)(a),d=c?(0,af.mJ)(c):"";d&&l.push({line:b,title:c,normalized:d})});let m=a=>{let b=(0,af.mJ)(a);return l.find(a=>a.normalized===b)||l.find(a=>(0,f.ty)(a.normalized,b))},n=j.flatMap(a=>{let b=m(a.section);return b?[{section:a.section,index:a.index,heading:b}]:[]}),o=n.filter((a,b)=>n.findIndex(b=>b.heading.line===a.heading.line)===b),p=new Map;for(let a of n)p.set(a.heading.line,[...p.get(a.heading.line)||[],a]);let q=[...p.values()].find(a=>a.length>1);if(q){let f=q.find(a=>a.heading.normalized===(0,af.mJ)(a.section))||q[0],h=q.filter(a=>a!==f).map(a=>a.index);a.sections=g.filter((a,b)=>!h.includes(b)),b+=1,e+=1,c.push(`「${q.filter(a=>a!==f).map(a=>a.section).join("、")}」与「${f.section}」同节对齐去重(第 ${d+1} 章)`);continue}if(o.length<2)break;o.sort((a,b)=>a.heading.line-b.heading.line);let r=o[0],s=o[1],t=em(k,r.heading.line),u=em(k,s.heading.line),v=k.slice(r.heading.line+1,t);for(;v.length>0&&""===v[v.length-1].trim();)v.pop();let w=k.slice(s.heading.line+1,u);for(;w.length>0&&""===w[w.length-1].trim();)w.pop();for(;w.length>0&&""===w[0].trim();)w.shift();let x=w.length>0?[...v,"",...w,""]:[...v,""],y=r.heading.normalized===(0,af.mJ)(r.section)?k[r.heading.line]:`${en(k[r.heading.line])}${r.section}`;a.content=[...k.slice(0,r.heading.line),y,...x,...k.slice(t,s.heading.line),...k.slice(u)].join("\n").replace(/\n{3,}/gu,"\n\n"),a.sections=g.filter((a,b)=>b!==s.index),b+=1,e+=1,c.push(`「${s.section}」并入「${r.section}」(第 ${d+1} 章)`)}if(e>0){let b=(0,ck.PA)(a.content,{chapterNumber:d+1});a.content=b.markdown}}),{mergedCount:b,details:c}}(a.finalChapterDrafts),c=(0,j.X5)({type:"validation",roleId:"duplicate-theme-merge",status:"success",message:b.mergedCount>0?`重复主题小节合并:${b.mergedCount} 处(保留首现小节,后续标题行摘除、正文并入,规划数组同步)`:"重复主题小节核对通过:同桶小节无并存",details:b.details.length>0?b.details.slice(0,6):void 0},{subtitle:"重复主题合并"});(0,j.fx)(a.progressStages,c),(0,j.fx)(a.finalGateRepairStages,c),b.mergedCount>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fB(a){let b=[],c=(0,ae._G)(a.finalMarkdown),d=0;c!==a.finalMarkdown&&(a.finalMarkdown=c,d+=1,b.push("附表区内部话术清洗:内部推导口径已中性化(唯一口径/经验工效区间/清单批注等)"));{let c=(a.effectiveChapters||[]).map(a=>({title:(0,cj.GQ)(a.title),sections:(a.sections||[]).filter(Boolean)}));if(c.length>0){let e=a.finalMarkdown.split(/\r?\n/u),f=[];e.forEach((a,b)=>{let c=/^##\s+(.+?)\s*$/u.exec(a.trim());c&&!/^(目录|附表)/u.test(c[1])&&f.push({index:b,title:c[1].replace(/\s+/gu,"")})});let g=0,h=[];for(let a=c.length-1;a>=0;a-=1){let d=c[a],i=d.title.replace(/\s+/gu,""),j=f.find(a=>a.title.includes(i)||i.includes(a.title));if(!j)continue;let k=f.find(a=>a.index>j.index),l=k?k.index:e.length,m=e.slice(j.index+1,l).join("\n"),n=(0,ed.zX)(d.sections,m);(0!==n.promoted.length||0!==n.missing.length)&&(n.promoted.length>0&&(e.splice(j.index+1,l-j.index-1,...n.markdown.split(/\r?\n/u)),g+=n.promoted.length,b.push(`规划小节层级提升:${d.title}(${n.promoted.join("、")})`)),n.missing.length>0&&h.push(`${d.title}:${n.missing.join("、")}`))}g>0&&(a.finalMarkdown=e.join("\n"),d+=g),h.length>0&&b.push(`规划小节未落位(交终门禁复核):${h.join(";")}`)}}{let c=function(a){let b=a.replace(/\r/gu,"").split("\n"),c=[],d=[];for(let a=0;a<b.length;a+=1){let e=/^(#{3,6})\s+(\S.*)$/u.exec((b[a]||"").trim());if(!e){d.push(b[a]??"");continue}let f=e[1].length,g=a+1;for(;g<b.length&&""===(b[g]||"").trim();)g+=1;let h=g<b.length?/^(#{1,6})\s+\S/u.exec((b[g]||"").trim()):null;if(!(g>=b.length||h&&h[1].length<=f)){d.push(b[a]??"");continue}for(c.push(e[2].trim());a+1<b.length&&""===(b[a+1]||"").trim();)a+=1}return 0===c.length?{markdown:a,dropped:c}:{markdown:d.join("\n").replace(/\n{3,}/gu,"\n\n"),dropped:c}}(a.finalMarkdown);c.dropped.length>0&&(a.finalMarkdown=c.markdown,d+=c.dropped.length,b.push(`空壳标题清除(无直接正文且下一行为同级/更高级标题):${c.dropped.slice(0,8).join("、")}${c.dropped.length>8?` 等 ${c.dropped.length} 处`:""}——按 4.55.25 口径「没有内容就不要出现该标题」,规划小节缺节由终检「规划小节未落位」如实报出并交缺节补写轮`))}let e=(0,dz.av)(a.finalMarkdown);e.markdown!==a.finalMarkdown&&(a.finalMarkdown=e.markdown,d+=e.splitCount,b.push(`超长段落切分:消除 >380 字符段落 ${e.splitCount} 处`));{let c=(a.truthValues||[]).flatMap(a=>(a.superseded||[]).map(b=>({superseded:b,effective:a.value,scope:[a.attribute],evidence:a.evidence,kind:"override"})));if(c.length>0){let e=(0,z.M0)(a.finalMarkdown,c);e.applied.length>0&&(a.finalMarkdown=e.text,d+=e.applied.length,b.push(`现行口径落地:${e.applied.length} 处(${[...new Set(e.applied.map(a=>`${a.from}→${a.to}`))].slice(0,3).join("、")})`))}}{let c=(0,ck.PA)(a.finalMarkdown);c.fixedCount>0&&(a.finalMarkdown=c.markdown,d+=c.fixedCount,b.push(`小节编号重放:${c.fixedCount} 处(删除/合并小节后的编号空档收口)`))}let f=(0,s._D)(a.finalMarkdown);f.fixedCount>0&&(a.finalMarkdown=f.markdown,d+=f.fixedCount,b.push(...f.details)),(0,g.kD)(a.generationDiagnostics,d);let h=b.length>0,i=(0,j.X5)({type:"validation",roleId:"delivery-structure-closure",status:"success",message:h?`交付结构收口:${b.join(";")}`:"交付结构收口核对通过:目录与正文一致、无超长段落",details:h?b:void 0},{subtitle:"交付结构收口"});(0,j.fx)(a.progressStages,i),(0,j.fx)(a.finalGateRepairStages,i),h&&await a.recomputeFinalValidationBundle(),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fC(a){let b=(0,cl.yp)(a.finalMarkdown),c=(0,j.X5)({type:"validation",roleId:"sentence-pattern-sweep",status:"success",message:b.removedCount>0?`句模复读链尾收口:宣告引导句确定性剥离 ${b.removedCount} 处(列表引导语删除无损,列表内容保留)`:"句模复读链尾核对通过:无宣告引导句残留",details:b.removedSentences.length>0?b.removedSentences.slice(0,4).map(a=>`引导句剥离:「${a.slice(0,40)}」`):void 0},{subtitle:"模板化清理收口"});(0,j.fx)(a.progressStages,c),(0,j.fx)(a.finalGateRepairStages,c),b.removedCount>0&&(a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fD(a){let b=function(a){let b=a.split("\n"),c=[],d="(文首)";b.forEach((a,b)=>{let e=a.trim();/^##\s+/u.test(e)&&(d=e),c[b]=d});let e=[],f=[],g=new Map,h=0,i=0;for(let b of cV(a)){let a=b.occurrences;if(a.length<2)continue;let d=1===new Set(a.map(a=>c[a.lineIndex])).size,j=cl.Lw.test(a[0].raw);if(!d&&!j){f.push(a[0].raw);continue}for(let b of a.slice(1)){let a=g.get(b.lineIndex)||[];a.push({start:b.start,end:b.end}),g.set(b.lineIndex,a),e.push(b.raw),d?h+=1:i+=1}}if(0===e.length)return{markdown:a,removedCount:0,removedSentences:e,keptSentences:f,sameChapterRemoved:h,generalizedRemoved:i};for(let[a,c]of g){let d=b[a];for(let a of c.sort((a,b)=>b.start-a.start)){let b=a.start;for(;b>0&&/\s/u.test(d[b-1]);)b-=1;let c=a.end;for(;c<d.length&&/\s/u.test(d[c]);)c+=1;/[。;;]/u.test(d[c]||"")&&(c+=1),d=d.slice(0,b)+d.slice(c)}b[a]=""===d.trim()?"":d.replace(/^[ \t]+/u,"").replace(/[ \t]+$/u,"")}return{markdown:b.join("\n").replace(/\n{4,}/gu,"\n\n\n"),removedCount:e.length,removedSentences:e,keptSentences:f,sameChapterRemoved:h,generalizedRemoved:i}}(a.finalMarkdown),c=b.removedSentences.slice(0,3).map(a=>`复读坍塌:「${a.slice(0,40)}」`);b.keptSentences.length>0&&c.push(`跨章业务复读保留 ${b.keptSentences.length} 种(合理重申不坍塌)`);let d=(0,j.X5)({type:"validation",roleId:"duplicate-sentence-collapse",status:"success",message:b.removedCount>0?`句级复读坍塌:完全重复句保首次删后续 ${b.removedCount} 处(同章复读 ${b.sameChapterRemoved} 处、跨章泛化归口复读 ${b.generalizedRemoved} 处)`:"句级复读核对通过:无完全重复句残留",details:c.length>0?c:void 0},{subtitle:"模板化清理收口"});(0,j.fx)(a.progressStages,d),(0,j.fx)(a.finalGateRepairStages,d),b.removedCount>0&&(a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}async function fE(a){let b=function(a){let b,c=a.split("\n"),d=[];if(c.forEach((a,e)=>{let f=a.trim();/^##\s+/u.test(f)&&(b&&(b.endLine=e,d.push(b)),b={startLine:e,endLine:c.length,title:f.replace(/^#+\s*/u,"")})}),b&&d.push(b),0===d.length)return{markdown:a,prefixRemoved:0,prefixSentences:[],paragraphRemoved:0,targetCount:0};let e=d.map((a,b)=>({id:`md-chapter-${b}`,title:a.title,content:c.slice(a.startLine,a.endLine).join("\n"),evidence:[],missingFacts:[]})),f=dM(e),g=f.length>0?dN(e,f):{deletedCount:0,deletedSentences:[],remaining:f},h=0;for(let a of e){if(!a.content?.trim())continue;let b=(0,s.Vc)(a.content);b.removedCount>0&&(a.content=b.markdown,h+=b.removedCount)}if(0===g.deletedCount&&0===h)return{markdown:a,prefixRemoved:0,prefixSentences:[],paragraphRemoved:0,targetCount:f.length};let i=[...c];for(let a=d.length-1;a>=0;a-=1){let b=d[a];i.splice(b.startLine,b.endLine-b.startLine,...e[a].content.split("\n"))}return{markdown:i.join("\n"),prefixRemoved:g.deletedCount,prefixSentences:g.deletedSentences,paragraphRemoved:h,targetCount:f.length}}(a.finalMarkdown),c=b.prefixRemoved+b.paragraphRemoved,d=(0,j.X5)({type:"validation",roleId:"templating-tail-replay",status:"success",message:c>0?`模板化链尾重放(markdown):零信息前缀句删除 ${b.prefixRemoved} 处、重复段落去重 ${b.paragraphRemoved} 处`:"模板化链尾重放核对通过:无零信息前缀句与重复段落残留",details:b.prefixSentences.length>0?b.prefixSentences.slice(0,3).map(a=>`前缀句删除:「${a.slice(0,40)}」`):void 0},{subtitle:"模板化清理收口"});(0,j.fx)(a.progressStages,d),(0,j.fx)(a.finalGateRepairStages,d),c>0&&(a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts,a.progressStages)}function fF(a){return Math.max(0,Math.min(100,Math.round(a)))}async function fG(a){let b=await dK(a),c=a.reduce((a,b)=>a+(b.content.match(/本小节围绕|交底覆盖率按100%|24小时内形成整改责任|按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织|按作业条件确认→技术交底→过程实施|依据本项目已确认资料中的项目边界/gu)||[]).length,0),d=await (0,cI.Bt)(a.map(a=>a.content).join("\n")),e=400*Math.max(0,d.ratio-.1);return{score:fF(100-15*c-25*b.filter(a=>"error"===a.level).length-e),detail:`模板化空话命中 ${c} 处,套话句占比 ${(100*d.ratio).toFixed(1)}%(docx 达标线 ≤10%),废话段问题 ${b.length} 项`}}async function fH(a,b="",c={}){let d=function(a){let b=a.map(a=>`${a.title} ${(a.sections||[]).join(" ")} ${a.content}`).filter(a=>cL(a).reduce((a,b)=>a+b.length,0)>=200).join("\n"),c=[{label:"工程概况",pattern:/工程概况|项目概况|基本概况/u},{label:"主要施工内容",pattern:/主要施工内容/u},{label:"重难点分析",pattern:/重点.{0,4}难点/u},{label:"施工部署",pattern:/施工部署|总体部署|流水/u},{label:"进度计划",pattern:/进度计划|工期保障|工期计划/u},{label:"质量保证",pattern:/质量保证|质量管理|质量控制/u},{label:"安全文明",pattern:/安全.{0,8}(?:管理|措施|文明)|文明施工/u},{label:"资源配置",pattern:/劳动力|机械设备|材料.{0,4}计划|资源配置/u},{label:"绿色环保",pattern:/绿色施工|扬尘|噪声|环保/u},{label:"应急管理",pattern:/应急/u}],d=c.filter(a=>a.pattern.test(b)),e=fF(d.length/c.length*100),f=c.filter(a=>!a.pattern.test(b)).map(a=>a.label);return{score:e,detail:`覆盖 ${d.length}/${c.length} 个核心结构组${f.length?`;缺失:${f.join("、")}`:""}`}}(a),e=function(a){let b=a.map(a=>a.content).join("\n"),c=cM(b,dA.s2),d=cM(b,/工程量|材料|设备|范围|流程|验收|检测|复试|调试|隐蔽|检验批|资料|记录|系统|部位|接口|规格|标准/gu),e=Math.max(1,b.length),f=c.size/(e/1e3);return{score:fF(Math.min(100,22*f+d.size/18*15)),detail:`量化参数 ${c.size} 项(每千字 ${f.toFixed(1)}),专业事实词 ${d.size}/18 类`}}(a),f=function(a){let b=a.map(a=>a.content).join("\n"),c=cM(b,dA.aX),d=Math.max(1,b.length),e=c.size/(d/1e3);return{score:fF(Math.min(100,20*e+40)),detail:`工艺参数 ${c.size} 项(每千字 ${e.toFixed(1)})`}}(a),g=function(a,b=""){let c=(b||a.map(a=>a.content).join("\n\n")).split("\n"),d=0,e=0,f=0;for(;f<c.length;){let a=c[f].trim();if(!/^\|.+\|$/u.test(a)){f+=1;continue}let b=[];for(;f<c.length&&/^\|.+\|$/u.test(c[f].trim());)b.push(c[f].trim()),f+=1;b.length<3||(d+=1,0===b.slice(1).filter(a=>a.replace(/\|/gu,"").replace(/[\s\-:]/gu,"").length>0).reduce((a,b)=>{let c=b.split("|").slice(1,-1).map(a=>(0,dz.jG)(a.trim())),d=/^[\s|]*\|?\s*(?:合计|小计|总计|累计)/u.test(b);return a+c.filter((a,b)=>(""===a||"-"===a||"—"===a||"/"===a)&&(!d||"—"!==a)).length},0)&&(e+=1))}return{score:0===d?40:fF(e/d*100),detail:`表格 ${d} 个,其中字段完整 ${e} 个`}}(a,b),h=await fG(a),i=function(a){let b=dJ(a);return{score:fF(100-20*b.length-20*b.filter(a=>"error"===a.level).length),detail:`重复段落问题 ${b.length} 项`}}(a),j=function(a,b=""){let c=cL(b||a.map(a=>a.content).join("\n\n")),d=[{label:"质量标准",pattern:/质量标准|质量要求|合格率/u},{label:"计划工期",pattern:/计划工期|工期要求|日历天/u},{label:"保修",pattern:/缺陷责任期|保修|质保/u},{label:"安全目标",pattern:/安全.{0,8}目标|文明.{0,8}目标/u},{label:"项目经理",pattern:/项目经理|项目负责人/u}],e=d.filter(a=>c.some(b=>a.pattern.test(b)&&cN.test(b))),f=d.filter(a=>!e.includes(a));return{score:fF(e.length/d.length*100),detail:`招标硬性要求响应 ${e.length}/${d.length} 项${f.length?`(未响应:${f.map(a=>a.label).join("、")})`:""}`}}(a,b),k=function(a){if(!a)return{score:100,detail:"模板化未检测(无信号,按满分计)"};let b=300*Math.max(0,a.fillerRatio-.1),c=Math.min(40,8*a.vagueHitCount),d=a.difficultyCountermeasures>0?a.difficultyQuantifiedCount/a.difficultyCountermeasures:1,e=a.difficultyCountermeasures>0?Math.min(30,60*Math.max(0,.5-d)):0,f=Math.min(30,10*a.crossProjectResidue.length);return{score:fF(100-b-c-e-f),detail:`套话句占比 ${(100*a.fillerRatio).toFixed(1)}%(线 ≤10%)、模糊应答词 ${a.vagueHitCount} 处、重难点量化达标 ${a.difficultyQuantifiedCount}/${a.difficultyCountermeasures}(线 ≥50%)、跨项目残留 ${a.crossProjectResidue.length} 处;扣分 ${b.toFixed(0)}+${c.toFixed(0)}+${e.toFixed(0)}+${f.toFixed(0)}`}}(c.templating),l=[{key:"structure",label:"结构完整度",score:d.score,detail:d.detail,weight:0,baseWeight:.18},{key:"factLanding",label:"事实落位率",score:e.score,detail:e.detail,weight:0,baseWeight:.18},{key:"processParameter",label:"工艺参数密度",score:f.score,detail:f.detail,weight:0,baseWeight:.16},{key:"table",label:"表格完整度",score:g.score,detail:g.detail,weight:0,baseWeight:.12},{key:"filler",label:"废话控制",score:h.score,detail:h.detail,weight:0,baseWeight:.14},{key:"duplication",label:"重复控制",score:i.score,detail:i.detail,weight:0,baseWeight:.12},{key:"reviewResponse",label:"评标响应度",score:j.score,detail:j.detail,weight:0,baseWeight:.1}],m=.2*!!c.templating,n=[...l.map(({baseWeight:a,...b})=>({...b,weight:Number((a*(1-m)).toFixed(4))})),...m>0?[{key:"templating",label:"表述实质性",score:k.score,detail:k.detail,weight:m}]:[]],o=fF(n.reduce((a,b)=>a+b.score*b.weight,0)),p=o>=85?"专业":o>=70?"良好":o>=55?"合格":"待提升",q=[...dJ(a),...await dK(a),...dO(a),...dP(a)].slice(0,5).map(a=>a.message),r=n.filter(a=>a.score<70).map(a=>`${a.label}(${a.score}分)`);return{total:o,grade:p,dimensions:n,summary:`施工组织设计专业度评分 ${o} 分(${p};从属口径,交付主尺见六维质量报告)${c.templating&&"light"!==c.templating.level?`;模板化等级:${"heavy"===c.templating.level?"重度":"中度"}(已按「表述实质性」维度计分,不再封顶总分)`:""}${r.length?`;待提升:${r.join("、")}`:""}`,topIssues:q,caliber:c4}}async function fI(a){var b;if(!("heavy"===(b=a.templating).level||b.vagueHitCount>0||b.difficultyHeavyTemplated))return{issues:[],reviewed:!1};let c=(0,cI.T4)(a.markdown),d=[`确定性检测信号:模板化等级=${a.templating.level},套话句占比=${(100*a.templating.fillerRatio).toFixed(1)}%,模糊应答词命中=${a.templating.vagueHitCount}(${a.templating.vaguePhrases.join("、")||"无"}),重难点归因+量化双达标占比=${(100*a.templating.difficultyCountermeasureRatio).toFixed(0)}%,跨项目残留=${a.templating.crossProjectResidue.join("、")||"无"}${c.found.length?`,四新技术命中=${c.found.join("、")}`:""}`,`待复核正文(节选):
|
|
195
|
+
${function(a,b=6e3){return[a.match(/#{2,3}\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\n[\s\S]{0,3500}/u)?.[0]||"",a.replace(/#{1,6}\s+[^\n]*\n/gu,"").replace(/\s+/gu," ").slice(0,b)].filter(Boolean).join("\n\n").slice(0,b+4e3)}(a.markdown)}`,'返回 JSON:{"issues":["问题1","问题2"]}'];try{let b=await (0,dr.bb)((0,ad.y4)('你是招标技术标评审专家。对施工组织设计做语义级复核,只报告确定性规则覆盖不到的语义问题。\n复核维度(按《施工组织设计全维度校验提示词》判定标尺):\n1. 重难点三级判定:识别精准性(是否点明本项目真实难点而非泛泛而谈)→ 归因合理性(是否说明难点成因/风险来源)→ 对策匹配度(对策是否针对该难点的成因,而非通用措施堆砌);\n2. 术语等效性:同一对象是否前后术语一致(如"砼"与"混凝土"混用需统一),是否出现词面不同但概念等效的双重标准表述;\n3. 四新技术升级价值:若正文声称采用四新技术,其价值表述是否停留在"提升效率"式套话,缺少可对标官方推广目录或替代落后工艺的实质说明。\n每条问题必须包含:问题所在内容简述+判定依据(对应上面哪条维度)+一句话改进建议。\n只报告真实存在的问题,正文无问题时返回空数组;不得编造问题。只返回 JSON。'),d.join("\n\n"),{maxTokens:1200,temperature:0,signal:a.signal,diagnostics:a.diagnostics,taskKind:"structuredGeneration"});return{issues:Array.isArray(b?.issues)?b.issues.filter(a=>"string"==typeof a&&a.length>0):[],reviewed:!0}}catch(a){return{issues:[`⚠ 语义级模板化复核未完成(模型调用失败,本项未复核):${a instanceof Error?a.message:String(a)}`],reviewed:!1}}}var fJ=c(73024),fK=c.n(fJ),fL=c(76760),fM=c.n(fL),fN=c(48661);function fO(a){return Math.round(10*a)/10}function fP(a,b){let c=a.replace(/\s+/gu," ").trim();return c.length>b?`${c.slice(0,b)}…`:c}let fQ={success:"通过",failed:"失败",skipped:"跳过",running:"进行中",partial:"部分生效"},fR={blind:"暗标",open:"明标",unknown:"未判定(按明标口径)"};async function fS(a){var b;a.reviewChecklist=[{key:"export-gate",label:"导出门禁",passed:(b={exportGate:a.qualityBundle.finalExportGate,qualityReport:a.qualityBundle.qualityReport,repairStrategies:a.qualityBundle.repairStrategies}).exportGate.passed,message:b.exportGate.passed?"导出门禁通过":`仍有 ${b.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:b.qualityReport.passed,message:`${b.qualityReport.deliveryProbability}% / ${b.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:b.qualityReport.scores.completeness>=85,message:`${b.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:b.qualityReport.scores.specificity>=85,message:`${b.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:b.qualityReport.scores.compliance>=80,message:`${b.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===b.repairStrategies.filter(a=>"high"===a.priority).length,message:b.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}];let c=(0,af.Ff)(a.validationIssues);a.generationDiagnostics.quality.blockingCount+=c.blocking,a.generationDiagnostics.quality.importantCount+=c.important,a.generationDiagnostics.quality.minorCount+=c.minor,a.telemetry=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs})),c={};for(let[b,d]of Object.entries(a.diagnostics.llm.patchGuardStats||{}))c[b]={hits:d.hits+d.rejects,repaired:d.hits,failed:d.rejects+(d.rollbacks??0)};return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0,repairHeat:Object.keys(c).length>0?c:void 0}}({diagnostics:a.generationDiagnostics});let d=a.qualityBundle.finalExportGate.blockingIssues.length,e=(a.generationDiagnostics.evidence.retrievalFailures??0)>0?`,⚠ 检索失败 ${a.generationDiagnostics.evidence.retrievalFailures} 次(非「无命中」,请看进度中的 failed 事件)`:"",f=(a.generationDiagnostics.evidence.pinnedEvidenceMissed??0)>0?`,⚠ 固定证据未命中 ${a.generationDiagnostics.evidence.pinnedEvidenceMissed} 处(资料包绑定漂移)`:"";a.telemetry.qualityIssues.blockingCount=d,a.professionalScore=await fH(a.finalChapterDrafts,a.finalMarkdown,{templating:a.qualityBundle.qualityReport.templating}),a.templatingReview=a.qualityBundle.qualityReport.templating?await a.withProgressHeartbeat(()=>fI({templating:a.qualityBundle.qualityReport.templating,markdown:a.finalMarkdown,diagnostics:a.generationDiagnostics,signal:a.signal})):{issues:[],reviewed:!1},a.finalStages=[...a.executionStages,...a.finalGateRepairStages],a.suspensionChecklist=a.qualityBundle.finalExportGate.passed?void 0:(0,l.aF)(a.qualityBundle.finalExportGate.blockingIssues,a.finalChapterDrafts),a.finalStages.push((0,j.X5)({type:"validation",roleId:"agent-final-gate",status:a.qualityBundle.finalExportGate.passed?"success":"failed",message:a.qualityBundle.finalExportGate.passed?"Agent 最终门禁通过":`Agent 最终门禁未通过 ${d} 个问题(不计入交付阻断,文档照常可导出;人工复核清单见明细)`,details:a.suspensionChecklist?(0,l.$w)(a.suspensionChecklist):[]},{subtitle:"Agent 最终门禁"}));let g=a.qualityBundle.qualityReport.deliveryProbability<70;a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-delivery-score",status:a.qualityBundle.qualityReport.passed?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:a.qualityBundle.finalExportGate.passed&&!a.qualityBundle.qualityReport.passed?`${a.qualityBundle.qualityReport.summary}${g?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:a.qualityBundle.qualityReport.summary,details:g&&a.qualityBundle.finalExportGate.passed?[...a.qualityBundle.qualityReport.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:a.qualityBundle.qualityReport.actions},{subtitle:"交付评分"})),a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===a.professionalScore.grade||"良好"===a.professionalScore.grade?"success":"skipped",message:a.professionalScore.summary,details:[...a.professionalScore.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...a.professionalScore.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})),a.qualityBundle.qualityReport.templating&&"light"!==a.qualityBundle.qualityReport.templating.level&&a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===a.qualityBundle.qualityReport.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*a.qualityBundle.qualityReport.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*a.qualityBundle.qualityReport.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${a.qualityBundle.qualityReport.templating.vagueHitCount} 处)`,details:a.templatingReview.issues},{subtitle:"模板化检测"})),a.writingTaskBrief&&a.finalStages.push((0,j.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${a.writingTaskBrief.documentType},${a.writingTaskBrief.chapters.length} 章任务卡,全局写作焦点 ${a.writingTaskBrief.globalWritingFocus.length} 条`,details:[...a.writingTaskBrief.globalWritingFocus,...a.writingTaskBrief.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})),a.finalStages.push((0,j.X5)({type:"reference",roleId:"knowledge-coverage",status:a.qualityBundle.knowledgeCoverage.score>=85?"success":"failed",message:`资料确认覆盖率:${a.qualityBundle.knowledgeCoverage.score}%(证据 ${a.qualityBundle.knowledgeCoverage.evidenceCount} 条,文件 ${a.qualityBundle.knowledgeCoverage.confirmedFiles} 份)`,details:[a.qualityBundle.knowledgeCoverage.remediation]},{subtitle:"资料覆盖"})),a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-review-checklist",status:a.reviewChecklist.every(a=>a.passed)?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:`交付复核清单:通过 ${a.reviewChecklist.filter(a=>a.passed).length}/${a.reviewChecklist.length}${a.qualityBundle.finalExportGate.passed&&!a.reviewChecklist.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:a.reviewChecklist.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"}));let h=(0,n._8)(a.generationDiagnostics.metrics),i=(0,n.bz)(a.generationDiagnostics.llm.callBreakdown),k=a.generationDiagnostics.factSanitize?`,事实净化 截断${a.generationDiagnostics.factSanitize.truncated}/丢弃${a.generationDiagnostics.factSanitize.dropped}/编号补全${a.generationDiagnostics.factSanitize.repaired}`:"";if(a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${a.generationDiagnostics.llm.calls} 次,失败 ${a.generationDiagnostics.llm.failures} 次,瞬态重试 ${a.generationDiagnostics.llm.retries} 次,schema 校验失败 ${a.generationDiagnostics.llm.schemaFailures} 次,峰值并行 ${a.generationDiagnostics.llm.maxActive},检索 ${a.generationDiagnostics.evidence.searchQueries} 次/${Math.round(a.generationDiagnostics.evidence.searchMs/1e3)} 秒,证据上下文 ${a.generationDiagnostics.evidence.contextChars} 字,噪声过滤 ${a.generationDiagnostics.evidence.filteredNoise} 条,预算裁剪 ${a.generationDiagnostics.evidence.budgetDropped} 条,质量问题 阻断${a.generationDiagnostics.quality.blockingCount}/重要${a.generationDiagnostics.quality.importantCount}/轻微${a.generationDiagnostics.quality.minorCount}${k}${e}${f}${h?`,Top耗时:${h}`:""}${i?`,调用输入Top5:${i}`:""}`,details:[...(0,n.Il)(a.generationDiagnostics.metrics),...(0,n.NJ)(a.generationDiagnostics.llm.callBreakdown)]},{subtitle:"后台诊断"})),a.documentId)try{let b=function(a){let b=a.qualityReport,c=a.exportGate,d=new Date(a.generatedAt??Date.now()),e=b.mode?fR[b.mode]:"未判定(按明标口径)",f=[];f.push(`# 交付三件套报告:${a.title}`),f.push(""),f.push(`> 文档 ID:${a.documentId??"未提供"};生成时间:${d.toISOString()}`),f.push(`> 评分口径:${c2}(主尺=六维;招标六项/专业分为从属展示口径)`),f.push(`> 导出门禁:${c.passed?"通过":`未通过(${c.blockingIssues.length} 项阻断,文档照常可导出,人工复核清单见下)`};标书类型:${e}`),f.push(""),f.push("## 一、评分报告"),f.push(""),f.push("### 1.1 六维质量评分(主尺)");let g=b.dimensions||[];if(g.length>0)for(let a of(f.push("| 维度 | 得分 | 权重 | 构成明细 |"),f.push("|---|---|---|---|"),g))f.push(`| ${a.label} | ${a.score} | ${Math.round(100*a.weight)}% | ${a.detail??"—"} |`);else f.push("- (六维构成明细缺失——评级输入不完整,仅综合分可用)");if(f.push(`- 综合评分:**${b.overall}**/100;交付置信度 **${b.deliveryProbability}%** / 目标 ${b.target}%;低雷同性 ${b.scores?.uniqueness??"—"}${b.passed?";已达当前质量目标":";未达目标(按第三节预估路径补强)"}`),f.push(""),f.push("### 1.2 专业度评分(从属口径,交付主尺见六维)"),f.push(`- 总分 ${a.professionalScore.total}/100(${a.professionalScore.grade}):${a.professionalScore.summary}`),a.professionalScore.dimensions.length>0)for(let b of(f.push(""),f.push("| 维度 | 得分 | 权重 | 明细 |"),f.push("|---|---|---|---|"),a.professionalScore.dimensions))f.push(`| ${b.label} | ${b.score} | ${Math.round(100*b.weight)}% | ${b.detail} |`);if(a.professionalScore.topIssues.length>0)for(let b of(f.push(""),f.push("待修复:"),a.professionalScore.topIssues.slice(0,12)))f.push(`- ${fP(b,220)}`);if(f.push(""),f.push("### 1.3 阻断明细(终门禁)"),0===c.blockingIssues.length)f.push("- 无阻断:终检检测器全部通过。");else for(let a of c.blockingIssues){let b=a.severity?`[${a.severity}]`:`[${a.level}]`,c=a.chapterId?`(章:${a.chapterId}${a.sectionTitle?` / ${a.sectionTitle}`:""})`:"";f.push(`- ${b} ${fP(a.message,320)}${c}`),a.suggestion&&f.push(` - 建议:${fP(a.suggestion,260)}`)}let h=c.manualReviewIssues||[];if(h.length>0){for(let a of(f.push(""),f.push(`### 1.4 人工复核清单(${h.length} 项,不阻断导出)`),f.push(""),f.push("> 下列发现由声明「无自动修复路径」的检测器产出,需人工判断后处理;系统不会自动改写。"),h.slice(0,30))){let b=a.provenance?.detectorId?`[${a.provenance.detectorId}]`:"";f.push(`- ${b} ${fP(a.message,320)}`),a.suggestion&&f.push(` - 建议:${fP(a.suggestion,260)}`)}h.length>30&&f.push(`- …另有 ${h.length-30} 项未展开`)}if(c.checklist.length>0){let a=c.checklist.filter(a=>!a.passed);f.push(""),f.push(`- 门禁复核清单:通过 ${c.checklist.length-a.length}/${c.checklist.length}${a.length>0?`;未过项:${a.slice(0,10).map(a=>a.label).join("、")}${a.length>10?` 等 ${a.length} 项`:""}`:""}`)}for(let b of(f.push(""),f.push("## 二、进度(阶段/耗时/修复轮次)"),f.push(""),f.push(`### 2.1 阶段执行(共 ${a.stages.length} 个阶段)`),a.stages)){let a=b.subtitle||b.roleId,c=b.message?`:${fP(b.message,240)}`:"";f.push(`- [${fQ[b.status]}] ${a}${c}`)}f.push(""),f.push("### 2.2 耗时(按耗时降序)");let i=[...a.metrics].sort((a,b)=>b.durationMs-a.durationMs);if(0===i.length)f.push("- (无性能指标记录)");else for(let a of i){var j;f.push(`- ${a.name}:${!Number.isFinite(j=a.durationMs)||j<0?"0ms":j<1e3?`${Math.round(j)}ms`:j<6e4?`${(j/1e3).toFixed(1)}s`:`${(j/6e4).toFixed(1)}min`}`)}for(let b of(f.push(""),f.push("### 2.3 修复轮次(detectorFixerRegistry 轮序声明表口径)"),o.rk)){let c=[...a.stages].reverse().find(a=>a.roleId===b);if(c){let a=c.message?` — ${fP(c.message,200)}`:"";f.push(`- ${b}:${fQ[c.status]}${a}`)}else f.push(`- ${b}:未记录(无触发或静默通过)`)}f.push(""),f.push("## 三、下轮预估目标(按当前六维缺口)"),f.push("");let k=function(a){let b=(a.dimensions||[]).filter(a=>Number.isFinite(a.score)&&Number.isFinite(a.weight)&&a.weight>0);if(0===b.length)return;let c=b.reduce((a,b)=>a+b.weight,0),d=fO(b.reduce((a,b)=>a+b.score*b.weight,0)/c),e=Math.min(1,(a.scores?.uniqueness??90)/90),f=b.map(a=>({key:a.key,label:a.label,score:a.score,gap:Math.max(0,100-a.score),effectiveGain:fO(Math.max(0,100-a.score)*(a.weight/c)*e),detail:a.detail})).sort((a,b)=>b.effectiveGain-a.effectiveGain||a.label.localeCompare(b.label,"zh-Hans-CN")),g=fO(a.target-a.overall),h=null;if(g>0){let b=[],c=0;for(let a of f)if(a.effectiveGain<=0||(b.push(a),(c=fO(c+a.effectiveGain))>=g))break;h={target:a.target,gap:g,picks:b,covered:c}}return{dimensions:f,currentWeighted:d,uniquenessFactor:e,projectedOverall:Math.min(100,Math.round(100*e)),pathToTarget:h}}(b);if(k){for(let a of(f.push("| 维度 | 当前分 | 提升空间 | 对综合分贡献 | 补强方向 |"),f.push("|---|---|---|---|---|"),k.dimensions))f.push(`| ${a.label} | ${a.score} | ${a.gap>0?`+${a.gap}`:"0(满分)"} | ${a.effectiveGain>0?`+${a.effectiveGain.toFixed(1)}`:"0"} | ${a.detail?fP(a.detail,120):"—"} |`);f.push(`- 当前加权综合分:${k.currentWeighted.toFixed(1)}/100(uniqueness 因子 ${k.uniquenessFactor.toFixed(2)})`);let a=k.projectedOverall<b.target;if(f.push(`- 预计总分上限:**${k.projectedOverall}**/100(全维补满、uniqueness 不变的理论口径${a?`;低于目标 ${b.target}——受低雷同性因子 ${k.uniquenessFactor.toFixed(2)} 约束,需同步提升 uniqueness`:""};实际以重生成/续修产物复评)`),k.pathToTarget){let{target:a,gap:b,picks:c,covered:d}=k.pathToTarget,e=c.map(a=>`${a.label}(+${a.effectiveGain.toFixed(1)})`).join(" → ");d>=b?f.push(`- 达标路径(目标 ${a}):补强 ${e},合计 +${d.toFixed(1)} ≥ 缺口 ${b.toFixed(1)}。`):f.push(`- 达标路径(目标 ${a}):补强 ${e},合计 +${d.toFixed(1)} < 缺口 ${b.toFixed(1)}——六维补满仍不足,须按上限提示先提升低雷同性(uniqueness)再复评。`)}else f.push(`- 当前已达目标 ${b.target},无需补强路径(维持口径与阻断清零即可)。`)}else f.push("- 六维构成明细缺失,无法计算下轮预估(降级不猜数;补全评级输入后自动生成)。");return f.push(""),f.join("\n")}({documentId:a.documentId,title:a.template.outputTitle,qualityReport:a.qualityBundle.qualityReport,professionalScore:a.professionalScore,exportGate:a.qualityBundle.finalExportGate,stages:a.finalStages,metrics:a.generationDiagnostics.metrics}),c=function(a,b,c){let d=function(a,b){let c=b.trim().replace(/[^A-Za-z0-9_-]/gu,"_");if(!c)throw Error("交付报告文件名缺少文档 ID");return fM().join((0,fN.Gl)(a),"reports",`${c}-review.md`)}(a,b);fK().mkdirSync(fM().dirname(d),{recursive:!0});let e=`${d}.${process.pid}.${Date.now()}.tmp`;return fK().writeFileSync(e,c,"utf8"),fK().renameSync(e,d),d}(a.projectRoot,a.documentId,b),d=a.qualityBundle.finalExportGate.blockingIssues.length;a.finalStages.push((0,j.X5)({type:"reference",roleId:"delivery-review-report",status:"success",message:`交付三件套报告已产出:${c}`,details:[a.qualityBundle.qualityReport.summary,`专业度(从属口径):${a.professionalScore.summary}`,`阻断:${d} 项${d>0?"(人工复核清单随报告归档,不阻断交付)":"(终检检测器全部通过)"}`,"下轮预估目标:按当前六维缺口计算各维提升空间与达标路径(见报告第三节)"]},{subtitle:"交付报告"}))}catch(c){let b=c instanceof Error?c.message:String(c);a.finalStages.push((0,j.X5)({type:"reference",roleId:"delivery-review-report",status:"failed",message:`交付三件套报告产出失败(不阻断交付):${b}`},{subtitle:"交付报告"}))}}let fT={prefixCacheHitRateFloor:.4,budgetDropRatioCeiling:.3,llmFailureRateCeiling:.1};async function fU(a){let b=function(a){let b=[],c=a.llm.promptCacheHitTokens??0,d=c+(a.llm.promptCacheMissTokens??0),e=d>0?c/d:null;null!==e&&e<fT.prefixCacheHitRateFloor&&b.push(`固定前缀缓存命中率 ${(100*e).toFixed(1)}% 低于 40%:固定前缀未收敛,检查 L0/L2 恒定段结构`);let f=a.llm.reasoningTokens??0;f>0&&b.push(`推理 token 累计 ${f}:disableThinking 未生效,检查模型 provider 配置`);let g=a.evidence.raw>0?a.evidence.budgetDropped/a.evidence.raw:null;null!==g&&g>fT.budgetDropRatioCeiling&&b.push(`证据预算裁剪 ${(100*g).toFixed(1)}%(${a.evidence.budgetDropped}/${a.evidence.raw}):裁剪过重,疑似预算配置失配`);let h=a.llm.calls>0?a.llm.failures/a.llm.calls:null;return null!==h&&h>fT.llmFailureRateCeiling&&b.push(`LLM 失败率 ${(100*h).toFixed(1)}%(${a.llm.failures}/${a.llm.calls}):失败率偏高,检查限流与重试策略`),{alerts:b,metrics:{prefixCacheHitRate:e,reasoningTokens:f,budgetDropRatio:g,llmFailureRate:h}}}(a.generationDiagnostics),c=process.memoryUsage(),d=Math.round(c.rss/1048576),e=Math.round(c.heapUsed/1048576),f=function(){let a=Number(process.env.DOCUMENT_MEMORY_ALERT_MB??3072);return Number.isFinite(a)&&a>0?a:3072}();console.log(`[gen] memory(finalize) rss=${d}MB heap=${e}MB threshold=${f}MB`);let g=d>=f?[...b.alerts,`进程内存 rss=${d}MB 超过告警阈值 ${f}MB:大文档生成建议 NODE_OPTIONS=--max-old-space-size=4096,并控制并发生成任务数(DOCUMENT_MAX_CONCURRENT_GENERATIONS)`]:b.alerts;a.telemetry.healthAlerts=g,0!==g.length&&a.finalStages.push((0,j.X5)({type:"validation",roleId:"document-health-diagnosis",status:"skipped",message:`自动健康诊断:${g.length} 项告警(不阻断,供配置优化参考)`,details:g},{subtitle:"健康诊断"}))}async function fV(a){var b;(0,o.wF)();let{chapterDraftsByOrder:c,chapterGenerationStagesByOrder:e,chapterGenerationStages:f,effectiveChapters:g,input:q,failedChapterMessages:r}=a,{requirement:t}=q,v=function(a){let{signal:b,requirement:c}=a.input;return{input:a,template:a.template,effectiveChapters:a.effectiveChapters,requirement:c,signal:b,projectRoot:a.projectRoot,projectId:a.projectId,documentId:a.documentId,projectMaterialSummary:a.projectMaterialSummary,documentSpec:a.documentSpec,documentBudget:a.documentBudget,promptBindings:a.promptBindings,promptDocumentRules:a.promptDocumentRules,domainProfile:a.domainProfile,scopeConflicts:a.scopeConflicts,evaluationCriteriaItems:a.evaluationCriteriaItems,tenderRequirements:a.tenderRequirements,requirementAssignments:a.requirementAssignments,requirementsSimilarity:a.requirementsSimilarity,factTokenScopeClassifier:a.factTokenScopeClassifier,professionalDepthClassifier:a.professionalDepthClassifier,blueprintData:a.blueprintData,bidComposition:a.bidComposition,billFactLock:a.billFactLock,drawingFactLock:a.drawingFactLock,requirementSemantics:a.requirementSemantics,generationDiagnostics:a.generationDiagnostics,repairPromptTexts:a.repairPromptTexts,progressStages:a.progressStages,chapterGenerationStages:a.chapterGenerationStages,emitProgress:a.emitProgress,withProgressHeartbeat:a.withProgressHeartbeat,missingItems:a.missingItems,failedChapterMessages:a.failedChapterMessages,indexHealth:a.indexHealth,webResearchReport:a.webResearchReport,retrievalCoverageReports:a.retrievalCoverageReports,writingTaskBrief:a.writingTaskBrief,clarificationOverrides:a.clarificationOverrides,clarificationAmendments:a.clarificationAmendments,globalConsistencyIssues:a.globalConsistencyIssues,agentWorkflow:a.agentWorkflow,factExtractionPromptTexts:a.factExtractionPromptTexts,readiness:a.readiness,allEvidence:a.allEvidence,facts:{},structuredFacts:[],governedStructuredFacts:[],factsModel:void 0,chapterDrafts:[],finalChapterDrafts:[],finalMarkdown:"",validationIssues:[],baseValidationIssues:[],executionStages:[],finalGateRepairStages:[],sources:[],qualityBundle:void 0,scheduleAuthority:void 0,assemblyRateAuthority:void 0,scaleSummary:void 0,supportAuthority:void 0,laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,surfaceFixContext:{laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,resourceBreakdownAuthority:void 0,supportFormAuthority:void 0},decisionLockEntries:[],finalStages:[],reviewChecklist:[],telemetry:void 0,professionalScore:void 0,templatingReview:{issues:[],reviewed:!1},assets:[],validation:void 0,rebuildFinalMarkdown:()=>"",recomputeFinalValidationBundle:async()=>void 0}}(a),w=c.filter(a=>!!a);v.chapterDrafts=w,f.push(...e.filter(a=>!!a));let x=0===(b={chapterDraftCount:w.length,failedChapterMessages:r}).chapterDraftCount?`章节生成未完成:${b.failedChapterMessages.join(";")||"没有生成任何有效章节"}`:null;if(x)throw Error(x);await u(v),await dW(v),function(a){let b=(0,s.dW)(a.chapterDrafts);b.insertedIn&&(a.chapterDrafts=b.chapters,a.generationDiagnostics.llm.lastInfo=`安全目标承诺句兜底:${b.insertedIn}(写作侧未写出安全目标,按投标人承诺口径补入)`);let c=(0,k._C)(a.bidComposition),d=(0,k.kO)(a.bidComposition),e=a.bidComposition?.formatRules.cover==="forbidden",f=(0,ad.rs)((0,ad.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,exportSettings:a.template.exportSettings,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.chapterDrafts,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:a.chapterDrafts.map(b=>({id:b.id,title:b.title,chars:(0,i.V7)(b.content),status:(0,n.DR)(b,a.documentBudget.chapterTargets.get(b.id)),updatedAt:Date.now()})),checkpointChapters:a.chapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}),a.chapterDrafts,{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e});a.finalChapterDrafts=f.chapters.map(b=>{let c=a.effectiveChapters.find(a=>a.id===b.id)||b;return{...b,sections:b.sections||[],content:(0,n.w_)(b.content,c)}}),a.finalMarkdown=(0,ad.rs)((0,ad.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,exportSettings:a.template.exportSettings,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.finalChapterDrafts,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:[],checkpointChapters:a.finalChapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}),a.finalChapterDrafts,{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}).markdown,a.finalMarkdown=(0,s._D)((0,n.Ht)((0,ad.bR)((0,n.Xr)((0,ad.kT)((0,ad.K7)(dR((0,n.jO)(a.finalMarkdown,a.structuredFacts,{bodyTableForbidden:c}),a.projectMaterialSummary))))))).markdown,c||(a.finalMarkdown=(0,c_.gA)(a.finalMarkdown),a.finalMarkdown=(0,c_.aH)(a.finalMarkdown,dX(a),{substituteTable:b=>(0,dx.Ik)(a.blueprintData,b)}).markdown),a.finalMarkdown=(0,ae.u7)(a.finalMarkdown,{plan:a.bidComposition?.appendixPlan||[],blueprintData:a.blueprintData})}(v),await dZ(v),await d$(v),await er(v),await es(v),await eu(v),await aA(v),await eX(v),await e6(v),await fk(v),await fn(v),await fq(v),await e_(v),await fu(v),await e5(v),await fw(v),await fx(v),await fy(v),await fz(v),await fA(v),await fv(v),await e2(v),await e0(v),await e1(v),await e$(v);{let a=(0,p.tI)(v.finalMarkdown,v.truthValues||[]);if(a.inserted.length>0){v.finalMarkdown=a.markdown;let b=(0,j.X5)({type:"validation",roleId:"caliber-placement-backfill",status:"success",message:`口径链尾回填:${a.inserted.length} 项项目级口径在正文逐字缺位,已按真值层生效值补写(${a.inserted.map(a=>`${a.attribute}=${a.value}`).slice(0,6).join("、")})`},{subtitle:"口径回填"});(0,j.fx)(v.executionStages,b),await v.recomputeFinalValidationBundle()}}await fB(v),await fC(v),await fD(v),await fE(v),await e3(v);{let a=function(a){let b=a.finalMarkdown;if(!b)return{markdown:b,restored:0,labels:[]};let c=cD(b),e=cp(c),f=cq(c);if(0===e.length&&0===f.length)return{markdown:b,restored:0,labels:[]};let g=b,h=0,i=[];for(let b of a.finalChapterDrafts)for(let a of(b.content??"").split(/(?<=[。;\n])/u)){let b=a.trim();if(b.length<8)continue;let c=(0,aH.eI)(b).text;if(c===b||c.trim().length<8||!(cp(b).some(a=>e.some(b=>cv(a,b)))||cq(b).some(a=>f.some(b=>cw(a,b)))))continue;let j=function(a){let b=a.split(/([,,、;;])/u),c=[];for(let a=0;a<b.length;a+=2){let e=b[a]??"";if(eK(e)&&!function(a){return!!eK(a)&&!!(cq(a).length>0||(d||(d=RegExp(cm.source,"u")),d.test(a)))&&!eK(a.replace(cn,"").replace(cm,""))}(e))continue;c.push(e);let f=b[a+1];f&&a+2<b.length&&c.push(f)}return c.join("").replace(/^[,,、]+/u,"").replace(/[,,、]+$/u,"")}(b);if(j===c||!g.includes(c)||g.includes(j))continue;let k=cp(j).filter(a=>!cp(c).some(b=>cv(b,a)));if(0!==k.length||0!==cq(j).length)for(let a of(g=g.replace(c,()=>j),h+=1,k)){let b=cs(a);i.includes(b)||i.push(b)}}return 0===h||eD(g)<eD(b)?{markdown:b,restored:0,labels:[]}:{markdown:g,restored:h,labels:i}}(v);if(a.restored>0){v.finalMarkdown=a.markdown,await v.recomputeFinalValidationBundle();let b=`链尾编制依据引用回补:${a.restored} 处被链尾指向型清洗误删的标准引用小句按章草稿恢复(覆盖 ${a.labels.slice(0,6).join("、")}${a.labels.length>6?" 等":""})`;v.generationDiagnostics.llm.lastInfo=b,(0,j.fx)(v.finalGateRepairStages,(0,j.X5)({type:"reference",roleId:"basis-regulations-tail-citation-replay",status:"success",message:b,details:a.labels.slice(0,12)},{subtitle:"链尾编制依据引用回补"}))}}{let a=function(a){let b=cE(a.finalMarkdown);if(0===b.usedNotDeclared.length)return{inserted:0,labels:[]};let c=cD(a.finalMarkdown);if(!c)return{inserted:0,labels:[]};let d=b.usedNotDeclared.filter(a=>!eG(c,a));if(0===d.length)return{inserted:0,labels:[]};let e=eI(a.finalMarkdown,d.map(b=>eH(b,a.finalMarkdown)));return e?{inserted:d.length,labels:d.map(cF),markdown:e}:{inserted:0,labels:[]}}(v);if(a.inserted>0&&a.markdown){v.finalMarkdown=a.markdown,await v.recomputeFinalValidationBundle();let b=`链尾编制依据回补:${a.inserted} 条引用未声明的标准补入编制依据小节(${a.labels.slice(0,6).join("、")})`;v.generationDiagnostics.llm.lastInfo=b,(0,j.fx)(v.finalGateRepairStages,(0,j.X5)({type:"reference",roleId:"basis-regulations-tail-backfill",status:"success",message:b,details:a.labels.slice(0,12)},{subtitle:"链尾编制依据回补"}))}}await e0(v),await fS(v),await fU(v);let y=v.finalChapterDrafts.map(a=>({...a,evidence:(0,h.QR)(a.evidence||[],{preservePinned:!0})}));v.finalChapterDrafts=y;let z=(0,k.Lf)(v.template.exportSettings,v.bidComposition?.formatRules);return z.applied.length>0&&(0,j.fx)(v.finalStages,(0,j.X5)({type:"reference",roleId:"tender-format-applied",status:"success",message:`招标规定排版已应用(${z.applied.length} 项):${z.applied.slice(0,5).join("、")}`,details:["来源:招标文件「格式要求」条款(正文/标题字体、字号、行距、装订线、页数上限)","优先级:招标规定 > 模板导出设置(前者为强制要求)",...z.applied]},{subtitle:"招标排版应用"})),{templateId:v.template.id,templateName:v.template.name,title:v.template.outputTitle,requirement:t||"",projectRoot:v.projectRoot,projectId:v.projectId,exportSettings:z.settings,generationSettings:v.template.generationSettings,facts:v.facts,structuredFacts:v.structuredFacts,factsModel:v.factsModel,chapters:y,sources:v.sources,missingItems:[...new Set(v.missingItems)],validation:v.validation,validationIssues:v.validationIssues,exportGate:v.qualityBundle.finalExportGate,executionStages:v.finalStages,assets:v.assets,partialChapters:v.finalChapterDrafts.map(a=>({id:a.id,title:a.title,chars:(0,i.V7)(a.content),status:(0,n.DR)(a,v.documentBudget.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:y,promptRules:v.promptDocumentRules,agentWorkflow:v.agentWorkflow,reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:v.generationDiagnostics,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:v.template,chapters:g,requirement:t}),knowledgeCoverage:v.qualityBundle.knowledgeCoverage,factTraces:v.qualityBundle.factTraces,chapterCoverage:v.qualityBundle.chapterCoverage,retrievalCoverage:v.retrievalCoverageReports,qualityReport:v.qualityBundle.qualityReport,repairStrategies:v.qualityBundle.repairStrategies,reviewChecklist:v.reviewChecklist,professionalScore:v.professionalScore,templatingReviewIssues:v.templatingReview.issues,authorityAudit:v.authorityAuditReport,suspensionChecklist:v.suspensionChecklist??(v.qualityBundle.finalExportGate.passed?void 0:(0,l.aF)(v.qualityBundle.finalExportGate.blockingIssues,v.finalChapterDrafts)),writingTaskBrief:v.writingTaskBrief,workflowVersion:m.x,telemetry:v.telemetry},generatedAt:Date.now(),markdown:v.finalMarkdown,bidComposition:v.bidComposition}}var fW=c(71678),fX=c(29055),fY=c(30111);let fZ=[{id:"overview",title:"工程概况与总体理解",requiredSectionPatterns:[/编制依据|编制说明/u,/工程概况|项目概况|基本概况/u,/现场踏勘|施工条件|现场条件/u],chapterPatterns:[/概况|总体|理解|说明|编制|项目/u],remedy:"应设置工程概况章节,包含编制依据、工程基本概况、现场条件与总体理解。",level:"required"},{id:"major-content",title:"项目主要施工内容",requiredSectionPatterns:[/主要施工内容|主要施工项目|施工内容/u],chapterPatterns:[/概况|总体|理解|主要施工|工程/u],remedy:'必须包含"项目主要施工内容"小节,按工作包展开施工概况、施工流程、施工方法。',level:"required"},{id:"key-difficulty",title:"重难点分析与对策",requiredSectionPatterns:[/重点.*难点|难点.*对策|重难点/u],chapterPatterns:[/概况|总体|理解|重点|难点|施工/u],remedy:"应设置项目特点、重点、难点分析小节,并逐项给出应对措施与责任闭环。",level:"required"},{id:"deployment",title:"施工部署与施工组织",requiredSectionPatterns:[/施工部署|总体部署|流水|施工顺序|施工区段/u],chapterPatterns:[/部署|组织|总体|方案/u],remedy:"应设置施工部署小节,明确流水段划分、施工顺序与资源调配。",level:"required"},{id:"schedule",title:"进度计划与工期保障",requiredSectionPatterns:[/进度计划|工期|节点/u],chapterPatterns:[/进度|工期|计划|保障/u],remedy:"应设置进度计划与工期保障小节,含总进度计划、关键节点与纠偏措施。",level:"required"},{id:"quality",title:"质量保证体系与措施",requiredSectionPatterns:[/质量/u],chapterPatterns:[/质量|验收|保障|措施/u],remedy:"应设置质量保证体系与措施小节,含质量目标、三检、隐蔽验收、通病防治。",level:"required"},{id:"safety",title:"安全文明施工与危大工程管控",requiredSectionPatterns:[/安全/u,/危大工程|危大/u],chapterPatterns:[/安全|文明|风险|危大|保障|措施/u],remedy:"应设置安全管理与危大工程管控小节,含危险源辨识、危大清单、专项方案。",level:"required"},{id:"resources",title:"劳动力材料机械设备配置",requiredSectionPatterns:[/劳动力|机械设备|材料.*计划|资源配置|人材机/u],chapterPatterns:[/资源|劳动力|机械|材料|设备|计划/u],remedy:"应设置资源配置小节,含分阶段劳动力、机械设备投入与材料进场计划。",level:"required"},{id:"environment",title:"绿色文明施工与环保措施",requiredSectionPatterns:[/文明施工|扬尘|噪声|绿色|环保|四节/u],chapterPatterns:[/文明|绿色|环保|扬尘|噪声|保障|措施/u],remedy:"应设置文明施工与绿色施工小节,含扬尘噪声管控与四节一环保措施。",level:"required"},{id:"emergency",title:"应急管理体系",requiredSectionPatterns:[/应急/u],chapterPatterns:[/应急|安全|保障|措施/u],remedy:"应设置应急管理小节,含应急组织、物资储备与专项预案。",level:"recommended"}],f$={building:[{id:"key-difficulty",title:"危大工程专项管控(房建)",requiredSectionPatterns:[/深基坑|高支模|起重吊装|脚手架/u],chapterPatterns:[/危大|安全|专项/u],remedy:"房建项目应对深基坑、高支模、起重吊装、脚手架等危大工程逐项给出专项方案与安全管理措施。",level:"recommended"}],municipal:[{id:"key-difficulty",title:"交通导改与管线保护(市政)",requiredSectionPatterns:[/交通导改|交通导行|占道施工/u,/管线保护|管线探测/u],chapterPatterns:[/交通|管线|安全|专项|保障/u],remedy:"市政项目应设置交通导改与既有管线保护专项内容。",level:"recommended"}],renovation:[{id:"key-difficulty",title:"居民协调与既有保护(改造)",requiredSectionPatterns:[/居民|扰民|既有.*保护|不中断/u],chapterPatterns:[/居民|协调|保护|保障|专项/u],remedy:"改造项目应设置居民沟通协调与既有设施保护专项内容。",level:"recommended"}],decoration:[{id:"key-difficulty",title:"成品保护与交叉施工(装饰)",requiredSectionPatterns:[/成品保护/u,/交叉施工|工序穿插/u],chapterPatterns:[/成品保护|交叉|协调|保障|专项/u],remedy:"装饰项目应设置成品保护与交叉施工工序优化专项内容。",level:"recommended"}]};function f_(a){return(0,cj.GQ)(a).replace(/\s+/gu,"").toLowerCase()}function f0(a){return f_(`${a.title} ${(a.sections||[]).join(" ")}`).slice(0,800)}function f1(a){var b;let c,d=(b=a.chapters,[...fZ].map(a=>{let c=[],d=new Set;for(let e of b){let b=f_(`${e.title} ${(e.sections||[]).join(" ")}`);for(let f of a.requiredSectionPatterns)f.test(b)&&!d.has(f)&&(d.add(f),c.push(e.title))}let e=[...new Set(c)],f=a.requiredSectionPatterns.filter(a=>!d.has(a)).map(a=>(function(a){let b=a.source.replace(/[\\/^$.*+?()[\]{}]/gu,"").replace(/u$/u,"");return b.split("|").map(a=>a.trim()).find(Boolean)||b})(a)),g=d.size===a.requiredSectionPatterns.length?e.length>1?"fragmented":"satisfied":"missing";return{groupId:a.id,groupTitle:a.title,level:a.level,status:g,carrierChapters:e,missingSections:f,remedy:a.remedy}})),e=[],f=d.filter(a=>"required"===a.level&&"missing"===a.status);for(let a of f)e.push({level:"error",severity:"blocker",message:`评标结构缺失:${a.groupTitle}(缺少:${a.missingSections.join("、")})`,suggestion:a.remedy});for(let a of d.filter(a=>"fragmented"===a.status))e.push({level:"warning",severity:"warning",message:`${a.groupTitle} 小节散落在 ${a.carrierChapters.length} 个章节(${a.carrierChapters.join("、")}),结构可能失真`,suggestion:"建议将同类内容集中到一个承载章节,避免章节间职责重叠。"});for(let b of a.chapters){let a=(b.sections||[]).length;a>18&&e.push({level:"warning",severity:"warning",message:`${b.title} 规划小节 ${a} 个,超过 18 个上限,易产生内容膨胀与重复`,suggestion:"合并语义相近的小节,或将细分内容下移为三级小节而非二级小节。"})}let g=a.chapters.map(a=>({...a,sections:[...a.sections||[]]})),h=new Set;for(let a of f){let b=fZ.find(b=>b.id===a.groupId);if(!b)continue;let c=g.findIndex(a=>{let c=f_(a.title);return b.chapterPatterns.some(a=>a.test(c))&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线/u.test(c)}),d=g[c>=0?c:0];for(let c of a.missingSections.filter(a=>!h.has(a))){h.add(c);let a=!function(a){let b=(0,cj.GQ)(a).replace(/\s+/gu,"");return b.length>0&&b.length<=3&&/^[\u4e00-\u9fa5]+$/u.test(b)}(c)?c:b.title;!(0,fW.xb)(a)&&(d.sections.some(b=>f_(b).includes(f_(a))||f_(a).includes(f_(b)))||d.sections.push(a))}}let i=/^(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施$/u;for(let a of g){if(!/人[、,,]材[、,,]机/u.test(a.title))continue;let b=new Set,c=[];for(let d of a.sections){if(f_(d)===f_(a.title))continue;let e=i.exec(d.trim());e?b.has(e[1])||(b.add(e[1]),c.push(d.trim())):c.push(d)}for(let a of["人","材","机"])b.has(a)||c.push(`确保${a}的保障体系与措施`);c.length!==a.sections.length&&(a.sections=c)}if(a.evaluationItems?.length){let b=a.chapters.map(f0);for(let{item:d}of(c=function(a,b,c){let d=[],e=a.map(f0);for(let a of b){let b=a.title;if(!b||e.some(a=>(function(a,b){let c=f_(b);return!!c&&(a.includes(c)||c.includes(a.slice(0,40)))})(a,b)))continue;let f=0;if(c?.semanticSimilarity)for(let a of e)f=Math.max(f,c.semanticSimilarity(b,a));f>=aX.Eh||d.push({item:a,title:b,bestSimilarity:c?.semanticSimilarity?f:void 0})}return{items:b,uncovered:d}}(a.chapters,a.evaluationItems,{semanticSimilarity:a.semanticSimilarity})).uncovered){let c=d.title;if(!c||(0,cj.Fe)(c)||(0,cj.ob)(c)||(0,fW.xb)(c))continue;let f=b.reduce((b,d,e)=>{let f=a.semanticSimilarity?a.semanticSimilarity(c,d):+!!d.includes(f_(c));return f>b.score?{index:e,score:f}:b},{index:-1,score:-1}).index,h=g[f>=0?f:0];h.sections.some(a=>f_(a).includes(f_(c))||f_(c).includes(f_(a)))||(h.sections.push(c),h.purpose=`${h.purpose||""};系统已按招标文件技术评审条目自动补足小节“${c}”,必须基于项目资料与适用技术展开实质内容。`,e.push({level:"warning",severity:"warning",message:`评分标准条目“${c}”无承接章节,已自动补小节“${c}”至“${h.title}”`,suggestion:"请确认补充小节与招标文件评审条目口径一致。"}))}}for(let b of(0,fX.y)(a))if("general"!==b)for(let a of f$[b]){let b=f_(g.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" "));if(a.requiredSectionPatterns.some(a=>a.test(b)))continue;let c=g.findIndex(b=>{let c=f_(b.title);return a.chapterPatterns.some(a=>a.test(c))}),d=g[c>=0?c:0];(0,fW.xb)(a.title)||d.sections.push(a.title)}return{diagnostics:d,issues:e,enrichedChapters:g,criteriaAudit:c}}function f2(a){return a.replace(/\s+/gu,"").toLowerCase()}var f3=c(81892),f4=c(30355),f5=c(2773),f6=c(38115),f7=c(31129);async function f8(a){a.planning.generationDiagnostics.metrics.push({name:"phase:plan",startedAt:a.planning.planPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-a.planning.planPhaseStartedAt}),a.chapterLoop.draftPhaseStartedAt=Date.now();let b=(0,v.UO)(a.blueprint.billFactLock,a.planning.effectiveChapters),c=(0,bX.ym)(a.understanding.writerEvidence,{基坑开挖深度:a.understanding.canonicalFacts?.byKey?.excavation_depth?.value}),d=function(a){let b=[],c=[],d=[],e=new Set,f=0,g=0,h=0,i=0,j=a.maxAmendments??80;for(let k of a.texts||[]){let a=String(k?.text||""),l=String(k?.source||"");if(!a||!bf(l))continue;f+=1;let m=new Set;for(let d of function(a){let b=[],c=[...a.matchAll(bt)];for(let d=0;d<c.length;d+=1){let e=c[d],f=e.index||0,g=f+e[0].length,h=a.slice(g,by(a,g).end).trim(),i=bz(h);if(!i)continue;let j=by(a,f).start,k=c[d-1],l=k?.index===void 0?0:k.index+k[0].length,m=Math.max(a.slice(j,f).trim()?j:function(a,b){let c=b;for(;c>0;){let b="\n"===a[c-1]?c-1:c,d=a.lastIndexOf("\n",Math.max(0,b-1))+1;if(a.slice(d,b).trim())return d;c=d}return 0}(a,j),l);b.push({question:function(a){let b=[...a.matchAll(RegExp(bu.source,"gu"))],c=b[b.length-1],d=c?.index===void 0?a:a.slice(c.index+c[0].length),e=[...d.matchAll(RegExp(bv.source,"gu"))],f=e[e.length-1];if(f?.index!==void 0&&f.index>0){let a=d.slice(f.index+f[0].length);a.trim().length>=6&&(d=a)}return bx(d).slice(-300)}(a.slice(m,f)),answer:i,questionParagraph:a.slice(m,f).trim(),answerParagraph:h})}return b}(a)){g+=1,m.add(d.questionParagraph),m.add(d.answerParagraph);let a=(function(a){let b=a.filter(a=>"cancel"===a.kind),c=a.map(a=>{if("cancel"===a.kind)return a;let c=a.after;for(let a of b)a.object.length>=3&&c.includes(a.object)&&(c=c.replace(a.object,""));return c===a.after?a:{...a,after:bP(c)}});return c.filter((a,b)=>!(a.after.length<2)&&!c.some((c,d)=>d!==b&&!(c.after.length<4)&&(!!((0,w.K3)(c.object)===(0,w.K3)(a.object)&&"confirm"===a.kind&&a.after.includes(c.after))||c.after.length<a.after.length&&a.after.includes(c.after)&&bE.test(a.action))))})(function(a,b,c){let d=[],e=b.slice(0,200),f=function(a){let b=bR(a);if(b.length>0)return b[0].object;let c=bQ(a);for(let a=c.length-1;a>=0;a-=1){let b=c[a],d=bO(b.split(/是否|要不要|需不需要|可否|能否|多少|多大|怎么|如何|为何|为什么|请明确|请确认|请问|有无/u)[0]||b);if(d.length>=2)return d}return bO(c[c.length-1]||a)}(a),g=bR(a),h={source:c,excerpt:e},i=bQ(b);for(let a=0;a<i.length;a+=1){let b=i[a];if(b.length<2)continue;let c=bA.exec(b);if(c){let e=(()=>{let b=i[a+1];return!b||!/^(?:并|且|同时|另|还|再)/u.test(b)||bA.test(b)||bB.test(b)?"":b})(),j=bP(`${b.slice(c.index+c[0].length)}${e?`。${e}`:""}`),k=bO(b.slice(0,c.index));if(j.length<2||j.length>60||bH.test(j)||bI.test(j))continue;let l=[...k.length>=2&&k!==f&&!bJ.test(k)?[bS(k)]:[],...g.filter(a=>a.complement!==j).map(a=>bS(a.complement))];d.push({kind:"replace",object:k.length>=2&&k!==f?k:f,action:c[0].trim(),after:j,before:l,...h});continue}let e=bB.exec(b);if(e){let a=bO(b.slice(0,e.index)),c=a.length>=2?a:f,g=bP(b.slice(e.index+e[0].length)),i=`${e[0]}${g}`.slice(0,40);if(/^不予/u.test(e[0])&&bJ.test(b))continue;let j=a.length>=2&&(bC.test(e[0])||"strong"===bN(a))?[bS(a)]:[];d.push({kind:"cancel",object:c,action:e[0].trim(),after:i,before:j,...h});continue}}let j=bD.exec(b);if(j&&!bH.test(b)&&!bI.test(b)){let a=bP(bz(b)),c=bO(/以([^,。;]{2,12})为(?:准|分界(?:线|点)?|依据|界限|原则)/u.exec(a)?.[1]||f);a.length>=4&&d.push({kind:"confirm",object:c||f,action:j[0].slice(0,16),after:a,before:[],...h})}for(let c of bQ(b)){var k;if(bF.test(c)||!bE.test(c))continue;let b=bP((String((k=a)||"").split(/[。;;\n]/u).map(a=>a.trim()).filter(Boolean).pop()||k).replace(/[??]+$/u,"").replace(/^(?:请明确|请确认|请设计确认|请问|明确)+/u,"").replace(/是否|要不要|需不需要|可否|能否|能不能|可不可以/u,a=>"需不需要"===a?"需":"可否"===a||"能否"===a||"能不能"===a||"可不可以"===a?"可以":"").replace(/有无/u,"").trim());if(!(b.length<4)){d.push({kind:"confirm",object:f,action:c.replace(/[。!]$/u,""),after:b,before:[],...h});break}}if(0===d.length){let c=bP(b.replace(/[。!]$/u,"").replace(/^(?:无误|正确|无异议|没问题|没有问题|符合)[,,、]?/u,""));c.length>=2&&c.length<=40&&/[??]/u.test(a)&&bG.test(a)&&!bH.test(c)&&!bI.test(c)&&!bJ.test(c)&&!bA.test(c)&&!bB.test(c)&&d.push({kind:"confirm",object:f,action:"短答",after:c,before:[],...h})}return d.slice(0,3)}(d.question,d.answer,l)).filter(a=>a.object.length>=2&&a.after.length>=2);if(0===a.length){let a=d.answer.trim();a.length>=2&&a.length<=40&&!bH.test(a)&&!bJ.test(a)&&c.push({question:d.question.slice(0,80),answer:a.slice(0,80),source:l});continue}for(let c of a){let a=`${(0,w.K3)(c.object)}|${(0,w.K3)(c.after)}`;e.has(a)||b.length>=j||(e.add(a),b.push(c))}}for(let b of a.split(/\n+/u)){let a=b.trim();!(a.length<8||m.has(a))&&bp.test(a)&&bq.test(a)&&(h+=1,br.test(a)&&(i+=1),d.push({text:a.slice(0,120),source:l}))}}return{amendments:b,unparsedAnswers:c,uncoveredStatements:{count:h,measureShaped:i,samples:[...d].sort((a,b)=>bs(a.text)-bs(b.text)).slice(0,20)},sourceCount:f,pairCount:g}}({texts:function(a,b){let c=[],d=new Set;for(let e of a||[]){if(!e||!bf(e))continue;let a=b(e);if(!a?.chunks?.length)continue;let f=a.file?.relativePath||e;if(d.has(f))continue;d.add(f);let g=[];for(let b of a.chunks){let a=String(b.sectionTitle||"").trim(),c=String(b.content||"").trim();a&&g.push(a),c&&c!==a&&g.push(c)}let h=g.join("\n").trim();h&&c.push({text:h,source:f})}return c}([...a.understanding.availableEvidenceScopePaths,...a.prepare.materialFilePaths],b=>a.understanding.getCachedFileDetail(b))}),e=function(a,b=[]){return 0===b.length?[...a]:a.map(a=>{let c=(0,v.o7)({name:a.object,description:`${a.object} ${a.after}`},b);return c?{...a,chapterTitle:c.chapterTitle,...c.section?{section:c.section}:{}}:a})}(d.amendments,a.planning.effectiveChapters);if(d.sourceCount>0||e.length>0){a.planning.clarificationAmendments={...d,amendments:e};let b=e.filter(a=>a.chapterTitle).length;for(let a of(console.warn(`[clarification] 答疑技术性修正账本:${e.length} 条(按章归属 ${b} / 全文适用 ${e.length-b}),源 ${d.sourceCount} 份、问答对 ${d.pairCount};缺口:未解析短答 ${d.unparsedAnswers.length} 条、未覆盖平铺技术陈述 ${d.uncoveredStatements.count} 条(其中量值形态 ${d.uncoveredStatements.measureShaped} 条最像漏抽的技术口径,需人工过目)`),d.unparsedAnswers.slice(0,5)))console.warn(`[clarification] 未解析答句(人工复核):Q「${a.question}」→ A「${a.answer}」`);for(let a of d.uncoveredStatements.samples.slice(0,5))console.warn(`[clarification] 未覆盖平铺陈述(无问答结构,判据不抽):${a.text}`)}let h=a=>bf(a)?(0,p.eA)(a)/bU:1;for(let d=0;d<a.planning.effectiveChapters.length;d+=a.blueprint.chapterConcurrency){let l=a.planning.effectiveChapters.slice(d,d+a.blueprint.chapterConcurrency);for(let m of(await Promise.all(l.map(async(l,m)=>{let p,u=d+m;(0,f.Te)(a.global.input.signal);let w=a.understanding.rolePoolRisk??dm({totalChunks:0,loadedChunks:0,vectorReady:void 0}),x=a.blueprint.blueprintActive?{missing:[],failedChecks:[]}:(0,t.RT)(l.title,a.blueprint.integratedBlueprint?.validation,a.planning.chapterIntentClassifier);if(x.missing.length>0){let b=x.failedChecks.length>0?`蓝图校验项「${x.failedChecks.join("、")}」未通过`:"蓝图校验未通过或构建异常",c=(a.blueprint.integratedBlueprint?.diagnostics?.warnings??[]).filter(a=>/清单|知识库索引|索引/u.test(a)).slice(0,3),d=`${(0,cj.GQ)(l.title)} 依赖蓝图权威 [${x.missing.join("、")}],${b},已按节点级把关阻断生成`,e=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:d,details:["数值密集型章所需蓝图权威不可用时禁止无权威成稿",...c,c.length>0?"以上为清单侧诊断:按提示补齐资料/重建索引后重试;若本项目确无工程量清单,请在模板资料需求中确认「工程量清单」为必需项":"请检查清单解析与蓝图构建诊断后重试"],progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"章节阻断"}},{subtitle:(0,cj.GQ)(l.title),order:u});a.global.progressStages.push(e),a.understanding.failedChapterMessages.push(d),a.understanding.chapterGenerationStagesByOrder[u]=e,a.global.emitProgress();return}let A=Date.now(),B=a.global.progressStages.length;try{var C;let d,m,D,E;a.global.progressStages.push((0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,cj.GQ)(l.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${u+1}/${a.planning.effectiveChapters.length}`,`二级小节:${l.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"章节生成"}},{subtitle:(0,cj.GQ)(l.title),order:u})),a.global.emitProgress();let F=a.global.input.resumeChapters?.find(a=>a.id===l.id||a.title===l.title),G=F?.content?.trim(),H=F?.evidence?.length?[...F.evidence]:[],I=a.prepare.projectUnderstanding.chapterPlans.find(a=>a.chapterId===l.id||a.chapterTitle===l.title),J=I?Object.values(I.evidenceQueries).flat().filter(Boolean):[],N=l.queries.length>0?l.queries:[a.prepare.template.name,a.prepare.template.outputTitle,l.title],O=a.understanding.chapterGraphMap.get(l.id);if(a.understanding.projectGraph&&O&&O.graphFiles.size>0)for(let b of[...O.graphFiles]){let c=a.understanding.getCachedFileDetail(b);if(c?.chunks?.length)for(let d of c.chunks)H.push({chapterId:l.id,filePath:c.file?.relativePath||b,score:5+(O.graphWorks.length+O.graphMethods.length)*.5,content:d.content,roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),sectionTitle:d.sectionTitle,source:"graph-evidence"})}let P=a.planning.chapterIntentClassifier.needsBasicFacts(l.title),Q=a.blueprint.billFactLock?(0,v.Zc)(a.blueprint.billFactLock,l.title,l.sections||[]):[],R=(0,n.QP)(l,[...N,...J,...Q],[]),S=Date.now();a.global.progressStages[B]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,cj.GQ)(l.title)} 正在执行质量优先的章节检索${O?.graphFiles.size?`(图谱匹配 ${O.graphFiles.size} 个文件)`:""}`,details:R.map(a=>`检索:${a.slice(0,42)}`),progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,cj.GQ)(l.title),order:u}),a.global.emitProgress();let T=G?[]:[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),U=G?[]:a.understanding.scopedIntelligence?.evidenceByChapterId?.[l.id]||[];if(U.length>0){H.push(...U);let b=a.planning.generationDiagnostics.evidence;b.intentEvidenceInjected=(b.intentEvidenceInjected??0)+U.length}let V=[],W=(l.requiredFacts||[]).filter(a=>!!a&&!R.some(b=>b.includes(a)||a.includes(b))).map(a=>`${l.title} ${a}`),X=(a.prepare.requirementSemantics?.factClues||[]).filter(a=>!R.some(b=>b.includes(a)||a.includes(b))&&!W.some(b=>b.includes(a)||a.includes(b))).map(a=>`${l.title} ${a}`.trim()).slice(0,8),Y=[...R,...W,...X];if(T.length>0&&Y.length>0){(0,f.Te)(a.global.input.signal);let b=await (0,f.l$)(Y,async b=>a.understanding.searchWithCache(b,T,Math.min(a.understanding.requestedEvidencePerChapter,12),l.title,a.prepare.materialScope.selectedMaterialRoots),{kind:"search"});V.push(...b)}for(let b of(a.planning.generationDiagnostics.evidence.searchQueries+=Y.length,a.planning.generationDiagnostics.evidence.searchMs+=Date.now()-S,a.global.progressStages[B]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,cj.GQ)(l.title)} KB 检索完成:${Y.length} 组查询,准备深度召回与语义排序`,progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,cj.GQ)(l.title),order:u}),a.global.emitProgress(),V)){H.push(...b.map(b=>({chapterId:l.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:b.source})));let c=a.planning.generationDiagnostics.evidence;c.retrievedEvidenceInjected=(c.retrievedEvidenceInjected??0)+b.length}P&&T.length>0&&a.blueprint.basicFactSearchResults.length>0&&H.push(...a.blueprint.basicFactSearchResults.map(b=>({chapterId:l.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"basic-fact-cache"})));let Z=G?[]:await (0,f5.$b)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:l,plan:I,profile:a.prepare.projectMaterialProfile,scopedFilePaths:T,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,limitPerQuery:Math.min(a.understanding.requestedEvidencePerChapter,10),signal:a.global.input.signal}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`计划材料证据召回失败(${l.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 计划材料证据召回失败(${l.title})`,b),[]));H.push(...Z);let $=[];a.planning.chapterIntentClassifier.needsBasicFacts(l.title)&&H.push(...a.understanding.safeProjectBasicEvidence.map(a=>({...a,chapterId:l.id,source:"pinned-evidence"})));let _=a.understanding.writerEvidence.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));/概况|工程|项目|总体|部署/u.test(l.title)&&_.length>0&&H.push(..._.map(a=>({...a,chapterId:l.id,source:"pinned-evidence"})));let aa=a.prepare.materialScope.selectedMaterialRoots[0]||"";for(let b of(l.pinnedEvidenceFilePaths||[]).filter(Boolean)){let c=b.replace(/\\/gu,"/").replace(/^\.\//u,"").replace(/^\/+/u,""),d=aa&&c!==aa&&!c.startsWith(`${aa}/`)?`${aa}/${c}`:c,e=a.understanding.getCachedFileDetail(d);if(!e){let c=a.planning.generationDiagnostics?.evidence;c&&(c.pinnedEvidenceMissed=(c.pinnedEvidenceMissed??0)+1),console.warn("[stage-chapter-loop] pinned 证据文件未命中知识库(配置漂移或文件未入库)",{chapter:l.title,pinnedPath:b,resolvedPath:d});continue}H.push(...e.chunks.map(b=>({chapterId:l.id,filePath:e.file.relativePath,score:1,content:b.content,roleId:a.understanding.fileRoleByPath.get(e.file.relativePath),processingType:a.understanding.fileProcessingByPath.get(e.file.relativePath),sectionTitle:b.sectionTitle,source:"pinned-evidence"})))}let ab=H;if(!G&&a.prepare.webAccessConfig.enabled&&a.prepare.webAccessConfig.allowProjectFacts){let b=await aP({config:a.prepare.webAccessConfig,chapterId:l.id,chapterTitle:l.title,sectionTitles:l.sections||[],runtimeRules:a.prepare.runtimePromptRules,localFacts:[...a.understanding.preliminaryFactsModel.project,...a.understanding.preliminaryFactsModel.schedule,...a.understanding.preliminaryFactsModel.quality,...a.understanding.preliminaryFactsModel.safety,...a.understanding.preliminaryFactsModel.resources,...a.understanding.preliminaryFactsModel.preciseFacts],signal:a.global.input.signal});a.understanding.webResearchReport.queries.push(...b.queries),a.understanding.webResearchReport.filteredCount+=b.filtered,a.understanding.webResearchReport.evidenceCount+=b.evidence.length,b.evidence.length>0&&(a.understanding.webResearchReport.chapters.push(l.title),ab.push(...b.evidence.map(a=>({...a,chapterId:l.id})))),b.failedQueries>0&&(a.understanding.webResearchReport.failedCount=(a.understanding.webResearchReport.failedCount??0)+b.failedQueries,a.planning.generationDiagnostics.llm.lastError=`联网检索失败 ${b.failedQueries} 次(${l.title}):${b.failures.slice(0,3).join(";")}`)}let ac=G?[]:(0,f5.SK)({project:a.understanding.project,chapter:l,plan:I,profile:a.prepare.projectMaterialProfile,scopedFilePaths:T,highRisk:w.highRisk});ac.length>0&&ab.push(...ac);let ae=b=>((0,z.f2)(b,a.planning.earlyOverrideList),a.understanding.excludedEvidenceKeys.size>0?b.filter(b=>!a.understanding.excludedEvidenceKeys.has((0,fW.hM)(b))):b);ab=ae(ab);let ag=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),ai=(0,n.Mz)(l,ab,ag,h),aj=await (0,aX.Mv)([f0(l)],ai.map(n.t7)),ak=(0,n.UG)(l,ab,{preservePinned:!0,carrierBoost:h,semantic:{similarity:aj,queryText:f0(l)}},a.planning.generationDiagnostics);ak=(0,r.pm)(ak,a.understanding.canonicalFacts.scopeConflicts);let al=l.requiredFacts.filter(a=>!ak.some(b=>(0,dk.Lk)(b,a))),am=0,an=(0,k.kO)(a.understanding.bidComposition),ao=O?[O.graphWorks.length?`图谱识别本章工程内容:${O.graphWorks.join("、")}`:"",O.graphMethods.length?`图谱识别本章施工方法:${O.graphMethods.join("、")}`:"",O.graphBoqItems.length?`图谱识别本章BOQ清单项(${O.graphBoqItems.length}项):${O.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",O.gaps.length?`图谱识别本章资料缺口:${O.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",ap=(0,r.Bf)(a.understanding.canonicalFacts.scopeConflicts),aq=(()=>{if(0===a.blueprint.requirementAssignments.length)return"";let b=(0,aY.NT)(l.title),c=a.blueprint.requirementAssignments.filter(a=>a.chapterTitle===b).map(a=>a.entry);return(0,aY.HF)(c)})(),ar=(()=>{if(0===a.blueprint.structureAssignments.length)return"";let b=(0,aY.NT)(l.title),c=a.blueprint.structureAssignments.filter(a=>a.chapterTitle===b).map(a=>a.requirement);return(0,aY.FR)(c,{bodyTableForbidden:(0,k._C)(a.understanding.bidComposition),bodyFigureForbidden:an})})(),as=a.planning.chapterIntentClassifier.needsDustControl(l.title)||a.planning.chapterIntentClassifier.needsDustControl(`${l.title}${l.purpose||""}`)?[`【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“${aG.z1}”必须显性写明“${aG.Dm}”,不得省略】`,...aG.No.map(a=>`- ${a.name}`)].join("\n"):"",at=(l.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),av=at.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${at.join("、")}`:"",aw=a.blueprint.billFactLock?(0,v.uD)(a.blueprint.billFactLock,l.title,{sections:l.sections||[]}):"",ax=a.blueprint.billFactLock?(0,v.zK)(a.blueprint.billFactLock,b,l.title):[],ay=a.blueprint.drawingFactLock?(0,c0.pH)(a.blueprint.drawingFactLock,l.title,{sections:l.sections||[]}):"",az=function(a,b,c={}){let d=function(a,b,c={}){let{usable:d}=K(a,c.supersededValues);if(0===d.length)return[];let e=L(b,c.sections||[]);return 0===e.length?[]:d.map(a=>({fact:a,score:M(a,e)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score||String(a.fact.key).localeCompare(String(b.fact.key),"zh")||String(a.fact.value).localeCompare(String(b.fact.value),"zh")).map(a=>a.fact)}(a,b,c);if(0===d.length)return[];let e=Math.max(1,c.maxChars??3600),f=[],g=0;for(let a of d){let b=a.fieldName&&a.fieldName!==a.key?`(${a.fieldName})`:"",c=String(a.objectName||"").trim(),d=c?`- ${c}|${a.key}${b}=${String(a.value).slice(0,80)}`:`- ${a.key}${b}:${String(a.value).slice(0,80)}`;if(g+d.length+1>e)break;f.push(d),g+=d.length+1}let h=d.slice(f.length);return 0===f.length?[]:[`【本章可靠参数清单(资料事实链参数索引:${d.length} 项与本章相关的规格/参数/数量/时间/比例/标准编号,须逐项在正文对应位置自然写入,保持原值原形态(数字、单位、编号中的连字符与年份不得改写、拆分或省略);商务金额/单价/税率/预留金类数据一律不得写入正文)】`,'【逐对象写实铁律】带对象前缀的条目(「对象|属性=值」)必须写到**该对象**的正文处——**禁止把某对象的参数写到另一对象**;同一属性在不同对象下各有其值(如「基础垫层 100mm」与「地坪垫层 300mm」并列)是**正确**的,不得"统一"或只取其一。',...f,...h.length>0?[`- 另需落位(仅列名,共${h.length}项,须同样逐项写入正文):${h.map(a=>String(a.key)).join("、")}`]:[]]}(a.understanding.preliminaryFactsModel,l.title,{sections:l.sections||[]}),aA=function(a,b){let c=b.indexOf(a),d=(a,b)=>`${(0,cj.tb)(a,b.title)}${b.sections?.length?`(小节:${b.sections.join("、")})`:""}`,e=b.map((a,b)=>({item:a,index:b})).filter(b=>b.item!==a);return["【跨章写作职责分工——只就本章主题展开,写时即不产生跨章重复】",`- 本章职责:${d(c>=0?c:0,a)}`,...e.length>0?["- 其他章节职责(不得展开复述其主题内容):",...e.map(a=>` - ${d(a.index,a.item)}`)]:[],"- 写作规范:只就本章主题展开;其他章节主题的内容如需关联,一句话引用(“详见第X章”,X 替换为实际章号),不得展开复述;篇幅以本节合同字数为准,不得借写其他章节主题充数。"].join("\n")}(l,a.planning.effectiveChapters),aB=/施工方法|施工方案|施工工艺|主要施工内容|分部分项/u.test(l.title)?(()=>{let b=(0,y.Hp)((0,y.v7)(a.understanding.preliminaryFactsModel));return b?`【本章必须覆盖的清单分部分项全景(下列专有分项逐项写入正文施工方法,不得只写道路/铺装/绿化等大类而遗漏清单独有分项)】
|
|
196
|
+
${b}`:""})():"",aC=(0,f3.uQ)(l.title),aD=aC?`【本章写作重点】${aC.goal}
|
|
196
197
|
【本章必须覆盖(逐项落位,缺一即判未响应)】
|
|
197
|
-
${aB.mustCover.map(a=>`- ${a}`).join("\n")}`:"",aD=(0,f3.Xv)({truthConstraint:a.planning.truthConstraint,clarificationConstraint:a.planning.clarificationOverrides?.length?bm(a.planning.clarificationOverrides):void 0,amendmentConstraint:function(a,b={}){if(!a||0===a.length)return"";let c=b.limit??12,d=b.chapterTitle,e=d?a.filter(a=>a.chapterTitle===d):a.filter(a=>!a.chapterTitle),f=d?a.filter(a=>!a.chapterTitle):[];if(0===e.length&&0===f.length)return"";let g=`【答疑修正(必须按修正后写,不得写修正前)】以下条目来自答疑/澄清/补疑文件,是**技术性做法的现行唯一口径**:正文(含表格、附图说明、施工方法、质量与验收描述)必须写「修正后」内容;被取代形态仅可在如实陈述变更过程时引用(如「原为X,经答疑修正为Y」)。`,h=e.slice(0,c).map(bT);e.length>c&&h.push(`- (另有 ${e.length-c} 条本章答疑修正,按同一口径执行,不得写修正前形态)`);let i=[g,...h];return f.length>0&&i.push("(以下修正全文适用,本章亦须遵守)",...f.slice(0,Math.max(2,c-2)).map(bT)),i.filter(Boolean).join("\n")}(e,{chapterTitle:l.title}),globalWritingFocus:a.planning.writingTaskBrief?.globalWritingFocus,hazardBindingBlock:(0,bX.Rx)(c)}),aE=[aC,...aD,an,ap,aq,at,az,ar,ao.length?`【数据口径强制约束】${ao.join(";")}`:"",...f3.OA,H?.writingGoal,H?.mustCover?.length?`本章必须覆盖:${H.mustCover.join("、")}`:"",H?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${H.mustUseMaterialKinds.join("、")}`:"",aA,...ay,...aw,av,ax].filter(Boolean).join("\n"),aF=(0,n.C_)(a.prepare.promptPlan,l);if(a.prepare.promptPlan.writerPrompts.length>0&&!aF.primaryWriter)throw Error(`${(0,cj.GQ)(l.title)} 写作主控提示词未进入章节生成阶段`);let aH=[aF.promptTexts,a.prepare.generationControlPrompt,a.prepare.runtimeRulesText].filter(Boolean).join("\n\n"),aI=aF.promptDetails.length?aF.promptDetails:["未绑定章节写作提示词"],aJ=(0,q.rC)({template:a.prepare.template,chapter:l,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile,promptTexts:aH,requirement:a.global.input.requirement,plan:H?{requiredContents:H.mustCover,evidenceNeeds:Object.values(H.evidenceQueries).flat()}:void 0}),aK=(0,q.ji)({needs:aJ,factsModel:a.understanding.preliminaryFactsModel,evidence:aa,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys}),aL=aK.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),aM=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>f2(`${a.sectionTitle||""}${a.content||""}`).includes(f2(b)))),c=a.evidence.length<3?["章节证据数量不足"]:[],d=b.length+c.length,e=d>=5?"high":d>=2?"medium":"low",f="high"===e?"evidence_first":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:e,missingFacts:b,missingEvidence:c,suggestedStrategy:f,reason:0===d?"章节事实与证据满足常规生成条件。":`识别到 ${d} 项生成前缺口,按 ${f} 策略生成。`}}({chapter:l,evidence:aj}),aN=new Set(aj.map(a=>a.filePath)).size,aO=!!N&&(N?.graphFiles.size||0)>=8&&aN>=6&&0===ak.length&&"low"===aM.riskLevel,aQ=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:S.length,evidenceCount:aj.length,evidenceFileCount:aN,suggestedStrategy:aM.suggestedStrategy,highRisk:u.highRisk,missingFactsCount:ak.length,requiredMissingNeedsCount:aL.length,riskLevel:aM.riskLevel});if(!aO&&aQ&&S.length>0){let b=new Set([...ak,...aL]).size;b>0&&(a.global.progressStages[A]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,cj.GQ)(l.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:p+1,total:a.planning.effectiveChapters.length,label:"深度召回"}},{subtitle:(0,cj.GQ)(l.title),order:p}),a.global.emitProgress());let c=await dn({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:l,scopedFilePaths:S,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:[...new Set([...ak,...aL])],extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:u.highRisk||aL.length>0,signal:a.global.input.signal}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`章深度召回失败(${l.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 章深度召回失败(${l.title})`,b),[]));al=c.length;let d=a.planning.generationDiagnostics.evidence;d.retrievedEvidenceInjected=(d.retrievedEvidenceInjected??0)+c.length,c.length>0&&(aa=ac([...aa,...c]),aj=(0,n.UG)(l,aa,{preservePinned:!0,carrierBoost:h},a.planning.generationDiagnostics),aj=(0,r.pm)(aj,a.understanding.canonicalFacts.scopeConflicts),ak=l.requiredFacts.filter(a=>!aj.some(b=>(0,dk.Lk)(b,a)))),aL=(aK=(0,q.ji)({needs:aJ,factsModel:a.understanding.preliminaryFactsModel,evidence:aa,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),a.global.progressStages[A]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,cj.GQ)(l.title)} 深度召回完成:命中 ${al} 条${aL.length>0?`,仍缺 ${aL.length} 项(触发轻量补充)`:""}`,progress:{current:p+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,cj.GQ)(l.title),order:p}),a.global.emitProgress()}if(aL.length>0&&S.length>0){let b=await dn({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:l,scopedFilePaths:S,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:aL,extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:!0,signal:a.global.input.signal}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`必需事实补充召回失败(${l.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 必需事实补充召回失败(${l.title})`,b),[])),c=a.planning.generationDiagnostics.evidence;c.retrievedEvidenceInjected=(c.retrievedEvidenceInjected??0)+b.length,b.length>0&&(aa=ac([...aa,...b]),aj=(0,n.UG)(l,aa,{preservePinned:!0,carrierBoost:h},a.planning.generationDiagnostics),aj=(0,r.pm)(aj,a.understanding.canonicalFacts.scopeConflicts),ak=l.requiredFacts.filter(a=>!aj.some(b=>(0,dk.Lk)(b,a))),aL=(aK=(0,q.ji)({needs:aJ,factsModel:a.understanding.preliminaryFactsModel,evidence:aa,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}{let b=a.planning.generationDiagnostics.evidence,c=new Set(["keyword","vector","hybrid","deep-retrieval","required-fact-evidence"]);b.intentEvidenceUsed=(b.intentEvidenceUsed??0)+aj.filter(a=>"project-intelligence"===a.source).length,b.retrievedEvidenceUsed=(b.retrievedEvidenceUsed??0)+aj.filter(a=>!!a.source&&c.has(a.source)).length}for(let b of(0===aj.length&&a.understanding.missingItems.push(`${l.title}:缺少可支撑正文的项目资料证据`),ak))a.understanding.missingItems.push(`${l.title}:事实需求未满足 ${b}`);let aR=(0,j.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a.understanding.allEvidence.length>0?"success":"failed",message:`已检索/绑定 ${a.understanding.allEvidence.length} 条证据`});a.understanding.knowledgeBaseStageIndex<0?a.understanding.knowledgeBaseStageIndex=(0,j.fx)(a.global.progressStages,aR):a.global.progressStages[a.understanding.knowledgeBaseStageIndex]={...aR,order:a.global.progressStages[a.understanding.knowledgeBaseStageIndex]?.order??aR.order},a.global.emitProgress(),(0,f.Te)(a.global.input.signal);let aS=new Map,aT=b=>{let c=(0,f.c6)({kind:"section",query:`${l.title} ${b}`.trim(),scopedFilePaths:S}),d=aS.get(c);if(d)return Promise.resolve(d);let e=(0,dq.Ym)(b,l,aj),g=e.filter(a=>dA.AM.test(a.content)).length;return e.length>=4&&g>=1?(aS.set(c,e),Promise.resolve(e)):(0,n.hW)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:l,sectionTitle:b,scopedFilePaths:S,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,signal:a.global.input.signal}).then(a=>(aS.set(c,a),a))},aU=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,dk.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,dk.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:l,evidence:aj,risk:u});a.understanding.retrievalCoverageReports.push(aU);let aV=new Set(aj.map(a=>a.filePath)),aW=aj.reduce((a,b)=>a+b.content.length,0),aZ=[...u.highRisk?[`召回覆盖风险(${u.riskReason||"切片未完全预加载"}):已加载 ${u.loadedChunks}/${u.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${T.length} 条`,`深召回证据:${al} 条`,`事实覆盖:${aU.requiredFactCovered}/${aU.requiredFactTotal}`,`小节覆盖:${aU.sectionCovered}/${aU.sectionTotal}`];a.global.progressStages[A]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,cj.GQ)(l.title)} 已选取 ${aj.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aV.size} 份`,`上下文字符:${aW}`,`检索查询:${Q.length} 组`,...aZ],progress:{current:p+1,total:a.planning.effectiveChapters.length,label:"正文生成"}},{subtitle:(0,cj.GQ)(l.title),order:p}),a.global.emitProgress(),a.planning.generationDiagnostics.evidence.contextChars+=aW;let a$=(0,q.n9)(aK),a_=a.planning.chapterIntentClassifier.needsBasicFacts(l.title)?a.understanding.earlyFactPool.projectBasicFacts:[],a0=(0,dq.qX)((0,dq.hZ)({chapter:l,plan:void 0,spec:a.prepare.documentSpec,roleFacts:Z,evidence:aj,missingFacts:ak,indexedFacts:[...a_,...a$],resolvedFactNeeds:aK,factNeedsPrompt:(0,q.GK)(aK),specAuthorityMap:a.understanding.preliminaryFactsModel.specAuthorityMap})),a1=(0,f4.up)({plan:a.planning.plannedDocument.plan,chapter:l,context:a.understanding.agentWorkflow,evidence:aj});if(a.understanding.agentWorkflow.chapterTasks=[...(a.understanding.agentWorkflow.chapterTasks||[]).filter(a=>a.chapterId!==l.id),a1.task],a.understanding.agentWorkflow.nodes.push(a1.node),(0,dp.cN)(a.understanding.agentWorkflow),(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:`agent-chapter-task-${l.id}`,status:a1.task.ready||F?"success":"failed",message:a1.task.ready?a1.node.outputSummary||`${(0,cj.GQ)(l.title)} 章节任务规划完成`:F?`${(0,cj.GQ)(l.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:a1.node.outputSummary||`${(0,cj.GQ)(l.title)} 章节任务规划完成`,details:a1.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:a.global.progressStages.length})),a.global.emitProgress(a.global.chapterDrafts),!a1.task.ready&&!F)throw Error(`${(0,cj.GQ)(l.title)} 章节任务未就绪:${a1.task.issues.map(a=>a.message).join(";")}`);let a2={total:aK.length,satisfied:aK.filter(a=>"satisfied"===a.status).length,missing:aK.filter(a=>"missing"===a.status).length,lowConfidence:aK.filter(a=>"low_confidence"===a.status).length};for(let b of aL)a.understanding.missingItems.push(`${l.title}:事实需求未确认 ${b}`);let{budgetTarget:a3,fallbackNote:a4}=(0,i.W4)({chapterTargets:a.planning.documentBudget.chapterTargets,chapterId:l.id,chapterTitle:l.title,documentTargetChars:a.planning.documentBudget.targetChars,chapterCount:a.planning.effectiveChapters.length}),a5=a4?[a4]:[],a6=l.sections?.filter(Boolean).length||0,a7=(0,n.gq)({budgetTarget:a3,sectionCount:a6,title:l.title,longformStrict:a.planning.documentBudget.longformStrict}),a8=Math.ceil(a7.maxWords*(a.planning.documentBudget.maxChars?1.05:1)),a9=(0,t.jM)(l.title,a.planning.chapterIntentClassifier).length>0,ba=(a.blueprint.blueprintActive||a9&&0===w.missing.length)&&a.blueprint.integratedBlueprint?(0,t.md)(a.blueprint.integratedBlueprint,l.title):void 0,bb=ba&&a.blueprint.integratedBlueprint?(0,t.uw)(ba,a.blueprint.integratedBlueprint.data):"",bc=!ba&&a9?`【计划类权威本次不可用】本章原属计划类章节,但工程量清单未解析出可用条目,蓝图计划权威(${w.missing.length>0?w.missing.join("、"):"进度/劳动力/资源"})本次不可用:**不得输出**里程碑日期、各阶段工期天数、总工期天数、劳动力峰值人数、机械台数、资源用量等由清单推导的计划性数值,也不得给出「约」「左右」等近似值变通。本章以管理措施、组织安排、工艺要求与质量/安全/工期保证体系表述。若必须引用合同工期、开竣工日期,一律照抄【真值层】给定口径,不得自行推导或改写。`:"",bd=a7.roundTarget,be=a6>0?a.planning.documentBudget.longformStrict?bd:Math.min(bd,Math.max(1800,a7.structureTarget)):bd,bf=0,bg=b=>{let c=Date.now();if(c-bf<3e3)return;bf=c;let d=b.filter(Boolean).join("\n\n");d.trim()&&a.global.emitProgress([...a.global.chapterDrafts,{id:l.id,title:l.title,content:`## ${l.title}
|
|
198
|
+
${aC.mustCover.map(a=>`- ${a}`).join("\n")}`:"",aE=(0,f3.Xv)({truthConstraint:a.planning.truthConstraint,clarificationConstraint:a.planning.clarificationOverrides?.length?bm(a.planning.clarificationOverrides):void 0,amendmentConstraint:function(a,b={}){if(!a||0===a.length)return"";let c=b.limit??12,d=b.chapterTitle,e=d?a.filter(a=>a.chapterTitle===d):a.filter(a=>!a.chapterTitle),f=d?a.filter(a=>!a.chapterTitle):[];if(0===e.length&&0===f.length)return"";let g=`【答疑修正(必须按修正后写,不得写修正前)】以下条目来自答疑/澄清/补疑文件,是**技术性做法的现行唯一口径**:正文(含表格、附图说明、施工方法、质量与验收描述)必须写「修正后」内容;被取代形态仅可在如实陈述变更过程时引用(如「原为X,经答疑修正为Y」)。`,h=e.slice(0,c).map(bT);e.length>c&&h.push(`- (另有 ${e.length-c} 条本章答疑修正,按同一口径执行,不得写修正前形态)`);let i=[g,...h];return f.length>0&&i.push("(以下修正全文适用,本章亦须遵守)",...f.slice(0,Math.max(2,c-2)).map(bT)),i.filter(Boolean).join("\n")}(e,{chapterTitle:l.title}),globalWritingFocus:a.planning.writingTaskBrief?.globalWritingFocus,hazardBindingBlock:(0,bX.Rx)(c)}),aF=[aD,...aE,ao,aq,ar,av,aA,as,ap.length?`【数据口径强制约束】${ap.join(";")}`:"",...f3.OA,I?.writingGoal,I?.mustCover?.length?`本章必须覆盖:${I.mustCover.join("、")}`:"",I?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${I.mustUseMaterialKinds.join("、")}`:"",aB,...az,...ax,aw,ay].filter(Boolean).join("\n"),aH=(0,n.C_)(a.prepare.promptPlan,l);if(a.prepare.promptPlan.writerPrompts.length>0&&!aH.primaryWriter)throw Error(`${(0,cj.GQ)(l.title)} 写作主控提示词未进入章节生成阶段`);let aI=[aH.promptTexts,a.prepare.generationControlPrompt,a.prepare.runtimeRulesText].filter(Boolean).join("\n\n"),aJ=aH.promptDetails.length?aH.promptDetails:["未绑定章节写作提示词"],aK=(0,q.rC)({template:a.prepare.template,chapter:l,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile,promptTexts:aI,requirement:a.global.input.requirement,plan:I?{requiredContents:I.mustCover,evidenceNeeds:Object.values(I.evidenceQueries).flat()}:void 0}),aL=(0,q.ji)({needs:aK,factsModel:a.understanding.preliminaryFactsModel,evidence:ab,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys}),aM=aL.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),aN=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>f2(`${a.sectionTitle||""}${a.content||""}`).includes(f2(b)))),c=a.evidence.length<3?["章节证据数量不足"]:[],d=b.length+c.length,e=d>=5?"high":d>=2?"medium":"low",f="high"===e?"evidence_first":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:e,missingFacts:b,missingEvidence:c,suggestedStrategy:f,reason:0===d?"章节事实与证据满足常规生成条件。":`识别到 ${d} 项生成前缺口,按 ${f} 策略生成。`}}({chapter:l,evidence:ak}),aO=new Set(ak.map(a=>a.filePath)).size,aQ=!!O&&(O?.graphFiles.size||0)>=8&&aO>=6&&0===al.length&&"low"===aN.riskLevel,aR=function(a){let b=a.evidenceFileCount<=2;return a.scopedFileCount>80?b:"evidence_first"===a.suggestedStrategy||a.highRisk||a.missingFactsCount>0||a.requiredMissingNeedsCount>0||b||a.evidenceCount<8&&"low"!==a.riskLevel}({scopedFileCount:T.length,evidenceCount:ak.length,evidenceFileCount:aO,suggestedStrategy:aN.suggestedStrategy,highRisk:w.highRisk,missingFactsCount:al.length,requiredMissingNeedsCount:aM.length,riskLevel:aN.riskLevel});if(!aQ&&aR&&T.length>0){let b=new Set([...al,...aM]).size;b>0&&(a.global.progressStages[B]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,cj.GQ)(l.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"深度召回"}},{subtitle:(0,cj.GQ)(l.title),order:u}),a.global.emitProgress());let c=await dn({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:l,scopedFilePaths:T,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:[...new Set([...al,...aM])],extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:w.highRisk||aM.length>0,signal:a.global.input.signal}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`章深度召回失败(${l.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 章深度召回失败(${l.title})`,b),[]));am=c.length;let d=a.planning.generationDiagnostics.evidence;d.retrievedEvidenceInjected=(d.retrievedEvidenceInjected??0)+c.length,c.length>0&&(ab=ae([...ab,...c]),ak=(0,n.UG)(l,ab,{preservePinned:!0,carrierBoost:h},a.planning.generationDiagnostics),ak=(0,r.pm)(ak,a.understanding.canonicalFacts.scopeConflicts),al=l.requiredFacts.filter(a=>!ak.some(b=>(0,dk.Lk)(b,a)))),aM=(aL=(0,q.ji)({needs:aK,factsModel:a.understanding.preliminaryFactsModel,evidence:ab,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),a.global.progressStages[B]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"running",message:`${(0,cj.GQ)(l.title)} 深度召回完成:命中 ${am} 条${aM.length>0?`,仍缺 ${aM.length} 项(触发轻量补充)`:""}`,progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,cj.GQ)(l.title),order:u}),a.global.emitProgress()}if(aM.length>0&&T.length>0){let b=await dn({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:l,scopedFilePaths:T,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:aM,extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:!0,signal:a.global.input.signal}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`必需事实补充召回失败(${l.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 必需事实补充召回失败(${l.title})`,b),[])),c=a.planning.generationDiagnostics.evidence;c.retrievedEvidenceInjected=(c.retrievedEvidenceInjected??0)+b.length,b.length>0&&(ab=ae([...ab,...b]),ak=(0,n.UG)(l,ab,{preservePinned:!0,carrierBoost:h},a.planning.generationDiagnostics),ak=(0,r.pm)(ak,a.understanding.canonicalFacts.scopeConflicts),al=l.requiredFacts.filter(a=>!ak.some(b=>(0,dk.Lk)(b,a))),aM=(aL=(0,q.ji)({needs:aK,factsModel:a.understanding.preliminaryFactsModel,evidence:ab,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}{let b=a.planning.generationDiagnostics.evidence,c=new Set(["keyword","vector","hybrid","deep-retrieval","required-fact-evidence"]);b.intentEvidenceUsed=(b.intentEvidenceUsed??0)+ak.filter(a=>"project-intelligence"===a.source).length,b.retrievedEvidenceUsed=(b.retrievedEvidenceUsed??0)+ak.filter(a=>!!a.source&&c.has(a.source)).length}for(let b of(0===ak.length&&a.understanding.missingItems.push(`${l.title}:缺少可支撑正文的项目资料证据`),al))a.understanding.missingItems.push(`${l.title}:事实需求未满足 ${b}`);let aS=(0,j.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a.understanding.allEvidence.length>0?"success":"failed",message:`已检索/绑定 ${a.understanding.allEvidence.length} 条证据`});a.understanding.knowledgeBaseStageIndex<0?a.understanding.knowledgeBaseStageIndex=(0,j.fx)(a.global.progressStages,aS):a.global.progressStages[a.understanding.knowledgeBaseStageIndex]={...aS,order:a.global.progressStages[a.understanding.knowledgeBaseStageIndex]?.order??aS.order},a.global.emitProgress(),(0,f.Te)(a.global.input.signal);let aT=new Map,aU=b=>{let c=(0,f.c6)({kind:"section",query:`${l.title} ${b}`.trim(),scopedFilePaths:T}),d=aT.get(c);if(d)return Promise.resolve(d);let e=(0,dq.Ym)(b,l,ak),g=e.filter(a=>dA.AM.test(a.content)).length;return e.length>=4&&g>=1?(aT.set(c,e),Promise.resolve(e)):(0,n.hW)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:l,sectionTitle:b,scopedFilePaths:T,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,signal:a.global.input.signal}).then(a=>(aT.set(c,a),a))},aV=function(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,dk.Lk)(a,b)||`${a.sectionTitle||""} ${a.content}`.includes(b))).length,d=a.chapter.requiredFacts.length,e=a.chapter.requiredFacts.filter(b=>a.evidence.some(a=>(0,dk.Lk)(a,b))).length;return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,risk:a.risk,evidenceCount:a.evidence.length,evidenceFiles:new Set(a.evidence.map(a=>a.filePath)).size,sectionCovered:c,sectionTotal:b,requiredFactCovered:e,requiredFactTotal:d}}({chapter:l,evidence:ak,risk:w});a.understanding.retrievalCoverageReports.push(aV);let aW=new Set(ak.map(a=>a.filePath)),aZ=ak.reduce((a,b)=>a+b.content.length,0),a$=[...w.highRisk?[`召回覆盖风险(${w.riskReason||"切片未完全预加载"}):已加载 ${w.loadedChunks}/${w.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${U.length} 条`,`深召回证据:${am} 条`,`事实覆盖:${aV.requiredFactCovered}/${aV.requiredFactTotal}`,`小节覆盖:${aV.sectionCovered}/${aV.sectionTotal}`];a.global.progressStages[B]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:a.prepare.promptPlan.writerPrompts[0]?.id,status:"running",message:`${(0,cj.GQ)(l.title)} 已选取 ${ak.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${aW.size} 份`,`上下文字符:${aZ}`,`检索查询:${R.length} 组`,...a$],progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"正文生成"}},{subtitle:(0,cj.GQ)(l.title),order:u}),a.global.emitProgress(),a.planning.generationDiagnostics.evidence.contextChars+=aZ;let a_=(0,q.n9)(aL),a0=a.planning.chapterIntentClassifier.needsBasicFacts(l.title)?a.understanding.earlyFactPool.projectBasicFacts:[],a1=(0,dq.qX)((0,dq.hZ)({chapter:l,plan:void 0,spec:a.prepare.documentSpec,roleFacts:$,evidence:ak,missingFacts:al,indexedFacts:[...a0,...a_],resolvedFactNeeds:aL,factNeedsPrompt:(0,q.GK)(aL),specAuthorityMap:a.understanding.preliminaryFactsModel.specAuthorityMap})),a2=(0,f4.up)({plan:a.planning.plannedDocument.plan,chapter:l,context:a.understanding.agentWorkflow,evidence:ak});if(a.understanding.agentWorkflow.chapterTasks=[...(a.understanding.agentWorkflow.chapterTasks||[]).filter(a=>a.chapterId!==l.id),a2.task],a.understanding.agentWorkflow.nodes.push(a2.node),(0,dp.cN)(a.understanding.agentWorkflow),(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:`agent-chapter-task-${l.id}`,status:a2.task.ready||G?"success":"failed",message:a2.task.ready?a2.node.outputSummary||`${(0,cj.GQ)(l.title)} 章节任务规划完成`:G?`${(0,cj.GQ)(l.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:a2.node.outputSummary||`${(0,cj.GQ)(l.title)} 章节任务规划完成`,details:a2.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:a.global.progressStages.length})),a.global.emitProgress(a.global.chapterDrafts),!a2.task.ready&&!G)throw Error(`${(0,cj.GQ)(l.title)} 章节任务未就绪:${a2.task.issues.map(a=>a.message).join(";")}`);let a3={total:aL.length,satisfied:aL.filter(a=>"satisfied"===a.status).length,missing:aL.filter(a=>"missing"===a.status).length,lowConfidence:aL.filter(a=>"low_confidence"===a.status).length};for(let b of aM)a.understanding.missingItems.push(`${l.title}:事实需求未确认 ${b}`);let{budgetTarget:a4,fallbackNote:a5}=(0,i.W4)({chapterTargets:a.planning.documentBudget.chapterTargets,chapterId:l.id,chapterTitle:l.title,documentTargetChars:a.planning.documentBudget.targetChars,chapterCount:a.planning.effectiveChapters.length}),a6=a5?[a5]:[],a7=l.sections?.filter(Boolean).length||0,a8=(0,n.gq)({budgetTarget:a4,sectionCount:a7,title:l.title,longformStrict:a.planning.documentBudget.longformStrict}),a9=Math.ceil(a8.maxWords*(a.planning.documentBudget.maxChars?1.05:1)),ba=(0,t.jM)(l.title,a.planning.chapterIntentClassifier).length>0,bb=(a.blueprint.blueprintActive||ba&&0===x.missing.length)&&a.blueprint.integratedBlueprint?(0,t.md)(a.blueprint.integratedBlueprint,l.title):void 0,bc=bb&&a.blueprint.integratedBlueprint?(0,t.uw)(bb,a.blueprint.integratedBlueprint.data):"",bd=!bb&&ba?`【计划类权威本次不可用】本章原属计划类章节,但工程量清单未解析出可用条目,蓝图计划权威(${x.missing.length>0?x.missing.join("、"):"进度/劳动力/资源"})本次不可用:**不得输出**里程碑日期、各阶段工期天数、总工期天数、劳动力峰值人数、机械台数、资源用量等由清单推导的计划性数值,也不得给出「约」「左右」等近似值变通。本章以管理措施、组织安排、工艺要求与质量/安全/工期保证体系表述。若必须引用合同工期、开竣工日期,一律照抄【真值层】给定口径,不得自行推导或改写。`:"",be=a8.roundTarget,bf=a7>0?a.planning.documentBudget.longformStrict?be:Math.min(be,Math.max(1800,a8.structureTarget)):be,bg=0,bh=b=>{let c=Date.now();if(c-bg<3e3)return;bg=c;let d=b.filter(Boolean).join("\n\n");d.trim()&&a.global.emitProgress([...a.global.chapterDrafts,{id:l.id,title:l.title,content:`## ${l.title}
|
|
198
199
|
|
|
199
|
-
${d}`,evidence:
|
|
200
|
+
${d}`,evidence:ak,missingFacts:al,sections:l.sections||[],tablePlans:l.tablePlans||[],inProgress:!0}])},bi=a=>{"complete"===a.phase&&a.partialSections&&bh(a.partialSections)};if(G)m=(0,n.w_)(G,l),m=await (0,n._k)(m,a.understanding.bidProcedureJudge),p=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"success",message:`${(0,cj.GQ)(l.title)} 已复用已有章节正文:当前 ${(0,i.V7)(m)} 字,跳过 Writer,直接进入章节收口`,details:[`有效证据:${ak.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,...a6,"来源:resumeChapters/checkpointChapters"],progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"复用章节"}},{subtitle:(0,cj.GQ)(l.title),order:u}),a.global.progressStages[B]=p,a.global.emitProgress(a.global.chapterDrafts);else{let b;a.global.progressStages[B]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"running",message:`${(0,cj.GQ)(l.title)} 正在规划主题块并准备并发成稿`,details:[...aJ,`有效证据:${ak.length} 条`,`事实需求:${a3.satisfied}/${a3.total} 已满足,缺失 ${a3.missing},低置信 ${a3.lowConfidence}`,a8.label,`生成上限约 ${a9} 字`,...a6,`模板细目:${l.sections?.length||0} 条`,"先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化"],progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"主题块并发"}},{subtitle:(0,cj.GQ)(l.title),order:u}),a.global.emitProgress();let c=async(b,c,d)=>{let e=await Promise.all(c.map(({block:c,retryFeedback:d})=>(0,dq.nl)({...b,targetWords:c.targetWords,initialFeedback:d,isolatedRetry:!0},{blocks:[c],coveredSections:[],fallbackSections:[]}).catch(b=>{a.planning.generationDiagnostics.llm.lastError=`失败块定向重写异常(${l.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 失败块定向重写异常(${l.title})`,b)}))),f=[...d],g=[];return c.forEach((a,b)=>{let c=e[b]?.markdown?.replace(/^##\s+.+$/mu,"").trim();if(c){f[a.index]=c;return}let d=e[b]?.failedBlocks?.[0];g.push({index:a.index,title:a.block?.title,lastAttempt:d?.lastAttempt||a.lastAttempt,failureKinds:d?.failureKinds||a.failureKinds,retryFeedback:d?.retryFeedback||a.retryFeedback})}),{merged:f,exhausted:g}},e=await a.global.withProgressHeartbeat(()=>(0,g.X6)(a.planning.generationDiagnostics,`chapter-plan:${l.id}`,async()=>(0,t.OY)({blueprintChapter:bb,inputSections:l.sections||[],chapterTitle:(0,cj.GQ)(l.title),targetWords:bf,projectContext:a.planning.projectContext,evidence:ak}))),h=await a.global.withProgressHeartbeat(()=>(0,f6.G8)({chapterTitle:(0,cj.GQ)(l.title),blocks:e.blocks.map(a=>({title:a.title,pointTitles:a.subPoints.map(a=>a.title)})),fingerprintPool:a.planning.fingerprintPool||(0,f7.$R)(),excludeDocumentId:a.global.input.diversitySeed,profile:a.planning.diversityProfile,signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics}));if(h.renamed>0&&(e={...e,blocks:e.blocks.map((a,b)=>({...a,title:h.titles[b]}))}),e.blocks.length>0){d=e;let f=[aI,(0,f4.$8)(a2.task,e)].filter(Boolean).join("\n\n"),i=e.blocks.reduce((a,b)=>a+b.subPoints.length,0),k=e.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),m=bb?e.fallbackSections.length>0?`(蓝图章切片确定性转换:${e.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"(蓝图章切片确定性转换:主题块来自蓝图小节/工作包)":"(蓝图未覆盖本章,已按语义域确定性分组)";a.global.progressStages[B]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"running",message:`${(0,cj.GQ)(l.title)} 已规划 ${e.blocks.length} 个主题块,正在按主题块并发成稿${m}`,details:[...aJ,`有效证据:${ak.length} 条`,`输入细目 ${a7} 条 → 主题块 ${e.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${k} 条细目,目录级 H4 合计 ${i} 个`,"单块 1800~2800 字,主题块间全并发,单节深度与整体耗时双优",...h.summary?[h.summary]:[]],progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"主题块并发"}},{subtitle:(0,cj.GQ)(l.title),order:u});let n=a.global.progressStages.find(a=>a.roleId===`agent-chapter-task-${l.id}`);n&&(n.message=`${a2.task.sections.filter(a=>a.ready).length}/${a2.task.sections.length} 条细目任务就绪(已规划为 ${e.blocks.length} 个主题块)`),a.global.emitProgress(a.global.chapterDrafts);let o={template:a.prepare.template,chapter:l,evidence:ak,missingFacts:al,promptTexts:f,projectContext:a.planning.chapterScopedProjectContext(l),skeletonProjectContext:a.planning.projectContext,requirement:a.global.input.requirement,roleContext:[aF,bd].filter(Boolean).join("\n"),targetWords:bf,forbidDrawingImages:an,bidComposition:a.understanding.bidComposition,factCoverageContext:a1,compactProjectContext:!0,scopedProjectContext:!0,blueprintData:(0,t.nn)(a.blueprint.integratedBlueprint),blueprintChapter:bb,blueprintMustCiteHint:bc,sectionEvidenceProvider:aU,onSectionProgress:bi,diagnostics:a.planning.generationDiagnostics,signal:a.global.input.signal},p=await a.global.withProgressHeartbeat(()=>(0,g.X6)(a.planning.generationDiagnostics,`chapter-planned-block-draft:${l.id}`,()=>(0,dq.nl)(o,e)));if(p?.allSucceeded)b=p.markdown;else if(p){let d=await c(o,p.failedBlocks,p.sections);if(d.merged.every(a=>!!a))b=`## ${l.title}
|
|
200
201
|
|
|
201
202
|
${d.merged.join("\n\n")}`;else{let c=(0,dq.Br)({sections:d.merged,exhaustedBlocks:d.exhausted,blockTargetWords:e.blocks.map(a=>a.targetWords)});if(c)b=`## ${l.title}
|
|
202
203
|
|
|
203
|
-
${c.sections.join("\n\n")}`,
|
|
204
|
+
${c.sections.join("\n\n")}`,D=c.detail,console.error(`[gen][chapter-audit] ${c.detail}:${(0,cj.GQ)(l.title)}`),a.planning.generationDiagnostics.llm.lastInfo=c.detail;else{let c=(0,dq.D6)({sections:d.merged,blockTitles:e.blocks.map(a=>a.title),exhaustedBlocks:d.exhausted});if(c){b=`## ${l.title}
|
|
204
205
|
|
|
205
|
-
${d.merged.filter(a=>!!(a&&a.trim())).join("\n\n")}`,D=c;let{head:e,details:f}=(0,dq.fk)(c),g=`${(0,cj.GQ)(l.title)} 章级显式降级:${e}(失败原因:${c.droppedBlocks.map(a=>a.reason).join(";")})——已保留其余块正文,失守块不产出正文,已登记 structure/blocker 进导出门禁与交付复核清单`;console.error(`[gen][chapter-audit] ${g}`),console.error(`[gen][chapter-audit] 降级明细:${f.slice(1).join(" | ")}`),a.planning.generationDiagnostics.llm.lastInfo=g}}}}}if(b||(a.planning.generationDiagnostics.llm.lastError=a.planning.generationDiagnostics.llm.lastError||"全部成稿路径未返回有效正文"),b&&a.blueprint.integratedBlueprint){let c=(0,t.ZP)(b,a.blueprint.integratedBlueprint.data);c.filled.length>0&&(b=c.markdown),(c.unresolved.length>0||c.malformed.length>0)&&(a.understanding.missingItems.push(`${l.title}:权威占位符未决 ${c.unresolved.length} 处(${c.unresolved.slice(0,4).join("、")})${c.malformed.length>0?`;畸形 ${c.malformed.length} 处`:""}`),a.planning.generationDiagnostics.llm.lastInfo=`权威占位符未决:${l.title} ${c.unresolved.length} 处无权威值、${c.malformed.length} 处畸形(均保留原样,不静默删除)`)}if(b&&ba&&a.blueprint.integratedBlueprint){let c=(0,t.C8)(b,ba,a.blueprint.integratedBlueprint.data);c.fixed.length>0?(b=c.markdown,a.planning.generationDiagnostics.llm.lastInfo=`蓝图引用对齐:${l.title} 回填 ${c.fixed.length} 处(${c.fixed.map(a=>`${a.anchor} ${a.from}→${a.to}`).join("、")})${c.missing.length?`;未引用缺口 ${c.missing.length} 项:${c.missing.join("、")}`:""}`):c.missing.length>0&&(a.planning.generationDiagnostics.llm.lastInfo=`蓝图引用缺口观测:${l.title} 未在正文引用 ${c.missing.length} 项 must_cite 参数(${c.missing.slice(0,6).join("、")}${c.missing.length>6?" 等":""}),由跨章一致性审查兑底`)}if(b&&a.blueprint.integratedBlueprint){let c=(0,s.Pl)(b,(0,ah.i2)(a.blueprint.integratedBlueprint.data));if(c.fixedCount>0){b=c.markdown;let d=a.planning.generationDiagnostics.llm.lastInfo;a.planning.generationDiagnostics.llm.lastInfo=`${d?`${d};`:""}阶段劳动力口径对齐:${l.title} 回填 ${c.fixedCount} 处(${c.details.join("、")})`}}if((0,f.Te)(a.global.input.signal),!b){let b=a.planning.generationDiagnostics.llm.lastError||"空响应或超时",c=`${(0,cj.GQ)(l.title)} 正文未达到成稿要求,已阻断生成(${b.slice(0,160)})`;throw a.global.progressStages[A]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aF.primaryPromptId,status:"failed",message:c,details:[`阻断归因:${b}`,`证据条数:${aj.length}`],progress:{current:p+1,total:a.planning.effectiveChapters.length,label:"章节阻断"}},{subtitle:(0,cj.GQ)(l.title),order:p}),a.global.emitProgress(a.global.chapterDrafts),Error(c)}if(!b.trim())throw Error(`${(0,cj.GQ)(l.title)} 首次生成失败,未获得可用于定稿的正文`);let i=d&&d.blocks.length>0?d.blocks.map(a=>a.title):(l.sections||[]).filter(Boolean),k=d&&d.blocks.length>0?d.blocks.flatMap(a=>a.subPoints.map(a=>a.title)):[],o=b;i.length>0&&(o=(0,f.Ww)(o,i,3,{nearMatch:!0})),k.length>0&&(o=(0,f.Ww)(o,k,4)),m=(0,n.w_)(o,l),m=await (0,n._k)(m,a.understanding.bidProcedureJudge)}let bi=await ds({chapter:l,content:m,evidence:aj}),bj=(0,i.V7)(m),bk=a7.roundTarget>0?Math.round(bj/a7.roundTarget*100):0,bl=a7.roundTarget>0&&bj>Math.ceil(1.2*a7.roundTarget);bl&&console.error(`[gen][chapter-audit] 章篇幅超产 ${bk}%(${bj} 字 vs 本轮目标 ${a7.roundTarget} 字,终稿篇幅阻断线为目标总额 +20%): ${(0,cj.GQ)(l.title)}`);let bn=(0,ad.r4)(m),bo=d&&d.blocks.length>0?d.blocks.map(a=>a.title):(l.sections||[]).filter(Boolean),bp=bo.filter((a,b)=>a!==bo[b-1]),bq=bp.length>0?bp:bn.length>0?bn:[],br=(0,af.qK)(m,[{title:l.title,content:m,sections:bq}]).map(a=>a.message),bs=bi.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bt=[...br,...bs],bu=D?(0,dq.fk)(D):void 0,bv=D?(B={plannedBlocks:D.plannedBlocks,droppedBlocks:D.plannedBlocks-D.deliveredBlocks},au({before:B.plannedBlocks,after:B.droppedBlocks})):(0,n.md)(bj,bd,bt);return o=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aF.primaryPromptId,status:bv,message:(0,j.AQ)(`${(0,cj.GQ)(l.title)} 已由大模型成稿:当前 ${bj} 字${bu?`;${bu.head}`:""};章节预算约 ${a7.budgetTarget} 字,本轮目标约 ${a7.roundTarget} 字${bt.length?`;待优化:${bt.slice(0,8).join("、")}`:""}`,x),details:[`本轮完成率:${bk}%`,`结构目标约 ${a7.structureTarget} 字`,...aI,...a5,`二级小节:${bq.length} 个`,...bu?bu.details:[],...bl?[`篇幅审计:章超产(${bj} 字 vs 本轮目标 ${a7.roundTarget} 字,终稿篇幅阻断线为目标总额 +20%)`]:[],...C?[C]:[]],progress:{current:p+1,total:a.planning.effectiveChapters.length,label:D?"章节降级成稿":bt.length?"章节已生成":"章节达标"}},{subtitle:(0,cj.GQ)(l.title),order:p}),a.understanding.chapterGenerationStagesByOrder[p]=o,async()=>{let b=D?(0,dq._9)({id:l.id,title:l.title,content:m,evidence:aj,missingFacts:ak,sections:bq,tablePlans:l.tablePlans||[]},D):{id:l.id,title:l.title,content:m,evidence:aj,missingFacts:ak,sections:bq,tablePlans:l.tablePlans||[]};a.understanding.chapterDraftsByOrder[p]=b,a.global.chapterDrafts=a.understanding.chapterDraftsByOrder.filter(a=>!!a),a.global.emitProgress(a.global.chapterDrafts)}}catch(e){if(a.global.input.signal?.aborted)throw e;let b=a.planning.generationDiagnostics.llm.lastError,c=`failures=${a.planning.generationDiagnostics.llm.failures} retries=${a.planning.generationDiagnostics.llm.retries} reasoningTokens=${a.planning.generationDiagnostics.llm.reasoningTokens||0}`;console.error(`[gen] chapter ${l.title} failed:`,e,b?`| LLM lastError: ${b}`:"| LLM lastError: (none)","|",c);let d=`${l.title}:${e instanceof Error?e.message:"生成失败"}`;a.understanding.failedChapterMessages.push(d),o=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,cj.GQ)(l.title)} 生成失败:${d}`,details:[`LLM 最近错误:${b||"无记录"}`,`LLM 调用失败 ${a.planning.generationDiagnostics.llm.failures} 次、重试 ${a.planning.generationDiagnostics.llm.retries} 次`]},{subtitle:(0,cj.GQ)(l.title),order:p}),a.understanding.chapterGenerationStagesByOrder[p]=o}o&&(a.global.progressStages[A]=o),a.global.emitProgress(a.global.chapterDrafts)}))))m&&a.blueprint.reviewTaskPool.push(a.blueprint.reviewSemaphore.run(m))}await Promise.all(a.blueprint.reviewTaskPool),a.planning.generationDiagnostics.metrics.push({name:"phase:draft",startedAt:a.chapterLoop.draftPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-a.chapterLoop.draftPhaseStartedAt}),a.chapterLoop.globalReviewPhaseStartedAt=Date.now(),a.chapterLoop.chapterDraftsFinal=a.understanding.chapterDraftsByOrder.filter(a=>!!a),a.understanding.chapterGenerationStages.push(...a.understanding.chapterGenerationStagesByOrder.filter(a=>!!a))}var f9=c(62521);async function ga(a){let b=Math.round(([...a.planning.documentBudget.chapterTargets.values()].reduce((a,b)=>a+b,0)||a.planning.documentBudget.targetChars||0)/Math.max(1,a.planning.effectiveChapters.length)),c=(0,d_.z)().chapterConcurrency||0;a.blueprint.chapterConcurrency=a.planning.generationBudget.chapterConcurrency,a.blueprint.reviewConcurrency=a.planning.generationBudget.reviewConcurrency,(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${a.planning.effectiveChapters.length} 章全部同批并行生成,审查修复 ${a.blueprint.reviewConcurrency} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${a.planning.effectiveChapters.length}`,`平均章节目标:${b} 字`,Number.isFinite(c)&&c>0?`章节并发来自 tuningProfile.chapterConcurrency=${Math.floor(c)}`:`全部章节并行生成,在飞调用不设并发上限;每章单轮修复(失败即放弃)`]},{subtitle:"章节流水线策略"})),a.global.emitProgress(),a.blueprint.reviewSemaphore=new f.jf(a.blueprint.reviewConcurrency),a.blueprint.reviewTaskPool=[];let d=[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),e=Date.now();a.blueprint.basicFactSearchResults=d.length>0?(await (0,f.l$)(n.xs,async b=>a.understanding.searchWithCache(b,d,Math.min(a.understanding.requestedEvidencePerChapter,12),"",a.prepare.materialScope.selectedMaterialRoots),{kind:"search"})).flat():[],a.planning.generationDiagnostics.evidence.searchQueries+=n.xs.length,a.planning.generationDiagnostics.evidence.searchMs+=Date.now()-e;let g=Date.now();try{a.blueprint.integratedBlueprint=(0,t.DL)({projectRoot:a.prepare.projectRoot,boundFilePaths:a.prepare.materialFilePaths,chapterTitles:a.planning.effectiveChapters.map(a=>a.title),templateName:a.prepare.template.name,basicFacts:(0,t.eT)(a.understanding.canonicalFacts),evidence:a.understanding.writerEvidence,truthEvidence:a.understanding.allEvidence,facts:[...a.understanding.earlyFactPool.localFacts,...a.understanding.earlyFactPool.projectBasicFacts,...a.understanding.earlyFactPool.preciseFacts],composition:a.understanding.bidComposition,signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics});let b=(0,t.Fq)(a.prepare.projectRoot,a.blueprint.integratedBlueprint),c=a.blueprint.integratedBlueprint.outline.chapters.reduce((a,b)=>a+b.subSections.reduce((a,b)=>a+b.workPackages.length,0),0),d=a.understanding.bidComposition,e=d?`${"blind"===d.bidType?`暗标(正文${"forbidden"===d.bodyTablePolicy?"禁表格(显式禁表句)":"表格按证据口径允许"}/禁图片)`:"open"===d.bidType?"明标(正文可含表格)":"未识别勾选标记(按常规口径)"}${d.appendixPlan.length>0?`;文末附表 ${d.appendixPlan.length} 项`:""}`:"未识别(阶段 1 判定缺失,按常规口径)";(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"integrated-blueprint",status:a.blueprint.integratedBlueprint.validation.passed?"success":"failed",message:a.blueprint.integratedBlueprint.validation.passed?`一体化蓝图已构建并落盘:清单 ${a.blueprint.integratedBlueprint.diagnostics.boq?.totalEntries??0} 条目、工作包 ${c} 个(校验通过,参数桶与章切片接管各章写作)`:`一体化蓝图已构建但校验未通过(参数桶不注入,不阻断生成):${a.blueprint.integratedBlueprint.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}`,details:[`耗时 ${Date.now()-g}ms`,`落盘:${b}`,`清单解析:${a.blueprint.integratedBlueprint.diagnostics.boq?`${a.blueprint.integratedBlueprint.diagnostics.boq.totalEntries} 条目 / ${a.blueprint.integratedBlueprint.diagnostics.boq.groupCount} ${a.blueprint.integratedBlueprint.diagnostics.boq.groupLabel||"个分组"} / 完整性校验${a.blueprint.integratedBlueprint.diagnostics.boq.complete?"通过":"未通过"}`:"未解析(见警告)"}`,`标书编制规格:${e}`,`校验链:${a.blueprint.integratedBlueprint.validation.checks.map(a=>`${a.name}${a.passed?"✓":"✗"}`).join(" / ")}`,...a.blueprint.integratedBlueprint.diagnostics.warnings.map(a=>`警告:${a}`)]},{subtitle:"一体化蓝图"})),a.global.emitProgress()}catch(b){a.blueprint.integratedBlueprint=void 0,(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"integrated-blueprint",status:"failed",message:`一体化蓝图构建异常(参数桶不注入,不阻断生成):${b instanceof Error?b.message:String(b)}`,details:[`耗时 ${Date.now()-g}ms`,"蓝图异常时参数桶与章切片不注入,各章按证据独立成稿"]},{subtitle:"一体化蓝图"})),a.global.emitProgress()}if(a.blueprint.integratedBlueprint)try{let b=(0,t.wY)({projectRoot:a.prepare.projectRoot,boundFilePaths:a.prepare.materialFilePaths});a.blueprint.billFactLock=(0,v.Ft)({boq:b.boq}),a.blueprint.billFactLock&&(a.planning.generationDiagnostics.llm.lastInfo=`清单事实锁:锁定 ${a.blueprint.billFactLock.totalEntries} 条目(完整性校验${a.blueprint.billFactLock.complete?"通过":"未通过"}),写作直读与数值核对轮生效`)}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 清单事实锁构建失败:${b}`),a.blueprint.billFactLock=void 0,(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"bill-fact-lock",status:"failed",message:`清单事实锁构建失败:清单类数值核对未生效(${b})`,details:["后果:清单落位、数值对账、写作直读注入三项均不会执行——本稿的清单相关缺陷**不会被检出**。","建议:核对该项目工程量清单文件(xls/xlsx/PDF)是否可解析、是否已入库,再重新生成。"]},{subtitle:"清单事实锁",order:a.global.progressStages.length})),a.global.emitProgress()}try{a.blueprint.drawingFactLock=(0,c0.e9)({evidence:a.understanding.allEvidence,fileProcessingByPath:a.understanding.fileProcessingByPath});let b=a.blueprint.drawingFactLock;b&&b.usableDrawings>0&&((0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"drawing-fact-lock",status:"success",message:`图纸事实锁:可用图纸 ${b.usableDrawings} 份,锁定事实行 ${b.totalFacts} 行${b.unusableDrawings>0?`(${b.unusableDrawings} 份无可用事实行)`:""},写作直读与引用率验收生效`,details:[...b.groups.slice(0,10).map(a=>`${a.sourceFile.split("/").pop()||a.sourceFile}:${a.factLines.length} 行 / ${a.tokens.length} 个判定锚点`),...b.unusableDrawings>0?[`无可用事实行 ${b.unusableDrawings} 份(不纳入引用率验收分母)`]:[]]},{subtitle:"图纸事实锁",order:a.global.progressStages.length})),a.global.emitProgress())}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 图纸事实锁构建失败:${b}`),a.blueprint.drawingFactLock=void 0,(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"drawing-fact-lock",status:"failed",message:`图纸事实锁构建失败:图纸引用与图纸事实分量未生效(${b})`,details:["后果:图纸事实注入、图纸引用率验收、数据锚定的图纸分量均不会执行——本稿的图纸相关缺陷**不会被检出**。","建议:核对该项目图纸文件(dwg/dxf/pdf)是否可解析、是否已入库,再重新生成。"]},{subtitle:"图纸事实锁",order:a.global.progressStages.length})),a.global.emitProgress()}{let b=a.planning.tenderRequirements,c=await (0,aY.VX)(b.entries,a.planning.effectiveChapters,a.planning.requirementsSimilarity,{signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics});if(a.blueprint.requirementAssignments=c.assignments,c.dropped.length>0){let a=new Set(c.dropped);b.entries=b.entries.filter(b=>!a.has(b)),b.excluded.push(...c.dropped.map(a=>({text:a.text,source:a.sources.map(a=>[a.file,a.location].filter(Boolean).join("|")).filter(Boolean).join(";")||void 0,reason:"non_requirement"}))),b.reconciliation.entryCount=b.entries.length,b.reconciliation.excludedCount=b.excluded.length}let d=a.blueprint.requirementAssignments.length;if(d!==b.entries.length)throw Error(`招标要求分配对账失败:要求 ${b.entries.length} 条,分配 ${d} 条`);if(b.entries.length>0){let e=(0,aY.T3)(a.prepare.projectRoot,c.assignments),f=new Map;for(let a of c.assignments)f.set(a.chapterTitle,(f.get(a.chapterTitle)||0)+1);(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"tender-requirement-assignment",status:"success",message:`招标要求分配:${d} 条要求全部落位 ${f.size} 个责任章${c.dropped.length>0?`(LLM 拒选 ${c.dropped.length} 条移出要求池)`:""}${c.lowConfidenceCount>0?`(保留低置信 ${c.lowConfidenceCount} 条,LLM 未裁决)`:""}`,details:[`分配对账:要求 ${b.entries.length} 条 = 分配 ${d} 条(未分配 0)`,`落盘:${e}`,...c.dropped.length>0?[`LLM 拒选 ${c.dropped.length} 条(无章节可承载,已移出要求池)`]:[],...[...f.entries()].map(([a,b])=>`${a}:${b} 条`),...c.assignments.filter(a=>a.lowConfidence).slice(0,8).map(a=>`低置信:${a.entry.text} → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)]},{subtitle:"招标要求分配",order:a.global.progressStages.length})),a.global.emitProgress()}}{let b=a.planning.tenderRequirements.structureRequirements||[];if(b.length>0){let{assignments:c,unattached:d}=(0,aY._D)(b,a.planning.effectiveChapters,a.planning.requirementsSimilarity);a.blueprint.structureAssignments=c,a.blueprint.structureUnattached=d;let e=(0,aY.Vf)(a.prepare.projectRoot,c,d);(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"tender-structure-assignment",status:"success",message:`结构/呈现要求归属:${c.length} 项挂章${d.length>0?`,${d.length} 项存疑未挂(仅展示)`:""}`,details:[`归属 ${c.length} / 存疑 ${d.length} / 共 ${b.length} 项`,`落盘:${e}`,...c.map(a=>`${a.requirement.element}(以${a.requirement.form}呈现)→ ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`),...d.map(a=>`存疑未挂:${a.requirement.element}(以${a.requirement.form}呈现,最高相似度 ${a.score.toFixed(2)} < ${aY.E})`)]},{subtitle:"结构/呈现要求归属",order:a.global.progressStages.length})),a.global.emitProgress()}}let h=a.planning.documentBudget.targetChars;if(a.planning.documentBudget.longformStrict&&0!==(0,d_.z)().capacityFeasibilityRecalibration&&h&&a.blueprint.integratedBlueprint?.validation.passed){let b=a.blueprint.integratedBlueprint,c=Date.now();try{let d=new Map,e=a=>{let c=d.get(a.id);return c||(c=(0,t.iV)((0,t.md)(b,a.title),a.sections||[]),d.set(a.id,c)),c},f=a.prepare.documentSpec,{chapterTargets:g,adjustments:k,compressed:l}=(0,i.K1)({chapters:a.planning.effectiveChapters,targetChars:h,floorOf:a=>Math.max(f?.chapterRules.find(b=>b.id===a.id||b.title===a.title)?.minWords||0,f?.dynamicChapterRule.minWordsPerChapter||0),feasibilityFloorOf:a=>e(a).minFeasibleWords,currentTargets:a.planning.documentBudget.chapterTargets});for(let[b,c]of(a.planning.documentBudget.chapterTargets.clear(),g))a.planning.documentBudget.chapterTargets.set(b,c);(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"chapter-budget-feasibility",status:"success",message:l?"章预算可行性校准:最低密度预算合计超出全文目标,按下限比例压缩(不阻断;容量密度需求与目标字数冲突已显式暴露)":k.length>0?`章预算可行性校准:${k.length} 章按真实要点密度重锚(Σ章预算 = ${h} 字守恒)`:"章预算可行性校准:各章预算均满足密度可行性下限,无需调整",details:[...k.map(b=>{let c=a.planning.effectiveChapters.find(a=>a.id===b.id),d=c?e(c).points:0;return`${b.title}:${b.from} → ${b.to} 字(要点 ${d} 个 \xd7 密度下限 1800 字/块)`}).slice(0,12),`本地校准时耗 ${Date.now()-c}ms`,`开关:tuningProfile.capacityFeasibilityRecalibration=${(0,d_.z)().capacityFeasibilityRecalibration??"缺省开启"}`]},{subtitle:"章预算可行性校准"})),(k.length>0||l)&&console.warn(`[blueprint] 章预算可行性校准:${k.length} 章调整能量;Σ章预算 = ${h} 字守恒`),a.global.emitProgress()}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 章预算可行性校准失败:${b}`),(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"chapter-budget-feasibility",status:"failed",message:`章预算可行性校准失败:沿用原章预算(可能偏离真实要点密度)(${b})`},{subtitle:"章预算可行性校准",order:a.global.progressStages.length})),a.global.emitProgress()}}a.blueprint.blueprintActive=!!a.blueprint.integratedBlueprint?.validation.passed;{let b=a.blueprint.integratedBlueprint?.outline.chapters??[],c=(0,v.UO)(a.blueprint.billFactLock,a.planning.effectiveChapters),d=a.planning.effectiveChapters.map(d=>{let e=b.find(a=>a.title===d.title)??b.find(a=>d.title.includes(a.title)||a.title.includes(d.title)),g=(e?.subSections??[]).flatMap(a=>(a.requiredParams??[]).map(a=>a.path)),h=[...c.entries()].filter(([a,b])=>b.chapterTitle===d.title&&a).flatMap(([a])=>a.specQuantityPairs.length>0?a.specQuantityPairs.map(a=>a.spec):[a.name]),i=a.understanding.writerEvidence.filter(a=>a.chapterId===d.id||(0,dk.Lk)(a,d.title)),j=[(0,n.C_)(a.prepare.promptPlan,d).promptTexts,a.prepare.generationControlPrompt,a.prepare.runtimeRulesText].filter(Boolean).join("\n\n"),k=(0,q.rC)({template:a.prepare.template,chapter:d,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile,promptTexts:j,requirement:a.global.input.requirement}),l=(0,q.ji)({needs:k,factsModel:a.understanding.preliminaryFactsModel,evidence:i,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys}),m=(0,q.n9)(l).map(a=>(0,f.lG)(a.value)).filter(a=>dA.sv.test(a)),o=(0,f9.QM)({blueprintParams:g,billSpecs:h,evidenceTokens:(0,dq.Y8)(i),factValues:m});return(0,f9.SO)({chapterTitle:d.title,targetWords:a.planning.documentBudget.chapterTargets.get(d.id)||0,availableParameters:o.total,supplyChannels:o})});a.planning.chapterSupplyDemand=d;let e=d.filter(a=>!a.sufficient);(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"supply-demand-alignment",status:0===e.length?"success":"failed",message:0===e.length?`供给面 ↔ 要求面对齐核算通过:${d.length} 章可用量化参数均达 ${dy.J5}/千字`:`供给面不足:${e.length}/${d.length} 章可用量化参数低于 ${dy.J5}/千字(按蓝图 must_cite + 清单责任行规格 + 本章证据精确 token 去重计)`,details:e.slice(0,8).flatMap(a=>[`【${a.chapterTitle}】`,...a.remediation])},{subtitle:"章预算可行性校准",order:a.global.progressStages.length})),a.global.emitProgress()}}var gb=c(36366);async function gc(a){if(0===a.requirementSummary.length||0===a.chapters.length)return[];let b=a.chapters.map(a=>`【${(0,cj.GQ)(a.title)}】
|
|
206
|
+
${d.merged.filter(a=>!!(a&&a.trim())).join("\n\n")}`,E=c;let{head:e,details:f}=(0,dq.fk)(c),g=`${(0,cj.GQ)(l.title)} 章级显式降级:${e}(失败原因:${c.droppedBlocks.map(a=>a.reason).join(";")})——已保留其余块正文,失守块不产出正文,已登记 structure/blocker 进导出门禁与交付复核清单`;console.error(`[gen][chapter-audit] ${g}`),console.error(`[gen][chapter-audit] 降级明细:${f.slice(1).join(" | ")}`),a.planning.generationDiagnostics.llm.lastInfo=g}}}}}if(b||(a.planning.generationDiagnostics.llm.lastError=a.planning.generationDiagnostics.llm.lastError||"全部成稿路径未返回有效正文"),b&&a.blueprint.integratedBlueprint){let c=(0,t.ZP)(b,a.blueprint.integratedBlueprint.data);c.filled.length>0&&(b=c.markdown),(c.unresolved.length>0||c.malformed.length>0)&&(a.understanding.missingItems.push(`${l.title}:权威占位符未决 ${c.unresolved.length} 处(${c.unresolved.slice(0,4).join("、")})${c.malformed.length>0?`;畸形 ${c.malformed.length} 处`:""}`),a.planning.generationDiagnostics.llm.lastInfo=`权威占位符未决:${l.title} ${c.unresolved.length} 处无权威值、${c.malformed.length} 处畸形(均保留原样,不静默删除)`)}if(b&&bb&&a.blueprint.integratedBlueprint){let c=(0,t.C8)(b,bb,a.blueprint.integratedBlueprint.data);c.fixed.length>0?(b=c.markdown,a.planning.generationDiagnostics.llm.lastInfo=`蓝图引用对齐:${l.title} 回填 ${c.fixed.length} 处(${c.fixed.map(a=>`${a.anchor} ${a.from}→${a.to}`).join("、")})${c.missing.length?`;未引用缺口 ${c.missing.length} 项:${c.missing.join("、")}`:""}`):c.missing.length>0&&(a.planning.generationDiagnostics.llm.lastInfo=`蓝图引用缺口观测:${l.title} 未在正文引用 ${c.missing.length} 项 must_cite 参数(${c.missing.slice(0,6).join("、")}${c.missing.length>6?" 等":""}),由跨章一致性审查兑底`)}if(b&&a.blueprint.integratedBlueprint){let c=(0,s.Pl)(b,(0,ah.i2)(a.blueprint.integratedBlueprint.data));if(c.fixedCount>0){b=c.markdown;let d=a.planning.generationDiagnostics.llm.lastInfo;a.planning.generationDiagnostics.llm.lastInfo=`${d?`${d};`:""}阶段劳动力口径对齐:${l.title} 回填 ${c.fixedCount} 处(${c.details.join("、")})`}}if((0,f.Te)(a.global.input.signal),!b){let b=a.planning.generationDiagnostics.llm.lastError||"空响应或超时",c=`${(0,cj.GQ)(l.title)} 正文未达到成稿要求,已阻断生成(${b.slice(0,160)})`;throw a.global.progressStages[B]=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:"failed",message:c,details:[`阻断归因:${b}`,`证据条数:${ak.length}`],progress:{current:u+1,total:a.planning.effectiveChapters.length,label:"章节阻断"}},{subtitle:(0,cj.GQ)(l.title),order:u}),a.global.emitProgress(a.global.chapterDrafts),Error(c)}if(!b.trim())throw Error(`${(0,cj.GQ)(l.title)} 首次生成失败,未获得可用于定稿的正文`);let i=d&&d.blocks.length>0?d.blocks.map(a=>a.title):(l.sections||[]).filter(Boolean),k=d&&d.blocks.length>0?d.blocks.flatMap(a=>a.subPoints.map(a=>a.title)):[],o=b;i.length>0&&(o=(0,f.Ww)(o,i,3,{nearMatch:!0})),k.length>0&&(o=(0,f.Ww)(o,k,4)),m=(0,n.w_)(o,l),m=await (0,n._k)(m,a.understanding.bidProcedureJudge)}let bj=await ds({chapter:l,content:m,evidence:ak}),bk=(0,i.V7)(m),bl=a8.roundTarget>0?Math.round(bk/a8.roundTarget*100):0,bn=a8.roundTarget>0&&bk>Math.ceil(1.2*a8.roundTarget);bn&&console.error(`[gen][chapter-audit] 章篇幅超产 ${bl}%(${bk} 字 vs 本轮目标 ${a8.roundTarget} 字,终稿篇幅阻断线为目标总额 +20%): ${(0,cj.GQ)(l.title)}`);let bo=(0,ad.r4)(m),bp=d&&d.blocks.length>0?d.blocks.map(a=>a.title):(l.sections||[]).filter(Boolean),bq=bp.filter((a,b)=>a!==bp[b-1]),br=bq.length>0?bq:bo.length>0?bo:[],bs=(0,af.qK)(m,[{title:l.title,content:m,sections:br}]).map(a=>a.message),bt=bj.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bu=(function(a){let b;try{b=(0,o.yT)("table-content-leak",()=>(0,cI.GI)(a.content))}catch(c){let b=c instanceof Error?c.message:String(c);return console.error(`[gen][chapter-qc] 章级表格内容泄漏自检失败(该维度本次未执行): ${a.chapterTitle}`,c),a.diagnostics&&(a.diagnostics.llm.lastError=`章级表格内容泄漏自检未完成:${a.chapterTitle} —— ${b}`),[`表格内容泄漏自检未完成(该检测维度本次未执行,已记录待复核):${b}`]}return 0===b.length?[]:(console.error(`[gen][chapter-qc] 章级表格内容泄漏 ${b.length} 段(表格条目被倒成无主谓散文): ${a.chapterTitle}`),b.map(a=>{let b=a.replace(/\s+/gu,"");return`表格内容泄漏:表格条目被倒成散文段(无主谓书名号枚举 ${b.length} 字),应改回表格或补出主谓——段首「${b.slice(0,40)}…」`}))})({chapterTitle:l.title,content:m,diagnostics:a.planning.generationDiagnostics}).slice(0,4),bv=[...bs,...bt,...bu],bw=E?(0,dq.fk)(E):void 0,bx=E?(C={plannedBlocks:E.plannedBlocks,droppedBlocks:E.plannedBlocks-E.deliveredBlocks},au({before:C.plannedBlocks,after:C.droppedBlocks})):(0,n.md)(bk,be,bv);return p=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aH.primaryPromptId,status:bx,message:(0,j.AQ)(`${(0,cj.GQ)(l.title)} 已由大模型成稿:当前 ${bk} 字${bw?`;${bw.head}`:""};章节预算约 ${a8.budgetTarget} 字,本轮目标约 ${a8.roundTarget} 字${bv.length?`;待优化:${bv.slice(0,8).join("、")}`:""}`,A),details:[`本轮完成率:${bl}%`,`结构目标约 ${a8.structureTarget} 字`,...aJ,...a6,`二级小节:${br.length} 个`,...bw?bw.details:[],...bn?[`篇幅审计:章超产(${bk} 字 vs 本轮目标 ${a8.roundTarget} 字,终稿篇幅阻断线为目标总额 +20%)`]:[],...D?[D]:[]],progress:{current:u+1,total:a.planning.effectiveChapters.length,label:E?"章节降级成稿":bv.length?"章节已生成":"章节达标"}},{subtitle:(0,cj.GQ)(l.title),order:u}),a.understanding.chapterGenerationStagesByOrder[u]=p,async()=>{let b=E?(0,dq._9)({id:l.id,title:l.title,content:m,evidence:ak,missingFacts:al,sections:br,tablePlans:l.tablePlans||[]},E):{id:l.id,title:l.title,content:m,evidence:ak,missingFacts:al,sections:br,tablePlans:l.tablePlans||[]};a.understanding.chapterDraftsByOrder[u]=b,a.global.chapterDrafts=a.understanding.chapterDraftsByOrder.filter(a=>!!a),a.global.emitProgress(a.global.chapterDrafts)}}catch(e){if(a.global.input.signal?.aborted)throw e;let b=a.planning.generationDiagnostics.llm.lastError,c=`failures=${a.planning.generationDiagnostics.llm.failures} retries=${a.planning.generationDiagnostics.llm.retries} reasoningTokens=${a.planning.generationDiagnostics.llm.reasoningTokens||0}`;console.error(`[gen] chapter ${l.title} failed:`,e,b?`| LLM lastError: ${b}`:"| LLM lastError: (none)","|",c);let d=`${l.title}:${e instanceof Error?e.message:"生成失败"}`;a.understanding.failedChapterMessages.push(d),p=(0,j.X5)({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${(0,cj.GQ)(l.title)} 生成失败:${d}`,details:[`LLM 最近错误:${b||"无记录"}`,`LLM 调用失败 ${a.planning.generationDiagnostics.llm.failures} 次、重试 ${a.planning.generationDiagnostics.llm.retries} 次`]},{subtitle:(0,cj.GQ)(l.title),order:u}),a.understanding.chapterGenerationStagesByOrder[u]=p}p&&(a.global.progressStages[B]=p),a.global.emitProgress(a.global.chapterDrafts)}))))m&&a.blueprint.reviewTaskPool.push(a.blueprint.reviewSemaphore.run(m))}await Promise.all(a.blueprint.reviewTaskPool),a.planning.generationDiagnostics.metrics.push({name:"phase:draft",startedAt:a.chapterLoop.draftPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-a.chapterLoop.draftPhaseStartedAt}),a.chapterLoop.globalReviewPhaseStartedAt=Date.now(),a.chapterLoop.chapterDraftsFinal=a.understanding.chapterDraftsByOrder.filter(a=>!!a),a.understanding.chapterGenerationStages.push(...a.understanding.chapterGenerationStagesByOrder.filter(a=>!!a))}var f9=c(62521);async function ga(a){let b=Math.round(([...a.planning.documentBudget.chapterTargets.values()].reduce((a,b)=>a+b,0)||a.planning.documentBudget.targetChars||0)/Math.max(1,a.planning.effectiveChapters.length)),c=(0,d_.z)().chapterConcurrency||0;a.blueprint.chapterConcurrency=a.planning.generationBudget.chapterConcurrency,a.blueprint.reviewConcurrency=a.planning.generationBudget.reviewConcurrency,(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${a.planning.effectiveChapters.length} 章全部同批并行生成,审查修复 ${a.blueprint.reviewConcurrency} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${a.planning.effectiveChapters.length}`,`平均章节目标:${b} 字`,Number.isFinite(c)&&c>0?`章节并发来自 tuningProfile.chapterConcurrency=${Math.floor(c)}`:`全部章节并行生成,在飞调用不设并发上限;每章单轮修复(失败即放弃)`]},{subtitle:"章节流水线策略"})),a.global.emitProgress(),a.blueprint.reviewSemaphore=new f.jf(a.blueprint.reviewConcurrency),a.blueprint.reviewTaskPool=[];let d=[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),e=Date.now();a.blueprint.basicFactSearchResults=d.length>0?(await (0,f.l$)(n.xs,async b=>a.understanding.searchWithCache(b,d,Math.min(a.understanding.requestedEvidencePerChapter,12),"",a.prepare.materialScope.selectedMaterialRoots),{kind:"search"})).flat():[],a.planning.generationDiagnostics.evidence.searchQueries+=n.xs.length,a.planning.generationDiagnostics.evidence.searchMs+=Date.now()-e;let g=Date.now();try{a.blueprint.integratedBlueprint=(0,t.DL)({projectRoot:a.prepare.projectRoot,boundFilePaths:a.prepare.materialFilePaths,chapterTitles:a.planning.effectiveChapters.map(a=>a.title),templateName:a.prepare.template.name,basicFacts:(0,t.eT)(a.understanding.canonicalFacts),evidence:a.understanding.writerEvidence,truthEvidence:a.understanding.allEvidence,facts:[...a.understanding.earlyFactPool.localFacts,...a.understanding.earlyFactPool.projectBasicFacts,...a.understanding.earlyFactPool.preciseFacts],composition:a.understanding.bidComposition,signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics});let b=(0,t.Fq)(a.prepare.projectRoot,a.blueprint.integratedBlueprint),c=a.blueprint.integratedBlueprint.outline.chapters.reduce((a,b)=>a+b.subSections.reduce((a,b)=>a+b.workPackages.length,0),0),d=a.understanding.bidComposition,e=d?`${"blind"===d.bidType?`暗标(正文${"forbidden"===d.bodyTablePolicy?"禁表格(显式禁表句)":"表格按证据口径允许"}/禁图片)`:"open"===d.bidType?"明标(正文可含表格)":"未识别勾选标记(按常规口径)"}${d.appendixPlan.length>0?`;文末附表 ${d.appendixPlan.length} 项`:""}`:"未识别(阶段 1 判定缺失,按常规口径)";(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"integrated-blueprint",status:a.blueprint.integratedBlueprint.validation.passed?"success":"failed",message:a.blueprint.integratedBlueprint.validation.passed?`一体化蓝图已构建并落盘:清单 ${a.blueprint.integratedBlueprint.diagnostics.boq?.totalEntries??0} 条目、工作包 ${c} 个(校验通过,参数桶与章切片接管各章写作)`:`一体化蓝图已构建但校验未通过(参数桶不注入,不阻断生成):${a.blueprint.integratedBlueprint.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}`,details:[`耗时 ${Date.now()-g}ms`,`落盘:${b}`,`清单解析:${a.blueprint.integratedBlueprint.diagnostics.boq?`${a.blueprint.integratedBlueprint.diagnostics.boq.totalEntries} 条目 / ${a.blueprint.integratedBlueprint.diagnostics.boq.groupCount} ${a.blueprint.integratedBlueprint.diagnostics.boq.groupLabel||"个分组"} / 完整性校验${a.blueprint.integratedBlueprint.diagnostics.boq.complete?"通过":"未通过"}`:"未解析(见警告)"}`,`标书编制规格:${e}`,`校验链:${a.blueprint.integratedBlueprint.validation.checks.map(a=>`${a.name}${a.passed?"✓":"✗"}`).join(" / ")}`,...a.blueprint.integratedBlueprint.diagnostics.warnings.map(a=>`警告:${a}`)]},{subtitle:"一体化蓝图"})),a.global.emitProgress()}catch(b){a.blueprint.integratedBlueprint=void 0,(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"integrated-blueprint",status:"failed",message:`一体化蓝图构建异常(参数桶不注入,不阻断生成):${b instanceof Error?b.message:String(b)}`,details:[`耗时 ${Date.now()-g}ms`,"蓝图异常时参数桶与章切片不注入,各章按证据独立成稿"]},{subtitle:"一体化蓝图"})),a.global.emitProgress()}if(a.blueprint.integratedBlueprint)try{let b=(0,t.wY)({projectRoot:a.prepare.projectRoot,boundFilePaths:a.prepare.materialFilePaths});a.blueprint.billFactLock=(0,v.Ft)({boq:b.boq}),a.blueprint.billFactLock&&(a.planning.generationDiagnostics.llm.lastInfo=`清单事实锁:锁定 ${a.blueprint.billFactLock.totalEntries} 条目(完整性校验${a.blueprint.billFactLock.complete?"通过":"未通过"}),写作直读与数值核对轮生效`)}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 清单事实锁构建失败:${b}`),a.blueprint.billFactLock=void 0,(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"bill-fact-lock",status:"failed",message:`清单事实锁构建失败:清单类数值核对未生效(${b})`,details:["后果:清单落位、数值对账、写作直读注入三项均不会执行——本稿的清单相关缺陷**不会被检出**。","建议:核对该项目工程量清单文件(xls/xlsx/PDF)是否可解析、是否已入库,再重新生成。"]},{subtitle:"清单事实锁",order:a.global.progressStages.length})),a.global.emitProgress()}try{a.blueprint.drawingFactLock=(0,c0.e9)({evidence:a.understanding.allEvidence,fileProcessingByPath:a.understanding.fileProcessingByPath});let b=a.blueprint.drawingFactLock;b&&b.usableDrawings>0&&((0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"drawing-fact-lock",status:"success",message:`图纸事实锁:可用图纸 ${b.usableDrawings} 份,锁定事实行 ${b.totalFacts} 行${b.unusableDrawings>0?`(${b.unusableDrawings} 份无可用事实行)`:""},写作直读与引用率验收生效`,details:[...b.groups.slice(0,10).map(a=>`${a.sourceFile.split("/").pop()||a.sourceFile}:${a.factLines.length} 行 / ${a.tokens.length} 个判定锚点`),...b.unusableDrawings>0?[`无可用事实行 ${b.unusableDrawings} 份(不纳入引用率验收分母)`]:[]]},{subtitle:"图纸事实锁",order:a.global.progressStages.length})),a.global.emitProgress())}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 图纸事实锁构建失败:${b}`),a.blueprint.drawingFactLock=void 0,(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"drawing-fact-lock",status:"failed",message:`图纸事实锁构建失败:图纸引用与图纸事实分量未生效(${b})`,details:["后果:图纸事实注入、图纸引用率验收、数据锚定的图纸分量均不会执行——本稿的图纸相关缺陷**不会被检出**。","建议:核对该项目图纸文件(dwg/dxf/pdf)是否可解析、是否已入库,再重新生成。"]},{subtitle:"图纸事实锁",order:a.global.progressStages.length})),a.global.emitProgress()}{let b=a.planning.tenderRequirements,c=await (0,aY.VX)(b.entries,a.planning.effectiveChapters,a.planning.requirementsSimilarity,{signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics});if(a.blueprint.requirementAssignments=c.assignments,c.dropped.length>0){let a=new Set(c.dropped);b.entries=b.entries.filter(b=>!a.has(b)),b.excluded.push(...c.dropped.map(a=>({text:a.text,source:a.sources.map(a=>[a.file,a.location].filter(Boolean).join("|")).filter(Boolean).join(";")||void 0,reason:"non_requirement"}))),b.reconciliation.entryCount=b.entries.length,b.reconciliation.excludedCount=b.excluded.length}let d=a.blueprint.requirementAssignments.length;if(d!==b.entries.length)throw Error(`招标要求分配对账失败:要求 ${b.entries.length} 条,分配 ${d} 条`);if(b.entries.length>0){let e=(0,aY.T3)(a.prepare.projectRoot,c.assignments),f=new Map;for(let a of c.assignments)f.set(a.chapterTitle,(f.get(a.chapterTitle)||0)+1);(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"tender-requirement-assignment",status:"success",message:`招标要求分配:${d} 条要求全部落位 ${f.size} 个责任章${c.dropped.length>0?`(LLM 拒选 ${c.dropped.length} 条移出要求池)`:""}${c.lowConfidenceCount>0?`(保留低置信 ${c.lowConfidenceCount} 条,LLM 未裁决)`:""}`,details:[`分配对账:要求 ${b.entries.length} 条 = 分配 ${d} 条(未分配 0)`,`落盘:${e}`,...c.dropped.length>0?[`LLM 拒选 ${c.dropped.length} 条(无章节可承载,已移出要求池)`]:[],...[...f.entries()].map(([a,b])=>`${a}:${b} 条`),...c.assignments.filter(a=>a.lowConfidence).slice(0,8).map(a=>`低置信:${a.entry.text} → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)]},{subtitle:"招标要求分配",order:a.global.progressStages.length})),a.global.emitProgress()}}{let b=a.planning.tenderRequirements.structureRequirements||[];if(b.length>0){let{assignments:c,unattached:d}=(0,aY._D)(b,a.planning.effectiveChapters,a.planning.requirementsSimilarity);a.blueprint.structureAssignments=c,a.blueprint.structureUnattached=d;let e=(0,aY.Vf)(a.prepare.projectRoot,c,d);(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"tender-structure-assignment",status:"success",message:`结构/呈现要求归属:${c.length} 项挂章${d.length>0?`,${d.length} 项存疑未挂(仅展示)`:""}`,details:[`归属 ${c.length} / 存疑 ${d.length} / 共 ${b.length} 项`,`落盘:${e}`,...c.map(a=>`${a.requirement.element}(以${a.requirement.form}呈现)→ ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`),...d.map(a=>`存疑未挂:${a.requirement.element}(以${a.requirement.form}呈现,最高相似度 ${a.score.toFixed(2)} < ${aY.E})`)]},{subtitle:"结构/呈现要求归属",order:a.global.progressStages.length})),a.global.emitProgress()}}let h=a.planning.documentBudget.targetChars;if(a.planning.documentBudget.longformStrict&&0!==(0,d_.z)().capacityFeasibilityRecalibration&&h&&a.blueprint.integratedBlueprint?.validation.passed){let b=a.blueprint.integratedBlueprint,c=Date.now();try{let d=new Map,e=a=>{let c=d.get(a.id);return c||(c=(0,t.iV)((0,t.md)(b,a.title),a.sections||[]),d.set(a.id,c)),c},f=a.prepare.documentSpec,{chapterTargets:g,adjustments:k,compressed:l}=(0,i.K1)({chapters:a.planning.effectiveChapters,targetChars:h,floorOf:a=>Math.max(f?.chapterRules.find(b=>b.id===a.id||b.title===a.title)?.minWords||0,f?.dynamicChapterRule.minWordsPerChapter||0),feasibilityFloorOf:a=>e(a).minFeasibleWords,currentTargets:a.planning.documentBudget.chapterTargets});for(let[b,c]of(a.planning.documentBudget.chapterTargets.clear(),g))a.planning.documentBudget.chapterTargets.set(b,c);(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"chapter-budget-feasibility",status:"success",message:l?"章预算可行性校准:最低密度预算合计超出全文目标,按下限比例压缩(不阻断;容量密度需求与目标字数冲突已显式暴露)":k.length>0?`章预算可行性校准:${k.length} 章按真实要点密度重锚(Σ章预算 = ${h} 字守恒)`:"章预算可行性校准:各章预算均满足密度可行性下限,无需调整",details:[...k.map(b=>{let c=a.planning.effectiveChapters.find(a=>a.id===b.id),d=c?e(c).points:0;return`${b.title}:${b.from} → ${b.to} 字(要点 ${d} 个 \xd7 密度下限 1800 字/块)`}).slice(0,12),`本地校准时耗 ${Date.now()-c}ms`,`开关:tuningProfile.capacityFeasibilityRecalibration=${(0,d_.z)().capacityFeasibilityRecalibration??"缺省开启"}`]},{subtitle:"章预算可行性校准"})),(k.length>0||l)&&console.warn(`[blueprint] 章预算可行性校准:${k.length} 章调整能量;Σ章预算 = ${h} 字守恒`),a.global.emitProgress()}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 章预算可行性校准失败:${b}`),(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"chapter-budget-feasibility",status:"failed",message:`章预算可行性校准失败:沿用原章预算(可能偏离真实要点密度)(${b})`},{subtitle:"章预算可行性校准",order:a.global.progressStages.length})),a.global.emitProgress()}}a.blueprint.blueprintActive=!!a.blueprint.integratedBlueprint?.validation.passed;{let b=a.blueprint.integratedBlueprint?.outline.chapters??[],c=(0,v.UO)(a.blueprint.billFactLock,a.planning.effectiveChapters),d=a.planning.effectiveChapters.map(d=>{let e=b.find(a=>a.title===d.title)??b.find(a=>d.title.includes(a.title)||a.title.includes(d.title)),g=(e?.subSections??[]).flatMap(a=>(a.requiredParams??[]).map(a=>a.path)),h=[...c.entries()].filter(([a,b])=>b.chapterTitle===d.title&&a).flatMap(([a])=>a.specQuantityPairs.length>0?a.specQuantityPairs.map(a=>a.spec):[a.name]),i=a.understanding.writerEvidence.filter(a=>a.chapterId===d.id||(0,dk.Lk)(a,d.title)),j=[(0,n.C_)(a.prepare.promptPlan,d).promptTexts,a.prepare.generationControlPrompt,a.prepare.runtimeRulesText].filter(Boolean).join("\n\n"),k=(0,q.rC)({template:a.prepare.template,chapter:d,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile,promptTexts:j,requirement:a.global.input.requirement}),l=(0,q.ji)({needs:k,factsModel:a.understanding.preliminaryFactsModel,evidence:i,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys}),m=(0,q.n9)(l).map(a=>(0,f.lG)(a.value)).filter(a=>dA.sv.test(a)),o=(0,f9.QM)({blueprintParams:g,billSpecs:h,evidenceTokens:(0,dq.Y8)(i),factValues:m});return(0,f9.SO)({chapterTitle:d.title,targetWords:a.planning.documentBudget.chapterTargets.get(d.id)||0,availableParameters:o.total,supplyChannels:o})});a.planning.chapterSupplyDemand=d;let e=d.filter(a=>!a.sufficient);(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"supply-demand-alignment",status:0===e.length?"success":"failed",message:0===e.length?`供给面 ↔ 要求面对齐核算通过:${d.length} 章可用量化参数均达 ${dy.J5}/千字`:`供给面不足:${e.length}/${d.length} 章可用量化参数低于 ${dy.J5}/千字(按蓝图 must_cite + 清单责任行规格 + 本章证据精确 token 去重计)`,details:e.slice(0,8).flatMap(a=>[`【${a.chapterTitle}】`,...a.remediation])},{subtitle:"章预算可行性校准",order:a.global.progressStages.length})),a.global.emitProgress()}}var gb=c(36366);async function gc(a){if(0===a.requirementSummary.length||0===a.chapters.length)return[];let b=a.chapters.map(a=>`【${(0,cj.GQ)(a.title)}】
|
|
206
207
|
${(a.sections||[]).filter(Boolean).map(a=>`- ${a}`).join("\n")||"(本章暂无预设小节)"}`).join("\n\n"),c=await (0,dr.bb)((0,ad.y4)('你是施工组织设计大纲校准专家。输入各章已有小节与招标评分项要求,只输出需要新增的小节。\n\n新增小节必须显性承接评分项要求(如"创优目标与奖惩承诺""绿色建筑等级达标专项""智慧工地实施""装配式专项施工方案"),只允许新增,不得修改或删除任何已有小节。\n\n只有当前章节结构确实缺少对应承接小节时才新增;已有小节已覆盖该要求时不要重复新增。\n\n新增小节标题必须具体、可直接成稿,控制在 16 个汉字以内;不得新增与评分项要求无关的小节,不得输出条款碎片(如"1委员会确定中")。\n\n只返回 JSON,不要返回 markdown。'),[`文档模板:${a.templateName}`,`招标评分项要求摘要(必须逐条在结构层显性承接):
|
|
207
208
|
${a.requirementSummary.map(a=>`- ${a}`).join("\n")}`,`各章当前小节列表:
|
|
208
209
|
${b}`,a.diversityDirective?`${a.diversityDirective}
|
|
@@ -222,19 +223,19 @@ ${b}
|
|
|
222
223
|
${b}`,(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"writing-constraints-evolution",status:"success",message:`写作硬约束自进化:已注入缺陷热力图规避提醒 ${b.length} 字符`,details:[b]},{subtitle:"写作硬约束"})))}a.prepare.generationControlPrompt=[a.prepare.generationWritingConstraintsPrompt,a.prepare.projectUnderstanding.prompt,(0,gN.F)(a.prepare.projectMaterialSummary,{publicSafe:!0}),(0,gM.N)(a.prepare.documentSpec,k.sourceHash,{publicSafe:!0}),(0,gO.R)(a.prepare.readiness,{publicSafe:!0})].filter(Boolean).join("\n\n"),a.prepare.diagnosticControlPrompt=[a.prepare.projectUnderstanding.prompt,(0,gN.F)(a.prepare.projectMaterialSummary),(0,gM.N)(a.prepare.documentSpec,k.sourceHash),(0,gO.R)(a.prepare.readiness)].filter(Boolean).join("\n\n");let l=(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.formattingPrompts]),m=(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts,...a.prepare.promptPlan.formattingPrompts]),n=(0,g.fC)(a.prepare.promptPlan.prompts);a.prepare.webAccessConfig=(0,gK.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},a.prepare.runtimePromptRules=(0,ea.c_)({promptTexts:[a.prepare.generationControlPrompt,n].filter(Boolean).join("\n\n"),requirement:a.global.input.requirement,template:a.prepare.template,rolePrompts:a.prepare.promptPlan.prompts}),a.prepare.runtimeRulesText=[(0,ea.el)(a.prepare.runtimePromptRules),!a.prepare.webAccessConfig.enabled?"":"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。"].filter(Boolean).join("\n\n"),a.prepare.requirementSemantics=await a.global.withProgressHeartbeat(()=>gS({requirement:a.global.input.requirement,chapterTitles:a.prepare.template.chapters.map(a=>a.title),signal:a.global.input.signal,diagnostics:void 0}).catch(()=>gP())),a.prepare.requirementSemantics.parseFailed&&((0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"requirement-semantics-parse",status:"failed",message:`用户生成要求的语义解析失败:强制要求**未注入写作、也未进入核验闭环**(${a.prepare.requirementSemantics.parseFailureReason})`,details:["影响:本次生成不会核验你在提示词里写下的强制要求,成稿可能不含它们。","建议:核对提示词措辞后重新生成;若反复失败,请检查模型配置与额度。"]},{subtitle:"生成准备",order:a.global.progressStages.length})),a.global.emitProgress()),a.prepare.requirementSemantics.mandatoryBlockText&&(a.prepare.runtimeRulesText=`${a.prepare.runtimeRulesText}
|
|
223
224
|
|
|
224
225
|
${a.prepare.requirementSemantics.mandatoryBlockText}`),a.prepare.promptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,`生成前规划章节结构:
|
|
225
|
-
${(0,ad.CK)(a.prepare.template)}`,l||m].filter(Boolean).join("\n\n"),a.prepare.promptDocumentRules=a.prepare.runtimePromptRules,a.prepare.factExtractionPromptTexts=[a.prepare.diagnosticControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)([...a.prepare.promptPlan.extractionPrompts,...a.prepare.promptPlan.referencePrompts])].filter(Boolean).join("\n\n"),a.prepare.reviewPromptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts,...a.prepare.promptPlan.formattingPrompts])].filter(Boolean).join("\n\n"),a.prepare.repairPromptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)(a.prepare.promptPlan.formattingPrompts)].filter(Boolean).join("\n\n"),(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${a.prepare.materialFilePaths.length} 份项目资料`,details:[`提示词绑定:${a.prepare.promptBindings.length} 个`,`项目资料包:${a.prepare.projectMaterialProfile.materialRoots.join("、")||"当前知识库"}`,a.prepare.hasExplicitOutline?`识别 OUTLINE 章节:${a.prepare.explicitPromptChapters.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:a.global.progressStages.length})),a.global.emitProgress()}async function gW(a){(0,f.Te)(a.signal);let b={global:{input:a},prepare:{},understanding:{},planning:{},blueprint:{chapterConcurrency:0,reviewConcurrency:0,reviewSemaphore:new f.jf(1),reviewTaskPool:[],basicFactSearchResults:[],integratedBlueprint:void 0,blueprintActive:!1,requirementAssignments:[],structureAssignments:[],structureUnattached:[],billFactLock:void 0,drawingFactLock:void 0},chapterLoop:{draftPhaseStartedAt:0,chapterDraftsFinal:[],globalReviewPhaseStartedAt:0}};await gV(b),await gI(b),await gF(b),await ga(b),await f8(b);let c=[],d=!1;if(b.planning.generationStrategy.enableGlobalReview){let a=await eq({globalReviewSamplingRate:b.planning.generationStrategy.globalReviewSamplingRate,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,reviewPromptTexts:b.prepare.reviewPromptTexts,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,projectContext:b.planning.projectContext,generationDiagnostics:b.planning.generationDiagnostics,preliminaryFactsModel:b.understanding.preliminaryFactsModel,scopeConflicts:b.understanding.canonicalFacts.scopeConflicts,progressStages:b.global.progressStages,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,blueprintData:b.blueprint.integratedBlueprint?.validation.passed?b.blueprint.integratedBlueprint.data:void 0,billFactLock:b.blueprint.billFactLock,bidComposition:b.understanding.bidComposition});c=a.issues,d=a.dedupRan}else await el({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,projectContext:b.planning.projectContext,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,progressStages:b.global.progressStages,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,bidComposition:b.understanding.bidComposition});for(let a=0;a<3;a+=1){let a=await ep({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,progressStages:b.global.progressStages,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,bidComposition:b.understanding.bidComposition});if(!a?.plannedSectionFixApplied)break}let{tableFixApplied:e}=await ei({effectiveChapters:b.planning.effectiveChapters,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,progressStages:b.global.progressStages,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,bidComposition:b.understanding.bidComposition});return(e||!d)&&(c=await eg({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,globalConsistencyIssues:c,progressStages:b.global.progressStages,emitProgress:b.global.emitProgress})),!function(a){let{generationDiagnostics:b,progressStages:c,chapterDraftsFinal:d,emitProgress:e}=a,f=b.evidence,g=b.llm,h=(0,aX.Bd)();b.semantic=h;let i=h.embedCacheHits+h.embedCacheMisses,k=i>0?Math.round(1e4*h.embedCacheHits/i)/100:null,l=(g.promptCacheHitTokens||0)+(g.promptCacheMissTokens||0),m=l>0?Math.round(1e4*(g.promptCacheHitTokens||0)/l)/100:null,n=g.layerChars,o=n?n.l0+n.l1+n.l2+n.l3:0,p=a=>o>0?Math.round(1e4*a/o)/100:0,q=n&&o>0?`上下文分层:L0 system 恒定 ${n.l0} 字(${p(n.l0)}%)、L1 任务级 ${n.l1} 字(${p(n.l1)}%)、L2 章级 ${n.l2} 字(${p(n.l2)}%)、L3 小节级 ${n.l3} 字(${p(n.l3)}%)`:"上下文分层:本次生成未采集 L0-L3 分层统计";(0,j.fx)(c,(0,j.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${f.raw} 条 → 采用 ${f.used} 条(噪声过滤 ${f.filteredNoise} 条、预算兜底裁剪 ${f.budgetDropped} 条),证据上下文 ${f.contextChars} 字`,details:[`证据质量:平均噪声分 ${f.avgNoiseScore},平均事实密度 ${f.avgFactDensity}`,`证据分层(T0 关键事实/T1 高相关片段/T2 目录索引):T0 注入 ${f.t0Chars||0} 字、T1 注入 ${f.t1Chars||0} 字、T2 索引 ${f.t2Lines||0} 行、目录省略 ${f.omittedChars||0} 字——A2 块级增量压缩后 T1 应显著低于 T0+T2`,`检索:${f.searchQueries} 组查询,耗时 ${Math.round(f.searchMs/1e3)} 秒`,`证据双通道覆盖度(P2-B 观测采集):预分配注入 ${f.intentEvidenceInjected??0} 条(最终留存 ${f.intentEvidenceUsed??0} 条)/运行时召回注入 ${f.retrievedEvidenceInjected??0} 条(最终留存 ${f.retrievedEvidenceUsed??0} 条)`,`LLM:${g.calls} 次调用,失败 ${g.failures} 次,重试 ${g.retries} 次,schema 校验失败 ${g.schemaFailures} 次`,`LLM 上下文输入:${g.inputChars||0} 字符(system+user)${g.unlayeredChars?`(其中未分层调用 ${g.unlayeredChars} 字符,占比 ${Math.round(g.unlayeredChars/(g.inputChars||1)*1e4)/100}%)`:""},输入 ${g.inputTokens||0} token / 输出 ${g.outputTokens||0} token`,q,null===m?"上下文缓存:提供商未返回 prefix cache 指标(prompt_cache_hit/miss_tokens),无法观测命中率":`上下文缓存:命中 ${g.promptCacheHitTokens} token / 未命中 ${g.promptCacheMissTokens} token(命中率 ${m}%)——未命中占比高说明固定前缀未收敛,system/user 分离(A5)后应显著上升`,`推理 token:${g.reasoningTokens?`${g.reasoningTokens} token(思考未完全关闭,disableThinking 未生效风险)`:"0(思考已关闭)"}`,null===k?"bge 嵌入缓存:本次生成无嵌入调用":`bge 嵌入缓存:命中 ${h.embedCacheHits} 条 / 未命中 ${h.embedCacheMisses} 条(命中率 ${k}%,全局 LRU 容量 ${process.env.DOCUMENT_EMBED_CACHE_SIZE||2e3})`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"})),e(d)}({generationDiagnostics:b.planning.generationDiagnostics,progressStages:b.global.progressStages,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,emitProgress:b.global.emitProgress}),b.planning.generationDiagnostics.metrics.push({name:"phase:global-review",startedAt:b.chapterLoop.globalReviewPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-b.chapterLoop.globalReviewPhaseStartedAt}),(0,g.X6)(b.planning.generationDiagnostics,"phase:finalize",()=>fV({chapterDrafts:b.chapterLoop.chapterDraftsFinal,chapterDraftsByOrder:b.understanding.chapterDraftsByOrder,chapterGenerationStagesByOrder:b.understanding.chapterGenerationStagesByOrder,clarificationOverrides:b.planning.clarificationOverrides,clarificationAmendments:b.planning.clarificationAmendments,chapterGenerationStages:b.understanding.chapterGenerationStages,effectiveChapters:b.planning.effectiveChapters,template:b.prepare.template,allEvidence:b.understanding.allEvidence,progressStages:b.global.progressStages,documentSpec:b.prepare.documentSpec,projectMaterialProfile:b.prepare.projectMaterialProfile,projectMaterialSummary:b.prepare.projectMaterialSummary,domainProfile:b.prepare.domainProfile,documentBudget:b.planning.documentBudget,promptTexts:b.prepare.promptTexts,reviewPromptTexts:b.prepare.reviewPromptTexts,repairPromptTexts:b.prepare.repairPromptTexts,input:b.global.input,generationStrategy:b.planning.generationStrategy,generationDiagnostics:b.planning.generationDiagnostics,chapterScopedContext:b.planning.chapterScopedProjectContext,promptBindings:b.prepare.promptBindings,promptDocumentRules:b.prepare.promptDocumentRules,projectUnderstanding:b.prepare.projectUnderstanding,projectContext:b.planning.projectContext,projectRoot:b.prepare.projectRoot,projectId:b.prepare.projectId,readiness:b.prepare.readiness,documentId:a.diversitySeed,factExtractionPromptTexts:b.prepare.factExtractionPromptTexts,blueprintData:b.blueprint.integratedBlueprint?.validation.passed?b.blueprint.integratedBlueprint.data:void 0,bidComposition:b.understanding.bidComposition,billFactLock:b.blueprint.billFactLock,drawingFactLock:b.blueprint.drawingFactLock,requirementSemantics:b.prepare.requirementSemantics,hasExplicitOutline:b.prepare.hasExplicitOutline,missingItems:b.understanding.missingItems,retrievalCoverageReports:b.understanding.retrievalCoverageReports,failedChapterMessages:b.understanding.failedChapterMessages,webResearchReport:b.understanding.webResearchReport,indexHealth:b.understanding.indexHealth,globalConsistencyIssues:c,scopeConflicts:b.understanding.canonicalFacts.scopeConflicts,writingTaskBrief:b.planning.writingTaskBrief,evaluationCriteriaItems:b.understanding.evaluationItems.map(a=>a.title).filter(Boolean),tenderRequirements:b.planning.tenderRequirements,requirementAssignments:b.blueprint.requirementAssignments,requirementsSimilarity:b.planning.requirementsSimilarity,factTokenScopeClassifier:b.planning.factTokenScopeClassifier,professionalDepthClassifier:b.planning.professionalDepthClassifier,agentWorkflow:b.understanding.agentWorkflow,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat}))}c(64753),c(87635),c(39372)},62521:(a,b,c)=>{c.d(b,{Cv:()=>r,MH:()=>w,Oc:()=>j,QM:()=>y,SF:()=>p,SO:()=>z,XR:()=>t,Y5:()=>q,YD:()=>l,aB:()=>i,an:()=>n,gF:()=>m,iY:()=>o,j7:()=>x,pX:()=>u,wd:()=>h,z1:()=>s});var d=c(38115),e=c(22157),f=c(3063),g=c(21702);let h=6,i=1800,j=2800,k={core:1.5,general:1,brief:.6},l=350,m=2400,n=.75;function o(a,b){let c=a.replace(/工程$/u,""),f=[],g=new Map;for(let a of b){let b=(0,e.Ld)(a.title),c=g.get(b);void 0===c&&(c=f.length,g.set(b,c),f.push({label:b,points:[]})),f[c].points.push(a)}let i=[];for(let a of f)for(let b=0;b<a.points.length;b+=h){let e=a.points.slice(b,b+h),f=0===b?(0,d.UW)(c,a.label):(0,d.UW)(c,e[0].title);i.push({title:f,subPoints:e,facts:[],targetWords:0})}return i}function p(a,b){let c=a=>{let b=new Set;for(let c=0;c<a.length-1;c+=1)b.add(a.slice(c,c+2));return b},d=c(b),e=[...c(a)];return 0===e.length?0:e.filter(a=>d.has(a)).length/e.length}function q(a){return/工期|进度|节点|计划|纠偏|预警/u.test(a)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(a)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(a)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(a)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(a)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(a)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(a)?"施工组织":"综合管理"}function r(a){return/^(?:确保\s*)?[人材机](?:员|力|料|械|工)?\s*的保障体系与措施$/u.test(a)}function s(a,b){let c=a.replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return c===d||c.includes(d)||d.includes(c)}function t(a,b,c={}){let d=[];if(0===a.length)return;let e=Math.max(0,Math.round(b)),f=a.reduce((a,b)=>a+Math.max(1,b.subPoints.length),0),g=Math.max(1,Math.floor(e/i)),l=a;if(l.length>g){let a=[],b=Math.max(1,Math.ceil(f/g)),d=[],e=0;for(let f of l){if(u(f.title)||w(f.title)||(c.barrierTitles||[]).some(a=>s(f.title,a))){d.length>0&&(a.push(d),d=[],e=0),a.push([f]);continue}let i=Math.max(1,f.subPoints.length);d.length>0&&(e+i>h||a.length<g-1&&e+i>b)&&(a.push(d),d=[],e=0),d.push(f),e+=i}d.length>0&&a.push(d),l=a.map(a=>1===a.length?a[0]:{title:(a.find(a=>u(a.title))||a[0]).title,subPoints:a.flatMap(a=>a.subPoints),facts:[...new Set(a.flatMap(a=>a.facts))],targetWords:0})}for(let a=0;a<64&&l.length<g;a+=1){let a=l.map(a=>Math.max(.5,a.subPoints.reduce((a,b)=>a+k[b.tier||"general"],0))),b=a.reduce((a,b)=>a+b,0)||l.length,c=-1,d=j;if(l.forEach((f,g)=>{let h=Math.floor(e*a[g]/b);f.subPoints.length>=2&&h>d&&(c=g,d=h)}),c<0)break;let f=l[c],g=Math.ceil(f.subPoints.length/2);l.splice(c,1,{...f,subPoints:f.subPoints.slice(0,g),targetWords:0},{...f,subPoints:f.subPoints.slice(g),targetWords:0})}let m=l.map(a=>Math.max(.5,a.subPoints.reduce((a,b)=>a+k[b.tier||"general"],0))),n=m.reduce((a,b)=>a+b,0)||l.length,o=Math.min(i,Math.floor(e/Math.max(1,l.length))),p=l.map((a,b)=>Math.max(o,Math.floor(e*m[b]/n))),q=p.reduce((a,b)=>a+b,0)-e;if(q>0){let a=p.map(a=>a-o),b=a.reduce((a,b)=>a+b,0);if(b>0){let c=0;p.forEach((d,e)=>{let f=Math.min(a[e],Math.floor(q*a[e]/b));p[e]=d-f,c+=f});for(let a=q-c;a>0;a-=1){let a=-1;if(p.forEach((b,c)=>{!(b<=o)&&(a<0||b>p[a])&&(a=c)}),a<0)break;p[a]=p[a]-1}}}let r=p.reduce((a,b)=>a+b,0);if(r<e){let a=0;p.forEach((b,c)=>{b>p[a]&&(a=c)}),p[a]=p[a]+(e-r)}for(let a of(l.forEach((a,b)=>{a.targetWords=Math.max(1,Math.min(p[b],4500))}),l.forEach(a=>{let b=Math.max(1,Math.floor(a.targetWords/300));if(a.subPoints.length<=b)return;let c=a.subPoints.length,e=a.subPoints.slice(0,b-1),f=a.subPoints.slice(b-1);a.subPoints=[...e,{title:"其他分部分项工程施工要点",sources:[...new Set(f.flatMap(a=>a.sources))],tier:"brief"}];let g=`块「${a.title}」超密度守卫:要点数 ${c} → ${a.subPoints.length}(块预算 ${a.targetWords} 字,密度上限 ${b} 要点,${f.length} 个要点合并为概览要点,细节丢失)`;console.warn(`[blueprint] ${g}`),d.push(g)}),l)){if(0===a.subPoints.length)continue;let b=a.subPoints.map(a=>k[a.tier||"general"]),c=b.reduce((a,b)=>a+b,0)||a.subPoints.length,d=b.map(b=>Math.max(100,Math.floor(a.targetWords*b/c))),e=d.reduce((a,b)=>a+b,0);if(e>a.targetWords){let d=a.targetWords;a.subPoints.forEach((e,f)=>{let g=f===a.subPoints.length-1?Math.max(1,d):Math.max(1,Math.floor(a.targetWords*b[f]/c));e.quotaWords=g,d-=g});continue}let f=b.reduce((a,c,d)=>c>b[a]?d:a,0),g=a.targetWords-e;a.subPoints.forEach((a,b)=>{a.quotaWords=d[b]+(b===f?g:0)})}l!==a&&(a.length=0,a.push(...l)),a.densityMergeWarnings=d}function u(a){return f.Yp.test(a)||f.gG.test(a)}let v=/^(特殊时段|异常气候|恶劣气候|恶劣天气|极端气候|极端天气|雨季|雨期|冬期|冬季|汛期|台风|高温|寒潮|全天候|节假日施工|夜间施工)/u;function w(a){let b=a.replace(/^[一二三四五六七八九十百\d]+[、..\s::-]+/u,"").trim();return v.test(b)}function x(a,b){let c=[];for(let d of a){let a=d.trim(),e=a.replace(/\s+/gu,"");if(!(!e||/^其他$|^其它$|^其他工程$|^其余/u.test(e))&&!c.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(e)||e.includes(b)})&&(c.push(a),c.length>=b))break}return c}function y(a){let b=a=>a.trim().toLowerCase().replace(/\s+/gu,""),c=a=>{let c=new Set;for(let d of a??[]){let a=b(String(d??""));a&&c.add(a)}return c},d=c(a.blueprintParams),e=c(a.billSpecs),f=c(a.evidenceTokens),g=c(a.factValues),h=new Set([...d,...e,...f,...g]).size;return{blueprint:d.size,bill:e.size,evidence:f.size,factNeeds:g.size,total:h}}function z(a){var b;let c=Math.max(0,Math.round(a.targetWords)),d=Math.max(0,Math.round(a.availableParameters)),e=c>0?d/c*1e3:0,f=Math.ceil(c/1e3*g.J5),h=Math.max(0,f-d),i=0===c||0===h,j=(b=a.supplyChannels)?`可用参数来源:蓝图 must_cite ${b.blueprint} 个、本章责任清单行规格 ${b.bill} 个、本章证据精确 token ${b.evidence} 个、本章需求解析事实值 ${b.factNeeds} 个(按归一化 token 去重后共 ${b.total} 个)。`:"",k=i?[]:[`本章目标 ${c} 字,可用量化参数 ${d} 个(${e.toFixed(2)}/千字),低于本条要求线 ${g.J5}/千字(与块质检/构造审计同值),缺 ${h} 个。`,...j?[j]:[],`二选一(端点必须一起动,只动一端会重新制造「要不到料却照常扣分」):① 扩供给——把本章责任清单行/证据的取用优先级提前、放宽本章参数配额上限;② 同步下调——把本章目标字数降到 ${Math.floor(d/g.J5*1e3)} 字 附近,使供给与要求对齐(目标字数与密度要求必须一起改)。`];return{chapterTitle:a.chapterTitle,targetWords:c,availableParameters:d,densityPer1000:e,requiredDensityPer1000:g.J5,sufficient:i,requiredParameters:f,parameterShortfall:h,remediation:k,supplyChannels:a.supplyChannels}}},63516:(a,b,c)=>{c.d(b,{DO:()=>aI,E:()=>ap,E6:()=>ag,FR:()=>aj,HF:()=>ai,JX:()=>aq,Mf:()=>aJ,Mx:()=>q,NT:()=>u,NY:()=>aC,Sf:()=>_,T3:()=>ao,TX:()=>aH,U1:()=>aE,Uk:()=>af,VX:()=>an,Vf:()=>as,_D:()=>ar,e_:()=>ac,ey:()=>ah,jl:()=>ab,l:()=>ae,mg:()=>V,tH:()=>aG,zD:()=>ad});var d=c(73024),e=c(76760),f=c(31920),g=c(95734),h=c(48661),i=c(1218),j=c(37047),k=c(35547),l=c(22157),m=c(71678),n=c(30111),o=c(40299),p=c(95294);function q(a=!1){return{entries:[],excluded:[],structureRequirements:[],reconciliation:{clauseCount:0,entryCount:0,excludedCount:0,undecidedCount:0,mergedCount:0,batchCount:0,retriedBatches:0,structureCount:0},extracted:a}}let r=/^(?:☑?\s*无|无)\s*[。;;]?\s*$|:\s*(?:☑)?\s*无\s*[。;;]?\s*$|:\s*见\s*《?[^》]{2,40}》?\s*[。;;]?\s*$/u;function s(a){let b=a.trim();if(!b||/^#{0,6}\s*\d+(?:[.-]\d+)*\s*[^\s。;;::]{1,24}$/u.test(b)||/☑\s*无/u.test(b)||/□有[^。;;!?!?]{0,40}具体要求如下[::]\s*\/?\s*$/u.test(b))return!0;let c=b.split(":").pop()?.trim()||b;return!!r.test(c)}let t=/^(?:回复|答复|答疑|答|澄清|释义)[::]\s*[。;;、/]?\s*$/u;function u(a){return a.trim().replace(/^#{2,4}\s+/u,"").replace(/^\d+(?:\.\d+)*[\s、.]+/u,"").trim()}let v=[/^第[零一二三四五六七八九十百千\d]{1,6}[条章节款项]/u,/^[((][一二三四五六七八九十\d]{1,3}[))]/u,/^[一二三四五六七八九十]{1,3}[、..](?!\d)/u,/^\d{1,2}(?:[..]\d{1,2}){1,3}(?:[、..]|\s)/u,/^\d{1,2}[、..]\s*(?![\d%])/u];function w(a){return a.length<=300&&/[::]/u.test(a)&&!/[。;;]/u.test(a.slice(0,a.search(/[::]/u)))}let x=/^(?:问题|疑问|提问|咨询|质疑|问)[一二三四五六七八九十\d]{0,3}[::]|[??]\s*$/u,y=/^(?:回复|答复|答疑|答|澄清|释义)[::]/u;function z(a){return/[。!?!?;;))】」》”]$/u.test(a.trim())}let A=/[的其不或在和与及等被把将为以对从向就但而则即如若因所该本此录]$/u,B=/[\p{Script=Han}A-Za-z]{2,}/u,C={type:"object",required:["results"],properties:{results:{type:"array",required:!0,minItems:1,items:{type:"object",required:!0,properties:{index:{type:"number",required:!0},isRequirement:{type:"boolean",required:!0},inScope:{type:"boolean",required:!0},reason:{type:"string",maxLength:32},policy:{type:"string",maxLength:16},coreTerms:{type:"array",items:{type:"string",maxLength:24}},category:{type:"string",maxLength:16},structures:{type:"array",items:{type:"object",properties:{element:{type:"string",maxLength:24},form:{type:"string",maxLength:16}}}}}}}}},D=[(0,o.y4)("你是招标文件条款判定器。"),'输入是从招标资料(招标文件/补疑/答疑等)中按原文顺序切分的条款单元(含全局序号与来源)。\n对每一条独立完成判定,且必须为每一条给出结果(不得遗漏任何序号)。\n\n1. isRequirement:该条是否构成对投标人的实质要求(需写入正文响应或必须遵守)?\n - true:明确的目标/等级/标准/参数/义务/禁止性要求(确保、达到、不低于、不得、严禁、必须、应当等约束语义)\n - false:目录、章节导语、说明性/解释性文字、空白表头、格式模板、无约束力的描述\n - 边界判例(格式模板 vs 结构呈现要求):表格填写/签章格式/装订份数类模板说明 → false;\n 「组织机构以框图方式表示」「采用文字并结合图表形式编制」「附网络图、横道图」等呈现形态要求 → true(呈现信息同时进入 structures 通道)\n - 孤立碎片(无问题上下文的「回复:\xd7\xd7」「答:\xd7\xd7」、表格残片、无法独立理解的半截句)→ false(reason="non_requirement")\n - 问答对(「问题:\xd7\xd7 … 回复:\xd7\xd7」):答复含实质要求(指标/标准/义务/禁止性内容)→ true(按答复内容给出 policy/coreTerms);纯程序性答复(「按招标文件执行」「详见补遗」)→ false\n - 条款值被明确标注「无」「☑无」「不适用」「/」时 → isRequirement=false(reason="no_value")\n - 工程量清单条目、项目特征描述、工程量数据不是本通道要求(由清单蓝图通道处理)→ false\n2. inScope:该条是否属于施工组织设计正文的职责范围?\n - true:质量/工期/安全/环保目标、创优奖项、绿色建筑/智慧工地/装配式等级、体系基准(六个百分百/四节一环保等)、\n 工期与进度约束、人员配置与分包限制、材料工艺与验收标准、禁止性事项、必须遵守的技术约束\n - false:纯投标程序事务(开标时间地点/保证金账户信息/递交解密方式/评标委员会组成)、投标资格条件\n (营业执照/资质证书/业绩要求)、评标否决规则(否决其投标/废标情形)、商务纪律承诺(廉洁承诺)、格式签章要求、\n 商务与造价条款(付款/进度款/工程款/结算/保证金/违约金/保函/预付款/税金/税率/报价/综合单价/暂列金额/暂估价/限价/调差等,\n 属商务标响应内容,技术标正文不出现)、\n 合同履约管理程序条款(施工合同通用/专用条款及合同附件的程序性与责任性约定:资料报送/审批/备案期限、\n 违约责任与违约金罚款明细、人员请假/更换/离场批准程序、保险投保办理程序、工程质量保修书程序与保修期限明细、\n 试验条件自理、工程照管责任起止、治安保卫程序、分包审批程序、采购与评标程序——属合同管理范畴,技术标正文不逐条抄写;\n 但质量/安全/文明/工期目标、人员资格与配置、技术工艺与验收标准类实质要求仍按 true 判定)\n3. policy(isRequirement 且 inScope 时必填,其余省略):\n - "respond":必须在正文显性写出的要求(创优目标/奖项、质量目标、等级指标、体系基准、技术工艺条款、人员与分包约束、验收标准)\n - "comply":不逐条抄写但全文必须遵守的约束(以开工令为准的日期约束、工期总日历天数基准、全局禁止性事项)\n4. coreTerms:2-4 个用于正文核对的核心词(专有名词/等级名/体系名/关键数字参数,如「\xd7\xd7杯」「二星级」「六个百分百」「300万元」);\n 数字参数必须保留数字与单位;不要泛化词(「施工」「工程」类不能作为核心词);\n 必须是正文中可自然逐字出现的完整词/短语(括号/标点保持原文形态),不得使用去标点拼接的短语碎片或合同填空语言(如「承包人自理」)\n5. category:按招标语义命名类别(如「质量创优」「工期进度」「安全文明」「绿色施工」「人员管理」「商务支付」「禁止性要求」),\n 同类要求使用同一类别名\n6. structures:该条是否明文要求内容的呈现形态?命中时输出数组(element 呈现对象名 + form 形态),无呈现要求时省略该字段:\n - form 枚举:“org_chart”(框图/组织机构图/组织结构图)、“diagram”(网络图/横道图/平面布置图/进度计划图)、“table”(表格/组成表)、“chart_text”(文字结合图表/图表形式编制)\n - element:呈现对象的名词短语(如「项目管理机构」「施工总平面布置」「施工进度计划」),不得与原文无关\n - 边界判例:「组织机构以框图方式表示」→ [{element:"项目管理机构",form:"org_chart"}];「采用文字并结合图表形式编制」→ [{element:"施工组织设计",form:"chart_text"}];\n 纯格式填写说明/签章装订要求(按给定格式填写并盖章/正副本份数)→ 不输出 structures\n - 呈现要求与 isRequirement/inScope 判定相互独立:即使本条因程序/格式原因被判排除,structures 仍须输出\n\nisRequirement=false 或 inScope=false 时须给出 reason(枚举):\n- "non_requirement":非约束性内容(目录/导语/说明/描述)\n- "out_of_scope":超出施组职责(投标程序/资格/评标规则/纪律/格式/商务与造价/合同履约管理程序)\n- "no_value":条款值为「无」或不适用\n\n输出 JSON 结构(覆盖全部序号,每序号必出结果):\n{ "results": [\n { "index": 0, "isRequirement": true, "inScope": true, "policy": "respond", "coreTerms": ["\xd7\xd7杯", "300万元"], "category": "质量创优" },\n { "index": 1, "isRequirement": false, "inScope": false, "reason": "out_of_scope" },\n { "index": 2, "isRequirement": false, "inScope": false, "reason": "out_of_scope", "structures": [{ "element": "项目管理机构", "form": "org_chart" }] }\n] }\n只返回 JSON。'].join("\n");function E(a){return"no_value"===a.reason||"out_of_scope"===a.reason||"non_requirement"===a.reason?a.reason:!0===a.isRequirement&&!1===a.inScope?"out_of_scope":"non_requirement"}let F=[{form:"org_chart",formRe:/框图|组织机构图|组织结构图|组织架构图/u,elementRules:[{re:/项目管理机构|项目经理部|项目班子|管理机构|组织机构|管理部门/u,element:"项目管理机构"}],fallbackElement:"组织机构"},{form:"diagram",formRe:/网络图/u,elementRules:[{re:/进度|工期|计划/u,element:"施工进度计划网络图"}],fallbackElement:"网络图"},{form:"diagram",formRe:/横道图|甘特图/u,elementRules:[{re:/进度|工期|计划/u,element:"施工进度计划横道图"}],fallbackElement:"横道图"},{form:"diagram",formRe:/总平面布置图|施工总平面图|总平面图|平面布置图|临时设施图|施工总平面布置/u,elementRules:[],fallbackElement:"施工总平面布置图"},{form:"table",formRe:/组成表|机构设置表|人员配备表|一览表/u,elementRules:[{re:/机械设备|施工机械|设备/u,element:"施工机械设备表"},{re:/劳动力|用工/u,element:"劳动力安排计划表"},{re:/项目管理机构|机构|人员/u,element:"项目管理机构人员组成表"}],fallbackElement:"要求表格"},{form:"chart_text",formRe:/结合图表|图表形式|图文并茂/u,elementRules:[{re:/施工组织设计/u,element:"施工组织设计"}],fallbackElement:"图表呈现"}];function G(a,b){let c=function(a){let b=[],c=a.trim();if(!c)return b;for(let a of F){if(!a.formRe.test(c))continue;let d=a.fallbackElement;for(let b of a.elementRules)if(b.re.test(c)){d=b.element;break}b.push({element:d,form:a.form,sourceText:c})}return b}(a.text);for(let d of b?.structures||[]){let b=function(a){let b=(a||"").trim().toLowerCase();return"org_chart"===b||"orgchart"===b||"框图"===b||"组织机构图"===b?"org_chart":"diagram"===b||"图"===b||"网络图"===b||"横道图"===b?"diagram":"table"===b||"表格"===b?"table":"chart_text"===b||"charttext"===b||"图表"===b||"文字结合图表"===b?"chart_text":void 0}(d?.form),e=(d?.element||"").trim().slice(0,24);b&&!(e.length<2)&&(c.some(a=>a.form===b&&a.element===e)||c.push({element:e,form:b,sourceText:a.text.trim()}))}return c}let H=/(?:我(?:公司|方|单位|们)[^。;;]{0,24}(?:对|就)(?:该|本|上述|所填)?(?:表|清单|资料)[^。;;]{0,32}(?:均属|均为|真实|属实|可靠|有效|无误))|(?:(?:以上|上述|该表|所填报?)[^。;;]{0,20}(?:内容|资料)[^。;;]{0,20}(?:均属|均为|真实|属实|可靠|有效|无误))/u;function I(a){return H.test(a)}let J=/开工令|开工日期|竣工日期|不得.{0,12}(?:自定|自行确定|编造|设定)/u;function K(a){let b=[a.section,a.clauseNo?`条款${a.clauseNo}`:""].filter(Boolean).join("\xb7");return[a.file,b].filter(Boolean).join("|")||void 0}async function L(a,b,c){let d=Array(a.length),e=0;return await Promise.all(Array.from({length:Math.min(b,a.length)},async()=>{for(;;){let b=e;if(e+=1,b>=a.length)return;d[b]=await c(a[b],b)}})),d}async function M(a,b,c={}){let d=a.map((a,c)=>{let d=K(a);return`【条款 ${b+c}】${d?`来源:${d}`:""}
|
|
226
|
-
${a.text}`}).join("\n\n"),e=new Set(a.map((a,c)=>b+c)),f=new Map;for(let a=0;a<2;a+=1){let b=await (0,g.bb)(D,d,{maxTokens:8e3,temperature:0,signal:c.signal,diagnostics:c.diagnostics,schema:C,taskKind:"structuredGeneration"});for(let a of(f=new Map,b?.results||[]))"number"==typeof a.index&&e.has(a.index)&&f.set(a.index,a);if(f.size===e.size)return{judgments:f,retried:a>0}}return{judgments:f,retried:!0}}let N=p.uW;function O(a){let b=a.replace(/\s+/gu,"");return b.length<=10&&!/\d/u.test(b)&&!N.test(b)}function P(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&!!(/(?:回复|答复)[::]/u.test(b)||/(?:^|[。;;\n])\s*(?:答|答复|回复|答疑|提问|问)\s*[::]/u.test(b)||/扣\d+(?:\.\d+)?分|总分\d+分|百分制|考核(?:办法|评分|结果|得分|扣分|奖惩)/u.test(b)||/质量保修|保修范围|派人保修|保修通知|保修期如下/u.test(b)||/本表(?:应|须|不|需|作)/u.test(b)||/投标文件(?:应|须|应当)[^。;]{0,40}(?:响应|作出响应|包含|包括)/u.test(b)||/我方拟派|无在岗项目|拟分包项目情况表/u.test(b)||/^[((、..\d]{0,8}☑/u.test(b)||(0,p.MO)(b))}let Q=/(保修|安全生产合同|承包人职责|承包人的一般义务|承包人人员|监理人的一般规定|不合格工程的处理|样品的报送|开工准备|承包人文件|人员及职责|终身责任制承诺|投标文件格式|考核表|督查|管养|养护管理|景观设施维护|地被养护)/u;function R(a){let b=(a||"").replace(/\s+/gu,"");return b.length>0&&Q.test(b)}function S(a){let b=a.replace(/\s+/gu,"");return!(b.length<4)&&(/〔\d{4}〕/u.test(b)||/(?:办法|通知|规定|条例|细则)$/u.test(b))}function T(a){let b=(a||[]).map(a=>(a||"").trim()).filter(a=>a.length>=2);return b.length>0&&b.every(S)}async function
|
|
227
|
-
${c}`,h.fragment=null),(b=c).length<=8&&!/[。;;!?!?]/u.test(b)&&!/\d/u.test(b)){h.fragment={text:c,clauseNo:e};return}j(c,e)};for(let b of d.split(/\r?\n/u)){let c=b.trim();if(/^#{1,6}\s/u.test(c)){let a=(0,i.wj)(c).trim();if(!a)continue;if(!(!a||/(?:\.{3,}|…)/u.test(a)||/^(?:PDF 第 \d+ 页|PDF 表格区域)/u.test(a))&&(!(!/[☑□■☐☒√×]/u.test(a)&&(!(a.length<=3)||/^\d/u.test(a)))||!(/^第[一二三四五六七八九十\d]+[章节部分条编]/u.test(a)&&a.length<=40&&!/[::,,]/u.test(a)||/^(?:目录|附录|附件)/u.test(a)&&a.length<=30&&!/[::,,]/u.test(a)||/^\d+(?:[..]\d+)*[..、]?\s*\S/u.test(a)&&a.length<=24&&!/[::,,。;;()]/u.test(a)&&!A.test(a)&&B.test(a.replace(/^\d+(?:[..]\d+)*[..、]?\s*\d*\s*/u,""))||/^[一二三四五六七八九十]{1,3}[、..](?!\d)/u.test(a)&&a.length<=24&&!/[::,,。;;()]/u.test(a)&&B.test(a.replace(/^[一二三四五六七八九十]{1,3}[、..\s]*/u,""))||/^[((][一二三四五六七八九十\d]{1,3}[))]/u.test(a)&&a.length<=24&&!/[::,,。;;()]/u.test(a.replace(/^[((][一二三四五六七八九十\d]{1,3}[))]/u,""))&&B.test(a.replace(/^[((][一二三四五六七八九十\d]{1,3}[))]\s*\d*\s*/u,"")))&&1)){if(/^\d{1,3}$/u.test(a))continue;if(w(a)){if(g.length>0&&!z(g[g.length-1])){g.push(a);continue}g.length>0&&k(),g.push(a),!x.test(a)&&z(a)&&k();continue}g.push(a);continue}g.length>0&&k(),f=a;continue}let d=(0,i.wj)(c).trim();if(!d){g.length>0&&z(g[g.length-1])&&k();continue}if(/^\d{1,3}$/u.test(d))continue;if(y.test(d)){g.push(d),1===g.length&&k();continue}let e=function(a){for(let b of v){let c=b.exec(a);if(c)return c[0].trim().replace(/[、..\s]$/u,"")}}(d);if(e){g.length>0&&k(),a=e,g.push(d);continue}if(w(d)){if(g.length>0&&!z(g[g.length-1])){g.push(d);continue}g.length>0&&k(),g.push(d),!x.test(d)&&z(d)&&k();continue}g.push(d)}g.length>0&&k(),h.fragment&&(j(h.fragment.text,h.fragment.clauseNo),h.fragment=null)}return b}(a);if(0===d.length)return c;b.onPhase?.(`条款化完成:${d.length} 条单元(全文穷举切分,不预筛不剔除)`,[`来源文件:${[...new Set(d.map(a=>a.file).filter(Boolean))].join("、")||"—"}`,"逐条判定进行中(每批 40 条,序号严格对齐)"]);let e=await
|
|
226
|
+
${(0,ad.CK)(a.prepare.template)}`,l||m].filter(Boolean).join("\n\n"),a.prepare.promptDocumentRules=a.prepare.runtimePromptRules,a.prepare.factExtractionPromptTexts=[a.prepare.diagnosticControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)([...a.prepare.promptPlan.extractionPrompts,...a.prepare.promptPlan.referencePrompts])].filter(Boolean).join("\n\n"),a.prepare.reviewPromptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts,...a.prepare.promptPlan.formattingPrompts])].filter(Boolean).join("\n\n"),a.prepare.repairPromptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)(a.prepare.promptPlan.formattingPrompts)].filter(Boolean).join("\n\n"),(0,j.fx)(a.global.progressStages,(0,j.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`模板规范与项目资料理解完成,识别 ${a.prepare.materialFilePaths.length} 份项目资料`,details:[`提示词绑定:${a.prepare.promptBindings.length} 个`,`项目资料包:${a.prepare.projectMaterialProfile.materialRoots.join("、")||"当前知识库"}`,a.prepare.hasExplicitOutline?`识别 OUTLINE 章节:${a.prepare.explicitPromptChapters.length} 个`:"未识别显式 OUTLINE,使用模板章节"],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备",order:a.global.progressStages.length})),a.global.emitProgress()}async function gW(a){(0,f.Te)(a.signal);let b={global:{input:a},prepare:{},understanding:{},planning:{},blueprint:{chapterConcurrency:0,reviewConcurrency:0,reviewSemaphore:new f.jf(1),reviewTaskPool:[],basicFactSearchResults:[],integratedBlueprint:void 0,blueprintActive:!1,requirementAssignments:[],structureAssignments:[],structureUnattached:[],billFactLock:void 0,drawingFactLock:void 0},chapterLoop:{draftPhaseStartedAt:0,chapterDraftsFinal:[],globalReviewPhaseStartedAt:0}};await gV(b),await gI(b),await gF(b),await ga(b),await f8(b);let c=[],d=!1;if(b.planning.generationStrategy.enableGlobalReview){let a=await eq({globalReviewSamplingRate:b.planning.generationStrategy.globalReviewSamplingRate,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,reviewPromptTexts:b.prepare.reviewPromptTexts,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,projectContext:b.planning.projectContext,generationDiagnostics:b.planning.generationDiagnostics,preliminaryFactsModel:b.understanding.preliminaryFactsModel,scopeConflicts:b.understanding.canonicalFacts.scopeConflicts,progressStages:b.global.progressStages,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,blueprintData:b.blueprint.integratedBlueprint?.validation.passed?b.blueprint.integratedBlueprint.data:void 0,billFactLock:b.blueprint.billFactLock,bidComposition:b.understanding.bidComposition});c=a.issues,d=a.dedupRan}else await el({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,projectContext:b.planning.projectContext,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,progressStages:b.global.progressStages,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,bidComposition:b.understanding.bidComposition});for(let a=0;a<3;a+=1){let a=await ep({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,progressStages:b.global.progressStages,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,bidComposition:b.understanding.bidComposition});if(!a?.plannedSectionFixApplied)break}let{tableFixApplied:e}=await ei({effectiveChapters:b.planning.effectiveChapters,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,progressStages:b.global.progressStages,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,bidComposition:b.understanding.bidComposition});return(e||!d)&&(c=await eg({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,globalConsistencyIssues:c,progressStages:b.global.progressStages,emitProgress:b.global.emitProgress})),!function(a){let{generationDiagnostics:b,progressStages:c,chapterDraftsFinal:d,emitProgress:e}=a,f=b.evidence,g=b.llm,h=(0,aX.Bd)();b.semantic=h;let i=h.embedCacheHits+h.embedCacheMisses,k=i>0?Math.round(1e4*h.embedCacheHits/i)/100:null,l=(g.promptCacheHitTokens||0)+(g.promptCacheMissTokens||0),m=l>0?Math.round(1e4*(g.promptCacheHitTokens||0)/l)/100:null,n=g.layerChars,o=n?n.l0+n.l1+n.l2+n.l3:0,p=a=>o>0?Math.round(1e4*a/o)/100:0,q=n&&o>0?`上下文分层:L0 system 恒定 ${n.l0} 字(${p(n.l0)}%)、L1 任务级 ${n.l1} 字(${p(n.l1)}%)、L2 章级 ${n.l2} 字(${p(n.l2)}%)、L3 小节级 ${n.l3} 字(${p(n.l3)}%)`:"上下文分层:本次生成未采集 L0-L3 分层统计";(0,j.fx)(c,(0,j.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${f.raw} 条 → 采用 ${f.used} 条(噪声过滤 ${f.filteredNoise} 条、预算兜底裁剪 ${f.budgetDropped} 条),证据上下文 ${f.contextChars} 字`,details:[`证据质量:平均噪声分 ${f.avgNoiseScore},平均事实密度 ${f.avgFactDensity}`,`证据分层(T0 关键事实/T1 高相关片段/T2 目录索引):T0 注入 ${f.t0Chars||0} 字、T1 注入 ${f.t1Chars||0} 字、T2 索引 ${f.t2Lines||0} 行、目录省略 ${f.omittedChars||0} 字——A2 块级增量压缩后 T1 应显著低于 T0+T2`,`检索:${f.searchQueries} 组查询,耗时 ${Math.round(f.searchMs/1e3)} 秒`,`证据双通道覆盖度(P2-B 观测采集):预分配注入 ${f.intentEvidenceInjected??0} 条(最终留存 ${f.intentEvidenceUsed??0} 条)/运行时召回注入 ${f.retrievedEvidenceInjected??0} 条(最终留存 ${f.retrievedEvidenceUsed??0} 条)`,`LLM:${g.calls} 次调用,失败 ${g.failures} 次,重试 ${g.retries} 次,schema 校验失败 ${g.schemaFailures} 次`,`LLM 上下文输入:${g.inputChars||0} 字符(system+user)${g.unlayeredChars?`(其中未分层调用 ${g.unlayeredChars} 字符,占比 ${Math.round(g.unlayeredChars/(g.inputChars||1)*1e4)/100}%)`:""},输入 ${g.inputTokens||0} token / 输出 ${g.outputTokens||0} token`,q,null===m?"上下文缓存:提供商未返回 prefix cache 指标(prompt_cache_hit/miss_tokens),无法观测命中率":`上下文缓存:命中 ${g.promptCacheHitTokens} token / 未命中 ${g.promptCacheMissTokens} token(命中率 ${m}%)——未命中占比高说明固定前缀未收敛,system/user 分离(A5)后应显著上升`,`推理 token:${g.reasoningTokens?`${g.reasoningTokens} token(思考未完全关闭,disableThinking 未生效风险)`:"0(思考已关闭)"}`,null===k?"bge 嵌入缓存:本次生成无嵌入调用":`bge 嵌入缓存:命中 ${h.embedCacheHits} 条 / 未命中 ${h.embedCacheMisses} 条(命中率 ${k}%,全局 LRU 容量 ${process.env.DOCUMENT_EMBED_CACHE_SIZE||2e3})`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"})),e(d)}({generationDiagnostics:b.planning.generationDiagnostics,progressStages:b.global.progressStages,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,emitProgress:b.global.emitProgress}),b.planning.generationDiagnostics.metrics.push({name:"phase:global-review",startedAt:b.chapterLoop.globalReviewPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-b.chapterLoop.globalReviewPhaseStartedAt}),(0,g.X6)(b.planning.generationDiagnostics,"phase:finalize",()=>fV({chapterDrafts:b.chapterLoop.chapterDraftsFinal,chapterDraftsByOrder:b.understanding.chapterDraftsByOrder,chapterGenerationStagesByOrder:b.understanding.chapterGenerationStagesByOrder,clarificationOverrides:b.planning.clarificationOverrides,clarificationAmendments:b.planning.clarificationAmendments,chapterGenerationStages:b.understanding.chapterGenerationStages,effectiveChapters:b.planning.effectiveChapters,template:b.prepare.template,allEvidence:b.understanding.allEvidence,progressStages:b.global.progressStages,documentSpec:b.prepare.documentSpec,projectMaterialProfile:b.prepare.projectMaterialProfile,projectMaterialSummary:b.prepare.projectMaterialSummary,domainProfile:b.prepare.domainProfile,documentBudget:b.planning.documentBudget,promptTexts:b.prepare.promptTexts,reviewPromptTexts:b.prepare.reviewPromptTexts,repairPromptTexts:b.prepare.repairPromptTexts,input:b.global.input,generationStrategy:b.planning.generationStrategy,generationDiagnostics:b.planning.generationDiagnostics,chapterScopedContext:b.planning.chapterScopedProjectContext,promptBindings:b.prepare.promptBindings,promptDocumentRules:b.prepare.promptDocumentRules,projectUnderstanding:b.prepare.projectUnderstanding,projectContext:b.planning.projectContext,projectRoot:b.prepare.projectRoot,projectId:b.prepare.projectId,readiness:b.prepare.readiness,documentId:a.diversitySeed,factExtractionPromptTexts:b.prepare.factExtractionPromptTexts,blueprintData:b.blueprint.integratedBlueprint?.validation.passed?b.blueprint.integratedBlueprint.data:void 0,bidComposition:b.understanding.bidComposition,billFactLock:b.blueprint.billFactLock,drawingFactLock:b.blueprint.drawingFactLock,requirementSemantics:b.prepare.requirementSemantics,hasExplicitOutline:b.prepare.hasExplicitOutline,missingItems:b.understanding.missingItems,retrievalCoverageReports:b.understanding.retrievalCoverageReports,failedChapterMessages:b.understanding.failedChapterMessages,webResearchReport:b.understanding.webResearchReport,indexHealth:b.understanding.indexHealth,globalConsistencyIssues:c,scopeConflicts:b.understanding.canonicalFacts.scopeConflicts,writingTaskBrief:b.planning.writingTaskBrief,evaluationCriteriaItems:b.understanding.evaluationItems.map(a=>a.title).filter(Boolean),tenderRequirements:b.planning.tenderRequirements,requirementAssignments:b.blueprint.requirementAssignments,requirementsSimilarity:b.planning.requirementsSimilarity,factTokenScopeClassifier:b.planning.factTokenScopeClassifier,professionalDepthClassifier:b.planning.professionalDepthClassifier,agentWorkflow:b.understanding.agentWorkflow,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat}))}c(64753),c(87635),c(39372)},62521:(a,b,c)=>{c.d(b,{Cv:()=>r,MH:()=>w,Oc:()=>j,QM:()=>y,SF:()=>p,SO:()=>z,XR:()=>t,Y5:()=>q,YD:()=>l,aB:()=>i,an:()=>n,gF:()=>m,iY:()=>o,j7:()=>x,pX:()=>u,wd:()=>h,z1:()=>s});var d=c(38115),e=c(22157),f=c(3063),g=c(21702);let h=6,i=1800,j=2800,k={core:1.5,general:1,brief:.6},l=350,m=2400,n=.75;function o(a,b){let c=a.replace(/工程$/u,""),f=[],g=new Map;for(let a of b){let b=(0,e.Ld)(a.title),c=g.get(b);void 0===c&&(c=f.length,g.set(b,c),f.push({label:b,points:[]})),f[c].points.push(a)}let i=[];for(let a of f)for(let b=0;b<a.points.length;b+=h){let e=a.points.slice(b,b+h),f=0===b?(0,d.UW)(c,a.label):(0,d.UW)(c,e[0].title);i.push({title:f,subPoints:e,facts:[],targetWords:0})}return i}function p(a,b){let c=a=>{let b=new Set;for(let c=0;c<a.length-1;c+=1)b.add(a.slice(c,c+2));return b},d=c(b),e=[...c(a)];return 0===e.length?0:e.filter(a=>d.has(a)).length/e.length}function q(a){return/工期|进度|节点|计划|纠偏|预警/u.test(a)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(a)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(a)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(a)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(a)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(a)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(a)?"施工组织":"综合管理"}function r(a){return/^(?:确保\s*)?[人材机](?:员|力|料|械|工)?\s*的保障体系与措施$/u.test(a)}function s(a,b){let c=a.replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return c===d||c.includes(d)||d.includes(c)}function t(a,b,c={}){let d=[];if(0===a.length)return;let e=Math.max(0,Math.round(b)),f=a.reduce((a,b)=>a+Math.max(1,b.subPoints.length),0),g=Math.max(1,Math.floor(e/i)),l=a;if(l.length>g){let a=[],b=Math.max(1,Math.ceil(f/g)),d=[],e=0;for(let f of l){if(u(f.title)||w(f.title)||(c.barrierTitles||[]).some(a=>s(f.title,a))){d.length>0&&(a.push(d),d=[],e=0),a.push([f]);continue}let i=Math.max(1,f.subPoints.length);d.length>0&&(e+i>h||a.length<g-1&&e+i>b)&&(a.push(d),d=[],e=0),d.push(f),e+=i}d.length>0&&a.push(d),l=a.map(a=>1===a.length?a[0]:{title:(a.find(a=>u(a.title))||a[0]).title,subPoints:a.flatMap(a=>a.subPoints),facts:[...new Set(a.flatMap(a=>a.facts))],targetWords:0})}for(let a=0;a<64&&l.length<g;a+=1){let a=l.map(a=>Math.max(.5,a.subPoints.reduce((a,b)=>a+k[b.tier||"general"],0))),b=a.reduce((a,b)=>a+b,0)||l.length,c=-1,d=j;if(l.forEach((f,g)=>{let h=Math.floor(e*a[g]/b);f.subPoints.length>=2&&h>d&&(c=g,d=h)}),c<0)break;let f=l[c],g=Math.ceil(f.subPoints.length/2);l.splice(c,1,{...f,subPoints:f.subPoints.slice(0,g),targetWords:0},{...f,subPoints:f.subPoints.slice(g),targetWords:0})}let m=l.map(a=>Math.max(.5,a.subPoints.reduce((a,b)=>a+k[b.tier||"general"],0))),n=m.reduce((a,b)=>a+b,0)||l.length,o=Math.min(i,Math.floor(e/Math.max(1,l.length))),p=l.map((a,b)=>Math.max(o,Math.floor(e*m[b]/n))),q=p.reduce((a,b)=>a+b,0)-e;if(q>0){let a=p.map(a=>a-o),b=a.reduce((a,b)=>a+b,0);if(b>0){let c=0;p.forEach((d,e)=>{let f=Math.min(a[e],Math.floor(q*a[e]/b));p[e]=d-f,c+=f});for(let a=q-c;a>0;a-=1){let a=-1;if(p.forEach((b,c)=>{!(b<=o)&&(a<0||b>p[a])&&(a=c)}),a<0)break;p[a]=p[a]-1}}}let r=p.reduce((a,b)=>a+b,0);if(r<e){let a=0;p.forEach((b,c)=>{b>p[a]&&(a=c)}),p[a]=p[a]+(e-r)}for(let a of(l.forEach((a,b)=>{a.targetWords=Math.max(1,Math.min(p[b],4500))}),l.forEach(a=>{let b=Math.max(1,Math.floor(a.targetWords/300));if(a.subPoints.length<=b)return;let c=a.subPoints.length,e=a.subPoints.slice(0,b-1),f=a.subPoints.slice(b-1);a.subPoints=[...e,{title:"其他分部分项工程施工要点",sources:[...new Set(f.flatMap(a=>a.sources))],tier:"brief"}];let g=`块「${a.title}」超密度守卫:要点数 ${c} → ${a.subPoints.length}(块预算 ${a.targetWords} 字,密度上限 ${b} 要点,${f.length} 个要点合并为概览要点,细节丢失)`;console.warn(`[blueprint] ${g}`),d.push(g)}),l)){if(0===a.subPoints.length)continue;let b=a.subPoints.map(a=>k[a.tier||"general"]),c=b.reduce((a,b)=>a+b,0)||a.subPoints.length,d=b.map(b=>Math.max(100,Math.floor(a.targetWords*b/c))),e=d.reduce((a,b)=>a+b,0);if(e>a.targetWords){let d=a.targetWords;a.subPoints.forEach((e,f)=>{let g=f===a.subPoints.length-1?Math.max(1,d):Math.max(1,Math.floor(a.targetWords*b[f]/c));e.quotaWords=g,d-=g});continue}let f=b.reduce((a,c,d)=>c>b[a]?d:a,0),g=a.targetWords-e;a.subPoints.forEach((a,b)=>{a.quotaWords=d[b]+(b===f?g:0)})}l!==a&&(a.length=0,a.push(...l)),a.densityMergeWarnings=d}function u(a){return f.Yp.test(a)||f.gG.test(a)}let v=/^(特殊时段|异常气候|恶劣气候|恶劣天气|极端气候|极端天气|雨季|雨期|冬期|冬季|汛期|台风|高温|寒潮|全天候|节假日施工|夜间施工)/u;function w(a){let b=a.replace(/^[一二三四五六七八九十百\d]+[、..\s::-]+/u,"").trim();return v.test(b)}function x(a,b){let c=[];for(let d of a){let a=d.trim(),e=a.replace(/\s+/gu,"");if(!(!e||/^其他$|^其它$|^其他工程$|^其余/u.test(e))&&!c.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(e)||e.includes(b)})&&(c.push(a),c.length>=b))break}return c}function y(a){let b=a=>a.trim().toLowerCase().replace(/\s+/gu,""),c=a=>{let c=new Set;for(let d of a??[]){let a=b(String(d??""));a&&c.add(a)}return c},d=c(a.blueprintParams),e=c(a.billSpecs),f=c(a.evidenceTokens),g=c(a.factValues),h=new Set([...d,...e,...f,...g]).size;return{blueprint:d.size,bill:e.size,evidence:f.size,factNeeds:g.size,total:h}}function z(a){var b;let c=Math.max(0,Math.round(a.targetWords)),d=Math.max(0,Math.round(a.availableParameters)),e=c>0?d/c*1e3:0,f=Math.ceil(c/1e3*g.J5),h=Math.max(0,f-d),i=0===c||0===h,j=(b=a.supplyChannels)?`可用参数来源:蓝图 must_cite ${b.blueprint} 个、本章责任清单行规格 ${b.bill} 个、本章证据精确 token ${b.evidence} 个、本章需求解析事实值 ${b.factNeeds} 个(按归一化 token 去重后共 ${b.total} 个)。`:"",k=i?[]:[`本章目标 ${c} 字,可用量化参数 ${d} 个(${e.toFixed(2)}/千字),低于本条要求线 ${g.J5}/千字(与块质检/构造审计同值),缺 ${h} 个。`,...j?[j]:[],`二选一(端点必须一起动,只动一端会重新制造「要不到料却照常扣分」):① 扩供给——把本章责任清单行/证据的取用优先级提前、放宽本章参数配额上限;② 同步下调——把本章目标字数降到 ${Math.floor(d/g.J5*1e3)} 字 附近,使供给与要求对齐(目标字数与密度要求必须一起改)。`];return{chapterTitle:a.chapterTitle,targetWords:c,availableParameters:d,densityPer1000:e,requiredDensityPer1000:g.J5,sufficient:i,requiredParameters:f,parameterShortfall:h,remediation:k,supplyChannels:a.supplyChannels}}},63516:(a,b,c)=>{c.d(b,{DO:()=>aN,E:()=>au,E6:()=>al,FR:()=>ao,HF:()=>an,JX:()=>av,Mf:()=>aO,Mx:()=>q,NT:()=>u,NY:()=>aH,Sf:()=>ae,T3:()=>at,TX:()=>aM,U1:()=>aJ,Uk:()=>ak,VX:()=>as,Vf:()=>ax,_D:()=>aw,e_:()=>ah,ey:()=>am,jl:()=>ag,l:()=>aj,mg:()=>$,tH:()=>aL,zD:()=>ai});var d=c(73024),e=c(76760),f=c(31920),g=c(95734),h=c(48661),i=c(1218),j=c(37047),k=c(35547),l=c(22157),m=c(71678),n=c(30111),o=c(40299),p=c(95294);function q(a=!1){return{entries:[],excluded:[],structureRequirements:[],reconciliation:{clauseCount:0,entryCount:0,excludedCount:0,undecidedCount:0,mergedCount:0,batchCount:0,retriedBatches:0,structureCount:0},extracted:a}}let r=/^(?:☑?\s*无|无)\s*[。;;]?\s*$|:\s*(?:☑)?\s*无\s*[。;;]?\s*$|:\s*见\s*《?[^》]{2,40}》?\s*[。;;]?\s*$/u;function s(a){let b=a.trim();if(!b||/^#{0,6}\s*\d+(?:[.-]\d+)*\s*[^\s。;;::]{1,24}$/u.test(b)||/☑\s*无/u.test(b)||/□有[^。;;!?!?]{0,40}具体要求如下[::]\s*\/?\s*$/u.test(b))return!0;let c=b.split(":").pop()?.trim()||b;return!!r.test(c)}let t=/^(?:回复|答复|答疑|答|澄清|释义)[::]\s*[。;;、/]?\s*$/u;function u(a){return a.trim().replace(/^#{2,4}\s+/u,"").replace(/^\d+(?:\.\d+)*[\s、.]+/u,"").trim()}let v=[/^第[零一二三四五六七八九十百千\d]{1,6}[条章节款项]/u,/^[((][一二三四五六七八九十\d]{1,3}[))]/u,/^[一二三四五六七八九十]{1,3}[、..](?!\d)/u,/^\d{1,2}(?:[..]\d{1,2}){1,3}(?:[、..]|\s)/u,/^\d{1,2}[、..]\s*(?![\d%])/u];function w(a){return a.length<=300&&/[::]/u.test(a)&&!/[。;;]/u.test(a.slice(0,a.search(/[::]/u)))}let x=/^(?:问题|疑问|提问|咨询|质疑|问)[一二三四五六七八九十\d]{0,3}[::]|[??]\s*$/u,y=/^(?:回复|答复|答疑|答|澄清|释义)[::]/u;function z(a){return/[。!?!?;;))】」》”]$/u.test(a.trim())}let A=/[的其不或在和与及等被把将为以对从向就但而则即如若因所该本此录]$/u,B=/[\p{Script=Han}A-Za-z]{2,}/u,C={type:"object",required:["results"],properties:{results:{type:"array",required:!0,minItems:1,items:{type:"object",required:!0,properties:{index:{type:"number",required:!0},isRequirement:{type:"boolean",required:!0},inScope:{type:"boolean",required:!0},reason:{type:"string",maxLength:32},policy:{type:"string",maxLength:16},coreTerms:{type:"array",items:{type:"string",maxLength:24}},category:{type:"string",maxLength:16},structures:{type:"array",items:{type:"object",properties:{element:{type:"string",maxLength:24},form:{type:"string",maxLength:16}}}}}}}}},D=[(0,o.y4)("你是招标文件条款判定器。"),'输入是从招标资料(招标文件/补疑/答疑等)中按原文顺序切分的条款单元(含全局序号与来源)。\n对每一条独立完成判定,且必须为每一条给出结果(不得遗漏任何序号)。\n\n1. isRequirement:该条是否构成对投标人的实质要求(需写入正文响应或必须遵守)?\n - true:明确的目标/等级/标准/参数/义务/禁止性要求(确保、达到、不低于、不得、严禁、必须、应当等约束语义)\n - false:目录、章节导语、说明性/解释性文字、空白表头、格式模板、无约束力的描述\n - 边界判例(格式模板 vs 结构呈现要求):表格填写/签章格式/装订份数类模板说明 → false;\n 「组织机构以框图方式表示」「采用文字并结合图表形式编制」「附网络图、横道图」等呈现形态要求 → true(呈现信息同时进入 structures 通道)\n - 孤立碎片(无问题上下文的「回复:\xd7\xd7」「答:\xd7\xd7」、表格残片、无法独立理解的半截句)→ false(reason="non_requirement")\n - 问答对(「问题:\xd7\xd7 … 回复:\xd7\xd7」):答复含实质要求(指标/标准/义务/禁止性内容)→ true(按答复内容给出 policy/coreTerms);纯程序性答复(「按招标文件执行」「详见补遗」)→ false\n - 条款值被明确标注「无」「☑无」「不适用」「/」时 → isRequirement=false(reason="no_value")\n - 工程量清单条目、项目特征描述、工程量数据不是本通道要求(由清单蓝图通道处理)→ false\n2. inScope:该条是否属于施工组织设计正文的职责范围?\n - true:质量/工期/安全/环保目标、创优奖项、绿色建筑/智慧工地/装配式等级、体系基准(六个百分百/四节一环保等)、\n 工期与进度约束、人员配置与分包限制、材料工艺与验收标准、禁止性事项、必须遵守的技术约束\n - false:纯投标程序事务(开标时间地点/保证金账户信息/递交解密方式/评标委员会组成)、投标资格条件\n (营业执照/资质证书/业绩要求)、评标否决规则(否决其投标/废标情形)、商务纪律承诺(廉洁承诺)、格式签章要求、\n 商务与造价条款(付款/进度款/工程款/结算/保证金/违约金/保函/预付款/税金/税率/报价/综合单价/暂列金额/暂估价/限价/调差等,\n 属商务标响应内容,技术标正文不出现)、\n 合同履约管理程序条款(施工合同通用/专用条款及合同附件的程序性与责任性约定:资料报送/审批/备案期限、\n 违约责任与违约金罚款明细、人员请假/更换/离场批准程序、保险投保办理程序、工程质量保修书程序与保修期限明细、\n 试验条件自理、工程照管责任起止、治安保卫程序、分包审批程序、采购与评标程序——属合同管理范畴,技术标正文不逐条抄写;\n 但质量/安全/文明/工期目标、人员资格与配置、技术工艺与验收标准类实质要求仍按 true 判定)\n3. policy(isRequirement 且 inScope 时必填,其余省略):\n - "respond":必须在正文显性写出的要求(创优目标/奖项、质量目标、等级指标、体系基准、技术工艺条款、人员与分包约束、验收标准)\n - "comply":不逐条抄写但全文必须遵守的约束(以开工令为准的日期约束、工期总日历天数基准、全局禁止性事项)\n4. coreTerms:2-4 个用于正文核对的核心词(专有名词/等级名/体系名/关键数字参数,如「\xd7\xd7杯」「二星级」「六个百分百」「300万元」);\n 数字参数必须保留数字与单位;不要泛化词(「施工」「工程」类不能作为核心词);\n 必须是正文中可自然逐字出现的完整词/短语(括号/标点保持原文形态),不得使用去标点拼接的短语碎片或合同填空语言(如「承包人自理」);\n 不得取条目的名目/评价维度词(如「技术能力」「其他内容」「针对性」「可行性」「主要人员」)与引用性空话\n (如「按设计图纸要求」「详见招标文件」「满足设计要求」)——正文响应写的是实质内容与数据,\n 条目名与空话在正文中必然不落位,取作核心词会把「已按实响应」判成未响应(4.59 R-C4 实机:\n 这两类核心词是「招标要求部分响应/未响应」误报的主要成分)\n5. category:按招标语义命名类别(如「质量创优」「工期进度」「安全文明」「绿色施工」「人员管理」「商务支付」「禁止性要求」),\n 同类要求使用同一类别名\n6. structures:该条是否明文要求内容的呈现形态?命中时输出数组(element 呈现对象名 + form 形态),无呈现要求时省略该字段:\n - form 枚举:“org_chart”(框图/组织机构图/组织结构图)、“diagram”(网络图/横道图/平面布置图/进度计划图)、“table”(表格/组成表)、“chart_text”(文字结合图表/图表形式编制)\n - element:呈现对象的名词短语(如「项目管理机构」「施工总平面布置」「施工进度计划」),不得与原文无关\n - 边界判例:「组织机构以框图方式表示」→ [{element:"项目管理机构",form:"org_chart"}];「采用文字并结合图表形式编制」→ [{element:"施工组织设计",form:"chart_text"}];\n 纯格式填写说明/签章装订要求(按给定格式填写并盖章/正副本份数)→ 不输出 structures\n - 呈现要求与 isRequirement/inScope 判定相互独立:即使本条因程序/格式原因被判排除,structures 仍须输出\n\nisRequirement=false 或 inScope=false 时须给出 reason(枚举):\n- "non_requirement":非约束性内容(目录/导语/说明/描述)\n- "out_of_scope":超出施组职责(投标程序/资格/评标规则/纪律/格式/商务与造价/合同履约管理程序)\n- "no_value":条款值为「无」或不适用\n\n输出 JSON 结构(覆盖全部序号,每序号必出结果):\n{ "results": [\n { "index": 0, "isRequirement": true, "inScope": true, "policy": "respond", "coreTerms": ["\xd7\xd7杯", "300万元"], "category": "质量创优" },\n { "index": 1, "isRequirement": false, "inScope": false, "reason": "out_of_scope" },\n { "index": 2, "isRequirement": false, "inScope": false, "reason": "out_of_scope", "structures": [{ "element": "项目管理机构", "form": "org_chart" }] }\n] }\n只返回 JSON。'].join("\n");function E(a){return"no_value"===a.reason||"out_of_scope"===a.reason||"non_requirement"===a.reason?a.reason:!0===a.isRequirement&&!1===a.inScope?"out_of_scope":"non_requirement"}let F=[{form:"org_chart",formRe:/框图|组织机构图|组织结构图|组织架构图/u,elementRules:[{re:/项目管理机构|项目经理部|项目班子|管理机构|组织机构|管理部门/u,element:"项目管理机构"}],fallbackElement:"组织机构"},{form:"diagram",formRe:/网络图/u,elementRules:[{re:/进度|工期|计划/u,element:"施工进度计划网络图"}],fallbackElement:"网络图"},{form:"diagram",formRe:/横道图|甘特图/u,elementRules:[{re:/进度|工期|计划/u,element:"施工进度计划横道图"}],fallbackElement:"横道图"},{form:"diagram",formRe:/总平面布置图|施工总平面图|总平面图|平面布置图|临时设施图|施工总平面布置/u,elementRules:[],fallbackElement:"施工总平面布置图"},{form:"table",formRe:/组成表|机构设置表|人员配备表|一览表/u,elementRules:[{re:/机械设备|施工机械|设备/u,element:"施工机械设备表"},{re:/劳动力|用工/u,element:"劳动力安排计划表"},{re:/项目管理机构|机构|人员/u,element:"项目管理机构人员组成表"}],fallbackElement:"要求表格"},{form:"chart_text",formRe:/结合图表|图表形式|图文并茂/u,elementRules:[{re:/施工组织设计/u,element:"施工组织设计"}],fallbackElement:"图表呈现"}];function G(a,b){let c=function(a){let b=[],c=a.trim();if(!c)return b;for(let a of F){if(!a.formRe.test(c))continue;let d=a.fallbackElement;for(let b of a.elementRules)if(b.re.test(c)){d=b.element;break}b.push({element:d,form:a.form,sourceText:c})}return b}(a.text);for(let d of b?.structures||[]){let b=function(a){let b=(a||"").trim().toLowerCase();return"org_chart"===b||"orgchart"===b||"框图"===b||"组织机构图"===b?"org_chart":"diagram"===b||"图"===b||"网络图"===b||"横道图"===b?"diagram":"table"===b||"表格"===b?"table":"chart_text"===b||"charttext"===b||"图表"===b||"文字结合图表"===b?"chart_text":void 0}(d?.form),e=(d?.element||"").trim().slice(0,24);b&&!(e.length<2)&&(c.some(a=>a.form===b&&a.element===e)||c.push({element:e,form:b,sourceText:a.text.trim()}))}return c}let H=/(?:我(?:公司|方|单位|们)[^。;;]{0,24}(?:对|就)(?:该|本|上述|所填)?(?:表|清单|资料)[^。;;]{0,32}(?:均属|均为|真实|属实|可靠|有效|无误))|(?:(?:以上|上述|该表|所填报?)[^。;;]{0,20}(?:内容|资料)[^。;;]{0,20}(?:均属|均为|真实|属实|可靠|有效|无误))/u;function I(a){return H.test(a)}let J=/开工令|开工日期|竣工日期|不得.{0,12}(?:自定|自行确定|编造|设定)/u;function K(a){let b=[a.section,a.clauseNo?`条款${a.clauseNo}`:""].filter(Boolean).join("\xb7");return[a.file,b].filter(Boolean).join("|")||void 0}async function L(a,b,c){let d=Array(a.length),e=0;return await Promise.all(Array.from({length:Math.min(b,a.length)},async()=>{for(;;){let b=e;if(e+=1,b>=a.length)return;d[b]=await c(a[b],b)}})),d}async function M(a,b,c={}){let d=a.map((a,c)=>{let d=K(a);return`【条款 ${b+c}】${d?`来源:${d}`:""}
|
|
227
|
+
${a.text}`}).join("\n\n"),e=new Set(a.map((a,c)=>b+c)),f=new Map;for(let a=0;a<2;a+=1){let b=await (0,g.bb)(D,d,{maxTokens:8e3,temperature:0,signal:c.signal,diagnostics:c.diagnostics,schema:C,taskKind:"structuredGeneration"});for(let a of(f=new Map,b?.results||[]))"number"==typeof a.index&&e.has(a.index)&&f.set(a.index,a);if(f.size===e.size)return{judgments:f,retried:a>0}}return{judgments:f,retried:!0}}let N=p.uW;function O(a){let b=a.replace(/\s+/gu,"");return b.length<=10&&!/\d/u.test(b)&&!N.test(b)}function P(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&!!(/(?:回复|答复)[::]/u.test(b)||/(?:^|[。;;\n])\s*(?:答|答复|回复|答疑|提问|问)\s*[::]/u.test(b)||/扣\d+(?:\.\d+)?分|总分\d+分|百分制|考核(?:办法|评分|结果|得分|扣分|奖惩)/u.test(b)||/质量保修|保修范围|派人保修|保修通知|保修期如下/u.test(b)||/本表(?:应|须|不|需|作)/u.test(b)||/投标文件(?:应|须|应当)[^。;]{0,40}(?:响应|作出响应|包含|包括)/u.test(b)||/我方拟派|无在岗项目|拟分包项目情况表/u.test(b)||/^[((、..\d]{0,8}☑/u.test(b)||(0,p.MO)(b))}let Q=/(保修|安全生产合同|承包人职责|承包人的一般义务|承包人人员|监理人的一般规定|不合格工程的处理|样品的报送|开工准备|承包人文件|人员及职责|终身责任制承诺|投标文件格式|考核表|督查|管养|养护管理|景观设施维护|地被养护)/u;function R(a){let b=(a||"").replace(/\s+/gu,"");return b.length>0&&Q.test(b)}function S(a){let b=a.replace(/\s+/gu,"");return!(b.length<4)&&(/〔\d{4}〕/u.test(b)||/(?:办法|通知|规定|条例|细则)$/u.test(b))}let T=/^(?:Φ|φ|Ø|ø)?-?(?:HPB|HRB|HRBF|RRB|CRB|Q|MU|C)\d{1,4}[A-Z]?$/u;function U(a){return T.test(a.replace(/\s+/gu,"").toUpperCase())}let V=/^(?:按|依据|见|详见|参见|遵照|参照|执行|满足|符合)(?:设计图纸|设计文件|图纸|图集|规范|标准|招标文件|合同|国家现行标准|现行标准|相关规范|有关规定|设计要求)(?:的)?(?:要求|规定|执行|施工|做法|标准|为准)?\s*[。;;]?\s*$/u,W=/[\s。;;,,、::()()]/gu,X=/^(?:按|依据|见|详见|参见|遵照|参照|执行|满足|符合)(?:设计图纸|设计文件|图纸|图集|规范|标准|招标文件|合同|国家现行标准|现行标准|相关规范|有关规定|设计要求)(?:的)?(?:要求|规定|执行|施工|做法|标准|为准)?$/u;function Y(a){let b=(a||[]).map(a=>(a||"").trim()).filter(a=>a.length>=2);return b.length>0&&b.every(S)}async function Z(a,b={}){let c=[],d=[],e=[],f=[];if(0===a.length)return{entries:c,excluded:d,undecided:e,structureRequirements:[],batchCount:0,retriedBatches:0};let g=[];for(let b=0;b<a.length;b+=40)g.push(a.slice(b,b+40));let h=await L(g,3,(a,c)=>M(a,40*c,b)),i=0;return h.forEach((a,b)=>{a.retried&&(i+=1),g[b].forEach((g,h)=>{var i,j;let k=a.judgments.get(40*b+h);if(f.push(...G(g,k)),!k)return void e.push(g);if(!k.isRequirement||!k.inScope)return void d.push({text:g.text,source:K(g),reason:E(k)});if(O(g.text))return void d.push({text:g.text,source:K(g),reason:"non_requirement"});if(r.test(g.text)||s(g.text))return void d.push({text:g.text,source:K(g),reason:"no_value"});if(t.test(g.text)||I(g.text))return void d.push({text:g.text,source:K(g),reason:"non_requirement"});if((0,l.hh)(g.text)||(0,m.dn)(g.text)||(0,l.DI)(g.text)||(0,m.Hf)(g.text))return void d.push({text:g.text,source:K(g),reason:"out_of_scope"});let o=(0,n.m)(g.text);if("technical"!==o&&"commercial"!==o)return void d.push({text:g.text,source:K(g),reason:(0,n.C)(g.text)?"credit_scoring":"out_of_scope"});if(R(g.section)||Y(k.coreTerms))return void d.push({text:g.text,source:K(g),reason:"out_of_scope"});if(P(g.text)){let a=(0,p.MO)(g.text);d.push({text:g.text,source:K(g),reason:a?"noise":"non_requirement"});return}if(aK(g.text))return void d.push({text:g.text,source:K(g),reason:"commercial_scope"});let q="comply"===(i=k.policy)?i:"respond";c.push({text:g.text,coreTerms:Array.isArray(j=k.coreTerms)?j.map(a=>(a||"").trim()).filter(a=>a.length>=2&&a.length<=24).slice(0,4):[],sources:[function(a){let b=[a.section,a.clauseNo?`条款${a.clauseNo}`:""].filter(Boolean).join("\xb7");return{file:a.file||void 0,location:b||void 0}}(g)],category:function(a){let b=(a||"").trim();return!b||b.length>16?"其他要求":b}(k.category),policy:q,global:!!("comply"===q&&J.test(g.text))||void 0})})}),{entries:c,excluded:d,undecided:e,structureRequirements:function(a){let b=new Map;for(let c of a){let a=`${c.form}|${c.element}`;b.has(a)||b.set(a,c)}return[...b.values()]}(f),batchCount:g.length,retriedBatches:i}}async function $(a,b={}){let c=q(!1);if(!a||0===a.length)return c;let d=function(a){let b=[];for(let c of a){let a,d=c.content||"";if(!d.trim())continue;let e=c.filePath||void 0,f=c.sectionTitle?.trim()||void 0,g=[],h={fragment:null},j=(a,c)=>{let d=function(a){if(a.length<=2e3)return[a];let b=a.split(/(?<=[。;;!?!?])/u),c=[],d="";for(let a of b)d&&d.length+a.length>2e3&&(c.push(d),d=""),d+=a;return d&&c.push(d),c.length>0?c:[a]}(a);d.forEach((a,g)=>{b.push({file:e,section:f,clauseNo:c?d.length>1?`${c}-${g+1}`:c:void 0,text:a})})},k=()=>{var b;let c=g.join("\n").trim(),d=a;if(g=[],a=void 0,!c)return;let e=h.fragment?.clauseNo||d;if(h.fragment&&(c=`${h.fragment.text}
|
|
228
|
+
${c}`,h.fragment=null),(b=c).length<=8&&!/[。;;!?!?]/u.test(b)&&!/\d/u.test(b)){h.fragment={text:c,clauseNo:e};return}j(c,e)};for(let b of d.split(/\r?\n/u)){let c=b.trim();if(/^#{1,6}\s/u.test(c)){let a=(0,i.wj)(c).trim();if(!a)continue;if(!(!a||/(?:\.{3,}|…)/u.test(a)||/^(?:PDF 第 \d+ 页|PDF 表格区域)/u.test(a))&&(!(!/[☑□■☐☒√×]/u.test(a)&&(!(a.length<=3)||/^\d/u.test(a)))||!(/^第[一二三四五六七八九十\d]+[章节部分条编]/u.test(a)&&a.length<=40&&!/[::,,]/u.test(a)||/^(?:目录|附录|附件)/u.test(a)&&a.length<=30&&!/[::,,]/u.test(a)||/^\d+(?:[..]\d+)*[..、]?\s*\S/u.test(a)&&a.length<=24&&!/[::,,。;;()]/u.test(a)&&!A.test(a)&&B.test(a.replace(/^\d+(?:[..]\d+)*[..、]?\s*\d*\s*/u,""))||/^[一二三四五六七八九十]{1,3}[、..](?!\d)/u.test(a)&&a.length<=24&&!/[::,,。;;()]/u.test(a)&&B.test(a.replace(/^[一二三四五六七八九十]{1,3}[、..\s]*/u,""))||/^[((][一二三四五六七八九十\d]{1,3}[))]/u.test(a)&&a.length<=24&&!/[::,,。;;()]/u.test(a.replace(/^[((][一二三四五六七八九十\d]{1,3}[))]/u,""))&&B.test(a.replace(/^[((][一二三四五六七八九十\d]{1,3}[))]\s*\d*\s*/u,"")))&&1)){if(/^\d{1,3}$/u.test(a))continue;if(w(a)){if(g.length>0&&!z(g[g.length-1])){g.push(a);continue}g.length>0&&k(),g.push(a),!x.test(a)&&z(a)&&k();continue}g.push(a);continue}g.length>0&&k(),f=a;continue}let d=(0,i.wj)(c).trim();if(!d){g.length>0&&z(g[g.length-1])&&k();continue}if(/^\d{1,3}$/u.test(d))continue;if(y.test(d)){g.push(d),1===g.length&&k();continue}let e=function(a){for(let b of v){let c=b.exec(a);if(c)return c[0].trim().replace(/[、..\s]$/u,"")}}(d);if(e){g.length>0&&k(),a=e,g.push(d);continue}if(w(d)){if(g.length>0&&!z(g[g.length-1])){g.push(d);continue}g.length>0&&k(),g.push(d),!x.test(d)&&z(d)&&k();continue}g.push(d)}g.length>0&&k(),h.fragment&&(j(h.fragment.text,h.fragment.clauseNo),h.fragment=null)}return b}(a);if(0===d.length)return c;b.onPhase?.(`条款化完成:${d.length} 条单元(全文穷举切分,不预筛不剔除)`,[`来源文件:${[...new Set(d.map(a=>a.file).filter(Boolean))].join("、")||"—"}`,"逐条判定进行中(每批 40 条,序号严格对齐)"]);let e=await Z(d,{signal:b.signal,diagnostics:b.diagnostics}),f=function(a){let b=new Map,c=0;for(let d of a){let a=d.text.replace(/[\s,。;、::..()()「」“”"'`·]/gu,""),e=b.get(a);if(e){for(let a of d.sources)e.sources.some(b=>b.file===a.file&&b.location===a.location)||e.sources.push(a);e.coreTerms=[...new Set([...e.coreTerms,...d.coreTerms])].slice(0,4),c+=1;continue}b.set(a,d)}return{entries:[...b.values()],mergedCount:c}}(e.entries);b.onPhase?.(`逐条判定完成:要求 ${f.entries.length} + 排除 ${e.excluded.length}${f.mergedCount>0?` + 合并 ${f.mergedCount}`:""} + 未判定 ${e.undecided.length}${e.structureRequirements.length>0?`;结构/呈现要求 ${e.structureRequirements.length}`:""}`,0===e.undecided.length?["对账闭合:全部条款已判定"]:[`未判定 ${e.undecided.length} 条(LLM 输出缺号且重试后仍缺),对账未闭合,缓存不落盘`]);let g=e.entries.length>0||e.excluded.length>0;return{entries:f.entries,excluded:e.excluded,structureRequirements:e.structureRequirements,reconciliation:{clauseCount:d.length,entryCount:f.entries.length,excludedCount:e.excluded.length,undecidedCount:e.undecided.length,mergedCount:f.mergedCount,batchCount:e.batchCount,retriedBatches:e.retriedBatches,structureCount:e.structureRequirements.length},extracted:g,sourceHash:function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return(b>>>0).toString(16)}(a.map(a=>`${a.filePath||""}|${a.sectionTitle||""}|${a.content||""}`).join("\n"))}}let _=/履约保证金|质量保证金|保证金账户|中标金额|中标价|进度款|工程款|付款|结清|结算|违约金|贷款市场报价利率|LPR|最高投标限价|工程结算价款|预付款|支付担保|保函|暂列金额|暂估价|结算核减|造价咨询费|工程量.*异议|增值税|异地纳税人|报价明细|综合单价|清单合价|预留金|投标报价|异常低价|评标基准价|总价包干|总价合同|调差|可调整价差|市场询价|报价计入|赔偿/u,aa=/工艺试验|工艺评定|试验段|复垦|土地复垦|表土剥离|耕作层|占地恢复|场地恢复|植被恢复|绿化恢复|清表|清杂|移植|取土场|弃土场|临时占地|临时用地/u,ab=[O,n.m,n.C,r,s,t,I,l.hh,m.dn,l.DI,m.Hf,R,Y,S,P,p.MO,p.OK,p.uW,aK,_,aa,E,J,G,F,H,Q];function ac(a){return"function"==typeof a||a instanceof RegExp?String(a):a&&"object"==typeof a?JSON.stringify(a,(a,b)=>"function"==typeof b||b instanceof RegExp?String(b):b)??String(a):String(a)}function ad(a){let b=e.join(process.env.HOME||process.cwd(),".customize-agent","cache","document-workflow",(0,l.c6)(a||"default"));return d.mkdirSync(b,{recursive:!0}),b}function ae(a){return(0,l.c6)({version:"tender-requirements-extraction-v10",judgeFingerprint:function(a=ab){return(0,l.c6)(a.map(ac).join("\n"))}(),collection:a.collectionEvidence.map(a=>({filePath:a.filePath||"",sectionTitle:a.sectionTitle||"",contentHash:(0,l.c6)(a.content||"")})).sort((a,b)=>`${a.filePath}|${a.sectionTitle}`.localeCompare(`${b.filePath}|${b.sectionTitle}`))})}function af(a){if(!a||!Array.isArray(a.entries)||!Array.isArray(a.excluded)||!a.reconciliation)return!1;let b=a.reconciliation;return"number"==typeof b.clauseCount&&"number"==typeof b.entryCount&&"number"==typeof b.excludedCount&&"number"==typeof b.mergedCount&&"number"==typeof b.undecidedCount&&0===b.undecidedCount&&b.clauseCount===b.entryCount+b.excludedCount+b.mergedCount}function ag(a,b){try{let c=e.join(ad(a),`tender-requirements-${b}.json`),f=JSON.parse(d.readFileSync(c,"utf8"));if(!f?.extracted||!af(f))return;return f}catch{return}}function ah(a,b,c){if(c?.extracted&&af(c))try{d.writeFileSync(e.join(ad(a),`tender-requirements-${b}.json`),JSON.stringify(c,null,2))}catch{}}function ai(a){if(!a)return[];let b=[],c=a.reconciliation;if(a.extracted){let a=[`要求 ${c.entryCount}`,`排除 ${c.excludedCount}`];c.mergedCount>0&&a.push(`合并 ${c.mergedCount}(来源已聚合)`),a.push(`未判定 ${c.undecidedCount}`),b.push(`条款对账:切分 ${c.clauseCount} = ${a.join(" + ")}${0===c.undecidedCount?"(闭合)":"(未闭合)"}`)}let d=new Map;for(let b of a.entries){let a=d.get(b.category)||[];a.push(b.text),d.set(b.category,a)}for(let[a,c]of d)b.push(`${a} ${c.length} 条:${c.join("、")}`);let e=a.excluded.filter(a=>"commercial_scope"===a.reason).length;e>0&&b.push(`商务域排除 ${e} 条(付款/保证金/结算/报价/税金等,技术标正文零商务句)`);let f=a.excluded.filter(a=>"credit_scoring"===a.reason).length,g=a.excluded.filter(a=>"out_of_scope"===a.reason).length;(g>0||f>0)&&b.push(`技术标准入闸排除 ${g+f} 条(投标人资格与资信/招标程序与评标纪律/合同条件——非施工组织设计响应义务,响应由资格文件或商务标承接)`),f>0&&b.push(`其中资信加分项 ${f} 条(业绩/获奖/认证类):按招标要求以承诺句或证明材料清单形态另行处理,不得编成施工小节;暗标项目一律剔除`);let h=a.structureRequirements||[];if(h.length>0){let a={diagram:"图",org_chart:"框图",table:"表格",chart_text:"结合图表"};b.push(`结构/呈现要求 ${h.length} 项:${h.map(b=>`${b.element}(以${a[b.form]}呈现)`).join("、")}`)}return c.undecidedCount>0&&b.push(`未判定条款 ${c.undecidedCount} 条:对账未闭合(LLM 输出缺号且重试后仍缺),请检查 LLM 可用性`),a.extracted||b.push("招标要求未提取(无绑定资料或模型不可用),验收自动跳过"),b}function aj(a){return!!(a?.extracted&&a.entries.length>0)}function ak(a){return a?a.entries.map(a=>({kind:a.category,item:a})):[]}function al(a){return a.coreTerms.length>0?a.coreTerms.join(" "):a.text}function am(a){if(!a?.extracted)return"";let b=[];for(let c of a.entries)c.global&&b.push(`全局遵守:${c.text}(全文任何章节不得违反,禁止自行设定该类数据)`);return b.push("本章分配到的招标要求(见「本章必须处理的招标要求」清单)必须逐条处理:显性响应类须写入正文并配套保证措施;遵守类须全文一致遵守。奖项名称、等级指标、数字参数必须与招标文件原文逐字一致,禁止替换、降级或省略。商务域条款(付款/保证金/结算等)不在技术标响应范围——正文不得出现任何商务内容。"),`【招标要求全局口径红线(全文档适用)】
|
|
228
229
|
${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}
|
|
229
|
-
${(0,l.TP)("以上为系统提取的招标要求全局口径:本段提示词文字本身(编号、括号说明等元话语)禁止复述进正文")}`}function
|
|
230
|
-
└ 必须逐字落位:${d.join("、")}`:"";return`- [${b[a.policy]}] ${a.text}${c?`(来源:${c})`:""}${e}`}),(0,l.TP)("以上为系统提取的招标要求原文:实质内容(奖项名称/等级指标/数字参数)必须显性落位;「必须逐字落位」为系统验收锚点清单,其文字禁止复述进正文;本段提示词文字本身(编号、括号说明等元话语)禁止复述进正文")].join("\n")}function
|
|
231
|
-
${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}`,"",a.map((a,b)=>`【要求 ${b}】${a.entry.text}`).join("\n\n")].join("\n"),e=await (0,g.bb)(
|
|
232
|
-
未命中锚点:${a.missingAnchors.join("、")||"(无)"}`).join("\n"),{maxTokens:1e3,temperature:0,signal:b.signal,diagnostics:b.diagnostics,schema:
|
|
230
|
+
${(0,l.TP)("以上为系统提取的招标要求全局口径:本段提示词文字本身(编号、括号说明等元话语)禁止复述进正文")}`}function an(a){if(0===a.length)return"";let b={respond:"显性响应",comply:"全文遵守"};return["【本章必须处理的招标要求(蓝图分配全量,逐条响应/遵守;零处理即评标失分)】",...a.map(a=>{let c=a.sources.find(a=>a.file)?.file,d="respond"===a.policy?aE(a):[],e=d.length>0?`
|
|
231
|
+
└ 必须逐字落位:${d.join("、")}`:"";return`- [${b[a.policy]}] ${a.text}${c?`(来源:${c})`:""}${e}`}),(0,l.TP)("以上为系统提取的招标要求原文:实质内容(奖项名称/等级指标/数字参数)必须显性落位;「必须逐字落位」为系统验收锚点清单,其文字禁止复述进正文;本段提示词文字本身(编号、括号说明等元话语)禁止复述进正文")].join("\n")}function ao(a,b={}){if(0===a.length)return"";let c={diagram:"图(网络图/横道图/平面布置图类)",org_chart:"框图",table:"表格",chart_text:"文字结合图表"};return b.bodyTableForbidden?["【本章必须落实的呈现要求(招标明文规定呈现形态,正文禁表口径)】",...a.map(a=>`- 招标要求以「${c[a.form]}」呈现「${a.element}」:招标正文禁表(显式禁表句),不得出现任何表格/图片,须以完整文字描述${a.element}的组成与运作(图文形态由文末附表区承载,正文可自然指向附表)${"org_chart"===a.form?":正文须含「项目管理机构与岗位职责」专项内容——组织架构说明(层级设置、隶属关系、部门与岗位构成)及分岗位的职责分工与协作关系;严禁出现人员姓名、证书编号、身份证号等实名数据(人员实名信息属商务册职责,正文仅写岗位与职责体系)":""}`),(0,l.TP)("以上为招标明文的呈现形态要求:正文以文字完整承载内容,禁止任何图表实体与内部话术(如“由编制人绘制”)")].join("\n"):["【本章必须落实的呈现要求(招标明文规定呈现形态,缺失即评标失分)】",...a.map(a=>{var b;return`- 须以「${c[a.form]}」呈现「${a.element}」(呈现形态与要素均来自招标明文,不得省略)${"diagram"===(b=a.form)?":必须以 Markdown 数据表(表头字段 + 数据行,数据取自资料,禁止编造)或等价的结构化文字框图/表格式时间轴承载全部内容要点(≥3 行要点),内容结束处另起一行输出规范图题行(格式「图 X-X 图名」,X-X 为章序号与本章图序号,图名即要素名),图题行独立成行、不附加任何说明文字;**只输出图题行而无数据表/框图内容视为该项未落实**":"org_chart"===b?":正文须含「项目管理机构与岗位职责」专项内容——组织架构说明(层级设置、隶属关系、部门与岗位构成)+ 文字框图承载(列出全部岗位与层级关系)+ 岗位责任矩阵(各岗位职责、分工与协作关系);严禁出现人员姓名、证书编号、身份证号等实名数据(人员实名信息属商务册职责,正文仅写岗位与职责体系)":"table"===b?":以 Markdown 表格输出,表头字段按要素构成设置并覆盖全部构成项":""}`}),b.bodyFigureForbidden?(0,l.TP)("以上为招标明文的呈现形态要求:对应表格/框图必须在本章正文落实(内容使用资料事实,禁止编造);招标要求正文不得出现图片,图类以文字框图/表格式时间轴与图题行承载,禁止插入图片或图件占位"):(0,l.TP)("以上为招标明文的呈现形态要求:对应图/表/框图必须在本章正文落实,内容使用资料事实,禁止编造")].join("\n")}let ap={type:"object",required:["results"],properties:{results:{type:"array",required:!0,minItems:1,items:{type:"object",required:!0,properties:{index:{type:"number",required:!0},chapter:{type:"string",required:!0,maxLength:60}}}}}},aq=[(0,o.y4)("你是招标要求章责分配器。"),'输入是语义路由置信度偏低的技术标要求条目与本文档全部章节标题列表。\n为每条要求裁决其唯一主责章节(写该章节正文时必须响应此要求),逐条必出结果(不得遗漏序号)。\n\n- chapter:从章节标题列表中选择内容最匹配的一项,必须与列表原文逐字一致\n- chapter 填 "none":该条不是可写入技术标正文的实质要求(无问题上下文的残片/客套答复/程序性说明),或没有任何章节能承载其内容\n\n输出 JSON:{ "results": [ { "index": 0, "chapter": "章节标题或none" } ] },只返回 JSON。'].join("\n");async function ar(a,b,c={}){let d=[`章节标题列表:
|
|
232
|
+
${b.map((a,b)=>`${b+1}. ${a}`).join("\n")}`,"",a.map((a,b)=>`【要求 ${b}】${a.entry.text}`).join("\n\n")].join("\n"),e=await (0,g.bb)(aq,d,{maxTokens:4e3,temperature:0,signal:c.signal,diagnostics:c.diagnostics,schema:ap,taskKind:"structuredGeneration"}),f=new Map;for(let b of e?.results||[]){if("number"!=typeof b.index||!Number.isInteger(b.index)||b.index<0||b.index>=a.length||"string"!=typeof b.chapter)continue;let c=b.chapter.trim();c&&f.set(b.index,c)}return f}async function as(a,b,c,d={}){let e=function(a,b,c){let d=[];if(0===a.length||0===b.length)return{assignments:d,lowConfidenceCount:0};let e=b.map(a=>u(a.title)).filter(Boolean);if(0===e.length)return{assignments:d,lowConfidenceCount:0};let f=0;for(let b of a){let a=al(b),g="",h=0;for(let b of e){let d=c(a,b);d>h&&(h=d,g=b)}g||(g=e[0]);let i=h<.45;i&&(f+=1),d.push({entry:b,chapterTitle:g,score:h,lowConfidence:i})}return{assignments:d,lowConfidenceCount:f}}(a,b,c),f=b.map(a=>u(a.title)).filter(Boolean),g=e.assignments.map((a,b)=>a.lowConfidence?b:-1).filter(a=>a>=0);if(0===g.length||0===f.length||d.signal?.aborted)return{assignments:e.assignments,dropped:[],lowConfidenceCount:e.lowConfidenceCount};let h=[];for(let a=0;a<g.length;a+=40)h.push(g.slice(a,a+40));let i=await L(h,3,a=>ar(a.map(a=>e.assignments[a]),f,d)),j=new Map;i.forEach((a,b)=>{for(let[c,d]of a){let a=h[b][c];void 0!==a&&j.set(a,d)}});let k=new Set(f),l=[],m=[],n=0;return e.assignments.forEach((a,b)=>{if(!a.lowConfidence)return void l.push(a);let c=j.get(b);if(!c){l.push(a),n+=1;return}return/^(?:none|无)$/iu.test(c)?void m.push(a.entry):k.has(c)?void l.push({...a,chapterTitle:c,lowConfidence:!1}):void(l.push(a),n+=1)}),{assignments:l,dropped:m,lowConfidenceCount:n}}function at(a,b){let c=e.join((0,h.Gl)(a),"assets");d.mkdirSync(c,{recursive:!0});let f=e.join(c,"requirement-assignments.json");return d.writeFileSync(f,JSON.stringify({createdAt:new Date().toISOString(),total:b.length,assignments:b},null,2),"utf8"),f}let au=.35;function av(a){return`${a.element} ${a.sourceText}`.slice(0,120)}function aw(a,b,c){let d=[],e=[],f=b.map(a=>u(a.title)).filter(Boolean);for(let b of a){let a=av(b),g="",h=0;for(let b of f){let d=c(a,b);d>h&&(h=d,g=b)}let i={requirement:b,chapterTitle:g,score:h,lowConfidence:h<au};if(!g||i.lowConfidence){e.push(i);continue}d.push(i)}return{assignments:d,unattached:e}}function ax(a,b,c){let f=e.join((0,h.Gl)(a),"assets");d.mkdirSync(f,{recursive:!0});let g=e.join(f,"structure-assignments.json");return d.writeFileSync(g,JSON.stringify({createdAt:new Date().toISOString(),attached:b.length,unattached:c.length,assignments:b,unattachedItems:c},null,2),"utf8"),g}let ay={type:"object",required:["results"],properties:{results:{type:"array",required:!0,minItems:1,items:{type:"object",required:!0,properties:{index:{type:"number",required:!0},alternative:{type:"boolean",required:!0}}}}}};async function az(a,b={}){let c=a.filter(a=>a.text.trim());if(0===c.length)return new Map;let d=[];for(let a=0;a<c.length;a+=40)d.push(c.slice(a,a+40));let e=await L(d,3,a=>aA(a,b)),f=new Map;return e.forEach((a,b)=>{a.forEach((a,c)=>{f.set(40*b+c,a)})}),new Map(c.map((a,b)=>[b,f.get(b)??!1]))}async function aA(a,b={}){let c=await (0,g.bb)([(0,o.y4)("你是招标要求条款锚点关系判定器。"),'对每条条款判定其锚点之间的关系:\n- alternative=true:条款锚点为"或/及/任选其一"关系(如"省级或国家级奖项""A、B、C任选"),满足任一锚点即算完整响应\n- alternative=false:条款锚点必须全部满足(并列承诺、金额与奖项共存条款),缺任一锚点即部分响应\n只输出 JSON,不得输出其他内容。'].join("\n"),a.map((a,b)=>`${b+1}. 条款:${a.text}
|
|
233
|
+
未命中锚点:${a.missingAnchors.join("、")||"(无)"}`).join("\n"),{maxTokens:1e3,temperature:0,signal:b.signal,diagnostics:b.diagnostics,schema:ay,taskKind:"structuredGeneration"});if(!c?.results?.length)return a.map(()=>!1);let d=new Map;for(let a of c.results)"number"==typeof a.index&&d.set(a.index,!0===a.alternative);return a.map((a,b)=>d.get(b)??!1)}function aB(a){return a.replace(/%/gu,"%")}function aC(a){return a.replace(/[!-~]/gu,a=>String.fromCharCode(a.charCodeAt(0)-65248)).replace(/[*✕╳xX×]/gu,"\xd7").replace(/[##]/gu,"").replace(/[—–―─-〜~]/gu,"-").replace(/[「」『』“”"'`《》]/gu,"").replace(/[、,,]/gu,"").replace(/[的为]/gu,"").replace(/([^)]*)|\([^)]*\)/gu,"")}function aD(a,b){let c=aC(a);return!(c.length<2)&&!(2*c.length<a.length)&&b.includes(c)}function aE(a,b){var c;let d=aB(a.text.replace(/\s+/gu,"")),e=new Set,f=V.test((aB(c=a.text).split(":").pop()||c).replace(/\s+/gu,"").trim()),g=function(a){let b=aB(a.text).replace(/^#{0,6}\s*/u,"").replace(/^[((]\s*(?:\d{1,3}|[一二三四五六七八九十]{1,3})\s*[))]/u,"").replace(/^\d+(?:[.-]\d+)*[.、]?/u,"").replace(W,"");if(0===b.length)return!1;let c=b;for(let b of a.coreTerms){let a=aB(b).replace(W,"");a.length<2||(c=c.split(a).join(""))}return 0===c.length}(a);for(let b of a.coreTerms){let a=aB(b.replace(/\s+/gu,""));if(a.length<2||S(a)||(f||g)&&!/[0-9A-Za-z]|《|[\u4e00-\u9fa5]{2,6}[杯奖星]/u.test(a)||X.test(a))continue;if(U(a)){e.add(a);continue}if(function(a){let b=a.replace(/\s+/gu,"").toUpperCase();return!(b.length<4)&&!(b.length>24)&&(/^[A-Z0-9./-]+$/u.test(b)?!!/[A-Z]/u.test(b)&&!!/\d/u.test(b)&&(!!(/^[A-Z]{2,}/u.test(b)||/\d{3,}$/u.test(b)||/[/-]/u.test(b))||(U(b),!1)):/^[一-龥]\d{4}[A-Z]{1,2}\d{1,4}$/u.test(b))}(a))continue;let c=a.match(/^(.*?)(\d+(?:\.\d+)?(?:%|%)?)$/u);if(c&&c[1].length>=2){e.add(c[1]),e.add(c[2]);continue}e.add(a)}if(!b?.skipNumericAnchors)for(let a of d.matchAll(/(?:\d+(?:\.\d+)?\s*(?:%|%|万元|亿元|小时|分钟|毫米|MPa|kPa|mm|天|日|元|米|m|M|层|年|个|月|周|项|处|台|套|辆|人|家|次|遍|道|吨))/giu)){let b=aB(a[0].replace(/\s+/gu,""));/^\d+\.\d+项$/u.test(b)||0!==Number.parseFloat(b)&&e.add(b)}for(let a of d.matchAll(/[\u4e00-\u9fa5]{2,6}[杯奖星]/gu)){let b=function(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}(a[0]);/^[\u4e00-\u9fa5]{2,7}$/u.test(b)&&e.add(b)}return[...e]}function aF(a,b,c,d){let e=aE(a,d),f=[],g=[];for(let a of e)(!function(a,b,c){if(b.includes(a)||aD(a,c))return!0;let d=a.match(/(\d+(?:\.\d+)?)\s*[-–—~~至]\s*(\d+(?:\.\d+)?)/u);return!!d&&b.includes(d[1])&&b.includes(d[2])}(a,b,c)?g:f).push(a);return{total:e.length,hit:f,missing:g}}function aG(a,b,c){let d=aB(a).replace(/([^)]*)|\([^)]*\)/gu,""),e=d.split(/[,。;、,;\n]/u).map(a=>a.replace(/[「」“”"'`\s]/gu,"").trim()).filter(a=>a.length>=6);if(0===e.length){let a=d.replace(/[「」“”"'`\s]/gu,"").trim();if(a.length>=6)return{total:1,missing:b.includes(a)||aD(a,c)?[]:[a]}}let f=e.filter(a=>!b.includes(a)&&!aD(a,c));return{total:e.length,missing:f}}function aH(a){return a.replace(/[☑☐☒√✓✔■●◼⊠]\s*/gu,"").replace(/(?<![\d])\s*[×✗]\s*(?![\d])/gu,"").replace(/^\s*(?:[((]\s*\d{1,3}\s*[))]|(?:\d{1,3}(?:\.\d{1,3}){0,3})[.、,,](?=[\u4e00-\u9fff((])|(?:[一二三四五六七八九十]{1,3})[、.,,](?=[\u4e00-\u9fff((]))/u,"").replace(/投标人本单位|承包人本单位/gu,"本公司").replace(/本招标项目/gu,"本项目").replace(/(?:承包人|发包人)认为视同/gu,"视为").replace(/承包人|投标人|施工单位|承包方|中标人|承包单位|投标单位/gu,"我方")}function aI(a,b,c){let d=aF(a,b,c);if(d.total>0&&0===d.missing.length)return!0;let e=aG(a.text,b,c);if(e.total>0&&0===e.missing.length)return!0;let f=aG(aH(a.text),b,c);return!!(f.total>0)&&0===f.missing.length}function aJ(a,b){let c=aB(b.replace(/\s+/gu,"")),d=aC(c);return a.map(a=>{let b=aF(a,c,d);return{entry:a,hit:b.hit,missing:b.missing,satisfied:aI(a,c,d)}})}function aK(a){return!aa.test(a)&&_.test(a)}async function aL(a){let b=[];if(0===a.entries.length)return b;let c=a.markdown,d=aB(c.replace(/\s+/gu,"")),e=aC(d),f=()=>(0,k.SD)(c),g=c.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>u(a)).filter(Boolean),h=a.bodyTexts&&a.bodyTexts.length>0?[...g,...a.bodyTexts]:g.length>0?g:[c.slice(0,2e3)],i=[];for(let c of a.entries){let g=c.category;if("comply"===c.policy||/六个百分百|扬尘治理/u.test(c.text)&&f()>=4)continue;let k=al(c),m=0;for(let b of h){let c=a.semanticSimilarity(k,b);c>m&&(m=c)}if(m>=j.Eh){if(aI(c,d,e))continue;let a=aF(c,d,e);a.total>0&&i.push({item:c,kind:g,bestSimilarity:m,hit:a.hit,missing:a.missing});continue}if(aI(c,d,e))continue;let n=aF(c,d,e);if(0===n.total){b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"system",repairability:"not_repair_needed",message:`招标要求无法确定性核验:${g}“${c.text}”条款内无可用锚点(核心词均为引用性/空话形态,且无数字参数与具名奖项),确定性通道未作响应判定(最佳语义相似度 ${m.toFixed(2)})`,suggestion:"该条款未进入确定性核验:如需逐字核验,应在招标要求提取阶段为该条款给出可核验的核心词(专有名词/等级名/体系名/关键数字参数)。",provenance:{detectorId:"requirements-coverage",fingerprint:(0,l.c6)(c.text)}});continue}if(n.hit.length>0){i.push({item:c,kind:g,bestSimilarity:m,hit:n.hit,missing:n.missing});continue}b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`招标要求未响应:${g}“${c.text}”在正文中零命中(最佳语义相似度 ${m.toFixed(2)})`,suggestion:`招标文件明确要求的${g}必须显性响应:在对应章节以投标人口吻补写“${c.text}”对应内容及配套保证措施(不得使用“按招标文件要求:”条幅前缀)。`,provenance:{detectorId:"requirements-coverage",fingerprint:(0,l.c6)(c.text)}})}if(i.length>0){let c=await az(i.map(a=>({text:a.item.text,missingAnchors:a.missing})),{signal:a.signal,diagnostics:a.diagnostics});for(let[a,d]of i.entries()){if(c.get(a))continue;let e=d.hit.length>0?`已命中“${d.hit.join("、")}”,`:"";b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`招标要求部分响应:${d.kind}“${d.item.text}”${e}但缺少“${d.missing.join("、")}”(最佳语义相似度 ${d.bestSimilarity.toFixed(2)})`,suggestion:`条款内全部关键数据与奖项必须逐项显性响应:在对应章节补写“${d.missing.join("、")}”对应内容(缺一即部分响应)。`,provenance:{detectorId:"requirements-coverage",fingerprint:(0,l.c6)(d.item.text)}})}}return b}function aM(a){let b=a.split(/\r?\n/u),c=[],d=0,e=[];for(let a=0;a<b.length;a+=1){let f=b[a],g=f.trim();if(!g||/^#{1,6}\s/u.test(g)||/^\s*\|/u.test(f)){c.push(f);continue}let h=f,i=/^(\s*)按招标文件(?:要求|约定):\s*(.+)$/u.exec(h);if(i&&(h=`${i[1]}${aH(i[2])}`),(h=(h=h.replace(/本施工组织设计已按上述条款要求逐项落实执行。?/gu,"")).replace(/按招标文件约定/gu,"按招标要求").replace(/按招标文件要求/gu,"按招标要求").replace(/按招标文件规定/gu,"按招标要求").replace(/按上述条款要求|按上述条款|按上述要求/gu,"按招标要求").replace(/按上述时限/gu,"按约定时限").replace(/本招标项目/gu,"本项目"))!==f&&(d+=1,e.length<6&&e.push(g.slice(0,24))),!h.trim()){a+1<b.length&&!b[a+1].trim()&&c.length>0&&!c[c.length-1].trim()&&(a+=1);continue}c.push(h)}return{markdown:c.join("\n"),fixedCount:d,details:e}}function aN(a){let b=(0,f.rA)(a),c=(0,f.vG)(b.text),d=(0,f.eI)(c.text),e=(a=d.text).split(/\r?\n/u),g=[],h=0,i=[];for(let a=0;a<e.length;a+=1){let b=e[a];if(!(0,f.Nf)(b)){g.push(b);continue}h+=1,i.length<6&&i.push(b.trim().slice(0,24)),a+1<e.length&&!e[a+1].trim()&&g.length>0&&!g[g.length-1].trim()&&(a+=1)}let j=b.removed+c.removed+d.removed;return{markdown:g.join("\n"),fixedCount:h+j,details:j>0?[...i,`句中资料残片 ${j} 处`].slice(0,6):i}}function aO(a){let b=a.split(/\r?\n/u),c=new Set,d=[],e=0,f=[];for(let a=0;a<b.length;a+=1){let g=b[a],h=g.trim();if(!h||/^#{1,6}\s/u.test(h)||/^\s*\|/u.test(g)){d.push(g);continue}let i=h.replace(/\s+/gu,"");if(!(i.length>=40&&(/我方/u.test(i)||/本工程/u.test(i)))){d.push(g);continue}if(c.has(i)){for(;a+1<b.length&&!b[a+1].trim();)a+=1;e+=1,f.length<6&&f.push(h.slice(0,24));continue}c.add(i),d.push(g)}return{markdown:d.join("\n"),fixedCount:e,details:f}}},64753:(a,b,c)=>{c.d(b,{Iu:()=>j,Mz:()=>o,UG:()=>n,hW:()=>q,jX:()=>i,t7:()=>m,xs:()=>p});var d=c(19898),e=c(70933),f=c(1218),g=c(22157),h=c(87635);async function i(a){let b=[],c=new Set(a.scopedFilePaths),e=await Promise.all(h.xs.map(async b=>((0,g.Te)(a.signal),(await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths,materialRoots:a.scopedMaterialRoots??(0,d.materialRootsOfFiles)(a.scopedFilePaths)},limit:10,weights:{keyword:.65,vector:.25,rewrite:.8,hybridBonus:.2},generationMode:!0,disableReranker:!0})).results.filter(a=>c.has(a.filePath)&&(0,h.qq)(`${a.sectionTitle||""}
|
|
233
234
|
${a.content}`)>0).map(b=>({chapterId:"project-basic",filePath:b.filePath,score:Math.max(b.score,1)+(0,h.qq)(`${b.sectionTitle||""}
|
|
234
235
|
${b.content}`),content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"pinned-evidence"})))));for(let c of(b.push(...e.flat()),a.scopedFilePaths)){(0,g.Te)(a.signal);let d=a.project.getFileDetail?.(c);if(d?.chunks?.length)for(let e of d.chunks){let f=`${e.sectionTitle||""}
|
|
235
236
|
${e.content||""}`,g=(0,h.qq)(f);if(g<=0)continue;let i=d.file?.relativePath||c;b.push({chapterId:"project-basic",filePath:i,score:1+g,content:e.content,roleId:a.fileRoleByPath.get(i),processingType:a.fileProcessingByPath.get(i),sectionTitle:e.sectionTitle,source:"pinned-evidence"})}}let i=new Set;return b.sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}|${a.sectionTitle||""}|${(0,f.de)(a.content).slice(0,180)}`;return!i.has(b)&&(i.add(b),!0)})}function j(a){return/概况|项目|工程|地点|规模|工期|质量|估算/u.test(a)?{keyword:.65,vector:.25,rewrite:.8,hybridBonus:.2}:/人|材|机|资源|材料|设备|机械|劳动力/u.test(a)?{keyword:.55,vector:.35,rewrite:.75,hybridBonus:.18}:/危大|安全|文明|风险/u.test(a)?{keyword:.5,vector:.4,rewrite:.8,hybridBonus:.2}:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}}function k(a,b){let c=`${a.title} ${(a.sections||[]).join(" ")} ${a.requiredFacts.join(" ")}`;return"reference"===b?.55:"table"===b?/清单|工程量|数量|材料|设备|资源|费用|造价|范围|统计|表/u.test(c)?1.45:.95:"rule"===b?/要求|规则|招标|评审|响应|质量|安全|验收|标准|工期|进度|风险|约束/u.test(c)?1.35:.95:"drawing"===b?/图纸|设计|布置|位置|平面|剖面|立面|空间|施工方法|做法/u.test(c)?1.35:.85:"specification"===b&&/技术|规范|标准|参数|做法|质量|验收|施工方法/u.test(c)?1.3:1}function l(a,b){let c=`${b.sectionTitle||""}
|
|
236
237
|
${b.filePath}
|
|
237
|
-
${b.content}`;return Math.min(1.8,.16*[...new Set([a.title,...a.sections||[],...a.requiredFacts].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】-]+/u)).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,36))].filter(a=>c.includes(a)).length)}function m(a){return`${a.sectionTitle||""}${a.content}`.slice(0,600)}function n(a,b,c,d){let f=b.map(b=>{let d=(0,e.A1)(b,a.requiredFacts)*k(a,b.processingType)+l(a,b),f=c.carrierBoost?c.carrierBoost(b.filePath||""):1,g=c.semantic?c.semantic.similarity(c.semantic.queryText,m(b)):0;return{...b,score:.5*d*f+10*g}});return(0,e.QR)(f,c,d)}function o(a,b,c,d){if(c<=0||b.length<=c)return b;let f=b.map(b=>({item:b,lexical:((0,e.A1)(b,a.requiredFacts)*k(a,b.processingType)+l(a,b))*(d?d(b.filePath||""):1)}));return f.sort((a,b)=>b.lexical-a.lexical),f.slice(0,c).map(a=>a.item)}function p(a,b,c){let d=(a.sections||[]).slice(0,10).join(" "),e=a.requiredFacts.slice(0,10).join(" "),f=a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4);return[...new Set([...f.length>=2?[`${a.title} ${d} ${e}`.trim(),...f.map(b=>`${b} ${(a.sections||[]).slice(0,6).join(" ")}`.trim()),`${f.slice(0,3).join(" ")} ${e}`.trim()]:[`${a.title} ${d} ${e}`.trim()],...b,...c].filter(Boolean))]}async function q(a){if((0,g.Te)(a.signal),0===a.scopedFilePaths.length)return[];let b=`${a.chapter.title} ${a.sectionTitle}`.trim(),c=await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths,materialRoots:a.scopedMaterialRoots??(0,d.materialRootsOfFiles)(a.scopedFilePaths)},limit:20,weights:j(b),generationMode:!0});return(0,e.QR)(c.results.map(b=>({chapterId:a.chapter.id,filePath:b.filePath,score:b.score+1.2,content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"section-evidence"})),{preservePinned:!0})}},65667:(a,b,c)=>{c.d(b,{AK:()=>t,Rh:()=>v,Ti:()=>B,_H:()=>A,j4:()=>s,re:()=>z,tx:()=>u});var d=c(7148);let e=/^(?:为|达|共|约|计|配置|共计|总计|合计)$/u,f=/作业人员|施工人员|人员配置|班组|施工组|每村|分组|编组|编入|队伍/u,g=/^(?:为|达|共|约|计|配置|共计|总计|合计|投入|配备|启用)$/u,h=/^[))、::,,\s]{0,2}(?:混凝土|砼)?\s*(\d+(?:\.\d+)?)\s*(m3|m³|立方米|方|m2|m²|㎡|平方米|延长米|米|m|kg|千克|公斤|t|吨|套|个|块|根|只|组|件|片|樘|扇|盏|座|台|处|项|条|副|对|株)(?![A-Za-z0-9²³])/u,i=/^([^0-9]{0,2}?)(\d+(?:\.\d+)?)\s*人/u,j=/^([^0-9]{0,2}?)(\d+(?:\.\d+)?)\s*台/u,k=/阶段[^。;\n]{0,30}?(\d+(?:\.\d+)?)\s*人/u,l="机|吊|泵|车|夯",m=/[为配置备启投拟需计划增租赁购采设进出按据由从向对把被使等该此其每各和与及或在是将宜并可未非不另又还有部现中套余的用入要场阶段]/u,n=/^(?:[台辆部具个组米吨座])/u,o=/^(?:主力|主要|常用|配套|相关|专用|通用|各类|多种|其余|剩余|上述|前者|后者)/u,p=/(?:备用|租赁|租用)/u,q=/不使用|不采用|不配置|无需|未采用|不得使用|禁止使用/u,r=RegExp(`([\\p{Script=Han}A-Za-z0-9]{2,8}(?:${l}))$`,"u");function s(a){let b=a.replace(/\s+/gu,""),c=b;for(let a=b.length-1;a>=0;a-=1)if(m.test(b[a])){if(p.test(b.slice(0,a+1)))return;c=b.slice(a+1);break}if(!(c.length<2||n.test(c))&&!o.test(c))return c}function t(a){let b=[],c=RegExp(`([\\p{Script=Han}A-Za-z0-9]{2,8}(?:${l}))[^\\d。;;\\n|、,]{0,12}(\\d+)\\s*(?:台|套|辆)`,"gu");for(let d of a.matchAll(c)){let c=d.index??0,e=Math.max(a.lastIndexOf(",",c),a.lastIndexOf("。",c),a.lastIndexOf(";",c),a.lastIndexOf(";",c),a.lastIndexOf("\n",c),a.lastIndexOf("、",c));if(q.test(a.slice(e+1,c+d[1].length)))continue;let f=s(d[1]);if(!f)continue;let g=Number(d[2]);Number.isFinite(g)&&!(g<=0)&&b.push({name:f,raw:d[1],count:g,start:c,text:d[0]})}return b}function u(a){let b=new Set,c=RegExp(`([\\p{Script=Han}A-Za-z0-9]{2,8}(?:${l}))`,"gu");for(let d of a.matchAll(c)){let a=s(d[1]);a&&b.add(a)}return[...b]}function v(a){let b=r.exec(a);if(b)return s(b[1])}function w(a){let b=(a||"").replace(/\s+/gu,"");return b?/m[3³]|立方米|方/u.test(b)?"volume":/m[2²]|㎡|平方米/u.test(b)?"area":/m|米/u.test(b)?"length":/吨|千克|公斤|kg|^t$/u.test(b)?"mass":/套|个|块|根|只|组|件|片|樘|扇|盏|座|台|处|项|条|副|对|株/u.test(b)?"count":null:null}function x(a){return(a||"").replace(/\s+/gu,"").toUpperCase()}function y(a){let b=(a||"").trim().toLowerCase();if(!b)return[];let c=new Set([b.replace(/[((][^))]*[))]/gu,"").trim()]);for(let a of b.matchAll(/[((]([^))]*)[))]/gu))c.add((a[1]||"").trim());return[...c].filter(a=>a.length>0)}function z(a,b){if(!a)return;let c=(a.resources?.labor?.composition??[]).filter(a=>a.trade&&Number.isFinite(a.count)&&a.count>0).map(a=>({trade:a.trade,count:a.count})),d=new Map;for(let b of a.resources?.equipment??[]){if(!b.name)continue;let a=d.get(b.name);a?a.push(b):d.set(b.name,[b])}let e=[];for(let[a,b]of d)for(let c of b){let d=c.quantity&&c.quantity>0?c.quantity:Math.round(((c.min??1)+(c.max??c.min??1))/2);Number.isFinite(d)&&!(d<=0)&&e.push({name:a,spec:c.spec||"",count:d,variantCount:b.length})}let f=new Map;for(let b of a.materialsPlan??[]){if(!b.name)continue;let a=f.get(b.name);a?a.push(b):f.set(b.name,[b])}let g=[];for(let[a,b]of f)if(!(b.length<2))for(let c of b){if(!c.spec||!Number.isFinite(c.quantity)||(c.quantity??0)<=0)continue;let d=w(c.unit||"");d&&g.push({name:a,spec:c.spec,quantity:c.quantity,unit:c.unit||"",family:d,variantCount:b.length})}return{composition:c,equipment:e,materials:g,scopedQuantities:function(a){let b=new Map;if(!a)return b;for(let c of a.entries){let a=(c.name||"").trim();if(!a||!Number.isFinite(c.quantity))continue;let d=(c.villageGroup||c.section||"").trim();for(let e of c.specQuantityPairs||[]){let c=(e.spec||"").trim();if(!c)continue;let f=/^([\d,,]+(?:\.\d+)?)\s*(\S*)$/u.exec((e.quantity||"").trim());if(!f)continue;let g=Number.parseFloat(f[1].replace(/[,,]/gu,""));if(!Number.isFinite(g))continue;let h=`${a}\u0000${x(c)}`,i=b.get(h)||[];i.push({value:g,unit:f[2]||"",scope:d}),b.set(h,i)}}return b}(b)}}function A(a,b){let c=[],l=new Set(b.composition.map(a=>a.trade)),m=(a,b)=>{let c=[];if(!b)return c;let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(-1===e)break;c.push(e),d=e+b.length}return c},n=(a,b)=>{let c=[];if(!b)return c;let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(-1===e)break;let f=a[e-1]||"",g=`${f}${b}`;if(/[\u4e00-\u9fa5]/u.test(f)&&[...l].some(a=>a.length>b.length&&a.includes(g))){d=e+b.length;continue}c.push(e),d=e+b.length}return c},o=[...new Set(b.materials.map(a=>a.name).filter(a=>a.length>=2))],p=(a,b)=>{let c,d=Math.max(a.lastIndexOf(",",b-1),a.lastIndexOf(",",b-1),a.lastIndexOf("。",b-1),a.lastIndexOf(";",b-1),a.lastIndexOf(";",b-1),a.lastIndexOf("\n",b-1))+1,e=a.slice(d,b);for(let a of o){let b=e.lastIndexOf(a);!(b<0)&&(!c||b>c.at||b===c.at&&a.length>c.name.length)&&(c={name:a,at:b})}return c?.name},q=function(a){let b=[],c=0;for(;c<=a.length;){let d=a.indexOf("\n",c),e=-1===d?a.length:d;if(b.push({start:c,end:e}),-1===d)break;c=d+1}let d=/^\s*(?:#|\||>)/u,e=[],f=0;for(;f<b.length;){let c=b[f],g=a.slice(c.start,c.end);if(""===g.trim()||d.test(g)){f+=1;continue}let h=f;for(;h+1<b.length;){let c=b[h+1],e=a.slice(c.start,c.end);if(""===e.trim()||d.test(e))break;h+=1}e.push({start:c.start,end:b[h].end}),f=h+1}return e}(a),r=[];for(let b of q){let c=a.slice(b.start,b.end);if(!c.includes("阶段"))continue;let d=[];for(let a of c.matchAll(RegExp(k.source,"gu")))d.push({start:b.start+(a.index??0),total:Number(a[1])});if(0!==d.length)for(let[c,f]of d.entries()){let g=f.start,h=d[c+1]?.start??b.end,j=a.slice(g,h),k=0;for(let a of l)for(let b of n(j,a)){let c=j.slice(b+a.length,b+a.length+12),d=i.exec(c);d&&(!d[1]||e.test(d[1]))&&(k+=Number(d[2]))}k>0&&k===f.total&&r.push({start:g,end:h})}}let s=a=>r.some(b=>a>=b.start&&a<b.end);for(let d of b.composition)for(let b of n(a,d.trade)){if(s(b))continue;let g=a.slice(0,b),h=Math.max(g.lastIndexOf("。"),g.lastIndexOf(";"),g.lastIndexOf(";"),g.lastIndexOf("\n"));if(f.test(g.slice(h+1)))continue;let j=a.slice(b+d.trade.length,b+d.trade.length+12),k=i.exec(j);if(!k||k[1]&&!e.test(k[1]))continue;let l=Number(k[2]);if(l===d.count)continue;let m=b+d.trade.length+k[1].length;c.push({kind:"trade",label:`工种构成 ${d.trade}`,start:m,end:m+k[2].length,actual:l,expected:d.count,message:`工种构成人数与蓝图权威不一致:${d.trade} 正文 ${l} 人,蓝图权威 ${d.count} 人`,suggestion:"工种构成表必须与蓝图工种构成唯一口径一致,各工种人数不得自行改写。"})}let u=new Map;for(let b of t(a)){let a=/(\d+)\s*(?:台|套|辆)$/u.exec(b.text);if(!a||void 0===a.index)continue;let c=b.start+a.index,d=u.get(c);(!d||d.length<b.name.length)&&u.set(c,b.name)}for(let d of b.equipment)if(1===d.variantCount)for(let b of m(a,d.name)){let e=a.slice(b+d.name.length,b+d.name.length+12),f=j.exec(e);if(!f||f[1]&&!g.test(f[1]))continue;let h=Number(f[2]),i=b+d.name.length+f[1].length,k=u.get(i);(!k||k.includes(d.name)||d.name.includes(k))&&h!==d.count&&c.push({kind:"equipment",label:`机械台数 ${d.name}`,start:i,end:i+f[2].length,actual:h,expected:d.count,message:`机械台数与蓝图权威不一致:${d.name} 正文 ${h} 台,蓝图权威 ${d.count} 台`,suggestion:"机械投入计划必须与蓝图机械清单一致,台数不得自行改写。"})}else if(d.spec)for(let b of m(a,d.spec)){let e=a.lastIndexOf("\n",b)+1,f=a.indexOf("\n",b);-1===f&&(f=a.length);let g=a.slice(e,f),h=b-e,i=e+Math.max(g.lastIndexOf(",",h)+1,g.lastIndexOf("。",h)+1,g.lastIndexOf(";",h)+1);if(!a.slice(i,f).includes(d.name))continue;let j=b+d.spec.length,k=a.slice(j,j+12),l=/(\d+(?:\.\d+)?)\s*台/u.exec(k);if(!l)continue;let m=Number(l[1]);if(m===d.count)continue;let n=j+(l.index??0);c.push({kind:"equipment",label:`机械台数 ${d.name}(${d.spec})`,start:n,end:n+l[1].length,actual:m,expected:d.count,message:`机械台数与蓝图权威不一致:${d.name}(${d.spec}) 正文 ${m} 台,蓝图权威 ${d.count} 台`,suggestion:"机械投入计划必须与蓝图机械清单一致,台数不得自行改写。"})}for(let e of b.materials)for(let f of m(a,e.spec)){let g=a.lastIndexOf("\n",f)+1,i=a.indexOf("\n",f);-1===i&&(i=a.length);let j=a.slice(g,i);if(/^\s*\|?\s*(?:合计|小计|总计|累计)/u.test(j))continue;let k=f-g,l=g+Math.max(j.lastIndexOf(";",k),j.lastIndexOf(";",k),j.lastIndexOf("。",k))+1,m=j.indexOf(";",k),n=j.indexOf(";",k),o=j.indexOf("。",k),q=Math.min(-1===m?j.length:m,-1===n?j.length:n,-1===o?j.length:o);if(!a.slice(l,g+q).includes(e.name))continue;let r=p(a,f);if(r&&r!==e.name)continue;let s=f+e.spec.length,t=a.slice(s,s+16),u=h.exec(t);if(!u)continue;let v=u[2];if(w(v)!==e.family)continue;let z=Number(u[1]),A=(b.scopedQuantities.get(`${e.name}\u0000${x(e.spec)}`)||[]).filter(a=>w(a.unit)===e.family);if(!function(a,b,c){let e=[...y(b.unit),...c.flatMap(a=>y(a.unit))];return 0===e.length||e.some(b=>(0,d.Q0)(a,b))}(v,e,A))continue;let B=function(a,b){let c=[...new Set(a.map(a=>a.scope).filter(a=>a.length>0))];if(c.length<2)return;let d=c.filter(a=>(function(a){let b=(a||"").trim();if(b.length<2)return[];let c=new Set([b]);for(let a of b.split(/[、,,;;/()()\s]+/u)){let b=a.trim();b.length>=2&&c.add(b)}for(let a of b.matchAll(/\d+#[\p{Script=Han}]{2}/gu))c.add(a[0]);return[...c].filter(a=>a.length>=2)})(a).some(a=>b.includes(a)));if(1!==d.length)return;let e=[...new Set(a.filter(a=>a.scope===d[0]).map(a=>a.value))];if(0!==e.length)return 1===e.length?e:[...e,e.reduce((a,b)=>a+b,0)]}(A,a.slice(l,g+q)),C=[...new Set(A.map(a=>a.value))],D=C.length>1?C.reduce((a,b)=>a+b,0):void 0;if((B??[...C,...void 0===D?[]:[D],e.quantity]).some(a=>1e-9>Math.abs(a-z)))continue;let E=e.quantity,F="蓝图权威",G=B&&1===B.length?B[0]:void 0;if(void 0!==G?(E=G,F="清单逐条口径"):1===C.length&&(E=C[0],F="清单逐条口径"),z===E)continue;let H=s+u[0].indexOf(u[1]);c.push({kind:"material",label:`材料拆分 ${e.name}(${e.spec})`,start:H,end:H+u[1].length,actual:z,expected:E,message:"蓝图权威"===F?`材料规格拆分数量与蓝图权威不一致:${e.name}(${e.spec})正文 ${z}${e.unit},蓝图权威 ${e.quantity}${e.unit}`:`材料规格拆分数量与清单逐条口径不一致:${e.name}(${e.spec})正文 ${z}${e.unit},清单逐条口径 ${E}${e.unit}${1e-9>Math.abs(e.quantity-E)?"":`(蓝图汇总 ${e.quantity}${e.unit} 为跨单体总量,不得直接引用到单体语句)`}`,suggestion:"同名多规格材料的拆分数量必须与清单逐项一致,不得自行分配;单体语句的数量按该单体的清单逐条口径引用,不得引用跨单体汇总值。"})}return c}function B(a,b){if(!b)return{markdown:a,fixedCount:0,details:[],residualCount:0};let c=A(a,b);if(0===c.length)return{markdown:a,fixedCount:0,details:[],residualCount:0};let d=[...c].sort((a,b)=>b.start-a.start),e=a,f=[],g=1/0;for(let a of d)a.end>g||(e=`${e.slice(0,a.start)}${a.expected}${e.slice(a.end)}`,f.push(a),g=a.start);let h=A(e,b);return h.length>0?{markdown:a,fixedCount:0,details:[],residualCount:h.length}:{markdown:e,fixedCount:f.length,details:f.map(a=>`${a.label} ${a.actual}→${a.expected}`),residualCount:0}}},71678:(a,b,c)=>{c.d(b,{Hf:()=>t,M8:()=>n,Xp:()=>r,a0:()=>m,dn:()=>s,hM:()=>l,mI:()=>v,xb:()=>q});var d=c(37047),e=c(41991),f=c(70208),g=c(30111);let h=["对与评标活动有关的工作人员的纪律要求","评标委员会成员与投标人接触的限制","评标纪律与廉洁从业承诺要求","评审争议处理与投标澄清配合程序","评审结果确认与中标公示流程","评标办法与分值构成说明","异常低价评审与计算方式说明","清单计量与报价口径约定","投标文件实质性响应要求","投标保证金缴纳与退还程序","开标程序与投标文件递交截止时间","评标期间行为管控与资料闭环","预付款与进度款支付比例约定","履约担保与保证金缴纳退还约定","价格波动与合同价款调整约定","暂列金额与暂估价使用约定","税费计取与发票结算约定","违约责任与罚款赔偿条款"],i=["劳动力配置计划与高峰期人数安排","施工质量保证措施与验收标准","安全生产管理与教育培训要求","施工进度计划与关键线路安排","材料设备采购进场计划与检验要求","施工现场文明施工与环境保护管理","劳动纪律与班组作业管理制度","施工机械设备配置与维护保养计划","农民工工资支付保障与劳务实名制管理","材料采购质量证明与进场验收管理","工期承诺与进度考核奖惩管理"],j=/评标|投标|行贿|打招呼|递条子|廉洁|串标|围标|弄虚作假|干扰评标|纪律|澄清|中标|报价|清单计量|评审|保证金|开标|递交|争议|异常低价|评标基准价|预付款|进度款|担保|价格波动|材料调差|暂列金额|暂估价|计税|税金|发票|违约|业绩证明|类似(?:工程)?业绩|获奖|荣获|协会颁发|营业执照|资质证书|安全生产许可证|认证证书|管理体系认证|审计报告|信用等级|信用评价|社保证明|无行贿犯罪|中标查询|中标公示|中标结果|电子交易系统|公共资源交易|质疑投诉|评标委员会/u;function k(a){let b=a.sectionTitle?.trim()||"",c=(a.content||"").replace(/\s+/gu," ").slice(0,400);return b?`${b}。${c}`:c}function l(a){let b=a.sectionTitle?.trim()||a.content.replace(/\s+/gu,"").slice(0,60);return`${a.filePath}::${b}`}async function m(a,b){if(0===a.length)return{safe:[],excluded:[]};let c=a.filter(a=>j.test(k(a)));if(0===c.length)return{safe:[...a],excluded:[]};let e=c.map(k),f=await (0,d.Mv)(e,[...h],b),g=await (0,d.Mv)(e,[...i],b),l=new Set;for(let a of c){let b=k(a),c=Math.max(...h.map(a=>f(b,a))),d=Math.max(...i.map(a=>g(b,a)));c>=.6&&c>d&&l.add(a)}return{safe:a.filter(a=>!l.has(a)),excluded:[...l]}}async function n(a){return(0,e.A)({prototypes:[...h],negativePrototypes:[...i],threshold:.6,embedDocuments:a})}function o(a){return a.replace(/[\s\p{P}\p{S}]+/gu,"").toLowerCase()}let p=/^(?:我公司|本公司|我方|投标人|供应商|承包人)(?:就|对)[^,。;]{0,22}(?:均属|属实|真实有效|承担|负责|无异议|为准)$/u;function q(a){let b=a.trim().replace(/\s+/gu,"");if(!b||(0,f.mq)(b)||p.test(b))return!0;let c=o(b);if(h.some(a=>o(a)===c))return!0;let d=b.replace(/农民工工资保证金|工资保证金/gu,""),e=/评标|投标|开标|中标|评审|保证金|串标|围标|廉洁|询标|递交/u.test(d),g=/纪律|监督|争议|澄清|程序|行为|管控|限制|接触|公示|承诺|响应|办法/u.test(b);return!!(e&&g||/异常低价|评标基准价/u.test(b)||/电子保函|保函|投标保证金|履约担保|履约保证金|保证金(?:的)?(?:缴纳|退还|提交|方式)/u.test(b)&&!/农民工|工资|专用账户|实名|考勤|劳资/u.test(b)||/暂列金额|暂估价|材料调差/u.test(b)||/预付款(?:支付|比例|约定|申请|保函)|进度款(?:支付|申请|计量|约定)|履约担保/u.test(b)||/价格波动(?:调整|约定)|违约金(?:条款|约定)|计税|税金(?:计取|结算)|发票(?:开具|结算)/u.test(b))||r(b)}function r(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))||"technical"!==(0,g.m)(b)||!!/营业执照|资质证书|安全生产许可证|资格预审|资格审查|资质审查|财务状况|业绩证明|业绩要求|银行资信|审计报告|信用记录|信用评价|不良行为记录|联合体投标|联合体协议/u.test(b)&&!/施工|技术|方案|措施|管理|控制|验收|工艺|流程|计划|组织|进度|质量|工期|文明|绿色|环保|节能|材料|设备|机械|人员|劳务|检验|检测|试验|保证|落实|制度/u.test(b)}function s(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&(!!/接受分包/u.test(b)||!!/投标人|投标方|投标企业|承包人资格|资格要求|资格审查|资格预审|资质要求|资质条件|资质等级|资格条件|财务状况|业绩要求|业绩证明|信用要求|联合体|社保/u.test(b)&&/营业执照|资质证书|安全生产许可证|级及以上资质|注册建造师|建造师注册证书|安全生产考核合格证书|职称证书|财务状况|财务报告|审计报告|银行资信|业绩证明|类似业绩|信用记录|信用评价|不良行为记录|投标保证金|履约保证金|社保|在建工程|人员组成表/u.test(b))}function t(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&!!(/你方/u.test(b)&&/我方/u.test(b)||/发包人[^。;;]{0,30}?(?:审批|批准|备案|同意|许可)/u.test(b)||/^[\d((、..\s]{0,8}监理人/u.test(b)&&/(?:提交|报送|审批|延期|通知|检查|验收)/u.test(b)||/(?:特别约定|有关约定|的约定)[::]/u.test(b)||/通用(?:合同)?条款/u.test(b)||/(?:承包人|发包人|监理人)/u.test(b)&&/(本合同|报送|提交|审批|备案|更换|违约责任|撤换|拒绝|保管|验收记录|签字|颁发|教育|穿戴|定期检查|授权范围|驻场|在岗)/u.test(b))}async function u(a){let b=a.sections.filter(a=>a?.trim());if(0===b.length)return[];let c=b.filter(a=>!q(a)),e=c.filter(a=>j.test(a));if(0===e.length)return c;let f=`${a.chapterTitle} ${a.chapterPurpose||""}`.trim(),g=await (0,d.Mv)(e,[...h],a.embedDocuments),k=await (0,d.Mv)(e,f?[f]:[],a.embedDocuments),l=await (0,d.Mv)(e,[...i],a.embedDocuments),m=new Set;for(let a of e){let b=Math.max(...h.map(b=>g(a,b))),c=f?k(a,f):0,d=Math.max(...i.map(b=>l(a,b)));b>=.6&&b>c&&b>d&&m.add(a)}return c.filter(a=>!m.has(a))}async function v(a,b){return Promise.all(a.map(async a=>({...a,sections:await u({sections:a.sections||[],chapterTitle:a.title,chapterPurpose:a.purpose,embedDocuments:b})})))}},73859:(a,b,c)=>{c.d(b,{$i:()=>f,E1:()=>j,d2:()=>i,oC:()=>g,p4:()=>d,rF:()=>h});let d={id:"default_general_document",name:"通用文档",factFields:[{id:"document_identity",name:"对象名称",aliases:["项目名称","工程名称","文档名称","任务名称","招标项目名称","建设项目名称"],category:"identity",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.75,minForValidation:.85,allowPathOnly:!1},conflictPolicy:"strict"},{id:"schedule_requirement",name:"周期要求",aliases:["计划工期","工期","周期要求","进度节点要求","开工日期","竣工日期"],category:"schedule",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"strict"},{id:"quality_requirement",name:"质量要求",aliases:["质量要求","质量标准","验收要求","评价标准"],category:"quality",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"safety_requirement",name:"安全合规要求",aliases:["安全要求","安全合规要求","风险控制要求","合规要求"],category:"safety",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"technical_parameter",name:"技术参数",aliases:["技术参数","参数规格范围","规格","型号","尺寸","标准编号","材料设备"],category:"technical",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"resource_plan",name:"资源配置",aliases:["劳动力","机械","检测设备","应急物资","资源配置","人员配置"],category:"resource",cardinality:"multiple",derivationPolicy:"plan_inferable",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.45,minForValidation:.55,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"commercial_data",name:"商务数据",aliases:["报价","单价","合价","综合单价","预留金","税率","金额","利润"],category:"commercial",cardinality:"multiple",derivationPolicy:"forbidden",usagePolicy:"do_not_use",confidencePolicy:{minForGeneration:1,minForValidation:1,allowPathOnly:!1},conflictPolicy:"ignore"},{id:"rule_requirement",name:"规则要求",aliases:["规则要求","变更说明","实施范围","对象范围","结构化数据范围"],category:"compliance",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.6,minForValidation:.7,allowPathOnly:!1},conflictPolicy:"allow_multiple"}],forbiddenValuePatterns:[/投标报价|报价明细|单价|合价|综合单价|预留金|暂列金额|税率|增值税|利润|结算/u],diagnosticValuePatterns:[/OCR|识别错误|乱码|无法确认|疑似|不确定|绑定片段|兜底|知识库|提示词|后台|文件路径|PDF|DWG|Excel/u,/^#+\s*/u,/^见(?:招标|投标人|前附|补疑|图纸|清单|文件|资料|公告|须知)/u],lowConfidenceValuePatterns:[/无法确认|疑似|不确定|需复核|文字模糊|语义断裂|识别错误|乱码/u]},e={...d,id:"construction_organization_design",name:"施工组织设计"};function f(a,b=""){let c=`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`;return/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u.test(c)?e:d}function g(a,b){if(b)return a.factFields.find(a=>a.name===b||a.aliases.some(a=>b.includes(a)||a.includes(b)))}function h(a,b){return a.forbiddenValuePatterns.some(a=>a.test(b))}function i(a,b){return a.diagnosticValuePatterns.some(a=>a.test(b))}function j(a,b){return a.lowConfidenceValuePatterns.some(a=>a.test(b))}},75251:(a,b,c)=>{c.d(b,{As:()=>k,C4:()=>E,FW:()=>r,NN:()=>y,az:()=>M,e:()=>J,j9:()=>s,uv:()=>w,w6:()=>z});var d=c(7148);function e(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function f(a){let b=Number.parseFloat(a.replace(/[,,\s]/gu,""));return Number.isFinite(b)?b:void 0}function g(a,b){return Math.abs(a-b)<=.01+1e-6*Math.max(Math.abs(a),Math.abs(b))}function h(a,b){return!!g(a,b)||Number.isInteger(a)&&(Math.trunc(b)===a||Math.round(b)===a)}function i(a){return a.replace(/\s+/gu,"").toLowerCase()}function j(a){return(0,d.Sn)(String(a||""))}let k=/(?:每|厚度|宽度|高度|深度|长度|直径|间距|净距|坡度|标高|偏差|误差|系数|等级|龄期|温度|含水率|压实度|密度|功率|电压|照度|色温|耐火|强度|抗渗|配合比|搭接|错缝|含水|埋深|覆土|预留|预埋|伸缩|沉降|变形|垂直度|平整度|倾角|坡度|模数|螺距|壁厚|净空|层高|埋设|位置|距离|半径|周长|坡度|距地|距墙|距顶|距梁|距楼|离地|离墙)/u,l=/^(?:以上|以下|以内|左右|及[^。;;,,]{0,8}(?:以上|以下|以内|左右))/u;function m(a){let b=[],c=[],d=new Map,e=new Map,h=a.billFactLock;if(h)for(let a of h.entries){let e=Number.isFinite(a.quantity)?a.quantity:void 0;for(let g of(void 0!==e&&(b.push({name:(a.name||"").trim(),value:e,unit:(a.unit||"").trim(),description:a.description||"",source:"bill"}),c.push(e)),a.specQuantityPairs||[])){let b=(g.spec||"").replace(/\s+/gu,"").toLowerCase(),e=/^([\d,,]+(?:\.\d+)?)\s*(.*)$/u.exec((g.quantity||"").trim()),h=e?f(e[1]):void 0;if(!b||void 0===h)continue;let i=d.get(b)||[];i.push({value:h,unit:(e?.[2]||"").trim(),entryName:a.name,spec:(g.spec||"").trim()}),d.set(b,i),c.push(h)}}for(let[d,f]of Object.entries(a.blueprintData?.quantities??{})){if("number"!=typeof f?.value||!Number.isFinite(f.value))continue;for(let a of(b.push({name:d.trim(),value:f.value,unit:(f.unit||"").trim(),description:"",source:"blueprint"}),c.push(f.value),f.groups??[]))c.push(a.value);let a=f.specBreakdown??[];if(a.length>=2){let b=a.reduce((a,b)=>a+b.value,0);for(let h of(e.set(d.trim(),{value:f.value,unit:(f.unit||"").trim(),specs:new Map(a.map(a=>[i(a.spec),a.value])),breakdown:a.map(a=>({spec:a.spec,value:a.value})),partitioned:g(b,f.value)}),a))c.push(h.value)}}return!function(a,b){if(!a)return;let c=a=>{if("number"==typeof a){Number.isFinite(a)&&b.push(a);return}if("string"==typeof a){for(let c of a.matchAll(/\d+(?:\.\d+)?/gu))b.push(Number.parseFloat(c[0]));return}if(Array.isArray(a))return void a.forEach(c);a&&"object"==typeof a&&Object.values(a).forEach(c)};[a.project,a.schedule,a.quality,a.safety,a.resources,a.preciseFacts,a.bills,a.drawings,a.rules,a.specifications,a.tables].forEach(c)}(a.factsModel,c),{entries:b,numberPool:c,specValues:d,aggregateSpecs:e}}let n=/(?:合计|共计|总计|总共|总量|总数|总长|全长|总长度|总数量|总面积|总重量|小计)(?:为|达|约|共|计)?\s*([\d,,]+(?:\.\d+)?)\s*(立方米|m³|m3|平方米|㎡|m²|m2|公里|千米|km|kg|吨|t|座|个|套|处|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|m)(?![a-zA-Z0-9²³])/gu;function o(a,b,c=2){if(!a||!b)return!1;let d=Math.min(a.length,8);for(let e=d;e>=c;e-=1)for(let c=0;c+e<=a.length;c+=1)if(b.includes(a.slice(c,c+e)))return!0;return!1}function p(a,b){let c=function(a){switch(j(a)){case"m":return"(?:m|米)";case"km":return"(?:km|公里|千米)";case"m2":return"(?:m2|m\xb2|㎡|平方米)";case"m3":return"(?:m3|m\xb3|立方米)";case"t":return"(?:t|吨)";case"kg":return"(?:kg|千克)";default:return e((a||"").trim())}}(b.unit);for(let d of function(a){let b=`${a}`,c=new Set([b]),[d,e]=b.split(".");return d.length>=4&&c.add(`${d.replace(/\B(?=(\d{3})+(?!\d))/gu,",")}${e?`.${e}`:""}`),[...c]}(b.value)){let f=e(d);if(RegExp(`${f}\\s*(?:${c})|(?:${c})\\s*${f}`,"u").test(a)||b.value>=100&&RegExp(`(?<![\\d.])${f}(?![\\d])`,"u").test(a))return!0}return!1}function q(a,b,c){let d=a.filter(a=>a.name.length>=2&&o(a.name,c));if(d.length<2||d.length>24)return[];for(let a=0;a<d.length;a+=1)for(let c=a+1;c<d.length;c+=1){let e=d[a],f=d[c];if(!(e.name===f.name&&g(e.value,f.value))&&g(e.value+f.value,b))return[e,f]}return[]}let r=/(?:合计|共计|总计|总共|总量|总数|总长|全长|总长度|总数量|总面积|总重量|小计)(?:为|达|约|共|计)?\s*$/u;function s(a){let b=j(a.unit);if(!(a.total>0)||!b||!a.context)return null;let c=a.values.filter(c=>c.value>0&&c.name.length>=2&&j(c.unit)===b&&o(c.name,a.context));if(c.length<2)return null;let d=new Map;for(let a of c){let b=`${a.name}\u0000${a.kind??"entry"}`,c=d.get(b);c?c.push(a):d.set(b,[a])}for(let b of d.values())if(!(b.length<2)&&g(b.reduce((a,b)=>a+b.value,0),a.total))return b;let e=new Map;for(let a of c){let b=a.value.toFixed(4),c=e.get(b);c?c.push(a):e.set(b,[a])}for(let b of c)for(let c of e.get((a.total-b.value).toFixed(4))??[])if(c!==b&&c.name!==b.name&&g(b.value+c.value,a.total))return[b,c];return null}function t(a,b,c,d,e){let f=new Map;for(let a of d.entries){if(!(a.value>0)||j(a.unit)!==b)continue;let c=`${a.source}\u0000${a.name}`;f.set(c,(f.get(c)||0)+a.value)}let h=[];for(let[a,b]of f)if(o(a.slice(a.indexOf("\0")+1),c)&&(h.some(a=>g(a,b))||h.push(b),h.length>=24))break;if(0===h.length)return!1;let i=b=>g(b,a)||function(a,b){let c=0,d=a.length;for(;c<d;){let e=c+d>>1;a[e]<b?c=e+1:d=e}for(let d=Math.max(0,c-1);d<=Math.min(a.length-1,c+1);d+=1)if(g(a[d],b))return!0;return!1}(e,a-b);if(h.some(a=>i(a)))return!0;for(let a=0;a<h.length;a+=1)for(let b=a+1;b<h.length;b+=1)if(i(h[a]+h[b]))return!0;return!1}function u(a,b){let c=[];if(0===b.entries.length)return c;let d=new Set,e=[...b.numberPool].sort((a,b)=>a-b);for(let h of a.matchAll(n)){let i=f(h[1]);if(void 0===i)continue;let k=j(h[2]),l=h.index??0,m=l+h[0].length,n=b.entries.filter(a=>a.value>0&&j(a.unit)===k);if(0===n.length)continue;let r=a.slice(Math.max(0,l-40),l+h[0].length+40),s=a.slice(Math.max(0,l-20),l+h[0].length),u=n.filter(a=>a.name.length>=3&&s.includes(a.name)).sort((a,b)=>b.name.length-a.name.length)[0];if(u){if(g(u.value,i)){let b=q(n,i,r);if(b.length>=2){let e=a.slice(Math.max(0,l-150),l+h[0].length+150),f=b.filter(a=>!p(e,a));if(f.length>0){let a=b.map(a=>`「${a.name}」${a.value}${a.unit}`).join(" + "),e=`合计数值应分项显式:「${u.name} ${i}${h[2]}」= ${a},但正文未展示分项(缺 ${f.map(a=>`${a.name} ${a.value}${a.unit}`).join("、")}),无法核对合计来源`;d.has(e)||(d.add(e),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:e,suggestion:`在合计值附近补充分项明细(${a}),使合计数值可逐项核对;分项值必须取自工程量清单原文,不得改动。`},matchStart:l,matchEnd:m}))}}continue}let f=i-u.value,j=n.find(a=>a!==u&&a.name!==u.name&&g(a.value,f));if(j){let b=a.slice(Math.max(0,l-150),l+h[0].length+150);if(p(b,u)&&p(b,j))continue;let e=`合计值与权威不符:「${u.name}」清单权威 ${u.value}${h[2]};正文 ${i}${h[2]} \u2248 ${u.value} + ${j.value}(「${j.name}」)——若「${j.name}」应计入「${u.name}」合计,须在正文显式分项;若不应计入(重复计入),须改回权威值 ${u.value}${h[2]}`;d.has(e)||(d.add(e),c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:e,suggestion:`核对合计口径:「${u.name}」合计为 ${u.value}${h[2]}(清单权威)。若正文需表达 ${u.value} + ${j.value},则显式写成「${u.name} ${u.value}${h[2]}、${j.name} ${j.value}${h[2]},合计 ${i}${h[2]}」;否则将合计改回 ${u.value}${h[2]}(差额 ${Math.round(1e4*f)/1e4}${h[2]} 属「${j.name}」,不得并入)。`},matchStart:l,matchEnd:m}));continue}if(t(i,k,r,b,e))continue;let o=`合计值与权威不符:「${u.name}」合计为 ${u.value}${h[2]}(清单权威),正文写 ${i}${h[2]},且差额不属任何清单条目,需核对合计口径`;d.has(o)||(d.add(o),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:o,suggestion:`核对「${u.name}」的合计口径:若为多分项之和,请写明与权威一致的分项分解;若为单一总量,改为清单权威值 ${u.value}${u.unit||h[2]}。`},matchStart:l,matchEnd:m}));continue}let v=q(n,i,r);if(v.length>=2){let b=a.slice(Math.max(0,l-150),l+h[0].length+150),e=v.filter(a=>!p(b,a));if(e.length>0){let a=v.map(a=>`「${a.name}」${a.value}${a.unit}`).join(" + "),b=`合计数值应分项显式:正文合计 ${i}${h[2]} = ${a},但未展示分项(缺 ${e.map(a=>`${a.name} ${a.value}${a.unit}`).join("、")}),无法核对合计来源`;d.has(b)||(d.add(b),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:b,suggestion:`在合计值附近补充分项明细(${a});分项值必须取自工程量清单原文,不得改动。`},matchStart:l,matchEnd:m}))}continue}{let a=new Map;for(let b of n)a.set(b.name,(a.get(b.name)||0)+b.value);let b=!1;for(let c of a.values())if(g(c,i)){b=!0;break}if(b)continue}if(t(i,k,r,b,e))continue;let w=n.filter(a=>o(a.name,r)),x=n.some(a=>g(a.value,i)),y=b.numberPool.some(a=>g(a,i));if(!x&&!y&&w.length>0){let a=`合计值无权威来源:正文「${h[0].trim()}」在清单事实锁与蓝图参数桶中找不到同值来源,违反无据不写`;if(d.has(a))continue;d.add(a),c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:a,suggestion:"删除该合计数值或改为与清单权威一致的合计值;无权威来源的合计数不得进入交付文本。"},matchStart:l,matchEnd:m})}}return c}function v(a,b,c){let d=Math.max(0,b-60),e=a.slice(d,b),f=-1;for(let a=e.length-1;a>=0;a-=1)if(/[,、;;。!?!?\n]/u.test(e[a])){f=d+a;break}if(-1===f||b-f>40)return null;let g=/[,、;;]/u.test(a[f]),h=g?f:f+1,i=g?c:c+ +!!/[,、;;]/u.test(a[c]||"");return i<=h?null:{start:h,end:i,excerpt:a.slice(h,i).trim()}}function w(a,b){let c=m({markdown:a,...b});if(0===c.entries.length)return{markdown:a,fixedCount:0,details:[]};let d=a,e=[];for(let a=1;a<=4;a+=1){let a=[];for(let b of u(d,c)){if(!b.issue.message.startsWith("合计值无权威来源"))continue;let c=v(d,b.matchStart,b.matchEnd);c&&a.push(c)}if(0===a.length)break;let b=0,f=1/0;for(let c of[...a].sort((a,b)=>b.start-a.start))c.end>f||(d=d.slice(0,c.start)+d.slice(c.end),f=c.start,b+=1,e.push(`删除无源合计「${c.excerpt.slice(0,40)}」`));if(0===b)break}return{markdown:d,fixedCount:e.length,details:e}}function x(a,b,c){let d=m({markdown:a,...b});if(0===d.entries.length)return{markdown:a,fixedCount:0,details:[]};let e=a,f=[];for(let a=1;a<=4;a+=1){let a=[];for(let f of L(e,d,b.billFactLock)){if(!f.issue.message.startsWith(c.prefix))continue;let b=v(e,f.matchStart,f.matchEnd);b&&a.push(b)}if(0===a.length)break;let g=0,h=1/0;for(let b of[...a].sort((a,b)=>b.start-a.start))b.end>h||(e=e.slice(0,b.start)+e.slice(b.end),h=b.start,g+=1,f.push(c.detail(b.excerpt.slice(0,40))));if(0===g)break}return{markdown:e,fixedCount:f.length,details:f}}function y(a,b){return x(a,b,{prefix:"名称-数值绑定无源",detail:a=>`删除无源绑定「${a}」`})}function z(a,b){return x(a,b,{prefix:"名称-数值绑定错位",detail:a=>`删除错位绑定「${a}」`})}let A=/(?:DN|De|Φ|φ|Ø|dn|de)\s*\d+(?:\.\d+)?|(?<![A-Za-z0-9])[CM]\d{2,3}(?![0-9])|HRB\d+|HPB\d+|(?<![A-Za-z0-9])\d{2,4}\s*[×xX*]\s*\d{2,4}(?![0-9])|(?<![A-Za-z0-9])\d+(?:\.\d+)?\s*[kK]?[Ww](?![A-Za-z0-9])/gu,B=/运输车|搅拌车|罐车|挖掘机|挖机|装载机|压路机|摊铺机|打夯机|夯实机|洒水车|浇水车|吊车|起重机|泵车|地泵|发电机组|发电机|电焊机|空压机|水泵|提升泵|潜水泵|雾炮机|充桩|桩机|机械|设备|机具|车辆|机组/u;function C(a,b){for(let[c,d]of a.aggregateSpecs)if(d.specs.has(b))return{entryName:c,info:d}}function D(a,b){let c=[];if(0===b.specValues.size&&0===b.aggregateSpecs.size)return c;let d=new Set;for(let e of a.matchAll(A)){let h,j=i(e[0]),m=b.specValues.get(j)??[],n=C(b,j);if(0===m.length&&!n)continue;let p=(e.index??0)+e[0].length,q=a.slice(p,p+36),r=/^([^。;;\n|]{0,16}?)([\d,,]+(?:\.\d+)?)\s*(座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)(?![a-zA-Z0-9²³])/u.exec(q);if(!r||k.test(r[1])||l.test(q.slice(r[1].length+r[2].length+r[3].length))||/不大于|不超过|不得大于|不得超过/.test(r[1]))continue;let s=r[1],t=a.slice(Math.max(0,p+s.length-8),p+s.length);if(/\d\s*[~~至\-—–]\s*$/u.test(t))continue;if(/[、,,]/u.test(s)){let a=s.split(/[、,,]/u).pop()||"";if(/[\u4e00-\u9fa5]/u.test(a)&&!/合计|小计|共计|总计|总量|用量|总长|共/u.test(a))continue}if("台"===r[3]||"套"===r[3]){let b=p+r[1].length+r[2].length+r[3].length;if(B.test(r[1])||B.test(a.slice(b,b+12)))continue}if(/总长|全长|长度|管长|延米/u.test(r[1])&&/^(?:m|米|km|公里)$/u.test(r[3])||/^共$/u.test(r[1]||"")&&/(?:钢筋|配筋|编号)/u.test(a.slice(Math.max(0,(e.index||0)-60),(e.index||0)+60)))continue;let u=f(r[2]);if(void 0===u||0===u||m.some(a=>g(a.value,u)))continue;let v=n?.info.specs.get(j);if(void 0!==v&&g(v,u))continue;let w=new Map;for(let a of m){let b=w.get(a.entryName);b?b.value+=a.value:w.set(a.entryName,{value:a.value,unit:a.unit})}let x=[...w.values()].sort((a,b)=>b.value-a.value);if(m.length>=2&&x.some(a=>g(a.value,u)))continue;if(n?.info.partitioned&&void 0!==v&&g(n.info.value,u)){let a=i(r[1]);if(![...n.info.specs.keys()].some(b=>b!==j&&a.includes(b))){let a=n.info.breakdown.map(a=>`${a.spec} ${a.value}${n.info.unit}`).join(" + "),b=`规格-数值绑定错位:「${e[0]}」处数值 ${u}${r[3]} 是「${n.entryName}」的跨规格名称合计(${a}),不属于单一规格「${e[0]}」——名称合计不得挂给单一规格,须写该规格小计 ${v}${r[3]}(确需写合计须显式分解)`;if(!d.has(b)){d.add(b);let f=p+r[1].length;c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:b,suggestion:`「${e[0]}」的数量须写该规格小计 ${v}${r[3]};名称合计须显式分解为 ${a}(合计 ${n.info.value}${n.info.unit}),不得把合计值挂在单一规格名下。`},specToken:e[0],value:u,unit:r[3],valueStart:f,valueEnd:f+r[2].length,groupSumCandidates:[{value:v,unit:n.info.unit},...x.filter(a=>!g(a.value,u))]})}}continue}for(let[a,c]of b.specValues){if(a===j)continue;let b=c.find(a=>g(a.value,u));if(b){h={spec:b.spec||a,entryName:b.entryName};break}}if(!h||r[1]&&o(h.entryName,r[1]))continue;let y=`规格-数值绑定错位:正文「${e[0]} ${u}${r[3]}」中 ${u}${r[3]} 属规格「${h.spec}」(清单条目「${h.entryName}」),不属于「${e[0]}」的清单数量`;if(d.has(y))continue;d.add(y);let z=p+r[1].length;c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:y,suggestion:`「${e[0]}」的数量必须引用清单中该规格条目的原值(如 ${m.map(a=>`${a.value}${a.unit}`).join("、")});「${h.spec}」的数量不得张冠李戴至「${e[0]}」。`},specToken:e[0],value:u,unit:r[3],valueStart:z,valueEnd:z+r[2].length,groupSumCandidates:x.filter(a=>!g(a.value,u))})}for(let e of a.matchAll(A)){let h=i(e[0]),j=C(b,h);if(!j?.info.partitioned)continue;let l=j.info.specs.get(h);if(void 0===l)continue;let m=e.index??0,n=a.slice(Math.max(0,m-24),m),p=/([\d,,]+(?:\.\d+)?)\s*(座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)\s*([^。;;\n|0-9²³]{0,12})$/u.exec(n);if(!p)continue;let q=p[3];if(!/[((]|为|系|采用|型号|规格|灯型|类型/u.test(q)||k.test(q))continue;let r=f(p[1]);if(void 0===r||!g(j.info.value,r)||g(l,r)||!o(j.entryName,n))continue;let s=i(a.slice(Math.max(0,m-60),m+60));if([...j.info.specs.keys()].filter(a=>s.includes(a)).length>=2)continue;let t=m-q.length-p[2].length-p[1].length,u=`${h}@${t}`;if(d.has(u))continue;d.add(u);let v=j.info.breakdown.map(a=>`${a.spec} ${a.value}${j.info.unit}`).join(" + ");c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格-数值绑定错位:正文「…${r}${p[2]}${q}${e[0]}…」中 ${r}${p[2]} 为「${j.entryName}」的跨规格名称合计(${v}),其后紧随单一规格「${e[0]}」易被读作全部为该规格;名称合计须显式分解`,suggestion:`数量 ${r}${p[2]} 保留不动;把规格表述改为显式分解,如「${r}${p[2]}(${v})」或逐规格列写「${v}」;不得以名称合计搭配单一规格描述。`},specToken:e[0],value:r,unit:p[2],valueStart:t,valueEnd:t+p[1].length,groupSumCandidates:[]})}if(b.aggregateSpecs.size>0){let e=0;for(let h of a.split("\n")){let a=e;if(e+=h.length+1,!h.includes("|")||/^\s*\|?[\s:|-]*\|?\s*$/u.test(h))continue;let j=new Map;for(let a of h.matchAll(A)){let c=i(a[0]),d=C(b,c);if(!d?.info.partitioned)continue;let e=d.info.specs.get(c);if(void 0===e)continue;let f=j.get(d.entryName)||[];f.some(a=>a.key===c)||f.push({key:c,raw:a[0].trim(),specSum:e}),j.set(d.entryName,f)}if(1!==j.size)continue;let[k,l]=[...j.entries()][0];if(1!==l.length)continue;let m=b.aggregateSpecs.get(k);if(!m)continue;let{key:n,raw:p,specSum:q}=l[0];if(o(k,h))for(let e of h.matchAll(/\|([^|\n]*)/gu)){let h=e[1].trim(),i=/^([\d,,]+(?:\.\d+)?)\s*(?:座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)?$/u.exec(h);if(!i)continue;let j=f(i[1]);if(void 0===j||!g(m.value,j)||g(q,j)||(b.specValues.get(n)??[]).some(a=>g(a.value,j)))continue;let l=a+(e.index??0)+1+e[1].indexOf(i[1]),o=`${n}@${l}`;if(d.has(o))continue;d.add(o);let r=m.breakdown.map(a=>`${a.spec} ${a.value}${m.unit}`).join(" + ");c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格-数值绑定错位:表格行「${p}…」的数量 ${j}${m.unit} 是「${k}」的跨规格名称合计(${r}),该行规格为「${p}」应填其小计 ${q}${m.unit}`,suggestion:`该行数量改为 ${q}${m.unit};名称合计请另立「合计」行或显式分解为 ${r}。`},specToken:p,value:j,unit:m.unit,valueStart:l,valueEnd:l+i[1].length,groupSumCandidates:[{value:q,unit:m.unit}]})}}}return c}function E(a,b){let c=m({markdown:a,...b});if(0===c.specValues.size&&0===c.aggregateSpecs.size)return{markdown:a,fixedCount:0,details:[]};let e=a,f=[];for(let a=1;a<=8;a+=1){let a=D(e,c).filter(a=>a.groupSumCandidates.length>0);if(0===a.length)break;let b=0;for(let g of[...a].sort((a,b)=>b.valueStart-a.valueStart)){let a,h,i=g.groupSumCandidates.find(a=>{var b,c;return b=a.unit,(0,d.Sn)(b)===(c=g.unit,(0,d.Sn)(c))});if(i)a=e.slice(0,g.valueStart)+`${i.value}`+e.slice(g.valueEnd),h=`「${g.specToken}」绑定数值 ${g.value}${g.unit} → 组和值 ${i.value}${g.unit}`;else{let b=g.valueStart;for(;b>0&&/\s/u.test(e[b-1]);)b-=1;let c=g.valueEnd+g.unit.length;a=e.slice(0,b)+e.slice(c),h=`「${g.specToken}」移除张冠李戴数值 ${g.value}${g.unit}(无同单位替换候选,值不属该规格)`}D(a,c).some(a=>{let b=a.valueStart-g.valueStart;return b>=-4&&b<=4})||(e=a,b+=1,f.push(h))}if(0===b)break}return{markdown:e,fixedCount:f.length,details:f}}let F=/(?:埋深|覆土(?:厚度|深度)?|管顶覆土)(?:不小于|不大于|不低于|不超过|约|为|达|控制在|一般|宜|应)?[^。;;\n|]{0,10}?([\d,,]+(?:\.\d+)?)\s*(mm|cm|米|m)(?![a-zA-Z0-9²³])/gu,G=/(?:约为|大约|约计|约|将近|近)\s*([\d,,]+(?:\.\d+)?)\s*(点|处|座|个|套|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|公里|km|m2|㎡|m²|平方米|m3|m³|立方米|kg|吨|t|l|升|kw|w)(?![a-zA-Z0-9²³³])/giu,H=/([\d,,]+(?:\.\d+)?)\s*余\s*(点|处|座|个|套|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|公里|km|m2|㎡|m²|平方米|m3|m³|立方米|kg|吨|t)(?![a-zA-Z0-9²³])/gu,I=/[节制合履签违公盟密租最接靠邻附距离]/u,J=/^(?:管道|工程|材料|项目|施工|工作|设备|设施|系统|区域|场地|道路|建筑|结构|基础|主体|管网|土建|安装|装饰|装修|土方|绿化|照明|给水|排水|电气|挖方|填方|回填|弃方|外运|运输|检测|试验|测量|清理|拆除|清淤|维护|养护|管理|服务|其他|以上|以下|其中|包括|采用|使用|型号|规格|数量|单位|合计|总计|长度|面积|体积|重量)$/u,K=/(木质|木|铝合金|铝|不锈钢|塑钢|塑料|塑|钢|铁|砼|混凝土|铸铁|铜|复合)(门|窗|井|灯|护栏|围栏|盖板|雨水口)/gu;function L(a,b,c){let d=[],e=new Set,i=new Set,m=new Map;if(c)for(let a of c.entries){let b=(a.name||"").trim();if(b.length<2||!Number.isFinite(a.quantity))continue;let c=`${b}\u0000${j(a.unit)}`,d=m.get(c)||{count:0,samples:[]};d.count+=1;let e=`${a.quantity}${a.unit}`;d.samples.length<3&&!d.samples.includes(e)&&d.samples.push(e),m.set(c,d)}let n=b.entries.map(a=>`${a.name} ${a.description}`).join("\n"),p=new Map;{let a=new Map;for(let c of b.entries){if(!(c.value>0))continue;let b=`${c.source}\u0000${c.name}`,d=a.get(b);d?d.sum+=c.value:a.set(b,{name:c.name,sum:c.value})}for(let b of a.values()){let a=p.get(b.name)||[];a.push(b.sum),p.set(b.name,a)}}let q=new Map,r=new Map,s=new Map,t=(a,c,d)=>{let e=`${a}\u0000${c}`,f=q.get(e);if(f||(f=b.entries.filter(b=>b.name===a&&j(b.unit)===c&&b.value>0).map(a=>Math.round(100*a.value)),q.set(e,f)),f.length<2)return!1;let g=`${e}\u0000${Math.round(100*d)}`,h=r.get(g);if(void 0!==h)return h;let i=function(a,b){if(a.length<2||b<=0)return!1;let c=[...a].sort((a,b)=>a-b);if(c.some(a=>a===b))return!1;let d=c.reduce((a,b)=>a+b,0);if(b>d)return!1;let e=d-b;if(e>0&&e!==b){let a=Math.max(b,e);for(let d=0;d<c.length;d+=1)for(let f=d+1;f<c.length;f+=1){let g=c[d]+c[f];if(g>a)break;if(g===b||g===e)return!0}let d=0,f=c.length-1;for(;d<=f;){let a=d+f>>1;if(c[a]===e)return c.length>=3;c[a]<e?d=a+1:f=a-1}}else for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a]+c[d];if(e>b)break;if(e===b)return!0}if(c.length>40)return!1;let f=Math.ceil(c.length/2),g=c.slice(0,f),h=c.slice(f),i=a=>{let b=new Set([0]);for(let c of a){let a=new Set;for(let d of b)a.add(d),a.add(d+c);b=a}return b},j=i(h);for(let a of i(g))if(j.has(b-a))return!0;return!1}(f,Math.round(100*d));return r.set(g,i),i},u=(a,c)=>{let d=p.get(a)||[];if(0===d.length)return!1;let e=`${a}\u0000${Math.round(100*c)}`,f=s.get(e);if(void 0!==f)return f;let h=d.some(a=>b.numberPool.some(b=>g(a+b,c)));return s.set(e,h),h};if(c)for(let n of c.entries){let c=(n.name||"").trim();if(c.length<2||J.test(c)||!Number.isFinite(n.quantity))continue;let q=0,r=0;for(;r<6;){let s=a.indexOf(c,q);if(s<0)break;if(q=s+c.length,r+=1,/\d$/u.test(c)&&/^[\d.]/u.test(a.slice(s+c.length,s+c.length+1))){q=s+1;continue}if("量"===a.slice(s+c.length,s+c.length+1))continue;let v=a.slice(s+c.length,s+c.length+20),w=/^([^。;;\n|]{0,12}?)([\d,,]+(?:\.\d+)?)\s*(座|个|套|处|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|kg|吨|t)(?![a-zA-Z0-9²³])/u.exec(v);if(!w||k.test(w[1])||l.test(v.slice(w[1].length+w[2].length+w[3].length)))continue;let x=f(w[2]);if(void 0===x||0===x||h(x,n.quantity))continue;let y=j(w[3]);if(y!==j(n.unit)||b.entries.some(a=>a.name===c&&h(x,a.value)&&j(a.unit)===y)||(p.get(c)||[]).some(a=>g(a,x))||t(c,y,x)||u(c,x))continue;let z=a.slice(Math.max(0,s-32),s+c.length+20);if(function(a,b,c,d){for(let[e,f]of d)if(e!==b&&(e.includes(b)||b.includes(e)||o(e,c))&&f.some(b=>g(b,a)))return!0;return!1}(x,c,z,p))continue;let A=b.entries.find(a=>a.name!==c&&g(a.value,x)&&j(a.unit)===y);if(A&&o(A.name,z))continue;if(A){let a=`${s}\u0000${x}\u0000${y}`;if(i.has(a))continue;i.add(a);let b=m.get(`${c}\u0000${y}`),f=b&&b.count>1?`名称-数值绑定错位:「${c}」处数值 ${x}${w[3]} 属清单条目「${A.name}」(${A.value}${A.unit}),与同名清单条目(共 ${b.count} 条,如 ${b.samples.join("、")} 等)的权威数量均不符`:`名称-数值绑定错位:「${c}」处数值 ${x}${w[3]} 属清单条目「${A.name}」(${A.value}${A.unit}),与「${c}」清单数量 ${n.quantity}${n.unit} 不符`;if(e.has(f))continue;e.add(f),d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:f,suggestion:b&&b.count>1?`核对「${c}」的数量口径:同名清单条目共 ${b.count} 条(如 ${b.samples.join("、")} 等),逐一核对后引用对应条目数量;引用「${A.name}」数量时须明确对象名称,不得张冠李戴。`:`核对「${c}」的数量口径:清单权威值为 ${n.quantity}${n.unit};引用「${A.name}」数量时须明确对象名称,不得张冠李戴。`},matchStart:s,matchEnd:s+c.length+w[0].length});continue}if(function(a,b,c,d){let e=a.slice(Math.max(0,b-40),b+c+40),f=[];for(let a of e.matchAll(/\d+(?:\.\d+)?/gu)){let b=Number.parseFloat(a[0]);Number.isFinite(b)&&!g(b,d)&&f.push(b)}for(let a=0;a<f.length;a+=1)for(let b=a+1;b<f.length;b+=1)if(g(f[a]+f[b],d)||g(Math.abs(f[a]-f[b]),d))return!0;return!1}(a,s,c.length,x)||b.numberPool.some(a=>g(a,x)))continue;let B=`${s}\u0000${x}\u0000${y}`;if(i.has(B))continue;i.add(B);let C=m.get(`${c}\u0000${y}`),D=C&&C.count>1?`名称-数值绑定无源:「${c}」处数值 ${x}${w[3]} 与同名清单条目(共 ${C.count} 条,如 ${C.samples.join("、")} 等)的权威数量均不符,且在全部权威数据中找不到同值来源`:`名称-数值绑定无源:「${c}」处数值 ${x}${w[3]} 与清单权威 ${n.quantity}${n.unit} 不符,且在全部权威数据中找不到同值来源`;e.has(D)||(e.add(D),d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:D,suggestion:C&&C.count>1?`核对「${c}」的数量口径:同名清单条目共 ${C.count} 条(如 ${C.samples.join("、")} 等),逐一核对后引用对应条目的权威数量;无权威来源的数值不得与清单条目名称绑定出现。`:`将「${c}」的数量改为清单权威值 ${n.quantity}${n.unit};无权威来源的数值不得与清单条目名称绑定出现。`},matchStart:s,matchEnd:s+c.length+w[0].length}))}}for(let c of a.matchAll(K)){let h=c[0];if(n.includes(h))continue;let i=c[2],k=a.slice((c.index??0)+h.length,(c.index??0)+h.length+16),l=/^([^。;;\n|]{0,10}?)([\d,,]+(?:\.\d+)?)\s*(樘|扇|套|座|盏|个)(?![a-zA-Z0-9²³])/u.exec(k);if(!l)continue;let m=f(l[2]);if(void 0===m)continue;let o=b.entries.find(a=>a.name.includes(i)&&g(a.value,m)&&j(a.unit)===j(l[3]));if(!o)continue;let p=`名称口径不符:正文「${h} ${m}${l[3]}」——${m}${l[3]} 对应清单「${o.name}」条目,清单中不存在「${h}」,名称与清单权威不符`;if(e.has(p))continue;e.add(p);let q=c.index??0;d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:p,suggestion:`名称必须与清单条目口径一致:将「${h}」改为「${o.name}」(或清单原文名称);名称与数量绑定不得自行替换材质/类型限定词。`},matchStart:q,matchEnd:q+h.length+l[0].length})}return d}function M(a){let b=a.markdown||"";if(!b)return[];let c=m(a);if(0===c.entries.length&&0===c.numberPool.length)return[];let d=[...u(b,c).map(a=>a.issue),...D(b,c).map(a=>a.issue),...function(a,b){let c=[],d=new Set;for(let e of a.matchAll(F)){let a=f(e[1]);if(void 0===a)continue;let h=e[2];if(("mm"===h?a/1e3:"cm"===h?a/100:a)<=10)continue;let i=b.entries.find(b=>g(b.value,a)&&/总长|全长|总长度|长度|管线/u.test(b.name)),j=`数值语义槽位错位:正文「${e[0].trim()}」——埋深/覆土数值 ${a}${h} 超出物理合理范围(管道埋深一般 <10m)${i?`,且该数值与权威「${i.name}」(${i.value}${i.unit})一致,疑似把总长/长度口径误用作埋深`:",疑似口径混用"}`;d.has(j)||(d.add(j),c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:j,suggestion:`核对槽位语义:埋深/覆土深度应在 0.3~10m 合理区间(以设计图纸为准);总长/长度类数值不得用于埋深描述${i?`(「${i.name}」为 ${i.value}${i.unit})`:""}。`}))}return c}(b,c),...function(a,b){let c=[];if(0===b.numberPool.length)return c;let d=new Set,e=(a,e,g)=>{let h=f(a);if(void 0===h||function(a,b){let c=a>=1e3?Math.max(10,.02*a):a>=100?5:a>=10?1:.5;return b.some(b=>Math.abs(b-a)<=c||Math.abs(b-a)<=Math.max(1e-6,.02*Math.abs(b)))}(h,b.numberPool))return;let i=`近似数值不可推导:正文「${g.trim()}」的 ${h}${e} 在清单/蓝图/事实主表中无同值或近似来源,违反无据不写`;d.has(i)||(d.add(i),c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:i,suggestion:"删除该近似表述,或改用权威数据可推导的数值(清单/蓝图同值口径);「约/近」类近似数值必须可闭合到权威来源。"}))};for(let b of a.matchAll(G)){let c=b.index??0,d=a.slice(Math.max(0,c-1),c);I.test(d)||e(b[1],b[2],b[0])}for(let b of a.matchAll(H))e(b[1],b[2],b[0]);return c}(b,c),...L(b,c,a.billFactLock).map(a=>a.issue)],e=[],h=new Set;for(let a of d){let b=`${a.severity||a.level}|${a.message}`;h.has(b)||(h.add(b),e.push(a))}return e}},76193:(a,b,c)=>{c.d(b,{Jq:()=>x,Qi:()=>v,ll:()=>u,rk:()=>r,wF:()=>B,yT:()=>t}),c(51190),c(44505),c(10751);var d=c(93675);let e=new Set(["fixed","exempt","manual"]),f=[],g={"ambiguous-either-or":{kind:"constraint",channel:"块任务卡"},"area-arithmetic":{kind:"constraint",channel:"块任务卡"},"atlas-reference-phrase":{kind:"constraint",channel:"全局约束"},"authority-audit-gap":{kind:"constraint",channel:"块任务卡"},"auto-spec-validation":{kind:"self-check",stage:"章成稿后"},"basic-info-schedule-field":{kind:"constraint",channel:"块任务卡"},"basis-regulations-coverage":{kind:"constraint",channel:"块任务卡"},"basis-regulations-cross":{kind:"terminal-only",reason:"编制依据的跨章比对需全文依据清单集合(单章成稿时其余章的依据尚未产生)"},"bid-composition-body-figure":{kind:"self-check",stage:"章成稿后"},"bid-composition-body-table":{kind:"self-check",stage:"章成稿后"},"bidder-qualification-section":{kind:"constraint",channel:"全局约束"},"block-attribution-quantification":{kind:"constraint",channel:"块任务卡"},"block-fact-density":{kind:"constraint",channel:"块任务卡"},"block-format-constraints":{kind:"constraint",channel:"全局约束"},"block-numeric-reconciliation":{kind:"constraint",channel:"块任务卡"},"block-structure-contract":{kind:"self-check",stage:"章成稿后"},"block-templating":{kind:"self-check",stage:"块成稿后"},"blueprint-citation-consistency":{kind:"constraint",channel:"块任务卡"},"blueprint-value-placement":{kind:"constraint",channel:"块任务卡"},"boq-division-coverage":{kind:"constraint",channel:"块任务卡"},"boq-placement":{kind:"constraint",channel:"块任务卡"},"boq-row-trace":{kind:"constraint",channel:"块任务卡"},"caliber-consistency":{kind:"constraint",channel:"块任务卡"},"chapter-dependency":{kind:"terminal-only",reason:"章间依赖关系是全文拓扑性质"},"chapter-fact-density":{kind:"constraint",channel:"块任务卡"},"closed-loop-density":{kind:"self-check",stage:"章成稿后"},"closure-phrase-density-cap":{kind:"self-check",stage:"块成稿后"},"collision-numbered-heading":{kind:"terminal-only",reason:"编号冲突需全文标题集合,跨章同名编号在单章内不可见"},"commercial-data-in-body":{kind:"constraint",channel:"全局约束"},"construction-org-bonus-module":{kind:"constraint",channel:"块任务卡"},"construction-org-chapter-data-coverage":{kind:"constraint",channel:"块任务卡"},"construction-org-consistency":{kind:"terminal-only",reason:"施工组织一致性跨章比对"},"construction-org-control-loop":{kind:"self-check",stage:"章成稿后"},"construction-org-division-section":{kind:"self-check",stage:"章成稿后"},"construction-org-generic-language":{kind:"self-check",stage:"块成稿后"},"construction-org-major-content":{kind:"constraint",channel:"块任务卡"},"construction-org-professional-audit":{kind:"constraint",channel:"块任务卡"},"construction-org-professional-chain":{kind:"constraint",channel:"块任务卡"},"construction-system-coverage":{kind:"constraint",channel:"块任务卡"},"critical-section-depth":{kind:"self-check",stage:"章成稿后"},"critical-section-fact-density":{kind:"constraint",channel:"块任务卡"},"cross-chapter-consistency":{kind:"terminal-only",reason:"跨章口径一致性本质依赖全章文本"},"cross-chapter-duplicate-section":{kind:"terminal-only",reason:"跨章重复小节需全文小节集合"},"cross-project-value-copy":{kind:"terminal-only",reason:"跨项目值拷贝需与其它项目产物比对"},"cross-section-numeric-conflict":{kind:"terminal-only",reason:"跨小节数值冲突需小节集合比对"},"dangerous-applicability":{kind:"constraint",channel:"块任务卡"},"dangerous-list-consistency":{kind:"constraint",channel:"块任务卡"},"dangling-conjunction":{kind:"self-check",stage:"章成稿后"},"degenerate-content":{kind:"self-check",stage:"块成稿后"},"document-budget":{kind:"terminal-only",reason:"篇幅为全文度量,由预算层与压缩轮收敛"},"document-delivery-score":{kind:"terminal-only",reason:"交付置信度是全文派生评分,不指向具体文本缺陷"},"drawing-pointer-phrase":{kind:"constraint",channel:"块任务卡"},"drawing-reference":{kind:"constraint",channel:"块任务卡"},"duplicate-basic-info":{kind:"terminal-only",reason:"同一基础信息在全文多处出现,需全文扫描"},"duplicate-paragraph":{kind:"terminal-only",reason:"重复段落需全文段落集合"},"duplicate-table":{kind:"terminal-only",reason:"重复表格需全文表格集合"},"emergency-section-depth":{kind:"self-check",stage:"章成稿后"},"equipment-batch-conflict":{kind:"constraint",channel:"块任务卡"},"equipment-entry-timing":{kind:"constraint",channel:"块任务卡"},"evaluation-criteria-coverage":{kind:"constraint",channel:"块任务卡"},"evidence-usage-coverage":{kind:"constraint",channel:"块任务卡"},"excavation-depth-lock":{kind:"constraint",channel:"块任务卡"},"excavation-hazard-classification":{kind:"constraint",channel:"块任务卡"},"fabricated-award":{kind:"constraint",channel:"块任务卡"},"fabricated-start-date":{kind:"constraint",channel:"块任务卡"},"fact-consistency":{kind:"constraint",channel:"块任务卡"},"fact-coverage":{kind:"constraint",channel:"块任务卡"},"fact-reconciliation":{kind:"constraint",channel:"块任务卡"},"field-value-mismatch":{kind:"constraint",channel:"块任务卡"},"figure-substitute-table":{kind:"self-check",stage:"章成稿后"},"finish-thickness":{kind:"constraint",channel:"块任务卡"},"flow-form-repeat":{kind:"self-check",stage:"块成稿后"},"formal-content-integrity":{kind:"constraint",channel:"全局约束"},"formal-heading-hierarchy":{kind:"self-check",stage:"章成稿后"},"formal-placeholder":{kind:"constraint",channel:"全局约束"},"formal-style":{kind:"self-check",stage:"块成稿后"},"formal-text-gate":{kind:"constraint",channel:"全局约束"},"formula-residue":{kind:"constraint",channel:"全局约束"},"foundation-form-residue":{kind:"constraint",channel:"块任务卡"},"generated-fact-verification":{kind:"constraint",channel:"块任务卡"},"generic-professional-content":{kind:"constraint",channel:"块任务卡"},"greening-maintenance-mismatch":{kind:"constraint",channel:"块任务卡"},"hazard-exclusion-contradiction":{kind:"constraint",channel:"块任务卡"},"hazard-parameter-binding":{kind:"constraint",channel:"块任务卡"},"heading-duplicate":{kind:"terminal-only",reason:"同名标题需全文标题集合比对"},"heading-uncovered-engineering-items":{kind:"self-check",stage:"章成稿后"},"hollow-table-cell":{kind:"self-check",stage:"章成稿后"},"identity-marks-forbidden":{kind:"constraint",channel:"全局约束"},"innovation-tech-coverage":{kind:"constraint",channel:"块任务卡"},"instruction-like-heading":{kind:"self-check",stage:"章成稿后"},"internal-terminology-anchor":{kind:"self-check",stage:"块成稿后"},"inverted-date-range":{kind:"constraint",channel:"块任务卡"},"local-adaptation-keyword":{kind:"constraint",channel:"块任务卡"},"major-content-governance":{kind:"self-check",stage:"章成稿后"},"management-measure-number":{kind:"constraint",channel:"块任务卡"},"meta-discourse-declaration":{kind:"self-check",stage:"块成稿后"},"min-chapter-section":{kind:"terminal-only",reason:"章间小节数均衡属全文结构度量"},"node-schedule-consistency":{kind:"constraint",channel:"块任务卡"},"numeric-traceability":{kind:"constraint",channel:"块任务卡"},"overview-recap":{kind:"terminal-only",reason:"概况段跨章复述需全文概况段集合与位置关系"},"page-target":{kind:"terminal-only",reason:"页数为全文估算度量信号(永远 warning)"},"paragraph-generic":{kind:"self-check",stage:"块成稿后"},"paragraph-near-duplicate":{kind:"terminal-only",reason:"近重复需全文段落集合两两比对"},"paragraph-opening-repeat":{kind:"self-check",stage:"块成稿后"},"paragraph-tail-repeat":{kind:"self-check",stage:"块成稿后"},"parameter-concept-conflict":{kind:"constraint",channel:"块任务卡"},"parameter-obligation-usage":{kind:"constraint",channel:"块任务卡"},"phase-labor-mixing":{kind:"constraint",channel:"块任务卡"},"planned-auto-spec-gate":{kind:"self-check",stage:"章成稿后"},"planned-section-placement":{kind:"self-check",stage:"章成稿后"},"planned-structure":{kind:"self-check",stage:"章成稿后"},"precise-fact-usage":{kind:"constraint",channel:"块任务卡"},"preliminary-action-timing":{kind:"constraint",channel:"块任务卡"},"process-spec-conflict":{kind:"constraint",channel:"块任务卡"},"professional-content":{kind:"constraint",channel:"块任务卡"},"professional-score":{kind:"terminal-only",reason:"专业评分是全文派生评分"},"project-basic-placeholder":{kind:"constraint",channel:"全局约束"},"project-contamination":{kind:"constraint",channel:"全局约束"},"project-type-consistency":{kind:"constraint",channel:"全局约束"},"prompt-document-rule":{kind:"constraint",channel:"全局约束"},"prompt-example-leak":{kind:"constraint",channel:"全局约束"},"punctuation-artifact":{kind:"constraint",channel:"全局约束"},"repeated-word":{kind:"terminal-only",reason:"重复词需全文词频统计(单块内低频也构成全文高频)"},"requirements-coverage":{kind:"constraint",channel:"块任务卡"},"resource-breakdown-consistency":{kind:"terminal-only",reason:"资源分解与蓝图权威比对,需全章资源陈述集合"},"resource-consistency":{kind:"terminal-only",reason:"资源总量一致性需跨章资源口径比对"},"resource-triad-section-hierarchy":{kind:"terminal-only",reason:"资源三要素章节层级属全文结构"},"schedule-duration-overrun":{kind:"constraint",channel:"块任务卡"},"section-content-integrity":{kind:"self-check",stage:"章成稿后"},"section-count-overflow":{kind:"self-check",stage:"章成稿后"},"section-numbering":{kind:"terminal-only",reason:"章节编号连续性依赖全文标题序列(后续章未写时无法判定编号是否断档)"},"self-undermining-candidate":{kind:"self-check",stage:"块成稿后"},"sentence-pattern-repeat":{kind:"self-check",stage:"块成稿后"},"six-hundred-percent-coverage":{kind:"constraint",channel:"块任务卡"},"skeleton-fingerprint":{kind:"terminal-only",reason:"骨架指纹是跨段/跨章相似度度量"},"source-enumeration":{kind:"self-check",stage:"块成稿后"},"spec-gate-rules":{kind:"self-check",stage:"章成稿后"},"spec-location-mismatch":{kind:"constraint",channel:"块任务卡"},"stage-phrasing":{kind:"terminal-only",reason:"阶段表述一致性需跨章比对阶段划分"},"standard-final":{kind:"self-check",stage:"章成稿后"},"street-light-count-mismatch":{kind:"constraint",channel:"块任务卡"},"structure-integrity":{kind:"self-check",stage:"章成稿后"},"support-form-fact-consistency":{kind:"constraint",channel:"块任务卡"},"support-system-conflict":{kind:"constraint",channel:"块任务卡"},"table-arithmetic-consistency":{kind:"constraint",channel:"块任务卡"},"table-caption":{kind:"constraint",channel:"全局约束"},"table-quality":{kind:"self-check",stage:"章成稿后"},"table-spam":{kind:"self-check",stage:"章成稿后"},"templated-label":{kind:"self-check",stage:"章成稿后"},"tertiary-heading":{kind:"self-check",stage:"章成稿后"},"title-integrity":{kind:"self-check",stage:"章成稿后"},"toc-consistency":{kind:"terminal-only",reason:"目录与正文标题需全文双向比对,单章成稿时正文其余部分尚未产生"},"truncated-sentence":{kind:"constraint",channel:"全局约束"},"web-evidence-leakage":{kind:"constraint",channel:"全局约束"},"writer-missing-section":{kind:"self-check",stage:"章成稿后"}},h=[],i=new Set(["structure","table","fact_consistency","evidence_coverage","professional_chain","control_loop","format","style","scope"]),j=[{id:"spec-gate-rules",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"配置门禁容器(事实/章节/表格/图片/页数/文本多族混合,规则随模板与提示词动态生成),无单一可锚定修复目标"},{id:"auto-spec-validation",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅唯一阻断族(后台流程话术)由 WORKFLOW_PHRASE_RE 清洗覆盖;后台优化建议/基础事实候选/材料未提供 3 词未入清洗表"},{id:"fact-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"多值冲突源于绑定材料组内同名不同值,只能由用户确认绑定范围/资料侧裁决,正文改写不可能消除"},{id:"figure-substitute-table",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"图类要求无承载(既无图题也无等效数据表)需补写数据表并加题注,属内容补写而非确定性改写;写入侧应由图类呈现计划同时下达「图 or 等效表」二选一,本检测器为交付前兜底"},{id:"project-type-consistency",scope:"full-document",category:"scope",fixerDisposition:"manual",fixerDispositionReason:"项目类型与正文用词矛盾(如产业园标准化厂房项目出现「自然村/村内/多村并行」)属内容性质错误:自动改写会改变叙述口径与上下文语义,须人工确认后按正确策略重新生成;根治在写入侧(resolveDerivationStrategy 类型守卫 + 策略驱动分组称谓),本检测器为交付前安全网"},{id:"project-contamination",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"对象名污染分支由 sanitizeContaminationCandidates 覆盖;文档编号分支(documentContaminationService.ts:18)无修复器"},{id:"project-basic-placeholder",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"同源专用修复器 repairKnownProjectBasicPlaceholders 已按「删除无用代码」口径移除(全仓零调用、注册表看不见);当前仅表内占位被 canonical 事实替代,表外正文占位无覆盖"},{id:"standard-final",scope:"full-document",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"standard-final 组整组重跑的结果容器登记,不产出自身 issue;组内子检测器各自锚定即可"},{id:"fact-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"stageFactLanding 与检测同源同池(uncoveredImportantFacts + 同一事实池),接线 documentPipeline.ts:74"},{id:"page-target",scope:"full-document",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"页数为估算度量信号(永远 warning 不阻断),无独立可修缺陷;超幅族由字数口径的 length-compression-repair 轮收敛"},{id:"document-budget",scope:"full-document",category:"structure"},{id:"formal-text-gate",scope:"full-document",category:"format"},{id:"heading-uncovered-engineering-items",scope:"full-document",category:"structure"},{id:"writer-missing-section",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"由 planned-section-repair 轮按 reason=empty 重写清除;planned=false 的小节不入选"},{id:"critical-section-depth",scope:"chapter",category:"structure"},{id:"critical-section-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"须内容补写,但 issue 无 provenance,按 provenance 过滤的补写轮消费不到(接线 provenance 后可改判 fixed)"},{id:"chapter-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"质量报告阶段被降级为 info(消息尾句命中 FLOW_DIAGNOSTIC_ISSUE_RE)不阻断;其修复手段是写作期块级重写重试"},{id:"construction-org-professional-audit",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"聚合 issue 无 category/provenance 无法被锚定消费,且 5 通道中 3 通道(参数密度/工作包要素/表格空字段)无修复器"}],k=[{id:"toc-consistency",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixTocFromBody 按正文实际结构重建目录,检测定位=修复定位,已接线三处"},{id:"section-numbering",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"section-count-overflow",scope:"chapter",category:"structure"},{id:"heading-duplicate",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"structure-integrity",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"templated-label",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"title-integrity",scope:"full-document",category:"structure"},{id:"evaluation-criteria-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"正文核心词缺位须内容补写且无修复轮消费;上游只有预防性补挂(constructionBidStructure.ts:445)"},{id:"requirements-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"requirement-response-repair 轮按 provenance 定向补写(requirementResponseRepair.ts:51)"},{id:"fabricated-start-date",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"需语义判断该日期是编造还是合法的招标/法规成文日期,确定性删除必误伤;仅 patchGuard 预防式预检,无存量修复"},{id:"field-value-mismatch",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"无实现;权威值在 factsModel 可取属可确定性实现但未实现,现只能转人工"},{id:"area-arithmetic",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"地上/地下/单体哪个是错值须资料裁决;同族 scale 修复器显式声明对该三项不做确定性替换"},{id:"resource-consistency",scope:"full-document",category:"fact_consistency",authorities:["laborPeak"]},{id:"node-schedule-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixNodeScheduleConflicts(fixers.ts:1010),挂 applyNumericConsistencyDeterministicFixes steps"},{id:"cross-section-numeric-conflict",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixCrossSectionNumericConflicts(fixers.ts:1195),同链 steps"},{id:"fact-reconciliation",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"greening-maintenance-mismatch",scope:"full-document",category:"fact_consistency",authorities:["greeningMaintenance"]},{id:"street-light-count-mismatch",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"正文常为分型号明细而清单只锁总数,确定性替换会写坏;同族 greening-maintenance 有修复器,此其一无"},{id:"spec-location-mismatch",scope:"full-document",category:"fact_consistency"},{id:"blueprint-citation-consistency",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"fixQuantityAuthorityConflicts(fixers.ts:1304)经 quantityAnchors 直连,含链尾重放"},{id:"cross-project-value-copy",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费(globalQualityGates.ts:1398);无专用确定性修复器"},{id:"phase-labor-mixing",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"equipment-batch-conflict",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"preliminary-action-timing",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"fixPreliminaryActionTimingDeterministically 与检测共用 scanPreliminaryActionTimingFindings 同源单扫描,接线 postReviewSurface.ts:274"},{id:"foundation-form-residue",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费(globalQualityGates.ts:1407→:1500)"},{id:"ambiguous-either-or",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"]},{id:"excavation-depth-lock",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费,另有路由特例与权威值注入(:1533/:1580)"},{id:"excavation-hazard-classification",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"需按 canonical 深度补写分级结论句,当前无任何修复路径"},{id:"support-form-fact-consistency",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"],fixerDisposition:"manual",fixerDispositionReason:"与 support-system-conflict 判据不同源(读 canonical.byKey.foundation_support_form),不可复用其修复器"},{id:"equipment-entry-timing",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixEquipmentEntryTimingDeterministically(postReviewSurface.ts:287),与检测同源单扫描"},{id:"fabricated-award",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"白名单外奖项须回招标原文逐字比对并整体改写创优叙述,无确定性路径"},{id:"bidder-qualification-section",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"stripTenderClauseFragmentHeadings(markdownCleanup.ts:622)删标题;仅覆盖两条句式规则,资格词表分支未覆盖"},{id:"cross-chapter-duplicate-section",scope:"chapter",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"同名小节归并需判断内容归属,确定性路径被有意排除(dedupeDuplicateSectionHeadings 仅章内)"},{id:"basic-info-schedule-field",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"现有归一化的收场是「非法值被拒收→单元格变空」,属以删除通过门禁(P2-2 同口径禁止),不判 fixed"},{id:"duplicate-table",scope:"full-document",category:"table"},{id:"duplicate-paragraph",scope:"full-document",category:"structure"},{id:"paragraph-near-duplicate",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"近重复段落之间无从确定「哪份是原稿、哪份是副本」(重复处常含另一处缺失的信息),确定性删除即信息丢失;无定向修复轮消费(不带章锚点)→ 交付前残留即转人工复核清单(provenance 可追溯检测器身份),人工合并去重(保信息完整的一处)后重生成"},{id:"paragraph-tail-repeat",scope:"full-document",category:"style",deterministicSafe:!0},{id:"collision-numbered-heading",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"inverted-date-range",scope:"full-document",category:"fact_consistency",deterministicSafe:!0},{id:"resource-triad-section-hierarchy",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"修复需重排章节层级/拆分小节,结构性重写且无确定性路径"},{id:"support-system-conflict",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"],fixerDisposition:"fixed",fixerDispositionReason:"fixSupportSystemConflicts(fixers.ts:38),同链 steps;权威缺失时不动作,属部分覆盖"},{id:"dangerous-list-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"两处清单需合并为唯一清单并统一项名与分级,属内容改写"},{id:"hazard-exclusion-contradiction",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"排除声明与清单孰对取决于资料是否真达判定阈值,须资料裁决"},{id:"six-hundred-percent-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"补写型修复器已随 4.41「零确定性正文注入」架构决策删除(fixers.ts:1625),内容缺失只能由生成侧补齐"},{id:"self-undermining-candidate",scope:"full-document",category:"style"},{id:"paragraph-opening-repeat",scope:"full-document",category:"style",deterministicSafe:!0},{id:"flow-form-repeat",scope:"full-document",category:"style"},{id:"skeleton-fingerprint",scope:"full-document",category:"style"},{id:"sentence-pattern-repeat",scope:"full-document",category:"style"},{id:"repeated-word",scope:"full-document",category:"style",deterministicSafe:!0},{id:"commercial-data-in-body",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"stripCommercialDataBodyLines(postReviewSurface.ts:209),与检测同口径"},{id:"overview-recap",scope:"full-document",category:"style"},{id:"closure-phrase-density-cap",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"缺陷是词频密度(语义/文风改写),无修复轮按 provenance 消费;fiveElementClosureBoost 的补句池刻意避开闭环密度词"},{id:"parameter-concept-conflict",scope:"full-document",category:"fact_consistency"},{id:"internal-terminology-anchor",scope:"full-document",category:"style",deterministicSafe:!0},{id:"construction-system-coverage",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"某专业系统整章零覆盖须补写施工方案正文,属内容生成"},{id:"dangerous-applicability",scope:"full-document",category:"evidence_coverage"},{id:"innovation-tech-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"缺节场景可被补写轮间接覆盖,但「小节 <200 字的部分成稿」场景无任何路径(补写轮 alsoAnchoredTo 接上后可改判 fixed)"},{id:"instruction-like-heading",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅 tender-clause-heading-strip 一支(^#{3,4} 且判据为 isTenderClauseFragmentTitle);主判据 instructionTitleRe(是否涉及/按需生成/视情况/注意事项)与 H2 级碎片无任何正文修复器"},{id:"formal-heading-hierarchy",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"非法 H2 的现成修复器 demoteNonFormalH2 已按「删除无用代码」口径移除(全仓零调用);当前无任何生产修复路径"},{id:"formal-content-integrity",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"截断句须补全句子内容;fixTruncatedSentenceArtifacts 修的是标点叠用且锚在另一个 id 上,非同源"},{id:"punctuation-artifact",scope:"full-document",category:"format",deterministicSafe:!0},{id:"table-quality",scope:"full-document",category:"table",deterministicSafe:!0},{id:"table-spam",scope:"full-document",category:"table",deterministicSafe:!0},{id:"basis-regulations-coverage",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"basis-regulations-cross",scope:"full-document",category:"fact_consistency"},{id:"resource-breakdown-consistency",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"section-content-integrity",scope:"chapter",category:"structure"},{id:"professional-content",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"缺项须补写专业内容,全仓无同源修复函数;且本 issue 无 provenance,按 provenance 过滤的修复轮消费不到,属真孤儿"},{id:"professional-score",scope:"chapter",category:"professional_chain"},{id:"generic-professional-content",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"判据=词面 8 词命中≥6 + bge 语义门;最近的套话修复器(isTemplatePrefixSentence + FILLER_SEMANTIC_QUERIES)判据不同源,不构成覆盖"},{id:"management-measure-number",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"需补责任主体/频次/台账/整改复查的语义补写,确定性路径不存在;且无 provenance,修复轮看不见"},{id:"closed-loop-density",scope:"full-document",category:"control_loop",fixerDisposition:"exempt",fixerDispositionReason:"纯度量信号:判据是闭环块密度对标 max(6,字数/1500),注释自述与评分同口径不阻断门禁;补闭环词还会撞 closure-phrase-density-cap 上限,不宜自动改"},{id:"cross-chapter-consistency",scope:"full-document",category:"fact_consistency"},{id:"process-spec-conflict",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"applyDeterministicConsistencyFixes 与检测端同判据同归属规则(collectLayerNumbers+buildSpecActionGate),已接线两条确定性链"},{id:"evidence-usage-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"缺陷是「未引用该类事实」,只能靠补写正文;fact-distribution-round 与 important-unplaced-facts 轮判据均不同源且不复检本 id"},{id:"paragraph-generic",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"判据=段落长度 + 10 词泛化表 + bge 具体性门;fillerParagraphIssues 用另一套 17 条词面 + 14 语义原型,同族不同判据"},{id:"construction-org-generic-language",scope:"chapter",category:"style",fixerDisposition:"fixed",fixerDispositionReason:"由 templating-repair 轮消费(该轮走 globalQualityGates 内联的 fillerDensityReport,非本 id 产出的 issue;本 gate 为内联检查的同族检测器,见幻影锚点收口说明)"},{id:"construction-org-control-loop",scope:"chapter",category:"control_loop"},{id:"construction-org-professional-chain",scope:"chapter",category:"professional_chain"},{id:"construction-org-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"需按资料裁决哪个口径为真且涉及跨表改写;同族修复器(fixEquipmentBatchConflicts/fixLaborPeakConflict/resource-breakdown)判据均不同源"},{id:"construction-org-chapter-data-coverage",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"属「章内缺项目事实」的补写型缺陷,仅生成侧/人工可解"},{id:"construction-org-major-content",scope:"chapter",category:"professional_chain"},{id:"construction-org-division-section",scope:"chapter",category:"structure"},{id:"major-content-governance",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅清单口径词族有修复器(postReviewSurface.ts:313);表格承载正文族无,仍走终门禁"},{id:"construction-org-bonus-module",scope:"chapter",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"加分项建议而非缺陷(代码自述为避免污染缺陷计分,只产出 info 级「高分模块」建议)"},{id:"chapter-dependency",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"需在指定章补写投入调配/工艺控制/应急闭环内容,属语义补写;且无 provenance"},{id:"document-delivery-score",scope:"full-document",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"纯评分汇总载体(总分 x/10 的元信息),其内部调用的三个检测器各自已有 id 与处置,本 id 不产出缺陷"},{id:"generated-fact-verification",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"反查失败数值的自动消除即删除式修复(P2-2 已明令禁止),补齐权威属资料侧动作——与 numeric-traceability 同口径"},{id:"numeric-traceability",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"修复器已按 P2-2 停用(删除式修复被明令禁止);补齐权威值属资料/配置侧动作"},{id:"table-arithmetic-consistency",scope:"full-document",category:"evidence_coverage"},{id:"duplicate-basic-info",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"fixDuplicateBasicInfoTables 覆盖重复表族;「表前重复逐项叙述」族未覆盖(已扩展锚定到该修复器)"},{id:"formal-style",scope:"full-document",category:"style"},{id:"tertiary-heading",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"min-chapter-section",scope:"chapter",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"mergeDuplicateThematicSections 与检测共用桶键 classifyThematicSectionKey,接线 duplicate-theme-merge 轮;精确同名小节族另由 heading-duplicate-merge 覆盖"},{id:"planned-section-placement",scope:"chapter",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"链尾确定性提升覆盖「降级为 H4」形态(delivery-structure-closure);整节漏写属写作缺项,交 LLM 定向补写小节(provenance 已打点)"},{id:"hollow-table-cell",scope:"full-document",category:"table",fixerDisposition:"manual",fixerDispositionReason:"按「表\xd7列」聚合报出,交 LLM 按列补真实值(同章正文通常已有同口径数据)"},{id:"schedule-duration-overrun",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"按生效工期重排进度计划与节点天序(源头解析已取变更后口径,残留为写作期漂移)"},{id:"caliber-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"被取代值由链尾 delivery-structure-closure 按真值层覆盖表**确定性替换**(不依赖本检测器锚定);本检测器报出的是「生效值整体未落位」类残留,进人工复核清单"},{id:"hazard-parameter-binding",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补写:在危大判定处补本项目实际参数 + 阈值对照 + 结论"},{id:"blueprint-value-placement",scope:"full-document",category:"professional_chain",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补写:按蓝图权威值写资源配置具体数值"},{id:"dangling-conjunction",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补全被截断的句子成分(标点类残片另有 fixTruncatedSentenceArtifacts)"},{id:"precise-fact-usage",scope:"full-document",category:"fact_consistency"},{id:"parameter-obligation-usage",scope:"full-document",category:"fact_consistency"},{id:"boq-placement",scope:"full-document",category:"evidence_coverage"},{id:"stage-phrasing",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"阶段划分口径统一属语义改写,且该 issue 无 provenance,修复轮按 provenance 过滤消费不到"},{id:"emergency-section-depth",scope:"full-document",category:"structure"},{id:"boq-row-trace",scope:"full-document",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"只产 warning,既不断阻断也不进人工清单(清单由 blockingIssues 构建);同轴真缺口另有 blocker 通道 boq-placement"},{id:"drawing-reference",scope:"full-document",category:"evidence_coverage"},{id:"drawing-pointer-phrase",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"指向型表述的修复是用具体做法替换指向(须定位蓝图/清单权威值,属语义改写而非字面替换);4.55.24 先建立判据与写作前红线并显性进人工清单,定向改写轮排期 4.55.25"},{id:"web-evidence-leakage",scope:"full-document",category:"scope",fixerDisposition:"exempt",fixerDispositionReason:"warning 级度量信号不阻断、不进人工清单,且全仓不存在该词族的删除/改写函数"},{id:"formal-placeholder",scope:"full-document",category:"format",deterministicSafe:!0},{id:"prompt-example-leak",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"「疑似样例」删除必误伤(样例块可能撞合法正文),无实现且无消费轮"},{id:"degenerate-content",scope:"chapter",category:"style",fixerDisposition:"manual",fixerDispositionReason:"唯一可能消费它的章级重扫入口 lightweightChapterIssues 已按「删除无用代码」口径移除(全仓零调用);退化输出的修复等同重新生成小节"},{id:"planned-auto-spec-gate",scope:"full-document",category:"structure"},{id:"bid-composition-body-table",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"dismantleBodyTables 同判据 LLM 拆表改写;finalize 侧只重跑禁表分支(章级授权口径未覆盖)"},{id:"bid-composition-body-figure",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"removeUnwantedDrawingImages(markdownComposer.ts:1905)与检测共用 FIGURE_PLACEHOLDER_RE"},{id:"identity-marks-forbidden",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"需删/改写业绩获奖证书类敏感句,可自动化但未实现;当前只有写作期与修复提示词约束"},{id:"planned-structure",scope:"full-document",category:"structure"},{id:"table-caption",scope:"full-document",category:"format"},{id:"prompt-document-rule",scope:"full-document",category:"format",fixerDisposition:"fixed",fixerDispositionReason:"applyPromptDocumentRules 覆盖残留封面/目录/缺必需表/禁止词行;指令型标题、缺指定一级章节、缺关键词、字数不足族无实现"},{id:"local-adaptation-keyword",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"仅 blocker 通道(工伤保险缺失)有修复器(postReviewSurface.ts:301);另两条属度量/增强项,不阻断"},{id:"boq-division-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"enforceBoqDivisionCoverageInMethodChapters(postReviewSurface.ts:400)链尾确定性补写"}],l=[{id:"table-line-residue",kind:"deterministic",anchoredTo:"table-quality",giveUpOnFailure:!0},{id:"templated-labels",kind:"deterministic",anchoredTo:"templated-label",giveUpOnFailure:!0},{id:"structure-integrity",kind:"deterministic",anchoredTo:"structure-integrity",giveUpOnFailure:!0},{id:"embedded-heading-split",kind:"deterministic",anchoredTo:"planned-structure",giveUpOnFailure:!0},{id:"repeated-words",kind:"deterministic",anchoredTo:"repeated-word",giveUpOnFailure:!0},{id:"duplicate-tables",kind:"deterministic",anchoredTo:"duplicate-table",giveUpOnFailure:!0},{id:"finish-thickness",kind:"deterministic",anchoredTo:"finish-thickness",giveUpOnFailure:!0},{id:"slot-depth-value",kind:"deterministic",anchoredTo:"fact-reconciliation",authorities:["blueprint"],giveUpOnFailure:!0},{id:"spec-quantity-binding",kind:"deterministic",anchoredTo:"fact-reconciliation",authorities:["blueprint"],giveUpOnFailure:!0},{id:"labor-peak",kind:"deterministic",anchoredTo:"resource-consistency",authorities:["laborPeak"],giveUpOnFailure:!0},{id:"phase-labor-values",kind:"deterministic",anchoredTo:"phase-labor-mixing",authorities:["blueprint"],giveUpOnFailure:!0},{id:"resource-breakdown",kind:"deterministic",anchoredTo:"resource-breakdown-consistency",authorities:["blueprint"],giveUpOnFailure:!0},{id:"equipment-batch-values",kind:"deterministic",anchoredTo:"equipment-batch-conflict",authorities:["blueprint"],giveUpOnFailure:!0},{id:"internal-table-row-dup",kind:"deterministic",anchoredTo:"table-spam",giveUpOnFailure:!0},{id:"duplicate-basic-info-tables",kind:"deterministic",anchoredTo:"table-quality",alsoAnchoredTo:["duplicate-basic-info"],giveUpOnFailure:!0},{id:"fallback-placeholder-rows",kind:"deterministic",anchoredTo:"formal-placeholder",giveUpOnFailure:!0},{id:"greening-maintenance",kind:"deterministic",anchoredTo:"greening-maintenance-mismatch",authorities:["greeningMaintenance"],giveUpOnFailure:!0},{id:"paragraph-opening-repeat",kind:"deterministic",anchoredTo:"paragraph-opening-repeat",giveUpOnFailure:!0},{id:"paragraph-tail-repeat",kind:"deterministic",anchoredTo:"paragraph-tail-repeat",giveUpOnFailure:!0},{id:"collision-numbered-heading",kind:"deterministic",anchoredTo:"collision-numbered-heading",giveUpOnFailure:!0},{id:"heading-uncovered-items",kind:"deterministic",anchoredTo:"heading-uncovered-engineering-items",giveUpOnFailure:!0},{id:"inverted-date-range",kind:"deterministic",anchoredTo:"inverted-date-range",giveUpOnFailure:!0},{id:"zero-length-date-range",kind:"deterministic",anchoredTo:"cross-chapter-consistency",giveUpOnFailure:!0},{id:"truncated-sentence",kind:"deterministic",anchoredTo:"truncated-sentence",giveUpOnFailure:!0},{id:"meta-discourse",kind:"deterministic",anchoredTo:"meta-discourse-declaration",giveUpOnFailure:!0},{id:"formula-residue",kind:"deterministic",anchoredTo:"formula-residue",giveUpOnFailure:!0},{id:"self-undermining",kind:"deterministic",anchoredTo:"self-undermining-candidate",giveUpOnFailure:!0},{id:"ambiguous-either-or",kind:"deterministic",anchoredTo:"ambiguous-either-or",authorities:["supportSystem"],giveUpOnFailure:!0},{id:"tender-meta-language",kind:"deterministic",anchoredTo:"formal-style",giveUpOnFailure:!0},{id:"formal-source-residue",kind:"deterministic",anchoredTo:"formal-style",giveUpOnFailure:!0},{id:"forbidden-configuration",kind:"deterministic",anchoredTo:"formal-text-gate",giveUpOnFailure:!0},{id:"duplicate-response-line",kind:"deterministic",anchoredTo:"duplicate-paragraph",giveUpOnFailure:!0},{id:"atlas-reference",kind:"deterministic",anchoredTo:"atlas-reference-phrase",giveUpOnFailure:!0},{id:"tertiary-h4-dedupe",kind:"deterministic",anchoredTo:"tertiary-heading",giveUpOnFailure:!0},{id:"internal-term-heading",kind:"deterministic",anchoredTo:"internal-terminology-anchor",giveUpOnFailure:!0},{id:"skeleton-fingerprint-variants",kind:"deterministic",anchoredTo:"skeleton-fingerprint",giveUpOnFailure:!0},{id:"flow-form-variants",kind:"deterministic",anchoredTo:"flow-form-repeat",giveUpOnFailure:!0},{id:"truncated-title-completion",kind:"deterministic",anchoredTo:"title-integrity",giveUpOnFailure:!0},{id:"sentence-like-heading-split",kind:"deterministic",anchoredTo:"title-integrity",giveUpOnFailure:!0},{id:"heading-duplicate-merge",kind:"deterministic",anchoredTo:"heading-duplicate",giveUpOnFailure:!0},{id:"section-renumber",kind:"deterministic",anchoredTo:"section-numbering",giveUpOnFailure:!0}],m=[{id:"numeric-arbiter-concept",kind:"deterministic",anchoredTo:"parameter-concept-conflict",giveUpOnFailure:!0},{id:"numeric-arbiter-spec",kind:"deterministic",anchoredTo:"spec-location-mismatch",giveUpOnFailure:!0}],n=[{id:"numeric-chain-node-schedule",kind:"deterministic",anchoredTo:"node-schedule-consistency",giveUpOnFailure:!0},{id:"numeric-chain-cross-section",kind:"deterministic",anchoredTo:"cross-section-numeric-conflict",giveUpOnFailure:!0},{id:"numeric-chain-support-system",kind:"deterministic",anchoredTo:"support-system-conflict",authorities:["supportSystem"],giveUpOnFailure:!0},{id:"numeric-chain-quantity-authority",kind:"deterministic",anchoredTo:"blueprint-citation-consistency",authorities:["blueprint"],giveUpOnFailure:!0},{id:"equipment-entry-timing-clean",kind:"deterministic",anchoredTo:"equipment-entry-timing",giveUpOnFailure:!0},{id:"commercial-data-body-strip",kind:"deterministic",anchoredTo:"commercial-data-in-body",giveUpOnFailure:!0},{id:"listing-jargon-strip",kind:"deterministic",anchoredTo:"major-content-governance",giveUpOnFailure:!0},{id:"work-injury-statement-fix",kind:"deterministic",anchoredTo:"local-adaptation-keyword",giveUpOnFailure:!0},{id:"boq-division-coverage-closure",kind:"deterministic",anchoredTo:"boq-division-coverage",giveUpOnFailure:!0},{id:"drawing-image-strip",kind:"deterministic",anchoredTo:"bid-composition-body-figure",giveUpOnFailure:!0},{id:"tender-clause-heading-strip",kind:"deterministic",anchoredTo:"bidder-qualification-section",alsoAnchoredTo:["instruction-like-heading"],giveUpOnFailure:!0},{id:"formal-source-phrase-clean",kind:"deterministic",anchoredTo:"source-enumeration",giveUpOnFailure:!0},{id:"toc-consistency-rebuild",kind:"deterministic",anchoredTo:"toc-consistency",giveUpOnFailure:!0},{id:"prompt-document-rules-apply",kind:"deterministic",anchoredTo:"prompt-document-rule",giveUpOnFailure:!0},{id:"workflow-phrase-clean",kind:"deterministic",anchoredTo:"auto-spec-validation",giveUpOnFailure:!0},{id:"contamination-candidate-sanitize",kind:"deterministic",anchoredTo:"project-contamination",giveUpOnFailure:!0},{id:"preliminary-action-timing-clean",kind:"deterministic",anchoredTo:"preliminary-action-timing",authorities:["blueprint"],giveUpOnFailure:!0},{id:"process-spec-conflict-fix",kind:"deterministic",anchoredTo:"process-spec-conflict",giveUpOnFailure:!0}],o=[{id:"near-duplicate-section-merge",kind:"deterministic",anchoredTo:"section-count-overflow",giveUpOnFailure:!0},{id:"empty-section-strip",kind:"deterministic",anchoredTo:"section-content-integrity",giveUpOnFailure:!0},{id:"duplicate-theme-merge",kind:"deterministic",anchoredTo:"min-chapter-section",giveUpOnFailure:!0}],p=["source-enumeration","internal-terminology-anchor","fabricated-start-date","repeated-word","writer-missing-section","meta-discourse-declaration","formula-residue","finish-thickness","formal-placeholder","truncated-sentence"],q=[{id:"fact-landing",kind:"llm-patch",anchoredTo:"fact-coverage",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"table-repair",kind:"llm-patch",anchoredTo:"table-quality",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"table-execution-repair",kind:"llm-patch",anchoredTo:"bid-composition-body-table",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"templating-repair",kind:"llm-patch",anchoredTo:"construction-org-generic-language",alsoAnchoredTo:["sentence-pattern-repeat"],patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"workpackage-skeleton-repair",kind:"llm-patch",anchoredTo:"construction-org-division-section",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"planned-section-repair",kind:"llm-patch",anchoredTo:"writer-missing-section",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"global-consistency-repair",kind:"llm-patch",anchoredTo:"cross-chapter-consistency",alsoAnchoredTo:["foundation-form-residue","excavation-depth-lock"],patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"cross-project-value-copy-repair",kind:"llm-patch",anchoredTo:"cross-project-value-copy",authorities:["blueprint"],patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"requirement-response-repair",kind:"llm-patch",anchoredTo:"requirements-coverage",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"numeric-verification",kind:"llm-patch",anchoredTo:"authority-audit-gap",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"quotation-balance-repair",kind:"llm-patch",anchoredTo:"punctuation-artifact",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"content-depth-repair",kind:"llm-patch",anchoredTo:"critical-section-depth",alsoAnchoredTo:["emergency-section-depth","construction-org-major-content","construction-org-division-section","precise-fact-usage","parameter-obligation-usage","overview-recap","professional-score","boq-placement","drawing-reference","hazard-parameter-binding","blueprint-value-placement","dangling-conjunction"],patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"control-loop-repair",kind:"llm-patch",anchoredTo:"construction-org-control-loop",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"professional-chain-repair",kind:"llm-patch",anchoredTo:"construction-org-professional-chain",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"basis-regulations-repair",kind:"llm-patch",anchoredTo:"basis-regulations-coverage",authorities:["blueprint"],patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"basis-regulations-cross-repair",kind:"llm-patch",anchoredTo:"basis-regulations-cross",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"dangerous-applicability-repair",kind:"llm-patch",anchoredTo:"dangerous-applicability",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"auto-spec-gate-repair",kind:"llm-patch",anchoredTo:"planned-auto-spec-gate",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"length-compression-repair",kind:"llm-patch",anchoredTo:"document-budget",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"table-caption-repair",kind:"llm-patch",anchoredTo:"table-caption",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"table-arithmetic-repair",kind:"llm-patch",anchoredTo:"table-arithmetic-consistency",patchGuard:{detectors:[...p]},giveUpOnFailure:!0}],r=["fact-landing-round","table-repair-round","semantic-choice-conflict","deterministic-stage5","formal-source-clean","planned-section-final","commercial-strip","table-deterministic-repair","numeric-verification","requirement-response-repair","requirement-verification","content-depth-repair","control-loop-repair","professional-chain-repair","post-review-surface","terminology-strip","regulation-number-typo","quotation-balance-repair","basis-regulations-repair","basis-regulations-cross-repair","dangerous-applicability-repair","auto-spec-gate-repair","toc-consistency","length-compression-repair","fact-distribution-round","table-arithmetic-repair","empty-section-sweep","section-alignment-sweep","templating-sweep","duplicate-theme-merge","table-caption-repair","delivery-structure-closure","sentence-pattern-sweep","duplicate-sentence-collapse","templating-tail-replay"],s=new Set;function t(a,b){return s.add(a),b()}async function u(a,b){s.add(a);try{return await b()}catch(c){let b=c instanceof Error?c.message:String(c);return console.error(`[gen] detector degraded: ${a} failed, fallback to warning issue:`,c),w.add(a),[{level:"warning",severity:"warning",category:"format",owner:"system",repairability:"manual_review",provenance:{detectorId:a,fingerprint:""},message:`交付前检测器「${a}」执行失败,已降级为待复核:${b}`,suggestion:`此为检测器基础设施异常,非正文内容缺陷——该检测维度**本次未执行**(已计入降级检测器清单,见「交付前检测器执行情况」节点)。可稍后重新生成复核,或人工复核该检测维度。`}]}}function v(a){return a.filter(a=>{let b=a.provenance?.detectorId;return!!b&&z(b)?.fixerDisposition==="manual"})}let w=new Set;function x(a){let b=("full-validation"===a?j:k).map(a=>a.id);return{executed:b.filter(a=>s.has(a)&&!w.has(a)),degraded:b.filter(a=>w.has(a)),declaredMissing:b.filter(a=>!s.has(a))}}let y=[...j,...k,{id:"authority-audit-gap",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"numeric-verification 轮收敛(numericVerification.ts:131)。覆盖已被削弱:其确定性兜底 demoteUnsourcedNumericTokens 已按 P2-2 停用,只剩 LLM 一条路"},{id:"source-enumeration",scope:"full-document",category:"style",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"cleanFormalSourcePhrases(deterministicStage5.ts:161)与检测共用同一词表。4.55.36 \xa7L3-11 已接 det()(documentFinalValidation 终检复核)"},{id:"meta-discourse-declaration",scope:"full-document",category:"style",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixMetaDiscourseDeclarations(SURFACE_FIX_STEPS meta-discourse 步,与检测同词表 META_DECLARATION_RE)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"finish-thickness",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixFinishThickness 除以 10(SURFACE_FIX_STEPS finish-thickness 步,与检测同判据 FINISH_THICKNESS_CONTEXT_WORD)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"formula-residue",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixFormulaResidues(SURFACE_FIX_STEPS formula-residue 步,与检测同判据 FORMULA_FORM_RE)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"truncated-sentence",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"链尾 cleanStructureDefects→closeTruncatedLineTail 闭合 boundary 形态(SURFACE_FIX_STEPS structure-integrity 步 + truncated-sentence 步标点残片收敛);tail 形态只报不删(尾段是可读正文)交修复轮。4.55.36 \xa7L3-11 已接 det()"},{id:"atlas-reference-phrase",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"stripDrawingPointerPhrases 经 fixFormalSourceResidue 在 SURFACE_FIX_STEPS formal-source-residue 步(stage5 + round-2 双链)确定性小句级删除。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"block-structure-contract",scope:"chapter",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门,返回计数不产出 ValidationIssue,无对象可被 FixerEntry 锚定(重写重试即其修复手段)"},{id:"block-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockDensityAssessment,首轮阻断重写即其修复手段"},{id:"block-templating",scope:"chapter",category:"style",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockTemplatingVerdict;终检侧由 templating-repair 轮承载"},{id:"block-attribution-quantification",scope:"chapter",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 AttributionQuantificationVerdict"},{id:"block-numeric-reconciliation",scope:"chapter",category:"fact_consistency",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 NumericReconciliation,阻断重写即修复手段"},{id:"block-format-constraints",scope:"chapter",category:"format",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回命中行;终检侧同词表门为 formal-text-gate"}];function z(a){return y.find(b=>b.id===a)}function A(a,b){let c=new Set(a??[]),d=new Set(b??[]);if(c.size!==d.size)return!1;for(let a of c)if(!d.has(a))return!1;return!0}function B(){let a=[],b=[...l,...m,...o,...n,...q];for(let c of b){let b=z(c.anchoredTo);if(!b){a.push(`修复器 ${c.id} 锚定检测器 ${c.anchoredTo} 未在注册表声明(检测定位=修复定位强制同源)`);continue}for(let d of(A(c.authorities,b.authorities)||a.push(`修复器 ${c.id}(authorities=${JSON.stringify(c.authorities??[])})与锚定检测器 ${c.anchoredTo}(authorities=${JSON.stringify(b.authorities??[])})权威口径不一致`),c.alsoAnchoredTo??[])){let b=z(d);b?A(c.authorities,b.authorities)||a.push(`修复器 ${c.id}(authorities=${JSON.stringify(c.authorities??[])})与扩展锚定检测器 ${d}(authorities=${JSON.stringify(b.authorities??[])})权威口径不一致`):a.push(`修复器 ${c.id} 扩展锚定检测器 ${d} 未在注册表声明(检测定位=修复定位强制同源)`)}if("llm-patch"===c.kind&&!c.patchGuard){a.push(`LLM patch 修复器 ${c.id} 未声明 patchGuard(修复过程会重新引入已知坏内容,必须预检)`);continue}for(let b of c.patchGuard?.detectors??[]){let d=z(b);d?d.deterministicSafe||a.push(`修复器 ${c.id} patchGuard 引用检测器 ${b} 未标记 deterministicSafe(patchGuard 只收录零误伤确定性检测器)`):a.push(`修复器 ${c.id} patchGuard 引用检测器 ${b} 未在注册表声明`)}}for(let[b,c]of l.entries())l.slice(0,b).some(a=>a.id===c.id)&&a.push(`确定性修复器锚定声明重复:${c.id}`);let c=new Set(d.a.map(a=>a.key));for(let b of c)l.some(a=>a.id===b)||a.push(`确定性修复器 ${b} 已接入 SURFACE_FIX_STEPS 但未在 DETERMINISTIC_FIXER_ANCHORS 声明锚定检测器`);for(let b of l)c.has(b.id)||a.push(`确定性修复器锚定声明 ${b.id} 无对应 SURFACE_FIX_STEPS 键(声明多余或键已改名)`);for(let[b,c]of m.entries())m.slice(0,b).some(a=>a.id===c.id)&&a.push(`数值裁决器修复器声明重复:${c.id}`);for(let[b,c]of o.entries())o.slice(0,b).some(a=>a.id===c.id)&&a.push(`章草稿级修复器声明重复:${c.id}`);for(let[b,c]of n.entries())n.slice(0,b).some(a=>a.id===c.id)&&a.push(`链内确定性修复器声明重复:${c.id}`);let j=new Set([...l,...m,...o,...q].map(a=>a.id));for(let b of n)j.has(b.id)&&a.push(`链内确定性修复器 ${b.id} 与其它声明表重名(FixerEntry.id 须全局唯一,否则按 id 追溯修复器产生歧义)`);for(let b of y)b.category&&i.has(b.category)||a.push(`检测器 ${b.id} 声明了非法 category(当前=${b.category||"缺失"};合法值:${[...i].join("、")})`);if(a.push(...function(a){let b=[],c=new Set;for(let b of a.fixers)for(let a of(c.add(b.anchoredTo),b.alsoAnchoredTo??[]))c.add(a);let d=new Set(a.pending);for(let c of(d.size!==a.pending.length&&b.push("PENDING_FIXER_DISPOSITION 存在重复 id(欠账清单须唯一)"),d))a.detectors.some(a=>a.id===c)||b.push(`PENDING_FIXER_DISPOSITION 声明了未登记的检测器 ${c}(已改名或已删除,请同步移出欠账清单)`);for(let f of a.detectors){let a=c.has(f.id),g=f.fixerDisposition;if(d.has(f.id)){g?b.push(`检测器 ${f.id} 已完成处置声明(${g})却仍在 PENDING_FIXER_DISPOSITION 中——请从欠账清单移出`):a&&b.push(`检测器 ${f.id} 已有修复器锚定却仍在 PENDING_FIXER_DISPOSITION 中——请从欠账清单移出`);continue}if(!g){a?f.fixerDispositionReason&&b.push(`检测器 ${f.id} 写了 fixerDispositionReason 却未声明 fixerDisposition(说明须挂在明确处置上)`):b.push(`检测器 ${f.id} 既无修复器锚定、也未声明 fixerDisposition(孤儿必须显式 'exempt' 或 'manual' 并说明理由,不得沉默)`);continue}if(!e.has(g)){b.push(`检测器 ${f.id} 声明了非法 fixerDisposition(当前=${g};合法值:${[...e].join("、")})`);continue}"fixed"!==g||a||b.push(`检测器 ${f.id} 声明 fixerDisposition='fixed' 但无任何 FixerEntry 锚定它(声明与事实不符)`),"fixed"!==g&&(a&&b.push(`检测器 ${f.id} 声明 fixerDisposition='${g}' 但已有修复器锚定——声明与事实不符(应改为 'fixed' 或移除多余锚定)`),f.fixerDispositionReason?.trim()||b.push(`检测器 ${f.id} 声明 fixerDisposition='${g}' 但未给出理由(exempt/manual 必须书面说明为何不需要修复器)`))}return b}({detectors:y,fixers:b,pending:f})),a.push(...function(a){let b=[],c=new Set(a.pending);c.size!==a.pending.length&&b.push("PENDING_WRITING_TIME_DISPOSITION 存在重复 id(欠账清单须唯一)");let d=new Set(a.detectors.map(a=>a.id));for(let a of c)d.has(a)||b.push(`PENDING_WRITING_TIME_DISPOSITION 声明了未登记的检测器 ${a}(已改名或已删除,请同步移出欠账清单)`);for(let[c,e]of Object.entries(a.dispositions))d.has(c)||b.push(`写作期处置表声明了未登记的检测器 ${c}(已改名或已删除,请同步删除该条)`),"terminal-only"!==e.kind||e.reason.trim()||b.push(`检测器 ${c} 声明 terminal-only 但 reason 为空——「只能终检」必须书面写明理由,否则与沉默缺省无异`);for(let d of a.detectors){let e=a.dispositions[d.id];if(e){c.has(d.id)&&b.push(`检测器 ${d.id} 已声明写作期处置(${e.kind})却仍在欠账清单中——请从欠账清单移出`);continue}c.has(d.id)||b.push(`检测器 ${d.id} 既未声明 writingTimeDisposition 也未进欠账清单——新增检测器必须当场给出写作期处置(constraint / self-check / terminal-only+理由)`)}return b}({detectors:y,dispositions:g,pending:h})),a.length>0)throw Error(`检测器/修复器注册表一致性校验失败(${a.length} 项):
|
|
238
|
+
${b.content}`;return Math.min(1.8,.16*[...new Set([a.title,...a.sections||[],...a.requiredFacts].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】-]+/u)).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,36))].filter(a=>c.includes(a)).length)}function m(a){return`${a.sectionTitle||""}${a.content}`.slice(0,600)}function n(a,b,c,d){let f=b.map(b=>{let d=(0,e.A1)(b,a.requiredFacts)*k(a,b.processingType)+l(a,b),f=c.carrierBoost?c.carrierBoost(b.filePath||""):1,g=c.semantic?c.semantic.similarity(c.semantic.queryText,m(b)):0;return{...b,score:.5*d*f+10*g}});return(0,e.QR)(f,c,d)}function o(a,b,c,d){if(c<=0||b.length<=c)return b;let f=b.map(b=>({item:b,lexical:((0,e.A1)(b,a.requiredFacts)*k(a,b.processingType)+l(a,b))*(d?d(b.filePath||""):1)}));return f.sort((a,b)=>b.lexical-a.lexical),f.slice(0,c).map(a=>a.item)}function p(a,b,c){let d=(a.sections||[]).slice(0,10).join(" "),e=a.requiredFacts.slice(0,10).join(" "),f=a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4);return[...new Set([...f.length>=2?[`${a.title} ${d} ${e}`.trim(),...f.map(b=>`${b} ${(a.sections||[]).slice(0,6).join(" ")}`.trim()),`${f.slice(0,3).join(" ")} ${e}`.trim()]:[`${a.title} ${d} ${e}`.trim()],...b,...c].filter(Boolean))]}async function q(a){if((0,g.Te)(a.signal),0===a.scopedFilePaths.length)return[];let b=`${a.chapter.title} ${a.sectionTitle}`.trim(),c=await a.manager.search(a.projectRoot,b,{scope:"project",filters:{filePaths:a.scopedFilePaths,materialRoots:a.scopedMaterialRoots??(0,d.materialRootsOfFiles)(a.scopedFilePaths)},limit:20,weights:j(b),generationMode:!0});return(0,e.QR)(c.results.map(b=>({chapterId:a.chapter.id,filePath:b.filePath,score:b.score+1.2,content:b.content,roleId:a.fileRoleByPath.get(b.filePath),processingType:a.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"section-evidence"})),{preservePinned:!0})}},65667:(a,b,c)=>{c.d(b,{AK:()=>t,Rh:()=>v,Ti:()=>B,_H:()=>A,j4:()=>s,re:()=>z,tx:()=>u});var d=c(7148);let e=/^(?:为|达|共|约|计|配置|共计|总计|合计)$/u,f=/作业人员|施工人员|人员配置|班组|施工组|每村|分组|编组|编入|队伍/u,g=/^(?:为|达|共|约|计|配置|共计|总计|合计|投入|配备|启用)$/u,h=/^[))、::,,\s]{0,2}(?:混凝土|砼)?\s*(\d+(?:\.\d+)?)\s*(m3|m³|立方米|方|m2|m²|㎡|平方米|延长米|米|m|kg|千克|公斤|t|吨|套|个|块|根|只|组|件|片|樘|扇|盏|座|台|处|项|条|副|对|株)(?![A-Za-z0-9²³])/u,i=/^([^0-9]{0,2}?)(\d+(?:\.\d+)?)\s*人/u,j=/^([^0-9]{0,2}?)(\d+(?:\.\d+)?)\s*台/u,k=/阶段[^。;\n]{0,30}?(\d+(?:\.\d+)?)\s*人/u,l="机|吊|泵|车|夯",m=/[为配置备启投拟需计划增租赁购采设进出按据由从向对把被使等该此其每各和与及或在是将宜并可未非不另又还有部现中套余的用入要场阶段]/u,n=/^(?:[台辆部具个组米吨座])/u,o=/^(?:主力|主要|常用|配套|相关|专用|通用|各类|多种|其余|剩余|上述|前者|后者)/u,p=/(?:备用|租赁|租用)/u,q=/不使用|不采用|不配置|无需|未采用|不得使用|禁止使用/u,r=RegExp(`([\\p{Script=Han}A-Za-z0-9]{2,8}(?:${l}))$`,"u");function s(a){let b=a.replace(/\s+/gu,""),c=b;for(let a=b.length-1;a>=0;a-=1)if(m.test(b[a])){if(p.test(b.slice(0,a+1)))return;c=b.slice(a+1);break}if(!(c.length<2||n.test(c))&&!o.test(c))return c}function t(a){let b=[],c=RegExp(`([\\p{Script=Han}A-Za-z0-9]{2,8}(?:${l}))[^\\d。;;\\n|、,]{0,12}(\\d+)\\s*(?:台|套|辆)`,"gu");for(let d of a.matchAll(c)){let c=d.index??0,e=Math.max(a.lastIndexOf(",",c),a.lastIndexOf("。",c),a.lastIndexOf(";",c),a.lastIndexOf(";",c),a.lastIndexOf("\n",c),a.lastIndexOf("、",c));if(q.test(a.slice(e+1,c+d[1].length)))continue;let f=s(d[1]);if(!f)continue;let g=Number(d[2]);Number.isFinite(g)&&!(g<=0)&&b.push({name:f,raw:d[1],count:g,start:c,text:d[0]})}return b}function u(a){let b=new Set,c=RegExp(`([\\p{Script=Han}A-Za-z0-9]{2,8}(?:${l}))`,"gu");for(let d of a.matchAll(c)){let a=s(d[1]);a&&b.add(a)}return[...b]}function v(a){let b=r.exec(a);if(b)return s(b[1])}function w(a){let b=(a||"").replace(/\s+/gu,"");return b?/m[3³]|立方米|方/u.test(b)?"volume":/m[2²]|㎡|平方米/u.test(b)?"area":/m|米/u.test(b)?"length":/吨|千克|公斤|kg|^t$/u.test(b)?"mass":/套|个|块|根|只|组|件|片|樘|扇|盏|座|台|处|项|条|副|对|株/u.test(b)?"count":null:null}function x(a){return(a||"").replace(/\s+/gu,"").toUpperCase()}function y(a){let b=(a||"").trim().toLowerCase();if(!b)return[];let c=new Set([b.replace(/[((][^))]*[))]/gu,"").trim()]);for(let a of b.matchAll(/[((]([^))]*)[))]/gu))c.add((a[1]||"").trim());return[...c].filter(a=>a.length>0)}function z(a,b){if(!a)return;let c=(a.resources?.labor?.composition??[]).filter(a=>a.trade&&Number.isFinite(a.count)&&a.count>0).map(a=>({trade:a.trade,count:a.count})),d=new Map;for(let b of a.resources?.equipment??[]){if(!b.name)continue;let a=d.get(b.name);a?a.push(b):d.set(b.name,[b])}let e=[];for(let[a,b]of d)for(let c of b){let d=c.quantity&&c.quantity>0?c.quantity:Math.round(((c.min??1)+(c.max??c.min??1))/2);Number.isFinite(d)&&!(d<=0)&&e.push({name:a,spec:c.spec||"",count:d,variantCount:b.length})}let f=new Map;for(let b of a.materialsPlan??[]){if(!b.name)continue;let a=f.get(b.name);a?a.push(b):f.set(b.name,[b])}let g=[];for(let[a,b]of f)if(!(b.length<2))for(let c of b){if(!c.spec||!Number.isFinite(c.quantity)||(c.quantity??0)<=0)continue;let d=w(c.unit||"");d&&g.push({name:a,spec:c.spec,quantity:c.quantity,unit:c.unit||"",family:d,variantCount:b.length})}return{composition:c,equipment:e,materials:g,materialNames:[...f.keys()].filter(a=>a.length>=2),scopedQuantities:function(a){let b=new Map;if(!a)return b;for(let c of a.entries){let a=(c.name||"").trim();if(!a||!Number.isFinite(c.quantity))continue;let d=(c.villageGroup||c.section||"").trim();for(let e of c.specQuantityPairs||[]){let c=(e.spec||"").trim();if(!c)continue;let f=/^([\d,,]+(?:\.\d+)?)\s*(\S*)$/u.exec((e.quantity||"").trim());if(!f)continue;let g=Number.parseFloat(f[1].replace(/[,,]/gu,""));if(!Number.isFinite(g))continue;let h=`${a}\u0000${x(c)}`,i=b.get(h)||[];i.push({value:g,unit:f[2]||"",scope:d}),b.set(h,i)}}return b}(b)}}function A(a,b){let c=[],l=new Set(b.composition.map(a=>a.trade)),m=(a,b)=>{let c=[];if(!b)return c;let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(-1===e)break;c.push(e),d=e+b.length}return c},n=(a,b)=>{let c=[];if(!b)return c;let d=0;for(;d<a.length;){let e=a.indexOf(b,d);if(-1===e)break;let f=a[e-1]||"",g=`${f}${b}`;if(/[\u4e00-\u9fa5]/u.test(f)&&[...l].some(a=>a.length>b.length&&a.includes(g))){d=e+b.length;continue}c.push(e),d=e+b.length}return c},o=b.materialNames,p=(a,b)=>{let c=Math.max(a.lastIndexOf("。",b-1),a.lastIndexOf(";",b-1),a.lastIndexOf(";",b-1),a.lastIndexOf("\n",b-1),b-200-1)+1,d=Math.max(a.lastIndexOf(",",b-1),a.lastIndexOf(",",b-1),c-1)+1,e=c=>{let d,e=a.slice(c,b);for(let a of o){let b=e.lastIndexOf(a);!(b<0)&&(!d||b>d.at||b===d.at&&a.length>d.name.length)&&(d={name:a,at:b})}return d?.name};return e(d)??e(c)},q=function(a){let b=[],c=0;for(;c<=a.length;){let d=a.indexOf("\n",c),e=-1===d?a.length:d;if(b.push({start:c,end:e}),-1===d)break;c=d+1}let d=/^\s*(?:#|\||>)/u,e=[],f=0;for(;f<b.length;){let c=b[f],g=a.slice(c.start,c.end);if(""===g.trim()||d.test(g)){f+=1;continue}let h=f;for(;h+1<b.length;){let c=b[h+1],e=a.slice(c.start,c.end);if(""===e.trim()||d.test(e))break;h+=1}e.push({start:c.start,end:b[h].end}),f=h+1}return e}(a),r=[];for(let b of q){let c=a.slice(b.start,b.end);if(!c.includes("阶段"))continue;let d=[];for(let a of c.matchAll(RegExp(k.source,"gu")))d.push({start:b.start+(a.index??0),total:Number(a[1])});if(0!==d.length)for(let[c,f]of d.entries()){let g=f.start,h=d[c+1]?.start??b.end,j=a.slice(g,h),k=0;for(let a of l)for(let b of n(j,a)){let c=j.slice(b+a.length,b+a.length+12),d=i.exec(c);d&&(!d[1]||e.test(d[1]))&&(k+=Number(d[2]))}k>0&&k===f.total&&r.push({start:g,end:h})}}let s=a=>r.some(b=>a>=b.start&&a<b.end);for(let d of b.composition)for(let b of n(a,d.trade)){if(s(b))continue;let g=a.slice(0,b),h=Math.max(g.lastIndexOf("。"),g.lastIndexOf(";"),g.lastIndexOf(";"),g.lastIndexOf("\n"));if(f.test(g.slice(h+1)))continue;let j=a.slice(b+d.trade.length,b+d.trade.length+12),k=i.exec(j);if(!k||k[1]&&!e.test(k[1]))continue;let l=Number(k[2]);if(l===d.count)continue;let m=b+d.trade.length+k[1].length;c.push({kind:"trade",label:`工种构成 ${d.trade}`,start:m,end:m+k[2].length,actual:l,expected:d.count,message:`工种构成人数与蓝图权威不一致:${d.trade} 正文 ${l} 人,蓝图权威 ${d.count} 人`,suggestion:"工种构成表必须与蓝图工种构成唯一口径一致,各工种人数不得自行改写。"})}let u=new Map;for(let b of t(a)){let a=/(\d+)\s*(?:台|套|辆)$/u.exec(b.text);if(!a||void 0===a.index)continue;let c=b.start+a.index,d=u.get(c);(!d||d.length<b.name.length)&&u.set(c,b.name)}for(let d of b.equipment)if(1===d.variantCount)for(let b of m(a,d.name)){let e=a.slice(b+d.name.length,b+d.name.length+12),f=j.exec(e);if(!f||f[1]&&!g.test(f[1]))continue;let h=Number(f[2]),i=b+d.name.length+f[1].length,k=u.get(i);(!k||k.includes(d.name)||d.name.includes(k))&&h!==d.count&&c.push({kind:"equipment",label:`机械台数 ${d.name}`,start:i,end:i+f[2].length,actual:h,expected:d.count,message:`机械台数与蓝图权威不一致:${d.name} 正文 ${h} 台,蓝图权威 ${d.count} 台`,suggestion:"机械投入计划必须与蓝图机械清单一致,台数不得自行改写。"})}else if(d.spec)for(let b of m(a,d.spec)){let e=a.lastIndexOf("\n",b)+1,f=a.indexOf("\n",b);-1===f&&(f=a.length);let g=a.slice(e,f),h=b-e,i=e+Math.max(g.lastIndexOf(",",h)+1,g.lastIndexOf("。",h)+1,g.lastIndexOf(";",h)+1);if(!a.slice(i,f).includes(d.name))continue;let j=b+d.spec.length,k=a.slice(j,j+12),l=/(\d+(?:\.\d+)?)\s*台/u.exec(k);if(!l)continue;let m=Number(l[1]);if(m===d.count)continue;let n=j+(l.index??0);c.push({kind:"equipment",label:`机械台数 ${d.name}(${d.spec})`,start:n,end:n+l[1].length,actual:m,expected:d.count,message:`机械台数与蓝图权威不一致:${d.name}(${d.spec}) 正文 ${m} 台,蓝图权威 ${d.count} 台`,suggestion:"机械投入计划必须与蓝图机械清单一致,台数不得自行改写。"})}for(let e of b.materials)for(let f of m(a,e.spec)){let g=a.lastIndexOf("\n",f)+1,i=a.indexOf("\n",f);-1===i&&(i=a.length);let j=a.slice(g,i);if(/^\s*\|?\s*(?:合计|小计|总计|累计)/u.test(j))continue;let k=f-g,l=g+Math.max(j.lastIndexOf(";",k),j.lastIndexOf(";",k),j.lastIndexOf("。",k))+1,m=j.indexOf(";",k),n=j.indexOf(";",k),o=j.indexOf("。",k),q=Math.min(-1===m?j.length:m,-1===n?j.length:n,-1===o?j.length:o);if(!a.slice(l,g+q).includes(e.name))continue;let r=p(a,f);if(r&&r!==e.name)continue;let s=f+e.spec.length,t=a.slice(s,s+16),u=h.exec(t);if(!u)continue;let v=u[2];if(w(v)!==e.family)continue;let z=Number(u[1]),A=(b.scopedQuantities.get(`${e.name}\u0000${x(e.spec)}`)||[]).filter(a=>w(a.unit)===e.family);if(!function(a,b,c){let e=[...y(b.unit),...c.flatMap(a=>y(a.unit))];return 0===e.length||e.some(b=>(0,d.Q0)(a,b))}(v,e,A))continue;let B=function(a,b){let c=[...new Set(a.map(a=>a.scope).filter(a=>a.length>0))];if(c.length<2)return;let d=c.filter(a=>(function(a){let b=(a||"").trim();if(b.length<2)return[];let c=new Set([b]);for(let a of b.split(/[、,,;;/()()\s]+/u)){let b=a.trim();b.length>=2&&c.add(b)}for(let a of b.matchAll(/\d+#[\p{Script=Han}]{2}/gu))c.add(a[0]);return[...c].filter(a=>a.length>=2)})(a).some(a=>b.includes(a)));if(1!==d.length)return;let e=[...new Set(a.filter(a=>a.scope===d[0]).map(a=>a.value))];if(0!==e.length)return 1===e.length?e:[...e,e.reduce((a,b)=>a+b,0)]}(A,a.slice(l,g+q)),C=[...new Set(A.map(a=>a.value))],D=C.length>1?C.reduce((a,b)=>a+b,0):void 0;if((B??[...C,...void 0===D?[]:[D],e.quantity]).some(a=>1e-9>Math.abs(a-z)))continue;let E=e.quantity,F="蓝图权威",G=B&&1===B.length?B[0]:void 0;if(void 0!==G?(E=G,F="清单逐条口径"):1===C.length&&(E=C[0],F="清单逐条口径"),z===E)continue;let H=s+u[0].indexOf(u[1]);c.push({kind:"material",label:`材料拆分 ${e.name}(${e.spec})`,start:H,end:H+u[1].length,actual:z,expected:E,message:"蓝图权威"===F?`材料规格拆分数量与蓝图权威不一致:${e.name}(${e.spec})正文 ${z}${e.unit},蓝图权威 ${e.quantity}${e.unit}`:`材料规格拆分数量与清单逐条口径不一致:${e.name}(${e.spec})正文 ${z}${e.unit},清单逐条口径 ${E}${e.unit}${1e-9>Math.abs(e.quantity-E)?"":`(蓝图汇总 ${e.quantity}${e.unit} 为跨单体总量,不得直接引用到单体语句)`}`,suggestion:"同名多规格材料的拆分数量必须与清单逐项一致,不得自行分配;单体语句的数量按该单体的清单逐条口径引用,不得引用跨单体汇总值。"})}return c}function B(a,b){if(!b)return{markdown:a,fixedCount:0,details:[],residualCount:0};let c=A(a,b);if(0===c.length)return{markdown:a,fixedCount:0,details:[],residualCount:0};let d=[...c].sort((a,b)=>b.start-a.start),e=a,f=[],g=1/0;for(let a of d)a.end>g||(e=`${e.slice(0,a.start)}${a.expected}${e.slice(a.end)}`,f.push(a),g=a.start);let h=A(e,b);return h.length>0?{markdown:a,fixedCount:0,details:[],residualCount:h.length}:{markdown:e,fixedCount:f.length,details:f.map(a=>`${a.label} ${a.actual}→${a.expected}`),residualCount:0}}},71678:(a,b,c)=>{c.d(b,{Hf:()=>t,M8:()=>n,Xp:()=>r,a0:()=>m,dn:()=>s,hM:()=>l,mI:()=>v,xb:()=>q});var d=c(37047),e=c(41991),f=c(70208),g=c(30111);let h=["对与评标活动有关的工作人员的纪律要求","评标委员会成员与投标人接触的限制","评标纪律与廉洁从业承诺要求","评审争议处理与投标澄清配合程序","评审结果确认与中标公示流程","评标办法与分值构成说明","异常低价评审与计算方式说明","清单计量与报价口径约定","投标文件实质性响应要求","投标保证金缴纳与退还程序","开标程序与投标文件递交截止时间","评标期间行为管控与资料闭环","预付款与进度款支付比例约定","履约担保与保证金缴纳退还约定","价格波动与合同价款调整约定","暂列金额与暂估价使用约定","税费计取与发票结算约定","违约责任与罚款赔偿条款"],i=["劳动力配置计划与高峰期人数安排","施工质量保证措施与验收标准","安全生产管理与教育培训要求","施工进度计划与关键线路安排","材料设备采购进场计划与检验要求","施工现场文明施工与环境保护管理","劳动纪律与班组作业管理制度","施工机械设备配置与维护保养计划","农民工工资支付保障与劳务实名制管理","材料采购质量证明与进场验收管理","工期承诺与进度考核奖惩管理"],j=/评标|投标|行贿|打招呼|递条子|廉洁|串标|围标|弄虚作假|干扰评标|纪律|澄清|中标|报价|清单计量|评审|保证金|开标|递交|争议|异常低价|评标基准价|预付款|进度款|担保|价格波动|材料调差|暂列金额|暂估价|计税|税金|发票|违约|业绩证明|类似(?:工程)?业绩|获奖|荣获|协会颁发|营业执照|资质证书|安全生产许可证|认证证书|管理体系认证|审计报告|信用等级|信用评价|社保证明|无行贿犯罪|中标查询|中标公示|中标结果|电子交易系统|公共资源交易|质疑投诉|评标委员会/u;function k(a){let b=a.sectionTitle?.trim()||"",c=(a.content||"").replace(/\s+/gu," ").slice(0,400);return b?`${b}。${c}`:c}function l(a){let b=a.sectionTitle?.trim()||a.content.replace(/\s+/gu,"").slice(0,60);return`${a.filePath}::${b}`}async function m(a,b){if(0===a.length)return{safe:[],excluded:[]};let c=a.filter(a=>j.test(k(a)));if(0===c.length)return{safe:[...a],excluded:[]};let e=c.map(k),f=await (0,d.Mv)(e,[...h],b),g=await (0,d.Mv)(e,[...i],b),l=new Set;for(let a of c){let b=k(a),c=Math.max(...h.map(a=>f(b,a))),d=Math.max(...i.map(a=>g(b,a)));c>=.6&&c>d&&l.add(a)}return{safe:a.filter(a=>!l.has(a)),excluded:[...l]}}async function n(a){return(0,e.A)({prototypes:[...h],negativePrototypes:[...i],threshold:.6,embedDocuments:a})}function o(a){return a.replace(/[\s\p{P}\p{S}]+/gu,"").toLowerCase()}let p=/^(?:我公司|本公司|我方|投标人|供应商|承包人)(?:就|对)[^,。;]{0,22}(?:均属|属实|真实有效|承担|负责|无异议|为准)$/u;function q(a){let b=a.trim().replace(/\s+/gu,"");if(!b||(0,f.mq)(b)||p.test(b))return!0;let c=o(b);if(h.some(a=>o(a)===c))return!0;let d=b.replace(/农民工工资保证金|工资保证金/gu,""),e=/评标|投标|开标|中标|评审|保证金|串标|围标|廉洁|询标|递交/u.test(d),g=/纪律|监督|争议|澄清|程序|行为|管控|限制|接触|公示|承诺|响应|办法/u.test(b);return!!(e&&g||/异常低价|评标基准价/u.test(b)||/电子保函|保函|投标保证金|履约担保|履约保证金|保证金(?:的)?(?:缴纳|退还|提交|方式)/u.test(b)&&!/农民工|工资|专用账户|实名|考勤|劳资/u.test(b)||/暂列金额|暂估价|材料调差/u.test(b)||/预付款(?:支付|比例|约定|申请|保函)|进度款(?:支付|申请|计量|约定)|履约担保/u.test(b)||/价格波动(?:调整|约定)|违约金(?:条款|约定)|计税|税金(?:计取|结算)|发票(?:开具|结算)/u.test(b))||r(b)}function r(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))||"technical"!==(0,g.m)(b)||!!/营业执照|资质证书|安全生产许可证|资格预审|资格审查|资质审查|财务状况|业绩证明|业绩要求|银行资信|审计报告|信用记录|信用评价|不良行为记录|联合体投标|联合体协议/u.test(b)&&!/施工|技术|方案|措施|管理|控制|验收|工艺|流程|计划|组织|进度|质量|工期|文明|绿色|环保|节能|材料|设备|机械|人员|劳务|检验|检测|试验|保证|落实|制度/u.test(b)}function s(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&(!!/接受分包/u.test(b)||!!/投标人|投标方|投标企业|承包人资格|资格要求|资格审查|资格预审|资质要求|资质条件|资质等级|资格条件|财务状况|业绩要求|业绩证明|信用要求|联合体|社保/u.test(b)&&/营业执照|资质证书|安全生产许可证|级及以上资质|注册建造师|建造师注册证书|安全生产考核合格证书|职称证书|财务状况|财务报告|审计报告|银行资信|业绩证明|类似业绩|信用记录|信用评价|不良行为记录|投标保证金|履约保证金|社保|在建工程|人员组成表/u.test(b))}function t(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&!!(/你方/u.test(b)&&/我方/u.test(b)||/发包人[^。;;]{0,30}?(?:审批|批准|备案|同意|许可)/u.test(b)||/^[\d((、..\s]{0,8}监理人/u.test(b)&&/(?:提交|报送|审批|延期|通知|检查|验收)/u.test(b)||/(?:特别约定|有关约定|的约定)[::]/u.test(b)||/通用(?:合同)?条款/u.test(b)||/(?:承包人|发包人|监理人)/u.test(b)&&/(本合同|报送|提交|审批|备案|更换|违约责任|撤换|拒绝|保管|验收记录|签字|颁发|教育|穿戴|定期检查|授权范围|驻场|在岗)/u.test(b))}async function u(a){let b=a.sections.filter(a=>a?.trim());if(0===b.length)return[];let c=b.filter(a=>!q(a)),e=c.filter(a=>j.test(a));if(0===e.length)return c;let f=`${a.chapterTitle} ${a.chapterPurpose||""}`.trim(),g=await (0,d.Mv)(e,[...h],a.embedDocuments),k=await (0,d.Mv)(e,f?[f]:[],a.embedDocuments),l=await (0,d.Mv)(e,[...i],a.embedDocuments),m=new Set;for(let a of e){let b=Math.max(...h.map(b=>g(a,b))),c=f?k(a,f):0,d=Math.max(...i.map(b=>l(a,b)));b>=.6&&b>c&&b>d&&m.add(a)}return c.filter(a=>!m.has(a))}async function v(a,b){return Promise.all(a.map(async a=>({...a,sections:await u({sections:a.sections||[],chapterTitle:a.title,chapterPurpose:a.purpose,embedDocuments:b})})))}},73859:(a,b,c)=>{c.d(b,{$i:()=>f,E1:()=>j,d2:()=>i,oC:()=>g,p4:()=>d,rF:()=>h});let d={id:"default_general_document",name:"通用文档",factFields:[{id:"document_identity",name:"对象名称",aliases:["项目名称","工程名称","文档名称","任务名称","招标项目名称","建设项目名称"],category:"identity",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.75,minForValidation:.85,allowPathOnly:!1},conflictPolicy:"strict"},{id:"schedule_requirement",name:"周期要求",aliases:["计划工期","工期","周期要求","进度节点要求","开工日期","竣工日期"],category:"schedule",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"strict"},{id:"quality_requirement",name:"质量要求",aliases:["质量要求","质量标准","验收要求","评价标准"],category:"quality",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"safety_requirement",name:"安全合规要求",aliases:["安全要求","安全合规要求","风险控制要求","合规要求"],category:"safety",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"technical_parameter",name:"技术参数",aliases:["技术参数","参数规格范围","规格","型号","尺寸","标准编号","材料设备"],category:"technical",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"resource_plan",name:"资源配置",aliases:["劳动力","机械","检测设备","应急物资","资源配置","人员配置"],category:"resource",cardinality:"multiple",derivationPolicy:"plan_inferable",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.45,minForValidation:.55,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"commercial_data",name:"商务数据",aliases:["报价","单价","合价","综合单价","预留金","税率","金额","利润"],category:"commercial",cardinality:"multiple",derivationPolicy:"forbidden",usagePolicy:"do_not_use",confidencePolicy:{minForGeneration:1,minForValidation:1,allowPathOnly:!1},conflictPolicy:"ignore"},{id:"rule_requirement",name:"规则要求",aliases:["规则要求","变更说明","实施范围","对象范围","结构化数据范围"],category:"compliance",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.6,minForValidation:.7,allowPathOnly:!1},conflictPolicy:"allow_multiple"}],forbiddenValuePatterns:[/投标报价|报价明细|单价|合价|综合单价|预留金|暂列金额|税率|增值税|利润|结算/u],diagnosticValuePatterns:[/OCR|识别错误|乱码|无法确认|疑似|不确定|绑定片段|兜底|知识库|提示词|后台|文件路径|PDF|DWG|Excel/u,/^#+\s*/u,/^见(?:招标|投标人|前附|补疑|图纸|清单|文件|资料|公告|须知)/u],lowConfidenceValuePatterns:[/无法确认|疑似|不确定|需复核|文字模糊|语义断裂|识别错误|乱码/u]},e={...d,id:"construction_organization_design",name:"施工组织设计"};function f(a,b=""){let c=`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`;return/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u.test(c)?e:d}function g(a,b){if(b)return a.factFields.find(a=>a.name===b||a.aliases.some(a=>b.includes(a)||a.includes(b)))}function h(a,b){return a.forbiddenValuePatterns.some(a=>a.test(b))}function i(a,b){return a.diagnosticValuePatterns.some(a=>a.test(b))}function j(a,b){return a.lowConfidenceValuePatterns.some(a=>a.test(b))}},75251:(a,b,c)=>{c.d(b,{As:()=>k,C4:()=>E,FW:()=>r,NN:()=>y,az:()=>M,e:()=>J,j9:()=>s,uv:()=>w,w6:()=>z});var d=c(7148);function e(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function f(a){let b=Number.parseFloat(a.replace(/[,,\s]/gu,""));return Number.isFinite(b)?b:void 0}function g(a,b){return Math.abs(a-b)<=.01+1e-6*Math.max(Math.abs(a),Math.abs(b))}function h(a,b){return!!g(a,b)||Number.isInteger(a)&&(Math.trunc(b)===a||Math.round(b)===a)}function i(a){return a.replace(/\s+/gu,"").toLowerCase()}function j(a){return(0,d.Sn)(String(a||""))}let k=/(?:每|厚度|宽度|高度|深度|长度|直径|间距|净距|坡度|标高|偏差|误差|系数|等级|龄期|温度|含水率|压实度|密度|功率|电压|照度|色温|耐火|强度|抗渗|配合比|搭接|错缝|含水|埋深|覆土|预留|预埋|伸缩|沉降|变形|垂直度|平整度|倾角|坡度|模数|螺距|壁厚|净空|层高|埋设|位置|距离|半径|周长|坡度|距地|距墙|距顶|距梁|距楼|离地|离墙)/u,l=/^(?:以上|以下|以内|左右|及[^。;;,,]{0,8}(?:以上|以下|以内|左右))/u;function m(a){let b=[],c=[],d=new Map,e=new Map,h=a.billFactLock;if(h)for(let a of h.entries){let e=Number.isFinite(a.quantity)?a.quantity:void 0;for(let g of(void 0!==e&&(b.push({name:(a.name||"").trim(),value:e,unit:(a.unit||"").trim(),description:a.description||"",source:"bill"}),c.push(e)),a.specQuantityPairs||[])){let b=(g.spec||"").replace(/\s+/gu,"").toLowerCase(),e=/^([\d,,]+(?:\.\d+)?)\s*(.*)$/u.exec((g.quantity||"").trim()),h=e?f(e[1]):void 0;if(!b||void 0===h)continue;let i=d.get(b)||[];i.push({value:h,unit:(e?.[2]||"").trim(),entryName:a.name,spec:(g.spec||"").trim()}),d.set(b,i),c.push(h)}}for(let[d,f]of Object.entries(a.blueprintData?.quantities??{})){if("number"!=typeof f?.value||!Number.isFinite(f.value))continue;for(let a of(b.push({name:d.trim(),value:f.value,unit:(f.unit||"").trim(),description:"",source:"blueprint"}),c.push(f.value),f.groups??[]))c.push(a.value);let a=f.specBreakdown??[];if(a.length>=2){let b=a.reduce((a,b)=>a+b.value,0);for(let h of(e.set(d.trim(),{value:f.value,unit:(f.unit||"").trim(),specs:new Map(a.map(a=>[i(a.spec),a.value])),breakdown:a.map(a=>({spec:a.spec,value:a.value})),partitioned:g(b,f.value)}),a))c.push(h.value)}}return!function(a,b){if(!a)return;let c=a=>{if("number"==typeof a){Number.isFinite(a)&&b.push(a);return}if("string"==typeof a){for(let c of a.matchAll(/\d+(?:\.\d+)?/gu))b.push(Number.parseFloat(c[0]));return}if(Array.isArray(a))return void a.forEach(c);a&&"object"==typeof a&&Object.values(a).forEach(c)};[a.project,a.schedule,a.quality,a.safety,a.resources,a.preciseFacts,a.bills,a.drawings,a.rules,a.specifications,a.tables].forEach(c)}(a.factsModel,c),{entries:b,numberPool:c,specValues:d,aggregateSpecs:e}}let n=/(?:合计|共计|总计|总共|总量|总数|总长|全长|总长度|总数量|总面积|总重量|小计)(?:为|达|约|共|计)?\s*([\d,,]+(?:\.\d+)?)\s*(立方米|m³|m3|平方米|㎡|m²|m2|公里|千米|km|kg|吨|t|座|个|套|处|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|m)(?![a-zA-Z0-9²³])/gu;function o(a,b,c=2){if(!a||!b)return!1;let d=Math.min(a.length,8);for(let e=d;e>=c;e-=1)for(let c=0;c+e<=a.length;c+=1)if(b.includes(a.slice(c,c+e)))return!0;return!1}function p(a,b){let c=function(a){switch(j(a)){case"m":return"(?:m|米)";case"km":return"(?:km|公里|千米)";case"m2":return"(?:m2|m\xb2|㎡|平方米)";case"m3":return"(?:m3|m\xb3|立方米)";case"t":return"(?:t|吨)";case"kg":return"(?:kg|千克)";default:return e((a||"").trim())}}(b.unit);for(let d of function(a){let b=`${a}`,c=new Set([b]),[d,e]=b.split(".");return d.length>=4&&c.add(`${d.replace(/\B(?=(\d{3})+(?!\d))/gu,",")}${e?`.${e}`:""}`),[...c]}(b.value)){let f=e(d);if(RegExp(`${f}\\s*(?:${c})|(?:${c})\\s*${f}`,"u").test(a)||b.value>=100&&RegExp(`(?<![\\d.])${f}(?![\\d])`,"u").test(a))return!0}return!1}function q(a,b,c){let d=a.filter(a=>a.name.length>=2&&o(a.name,c));if(d.length<2||d.length>24)return[];for(let a=0;a<d.length;a+=1)for(let c=a+1;c<d.length;c+=1){let e=d[a],f=d[c];if(!(e.name===f.name&&g(e.value,f.value))&&g(e.value+f.value,b))return[e,f]}return[]}let r=/(?:合计|共计|总计|总共|总量|总数|总长|全长|总长度|总数量|总面积|总重量|小计)(?:为|达|约|共|计)?\s*$/u;function s(a){let b=j(a.unit);if(!(a.total>0)||!b||!a.context)return null;let c=a.values.filter(c=>c.value>0&&c.name.length>=2&&j(c.unit)===b&&o(c.name,a.context));if(c.length<2)return null;let d=new Map;for(let a of c){let b=`${a.name}\u0000${a.kind??"entry"}`,c=d.get(b);c?c.push(a):d.set(b,[a])}for(let b of d.values())if(!(b.length<2)&&g(b.reduce((a,b)=>a+b.value,0),a.total))return b;let e=new Map;for(let a of c){let b=a.value.toFixed(4),c=e.get(b);c?c.push(a):e.set(b,[a])}for(let b of c)for(let c of e.get((a.total-b.value).toFixed(4))??[])if(c!==b&&c.name!==b.name&&g(b.value+c.value,a.total))return[b,c];return null}function t(a,b,c,d,e){let f=new Map;for(let a of d.entries){if(!(a.value>0)||j(a.unit)!==b)continue;let c=`${a.source}\u0000${a.name}`;f.set(c,(f.get(c)||0)+a.value)}let h=[];for(let[a,b]of f)if(o(a.slice(a.indexOf("\0")+1),c)&&(h.some(a=>g(a,b))||h.push(b),h.length>=24))break;if(0===h.length)return!1;let i=b=>g(b,a)||function(a,b){let c=0,d=a.length;for(;c<d;){let e=c+d>>1;a[e]<b?c=e+1:d=e}for(let d=Math.max(0,c-1);d<=Math.min(a.length-1,c+1);d+=1)if(g(a[d],b))return!0;return!1}(e,a-b);if(h.some(a=>i(a)))return!0;for(let a=0;a<h.length;a+=1)for(let b=a+1;b<h.length;b+=1)if(i(h[a]+h[b]))return!0;return!1}function u(a,b){let c=[];if(0===b.entries.length)return c;let d=new Set,e=[...b.numberPool].sort((a,b)=>a-b);for(let h of a.matchAll(n)){let i=f(h[1]);if(void 0===i)continue;let k=j(h[2]),l=h.index??0,m=l+h[0].length,n=b.entries.filter(a=>a.value>0&&j(a.unit)===k);if(0===n.length)continue;let r=a.slice(Math.max(0,l-40),l+h[0].length+40),s=a.slice(Math.max(0,l-20),l+h[0].length),u=n.filter(a=>a.name.length>=3&&s.includes(a.name)).sort((a,b)=>b.name.length-a.name.length)[0];if(u){if(g(u.value,i)){let b=q(n,i,r);if(b.length>=2){let e=a.slice(Math.max(0,l-150),l+h[0].length+150),f=b.filter(a=>!p(e,a));if(f.length>0){let a=b.map(a=>`「${a.name}」${a.value}${a.unit}`).join(" + "),e=`合计数值应分项显式:「${u.name} ${i}${h[2]}」= ${a},但正文未展示分项(缺 ${f.map(a=>`${a.name} ${a.value}${a.unit}`).join("、")}),无法核对合计来源`;d.has(e)||(d.add(e),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:e,suggestion:`在合计值附近补充分项明细(${a}),使合计数值可逐项核对;分项值必须取自工程量清单原文,不得改动。`},matchStart:l,matchEnd:m}))}}continue}let f=i-u.value,j=n.find(a=>a!==u&&a.name!==u.name&&g(a.value,f));if(j){let b=a.slice(Math.max(0,l-150),l+h[0].length+150);if(p(b,u)&&p(b,j))continue;let e=`合计值与权威不符:「${u.name}」清单权威 ${u.value}${h[2]};正文 ${i}${h[2]} \u2248 ${u.value} + ${j.value}(「${j.name}」)——若「${j.name}」应计入「${u.name}」合计,须在正文显式分项;若不应计入(重复计入),须改回权威值 ${u.value}${h[2]}`;d.has(e)||(d.add(e),c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:e,suggestion:`核对合计口径:「${u.name}」合计为 ${u.value}${h[2]}(清单权威)。若正文需表达 ${u.value} + ${j.value},则显式写成「${u.name} ${u.value}${h[2]}、${j.name} ${j.value}${h[2]},合计 ${i}${h[2]}」;否则将合计改回 ${u.value}${h[2]}(差额 ${Math.round(1e4*f)/1e4}${h[2]} 属「${j.name}」,不得并入)。`},matchStart:l,matchEnd:m}));continue}if(t(i,k,r,b,e))continue;let o=`合计值与权威不符:「${u.name}」合计为 ${u.value}${h[2]}(清单权威),正文写 ${i}${h[2]},且差额不属任何清单条目,需核对合计口径`;d.has(o)||(d.add(o),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:o,suggestion:`核对「${u.name}」的合计口径:若为多分项之和,请写明与权威一致的分项分解;若为单一总量,改为清单权威值 ${u.value}${u.unit||h[2]}。`},matchStart:l,matchEnd:m}));continue}let v=q(n,i,r);if(v.length>=2){let b=a.slice(Math.max(0,l-150),l+h[0].length+150),e=v.filter(a=>!p(b,a));if(e.length>0){let a=v.map(a=>`「${a.name}」${a.value}${a.unit}`).join(" + "),b=`合计数值应分项显式:正文合计 ${i}${h[2]} = ${a},但未展示分项(缺 ${e.map(a=>`${a.name} ${a.value}${a.unit}`).join("、")}),无法核对合计来源`;d.has(b)||(d.add(b),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:b,suggestion:`在合计值附近补充分项明细(${a});分项值必须取自工程量清单原文,不得改动。`},matchStart:l,matchEnd:m}))}continue}{let a=new Map;for(let b of n)a.set(b.name,(a.get(b.name)||0)+b.value);let b=!1;for(let c of a.values())if(g(c,i)){b=!0;break}if(b)continue}if(t(i,k,r,b,e))continue;let w=n.filter(a=>o(a.name,r)),x=n.some(a=>g(a.value,i)),y=b.numberPool.some(a=>g(a,i));if(!x&&!y&&w.length>0){let a=`合计值无权威来源:正文「${h[0].trim()}」在清单事实锁与蓝图参数桶中找不到同值来源,违反无据不写`;if(d.has(a))continue;d.add(a),c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:a,suggestion:"删除该合计数值或改为与清单权威一致的合计值;无权威来源的合计数不得进入交付文本。"},matchStart:l,matchEnd:m})}}return c}function v(a,b,c){let d=Math.max(0,b-60),e=a.slice(d,b),f=-1;for(let a=e.length-1;a>=0;a-=1)if(/[,、;;。!?!?\n]/u.test(e[a])){f=d+a;break}if(-1===f||b-f>40)return null;let g=/[,、;;]/u.test(a[f]),h=g?f:f+1,i=g?c:c+ +!!/[,、;;]/u.test(a[c]||"");return i<=h?null:{start:h,end:i,excerpt:a.slice(h,i).trim()}}function w(a,b){let c=m({markdown:a,...b});if(0===c.entries.length)return{markdown:a,fixedCount:0,details:[]};let d=a,e=[];for(let a=1;a<=4;a+=1){let a=[];for(let b of u(d,c)){if(!b.issue.message.startsWith("合计值无权威来源"))continue;let c=v(d,b.matchStart,b.matchEnd);c&&a.push(c)}if(0===a.length)break;let b=0,f=1/0;for(let c of[...a].sort((a,b)=>b.start-a.start))c.end>f||(d=d.slice(0,c.start)+d.slice(c.end),f=c.start,b+=1,e.push(`删除无源合计「${c.excerpt.slice(0,40)}」`));if(0===b)break}return{markdown:d,fixedCount:e.length,details:e}}function x(a,b,c){let d=m({markdown:a,...b});if(0===d.entries.length)return{markdown:a,fixedCount:0,details:[]};let e=a,f=[];for(let a=1;a<=4;a+=1){let a=[];for(let f of L(e,d,b.billFactLock)){if(!f.issue.message.startsWith(c.prefix))continue;let b=v(e,f.matchStart,f.matchEnd);b&&a.push(b)}if(0===a.length)break;let g=0,h=1/0;for(let b of[...a].sort((a,b)=>b.start-a.start))b.end>h||(e=e.slice(0,b.start)+e.slice(b.end),h=b.start,g+=1,f.push(c.detail(b.excerpt.slice(0,40))));if(0===g)break}return{markdown:e,fixedCount:f.length,details:f}}function y(a,b){return x(a,b,{prefix:"名称-数值绑定无源",detail:a=>`删除无源绑定「${a}」`})}function z(a,b){return x(a,b,{prefix:"名称-数值绑定错位",detail:a=>`删除错位绑定「${a}」`})}let A=/(?:DN|De|Φ|φ|Ø|dn|de)\s*\d+(?:\.\d+)?|(?<![A-Za-z0-9])[CM]\d{2,3}(?![0-9])|HRB\d+|HPB\d+|(?<![A-Za-z0-9])\d{2,4}\s*[×xX*]\s*\d{2,4}(?![0-9])|(?<![A-Za-z0-9])\d+(?:\.\d+)?\s*[kK]?[Ww](?![A-Za-z0-9])/gu,B=/运输车|搅拌车|罐车|挖掘机|挖机|装载机|压路机|摊铺机|打夯机|夯实机|洒水车|浇水车|吊车|起重机|泵车|地泵|发电机组|发电机|电焊机|空压机|水泵|提升泵|潜水泵|雾炮机|充桩|桩机|机械|设备|机具|车辆|机组/u;function C(a,b){for(let[c,d]of a.aggregateSpecs)if(d.specs.has(b))return{entryName:c,info:d}}function D(a,b){let c=[];if(0===b.specValues.size&&0===b.aggregateSpecs.size)return c;let d=new Set;for(let e of a.matchAll(A)){let h,j=i(e[0]),m=b.specValues.get(j)??[],n=C(b,j);if(0===m.length&&!n)continue;let p=(e.index??0)+e[0].length,q=a.slice(p,p+36),r=/^([^。;;\n|]{0,16}?)([\d,,]+(?:\.\d+)?)\s*(座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)(?![a-zA-Z0-9²³])/u.exec(q);if(!r||k.test(r[1])||l.test(q.slice(r[1].length+r[2].length+r[3].length))||/不大于|不超过|不得大于|不得超过/.test(r[1]))continue;let s=r[1],t=a.slice(Math.max(0,p+s.length-8),p+s.length);if(/\d\s*[~~至\-—–]\s*$/u.test(t))continue;if(/[、,,]/u.test(s)){let a=s.split(/[、,,]/u).pop()||"";if(/[\u4e00-\u9fa5]/u.test(a)&&!/合计|小计|共计|总计|总量|用量|总长|共/u.test(a))continue}if("台"===r[3]||"套"===r[3]){let b=p+r[1].length+r[2].length+r[3].length;if(B.test(r[1])||B.test(a.slice(b,b+12)))continue}if(/总长|全长|长度|管长|延米/u.test(r[1])&&/^(?:m|米|km|公里)$/u.test(r[3])||/^共$/u.test(r[1]||"")&&/(?:钢筋|配筋|编号)/u.test(a.slice(Math.max(0,(e.index||0)-60),(e.index||0)+60)))continue;let u=f(r[2]);if(void 0===u||0===u||m.some(a=>g(a.value,u)))continue;let v=n?.info.specs.get(j);if(void 0!==v&&g(v,u))continue;let w=new Map;for(let a of m){let b=w.get(a.entryName);b?b.value+=a.value:w.set(a.entryName,{value:a.value,unit:a.unit})}let x=[...w.values()].sort((a,b)=>b.value-a.value);if(m.length>=2&&x.some(a=>g(a.value,u)))continue;if(n?.info.partitioned&&void 0!==v&&g(n.info.value,u)){let a=i(r[1]);if(![...n.info.specs.keys()].some(b=>b!==j&&a.includes(b))){let a=n.info.breakdown.map(a=>`${a.spec} ${a.value}${n.info.unit}`).join(" + "),b=`规格-数值绑定错位:「${e[0]}」处数值 ${u}${r[3]} 是「${n.entryName}」的跨规格名称合计(${a}),不属于单一规格「${e[0]}」——名称合计不得挂给单一规格,须写该规格小计 ${v}${r[3]}(确需写合计须显式分解)`;if(!d.has(b)){d.add(b);let f=p+r[1].length;c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:b,suggestion:`「${e[0]}」的数量须写该规格小计 ${v}${r[3]};名称合计须显式分解为 ${a}(合计 ${n.info.value}${n.info.unit}),不得把合计值挂在单一规格名下。`},specToken:e[0],value:u,unit:r[3],valueStart:f,valueEnd:f+r[2].length,groupSumCandidates:[{value:v,unit:n.info.unit},...x.filter(a=>!g(a.value,u))]})}}continue}for(let[a,c]of b.specValues){if(a===j)continue;let b=c.find(a=>g(a.value,u));if(b){h={spec:b.spec||a,entryName:b.entryName};break}}if(!h||r[1]&&o(h.entryName,r[1]))continue;let y=`规格-数值绑定错位:正文「${e[0]} ${u}${r[3]}」中 ${u}${r[3]} 属规格「${h.spec}」(清单条目「${h.entryName}」),不属于「${e[0]}」的清单数量`;if(d.has(y))continue;d.add(y);let z=p+r[1].length;c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:y,suggestion:`「${e[0]}」的数量必须引用清单中该规格条目的原值(如 ${m.map(a=>`${a.value}${a.unit}`).join("、")});「${h.spec}」的数量不得张冠李戴至「${e[0]}」。`},specToken:e[0],value:u,unit:r[3],valueStart:z,valueEnd:z+r[2].length,groupSumCandidates:x.filter(a=>!g(a.value,u))})}for(let e of a.matchAll(A)){let h=i(e[0]),j=C(b,h);if(!j?.info.partitioned)continue;let l=j.info.specs.get(h);if(void 0===l)continue;let m=e.index??0,n=a.slice(Math.max(0,m-24),m),p=/([\d,,]+(?:\.\d+)?)\s*(座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)\s*([^。;;\n|0-9²³]{0,12})$/u.exec(n);if(!p)continue;let q=p[3];if(!/[((]|为|系|采用|型号|规格|灯型|类型/u.test(q)||k.test(q))continue;let r=f(p[1]);if(void 0===r||!g(j.info.value,r)||g(l,r)||!o(j.entryName,n))continue;let s=i(a.slice(Math.max(0,m-60),m+60));if([...j.info.specs.keys()].filter(a=>s.includes(a)).length>=2)continue;let t=m-q.length-p[2].length-p[1].length,u=`${h}@${t}`;if(d.has(u))continue;d.add(u);let v=j.info.breakdown.map(a=>`${a.spec} ${a.value}${j.info.unit}`).join(" + ");c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格-数值绑定错位:正文「…${r}${p[2]}${q}${e[0]}…」中 ${r}${p[2]} 为「${j.entryName}」的跨规格名称合计(${v}),其后紧随单一规格「${e[0]}」易被读作全部为该规格;名称合计须显式分解`,suggestion:`数量 ${r}${p[2]} 保留不动;把规格表述改为显式分解,如「${r}${p[2]}(${v})」或逐规格列写「${v}」;不得以名称合计搭配单一规格描述。`},specToken:e[0],value:r,unit:p[2],valueStart:t,valueEnd:t+p[1].length,groupSumCandidates:[]})}if(b.aggregateSpecs.size>0){let e=0;for(let h of a.split("\n")){let a=e;if(e+=h.length+1,!h.includes("|")||/^\s*\|?[\s:|-]*\|?\s*$/u.test(h))continue;let j=new Map;for(let a of h.matchAll(A)){let c=i(a[0]),d=C(b,c);if(!d?.info.partitioned)continue;let e=d.info.specs.get(c);if(void 0===e)continue;let f=j.get(d.entryName)||[];f.some(a=>a.key===c)||f.push({key:c,raw:a[0].trim(),specSum:e}),j.set(d.entryName,f)}if(1!==j.size)continue;let[k,l]=[...j.entries()][0];if(1!==l.length)continue;let m=b.aggregateSpecs.get(k);if(!m)continue;let{key:n,raw:p,specSum:q}=l[0];if(o(k,h))for(let e of h.matchAll(/\|([^|\n]*)/gu)){let h=e[1].trim(),i=/^([\d,,]+(?:\.\d+)?)\s*(?:座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)?$/u.exec(h);if(!i)continue;let j=f(i[1]);if(void 0===j||!g(m.value,j)||g(q,j)||(b.specValues.get(n)??[]).some(a=>g(a.value,j)))continue;let l=a+(e.index??0)+1+e[1].indexOf(i[1]),o=`${n}@${l}`;if(d.has(o))continue;d.add(o);let r=m.breakdown.map(a=>`${a.spec} ${a.value}${m.unit}`).join(" + ");c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格-数值绑定错位:表格行「${p}…」的数量 ${j}${m.unit} 是「${k}」的跨规格名称合计(${r}),该行规格为「${p}」应填其小计 ${q}${m.unit}`,suggestion:`该行数量改为 ${q}${m.unit};名称合计请另立「合计」行或显式分解为 ${r}。`},specToken:p,value:j,unit:m.unit,valueStart:l,valueEnd:l+i[1].length,groupSumCandidates:[{value:q,unit:m.unit}]})}}}return c}function E(a,b){let c=m({markdown:a,...b});if(0===c.specValues.size&&0===c.aggregateSpecs.size)return{markdown:a,fixedCount:0,details:[]};let e=a,f=[];for(let a=1;a<=8;a+=1){let a=D(e,c).filter(a=>a.groupSumCandidates.length>0);if(0===a.length)break;let b=0;for(let g of[...a].sort((a,b)=>b.valueStart-a.valueStart)){let a,h,i=g.groupSumCandidates.find(a=>{var b,c;return b=a.unit,(0,d.Sn)(b)===(c=g.unit,(0,d.Sn)(c))});if(i)a=e.slice(0,g.valueStart)+`${i.value}`+e.slice(g.valueEnd),h=`「${g.specToken}」绑定数值 ${g.value}${g.unit} → 组和值 ${i.value}${g.unit}`;else{let b=g.valueStart;for(;b>0&&/\s/u.test(e[b-1]);)b-=1;let c=g.valueEnd+g.unit.length;a=e.slice(0,b)+e.slice(c),h=`「${g.specToken}」移除张冠李戴数值 ${g.value}${g.unit}(无同单位替换候选,值不属该规格)`}D(a,c).some(a=>{let b=a.valueStart-g.valueStart;return b>=-4&&b<=4})||(e=a,b+=1,f.push(h))}if(0===b)break}return{markdown:e,fixedCount:f.length,details:f}}let F=/(?:埋深|覆土(?:厚度|深度)?|管顶覆土)(?:不小于|不大于|不低于|不超过|约|为|达|控制在|一般|宜|应)?[^。;;\n|]{0,10}?([\d,,]+(?:\.\d+)?)\s*(mm|cm|米|m)(?![a-zA-Z0-9²³])/gu,G=/(?:约为|大约|约计|约|将近|近)\s*([\d,,]+(?:\.\d+)?)\s*(点|处|座|个|套|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|公里|km|m2|㎡|m²|平方米|m3|m³|立方米|kg|吨|t|l|升|kw|w)(?![a-zA-Z0-9²³³])/giu,H=/([\d,,]+(?:\.\d+)?)\s*余\s*(点|处|座|个|套|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|公里|km|m2|㎡|m²|平方米|m3|m³|立方米|kg|吨|t)(?![a-zA-Z0-9²³])/gu,I=/[节制合履签违公盟密租最接靠邻附距离]/u,J=/^(?:管道|工程|材料|项目|施工|工作|设备|设施|系统|区域|场地|道路|建筑|结构|基础|主体|管网|土建|安装|装饰|装修|土方|绿化|照明|给水|排水|电气|挖方|填方|回填|弃方|外运|运输|检测|试验|测量|清理|拆除|清淤|维护|养护|管理|服务|其他|以上|以下|其中|包括|采用|使用|型号|规格|数量|单位|合计|总计|长度|面积|体积|重量)$/u,K=/(木质|木|铝合金|铝|不锈钢|塑钢|塑料|塑|钢|铁|砼|混凝土|铸铁|铜|复合)(门|窗|井|灯|护栏|围栏|盖板|雨水口)/gu;function L(a,b,c){let d=[],e=new Set,i=new Set,m=new Map;if(c)for(let a of c.entries){let b=(a.name||"").trim();if(b.length<2||!Number.isFinite(a.quantity))continue;let c=`${b}\u0000${j(a.unit)}`,d=m.get(c)||{count:0,samples:[]};d.count+=1;let e=`${a.quantity}${a.unit}`;d.samples.length<3&&!d.samples.includes(e)&&d.samples.push(e),m.set(c,d)}let n=b.entries.map(a=>`${a.name} ${a.description}`).join("\n"),p=new Map;{let a=new Map;for(let c of b.entries){if(!(c.value>0))continue;let b=`${c.source}\u0000${c.name}`,d=a.get(b);d?d.sum+=c.value:a.set(b,{name:c.name,sum:c.value})}for(let b of a.values()){let a=p.get(b.name)||[];a.push(b.sum),p.set(b.name,a)}}let q=new Map,r=new Map,s=new Map,t=(a,c,d)=>{let e=`${a}\u0000${c}`,f=q.get(e);if(f||(f=b.entries.filter(b=>b.name===a&&j(b.unit)===c&&b.value>0).map(a=>Math.round(100*a.value)),q.set(e,f)),f.length<2)return!1;let g=`${e}\u0000${Math.round(100*d)}`,h=r.get(g);if(void 0!==h)return h;let i=function(a,b){if(a.length<2||b<=0)return!1;let c=[...a].sort((a,b)=>a-b);if(c.some(a=>a===b))return!1;let d=c.reduce((a,b)=>a+b,0);if(b>d)return!1;let e=d-b;if(e>0&&e!==b){let a=Math.max(b,e);for(let d=0;d<c.length;d+=1)for(let f=d+1;f<c.length;f+=1){let g=c[d]+c[f];if(g>a)break;if(g===b||g===e)return!0}let d=0,f=c.length-1;for(;d<=f;){let a=d+f>>1;if(c[a]===e)return c.length>=3;c[a]<e?d=a+1:f=a-1}}else for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a]+c[d];if(e>b)break;if(e===b)return!0}if(c.length>40)return!1;let f=Math.ceil(c.length/2),g=c.slice(0,f),h=c.slice(f),i=a=>{let b=new Set([0]);for(let c of a){let a=new Set;for(let d of b)a.add(d),a.add(d+c);b=a}return b},j=i(h);for(let a of i(g))if(j.has(b-a))return!0;return!1}(f,Math.round(100*d));return r.set(g,i),i},u=(a,c)=>{let d=p.get(a)||[];if(0===d.length)return!1;let e=`${a}\u0000${Math.round(100*c)}`,f=s.get(e);if(void 0!==f)return f;let h=d.some(a=>b.numberPool.some(b=>g(a+b,c)));return s.set(e,h),h};if(c)for(let n of c.entries){let c=(n.name||"").trim();if(c.length<2||J.test(c)||!Number.isFinite(n.quantity))continue;let q=0,r=0;for(;r<6;){let s=a.indexOf(c,q);if(s<0)break;if(q=s+c.length,r+=1,/\d$/u.test(c)&&/^[\d.]/u.test(a.slice(s+c.length,s+c.length+1))){q=s+1;continue}if("量"===a.slice(s+c.length,s+c.length+1))continue;let v=a.slice(s+c.length,s+c.length+20),w=/^([^。;;\n|]{0,12}?)([\d,,]+(?:\.\d+)?)\s*(座|个|套|处|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|kg|吨|t)(?![a-zA-Z0-9²³])/u.exec(v);if(!w||k.test(w[1])||l.test(v.slice(w[1].length+w[2].length+w[3].length)))continue;let x=f(w[2]);if(void 0===x||0===x||h(x,n.quantity))continue;let y=j(w[3]);if(y!==j(n.unit)||b.entries.some(a=>a.name===c&&h(x,a.value)&&j(a.unit)===y)||(p.get(c)||[]).some(a=>g(a,x))||t(c,y,x)||u(c,x))continue;let z=a.slice(Math.max(0,s-32),s+c.length+20);if(function(a,b,c,d){for(let[e,f]of d)if(e!==b&&(e.includes(b)||b.includes(e)||o(e,c))&&f.some(b=>g(b,a)))return!0;return!1}(x,c,z,p))continue;let A=b.entries.find(a=>a.name!==c&&g(a.value,x)&&j(a.unit)===y);if(A&&o(A.name,z))continue;if(A){let a=`${s}\u0000${x}\u0000${y}`;if(i.has(a))continue;i.add(a);let b=m.get(`${c}\u0000${y}`),f=b&&b.count>1?`名称-数值绑定错位:「${c}」处数值 ${x}${w[3]} 属清单条目「${A.name}」(${A.value}${A.unit}),与同名清单条目(共 ${b.count} 条,如 ${b.samples.join("、")} 等)的权威数量均不符`:`名称-数值绑定错位:「${c}」处数值 ${x}${w[3]} 属清单条目「${A.name}」(${A.value}${A.unit}),与「${c}」清单数量 ${n.quantity}${n.unit} 不符`;if(e.has(f))continue;e.add(f),d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:f,suggestion:b&&b.count>1?`核对「${c}」的数量口径:同名清单条目共 ${b.count} 条(如 ${b.samples.join("、")} 等),逐一核对后引用对应条目数量;引用「${A.name}」数量时须明确对象名称,不得张冠李戴。`:`核对「${c}」的数量口径:清单权威值为 ${n.quantity}${n.unit};引用「${A.name}」数量时须明确对象名称,不得张冠李戴。`},matchStart:s,matchEnd:s+c.length+w[0].length});continue}if(function(a,b,c,d){let e=a.slice(Math.max(0,b-40),b+c+40),f=[];for(let a of e.matchAll(/\d+(?:\.\d+)?/gu)){let b=Number.parseFloat(a[0]);Number.isFinite(b)&&!g(b,d)&&f.push(b)}for(let a=0;a<f.length;a+=1)for(let b=a+1;b<f.length;b+=1)if(g(f[a]+f[b],d)||g(Math.abs(f[a]-f[b]),d))return!0;return!1}(a,s,c.length,x)||b.numberPool.some(a=>g(a,x)))continue;let B=`${s}\u0000${x}\u0000${y}`;if(i.has(B))continue;i.add(B);let C=m.get(`${c}\u0000${y}`),D=C&&C.count>1?`名称-数值绑定无源:「${c}」处数值 ${x}${w[3]} 与同名清单条目(共 ${C.count} 条,如 ${C.samples.join("、")} 等)的权威数量均不符,且在全部权威数据中找不到同值来源`:`名称-数值绑定无源:「${c}」处数值 ${x}${w[3]} 与清单权威 ${n.quantity}${n.unit} 不符,且在全部权威数据中找不到同值来源`;e.has(D)||(e.add(D),d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:D,suggestion:C&&C.count>1?`核对「${c}」的数量口径:同名清单条目共 ${C.count} 条(如 ${C.samples.join("、")} 等),逐一核对后引用对应条目的权威数量;无权威来源的数值不得与清单条目名称绑定出现。`:`将「${c}」的数量改为清单权威值 ${n.quantity}${n.unit};无权威来源的数值不得与清单条目名称绑定出现。`},matchStart:s,matchEnd:s+c.length+w[0].length}))}}for(let c of a.matchAll(K)){let h=c[0];if(n.includes(h))continue;let i=c[2],k=a.slice((c.index??0)+h.length,(c.index??0)+h.length+16),l=/^([^。;;\n|]{0,10}?)([\d,,]+(?:\.\d+)?)\s*(樘|扇|套|座|盏|个)(?![a-zA-Z0-9²³])/u.exec(k);if(!l)continue;let m=f(l[2]);if(void 0===m)continue;let o=b.entries.find(a=>a.name.includes(i)&&g(a.value,m)&&j(a.unit)===j(l[3]));if(!o)continue;let p=`名称口径不符:正文「${h} ${m}${l[3]}」——${m}${l[3]} 对应清单「${o.name}」条目,清单中不存在「${h}」,名称与清单权威不符`;if(e.has(p))continue;e.add(p);let q=c.index??0;d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:p,suggestion:`名称必须与清单条目口径一致:将「${h}」改为「${o.name}」(或清单原文名称);名称与数量绑定不得自行替换材质/类型限定词。`},matchStart:q,matchEnd:q+h.length+l[0].length})}return d}function M(a){let b=a.markdown||"";if(!b)return[];let c=m(a);if(0===c.entries.length&&0===c.numberPool.length)return[];let d=[...u(b,c).map(a=>a.issue),...D(b,c).map(a=>a.issue),...function(a,b){let c=[],d=new Set;for(let e of a.matchAll(F)){let a=f(e[1]);if(void 0===a)continue;let h=e[2];if(("mm"===h?a/1e3:"cm"===h?a/100:a)<=10)continue;let i=b.entries.find(b=>g(b.value,a)&&/总长|全长|总长度|长度|管线/u.test(b.name)),j=`数值语义槽位错位:正文「${e[0].trim()}」——埋深/覆土数值 ${a}${h} 超出物理合理范围(管道埋深一般 <10m)${i?`,且该数值与权威「${i.name}」(${i.value}${i.unit})一致,疑似把总长/长度口径误用作埋深`:",疑似口径混用"}`;d.has(j)||(d.add(j),c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:j,suggestion:`核对槽位语义:埋深/覆土深度应在 0.3~10m 合理区间(以设计图纸为准);总长/长度类数值不得用于埋深描述${i?`(「${i.name}」为 ${i.value}${i.unit})`:""}。`}))}return c}(b,c),...function(a,b){let c=[];if(0===b.numberPool.length)return c;let d=new Set,e=(a,e,g)=>{let h=f(a);if(void 0===h||function(a,b){let c=a>=1e3?Math.max(10,.02*a):a>=100?5:a>=10?1:.5;return b.some(b=>Math.abs(b-a)<=c||Math.abs(b-a)<=Math.max(1e-6,.02*Math.abs(b)))}(h,b.numberPool))return;let i=`近似数值不可推导:正文「${g.trim()}」的 ${h}${e} 在清单/蓝图/事实主表中无同值或近似来源,违反无据不写`;d.has(i)||(d.add(i),c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:i,suggestion:"删除该近似表述,或改用权威数据可推导的数值(清单/蓝图同值口径);「约/近」类近似数值必须可闭合到权威来源。"}))};for(let b of a.matchAll(G)){let c=b.index??0,d=a.slice(Math.max(0,c-1),c);I.test(d)||e(b[1],b[2],b[0])}for(let b of a.matchAll(H))e(b[1],b[2],b[0]);return c}(b,c),...L(b,c,a.billFactLock).map(a=>a.issue)],e=[],h=new Set;for(let a of d){let b=`${a.severity||a.level}|${a.message}`;h.has(b)||(h.add(b),e.push(a))}return e}},76193:(a,b,c)=>{c.d(b,{Jq:()=>x,Qi:()=>v,ll:()=>u,rk:()=>r,wF:()=>B,yT:()=>t}),c(51190),c(44505),c(10751);var d=c(93675);let e=new Set(["fixed","exempt","manual"]),f=[],g={"ambiguous-either-or":{kind:"constraint",channel:"块任务卡"},"area-arithmetic":{kind:"constraint",channel:"块任务卡"},"atlas-reference-phrase":{kind:"constraint",channel:"全局约束"},"authority-audit-gap":{kind:"constraint",channel:"块任务卡"},"auto-spec-validation":{kind:"self-check",stage:"章成稿后"},"basic-info-schedule-field":{kind:"constraint",channel:"块任务卡"},"basis-regulations-coverage":{kind:"constraint",channel:"块任务卡"},"basis-regulations-cross":{kind:"terminal-only",reason:"编制依据的跨章比对需全文依据清单集合(单章成稿时其余章的依据尚未产生)"},"bid-composition-body-figure":{kind:"self-check",stage:"章成稿后"},"bid-composition-body-table":{kind:"self-check",stage:"章成稿后"},"bidder-qualification-section":{kind:"constraint",channel:"全局约束"},"block-attribution-quantification":{kind:"constraint",channel:"块任务卡"},"block-fact-density":{kind:"constraint",channel:"块任务卡"},"block-filler-phrase":{kind:"self-check",stage:"块成稿后"},"block-format-constraints":{kind:"constraint",channel:"全局约束"},"block-numeric-reconciliation":{kind:"constraint",channel:"块任务卡"},"block-structure-contract":{kind:"self-check",stage:"章成稿后"},"block-templating":{kind:"self-check",stage:"块成稿后"},"blueprint-citation-consistency":{kind:"constraint",channel:"块任务卡"},"blueprint-value-placement":{kind:"constraint",channel:"块任务卡"},"boq-division-coverage":{kind:"constraint",channel:"块任务卡"},"boq-placement":{kind:"constraint",channel:"块任务卡"},"boq-row-trace":{kind:"constraint",channel:"块任务卡"},"caliber-consistency":{kind:"constraint",channel:"块任务卡"},"chapter-dependency":{kind:"terminal-only",reason:"章间依赖关系是全文拓扑性质"},"chapter-fact-density":{kind:"constraint",channel:"块任务卡"},"clause-recitation":{kind:"constraint",channel:"块任务卡"},"closed-loop-density":{kind:"self-check",stage:"章成稿后"},"closure-phrase-density-cap":{kind:"self-check",stage:"块成稿后"},"collision-numbered-heading":{kind:"terminal-only",reason:"编号冲突需全文标题集合,跨章同名编号在单章内不可见"},"commercial-data-in-body":{kind:"constraint",channel:"全局约束"},"construction-org-bonus-module":{kind:"constraint",channel:"块任务卡"},"construction-org-chapter-data-coverage":{kind:"constraint",channel:"块任务卡"},"construction-org-consistency":{kind:"terminal-only",reason:"施工组织一致性跨章比对"},"construction-org-control-loop":{kind:"self-check",stage:"章成稿后"},"construction-org-division-section":{kind:"self-check",stage:"章成稿后"},"construction-org-generic-language":{kind:"self-check",stage:"块成稿后"},"construction-org-major-content":{kind:"constraint",channel:"块任务卡"},"construction-org-professional-audit":{kind:"constraint",channel:"块任务卡"},"construction-org-professional-chain":{kind:"constraint",channel:"块任务卡"},"construction-system-coverage":{kind:"constraint",channel:"块任务卡"},"critical-section-depth":{kind:"self-check",stage:"章成稿后"},"critical-section-fact-density":{kind:"constraint",channel:"块任务卡"},"cross-chapter-consistency":{kind:"terminal-only",reason:"跨章口径一致性本质依赖全章文本"},"cross-chapter-duplicate-section":{kind:"terminal-only",reason:"跨章重复小节需全文小节集合"},"cross-project-value-copy":{kind:"terminal-only",reason:"跨项目值拷贝需与其它项目产物比对"},"cross-section-numeric-conflict":{kind:"terminal-only",reason:"跨小节数值冲突需小节集合比对"},"dangerous-applicability":{kind:"constraint",channel:"块任务卡"},"dangerous-list-consistency":{kind:"constraint",channel:"块任务卡"},"dangling-conjunction":{kind:"self-check",stage:"章成稿后"},"degenerate-content":{kind:"self-check",stage:"块成稿后"},"document-budget":{kind:"terminal-only",reason:"篇幅为全文度量,由预算层与压缩轮收敛"},"document-delivery-score":{kind:"terminal-only",reason:"交付置信度是全文派生评分,不指向具体文本缺陷"},"drawing-pointer-phrase":{kind:"constraint",channel:"块任务卡"},"drawing-reference":{kind:"constraint",channel:"块任务卡"},"duplicate-basic-info":{kind:"terminal-only",reason:"同一基础信息在全文多处出现,需全文扫描"},"duplicate-paragraph":{kind:"terminal-only",reason:"重复段落需全文段落集合"},"duplicate-table":{kind:"terminal-only",reason:"重复表格需全文表格集合"},"emergency-section-depth":{kind:"self-check",stage:"章成稿后"},"equipment-batch-conflict":{kind:"constraint",channel:"块任务卡"},"equipment-entry-timing":{kind:"constraint",channel:"块任务卡"},"evaluation-criteria-coverage":{kind:"constraint",channel:"块任务卡"},"evidence-usage-coverage":{kind:"constraint",channel:"块任务卡"},"excavation-depth-lock":{kind:"constraint",channel:"块任务卡"},"excavation-hazard-classification":{kind:"constraint",channel:"块任务卡"},"fabricated-award":{kind:"constraint",channel:"块任务卡"},"fabricated-start-date":{kind:"constraint",channel:"块任务卡"},"fact-consistency":{kind:"constraint",channel:"块任务卡"},"fact-coverage":{kind:"constraint",channel:"块任务卡"},"fact-reconciliation":{kind:"constraint",channel:"块任务卡"},"field-value-mismatch":{kind:"constraint",channel:"块任务卡"},"figure-substitute-table":{kind:"self-check",stage:"章成稿后"},"finish-thickness":{kind:"constraint",channel:"块任务卡"},"flow-form-repeat":{kind:"self-check",stage:"块成稿后"},"formal-content-integrity":{kind:"constraint",channel:"全局约束"},"formal-heading-hierarchy":{kind:"self-check",stage:"章成稿后"},"formal-placeholder":{kind:"constraint",channel:"全局约束"},"formal-style":{kind:"self-check",stage:"块成稿后"},"formal-text-gate":{kind:"constraint",channel:"全局约束"},"formula-residue":{kind:"constraint",channel:"全局约束"},"foundation-form-residue":{kind:"constraint",channel:"块任务卡"},"generated-fact-verification":{kind:"constraint",channel:"块任务卡"},"generic-professional-content":{kind:"constraint",channel:"块任务卡"},"greening-maintenance-mismatch":{kind:"constraint",channel:"块任务卡"},"hazard-exclusion-contradiction":{kind:"constraint",channel:"块任务卡"},"hazard-parameter-binding":{kind:"constraint",channel:"块任务卡"},"heading-duplicate":{kind:"terminal-only",reason:"同名标题需全文标题集合比对"},"heading-uncovered-engineering-items":{kind:"self-check",stage:"章成稿后"},"hollow-table-cell":{kind:"self-check",stage:"章成稿后"},"identity-marks-forbidden":{kind:"constraint",channel:"全局约束"},"innovation-tech-coverage":{kind:"constraint",channel:"块任务卡"},"instruction-like-heading":{kind:"self-check",stage:"章成稿后"},"internal-terminology-anchor":{kind:"self-check",stage:"块成稿后"},"inverted-date-range":{kind:"constraint",channel:"块任务卡"},"local-adaptation-keyword":{kind:"constraint",channel:"块任务卡"},"major-content-governance":{kind:"self-check",stage:"章成稿后"},"management-measure-number":{kind:"constraint",channel:"块任务卡"},"meta-discourse-declaration":{kind:"self-check",stage:"块成稿后"},"min-chapter-section":{kind:"terminal-only",reason:"章间小节数均衡属全文结构度量"},"node-schedule-consistency":{kind:"constraint",channel:"块任务卡"},"numeric-traceability":{kind:"constraint",channel:"块任务卡"},"overview-recap":{kind:"terminal-only",reason:"概况段跨章复述需全文概况段集合与位置关系"},"page-target":{kind:"terminal-only",reason:"页数为全文估算度量信号(永远 warning)"},"paragraph-generic":{kind:"self-check",stage:"块成稿后"},"paragraph-near-duplicate":{kind:"terminal-only",reason:"近重复需全文段落集合两两比对"},"paragraph-opening-repeat":{kind:"self-check",stage:"块成稿后"},"paragraph-tail-repeat":{kind:"self-check",stage:"块成稿后"},"parameter-concept-conflict":{kind:"constraint",channel:"块任务卡"},"parameter-obligation-usage":{kind:"constraint",channel:"块任务卡"},"phase-labor-mixing":{kind:"constraint",channel:"块任务卡"},"planned-auto-spec-gate":{kind:"self-check",stage:"章成稿后"},"planned-section-placement":{kind:"self-check",stage:"章成稿后"},"planned-structure":{kind:"self-check",stage:"章成稿后"},"precise-fact-usage":{kind:"constraint",channel:"块任务卡"},"preliminary-action-timing":{kind:"constraint",channel:"块任务卡"},"process-spec-conflict":{kind:"constraint",channel:"块任务卡"},"professional-content":{kind:"constraint",channel:"块任务卡"},"professional-score":{kind:"terminal-only",reason:"专业评分是全文派生评分"},"project-basic-placeholder":{kind:"constraint",channel:"全局约束"},"project-contamination":{kind:"constraint",channel:"全局约束"},"project-type-consistency":{kind:"constraint",channel:"全局约束"},"prompt-document-rule":{kind:"constraint",channel:"全局约束"},"prompt-example-leak":{kind:"constraint",channel:"全局约束"},"punctuation-artifact":{kind:"constraint",channel:"全局约束"},"repeated-word":{kind:"terminal-only",reason:"重复词需全文词频统计(单块内低频也构成全文高频)"},"requirements-coverage":{kind:"constraint",channel:"块任务卡"},"resource-breakdown-consistency":{kind:"terminal-only",reason:"资源分解与蓝图权威比对,需全章资源陈述集合"},"resource-consistency":{kind:"terminal-only",reason:"资源总量一致性需跨章资源口径比对"},"resource-triad-section-hierarchy":{kind:"terminal-only",reason:"资源三要素章节层级属全文结构"},"schedule-duration-overrun":{kind:"constraint",channel:"块任务卡"},"section-content-integrity":{kind:"self-check",stage:"章成稿后"},"section-count-overflow":{kind:"self-check",stage:"章成稿后"},"section-numbering":{kind:"terminal-only",reason:"章节编号连续性依赖全文标题序列(后续章未写时无法判定编号是否断档)"},"self-undermining-candidate":{kind:"self-check",stage:"块成稿后"},"sentence-pattern-repeat":{kind:"self-check",stage:"块成稿后"},"six-hundred-percent-coverage":{kind:"constraint",channel:"块任务卡"},"skeleton-fingerprint":{kind:"terminal-only",reason:"骨架指纹是跨段/跨章相似度度量"},"source-enumeration":{kind:"self-check",stage:"块成稿后"},"spec-gate-rules":{kind:"self-check",stage:"章成稿后"},"spec-location-mismatch":{kind:"constraint",channel:"块任务卡"},"stage-phrasing":{kind:"terminal-only",reason:"阶段表述一致性需跨章比对阶段划分"},"standard-final":{kind:"self-check",stage:"章成稿后"},"street-light-count-mismatch":{kind:"constraint",channel:"块任务卡"},"structure-integrity":{kind:"self-check",stage:"章成稿后"},"support-form-fact-consistency":{kind:"constraint",channel:"块任务卡"},"support-system-conflict":{kind:"constraint",channel:"块任务卡"},"table-arithmetic-consistency":{kind:"constraint",channel:"块任务卡"},"table-caption":{kind:"constraint",channel:"全局约束"},"table-content-leak":{kind:"self-check",stage:"章成稿后"},"table-quality":{kind:"self-check",stage:"章成稿后"},"table-spam":{kind:"self-check",stage:"章成稿后"},"templated-label":{kind:"self-check",stage:"章成稿后"},"tertiary-heading":{kind:"self-check",stage:"章成稿后"},"title-integrity":{kind:"self-check",stage:"章成稿后"},"toc-consistency":{kind:"terminal-only",reason:"目录与正文标题需全文双向比对,单章成稿时正文其余部分尚未产生"},"truncated-sentence":{kind:"constraint",channel:"全局约束"},"web-evidence-leakage":{kind:"constraint",channel:"全局约束"},"writer-missing-section":{kind:"self-check",stage:"章成稿后"}},h=[],i=new Set(["structure","table","fact_consistency","evidence_coverage","professional_chain","control_loop","format","style","scope"]),j=[{id:"spec-gate-rules",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"配置门禁容器(事实/章节/表格/图片/页数/文本多族混合,规则随模板与提示词动态生成),无单一可锚定修复目标"},{id:"auto-spec-validation",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅唯一阻断族(后台流程话术)由 WORKFLOW_PHRASE_RE 清洗覆盖;后台优化建议/基础事实候选/材料未提供 3 词未入清洗表"},{id:"fact-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"多值冲突源于绑定材料组内同名不同值,只能由用户确认绑定范围/资料侧裁决,正文改写不可能消除"},{id:"figure-substitute-table",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"图类要求无承载(既无图题也无等效数据表)需补写数据表并加题注,属内容补写而非确定性改写;写入侧应由图类呈现计划同时下达「图 or 等效表」二选一,本检测器为交付前兜底"},{id:"project-type-consistency",scope:"full-document",category:"scope",fixerDisposition:"manual",fixerDispositionReason:"项目类型与正文用词矛盾(如产业园标准化厂房项目出现「自然村/村内/多村并行」)属内容性质错误:自动改写会改变叙述口径与上下文语义,须人工确认后按正确策略重新生成;根治在写入侧(resolveDerivationStrategy 类型守卫 + 策略驱动分组称谓),本检测器为交付前安全网"},{id:"project-contamination",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"对象名污染分支由 sanitizeContaminationCandidates 覆盖;文档编号分支(documentContaminationService.ts:18)无修复器"},{id:"project-basic-placeholder",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"同源专用修复器 repairKnownProjectBasicPlaceholders 已按「删除无用代码」口径移除(全仓零调用、注册表看不见);当前仅表内占位被 canonical 事实替代,表外正文占位无覆盖"},{id:"standard-final",scope:"full-document",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"standard-final 组整组重跑的结果容器登记,不产出自身 issue;组内子检测器各自锚定即可"},{id:"fact-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"stageFactLanding 与检测同源同池(uncoveredImportantFacts + 同一事实池),接线 documentPipeline.ts:74"},{id:"page-target",scope:"full-document",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"页数为估算度量信号(永远 warning 不阻断),无独立可修缺陷;超幅族由字数口径的 length-compression-repair 轮收敛"},{id:"document-budget",scope:"full-document",category:"structure"},{id:"formal-text-gate",scope:"full-document",category:"format"},{id:"heading-uncovered-engineering-items",scope:"full-document",category:"structure"},{id:"writer-missing-section",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"由 planned-section-repair 轮按 reason=empty 重写清除;planned=false 的小节不入选"},{id:"critical-section-depth",scope:"chapter",category:"structure"},{id:"critical-section-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"须内容补写,但 issue 无 provenance,按 provenance 过滤的补写轮消费不到(接线 provenance 后可改判 fixed)"},{id:"chapter-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"质量报告阶段被降级为 info(消息尾句命中 FLOW_DIAGNOSTIC_ISSUE_RE)不阻断;其修复手段是写作期块级重写重试"},{id:"construction-org-professional-audit",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"聚合 issue 无 category/provenance 无法被锚定消费,且 5 通道中 3 通道(参数密度/工作包要素/表格空字段)无修复器"}],k=[{id:"toc-consistency",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixTocFromBody 按正文实际结构重建目录,检测定位=修复定位,已接线三处"},{id:"section-numbering",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"section-count-overflow",scope:"chapter",category:"structure"},{id:"heading-duplicate",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"structure-integrity",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"templated-label",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"title-integrity",scope:"full-document",category:"structure"},{id:"evaluation-criteria-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"正文核心词缺位须内容补写且无修复轮消费;上游只有预防性补挂(constructionBidStructure.ts:445)"},{id:"requirements-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"requirement-response-repair 轮按 provenance 定向补写(requirementResponseRepair.ts:51)"},{id:"fabricated-start-date",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"需语义判断该日期是编造还是合法的招标/法规成文日期,确定性删除必误伤;仅 patchGuard 预防式预检,无存量修复"},{id:"field-value-mismatch",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"无实现;权威值在 factsModel 可取属可确定性实现但未实现,现只能转人工"},{id:"area-arithmetic",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"地上/地下/单体哪个是错值须资料裁决;同族 scale 修复器显式声明对该三项不做确定性替换"},{id:"resource-consistency",scope:"full-document",category:"fact_consistency",authorities:["laborPeak"]},{id:"node-schedule-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixNodeScheduleConflicts(fixers.ts:1010),挂 applyNumericConsistencyDeterministicFixes steps"},{id:"cross-section-numeric-conflict",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixCrossSectionNumericConflicts(fixers.ts:1195),同链 steps"},{id:"fact-reconciliation",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"greening-maintenance-mismatch",scope:"full-document",category:"fact_consistency",authorities:["greeningMaintenance"]},{id:"street-light-count-mismatch",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"正文常为分型号明细而清单只锁总数,确定性替换会写坏;同族 greening-maintenance 有修复器,此其一无"},{id:"spec-location-mismatch",scope:"full-document",category:"fact_consistency"},{id:"blueprint-citation-consistency",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"fixQuantityAuthorityConflicts(fixers.ts:1304)经 quantityAnchors 直连,含链尾重放"},{id:"cross-project-value-copy",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费(globalQualityGates.ts:1398);无专用确定性修复器"},{id:"phase-labor-mixing",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"equipment-batch-conflict",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"preliminary-action-timing",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"fixPreliminaryActionTimingDeterministically 与检测共用 scanPreliminaryActionTimingFindings 同源单扫描,接线 postReviewSurface.ts:274"},{id:"foundation-form-residue",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费(globalQualityGates.ts:1407→:1500)"},{id:"ambiguous-either-or",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"]},{id:"excavation-depth-lock",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费,另有路由特例与权威值注入(:1533/:1580)"},{id:"excavation-hazard-classification",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"需按 canonical 深度补写分级结论句,当前无任何修复路径"},{id:"support-form-fact-consistency",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"],fixerDisposition:"manual",fixerDispositionReason:"与 support-system-conflict 判据不同源(读 canonical.byKey.foundation_support_form),不可复用其修复器"},{id:"equipment-entry-timing",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixEquipmentEntryTimingDeterministically(postReviewSurface.ts:287),与检测同源单扫描"},{id:"fabricated-award",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"白名单外奖项须回招标原文逐字比对并整体改写创优叙述,无确定性路径"},{id:"bidder-qualification-section",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"stripTenderClauseFragmentHeadings(markdownCleanup.ts:622)删标题;仅覆盖两条句式规则,资格词表分支未覆盖"},{id:"cross-chapter-duplicate-section",scope:"chapter",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"同名小节归并需判断内容归属,确定性路径被有意排除(dedupeDuplicateSectionHeadings 仅章内)"},{id:"basic-info-schedule-field",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"现有归一化的收场是「非法值被拒收→单元格变空」,属以删除通过门禁(P2-2 同口径禁止),不判 fixed"},{id:"duplicate-table",scope:"full-document",category:"table"},{id:"duplicate-paragraph",scope:"full-document",category:"structure"},{id:"paragraph-near-duplicate",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"近重复段落之间无从确定「哪份是原稿、哪份是副本」(重复处常含另一处缺失的信息),确定性删除即信息丢失;无定向修复轮消费(不带章锚点)→ 交付前残留即转人工复核清单(provenance 可追溯检测器身份),人工合并去重(保信息完整的一处)后重生成"},{id:"paragraph-tail-repeat",scope:"full-document",category:"style",deterministicSafe:!0},{id:"collision-numbered-heading",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"inverted-date-range",scope:"full-document",category:"fact_consistency",deterministicSafe:!0},{id:"resource-triad-section-hierarchy",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"修复需重排章节层级/拆分小节,结构性重写且无确定性路径"},{id:"support-system-conflict",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"],fixerDisposition:"fixed",fixerDispositionReason:"fixSupportSystemConflicts(fixers.ts:38),同链 steps;权威缺失时不动作,属部分覆盖"},{id:"dangerous-list-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"两处清单需合并为唯一清单并统一项名与分级,属内容改写"},{id:"hazard-exclusion-contradiction",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"排除声明与清单孰对取决于资料是否真达判定阈值,须资料裁决"},{id:"six-hundred-percent-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"补写型修复器已随 4.41「零确定性正文注入」架构决策删除(fixers.ts:1625),内容缺失只能由生成侧补齐"},{id:"self-undermining-candidate",scope:"full-document",category:"style"},{id:"paragraph-opening-repeat",scope:"full-document",category:"style",deterministicSafe:!0},{id:"flow-form-repeat",scope:"full-document",category:"style"},{id:"skeleton-fingerprint",scope:"full-document",category:"style"},{id:"sentence-pattern-repeat",scope:"full-document",category:"style"},{id:"repeated-word",scope:"full-document",category:"style",deterministicSafe:!0},{id:"commercial-data-in-body",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"stripCommercialDataBodyLines(postReviewSurface.ts:209),与检测同口径"},{id:"overview-recap",scope:"full-document",category:"style"},{id:"closure-phrase-density-cap",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"缺陷是词频密度(语义/文风改写),无修复轮按 provenance 消费;fiveElementClosureBoost 的补句池刻意避开闭环密度词"},{id:"parameter-concept-conflict",scope:"full-document",category:"fact_consistency"},{id:"internal-terminology-anchor",scope:"full-document",category:"style",deterministicSafe:!0},{id:"construction-system-coverage",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"某专业系统整章零覆盖须补写施工方案正文,属内容生成"},{id:"dangerous-applicability",scope:"full-document",category:"evidence_coverage"},{id:"innovation-tech-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"缺节场景可被补写轮间接覆盖,但「小节 <200 字的部分成稿」场景无任何路径(补写轮 alsoAnchoredTo 接上后可改判 fixed)"},{id:"instruction-like-heading",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅 tender-clause-heading-strip 一支(^#{3,4} 且判据为 isTenderClauseFragmentTitle);主判据 instructionTitleRe(是否涉及/按需生成/视情况/注意事项)与 H2 级碎片无任何正文修复器"},{id:"formal-heading-hierarchy",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"非法 H2 的现成修复器 demoteNonFormalH2 已按「删除无用代码」口径移除(全仓零调用);当前无任何生产修复路径"},{id:"formal-content-integrity",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"截断句须补全句子内容;fixTruncatedSentenceArtifacts 修的是标点叠用且锚在另一个 id 上,非同源"},{id:"punctuation-artifact",scope:"full-document",category:"format",deterministicSafe:!0},{id:"table-quality",scope:"full-document",category:"table",deterministicSafe:!0},{id:"table-spam",scope:"full-document",category:"table",deterministicSafe:!0},{id:"basis-regulations-coverage",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"basis-regulations-cross",scope:"full-document",category:"fact_consistency"},{id:"resource-breakdown-consistency",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"section-content-integrity",scope:"chapter",category:"structure"},{id:"professional-content",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"缺项须补写专业内容,全仓无同源修复函数;且本 issue 无 provenance,按 provenance 过滤的修复轮消费不到,属真孤儿"},{id:"professional-score",scope:"chapter",category:"professional_chain"},{id:"generic-professional-content",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"判据=词面 8 词命中≥6 + bge 语义门;最近的套话修复器(isTemplatePrefixSentence + FILLER_SEMANTIC_QUERIES)判据不同源,不构成覆盖"},{id:"management-measure-number",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"需补责任主体/频次/台账/整改复查的语义补写,确定性路径不存在;且无 provenance,修复轮看不见"},{id:"closed-loop-density",scope:"full-document",category:"control_loop",fixerDisposition:"exempt",fixerDispositionReason:"纯度量信号:判据是闭环块密度对标 max(6,字数/1500),注释自述与评分同口径不阻断门禁;补闭环词还会撞 closure-phrase-density-cap 上限,不宜自动改"},{id:"cross-chapter-consistency",scope:"full-document",category:"fact_consistency"},{id:"process-spec-conflict",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"applyDeterministicConsistencyFixes 与检测端同判据同归属规则(collectLayerNumbers+buildSpecActionGate),已接线两条确定性链"},{id:"evidence-usage-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"缺陷是「未引用该类事实」,只能靠补写正文;fact-distribution-round 与 important-unplaced-facts 轮判据均不同源且不复检本 id"},{id:"paragraph-generic",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"判据=段落长度 + 10 词泛化表 + bge 具体性门;fillerParagraphIssues 用另一套 17 条词面 + 14 语义原型,同族不同判据"},{id:"construction-org-generic-language",scope:"chapter",category:"style",fixerDisposition:"fixed",fixerDispositionReason:"由 templating-repair 轮消费(该轮走 globalQualityGates 内联的 fillerDensityReport,非本 id 产出的 issue;本 gate 为内联检查的同族检测器,见幻影锚点收口说明)"},{id:"construction-org-control-loop",scope:"chapter",category:"control_loop"},{id:"construction-org-professional-chain",scope:"chapter",category:"professional_chain"},{id:"construction-org-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"需按资料裁决哪个口径为真且涉及跨表改写;同族修复器(fixEquipmentBatchConflicts/fixLaborPeakConflict/resource-breakdown)判据均不同源"},{id:"construction-org-chapter-data-coverage",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"属「章内缺项目事实」的补写型缺陷,仅生成侧/人工可解"},{id:"construction-org-major-content",scope:"chapter",category:"professional_chain"},{id:"construction-org-division-section",scope:"chapter",category:"structure"},{id:"major-content-governance",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅清单口径词族有修复器(postReviewSurface.ts:313);表格承载正文族无,仍走终门禁"},{id:"construction-org-bonus-module",scope:"chapter",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"加分项建议而非缺陷(代码自述为避免污染缺陷计分,只产出 info 级「高分模块」建议)"},{id:"chapter-dependency",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"需在指定章补写投入调配/工艺控制/应急闭环内容,属语义补写;且无 provenance"},{id:"document-delivery-score",scope:"full-document",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"纯评分汇总载体(总分 x/10 的元信息),其内部调用的三个检测器各自已有 id 与处置,本 id 不产出缺陷"},{id:"generated-fact-verification",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"反查失败数值的自动消除即删除式修复(P2-2 已明令禁止),补齐权威属资料侧动作——与 numeric-traceability 同口径"},{id:"numeric-traceability",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"修复器已按 P2-2 停用(删除式修复被明令禁止);补齐权威值属资料/配置侧动作"},{id:"table-arithmetic-consistency",scope:"full-document",category:"evidence_coverage"},{id:"duplicate-basic-info",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"fixDuplicateBasicInfoTables 覆盖重复表族;「表前重复逐项叙述」族未覆盖(已扩展锚定到该修复器)"},{id:"formal-style",scope:"full-document",category:"style"},{id:"tertiary-heading",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"min-chapter-section",scope:"chapter",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"mergeDuplicateThematicSections 与检测共用桶键 classifyThematicSectionKey,接线 duplicate-theme-merge 轮;精确同名小节族另由 heading-duplicate-merge 覆盖"},{id:"planned-section-placement",scope:"chapter",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"链尾确定性提升覆盖「降级为 H4」形态(delivery-structure-closure);整节漏写属写作缺项,交 LLM 定向补写小节(provenance 已打点)"},{id:"hollow-table-cell",scope:"full-document",category:"table",fixerDisposition:"manual",fixerDispositionReason:"按「表\xd7列」聚合报出,交 LLM 按列补真实值(同章正文通常已有同口径数据)"},{id:"schedule-duration-overrun",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"按生效工期重排进度计划与节点天序(源头解析已取变更后口径,残留为写作期漂移)"},{id:"caliber-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"被取代值由链尾 delivery-structure-closure 按真值层覆盖表**确定性替换**(不依赖本检测器锚定);本检测器报出的是「生效值整体未落位」类残留,进人工复核清单"},{id:"hazard-parameter-binding",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补写:在危大判定处补本项目实际参数 + 阈值对照 + 结论"},{id:"blueprint-value-placement",scope:"full-document",category:"professional_chain",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补写:按蓝图权威值写资源配置具体数值"},{id:"dangling-conjunction",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补全被截断的句子成分(标点类残片另有 fixTruncatedSentenceArtifacts)"},{id:"precise-fact-usage",scope:"full-document",category:"fact_consistency"},{id:"parameter-obligation-usage",scope:"full-document",category:"fact_consistency"},{id:"boq-placement",scope:"full-document",category:"evidence_coverage"},{id:"stage-phrasing",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"阶段划分口径统一属语义改写,且该 issue 无 provenance,修复轮按 provenance 过滤消费不到"},{id:"emergency-section-depth",scope:"full-document",category:"structure"},{id:"boq-row-trace",scope:"full-document",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"只产 warning,既不断阻断也不进人工清单(清单由 blockingIssues 构建);同轴真缺口另有 blocker 通道 boq-placement"},{id:"drawing-reference",scope:"full-document",category:"evidence_coverage"},{id:"drawing-pointer-phrase",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"指向型表述的修复是用具体做法替换指向(须定位蓝图/清单权威值,属语义改写而非字面替换);4.55.24 先建立判据与写作前红线并显性进人工清单,定向改写轮排期 4.55.25"},{id:"web-evidence-leakage",scope:"full-document",category:"scope",fixerDisposition:"exempt",fixerDispositionReason:"warning 级度量信号不阻断、不进人工清单,且全仓不存在该词族的删除/改写函数"},{id:"formal-placeholder",scope:"full-document",category:"format",deterministicSafe:!0},{id:"prompt-example-leak",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"「疑似样例」删除必误伤(样例块可能撞合法正文),无实现且无消费轮"},{id:"degenerate-content",scope:"chapter",category:"style",fixerDisposition:"manual",fixerDispositionReason:"唯一可能消费它的章级重扫入口 lightweightChapterIssues 已按「删除无用代码」口径移除(全仓零调用);退化输出的修复等同重新生成小节"},{id:"planned-auto-spec-gate",scope:"full-document",category:"structure"},{id:"bid-composition-body-table",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"dismantleBodyTables 同判据 LLM 拆表改写;finalize 侧只重跑禁表分支(章级授权口径未覆盖)"},{id:"bid-composition-body-figure",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"removeUnwantedDrawingImages(markdownComposer.ts:1905)与检测共用 FIGURE_PLACEHOLDER_RE"},{id:"identity-marks-forbidden",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"需删/改写业绩获奖证书类敏感句,可自动化但未实现;当前只有写作期与修复提示词约束"},{id:"planned-structure",scope:"full-document",category:"structure"},{id:"table-caption",scope:"full-document",category:"format"},{id:"prompt-document-rule",scope:"full-document",category:"format",fixerDisposition:"fixed",fixerDispositionReason:"applyPromptDocumentRules 覆盖残留封面/目录/缺必需表/禁止词行;指令型标题、缺指定一级章节、缺关键词、字数不足族无实现"},{id:"local-adaptation-keyword",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"仅 blocker 通道(工伤保险缺失)有修复器(postReviewSurface.ts:301);另两条属度量/增强项,不阻断"},{id:"boq-division-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"enforceBoqDivisionCoverageInMethodChapters(postReviewSurface.ts:400)链尾确定性补写"}],l=[{id:"table-line-residue",kind:"deterministic",anchoredTo:"table-quality",giveUpOnFailure:!0},{id:"templated-labels",kind:"deterministic",anchoredTo:"templated-label",giveUpOnFailure:!0},{id:"structure-integrity",kind:"deterministic",anchoredTo:"structure-integrity",giveUpOnFailure:!0},{id:"embedded-heading-split",kind:"deterministic",anchoredTo:"planned-structure",giveUpOnFailure:!0},{id:"repeated-words",kind:"deterministic",anchoredTo:"repeated-word",giveUpOnFailure:!0},{id:"duplicate-tables",kind:"deterministic",anchoredTo:"duplicate-table",giveUpOnFailure:!0},{id:"finish-thickness",kind:"deterministic",anchoredTo:"finish-thickness",giveUpOnFailure:!0},{id:"slot-depth-value",kind:"deterministic",anchoredTo:"fact-reconciliation",authorities:["blueprint"],giveUpOnFailure:!0},{id:"spec-quantity-binding",kind:"deterministic",anchoredTo:"fact-reconciliation",authorities:["blueprint"],giveUpOnFailure:!0},{id:"labor-peak",kind:"deterministic",anchoredTo:"resource-consistency",authorities:["laborPeak"],giveUpOnFailure:!0},{id:"phase-labor-values",kind:"deterministic",anchoredTo:"phase-labor-mixing",authorities:["blueprint"],giveUpOnFailure:!0},{id:"resource-breakdown",kind:"deterministic",anchoredTo:"resource-breakdown-consistency",authorities:["blueprint"],giveUpOnFailure:!0},{id:"equipment-batch-values",kind:"deterministic",anchoredTo:"equipment-batch-conflict",authorities:["blueprint"],giveUpOnFailure:!0},{id:"internal-table-row-dup",kind:"deterministic",anchoredTo:"table-spam",giveUpOnFailure:!0},{id:"duplicate-basic-info-tables",kind:"deterministic",anchoredTo:"table-quality",alsoAnchoredTo:["duplicate-basic-info"],giveUpOnFailure:!0},{id:"fallback-placeholder-rows",kind:"deterministic",anchoredTo:"formal-placeholder",giveUpOnFailure:!0},{id:"greening-maintenance",kind:"deterministic",anchoredTo:"greening-maintenance-mismatch",authorities:["greeningMaintenance"],giveUpOnFailure:!0},{id:"paragraph-opening-repeat",kind:"deterministic",anchoredTo:"paragraph-opening-repeat",giveUpOnFailure:!0},{id:"paragraph-tail-repeat",kind:"deterministic",anchoredTo:"paragraph-tail-repeat",giveUpOnFailure:!0},{id:"collision-numbered-heading",kind:"deterministic",anchoredTo:"collision-numbered-heading",giveUpOnFailure:!0},{id:"heading-uncovered-items",kind:"deterministic",anchoredTo:"heading-uncovered-engineering-items",giveUpOnFailure:!0},{id:"inverted-date-range",kind:"deterministic",anchoredTo:"inverted-date-range",giveUpOnFailure:!0},{id:"zero-length-date-range",kind:"deterministic",anchoredTo:"cross-chapter-consistency",giveUpOnFailure:!0},{id:"truncated-sentence",kind:"deterministic",anchoredTo:"truncated-sentence",giveUpOnFailure:!0},{id:"meta-discourse",kind:"deterministic",anchoredTo:"meta-discourse-declaration",giveUpOnFailure:!0},{id:"formula-residue",kind:"deterministic",anchoredTo:"formula-residue",giveUpOnFailure:!0},{id:"self-undermining",kind:"deterministic",anchoredTo:"self-undermining-candidate",giveUpOnFailure:!0},{id:"ambiguous-either-or",kind:"deterministic",anchoredTo:"ambiguous-either-or",authorities:["supportSystem"],giveUpOnFailure:!0},{id:"tender-meta-language",kind:"deterministic",anchoredTo:"formal-style",giveUpOnFailure:!0},{id:"formal-source-residue",kind:"deterministic",anchoredTo:"formal-style",giveUpOnFailure:!0},{id:"forbidden-configuration",kind:"deterministic",anchoredTo:"formal-text-gate",giveUpOnFailure:!0},{id:"duplicate-response-line",kind:"deterministic",anchoredTo:"duplicate-paragraph",giveUpOnFailure:!0},{id:"atlas-reference",kind:"deterministic",anchoredTo:"atlas-reference-phrase",giveUpOnFailure:!0},{id:"tertiary-h4-dedupe",kind:"deterministic",anchoredTo:"tertiary-heading",giveUpOnFailure:!0},{id:"internal-term-heading",kind:"deterministic",anchoredTo:"internal-terminology-anchor",giveUpOnFailure:!0},{id:"skeleton-fingerprint-variants",kind:"deterministic",anchoredTo:"skeleton-fingerprint",giveUpOnFailure:!0},{id:"flow-form-variants",kind:"deterministic",anchoredTo:"flow-form-repeat",giveUpOnFailure:!0},{id:"truncated-title-completion",kind:"deterministic",anchoredTo:"title-integrity",giveUpOnFailure:!0},{id:"sentence-like-heading-split",kind:"deterministic",anchoredTo:"title-integrity",giveUpOnFailure:!0},{id:"heading-duplicate-merge",kind:"deterministic",anchoredTo:"heading-duplicate",giveUpOnFailure:!0},{id:"section-renumber",kind:"deterministic",anchoredTo:"section-numbering",giveUpOnFailure:!0}],m=[{id:"numeric-arbiter-concept",kind:"deterministic",anchoredTo:"parameter-concept-conflict",giveUpOnFailure:!0},{id:"numeric-arbiter-spec",kind:"deterministic",anchoredTo:"spec-location-mismatch",giveUpOnFailure:!0}],n=[{id:"numeric-chain-node-schedule",kind:"deterministic",anchoredTo:"node-schedule-consistency",giveUpOnFailure:!0},{id:"numeric-chain-cross-section",kind:"deterministic",anchoredTo:"cross-section-numeric-conflict",giveUpOnFailure:!0},{id:"numeric-chain-support-system",kind:"deterministic",anchoredTo:"support-system-conflict",authorities:["supportSystem"],giveUpOnFailure:!0},{id:"numeric-chain-quantity-authority",kind:"deterministic",anchoredTo:"blueprint-citation-consistency",authorities:["blueprint"],giveUpOnFailure:!0},{id:"equipment-entry-timing-clean",kind:"deterministic",anchoredTo:"equipment-entry-timing",giveUpOnFailure:!0},{id:"commercial-data-body-strip",kind:"deterministic",anchoredTo:"commercial-data-in-body",giveUpOnFailure:!0},{id:"listing-jargon-strip",kind:"deterministic",anchoredTo:"major-content-governance",giveUpOnFailure:!0},{id:"work-injury-statement-fix",kind:"deterministic",anchoredTo:"local-adaptation-keyword",giveUpOnFailure:!0},{id:"boq-division-coverage-closure",kind:"deterministic",anchoredTo:"boq-division-coverage",giveUpOnFailure:!0},{id:"drawing-image-strip",kind:"deterministic",anchoredTo:"bid-composition-body-figure",giveUpOnFailure:!0},{id:"tender-clause-heading-strip",kind:"deterministic",anchoredTo:"bidder-qualification-section",alsoAnchoredTo:["instruction-like-heading"],giveUpOnFailure:!0},{id:"formal-source-phrase-clean",kind:"deterministic",anchoredTo:"source-enumeration",giveUpOnFailure:!0},{id:"toc-consistency-rebuild",kind:"deterministic",anchoredTo:"toc-consistency",giveUpOnFailure:!0},{id:"prompt-document-rules-apply",kind:"deterministic",anchoredTo:"prompt-document-rule",giveUpOnFailure:!0},{id:"workflow-phrase-clean",kind:"deterministic",anchoredTo:"auto-spec-validation",giveUpOnFailure:!0},{id:"contamination-candidate-sanitize",kind:"deterministic",anchoredTo:"project-contamination",giveUpOnFailure:!0},{id:"preliminary-action-timing-clean",kind:"deterministic",anchoredTo:"preliminary-action-timing",authorities:["blueprint"],giveUpOnFailure:!0},{id:"process-spec-conflict-fix",kind:"deterministic",anchoredTo:"process-spec-conflict",giveUpOnFailure:!0}],o=[{id:"near-duplicate-section-merge",kind:"deterministic",anchoredTo:"section-count-overflow",giveUpOnFailure:!0},{id:"empty-section-strip",kind:"deterministic",anchoredTo:"section-content-integrity",giveUpOnFailure:!0},{id:"duplicate-theme-merge",kind:"deterministic",anchoredTo:"min-chapter-section",giveUpOnFailure:!0}],p=["source-enumeration","internal-terminology-anchor","fabricated-start-date","repeated-word","writer-missing-section","meta-discourse-declaration","formula-residue","finish-thickness","formal-placeholder","truncated-sentence"],q=[{id:"fact-landing",kind:"llm-patch",anchoredTo:"fact-coverage",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"table-repair",kind:"llm-patch",anchoredTo:"table-quality",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"table-execution-repair",kind:"llm-patch",anchoredTo:"bid-composition-body-table",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"templating-repair",kind:"llm-patch",anchoredTo:"construction-org-generic-language",alsoAnchoredTo:["sentence-pattern-repeat"],patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"workpackage-skeleton-repair",kind:"llm-patch",anchoredTo:"construction-org-division-section",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"planned-section-repair",kind:"llm-patch",anchoredTo:"writer-missing-section",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"global-consistency-repair",kind:"llm-patch",anchoredTo:"cross-chapter-consistency",alsoAnchoredTo:["foundation-form-residue","excavation-depth-lock"],patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"cross-project-value-copy-repair",kind:"llm-patch",anchoredTo:"cross-project-value-copy",authorities:["blueprint"],patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"requirement-response-repair",kind:"llm-patch",anchoredTo:"requirements-coverage",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"numeric-verification",kind:"llm-patch",anchoredTo:"authority-audit-gap",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"quotation-balance-repair",kind:"llm-patch",anchoredTo:"punctuation-artifact",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"content-depth-repair",kind:"llm-patch",anchoredTo:"critical-section-depth",alsoAnchoredTo:["emergency-section-depth","construction-org-major-content","construction-org-division-section","precise-fact-usage","parameter-obligation-usage","overview-recap","professional-score","boq-placement","drawing-reference","hazard-parameter-binding","blueprint-value-placement","dangling-conjunction"],patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"control-loop-repair",kind:"llm-patch",anchoredTo:"construction-org-control-loop",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"professional-chain-repair",kind:"llm-patch",anchoredTo:"construction-org-professional-chain",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"basis-regulations-repair",kind:"llm-patch",anchoredTo:"basis-regulations-coverage",authorities:["blueprint"],patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"basis-regulations-cross-repair",kind:"llm-patch",anchoredTo:"basis-regulations-cross",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"dangerous-applicability-repair",kind:"llm-patch",anchoredTo:"dangerous-applicability",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"auto-spec-gate-repair",kind:"llm-patch",anchoredTo:"planned-auto-spec-gate",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"length-compression-repair",kind:"llm-patch",anchoredTo:"document-budget",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"table-caption-repair",kind:"llm-patch",anchoredTo:"table-caption",patchGuard:{detectors:[...p]},giveUpOnFailure:!0},{id:"table-arithmetic-repair",kind:"llm-patch",anchoredTo:"table-arithmetic-consistency",patchGuard:{detectors:[...p]},giveUpOnFailure:!0}],r=["fact-landing-round","table-repair-round","semantic-choice-conflict","deterministic-stage5","formal-source-clean","planned-section-final","commercial-strip","table-deterministic-repair","numeric-verification","requirement-response-repair","requirement-verification","content-depth-repair","control-loop-repair","professional-chain-repair","post-review-surface","terminology-strip","regulation-number-typo","quotation-balance-repair","basis-regulations-repair","basis-regulations-cross-repair","dangerous-applicability-repair","auto-spec-gate-repair","toc-consistency","length-compression-repair","fact-distribution-round","table-arithmetic-repair","empty-section-sweep","section-alignment-sweep","templating-sweep","duplicate-theme-merge","table-caption-repair","delivery-structure-closure","sentence-pattern-sweep","duplicate-sentence-collapse","templating-tail-replay"],s=new Set;function t(a,b){return s.add(a),b()}async function u(a,b){s.add(a);try{return await b()}catch(c){let b=c instanceof Error?c.message:String(c);return console.error(`[gen] detector degraded: ${a} failed, fallback to warning issue:`,c),w.add(a),[{level:"warning",severity:"warning",category:"format",owner:"system",repairability:"manual_review",provenance:{detectorId:a,fingerprint:""},message:`交付前检测器「${a}」执行失败,已降级为待复核:${b}`,suggestion:`此为检测器基础设施异常,非正文内容缺陷——该检测维度**本次未执行**(已计入降级检测器清单,见「交付前检测器执行情况」节点)。可稍后重新生成复核,或人工复核该检测维度。`}]}}function v(a){return a.filter(a=>{let b=a.provenance?.detectorId;return!!b&&z(b)?.fixerDisposition==="manual"})}let w=new Set;function x(a){let b=("full-validation"===a?j:k).map(a=>a.id);return{executed:b.filter(a=>s.has(a)&&!w.has(a)),degraded:b.filter(a=>w.has(a)),declaredMissing:b.filter(a=>!s.has(a))}}let y=[...j,...k,{id:"authority-audit-gap",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"numeric-verification 轮收敛(numericVerification.ts:131)。覆盖已被削弱:其确定性兜底 demoteUnsourcedNumericTokens 已按 P2-2 停用,只剩 LLM 一条路"},{id:"source-enumeration",scope:"full-document",category:"style",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"cleanFormalSourcePhrases(deterministicStage5.ts:161)与检测共用同一词表。4.55.36 \xa7L3-11 已接 det()(documentFinalValidation 终检复核)"},{id:"meta-discourse-declaration",scope:"full-document",category:"style",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixMetaDiscourseDeclarations(SURFACE_FIX_STEPS meta-discourse 步,与检测同词表 META_DECLARATION_RE)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"finish-thickness",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixFinishThickness 除以 10(SURFACE_FIX_STEPS finish-thickness 步,与检测同判据 FINISH_THICKNESS_CONTEXT_WORD)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"formula-residue",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixFormulaResidues(SURFACE_FIX_STEPS formula-residue 步,与检测同判据 FORMULA_FORM_RE)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"truncated-sentence",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"链尾 cleanStructureDefects→closeTruncatedLineTail 闭合 boundary 形态(SURFACE_FIX_STEPS structure-integrity 步 + truncated-sentence 步标点残片收敛);tail 形态只报不删(尾段是可读正文)交修复轮。4.55.36 \xa7L3-11 已接 det()"},{id:"atlas-reference-phrase",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"stripDrawingPointerPhrases 经 fixFormalSourceResidue 在 SURFACE_FIX_STEPS formal-source-residue 步(stage5 + round-2 双链)确定性小句级删除。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"block-structure-contract",scope:"chapter",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门,返回计数不产出 ValidationIssue,无对象可被 FixerEntry 锚定(重写重试即其修复手段)"},{id:"block-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockDensityAssessment,首轮阻断重写即其修复手段"},{id:"block-templating",scope:"chapter",category:"style",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockTemplatingVerdict;终检侧由 templating-repair 轮承载"},{id:"block-attribution-quantification",scope:"chapter",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 AttributionQuantificationVerdict"},{id:"block-numeric-reconciliation",scope:"chapter",category:"fact_consistency",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 NumericReconciliation,阻断重写即修复手段"},{id:"block-format-constraints",scope:"chapter",category:"format",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回命中行;终检侧同词表门为 formal-text-gate"},{id:"block-filler-phrase",scope:"chapter",category:"style",deterministicSafe:!0,fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockFillerPhraseVerdict,首轮阻断重写即其修复手段(反馈只要求改写命中短语、保留句中实质信息)"},{id:"clause-recitation",scope:"chapter",category:"style",deterministicSafe:!0,fixerDisposition:"exempt",fixerDispositionReason:"写作期块任务卡约束通道:检测结果只用于升级/降级约束措辞(不回写正文、不产出 ValidationIssue),无对象可被 FixerEntry 锚定"},{id:"table-content-leak",scope:"chapter",category:"table",deterministicSafe:!0,fixerDisposition:"exempt",fixerDispositionReason:"章成稿后自检:进章问题清单(待优化 + 诊断),修复动作是结构性改写(改回表格/补主谓),不在确定性修复链内,故无 FixerEntry 可锚定"}];function z(a){return y.find(b=>b.id===a)}function A(a,b){let c=new Set(a??[]),d=new Set(b??[]);if(c.size!==d.size)return!1;for(let a of c)if(!d.has(a))return!1;return!0}function B(){let a=[],b=[...l,...m,...o,...n,...q];for(let c of b){let b=z(c.anchoredTo);if(!b){a.push(`修复器 ${c.id} 锚定检测器 ${c.anchoredTo} 未在注册表声明(检测定位=修复定位强制同源)`);continue}for(let d of(A(c.authorities,b.authorities)||a.push(`修复器 ${c.id}(authorities=${JSON.stringify(c.authorities??[])})与锚定检测器 ${c.anchoredTo}(authorities=${JSON.stringify(b.authorities??[])})权威口径不一致`),c.alsoAnchoredTo??[])){let b=z(d);b?A(c.authorities,b.authorities)||a.push(`修复器 ${c.id}(authorities=${JSON.stringify(c.authorities??[])})与扩展锚定检测器 ${d}(authorities=${JSON.stringify(b.authorities??[])})权威口径不一致`):a.push(`修复器 ${c.id} 扩展锚定检测器 ${d} 未在注册表声明(检测定位=修复定位强制同源)`)}if("llm-patch"===c.kind&&!c.patchGuard){a.push(`LLM patch 修复器 ${c.id} 未声明 patchGuard(修复过程会重新引入已知坏内容,必须预检)`);continue}for(let b of c.patchGuard?.detectors??[]){let d=z(b);d?d.deterministicSafe||a.push(`修复器 ${c.id} patchGuard 引用检测器 ${b} 未标记 deterministicSafe(patchGuard 只收录零误伤确定性检测器)`):a.push(`修复器 ${c.id} patchGuard 引用检测器 ${b} 未在注册表声明`)}}for(let[b,c]of l.entries())l.slice(0,b).some(a=>a.id===c.id)&&a.push(`确定性修复器锚定声明重复:${c.id}`);let c=new Set(d.a.map(a=>a.key));for(let b of c)l.some(a=>a.id===b)||a.push(`确定性修复器 ${b} 已接入 SURFACE_FIX_STEPS 但未在 DETERMINISTIC_FIXER_ANCHORS 声明锚定检测器`);for(let b of l)c.has(b.id)||a.push(`确定性修复器锚定声明 ${b.id} 无对应 SURFACE_FIX_STEPS 键(声明多余或键已改名)`);for(let[b,c]of m.entries())m.slice(0,b).some(a=>a.id===c.id)&&a.push(`数值裁决器修复器声明重复:${c.id}`);for(let[b,c]of o.entries())o.slice(0,b).some(a=>a.id===c.id)&&a.push(`章草稿级修复器声明重复:${c.id}`);for(let[b,c]of n.entries())n.slice(0,b).some(a=>a.id===c.id)&&a.push(`链内确定性修复器声明重复:${c.id}`);let j=new Set([...l,...m,...o,...q].map(a=>a.id));for(let b of n)j.has(b.id)&&a.push(`链内确定性修复器 ${b.id} 与其它声明表重名(FixerEntry.id 须全局唯一,否则按 id 追溯修复器产生歧义)`);for(let b of y)b.category&&i.has(b.category)||a.push(`检测器 ${b.id} 声明了非法 category(当前=${b.category||"缺失"};合法值:${[...i].join("、")})`);if(a.push(...function(a){let b=[],c=new Set;for(let b of a.fixers)for(let a of(c.add(b.anchoredTo),b.alsoAnchoredTo??[]))c.add(a);let d=new Set(a.pending);for(let c of(d.size!==a.pending.length&&b.push("PENDING_FIXER_DISPOSITION 存在重复 id(欠账清单须唯一)"),d))a.detectors.some(a=>a.id===c)||b.push(`PENDING_FIXER_DISPOSITION 声明了未登记的检测器 ${c}(已改名或已删除,请同步移出欠账清单)`);for(let f of a.detectors){let a=c.has(f.id),g=f.fixerDisposition;if(d.has(f.id)){g?b.push(`检测器 ${f.id} 已完成处置声明(${g})却仍在 PENDING_FIXER_DISPOSITION 中——请从欠账清单移出`):a&&b.push(`检测器 ${f.id} 已有修复器锚定却仍在 PENDING_FIXER_DISPOSITION 中——请从欠账清单移出`);continue}if(!g){a?f.fixerDispositionReason&&b.push(`检测器 ${f.id} 写了 fixerDispositionReason 却未声明 fixerDisposition(说明须挂在明确处置上)`):b.push(`检测器 ${f.id} 既无修复器锚定、也未声明 fixerDisposition(孤儿必须显式 'exempt' 或 'manual' 并说明理由,不得沉默)`);continue}if(!e.has(g)){b.push(`检测器 ${f.id} 声明了非法 fixerDisposition(当前=${g};合法值:${[...e].join("、")})`);continue}"fixed"!==g||a||b.push(`检测器 ${f.id} 声明 fixerDisposition='fixed' 但无任何 FixerEntry 锚定它(声明与事实不符)`),"fixed"!==g&&(a&&b.push(`检测器 ${f.id} 声明 fixerDisposition='${g}' 但已有修复器锚定——声明与事实不符(应改为 'fixed' 或移除多余锚定)`),f.fixerDispositionReason?.trim()||b.push(`检测器 ${f.id} 声明 fixerDisposition='${g}' 但未给出理由(exempt/manual 必须书面说明为何不需要修复器)`))}return b}({detectors:y,fixers:b,pending:f})),a.push(...function(a){let b=[],c=new Set(a.pending);c.size!==a.pending.length&&b.push("PENDING_WRITING_TIME_DISPOSITION 存在重复 id(欠账清单须唯一)");let d=new Set(a.detectors.map(a=>a.id));for(let a of c)d.has(a)||b.push(`PENDING_WRITING_TIME_DISPOSITION 声明了未登记的检测器 ${a}(已改名或已删除,请同步移出欠账清单)`);for(let[c,e]of Object.entries(a.dispositions))d.has(c)||b.push(`写作期处置表声明了未登记的检测器 ${c}(已改名或已删除,请同步删除该条)`),"terminal-only"!==e.kind||e.reason.trim()||b.push(`检测器 ${c} 声明 terminal-only 但 reason 为空——「只能终检」必须书面写明理由,否则与沉默缺省无异`);for(let d of a.detectors){let e=a.dispositions[d.id];if(e){c.has(d.id)&&b.push(`检测器 ${d.id} 已声明写作期处置(${e.kind})却仍在欠账清单中——请从欠账清单移出`);continue}c.has(d.id)||b.push(`检测器 ${d.id} 既未声明 writingTimeDisposition 也未进欠账清单——新增检测器必须当场给出写作期处置(constraint / self-check / terminal-only+理由)`)}return b}({detectors:y,dispositions:g,pending:h})),a.length>0)throw Error(`检测器/修复器注册表一致性校验失败(${a.length} 项):
|
|
238
239
|
${a.map(a=>`- ${a}`).join("\n")}`)}},79227:(a,b,c)=>{c.d(b,{C:()=>f,previewGenerationBudgetForTemplate:()=>g});var d=c(46482),e=c(95734);function f(a){let b=Math.max(1,a.chapters.length),c=a.targetWords>0?Math.round(a.targetWords/b):1200,d=a.strategy,f=[],g=a.materialFileCount<4&&a.evidenceCount<6,h=Math.max(1,Math.min(b,(Number.isFinite(a.configuredChapterConcurrency)&&a.configuredChapterConcurrency>0?Math.floor(a.configuredChapterConcurrency):void 0)??b)),i=(0,e.Qf)(a.targetWords),j="fast"===d.mode?1:Math.max(1,b),{floorChars:k,ceilingChars:l}=c>=6e3?{floorChars:14e3,ceilingChars:4e4}:c>=3e3?{floorChars:11e3,ceilingChars:28e3}:{floorChars:8e3,ceilingChars:18e3},m=d.repairRoundBudget?d.repairRoundBudget:Math.max(2,Math.min(4,2+ +(a.targetWords>=2e4)+ +!!g)),n=Math.min(m*b,Math.max(12,2*b));return"strict"===d.mode&&f.push("strict:风险领域关键词命中(专项/安全/质量/验收/合同/合规等)"),a.targetWords>=4e4&&f.push("strict:目标篇幅超长(≥4 万字)"),g&&f.push("strict:资料稀疏(资料包文件 <4 且可用证据 <6 条)"),"fast"===d.mode&&f.push("fast:小文档(≤6000 字且 ≤4 章)全局审查降级为 35% 抽检"),"longform"===d.mode&&f.push("longform:长文档(≥3 万字或 ≥8 章)"),"balanced"===d.mode&&f.push("balanced:常规篇幅文档,标准审查深度"),f.push(`全章节并行生成(${h}/${b} 章同批),审查流水线 ${j} 路,全局 LLM 并发不设上限,每章证据预算 ${Math.round(k/1e3)}k-${Math.round(l/1e3)}k 字符,修复轮次预算每章 ${m} 轮(文档级总池 ${n} 轮,收敛判定优先)`),{strategy:d,chapterConcurrency:h,reviewConcurrency:j,llmConcurrency:i,evidenceFloorChars:k,evidenceCeilingChars:l,repairRoundBudget:m,repairPoolBudget:n,triggers:f}}function g(a){let b=Math.max(1,a.chapters.length),c=Math.max(0,Math.round(a.targetWords??0)),e=(0,d.JP)({template:a.template,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount}),g=f({template:a.template,chapters:a.chapters,targetWords:c,requirement:a.requirement,materialFileCount:a.materialFileCount,evidenceCount:a.evidenceCount,hasVeryLargeExplicitChapter:a.hasVeryLargeExplicitChapter??!1,configuredChapterConcurrency:a.configuredChapterConcurrency??0,strategy:e});return{mode:e.mode,enableGlobalReview:e.enableGlobalReview,globalReviewSamplingRate:e.globalReviewSamplingRate??1,repairRoundBudget:g.repairRoundBudget,chapterConcurrency:g.chapterConcurrency,reviewConcurrency:g.reviewConcurrency,evidenceFloorChars:g.evidenceFloorChars,evidenceCeilingChars:g.evidenceCeilingChars,targetWords:c,chapterCount:b,triggers:g.triggers}}},82437:(a,b,c)=>{c.d(b,{DK:()=>J,eA:()=>g,gu:()=>G,iC:()=>F,j4:()=>p,tI:()=>I,wc:()=>K});var d=c(10025),e=c(95294);let f=/补遗|补疑|答疑|澄清|question/i;function g(a){let b=String(a||"");return f.test(b)?96:/招标|投标须知|招标公告/.test(b)?90:/清单|bill|boq|xls/i.test(b)?80:/图纸|dwg|施工图|设计说明/i.test(b)?75:/企业|公司|管理手册/.test(b)?60:70}function h(a){let b=[...String(a||"").matchAll(/(20\d{2})[.\-年](\d{1,2})[.\-月](\d{1,2})/g)].map(a=>1e4*Number(a[1])+100*Number(a[2])+Number(a[3]));if(b.length>0)return Math.max(...b);let c=/(\d{1,2})\s*(?:招标)?(?:答疑|澄清|补遗|补疑)(?:文件|公告|书)?/u.exec(a)?.[1];return c?1e3+Number(c):0}let i=/^(?:子项名称|图名|图号|比例|制图|审核|版次)\s*[::]/u,j=/^(?:子项名称图名|图名图号|设计单位名称|制图人|审核人|比例尺)$/u,k=/^(?:【[^】]{0,16}】|—+|待定|暂无?|未提供|详见|如上|同前)$/u,l=/^(?:【[^】]{0,24}】|—+|[待暂](?:定|补充|确认|核实|无|缺)|不详|未知|不适用|未在资料(?:中|里)?(?:明确)?(?:体现|给出|提供|说明|标注|载明|列明|查到|查得)|(?:资料|文件|图纸|清单)(?:中|里)?(?:均|也)?未(?:明确|体现|给出|提供|说明|标注|载明|列明|涉及|提及|识别|获取|解析|提取|查到)|未(?:明确|体现|提供|涉及|提及|给出|标注|说明|描述|予明确|识别|获取|解析|提取|匹配|查到)|系统暂未(?:从知识库确认)?|无法确认|无相关(?:资料|信息|内容|记录)|无此(?:项|内容|信息)|以(?:图纸|清单|资料|招标文件)为准|详见|如上|同前|同上)$/u,m=/^(?:见|详见|参见|按|依据)\s*(?:招标文件|招标公告|投标须知|图纸|设计|清单|规范|合同)/u,n=/暂列金额|暂估价|预留金|投标报价|报价明细|综合单价|单价|合价|税率|增值税|利润|结算/u,o=/^(?:分部小计|本页小计|小计|合计|总计|综合单价|措施项目费|规费|税金|按实|暂估|暂列金额)$/u;function p(a,b={}){let c=String(a||"").trim();return c?c.length>260?"超长(疑为段落而非值)":(c.match(/([\u4e00-\u9fa5])\1/gu)||[]).length>=2?"OCR 复写噪声":!b.allowProse&&c.length>40&&/[。;!?]$/u.test(c)?"段落而非值":i.test(c)&&c.length<=14||j.test(c)?"图签/图名串格":k.test(c)?"占位/未提供值":!function(a){let b=a.replace(/^【/u,"").replace(/】$/u,"").replace(/[\s。;;,,、..]+$/u,"").trim();return b.length>0&&b.length<=24&&l.test(b)}(c)?m.test(c)?"指向值(非值本身)":o.test(c)?"清单内部口径词":(c.match(/[\u4e00-\u9fa5]{2,8}\s*[::]/gu)||[]).length>=3?"表格串格(多字段粘连)":!1!==b.includePoolNoise&&(0,e.MO)(c)?"池噪声(图签/坐标/残片/粘连)":c.length>=12&&/(?:以及|和|与|或|的|了|在|为|按|由|及)$/u.test(c)?"截断值":void 0:"缺席声明(资料未给出该信息)":"空值"}function q(a){let b=String(a||"").trim(),c=/^(?<main>[^((]{1,40})[((](?<inner>[\s\S]{12,})[))]\s*$/u.exec(b);if(!c?.groups)return{value:b};let d=c.groups.inner;return/;|;|余同|标注:|图纸标注|以下同/u.test(d)||d.length>30?{value:c.groups.main.trim(),note:d.slice(0,80)}:{value:b}}let r=RegExp(`${d.yJ}\\s*[::]?`,"u"),s=new Map;function t(a){let b=String(a||"").trim();if(!b)return{value:"",shape:"text"};let c=r.exec(b),d=c?b.slice(c.index+c[0].length):b,e=[{shape:"date",re:/\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日/u},{shape:"money",re:/\d+(?:\.\d+)?\s*(?:万元|亿元|元)/u},{shape:"standard",re:/(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC)\s*\/?\s*T?\s*[\d.]+/iu},{shape:"spec",re:/(?:C\d{2,3}|HRB\d{3,4}|HPB\d{3}|DN\s*\d+|Φ\s*\d+|φ\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|kV|MPa|kPa|kW|W|A|V))/u},{shape:"measure",re:/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|日历天|天|%)/u}].filter(a=>a.re.test(d));if(0===e.length)return{value:b.slice(0,80),shape:"text"};let f=e[0];return{value:function(a,b){let c=String(a||"").trim(),d={date:/\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日/gu,money:/\d+(?:\.\d+)?\s*(?:万元|亿元|元)/gu,standard:/(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC)\s*\/?\s*T?\s*[\d.]+(?:-\d{2,4})?/giu,spec:/(?:C\d{2,3}|HRB\d{3,4}|HPB\d{3}|DN\s*\d+|Φ\s*\d+|φ\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|kV|MPa|kPa|kW|W|A|V))/gu,measure:/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|日历天|天|%)/gu};if("text"===b)return c.slice(0,80);let e=(d[b]||d.measure).source,f=[...c.matchAll(function(a){let b=s.get(a);if(b)return b.lastIndex=0,b;let c=RegExp(a,"gu");return s.set(a,c),c}(e))].map(a=>a[0].trim());if(0===f.length)return c.slice(0,80);let g=r.exec(c);if(g){let a=c.slice(g.index+g[0].length),b=RegExp(e,"u").exec(a);if(b)return b[0].trim()}return f[f.length-1]}(b,f.shape),shape:f.shape}}function u(a){let b=String(a||"").trim(),c=/[\u4e00-\u9fa5]([A-Za-z][A-Za-z0-9]{5,})/u.exec(b),d=c?b.slice(0,(c.index??0)+1):b;return d=d.replace(/([\u4e00-\u9fa5])\d{3,}$/u,"$1"),/省|市|区|县|路|街|交口|镇|乡/u.test(d)&&(d=d.replace(/([\u4e00-\u9fa5])[\d\s]{3,}(?=[\u4e00-\u9fa5]|$)/gu,"$1")),d}function v(a,b){let c=String(b||"").trim(),d=String(a||"").trim(),e=(c&&c===d?c:`${c}${d}`).replace(/\s+/gu,"");return e?/开工日期|开工时间|startDate/i.test(e)?"开工日期":/竣工日期|完工日期|endDate/i.test(e)?"竣工日期":/质量标准|质量目标|quality/i.test(e)?"质量标准":/建设规模|建筑面积|规模|scale/i.test(e)?"建设规模":/建设地点|工程地点|location/i.test(e)?"建设地点":/招标人|建设单位|owner/i.test(e)?"招标人":/暂列金额|暂列金/u.test(e)?"暂列金额":/估算|限价|控制价|投资|金额|amount/i.test(e)?"合同金额":/项目名称|工程名称|projectName/i.test(e)?"项目名称":/项目编号|工程编号|projectCode/i.test(e)?"项目编号":/工期|日历天|duration|schedule/i.test(e)&&!/节点|阶段|考核|开工|竣工/i.test(e)?"计划工期":e.slice(0,40):""}function w(a){let b=String(a||"").trim();b=b.replace(/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,(a,b,c,d)=>`${b}年${Number(c)}月${Number(d)}日`);let c=/^([\d,]+(?:\.\d+)?)\s*(亿元|万元|元)$/u.exec(b);if(c){let a=Number(c[1].replace(/,/gu,""))*("亿元"===c[2]?1e8:"万元"===c[2]?1e4:1);Number.isFinite(a)&&(b=`${a.toFixed(2)}元`)}return b}function x(a){let b=String(a||"").replace(/^\/+/u,""),c=b.indexOf("/");return c>0?b.slice(0,c):b}let y=/(?:计划|方案|措施|制度|职责|体系|程序|规划|组织|安排|要求|标准|办法|流程|台账|记录)$/u,z=/^[A-Za-z]{1,6}\s?[-/]?\s?\d{1,6}(?:\.\d+)?$/u,A=/(?:规格|型号|等级|管径|直径|厚度|强度等级|牌号|标号|尺寸)$/u,B=["参数","要求","标准","数据","指标","信息"],C=/(?:工期|节点|日期|期限|周期|时长|时间|时刻|进度计划)$/u,D=/\d{4}\s*年\s*\d{1,2}\s*月|\d+\s*个?\s*(?:日历天|天|个月|月|周|年|小时|工作日)/u,E=/(?:工期|节点|阶段|开工|竣工|完工|完成|封顶|验收|日历天|工作日|月份|年度|季度)/u;function F(a){let b=a.overrides||[],c=[],e=new Map;a.facts.forEach((b,d)=>{let f=String(b.value??"").trim();if(!f)return;let i=v(String(b.key||""),b.label);if(!i)return;let j=String(b.sourceFile||b.source||""),k=q(f),l=String(b.sourceFile||b.source||""),m=a.subjectOf?a.subjectOf({key:b.key,label:b.label,sourceFile:l}):"",n=/澄清|变更|补疑|补遗|修改为|调整为|更正/u.test(k.value)&&!/^(?:见|详见|参见)/u.test(k.value),o=(a,b)=>{let c=e.get(a)||[];c.push({subject:m,attribute:a,value:b,source:l,priority:g(l),order:1e3*h(l)+d,clarified:n}),e.set(a,c)},r=function(a,b,c){let d=String(c||""),e=[],f=v(a,b),g=d.split(/[::]/u),h=/(?:变更|澄清|修改|调整|更正|修正|如下|其中|例如|即|注|说明)$|为$/u;for(let a=0;a+1<g.length;a+=1){let b=/([\u4e00-\u9fa5]{2,10})$/u.exec(g[a]||"")?.[1];if(!b||h.test(b))continue;let c=(g[a+1]||"").trim().slice(0,40);if(!/\d/u.test(c))continue;let d=v(b,b);d&&d!==f&&e.push({attribute:d,value:c})}return e}(String(b.key||""),b.label,k.value);for(let a of r){let b=t(q(a.value).value).value;p(b)||o(a.attribute,b)}let s=p(k.value);if(s)return void c.push({attribute:i,value:k.value.slice(0,60),source:j,reason:s});let w=u(t(k.value).value);if(r.some(a=>a.value.includes(w)||w.includes(a.value.replace(/[((].*$/u,"").trim())))return;if(p(w)){let a=u(k.value).slice(0,80);if(!/省|市|区|县|路|街|交口/u.test(a)||p(a))return;o(i,a);return}let x=function(a,b){let c=String(a||"").trim(),d=String(b||"").trim();if(!c||!d)return;if(y.test(c)&&z.test(d))return`值-标签形态不相容:文本型属性「${c}」取了裸型号值「${d}」`;if(C.test(c)&&!D.test(d)&&!E.test(d))return`值-标签形态不相容:时间型属性「${c}」取了无日期/时长的值「${d.slice(0,40)}」`;let e=B.reduce((a,b)=>a+(c.split(b).length-1),0);return c.length>=8&&e>=2?`值-标签形态不相容:属性名「${c}」为多标签拼接,不作为口径属性`:A.test(c)&&d.length>30&&/[,。;,;]/u.test(d)?`值-标签形态不相容:规格型属性「${c}」取了长句值`:void 0}(i,w);if(x)return void c.push({attribute:i,value:w.slice(0,60),source:j,reason:x});o(i,w)});let i=new Set((a.labeledValues||[]).map(a=>v(a.attribute,a.attribute)).filter(Boolean));for(let b of a.labeledValues||[]){let a=v(b.attribute,b.attribute);if(!a)continue;let c=q(b.value);if(p(c.value,{allowProse:!0,includePoolNoise:!1}))continue;let d=e.get(a)||[];d.push({subject:"",attribute:a,value:t(c.value).value,source:b.source,priority:b.supersedesPriorMaterials?99:g(b.source),order:1e3*h(b.source)+500,clarified:b.clarified??!0}),e.set(a,d)}for(let[a,b]of e){if(b.length<2||b.some(a=>!a.source.includes("/")))continue;let d=new Map;for(let a of b){let b=x(a.source);d.set(b,(d.get(b)||0)+1)}if(d.size<=1)continue;let f=[...d.entries()].sort((a,b)=>b[1]-a[1]||a[0].localeCompare(b[0],"zh-Hans-CN"))[0][0];for(let d of b)x(d.source)!==f&&c.push({attribute:a,value:d.value.slice(0,60),source:d.source,reason:`跨资料包(本项目资料包:${f})`});e.set(a,b.filter(a=>x(a.source)===f))}let j=[];for(let[a,c]of e){let e=function(a,b){if(0===a.length)return;let c=new Set,e=[];for(let d of b){if("override"!==d.kind||!a.some(a=>a.value.includes(d.superseded))||(c.add(d.superseded),a.some(a=>a.value===d.effective)||e.some(a=>a.value===d.effective)))continue;let b=d.evidence[0]?.source||"";e.push({subject:a[0].subject,attribute:a[0].attribute,value:d.effective,source:b,priority:g(b),order:1e3*h(b)+900,clarified:!0})}let i=[...a.filter(a=>![...c].some(b=>a.value.includes(b))),...e];if(0===i.length&&(i=[...a]),1===i.length)return{winner:i[0],rule:"R1",superseded:[...c]};let j=/(?:路|街|道|巷|号|交口|北侧|南侧|东侧|西侧|经开区|开发区|镇|村)/u,k=i.filter(a=>j.test(a.value)&&/省|市|区|县/u.test(a.value));if(k.length>0&&k.length<i.length&&(i=k),1===i.length)return{winner:i[0],rule:"R1.5",superseded:[...c]};let l=new Set(e),m=i.filter(a=>!l.has(a)&&(!!a.clarified||f.test(a.source)&&r.test(a.value)));if(m.length>0&&m.length<i.filter(a=>!l.has(a)).length&&(i=[...m,...i.filter(a=>l.has(a))]),1===i.length)return{winner:i[0],rule:"R2.5",superseded:[...c]};let n=Math.max(...i.map(a=>a.priority)),o=i.filter(a=>a.priority===n);if(1===o.length)return{winner:o[0],rule:"R2",superseded:[...c]};let p=Math.max(...o.map(a=>h(a.source)));if(p>0){let a=o.filter(a=>h(a.source)===p);if(1===a.length)return{winner:a[0],rule:"R3",superseded:[...c]};o=a}let q=a=>{let b=/(\d{1,2}(?:\.\d{1,2}){1,3})/u.exec(a.source+a.value);return b?Number(b[1].split(".").reduce((a,b)=>a+Number(b),0)):0};if(1===new Set(o.map(a=>a.source)).size){let a=Math.max(...o.map(q));if(a>0){let b=o.filter(b=>q(b)===a);if(1===b.length)return{winner:b[0],rule:"R4",superseded:[...c]};o=b}}let s=/(?:省|市|区|县|镇|路|街|道|巷|号|交口|北侧|南侧|东侧|西侧|经开区|开发区)/u,t=o.filter(a=>s.test(a.value));if(t.length>=1&&t.length<o.length)return{winner:t.reduce((a,b)=>b.value.length>a.value.length?b:a,t[0]),rule:"R5",superseded:[...c]};let u=(0,d.dm)(o[0].value);if("measure"===u||"spec"===u){let a=o.filter(a=>80>=g(a.source));if(1===a.length)return{winner:a[0],rule:"R5",superseded:[...c]};a.length>1&&(o=a)}if("money"===u){let a=o.filter(a=>g(a.source)>=90);if(1===a.length)return{winner:a[0],rule:"R5",superseded:[...c]};a.length>1&&(o=a)}let v=new Map;for(let a of o){let b=w(a.value);v.set(b,(v.get(b)||0)+1)}let x=Math.max(...v.values()),y=o.filter(a=>v.get(w(a.value))===x);return 1===y.length?{winner:y[0],rule:"R6",superseded:[...c]}:{winner:function(a,b){return[...a].sort((a,c)=>a.clarified!==c.clarified?a.clarified?-1:1:h(a.source)!==h(c.source)?h(c.source)-h(a.source):a.priority!==c.priority?c.priority-a.priority:/standard/u.test(b)?a.value.localeCompare(c.value,"zh-Hans-CN"):a.value.length!==c.value.length?c.value.length-a.value.length:a.value.localeCompare(c.value,"zh-Hans-CN"))[0]}(o=y,u),rule:"R7",superseded:[...c]}}(c,b);if(!e)continue;let k=(0,d.dm)(e.winner.value),l=i.has(a)&&["measure","money","date","standard"].includes(k)?c.map(a=>a.value).filter(a=>a!==e.winner.value):[],m=function(a,b){let c=new Map;for(let d of b)"override"===d.kind&&a.some(a=>a.value.includes(d.superseded))&&c.set(d.superseded,d.effective);return c}(c,b),o=e.superseded.filter(b=>i.has(a)||m.get(b)===e.winner.value),p=i.has(a)?b.filter(a=>"override"===a.kind&&a.superseded!==e.winner.value&&w(a.effective)===w(e.winner.value)&&(0,d.dm)(a.superseded)===k).map(a=>a.superseded):[];j.push({subject:e.winner.subject,attribute:a,value:e.winner.value,rule:e.rule,evidence:[{source:e.winner.source,snippet:e.winner.value.slice(0,120)}],superseded:[...new Set([...o.filter(a=>a!==e.winner.value),...p,...l])],caliber:i.has(a)&&!n.test(a),candidates:c})}return j.sort((a,b)=>a.attribute.localeCompare(b.attribute,"zh-Hans-CN")),{resolved:j,noiseRejected:c}}function G(a){let b=a.resolved.filter(a=>a.superseded.length>0),c=a.resolved.filter(a=>a.caliber&&0===a.superseded.length),d=[];return b.length>0&&d.push(["【现行口径(真值层裁决,硬约束)】下列属性已按资料优先级与变更链裁决出**唯一现行值**;全文(正文、表格、信息表、进度计划、节点)必须一致使用,被取代值仅在引用变更过程时可出现(如「招标文件原为 X,经答疑澄清变更为 Y」),不得单独陈述现状:",...b.map(a=>`- ${a.attribute}:现行为「${a.value}」;被取代(不得作为现行口径):${a.superseded.join("、")}`)].join("\n")),c.length>0&&d.push(["【项目级口径(必须在正文出现)】下列口径是本项目的唯一现行值,必须在正文相应位置(工程概况/编制说明/工期与进度等)**逐字写出**(数值、单位、日期形态均不得改写或省略):",...c.map(a=>`- ${a.attribute}:${a.value}`)].join("\n")),d.join("\n\n")}let H=new Set(["measure","money","date","standard","spec"]);function I(a,b){let c=[],e=a,f=()=>e.replace(/\s+/gu,"");for(let a of b){if(!a.caliber)continue;let b=String(a.attribute||"").trim(),g=String(a.value||"").trim();if(!b||!g||!H.has((0,d.dm)(g))||f().includes(g.replace(/\s+/gu,"")))continue;let h=`${b}为${g}。`,i=e.indexOf(b);if(i>=0){let a=i+b.length;for(;a<e.length&&!/[。;;\n]/u.test(e[a]);)a+=1;if(a>=e.length||e.slice(i,a).includes(g))continue;e=`${e.slice(0,a+1)}${h}${e.slice(a+1)}`,c.push({attribute:b,value:g});continue}let j=/^#{2,3}\s*[^\n]*?(?:概况|概述|编制说明)[^\n]*$/mu.exec(e);if(!j)continue;let k=j.index+j[0].length,l=/^#{2,3}\s/mu.exec(e.slice(k)),m=l?k+l.index:e.length,n=e.lastIndexOf("\n",m-1)+1;e.slice(k,m).includes(g)||(e=`${e.slice(0,n)}${h}
|
|
239
240
|
${e.slice(n)}`,c.push({attribute:b,value:g}))}return{markdown:e,inserted:c}}function J(a){let b=[],c=new Map;for(let d of a.resolved){let a=String(d.attribute||"").trim(),e=String(d.value||"").trim();if(!a){b.push("条目缺属性名");continue}if(!e){b.push(`「${a}」生效值为空(空值不得进账本)`);continue}let f=c.get(a);void 0!==f?b.push(`「${a}」产出多条生效值(${f} / ${e})——裁决链应保证唯一值`):c.set(a,e);let g=e.replace(/\s+/gu,"");d.superseded.some(a=>String(a).replace(/\s+/gu,"")===g)&&b.push(`「${a}」生效值「${e}」同时出现在被取代值列表——现行与作废不得同值`),d.caliber&&0===d.evidence.length&&b.push(`项目级口径「${a}」缺证据来源(不可溯源的口径不得进账本)`)}return b}function K(a){return a.resolved.map(a=>{let b=`${a.attribute} = ${a.value}(裁决 ${a.rule};依据 ${a.evidence[0]?.source||"—"})`;return a.superseded.length>0?`${b};被取代:${a.superseded.join("、")}`:b})}},85016:(a,b,c)=>{c.d(b,{D$:()=>g,NR:()=>l,WT:()=>k,fc:()=>m});var d=c(37047),e=c(22157);let f=[{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}],g=/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/gu,h=/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/u,i=/^\d+(?:\.\d+)*\s+\S+/u;function j(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}async function k(a){let b=[],c=[...new Set(a.match(g)||[])];c.length>0&&b.push({level:"error",severity:"blocker",category:"format",owner:"system",repairability:"llm_repairable",message:`正式正文仍包含后台内部术语“${c.join("”“")}”,需要按上下文语义改写为正式术语`,suggestion:"请结合语境改写:“拆除工程工作包”→“拆除工程”,“按工作包逐项说明”→“按专业工程逐项说明”;禁止出现生成系统后台概念。",provenance:{detectorId:"internal-terminology-anchor",fingerprint:(0,e.c6)(a)}});let h=a.split(/\r?\n/u).map(a=>a.trim()).filter(a=>!/^#{1,6}\s/u.test(a)&&!/^\s*\|/u.test(a)&&!(i.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 k=(0,d.VN)(),[l,m]=await Promise.all([k.embedDocuments(h),k.embedDocuments(f.map(a=>a.anchor))]),n=[];for(let a=0;a<h.length;a+=1){let b=l[a];if(!b||0===b.length)continue;let c=h[a];if(f.some(a=>a.required.test(c))&&(Math.max(...m.map(a=>j(b,a)))>=.62&&n.push(c.slice(0,24)),n.length>=6))break}return n.length>0&&b.push({level:"error",severity:"blocker",category:"format",owner:"system",repairability:"llm_repairable",message:`正式正文疑似包含后台内部话术(语义锚点命中 ${n.length} 处):${n.map(a=>`“${a}…”`).join("、")}`,suggestion:"将内部话术(已确认资料/事实卡/工作包等生成系统概念)改写为面向评标人的正式表述,仅陈述项目事实与施工内容。",provenance:{detectorId:"internal-terminology-anchor",fingerprint:(0,e.c6)(a)}}),b}async function l(a){let b=a.split(/\r?\n/u),c=a=>{let b=a.trim();return!!(/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b))||i.test(b)&&b.length<=40&&!/[。!?!?;;,,::]/.test(b)},e=[];b.forEach((a,b)=>{if(c(a))return;let d=a.split(/(?<=[。!?!?;;])/u).map(a=>a.trim()).filter(a=>h.test(a)||a.length>=8&&a.length<=80&&f.some(b=>b.required.test(a)));d.length>0&&e.push({index:b,sentences:d})});let g=e.flatMap(a=>a.sentences);if(0===g.length)return a;let k=g.filter(a=>h.test(a)),l=g.filter(a=>!h.test(a)).slice(0,200),m=new Set(k);if(l.length>0){let a=(0,d.VN)(),[b,c]=await Promise.all([a.embedDocuments(l),a.embedDocuments(f.map(a=>a.anchor))]);l.forEach((a,d)=>{let e=b[d];e&&0!==e.length&&Math.max(...c.map(a=>j(e,a)))>=.62&&m.add(a)})}return 0===m.size?a:b.map(a=>{if(c(a))return a;let b=a;for(let a of m)b.includes(a)&&(b=b.split(a).join(""));return b}).join("\n")}function m(a){let b=0;return{markdown:a.split(/\r?\n/u).map(a=>{if(!a.trim()||!h.test(a)&&!a.includes("全文统一口径"))return a;let c=a.replace(/(职责|责任|分工|任务|措施|要求|管理|控制|工作|专项|标准|管控|验收|培训|教育|巡检|检查)落位/gu,"$1落实").replace(/(作业面|平面|现场|位置|点位|布局|空间|场地|工序|区域|临时设施|堆场|通道|道路|设备|设施|材料|构件|管线|照明|灯具|站房|楼层|部位)落位/gu,"$1布置").replace(/落位/gu,"落实").replace(/(\d+\s*人)峰值口径/gu,"$1上限").replace(/峰值口径/gu,"上限").replace(/控制口径/gu,"控制基准").replace(/数据口径/gu,"统计口径").replace(/全文统一口径/gu,"全篇取值一致");return c===a?a:(b+=1,c)}).join("\n"),fixedCount:b}}},87635:(a,b,c)=>{c.d(b,{Xr:()=>r,h:()=>t,jO:()=>s,ml:()=>k,qq:()=>i,xs:()=>h});var d=c(1218),e=c(51190),f=c(22157),g=c(13145);let h=["项目名称 项目编号 招标人 项目概况与招标范围 建设地点 建设规模 计划工期 质量标准 合同估算价","计划工期 合同工期 总工期 日历天","合同估算价 合同估算价格 投资估算 最高投标限价 招标控制价","质量标准 质量目标 合格","建设地点 建设规模 招标范围"];function i(a){let b=(0,d.de)(a),c=0;return/项目名称|工程名称|招标项目名称|项目编号|招标项目编号|招标人|建设单位|发包人/u.test(b)&&(c+=4),/计划工期|合同工期|总工期|\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(b)&&(c+=6),/合同估算价|投资估算|最高投标限价|招标控制价|\d+(?:\.\d+)?\s*(?:万元|元)/u.test(b)&&(c+=5),/质量标准|质量目标|合格|优良/u.test(b)&&(c+=4),/建设地点|建设规模|招标范围|项目概况与招标范围/u.test(b)&&(c+=4),/工程量|清单|图纸|设计说明|施工范围|施工内容|材料|设备|工艺|验收|复试|检测/u.test(b)&&(c+=3),/保证金账户|开户行|开户名称|收款账户|汇款|转账账户|电子交易系统|公共资源交易|开标时间|开标地点|评标委员会|评标办法/u.test(b)&&(c-=4),c}function j(a){return a.filter(a=>/项目名称|工程名称|项目编号|招标项目编号|招标人|建设单位|发包人|建设地点|建设规模|招标范围|计划工期|合同工期|周期要求|质量标准|合同估算|投资估算|最高投标限价|招标控制价/u.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`))}function k(a){return function(a){let b=/[))】」』”]+$/u.exec(a);if(!b)return a;let c=b[0],d=a.slice(0,a.length-c.length),e={")":"(",")":"(","】":"【","」":"「","』":"『","”":"“"},f=!1;for(let b of c){let c=e[b];if(!c||d.split(c).length-1>d.split(b).length-1)return a;f=!0}return f?d:a}((0,d.de)(a).replace(/PDF\s*第\s*\d+(?:\s*[-—至到~~]\s*\d+)?\s*页/giu,"相关资料").replace(/PDF\s*第(?![ \t]*[0-90-9])/giu,"").replace(/(\d)\s+(日)/gu,"$1$2").replace(/[。;;]$/u,"").trim())}let l=/(?:[\u4e00-\u9fa5]{2,6}(?:杯|奖)(?![励金惩罚项])|省优|市优|国优|优质工程|文明工地|标准化工地|确保[^。;;|,、,\n]{0,10}(?:杯|奖))/u;function m(a,b="",c=b){let g=function(a){let b=new Map;for(let c of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(c)||/^\|\s*:?-{3,}:?/u.test(c))continue;let a=c.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let e="序号"===a[0]&&a.length>=3?a[1]:a[0],f="序号"===a[0]&&a.length>=3?a[2]:a[1],g="序号"===a[0]&&a.length>=4?a[3]:a[2],h=e.replace(/\/|:|:/gu,"").trim();if(!/项目名称|工程名称|项目编号|招标项目编号|招标人|项目业主|建设单位|发包人|建设地点|建设规模|施工范围|招标范围|计划工期|合同工期|质量标准|合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(h))continue;let i=/计划工期|合同工期/u.test(h)?"schedule_requirement":/质量标准/u.test(h)?"quality_standard":/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价/u.test(h)?"project_investment_estimate":/招标人|项目业主|建设单位|发包人/u.test(h)?"owner":/建设地点/u.test(h)?"project_location":/项目编号|招标项目编号/u.test(h)?"project_code":void 0;!(!f||/内容|参数|资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(f))&&(0,d.R7)(i||"project_name",f)&&b.set(h,[k(f),k(g||"项目资料")||"项目资料"])}return b}(b),h=(0,e.mN)({facts:a,markdown:c}),i=a=>(0,d.De)(k((0,f.lG)(a||""))).replace(/\|/gu,"").replace(/\bCOL\d+\b/gu,"").replace(/\s{2,}/gu," ").trim(),j=(a,b)=>{let e=h.get(a);if(e){let b=i(e.value);if(b&&(0,d.R7)(a,b))return[b,e.source||"项目资料"]}let f=function(a,b){for(let[c,d]of a.entries())if(b.some(a=>a.test(c)))return d}(g,b);return f&&(0,d.R7)(a,f[0])?[f[0],f[1]||"项目资料"]:("project_name"===a?(()=>{let a=[/([\u4e00-\u9fa5A-Za-z0-9()()\-—_\s·]+?(?:施工总承包项目|一期项目|学生宿舍一期|学生宿舍项目))/u.exec(c)?.[1],/项目名称[::\s|]+([^|\n。;;]{6,80})/u.exec(c)?.[1]].map(i).filter(a=>a&&(0,d.R7)("project_name",a));return a[0]?[a[0],"项目资料"]:void 0})():void 0)||["",""]},n=[["项目名称",...j("project_name",[/项目名称|工程名称|project_name/u])],["项目编号",...j("project_code",[/项目编号|招标项目编号|project_code/u])],["招标人",...j("owner",[/招标人|项目业主|建设单位|发包人|owner/u])],["建设地点",...j("project_location",[/建设地点|project_location/u])],["建设规模",...j("project_scale",[/建设规模|project_scale/u])],["计划工期",...j("schedule_requirement",[/计划工期|合同工期|周期要求|schedule_requirement/u])],["质量标准",...j("quality_standard",[/质量标准|quality_standard/u])],["合同估算价",...j("project_investment_estimate",[/合同估算|投资估算|最高投标限价|招标控制价|project_investment_estimate/u])]],o=n.find(([a])=>"质量标准"===a);if(o&&o[1]&&!l.test(o[1])){let b=function(a,b){let c=a.filter(a=>/创优|优质优价|奖项|奖惩|award/u.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`));if(c.some(a=>{let b=k((0,f.lG)(a.value||""));return!!b&&/^(?:无|否|不设|未设|无创优|无奖项|不作|不要求|不设创优)$/u.test(b.trim())}))return;let d=[];for(let a of c)d.push(k((0,f.lG)(a.value||"")));for(let a of(d.push(b),d)){let b=/(?:确保|争创|力争|确保获得)[^。;;|,、,\n]{0,12}(?:杯|奖|优质工程)/u.exec(a);if(!b)continue;let c=b[0].trim();if(c.length>=5&&c.length<=24)return c}}(a,c);b&&!o[1].includes(b)&&(o[1]=`${o[1]},${b}`)}return n.filter(([,a])=>!!a).map(([a,b,c])=>[a,b,c||"项目资料"])}function n(a,b="",c=b){return["**项目基本信息表**","","| 信息项 | 内容 |","|---|---|",...m(a,b,c).map(a=>`| ${a[0]} | ${a[1]} |`)].join("\n")}function o(a,b="",c=b){return["**项目基本信息**","",...m(a,b,c).map(a=>`- ${a[0]}:${a[1]}`)].join("\n")}let p=[/^项目名称$/u,/^工程名称$/u,/^项目编号$/u,/^招标项目编号$/u,/^招标人$/u,/^项目业主$/u,/^建设单位$/u,/^发包人$/u,/^建设地点$/u,/^实施地点$/u,/^建设规模$/u,/^工程规模$/u,/^计划工期$/u,/^合同工期$/u,/^总工期$/u,/^质量标准$/u,/^质量目标$/u,/^合同估算价$/u,/^投资估算$/u,/^最高投标限价$/u,/^招标控制价$/u];function q(a){return p.some(b=>b.test(a))}function r(a){let b=a.replace(/\r?\n/gu,"\n").split("\n"),c=[],d=!1,e=a=>(0,g.Mp)(a).map(a=>a.replace(/\*\*/gu,"").trim()),f=a=>{let b=a.slice(2).map(e).filter(a=>a.length>=2).map(a=>a[0]||""),c=b.filter(q).length;return c>=3&&c>=Math.ceil(.45*b.length)};for(let a=0;a<b.length;){let e=b[a]||"",h=b[a+1]||"";if(/(?:\*\*[^\u000A]*项目基本信息表[^\u000A]*\*\*|####\s+[^\u000A]*项目基本信息表[^\u000A]*|###\s+[^\u000A]*项目基本信息表[^\u000A]*)/u.test(e)){let f=[e];for(a+=1;a<b.length&&!((0,g.VS)(b[a]||"")&&(0,g.vh)(b[a+1]||""))&&""===(b[a]||"").trim();)f.push(b[a]||""),a+=1;let h=!1;if(a<b.length&&(0,g.VS)(b[a]||"")&&(0,g.vh)(b[a+1]||""))for(h=!0,f.push(b[a]||"",b[a+1]||""),a+=2;a<b.length&&(0,g.VS)(b[a]||"");)f.push(b[a]||""),a+=1;let i=h&&d;h&&(d=!0),i||c.push(...f);continue}if(/^###\s+(?:\d+\.\d+\s+)?(?:项目基本信息|工程概况|项目概况)\s*$/u.test(e)){let h=[e];for(a+=1;a<b.length&&!((0,g.VS)(b[a]||"")&&(0,g.vh)(b[a+1]||""))&&!/^###\s+/u.test(b[a]||"");)h.push(b[a]||""),a+=1;if(a<b.length&&(0,g.VS)(b[a]||"")&&(0,g.vh)(b[a+1]||"")){let i=[b[a]||"",b[a+1]||""];for(a+=2;a<b.length&&(0,g.VS)(b[a]||"");)i.push(b[a]||""),a+=1;if(f(i)){if(d){let a=h.filter(a=>a.trim()&&!/^###\s+/u.test(a));a.length&&c.push(e,...a)}else d=!0,c.push(...h,...i);continue}c.push(...h,...i);continue}c.push(...h);continue}if((0,g.VS)(e)&&(0,g.vh)(h)){let i=[e,h];for(a+=2;a<b.length&&(0,g.VS)(b[a]||"");)i.push(b[a]||""),a+=1;if(f(i)){d||(d=!0,c.push(...i));continue}c.push(...i);continue}c.push(e),a+=1}return c.join("\n").replace(/\n{3,}/gu,"\n\n").replace(/\n{1,2}\|\s*信息项\s*\|\s*内容\s*\|\s*\n+(?:该小节围绕[^\n]*\n+)+\|\s*:?-{3,}:?\s*\|\s*:?-{3,}:?\s*\|\s*/gu,"\n\n")}function s(a,b,c){let d=c?.bodyTableForbidden===!0;if(a=((a,b)=>{let c=a.split("\n"),d=[];for(let a=0;a<c.length;a+=1){let e=c[a]||"",f=/^(#{3,5})\s+(.+)$/u.exec(e.trim()),g=f?.[2]?.replace(/^\d+(?:\.\d+)*\s+/u,"").trim()||"";if(f&&b.some(a=>a.test(g))){for(a+=1;a<c.length&&!/^#{2,5}\s+/u.test((c[a]||"").trim());)a+=1;a-=1;continue}d.push(e)}return d.join("\n")})(a,[/^工程概况一览表$/u,/^招标文件?评分.*响应索引表$/u,/^招标评分项响应索引表$/u]).replace(/\*\*(?:工程概况一览表|招标文件?评分.*响应索引表|招标评分项响应索引表)\*\*[\s\S]*?(?=\n{2,}#{2,5}\s+|\n{2,}(?:[^|\n#]|$)|$)/gu,"").replace(/\n{3,}/gu,"\n\n"),!/项目基本信息|项目概况|工程概况|招标范围/u.test(a))return r((0,g.yk)((0,g.j7)(a)));let e=/^(#{2,4}\s+(?:\d+\.\d+\s+)?[^\n]*(?:项目概况|工程概况|项目基本信息|招标范围)[^\n]*\n)/mu,f=/^(#{2,4}\s+(?:\d+\.\d+\s+)?[^\n]*(?:概况|基本信息)[^\n]*\n)/mu,h=()=>e.exec(a)??f.exec(a);if(!(/\|\s*信息项\s*\|\s*内容\s*\|/u.test(a)||d&&/\*\*\s*项目基本信息\s*\*\*/u.test(a))&&j(b).length>0){let c=h();if(c?.index||c?.index===0){let e=c.index+c[0].length,f=`${d?o(b,"",a):n(b,"",a)}
|
|
240
241
|
|