@customize-agent/server 4.36.0 → 4.36.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +20 -20
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/5928.js +5 -5
- 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 +21 -21
- package/.next/static/{P389JcEyBYvt5VDNJWy9j → AqGQutxgJRDyFjq0nNe96}/_buildManifest.js +1 -1
- package/.next/static/chunks/{289-35ac595388bbd018.js → 289-12dfcb3abec1c4b4.js} +1 -1
- package/.next/static/chunks/563-2b116a2500a97dba.js +1 -0
- package/.next/static/chunks/788-961761f5858f9189.js +1 -0
- package/.next/static/chunks/pages/documents-0e4216df99b9ec32.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-7b78e962e432d199.js +1 -0
- package/.next/static/chunks/pages/knowledge/manage-7535b873ab505397.js +1 -0
- package/.next/static/chunks/pages/prompt-2c242e541f2e77a9.js +1 -0
- package/.next/static/chunks/pages/system/logs-c5a8920c6506a7e8.js +1 -0
- package/package.json +1 -1
- package/.next/static/chunks/563-b12f299d34bb9e44.js +0 -1
- package/.next/static/chunks/788-3afeb069ed706ac0.js +0 -1
- package/.next/static/chunks/pages/documents-d796eb8dca722e02.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-8e25066889a85834.js +0 -1
- package/.next/static/chunks/pages/knowledge/manage-d0d0e0716e9d705b.js +0 -1
- package/.next/static/chunks/pages/prompt-5e1fb81efc656866.js +0 -1
- package/.next/static/chunks/pages/system/logs-6f45ef8d862759a2.js +0 -1
- /package/.next/static/{P389JcEyBYvt5VDNJWy9j → AqGQutxgJRDyFjq0nNe96}/_ssgManifest.js +0 -0
|
@@ -39,7 +39,7 @@ ${n.slice(0,2e3)}
|
|
|
39
39
|
若表格首行就是分隔线(缺表头行),必须依据表格数据内容补写一行业务表头(每列一个业务字段名),再紧跟分隔线;表头不得使用泛化字段名。
|
|
40
40
|
合计/小计/总计/累计行的空单元格一律填“—”(不适用语义);规格型号列中无规格型号的小型机具(蛙式打夯机等)可填“—”(机具无型号,合法);其余单元格一律不得为空、不得用占位符,不得凭空编造型号。
|
|
41
41
|
若表头第一列是表名(如“竣工清理与移交计划表”),把表名移到表格上方正文叙述中,表头从业务列名开始,并同步校正数据行列对齐。
|
|
42
|
-
保持表头结构与列数不变,不得新增、删除或合并小节;只修改缺陷表格相关局部文本。`,p=await b0({originalContent:b.content,repairRound:"table-repair",diagnostics:a.generationDiagnostics,apply:async()=>(function(a,b){let c=b3(a,b);if(!c)return{content:a,removed:0};let d=b4(c.split(/\r?\n/u));return d.removed>0?{content:a.replace(c,d.lines.join("\n")),removed:d.removed}:{content:a,removed:0}})((await a.withProgressHeartbeat(()=>(0,f.l8)({template:a.template,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:[g,h],promptTexts:o,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,f.XG)("table-repair",a.generationDiagnostics)}))).content||b.content,i).content,recheck:a=>[(0,D.NS)(a).filter(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(i)&&(!j||a.message.includes(j))).length]}),q=p.content;p.rolledBack||q===b.content||(a.finalChapterDrafts[d]={...b,content:l?(0,k.w_)(q,l):q},c+=1);let s=p.rolledBack||p.afterMetrics[0]>0,t=(0,r.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${e}`,status:s?"failed":"success",message:p.rolledBack?`表格数据修复已回滚:${b.title}(修复后缺陷增多,保留修复前正文)`:s?`表格数据修复未生效:${b.title}`:`表格数据修复完成:${b.title}`,details:[g]},{subtitle:"表格数据修复"});(0,r.fx)(a.progressStages,t),(0,r.fx)(a.finalGateRepairStages,t),a.emitProgress(a.finalChapterDrafts,a.progressStages)}}))}c>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle())}}let b6={type:"object",required:["conflicts"],properties:{conflicts:{type:"array",required:!0,maxItems:8,items:{type:"object",required:!0,properties:{kind:{type:"string",required:!0},itemA:{type:"string",required:!0},itemB:{type:"string",required:!0},description:{type:"string",required:!0},confidence:{type:"number",required:!0}}}}}};async function b7(a,b={}){let c=function(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(a){if(/^\|/u.test(a)&&/[\d]/u.test(a)){b.push(a.slice(0,160));continue}if(!/^#{1,6}\s/u.test(a))for(let c of a.split(/(?<=[。;;])/u)){let a=c.trim();a.length>=6&&a.length<=160&&/[\d]/u.test(a)&&b.push(a)}}}let c=[...new Set(b)],d=function(){let a=process.env.DOCUMENT_CONSISTENCY_SAMPLE_LIMIT;if(void 0===a||""===a)return 120;if("0"===a)return 200;let b=Number(a);return Number.isFinite(b)&&b>0?Math.floor(b):120}();return c.length<=d?c:c.map((a,b)=>({sentence:a,index:b,density:(a.match(/[\d,]+(?:\.\d+)?/gu)||[]).length})).sort((a,b)=>b.density-a.density||a.index-b.index).slice(0,d).sort((a,b)=>a.index-b.index).map(a=>a.sentence)}(a);if(c.length<2)return[];let d=await (0,bo.bb)([(0,z.y4)("你是施工组织设计数据一致性审查器。"),"给定全文含数值的句子/表格行清单(编号与内容),找出互相矛盾的数值对:\n- 同一口径必须一致而实际数值不同:劳动力峰值多处不一致、同一面积两处数字不同、总工期与分项工期冲突、同一节点日期两处不一致、表格合计与明细之和不等、人数\xd7工期与总工日不自洽;\n- 只报确定的矛盾(itemA 与 itemB 明确矛盾且置信度 ≥0.8),不得臆造;\n- 不同口径的数值不算矛盾:建筑面积 vs 占地面积、不同单位的表述;分阶段各期人数互比不算矛盾(各阶段人数不同是正常配置);\n- 但总量控制上限与分阶段峰值必须自洽:“高峰期总人数控制在X人/高峰总人数X人以内/控制在X人以下”与任何“高峰投入Y人/阶段高峰Y人/峰值Y人”(Y>X)构成矛盾,必须上报;\nitemA/itemB 必须是清单中真实出现的原文片段(逐字引用编号对应句子或表格行的关键片段,含数值)。\n只输出 JSON,不得输出其他内容。"].join("\n"),c.map((a,b)=>`${b+1}. ${a}`).join("\n"),{maxTokens:2500,temperature:0,signal:b.signal,diagnostics:b.diagnostics,schema:b6,taskKind:"structuredGeneration"});return d?.conflicts?.length?d.conflicts.filter(a=>"string"==typeof a.itemA&&"string"==typeof a.itemB&&a.itemA.trim()&&a.itemB.trim()).filter(a=>(a.confidence??0)>=.7).slice(0,6):[]}async function b8(a){a.decisionLockEntries.length>0&&(a.validationIssues=[...a.validationIssues,...(function(a,b){if(0===b.length)return[];let c=[],d=new Set;for(let e of a.split(/\r?\n/u)){let a=e.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\|/u.test(a)))for(let e of a.split(/(?<=[。;;])/u)){let a=e.trim();if(!(a.length<6)&&!(a.length>200))for(let e of b){let b=(0,q.rR)(e.id);if(!b||!b.relevance.test(a))continue;let f=new Set(e.values);for(let g of b.options){if(f.has(g.value)||!g.aliases.test(a)||(0,q.R3)(a,g.aliases))continue;let b=`${e.id} ${g.value} ${a}`;d.has(b)||(d.add(b),c.push({categoryId:e.id,label:e.label,lockedValues:e.values,offValue:g.value,sentence:a}))}}}}return c})(a.finalMarkdown,a.decisionLockEntries).map(a=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`语义矛盾(${a.label}):项目关键决策已锁定为「${a.lockedValues.join("、")}」,正文出现「${a.offValue}」冲突表述:“${a.sentence.slice(0,60)}”`,suggestion:"与已锁定决策冲突的表述必须统一为锁定值(或整句删除);禁止保留两套并存的技术路线/机械选型/供应方式。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"}))])}var b9=c(93675),ca=c(65667);async function cb(a){let b=await (0,D.KI)(a.finalChapterDrafts,a.factsModel,a.scopeConflicts);a.laborPeakAuthority=(0,F.yB)(a.blueprintData),a.greeningMaintenanceAuthority=(0,p.Dq)(a.factsModel);let c=await (0,ag.Mj)({chapters:a.finalChapterDrafts,model:a.tenderRequirements,similarity:a.requirementsSimilarity,signal:a.signal});if((b.fixedCount>0||c.fixedCount>0)&&(a.finalMarkdown=a.rebuildFinalMarkdown()),c.fixedCount>0){let b=(0,r.X5)({type:"validation",roleId:"scoring-requirement-fix",status:"success",message:`评分项响应确定性补写:${c.fixedCount} 条(${c.details.slice(0,3).join("、")})`,details:c.details.slice(3)},{subtitle:"交付前确定性清洗"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let d=(0,p.qG)(a.finalChapterDrafts);a.surfaceFixContext={laborPeakAuthority:a.laborPeakAuthority,phaseLaborAuthorities:(0,F.i2)(a.blueprintData),greeningMaintenanceAuthority:a.greeningMaintenanceAuthority,resourceBreakdownAuthority:(0,ca.re)(a.blueprintData),supportFormAuthority:"slope"===a.supportAuthority?"放坡":"pile"===a.supportAuthority?"钢板桩":void 0,decisionLockEntries:a.decisionLockEntries,plannedSectionTitles:[...new Set([...(a.effectiveChapters||[]).flatMap(a=>a.sections||[]),...a.template.chapters.flatMap(a=>a.sections||[]),...a.finalChapterDrafts.flatMap(a=>a.sections||[])].filter(Boolean))],basisRegulations:(0,p.VZ)(a.blueprintData?.basisRegulations,a.allEvidence.map(a=>String(a.content||"")).join("\n"),a.blueprintData?.project.location||"")};let e=new Map,f=(a,b)=>{b>0&&e.set(a,(e.get(a)??0)+b)};for(let b of a.finalChapterDrafts)for(let c of b9.aW){if(!c.stage5)continue;let d=(0,p.gD)(b=>c.fix(b,a.surfaceFixContext),b.content,2);d.fixedCount>0&&(b.content=d.markdown,f(c.key,d.fixedCount))}let g=a=>e.get(a)??0,h=g("table-line-residue"),i=g("finish-thickness"),j=g("labor-peak"),k=g("phase-labor-values"),l=g("resource-breakdown"),m=g("ambiguous-either-or"),n=g("self-undermining"),o=g("empty-scoring-response"),q=g("tender-meta-language"),s=g("duplicate-response-line"),t=g("atlas-reference"),u=g("meta-discourse"),v=g("formula-residue"),w=g("paragraph-opening-repeat"),x=g("truncated-sentence"),y=g("internal-table-row-dup"),A=g("greening-maintenance"),B=g("paragraph-tail-repeat"),C=g("slot-depth-value"),E=g("duplicate-basic-info-tables"),G=g("fallback-placeholder-rows"),H=g("heading-uncovered-items"),I=g("basis-regulation-region"),J=g("forbidden-configuration"),K=g("work-injury-insurance"),L=g("section-renumber");(d.removedCount>0||h>0||i>0||C>0||j>0||k>0||l>0||m>0||n>0||o>0||q>0||s>0||t>0||u>0||v>0||w>0||x>0||y>0||E>0||G>0||A>0||H>0||I>0||J>0||K>0||L>0||B>0)&&(a.finalMarkdown=a.rebuildFinalMarkdown(),(0,r.fx)(a.progressStages,(0,r.X5)({type:"validation",roleId:"deterministic-surface-fix",status:"success",message:`交付前确定性清洗:跨章表格去重 ${d.removedCount} 行、断行残片合并 ${h} 处、装饰层厚度修复 ${i} 处、埋深槽位错位删除 ${C} 处、劳动力峰值统一 ${j} 处、阶段劳动力统一 ${k} 处、资源数值统一 ${l} 处、两可表述归一 ${m} 处、段首机械重复剥离 ${w} 处、截断句残留收敛 ${x} 处、元话语声明清洗 ${u} 处、公式形态清洗 ${v} 处、自伤句式改写 ${n} 处、空响应句改写 ${o} 处、招标元语言清理 ${q} 处、重复响应行去重 ${s} 行、图集引用清洗 ${t} 处、表内重复行删除 ${y} 行、基础信息表合并 ${E} 组、兜底话术表行删除 ${G} 行、绿化养护期统一 ${A} 处、标题工程类别覆盖修正 ${H} 处、编制依据法规补写 ${I} 处、配置禁用词清洗 ${J} 处、工伤保险缴纳表述补写 ${K} 处、小节编号重放 ${L} 行、段内句级复读剥离 ${B} 处、叠词收敛`},{subtitle:"交付前确定性清洗"})));let M=await (0,D.Yb)(a.finalMarkdown,a.factsModel,a.scopeConflicts);M.fixedCount>0&&(a.finalMarkdown=M.markdown);let N=(0,p.fE)(a.finalMarkdown,{authorityIndex:a.blueprintData?(0,F.IV)(a.blueprintData):void 0,scheduleAuthority:a.scheduleAuthority,assemblyRateAuthority:a.assemblyRateAuthority,supportAuthority:a.supportAuthority});if(N.fixedCount>0&&(a.finalMarkdown=N.markdown),b.fixedCount>0||M.fixedCount>0||N.fixedCount>0){await a.recomputeFinalValidationBundle();let c=b.fixedCount+M.fixedCount+N.fixedCount,d=[...new Set([...b.details,...M.details,...N.details])];(0,r.fx)(a.progressStages,(0,r.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`交付前确定性清洗:${c} 处(${d.slice(0,4).join("、")})`,details:d.slice(4)},{subtitle:"交付前确定性清洗"}))}let O=(0,z.K7)(a.finalMarkdown);O!==a.finalMarkdown&&(a.finalMarkdown=O,await a.recomputeFinalValidationBundle())}async function cc(a,b){let c=[],d=[],e=[],f=await al(a);if(!f.degraded)for(let g of f.groups){let f=ao(g,{markdown:a,billFactLock:b.billFactLock});if("distinct-lock-entries"===f.verdict){d.push(`“${g.concept}”对应${f.entries}`);continue}if("no-anchor"===f.verdict){e.push(`“${g.concept}”:${[...new Set(g.values.map(a=>a.raw))].slice(0,3).join("、")}`);continue}for(let a of f.nonLock)for(let b of a.occurrences){let d=b.matchIndex+b.valueOffset;c.push({start:d,end:d+b.valueText.length,replacement:String(f.lockValue),detail:`参数口径“${a.concept}” ${a.raw}→${f.lockValue}${f.lockUnit}(以工程量清单条目「${f.entryName}」锁定口径为准)`,concept:g.concept})}}for(let d of(0,p.mB)(a,b.specAuthorityMap))d.replacement&&c.push({...d.replacement,location:d.location});if(0===c.length)return{replacements:[],falsePositiveGroups:d,noAnchorGroups:e,details:[]};let g=(0,p.gk)(a,c).markdown,h=new Set,i=await al(g);if(!i.degraded){let a=new Set(i.groups.map(a=>a.concept));for(let b of new Set(c.filter(a=>a.concept).map(a=>a.concept)))a.has(b)&&(c.forEach((a,c)=>{a.concept===b&&h.add(c)}),e.push(`“${b}”锁值替换复检未清零,已回滚交 LLM 定向修复`))}let j=new Map;for(let a of c)a.location&&j.set(a.location,(j.get(a.location)||0)+1);if(j.size>0){let a=(0,p.mB)(g,b.specAuthorityMap),d=new Map;for(let b of a)b.replacement&&d.set(b.location,(d.get(b.location)||0)+1);for(let[a,b]of j)(d.get(a)||0)>=b&&(c.forEach((b,c)=>{b.location===a&&h.add(c)}),e.push(`“${a}”规格替换复检未减数,已回滚交 LLM 定向修复`))}let k=[...new Set(c.filter((a,b)=>!h.has(b)).map(a=>a.detail))].slice(0,12);return{replacements:c.filter((a,b)=>!h.has(b)).map(a=>({start:a.start,end:a.end,replacement:a.replacement,detail:a.detail})),falsePositiveGroups:d,noAnchorGroups:e,details:k}}var cd=c(43378),ce=c(22213),cf=c(3063);let cg=/两可|按图纸|资料[^。;;\n]{0,14}(?:未明确|两可|冲突)|支护[^。;;\n]{0,10}并存/u;async function ch(a){let{chapterDraftsFinal:b,progressStages:c,emitProgress:d}=a,e=a.globalConsistencyIssues,f=0,g=0;for(let a of b){let b=a.content.split(/\r?\n/u).length,c=(0,p.lR)(a.content),d=(0,p.QM)(c.markdown),e=(0,p.Vc)(d.markdown);b-e.markdown.split(/\r?\n/u).length>0&&(f+=c.removedCount+d.removedCount,g+=e.removedCount,a.content=e.markdown)}if(f>0||g>0){let a=b.map(a=>a.content).join("\n\n"),h=[...(0,p.ub)(a),...(0,p.cl)(a)].map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/表格重复|段落完全重复/u.test(a)),...h])];let i=[f>0?`重复表格 ${f} 行`:"",g>0?`重复段落 ${g} 行`:""].filter(Boolean).join("、");(0,r.fx)(c,(0,r.X5)({type:"llm_review",roleId:"post-table-dedup",status:"success",message:`补表后确定性去重:${i}`},{subtitle:"表格执行率核验"})),d(b)}return e}async function ci(a){let{effectiveChapters:b,chapterDraftsFinal:c,template:d,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:i,progressStages:j,emitProgress:k,withProgressHeartbeat:l}=a,m=(0,cd.Xi)(b,c),n=!1;if(m.length>0)for(let a=0;a<1&&m.length>0;a+=1){(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${a+1} 轮(${m.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),k(c);let o=0,p=[],q=m.flatMap(a=>{let b=c.find(b=>b.title===a.chapterTitle||a.chapterTitle.includes(b.title)||b.title.includes(a.chapterTitle));return b?[{gap:a,draft:b}]:[]}),s=async a=>{let{gap:j,draft:k}=a,m=[...new Set(j.plans.map(a=>a.section).filter(Boolean))],n=m.length>0?k.evidence.filter(a=>{let b=a.sectionTitle;return!b||m.some(a=>b===a||b.includes(a)||a.includes(b))}):k.evidence,o={id:k.id,title:k.title,content:k.content,evidence:n.length?n:k.evidence,missingFacts:k.missingFacts||[],sections:k.sections},p=`计划表格缺失(计划 ${j.planned} 张,实际仅 ${j.actual} 张):${j.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;表格内项目特有数字、日期、工程量、规格必须来自项目资料或项目图谱,不得编造;人数、台班、进度时间等计划类数值必须原样引用蓝图权威锚点(劳动力峰值、工种构成、分阶段投入、机械台数、总工期节点),不得基于工程量或定额自行推算另设,不得留空、不得写“按需配置”等空话。`;return b0({originalContent:k.content,repairRound:"table-execution-repair",diagnostics:i,beforeMetrics:[Math.max(0,j.planned-j.actual)],apply:async()=>{let a=await l(()=>(0,f.X6)(i,`table-execution-repair:${k.id}`,()=>(0,f.l8)({template:d,chapter:o,issues:[p],promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:i,signal:h,patchGuard:(0,f.XG)("table-execution-repair",i),maxTokens:Math.min(12e3,Math.max(6e3,1200*j.plans.length))})));return a.content&&a.content!==k.content?a.content:k.content},recheck:a=>{let d=c.map(b=>b.id===k.id?{title:b.title,content:a,sections:b.sections}:b);return[(0,cd.Xi)(b,d).filter(a=>a.chapterTitle===k.title||a.chapterTitle===j.chapterTitle||k.title.includes(a.chapterTitle)||a.chapterTitle.includes(k.title)).reduce((a,b)=>a+Math.max(0,b.planned-b.actual),0)]}})},t=await Promise.allSettled(q.map(a=>s(a))),u=new Set;if(t.forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;p.push(`${q[b].gap.chapterTitle}:修复异常(${a.reason instanceof Error?a.reason.message:"未知错误"})`);return}let c=a.value,{gap:d,draft:e}=q[b];if(c.rolledBack)return void p.push(`${d.chapterTitle}:修复后计划表格缺口增多,已回滚本轮修改`);c.content&&c.content!==e.content&&!u.has(e.id)?(e.content=c.content,u.add(e.id),o+=1):u.has(e.id)||p.push(`${d.chapterTitle}:缺 ${d.plans.map(a=>a.title).join("、")}(${i?.llm.lastError||"补表 patch 未应用"})`)}),0===o){(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:"failed",message:`表格执行率修复第 ${a+1} 轮:补表 patch 未应用(${m.length} 个章节缺表)`,details:p},{subtitle:"表格执行率修复"})),k(c);break}n=!0,k(c),m=(0,cd.Xi)(b,c),(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:m.length>0?"failed":"success",message:m.length>0?`表格执行率修复第 ${a+1} 轮完成,仍有 ${m.length} 个章节缺表`:`表格执行率修复第 ${a+1} 轮完成`},{subtitle:"表格执行率修复"})),(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-review",status:m.length>0?"failed":"success",message:m.length>0?`表格执行率复检:仍有 ${m.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}return{tableFixApplied:n}}function cj(a,b){if(!b)return!1;let c=/^##\s+(.+?)\s*$/mu.exec(a.content)?.[1];return b===a.title||b===c||a.content.includes(b)}async function ck(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=!1;for(let a=0;a<2;a+=1){let m=b.map(a=>a.content).join("\n\n"),n=await (0,a4.Bt)(m),o=await (0,a4.gE)(m),p=n.fillerSentences>0,q=o.countermeasures>0&&o.ratio<.5,s=(0,aM.P_)(m),t=(0,aM.C4)(m),u=(0,aM.uj)(m),v=s.length>0,w=t.length>0,x=u.length>0;if(!p&&!q&&!v&&!w&&!x)break;let y=p?await bG(b):[],z=p?function(a,b){let c=[],d=[],e=0;for(let f of b){let b=f.chapterId||f.chapterTitle,g=a.find(a=>(a.id||a.title)===b);if(!g||"semantic"!==f.channel||!(0,a4.W0)(f.sentence)){d.push(f);continue}let h=g.content.split("\n"),i=function(a,b){let c=b.replace(/[。;;]\s*$/u,"").trim();if(c.length<12)return 0;let d=c.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`[\\s\\u3000]*${d}[\\s\\u3000]*[。;;]`,"gu"),f=RegExp(`[\\s\\u3000]*${d}[\\s\\u3000]*$`,"u"),g=0;for(let b=a.length-1;b>=0;b-=1){let d=a[b];if((0,a4.X9)(d)||!d.includes(c))continue;let h=d.match(e),i=h&&h.length>0?d.replace(e,""):d.replace(f,"");i!==d&&(g+=h&&h.length>0?h.length:1,""===i.trim()?a.splice(b,1):a[b]=i)}return g}(h,f.sentence);i>0?(g.content=h.join("\n").replace(/\n{3,}/gu,"\n\n"),e+=i,c.includes(f.sentence)||c.push(f.sentence)):d.push(f)}return{deletedCount:e,deletedSentences:c,remaining:d}}(b,y):{deletedCount:0,deletedSentences:[],remaining:y};z.deletedCount>0&&console.error(`[gen][templating] 零信息口号句确定性删除 ${z.deletedCount} 处:${z.deletedSentences.slice(0,3).join(" / ")}${z.deletedSentences.length>3?" 等":""}`);let A=b.map(a=>a.content).join("\n\n"),B=new Map(b.map(a=>[a.id,a.content])),C=(q?o.entries.filter(a=>!a.attributed||!a.quantified).slice(0,20):[]).flatMap(a=>{let c=a.text.replace(/\s+/gu,""),d=b.find(a=>a.content.replace(/\s+/gu,"").includes(c));return d?[{chapter:d,text:a.text,missingAttribution:!a.attributed,missingTarget:!a.quantified}]:[]}),D=b.flatMap(a=>{let b=z.remaining.filter(b=>(b.chapterId||b.chapterTitle)===(a.id||a.title)).map(a=>a.sentence),c=C.filter(b=>b.chapter.id===a.id).map(a=>({text:a.text,missingAttribution:a.missingAttribution,missingTarget:a.missingTarget})),d=s.filter(b=>cj(a,b.chapterTitle)),e=t.filter(b=>cj(a,b.chapterTitle)),f=u.filter(b=>cj(a,b.chapterTitle));return b.length>0||c.length>0||d.length>0||e.length>0||f.length>0?[{chapter:a,sentences:b,difficulty:c,frames:d,flows:e,titles:f}]:[]});if(0===D.length){z.deletedCount>0&&(l=!0,(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"success",message:`模板化修复第 ${a+1} 轮:确定性删除零信息口号句 ${z.deletedCount} 处(无剩余重写目标)`},{subtitle:"模板化修复"})),j(b));break}let E=[p?`套话句占比 ${(100*n.ratio).toFixed(1)}%${z.deletedCount>0?`(已确定性删除零信息口号 ${z.deletedCount} 处)`:""}`:"",q?`重难点双达标 ${(100*o.ratio).toFixed(0)}%`:"",v?`骨架指纹 ${s.length} 组`:"",w?`工序形式 ${t.length} 处`:"",x?`标题缺陷 ${u.length} 处`:""].filter(Boolean).join("、");(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"running",message:`模板化修复第 ${a+1} 轮:${E}(${D.length} 章)`},{subtitle:"模板化修复"})),j(b);let F=0,G=async a=>{let b=[];a.sentences.length>0&&b.push(`第 1~${a.sentences.length} 条目标原文是本章已检出的空话套话句(零信息纯口号句已由系统确定性删除,此处为含信息或合规承诺类命中句):逐条原地改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”式可核查措施,且每条改写句必须嵌入不少于 2 个项目实体(村名/工程量/规格,取自本章证据摘要);禁止以同义空话替换、禁止改写清单外内容、不得凭空编造数值;属必须保留的合规承诺句须具体化到可核查。`);let i=a.sentences.length+1;for(let c of a.difficulty){let a=[c.missingAttribution?"归因句(该难点的成因/风险来源)":"",c.missingTarget?"量化控制目标(数值+单位,来自本章证据摘要或行业规范,不得编造)":""].filter(Boolean).join("与");b.push(`第 ${i} 条目标原文是重难点分析条目,缺少${c.missingAttribution&&c.missingTarget?"成因归因与量化控制目标":a}:保留条目原有事实与数值,在其内补充${a}。`),i+=1}for(let c of a.frames){let a=c.sentences.map(()=>{let a=i;return i+=1,a});b.push(`第 ${a.join("、")} 条目标原文含全篇复读骨架「${c.fingerprintLabel}」(全篇 ${c.totalCount} 处,验收上限 2 处):逐句改写为差异化句式,保留原句全部事实信息(岗位、数值、频次不得丢失)。`)}for(let c of a.flows)b.push(`第 ${i} 条目标原文是小节标题,其所在小节「${c.blockTitle}」的工序顺序表达当前为【${c.currentForm}】形式且与相邻小节同形式:将该小节的工序顺序表达改写为【${c.targetForm}】形式,内容与数值保持不变(工艺参数不得删减)。`),i+=1;for(let c of a.titles)b.push(`第 ${i} 条目标原文是小节标题(${c.reason}):将该小节标题重命名为完整表达本小节内容的正式名称,正文内容不变;禁止使用“施工概况/施工流程/施工方法”等结构标签词充当标题。`),i+=1;return b.push("清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"),k(()=>(0,f.X6)(h,`templating-repair:${a.chapter.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n")],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:h,signal:g,patchGuard:(0,f.XG)("templating-repair",h),anchorTexts:[...a.sentences,...a.difficulty.map(a=>a.text),...a.frames.flatMap(a=>a.sentences),...a.flows.map(a=>a.blockTitle),...a.titles.map(a=>a.title)],maxTokens:6e3,evidenceChars:5e3})))},H=await b0({originalContent:A,repairRound:"templating-repair",diagnostics:h,beforeMetrics:[n.ratio,o.ratio,s.length,t.length,u.length],apply:async()=>((await Promise.allSettled(D.map(a=>G(a)))).forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] templating repair failed:",a.reason);return}let c=a.value,{chapter:d}=D[b];c.content&&c.content!==d.content&&(d.content=c.content,F+=1)}),j(b),b.map(a=>a.content).join("\n\n")),recheck:async a=>{let b=await (0,a4.Bt)(a),c=await (0,a4.gE)(a);return[b.ratio,c.ratio,(0,aM.P_)(a).length,(0,aM.C4)(a).length,(0,aM.uj)(a).length]},shouldRollback:(a,b)=>b[0]>a[0]+.01&&!(b[1]>a[1]+.01)||b[2]+b[3]+b[4]>a[2]+a[3]+a[4]});if(0===F&&0===z.deletedCount){(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复 patch 未落地(${D.length} 章锚点失配或 LLM 未产出)`,details:[`未收敛维度:${E}`]},{subtitle:"模板化修复"}));break}if(H.rolledBack){for(let a of b){let b=B.get(a.id);void 0!==b&&(a.content=b)}(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复后指标变差已回滚本轮修改(套话 ${(100*H.beforeMetrics[0]).toFixed(1)}%→${(100*H.afterMetrics[0]).toFixed(1)}%,治理缺陷目标 ${H.beforeMetrics[2]+H.beforeMetrics[3]+H.beforeMetrics[4]}→${H.afterMetrics[2]+H.afterMetrics[3]+H.afterMetrics[4]})`,details:["LLM 重写未收敛,回滚保留修复前正文"]},{subtitle:"模板化修复"})),j(b);break}l=!0}if(l){let a=b.map(a=>a.content).join("\n\n"),c=await (0,a4.Bt)(a),d=await (0,a4.gE)(a),e=(0,aM.P_)(a),f=(0,aM.C4)(a),g=(0,aM.uj)(a),h=c.ratio<.1&&(!d.heavyTemplated||0===d.countermeasures)&&0===e.length&&0===f.length&&0===g.length,k=[e.length>0?`骨架指纹 ${[...new Set(e.map(a=>`${a.fingerprintLabel}\xd7${a.totalCount}`))].join("、")}`:"",f.length>0?`工序形式相邻重复 ${f.length} 处`:"",g.length>0?`标题缺陷 ${g.length} 处`:""].filter(Boolean).join(";");(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:h?"success":"failed",message:`模板化修复完成:套话句占比 ${(100*c.ratio).toFixed(1)}%(达标线 ≤10%),重难点归因+量化双达标 ${(100*d.ratio).toFixed(0)}%(达标线 ≥50%)${k?`,模板化残留:${k}`:""}`,details:h?[]:["未完全收敛:残留项先由确定性修复链(终检前)收敛;复核未清零的残留经终检检测器判定,仍不达标即阻断交付(宁缺毋假)"]},{subtitle:"模板化修复"})),j(b)}return{templatingFixApplied:l}}async function cl(a){let{chapterDraftsFinal:b,projectContext:c,template:d,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:i,progressStages:j,emitProgress:k,withProgressHeartbeat:l}=a,m=/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法)\s*$/u,n=!1,o=0,p=0,q=(0,ce.sh)(c,b.flatMap(a=>a.evidence||[]));if(q.length>0){let a=/项目主要施工内容|主要施工内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法/u;for(let c of b){if(c.content.split("\n").some(a=>m.test(a.trim())))continue;let d=(c.sections||[]).find(b=>a.test(b));if(!d)continue;Array.isArray(c.sections)||(c.sections=[]);let e=c.sections.findIndex(b=>a.test(b)),f=e>=0?e+1:c.sections.length+1,g=`### ${b.indexOf(c)+1}.${f} ${d}`;c.content=`${c.content.replace(/\s+$/u,"")}
|
|
42
|
+
保持表头结构与列数不变,不得新增、删除或合并小节;只修改缺陷表格相关局部文本。`,p=await b0({originalContent:b.content,repairRound:"table-repair",diagnostics:a.generationDiagnostics,apply:async()=>(function(a,b){let c=b3(a,b);if(!c)return{content:a,removed:0};let d=b4(c.split(/\r?\n/u));return d.removed>0?{content:a.replace(c,d.lines.join("\n")),removed:d.removed}:{content:a,removed:0}})((await a.withProgressHeartbeat(()=>(0,f.l8)({template:a.template,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:[g,h],promptTexts:o,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,f.XG)("table-repair",a.generationDiagnostics)}))).content||b.content,i).content,recheck:a=>[(0,D.NS)(a).filter(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(i)&&(!j||a.message.includes(j))).length]}),q=p.content;p.rolledBack||q===b.content||(a.finalChapterDrafts[d]={...b,content:l?(0,k.w_)(q,l):q},c+=1);let s=p.rolledBack||p.afterMetrics[0]>0,t=(0,r.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${e}`,status:s?"failed":"success",message:p.rolledBack?`表格数据修复已回滚:${b.title}(修复后缺陷增多,保留修复前正文)`:s?`表格数据修复未生效:${b.title}`:`表格数据修复完成:${b.title}`,details:[g]},{subtitle:"表格数据修复"});(0,r.fx)(a.progressStages,t),(0,r.fx)(a.finalGateRepairStages,t),a.emitProgress(a.finalChapterDrafts,a.progressStages)}}))}c>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle())}}let b6={type:"object",required:["conflicts"],properties:{conflicts:{type:"array",required:!0,maxItems:8,items:{type:"object",required:!0,properties:{kind:{type:"string",required:!0},itemA:{type:"string",required:!0},itemB:{type:"string",required:!0},description:{type:"string",required:!0},confidence:{type:"number",required:!0}}}}}};async function b7(a,b={}){let c=function(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(a){if(/^\|/u.test(a)&&/[\d]/u.test(a)){b.push(a.slice(0,160));continue}if(!/^#{1,6}\s/u.test(a))for(let c of a.split(/(?<=[。;;])/u)){let a=c.trim();a.length>=6&&a.length<=160&&/[\d]/u.test(a)&&b.push(a)}}}let c=[...new Set(b)],d=function(){let a=process.env.DOCUMENT_CONSISTENCY_SAMPLE_LIMIT;if(void 0===a||""===a)return 120;if("0"===a)return 200;let b=Number(a);return Number.isFinite(b)&&b>0?Math.floor(b):120}();return c.length<=d?c:c.map((a,b)=>({sentence:a,index:b,density:(a.match(/[\d,]+(?:\.\d+)?/gu)||[]).length})).sort((a,b)=>b.density-a.density||a.index-b.index).slice(0,d).sort((a,b)=>a.index-b.index).map(a=>a.sentence)}(a);if(c.length<2)return[];let d=await (0,bo.bb)([(0,z.y4)("你是施工组织设计数据一致性审查器。"),"给定全文含数值的句子/表格行清单(编号与内容),找出互相矛盾的数值对:\n- 同一口径必须一致而实际数值不同:劳动力峰值多处不一致、同一面积两处数字不同、总工期与分项工期冲突、同一节点日期两处不一致、表格合计与明细之和不等、人数\xd7工期与总工日不自洽;\n- 只报确定的矛盾(itemA 与 itemB 明确矛盾且置信度 ≥0.8),不得臆造;\n- 不同口径的数值不算矛盾:建筑面积 vs 占地面积、不同单位的表述;分阶段各期人数互比不算矛盾(各阶段人数不同是正常配置);\n- 但总量控制上限与分阶段峰值必须自洽:“高峰期总人数控制在X人/高峰总人数X人以内/控制在X人以下”与任何“高峰投入Y人/阶段高峰Y人/峰值Y人”(Y>X)构成矛盾,必须上报;\nitemA/itemB 必须是清单中真实出现的原文片段(逐字引用编号对应句子或表格行的关键片段,含数值)。\n只输出 JSON,不得输出其他内容。"].join("\n"),c.map((a,b)=>`${b+1}. ${a}`).join("\n"),{maxTokens:2500,temperature:0,signal:b.signal,diagnostics:b.diagnostics,schema:b6,taskKind:"structuredGeneration"});return d?.conflicts?.length?d.conflicts.filter(a=>"string"==typeof a.itemA&&"string"==typeof a.itemB&&a.itemA.trim()&&a.itemB.trim()).filter(a=>(a.confidence??0)>=.7).slice(0,6):[]}async function b8(a){a.decisionLockEntries.length>0&&(a.validationIssues=[...a.validationIssues,...(function(a,b){if(0===b.length)return[];let c=[],d=new Set;for(let e of a.split(/\r?\n/u)){let a=e.trim();if(!(!a||/^#{1,6}\s/u.test(a)||/^\|/u.test(a)))for(let e of a.split(/(?<=[。;;])/u)){let a=e.trim();if(!(a.length<6)&&!(a.length>200))for(let e of b){let b=(0,q.rR)(e.id);if(!b||!b.relevance.test(a))continue;let f=new Set(e.values);for(let g of b.options){if(f.has(g.value)||!g.aliases.test(a)||(0,q.R3)(a,g.aliases))continue;let b=`${e.id} ${g.value} ${a}`;d.has(b)||(d.add(b),c.push({categoryId:e.id,label:e.label,lockedValues:e.values,offValue:g.value,sentence:a}))}}}}return c})(a.finalMarkdown,a.decisionLockEntries).map(a=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`语义矛盾(${a.label}):项目关键决策已锁定为「${a.lockedValues.join("、")}」,正文出现「${a.offValue}」冲突表述:“${a.sentence.slice(0,60)}”`,suggestion:"与已锁定决策冲突的表述必须统一为锁定值(或整句删除);禁止保留两套并存的技术路线/机械选型/供应方式。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"}))])}var b9=c(93675),ca=c(65667);async function cb(a){let b=await (0,D.KI)(a.finalChapterDrafts,a.factsModel,a.scopeConflicts);a.laborPeakAuthority=(0,F.yB)(a.blueprintData),a.greeningMaintenanceAuthority=(0,p.Dq)(a.factsModel);let c=await (0,ag.Mj)({chapters:a.finalChapterDrafts,model:a.tenderRequirements,similarity:a.requirementsSimilarity,signal:a.signal});if((b.fixedCount>0||c.fixedCount>0)&&(a.finalMarkdown=a.rebuildFinalMarkdown()),c.fixedCount>0){let b=(0,r.X5)({type:"validation",roleId:"scoring-requirement-fix",status:"success",message:`评分项响应确定性补写:${c.fixedCount} 条(${c.details.slice(0,3).join("、")})`,details:c.details.slice(3)},{subtitle:"交付前确定性清洗"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let d=(0,p.qG)(a.finalChapterDrafts);a.surfaceFixContext={laborPeakAuthority:a.laborPeakAuthority,phaseLaborAuthorities:(0,F.i2)(a.blueprintData),greeningMaintenanceAuthority:a.greeningMaintenanceAuthority,resourceBreakdownAuthority:(0,ca.re)(a.blueprintData),supportFormAuthority:"slope"===a.supportAuthority?"放坡":"pile"===a.supportAuthority?"钢板桩":void 0,decisionLockEntries:a.decisionLockEntries,plannedSectionTitles:[...new Set([...(a.effectiveChapters||[]).flatMap(a=>a.sections||[]),...a.template.chapters.flatMap(a=>a.sections||[]),...a.finalChapterDrafts.flatMap(a=>a.sections||[])].filter(Boolean))],basisRegulations:(0,p.VZ)(a.blueprintData?.basisRegulations,a.allEvidence.map(a=>String(a.content||"")).join("\n"),a.blueprintData?.project.location||"")};let e=new Map,f=(a,b)=>{b>0&&e.set(a,(e.get(a)??0)+b)},g=0;for(let b of a.finalChapterDrafts){g+=1;let c={...a.surfaceFixContext,chapterNumber:g};for(let a of b9.aW){if(!a.stage5)continue;let d=(0,p.gD)(b=>a.fix(b,c),b.content,2);d.fixedCount>0&&(b.content=d.markdown,f(a.key,d.fixedCount))}}let h=a=>e.get(a)??0,i=h("table-line-residue"),j=h("finish-thickness"),k=h("labor-peak"),l=h("phase-labor-values"),m=h("resource-breakdown"),n=h("ambiguous-either-or"),o=h("self-undermining"),q=h("empty-scoring-response"),s=h("tender-meta-language"),t=h("duplicate-response-line"),u=h("atlas-reference"),v=h("meta-discourse"),w=h("formula-residue"),x=h("paragraph-opening-repeat"),y=h("truncated-sentence"),A=h("internal-table-row-dup"),B=h("greening-maintenance"),C=h("paragraph-tail-repeat"),E=h("slot-depth-value"),G=h("duplicate-basic-info-tables"),H=h("fallback-placeholder-rows"),I=h("heading-uncovered-items"),J=h("basis-regulation-region"),K=h("forbidden-configuration"),L=h("work-injury-insurance"),M=h("templated-labels"),N=h("structure-integrity"),O=h("repeated-words"),P=h("collision-numbered-heading"),Q=h("inverted-date-range"),R=h("internal-term-heading"),S=h("section-renumber");if(d.removedCount>0||e.size>0){a.finalMarkdown=a.rebuildFinalMarkdown();let b=(0,r.X5)({type:"validation",roleId:"deterministic-surface-fix",status:"success",message:`交付前确定性清洗:跨章表格去重 ${d.removedCount} 行、断行残片合并 ${i} 处、装饰层厚度修复 ${j} 处、埋深槽位错位删除 ${E} 处、劳动力峰值统一 ${k} 处、阶段劳动力统一 ${l} 处、资源数值统一 ${m} 处、两可表述归一 ${n} 处、段首机械重复剥离 ${x} 处、截断句残留收敛 ${y} 处、元话语声明清洗 ${v} 处、公式形态清洗 ${w} 处、自伤句式改写 ${o} 处、空响应句改写 ${q} 处、招标元语言清理 ${s} 处、重复响应行去重 ${t} 行、图集引用清洗 ${u} 处、表内重复行删除 ${A} 行、基础信息表合并 ${G} 组、兜底话术表行删除 ${H} 行、绿化养护期统一 ${B} 处、标题工程类别覆盖修正 ${I} 处、编制依据法规补写 ${J} 处、配置禁用词清洗 ${K} 处、工伤保险缴纳表述补写 ${L} 处、小节编号重放 ${S} 行、段内句级复读剥离 ${C} 处、模板标签清洗 ${M} 处、结构完整性清理 ${N} 处、重复编号标题删除 ${P} 行、倒置日期区间修复 ${Q} 处、内部术语标题替换 ${R} 处、叠词收敛 ${O} 处`},{subtitle:"交付前确定性清洗"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let T=await (0,D.Yb)(a.finalMarkdown,a.factsModel,a.scopeConflicts);T.fixedCount>0&&(a.finalMarkdown=T.markdown);let U=(0,p.fE)(a.finalMarkdown,{authorityIndex:a.blueprintData?(0,F.IV)(a.blueprintData):void 0,scheduleAuthority:a.scheduleAuthority,assemblyRateAuthority:a.assemblyRateAuthority,supportAuthority:a.supportAuthority});if(U.fixedCount>0&&(a.finalMarkdown=U.markdown),b.fixedCount>0||T.fixedCount>0||U.fixedCount>0){await a.recomputeFinalValidationBundle();let c=b.fixedCount+T.fixedCount+U.fixedCount,d=[...new Set([...b.details,...T.details,...U.details])],e=(0,r.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`交付前确定性清洗:${c} 处(${d.slice(0,4).join("、")})`,details:d.slice(4)},{subtitle:"交付前确定性清洗"});(0,r.fx)(a.progressStages,e),(0,r.fx)(a.finalGateRepairStages,e)}let V=(0,z.K7)(a.finalMarkdown);if(V!==a.finalMarkdown){a.finalMarkdown=V,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"formal-source-clean",status:"success",message:"来源罗列话术确定性清洗兜底:最终成稿来源罗列残留已收敛"},{subtitle:"交付前确定性清洗"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}}async function cc(a,b){let c=[],d=[],e=[],f=await al(a);if(!f.degraded)for(let g of f.groups){let f=ao(g,{markdown:a,billFactLock:b.billFactLock});if("distinct-lock-entries"===f.verdict){d.push(`“${g.concept}”对应${f.entries}`);continue}if("no-anchor"===f.verdict){e.push(`“${g.concept}”:${[...new Set(g.values.map(a=>a.raw))].slice(0,3).join("、")}`);continue}for(let a of f.nonLock)for(let b of a.occurrences){let d=b.matchIndex+b.valueOffset;c.push({start:d,end:d+b.valueText.length,replacement:String(f.lockValue),detail:`参数口径“${a.concept}” ${a.raw}→${f.lockValue}${f.lockUnit}(以工程量清单条目「${f.entryName}」锁定口径为准)`,concept:g.concept})}}for(let d of(0,p.mB)(a,b.specAuthorityMap))d.replacement&&c.push({...d.replacement,location:d.location});if(0===c.length)return{replacements:[],falsePositiveGroups:d,noAnchorGroups:e,details:[]};let g=(0,p.gk)(a,c).markdown,h=new Set,i=await al(g);if(!i.degraded){let a=new Set(i.groups.map(a=>a.concept));for(let b of new Set(c.filter(a=>a.concept).map(a=>a.concept)))a.has(b)&&(c.forEach((a,c)=>{a.concept===b&&h.add(c)}),e.push(`“${b}”锁值替换复检未清零,已回滚交 LLM 定向修复`))}let j=new Map;for(let a of c)a.location&&j.set(a.location,(j.get(a.location)||0)+1);if(j.size>0){let a=(0,p.mB)(g,b.specAuthorityMap),d=new Map;for(let b of a)b.replacement&&d.set(b.location,(d.get(b.location)||0)+1);for(let[a,b]of j)(d.get(a)||0)>=b&&(c.forEach((b,c)=>{b.location===a&&h.add(c)}),e.push(`“${a}”规格替换复检未减数,已回滚交 LLM 定向修复`))}let k=[...new Set(c.filter((a,b)=>!h.has(b)).map(a=>a.detail))].slice(0,12);return{replacements:c.filter((a,b)=>!h.has(b)).map(a=>({start:a.start,end:a.end,replacement:a.replacement,detail:a.detail})),falsePositiveGroups:d,noAnchorGroups:e,details:k}}var cd=c(43378),ce=c(22213),cf=c(3063);let cg=/两可|按图纸|资料[^。;;\n]{0,14}(?:未明确|两可|冲突)|支护[^。;;\n]{0,10}并存/u;async function ch(a){let{chapterDraftsFinal:b,progressStages:c,emitProgress:d}=a,e=a.globalConsistencyIssues,f=0,g=0;for(let a of b){let b=a.content.split(/\r?\n/u).length,c=(0,p.lR)(a.content),d=(0,p.QM)(c.markdown),e=(0,p.Vc)(d.markdown);b-e.markdown.split(/\r?\n/u).length>0&&(f+=c.removedCount+d.removedCount,g+=e.removedCount,a.content=e.markdown)}if(f>0||g>0){let a=b.map(a=>a.content).join("\n\n"),h=[...(0,p.ub)(a),...(0,p.cl)(a)].map(a=>`${a.message};${a.suggestion||""}`);e=[...new Set([...e.filter(a=>!/表格重复|段落完全重复/u.test(a)),...h])];let i=[f>0?`重复表格 ${f} 行`:"",g>0?`重复段落 ${g} 行`:""].filter(Boolean).join("、");(0,r.fx)(c,(0,r.X5)({type:"llm_review",roleId:"post-table-dedup",status:"success",message:`补表后确定性去重:${i}`},{subtitle:"表格执行率核验"})),d(b)}return e}async function ci(a){let{effectiveChapters:b,chapterDraftsFinal:c,template:d,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:i,progressStages:j,emitProgress:k,withProgressHeartbeat:l}=a,m=(0,cd.Xi)(b,c),n=!1;if(m.length>0)for(let a=0;a<1&&m.length>0;a+=1){(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${a+1} 轮(${m.length} 个章节缺表)`},{subtitle:"表格执行率修复"})),k(c);let o=0,p=[],q=m.flatMap(a=>{let b=c.find(b=>b.title===a.chapterTitle||a.chapterTitle.includes(b.title)||b.title.includes(a.chapterTitle));return b?[{gap:a,draft:b}]:[]}),s=async a=>{let{gap:j,draft:k}=a,m=[...new Set(j.plans.map(a=>a.section).filter(Boolean))],n=m.length>0?k.evidence.filter(a=>{let b=a.sectionTitle;return!b||m.some(a=>b===a||b.includes(a)||a.includes(b))}):k.evidence,o={id:k.id,title:k.title,content:k.content,evidence:n.length?n:k.evidence,missingFacts:k.missingFacts||[],sections:k.sections},p=`计划表格缺失(计划 ${j.planned} 张,实际仅 ${j.actual} 张):${j.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;表格内项目特有数字、日期、工程量、规格必须来自项目资料或项目图谱,不得编造;人数、台班、进度时间等计划类数值必须原样引用蓝图权威锚点(劳动力峰值、工种构成、分阶段投入、机械台数、总工期节点),不得基于工程量或定额自行推算另设,不得留空、不得写“按需配置”等空话。`;return b0({originalContent:k.content,repairRound:"table-execution-repair",diagnostics:i,beforeMetrics:[Math.max(0,j.planned-j.actual)],apply:async()=>{let a=await l(()=>(0,f.X6)(i,`table-execution-repair:${k.id}`,()=>(0,f.l8)({template:d,chapter:o,issues:[p],promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:i,signal:h,patchGuard:(0,f.XG)("table-execution-repair",i),maxTokens:Math.min(12e3,Math.max(6e3,1200*j.plans.length))})));return a.content&&a.content!==k.content?a.content:k.content},recheck:a=>{let d=c.map(b=>b.id===k.id?{title:b.title,content:a,sections:b.sections}:b);return[(0,cd.Xi)(b,d).filter(a=>a.chapterTitle===k.title||a.chapterTitle===j.chapterTitle||k.title.includes(a.chapterTitle)||a.chapterTitle.includes(k.title)).reduce((a,b)=>a+Math.max(0,b.planned-b.actual),0)]}})},t=await Promise.allSettled(q.map(a=>s(a))),u=new Set;if(t.forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;p.push(`${q[b].gap.chapterTitle}:修复异常(${a.reason instanceof Error?a.reason.message:"未知错误"})`);return}let c=a.value,{gap:d,draft:e}=q[b];if(c.rolledBack)return void p.push(`${d.chapterTitle}:修复后计划表格缺口增多,已回滚本轮修改`);c.content&&c.content!==e.content&&!u.has(e.id)?(e.content=c.content,u.add(e.id),o+=1):u.has(e.id)||p.push(`${d.chapterTitle}:缺 ${d.plans.map(a=>a.title).join("、")}(${i?.llm.lastError||"补表 patch 未应用"})`)}),0===o){(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:"failed",message:`表格执行率修复第 ${a+1} 轮:补表 patch 未应用(${m.length} 个章节缺表)`,details:p},{subtitle:"表格执行率修复"})),k(c);break}n=!0,k(c),m=(0,cd.Xi)(b,c),(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-repair",status:m.length>0?"failed":"success",message:m.length>0?`表格执行率修复第 ${a+1} 轮完成,仍有 ${m.length} 个章节缺表`:`表格执行率修复第 ${a+1} 轮完成`},{subtitle:"表格执行率修复"})),(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"table-execution-review",status:m.length>0?"failed":"success",message:m.length>0?`表格执行率复检:仍有 ${m.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}return{tableFixApplied:n}}function cj(a,b){if(!b)return!1;let c=/^##\s+(.+?)\s*$/mu.exec(a.content)?.[1];return b===a.title||b===c||a.content.includes(b)}async function ck(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,l=!1;for(let a=0;a<2;a+=1){let m=b.map(a=>a.content).join("\n\n"),n=await (0,a4.Bt)(m),o=await (0,a4.gE)(m),p=n.fillerSentences>0,q=o.countermeasures>0&&o.ratio<.5,s=(0,aM.P_)(m),t=(0,aM.C4)(m),u=(0,aM.uj)(m),v=s.length>0,w=t.length>0,x=u.length>0;if(!p&&!q&&!v&&!w&&!x)break;let y=p?await bG(b):[],z=p?function(a,b){let c=[],d=[],e=0;for(let f of b){let b=f.chapterId||f.chapterTitle,g=a.find(a=>(a.id||a.title)===b);if(!g||"semantic"!==f.channel||!(0,a4.W0)(f.sentence)){d.push(f);continue}let h=g.content.split("\n"),i=function(a,b){let c=b.replace(/[。;;]\s*$/u,"").trim();if(c.length<12)return 0;let d=c.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`[\\s\\u3000]*${d}[\\s\\u3000]*[。;;]`,"gu"),f=RegExp(`[\\s\\u3000]*${d}[\\s\\u3000]*$`,"u"),g=0;for(let b=a.length-1;b>=0;b-=1){let d=a[b];if((0,a4.X9)(d)||!d.includes(c))continue;let h=d.match(e),i=h&&h.length>0?d.replace(e,""):d.replace(f,"");i!==d&&(g+=h&&h.length>0?h.length:1,""===i.trim()?a.splice(b,1):a[b]=i)}return g}(h,f.sentence);i>0?(g.content=h.join("\n").replace(/\n{3,}/gu,"\n\n"),e+=i,c.includes(f.sentence)||c.push(f.sentence)):d.push(f)}return{deletedCount:e,deletedSentences:c,remaining:d}}(b,y):{deletedCount:0,deletedSentences:[],remaining:y};z.deletedCount>0&&console.error(`[gen][templating] 零信息口号句确定性删除 ${z.deletedCount} 处:${z.deletedSentences.slice(0,3).join(" / ")}${z.deletedSentences.length>3?" 等":""}`);let A=b.map(a=>a.content).join("\n\n"),B=new Map(b.map(a=>[a.id,a.content])),C=(q?o.entries.filter(a=>!a.attributed||!a.quantified).slice(0,20):[]).flatMap(a=>{let c=a.text.replace(/\s+/gu,""),d=b.find(a=>a.content.replace(/\s+/gu,"").includes(c));return d?[{chapter:d,text:a.text,missingAttribution:!a.attributed,missingTarget:!a.quantified}]:[]}),D=b.flatMap(a=>{let b=z.remaining.filter(b=>(b.chapterId||b.chapterTitle)===(a.id||a.title)).map(a=>a.sentence),c=C.filter(b=>b.chapter.id===a.id).map(a=>({text:a.text,missingAttribution:a.missingAttribution,missingTarget:a.missingTarget})),d=s.filter(b=>cj(a,b.chapterTitle)),e=t.filter(b=>cj(a,b.chapterTitle)),f=u.filter(b=>cj(a,b.chapterTitle));return b.length>0||c.length>0||d.length>0||e.length>0||f.length>0?[{chapter:a,sentences:b,difficulty:c,frames:d,flows:e,titles:f}]:[]});if(0===D.length){z.deletedCount>0&&(l=!0,(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"success",message:`模板化修复第 ${a+1} 轮:确定性删除零信息口号句 ${z.deletedCount} 处(无剩余重写目标)`},{subtitle:"模板化修复"})),j(b));break}let E=[p?`套话句占比 ${(100*n.ratio).toFixed(1)}%${z.deletedCount>0?`(已确定性删除零信息口号 ${z.deletedCount} 处)`:""}`:"",q?`重难点双达标 ${(100*o.ratio).toFixed(0)}%`:"",v?`骨架指纹 ${s.length} 组`:"",w?`工序形式 ${t.length} 处`:"",x?`标题缺陷 ${u.length} 处`:""].filter(Boolean).join("、");(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"running",message:`模板化修复第 ${a+1} 轮:${E}(${D.length} 章)`},{subtitle:"模板化修复"})),j(b);let F=0,G=async a=>{let b=[];a.sentences.length>0&&b.push(`第 1~${a.sentences.length} 条目标原文是本章已检出的空话套话句(零信息纯口号句已由系统确定性删除,此处为含信息或合规承诺类命中句):逐条原地改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”式可核查措施,且每条改写句必须嵌入不少于 2 个项目实体(村名/工程量/规格,取自本章证据摘要);禁止以同义空话替换、禁止改写清单外内容、不得凭空编造数值;属必须保留的合规承诺句须具体化到可核查。`);let i=a.sentences.length+1;for(let c of a.difficulty){let a=[c.missingAttribution?"归因句(该难点的成因/风险来源)":"",c.missingTarget?"量化控制目标(数值+单位,来自本章证据摘要或行业规范,不得编造)":""].filter(Boolean).join("与");b.push(`第 ${i} 条目标原文是重难点分析条目,缺少${c.missingAttribution&&c.missingTarget?"成因归因与量化控制目标":a}:保留条目原有事实与数值,在其内补充${a}。`),i+=1}for(let c of a.frames){let a=c.sentences.map(()=>{let a=i;return i+=1,a});b.push(`第 ${a.join("、")} 条目标原文含全篇复读骨架「${c.fingerprintLabel}」(全篇 ${c.totalCount} 处,验收上限 2 处):逐句改写为差异化句式,保留原句全部事实信息(岗位、数值、频次不得丢失)。`)}for(let c of a.flows)b.push(`第 ${i} 条目标原文是小节标题,其所在小节「${c.blockTitle}」的工序顺序表达当前为【${c.currentForm}】形式且与相邻小节同形式:将该小节的工序顺序表达改写为【${c.targetForm}】形式,内容与数值保持不变(工艺参数不得删减)。`),i+=1;for(let c of a.titles)b.push(`第 ${i} 条目标原文是小节标题(${c.reason}):将该小节标题重命名为完整表达本小节内容的正式名称,正文内容不变;禁止使用“施工概况/施工流程/施工方法”等结构标签词充当标题。`),i+=1;return b.push("清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"),k(()=>(0,f.X6)(h,`templating-repair:${a.chapter.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n")],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:h,signal:g,patchGuard:(0,f.XG)("templating-repair",h),anchorTexts:[...a.sentences,...a.difficulty.map(a=>a.text),...a.frames.flatMap(a=>a.sentences),...a.flows.map(a=>a.blockTitle),...a.titles.map(a=>a.title)],maxTokens:6e3,evidenceChars:5e3})))},H=await b0({originalContent:A,repairRound:"templating-repair",diagnostics:h,beforeMetrics:[n.ratio,o.ratio,s.length,t.length,u.length],apply:async()=>((await Promise.allSettled(D.map(a=>G(a)))).forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] templating repair failed:",a.reason);return}let c=a.value,{chapter:d}=D[b];c.content&&c.content!==d.content&&(d.content=c.content,F+=1)}),j(b),b.map(a=>a.content).join("\n\n")),recheck:async a=>{let b=await (0,a4.Bt)(a),c=await (0,a4.gE)(a);return[b.ratio,c.ratio,(0,aM.P_)(a).length,(0,aM.C4)(a).length,(0,aM.uj)(a).length]},shouldRollback:(a,b)=>b[0]>a[0]+.01&&!(b[1]>a[1]+.01)||b[2]+b[3]+b[4]>a[2]+a[3]+a[4]});if(0===F&&0===z.deletedCount){(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复 patch 未落地(${D.length} 章锚点失配或 LLM 未产出)`,details:[`未收敛维度:${E}`]},{subtitle:"模板化修复"}));break}if(H.rolledBack){for(let a of b){let b=B.get(a.id);void 0!==b&&(a.content=b)}(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${a+1} 轮:修复后指标变差已回滚本轮修改(套话 ${(100*H.beforeMetrics[0]).toFixed(1)}%→${(100*H.afterMetrics[0]).toFixed(1)}%,治理缺陷目标 ${H.beforeMetrics[2]+H.beforeMetrics[3]+H.beforeMetrics[4]}→${H.afterMetrics[2]+H.afterMetrics[3]+H.afterMetrics[4]})`,details:["LLM 重写未收敛,回滚保留修复前正文"]},{subtitle:"模板化修复"})),j(b);break}l=!0}if(l){let a=b.map(a=>a.content).join("\n\n"),c=await (0,a4.Bt)(a),d=await (0,a4.gE)(a),e=(0,aM.P_)(a),f=(0,aM.C4)(a),g=(0,aM.uj)(a),h=c.ratio<.1&&(!d.heavyTemplated||0===d.countermeasures)&&0===e.length&&0===f.length&&0===g.length,k=[e.length>0?`骨架指纹 ${[...new Set(e.map(a=>`${a.fingerprintLabel}\xd7${a.totalCount}`))].join("、")}`:"",f.length>0?`工序形式相邻重复 ${f.length} 处`:"",g.length>0?`标题缺陷 ${g.length} 处`:""].filter(Boolean).join(";");(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"templating-repair",status:h?"success":"failed",message:`模板化修复完成:套话句占比 ${(100*c.ratio).toFixed(1)}%(达标线 ≤10%),重难点归因+量化双达标 ${(100*d.ratio).toFixed(0)}%(达标线 ≥50%)${k?`,模板化残留:${k}`:""}`,details:h?[]:["未完全收敛:残留项先由确定性修复链(终检前)收敛;复核未清零的残留经终检检测器判定,仍不达标即阻断交付(宁缺毋假)"]},{subtitle:"模板化修复"})),j(b)}return{templatingFixApplied:l}}async function cl(a){let{chapterDraftsFinal:b,projectContext:c,template:d,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:i,progressStages:j,emitProgress:k,withProgressHeartbeat:l}=a,m=/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法)\s*$/u,n=!1,o=0,p=0,q=(0,ce.sh)(c,b.flatMap(a=>a.evidence||[]));if(q.length>0){let a=/项目主要施工内容|主要施工内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法/u;for(let c of b){if(c.content.split("\n").some(a=>m.test(a.trim())))continue;let d=(c.sections||[]).find(b=>a.test(b));if(!d)continue;Array.isArray(c.sections)||(c.sections=[]);let e=c.sections.findIndex(b=>a.test(b)),f=e>=0?e+1:c.sections.length+1,g=`### ${b.indexOf(c)+1}.${f} ${d}`;c.content=`${c.content.replace(/\s+$/u,"")}
|
|
43
43
|
|
|
44
44
|
${g}
|
|
45
45
|
`,n=!0}let c=b.some(a=>a.content.split("\n").some(a=>m.test(a.trim()))),d=b.some(b=>(b.sections||[]).some(b=>a.test(b)));if(!c&&!d){let a=b.find(a=>/整体理解|工程概况|项目理解|招标范围|编制边界|现场踏勘|施工界面|主要施工方法|施工方案/u.test(a.title))||b[0];if(a){let c=b.indexOf(a);Array.isArray(a.sections)||(a.sections=[]);let d=a.sections.findIndex(a=>/项目主要施工内容|主要施工内容/u.test(a)),e=d>=0?d+1:(a.sections.push("项目主要施工内容"),a.sections.length),f=`### ${c+1}.${e} 项目主要施工内容`;a.content=`${a.content.replace(/\s+$/u,"")}
|
|
@@ -47,9 +47,9 @@ ${g}
|
|
|
47
47
|
${f}
|
|
48
48
|
`,n=!0}}}for(let a of b){let b=a.content;for(let c of a.content.split("\n").map(a=>a.trim()).filter(a=>m.test(a))){let a=c.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,""),d=(0,ce.eB)(b,a,q);d!==b&&(b=d,o+=1)}a.content=b}for(let a of b){if(0===q.length)continue;let b=a.content;for(let c of a.content.split("\n").map(a=>a.trim()).filter(a=>m.test(a))){let d=c.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,"");if(cf.gG.test(a.title)&&cf.gG.test(d))continue;let e=(0,ce.qj)(b,d,q);e!==b&&(b=e,o+=1)}a.content=b}for(let a=0;a<2;a+=1){let c=b.flatMap(a=>{if(0===q.length)return[];let b=a.content.split("\n").map(a=>a.trim()).filter(a=>m.test(a)).flatMap(b=>{let c=b.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,"");if(cf.gG.test(a.title)&&cf.gG.test(c))return[];let d=(0,ce.ab)(a.content,c,q);return d.length>0?[{headingLine:b,sectionTitle:c,missing:d}]:[]});return b.length>0?[{chapter:a,entries:b}]:[]});if(0===c.length)break;(0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"running",message:`工作包骨架补写第 ${a+1} 轮(${c.length} 章)`},{subtitle:"工作包骨架收口"})),k(b);let o=async a=>{let b=a.entries.map((a,b)=>{let c=a.missing.map((a,b)=>`#### ${b+1} ${a}`).join("\n");return`第 ${b+1} 处:「${a.headingLine}」小节内部缺少以下工作包小节(内部结构已由系统从资料锁定):
|
|
49
49
|
${c}
|
|
50
|
-
请在该小节内部按上述标题逐一补齐(标题一字不差,不得增删改、合并或调序),每个工作包小节按三要素展开正式正文:作业对象与工程量(什么部位、什么规模)、工序顺序(先后顺序清晰)、施工方法(工艺做法、工艺参数、验收检测)。已有内容一律不得改动,不得删除任何已有小节与段落,不得输出 Markdown 表格。`});return b0({originalContent:a.chapter.content,repairRound:"workpackage-skeleton-repair",diagnostics:i,beforeMetrics:[a.entries.reduce((a,b)=>a+b.missing.length,0)],apply:async()=>{let c=await l(()=>(0,f.X6)(i,`workpackage-skeleton-repair:${a.chapter.id}`,()=>(0,f.l8)({template:d,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n"),"清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"],promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:i,signal:h,patchGuard:(0,f.XG)("workpackage-skeleton-repair",i),anchorTexts:a.entries.map(a=>({text:a.headingLine,append:!0})),maxTokens:6e3})));return c.content&&c.content!==a.chapter.content?c.content:a.chapter.content},recheck:b=>{if(0===q.length)return[0];let c=0;for(let d of b.split("\n").map(a=>a.trim()).filter(a=>m.test(a))){let e=d.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,"");cf.gG.test(a.chapter.title)&&cf.gG.test(e)||(c+=(0,ce.ab)(b,e,q).length)}return[c]}})},s=await Promise.allSettled(c.map(a=>o(a))),t=0;if(s.forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;console.error("[gen] workpackage skeleton repair failed:",a.reason);return}let d=a.value,{chapter:e}=c[b];if(d.rolledBack)return void console.error("[gen] workpackage skeleton repair rolled back:",e.title);d.content&&d.content!==e.content&&(e.content=d.content,t+=1,p+=1)}),k(b),0===t)break;n=!0}return(n||o>0)&&((0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"success",message:`工作包骨架收口完成:表格剥离 ${o} 处、骨架补写 ${p} 章`},{subtitle:"工作包骨架收口"})),k(b)),{skeletonFixApplied:n}}async function cm(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k}=a,
|
|
50
|
+
请在该小节内部按上述标题逐一补齐(标题一字不差,不得增删改、合并或调序),每个工作包小节按三要素展开正式正文:作业对象与工程量(什么部位、什么规模)、工序顺序(先后顺序清晰)、施工方法(工艺做法、工艺参数、验收检测)。已有内容一律不得改动,不得删除任何已有小节与段落,不得输出 Markdown 表格。`});return b0({originalContent:a.chapter.content,repairRound:"workpackage-skeleton-repair",diagnostics:i,beforeMetrics:[a.entries.reduce((a,b)=>a+b.missing.length,0)],apply:async()=>{let c=await l(()=>(0,f.X6)(i,`workpackage-skeleton-repair:${a.chapter.id}`,()=>(0,f.l8)({template:d,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n"),"清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"],promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:i,signal:h,patchGuard:(0,f.XG)("workpackage-skeleton-repair",i),anchorTexts:a.entries.map(a=>({text:a.headingLine,append:!0})),maxTokens:6e3})));return c.content&&c.content!==a.chapter.content?c.content:a.chapter.content},recheck:b=>{if(0===q.length)return[0];let c=0;for(let d of b.split("\n").map(a=>a.trim()).filter(a=>m.test(a))){let e=d.replace(/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?/u,"");cf.gG.test(a.chapter.title)&&cf.gG.test(e)||(c+=(0,ce.ab)(b,e,q).length)}return[c]}})},s=await Promise.allSettled(c.map(a=>o(a))),t=0;if(s.forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;console.error("[gen] workpackage skeleton repair failed:",a.reason);return}let d=a.value,{chapter:e}=c[b];if(d.rolledBack)return void console.error("[gen] workpackage skeleton repair rolled back:",e.title);d.content&&d.content!==e.content&&(e.content=d.content,t+=1,p+=1)}),k(b),0===t)break;n=!0}return(n||o>0)&&((0,r.fx)(j,(0,r.X5)({type:"llm_review",roleId:"workpackage-skeleton-repair",status:"success",message:`工作包骨架收口完成:表格剥离 ${o} 处、骨架补写 ${p} 章`},{subtitle:"工作包骨架收口"})),k(b)),{skeletonFixApplied:n}}async function cm(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:g,generationDiagnostics:h,progressStages:i,emitProgress:j,withProgressHeartbeat:k,finalGateRepairStages:l}=a,m=(0,D.yw)("",b).filter(a=>"missing_planned_section"===a.reason||"empty"===a.reason&&a.planned),n=b.flatMap(a=>{let b=m.filter(b=>b.chapterTitle===a.title);if(0===b.length)return[];let c=b.map(a=>({title:a.sectionTitle,emptyOnly:"empty"===a.reason})),d=a.content.split("\n").map(a=>a.trim()).filter(a=>/^#{2,4}\s/u.test(a)).pop();return d?[{chapter:a,sectionTitles:c,lastHeadingLine:d}]:[]});if(0===n.length)return{plannedSectionFixApplied:!1};let o=(0,r.X5)({type:"llm_review",roleId:"planned-section-repair",status:"running",message:`缺规划小节补写(${n.length} 章缺失)`},{subtitle:"缺节补写收口"});(0,r.fx)(i,o),l&&(0,r.fx)(l,o),j(b);let p=new Map(b.map((a,b)=>[a.title,b])),q=async a=>{let i=p.get(a.chapter.title)??b.indexOf(a.chapter),j=a.sectionTitles.map(({title:b,emptyOnly:c})=>{let d=(a.chapter.sections||[]).findIndex(a=>a===b)+1||(a.chapter.sections||[]).length+1,e=`### ${i+1}.${d} ${b}`;return c?`本章小节「${b}」只有标题或表格无正式正文:必须在既有小节标题下补写正式正文段落(正文写在表格前后均可),不得新增同名小节标题、不得删除或改动已有表格与数值。
|
|
51
51
|
${(0,B.av)(a.chapter.title,b)}`:`本章正文缺少规划小节「${b}」:必须在章末新增小节标题「${e}」(标题一字不差)并写入正式正文。
|
|
52
|
-
${(0,B.av)(a.chapter.title,b)}`});return b0({originalContent:a.chapter.content,repairRound:"planned-section-repair",diagnostics:h,beforeMetrics:[a.sectionTitles.length],apply:async()=>{let b=await k(()=>(0,f.X6)(h,`planned-section-repair:${a.chapter.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[...j,"已有内容一律不得改动,不得删除任何已有小节、表格与数值参数;新增小节之外不得改动。"],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:h,signal:g,patchGuard:(0,f.XG)("planned-section-repair",h),anchorTexts:[{text:a.lastHeadingLine,append:!0}],maxTokens:6e3})));return b.content&&b.content!==a.chapter.content?b.content:a.chapter.content},recheck:b=>[(0,D.yw)("",[{title:a.chapter.title,content:b,sections:a.chapter.sections}]).filter(b=>b.chapterTitle===a.chapter.title&&("missing_planned_section"===b.reason||"empty"===b.reason&&b.planned)).length]})},p=await Promise.allSettled(m.map(a=>o(a))),q=0;return p.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] planned section repair failed:",a.reason);return}let c=a.value,{chapter:d}=m[b];if(c.rolledBack)return void console.error("[gen] planned section repair rolled back:",d.title);c.content&&c.content!==d.content&&(d.content=c.content,q+=1)}),j(b),(0,r.fx)(i,(0,r.X5)({type:"llm_review",roleId:"planned-section-repair",status:q>0?"success":"failed",message:q>0?`缺规划小节补写完成:补写 ${q} 章`:"缺规划小节补写:修复 patch 未落地(锚点失配或 LLM 未产出)"},{subtitle:"缺节补写收口"})),{plannedSectionFixApplied:q>0}}async function cn(a){let{chapterDraftsFinal:b,template:c,reviewPromptTexts:d,repairPromptTexts:e,requirement:g,signal:h,projectContext:i,generationDiagnostics:j,preliminaryFactsModel:k,scopeConflicts:l,progressStages:m,emitProgress:n,withProgressHeartbeat:o,blueprintData:s,billFactLock:t}=a,u=[],v=!1;try{let w=a.globalReviewSamplingRate??1,x=w>=1||b.length<=2?b:b.filter((a,b)=>b%Math.max(2,Math.round(1/w))==0),y=x.length,z=async()=>{let a=b.map(a=>a.content).join("\n\n"),[e,f]=await Promise.all([o(()=>bt({template:c,chapters:x,chapterReviews:[],promptTexts:d,requirement:g,projectContext:i,diagnostics:j,signal:h})),b7(a,{diagnostics:j,signal:h})]);return{issues:[...new Set([...e.issues,...f.map(a=>{let b={level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`数据一致性矛盾(${a.kind}):${a.description}(原文 A:“${a.itemA.slice(0,60)}” ↔ 原文 B:“${a.itemB.slice(0,60)}”)`,suggestion:"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对,删除或修正其余矛盾表述。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"};return`${b.message};${b.suggestion||""}`})])],stage:e.stage}},A=[],B=s?(0,F.IV)(s):void 0,C=async()=>{let a=b.map(a=>a.content).join("\n\n");return[...(await (0,D.qm)(a,k,l)).filter(a=>/跨章一致性冲突/u.test(a.message)),...(await (0,D.hr)(a,k)).filter(a=>"error"===a.level),...(0,p.rA)(a,{laborPeakAuthority:(0,F.yB)(s)}),...(0,p.iY)(a),...(0,p.IJ)(a),...(0,p.nm)(a),...(0,p.ON)(a),...(0,p.Et)(a),...(0,p.H)(a),...(0,p.iy)(a,(0,F.L$)(s)),...(0,p.cv)(a,(0,F.i2)(s)),...(0,p.KE)(a,(0,F.Be)(s)),...(0,p.fg)(a,s?.contract.totalDays),...(0,p.$$)(a,k.specAuthorityMap),...(0,p.ex)(a),...(0,p.Fr)(a),...(0,p.bq)(a),...(0,p.vH)(a),...(0,p.cT)(a),...(0,p.ub)(a),...(0,p.CJ)(a),...(0,p.cl)(a),...(0,p.zP)(a),...await (0,p.r8)(a,G),...await (0,p.sn)(a),...(0,p.l4)(a),...s?(0,q.dr)(a,s).filter(a=>"error"===a.level):[],...(0,N.jW)(a),...(0,N.l5)(a)].map(a=>`${a.message};${a.suggestion||""}`)},E=await z(),G=(0,p.P3)(k),H=(0,p.z4)(k),I=E.issues;A=await C(),u=[...new Set([...I,...A])];let J=0;for(let a of b){let b=(0,p.fE)(a.content,{authorityIndex:B,supportAuthority:G});b.fixedCount>0&&(a.content=b.markdown,J+=b.fixedCount)}let K=await cc(b.map(a=>a.content).join("\n\n"),{billFactLock:t,specAuthorityMap:k.specAuthorityMap});if(K.replacements.length>0){let a=0;for(let c of b){let b=a,d=b+c.content.length,e=K.replacements.filter(a=>a.start>=b&&a.end<=d).map(a=>({...a,start:a.start-b,end:a.end-b}));if(e.length>0){let a=(0,p.gk)(c.content,e);c.content=a.markdown,J+=a.fixedCount}a=d+2}}(K.details.length>0||K.falsePositiveGroups.length>0||K.noAnchorGroups.length>0)&&(console.log(`[gen] numeric-arbiter: 替换 ${K.replacements.length} 处、误报裁决 ${K.falsePositiveGroups.length} 组、无锚保留 ${K.noAnchorGroups.length} 组`),(0,r.fx)(m,(0,r.X5)({type:"validation",roleId:"numeric-arbiter",status:"success",message:`数值裁决器(清单事实锁/规格权威):确定性硬替换 ${K.replacements.length} 处、误报降级 ${K.falsePositiveGroups.length} 组、无锚留 LLM 定向修复 ${K.noAnchorGroups.length} 组`,details:[...K.details.map(a=>`确定性替换:${a}`),...K.falsePositiveGroups.map(a=>`误报裁决(不同清单条目口径并存,不阻断):${a}`),...K.noAnchorGroups.map(a=>`无确定性锚点(交 LLM 定向修复,残留由门禁兜底):${a}`)]},{subtitle:"数值裁决"})),n(b)),J>0&&(A=await C(),u=[...new Set([...I,...A])]);let L=!1,M=a=>[[...(0,p.nm)(a),...(0,p.ON)(a),...(0,p.ub)(a),...(0,p.CJ)(a),...(0,p.cl)(a),...(0,N.jW)(a),...(0,N.l5)(a)].length];for(let a=0;a<1&&u.length>0;a+=1){(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${a+1} 轮定向修复(${u.length} 个冲突)`},{subtitle:"跨章一致性修复"})),n(b);let d=0,i=b.flatMap(a=>{let b=a.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),c=u.filter(c=>{if(c.includes(a.title))return!0;if(/基坑深度数值未锁定/u.test(c))return/基坑|支护|开挖|土方|降水/u.test(a.title)||a.content.includes("基坑");if((c.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let c=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return c.length>=3&&b.includes(c)}))return!0;let d=c.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(d&&a.content.includes(d)||[...c.matchAll(/“([^”]{6,80})”/gu)].some(a=>b.includes(a[1].replace(/\s+/gu,""))))||[...c.matchAll(/(\d[\d,,.]*)\s*(?:人|台|日|个|次|天|月|套|具|处|项|条)/gu)].some(a=>b.includes(a[0].replace(/\s+/gu,"")))});return c.length>0?[{chapter:a,related:c}]:[]});if((await Promise.allSettled(i.map(({chapter:a,related:b})=>b0({originalContent:a.content,repairRound:"global-consistency-repair",diagnostics:j,apply:async()=>{let d=await o(()=>(0,f.X6)(j,`global-consistency-repair:${a.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.id,title:a.title,content:a.content,evidence:a.evidence||[],missingFacts:a.missingFacts||[],sections:a.sections},issues:b.map(a=>{let b=/重复/u.test(a)?"请删除本冲突描述的重复内容(保留首次出现的完整版本),不得改动其余正文。":/缺少三要素/u.test(a)?"请按冲突描述中列出的缺失要素定向补写:只补缺失要素的内容(作业对象与工程量/工序顺序/施工方法),不得删除或改动已有正文;补写的工程量数值必须取工程量清单汇总值,不得编造。":/清单内部口径词|不应使用 Markdown 表格/u.test(a)?"请删除本冲突描述中点名的清单内部口径内容(“分部小计/本页小计/合计/按实/暂估”等口径行或承载专业工程正文的 Markdown 表格),把表格中的项目总量数据改写为段落式连贯叙述(数值保持不变),不得改动其余正文。":/基坑深度数值未锁定/u.test(a)?void 0!==H?`请在本章基坑支护/开挖小节写出确定性的基坑开挖深度表述:本工程基坑开挖深度为 ${H}m(权威口径来自图纸标注,严禁写其他深度数值或「按图纸确定」类回避表述),并同步保留既有危大工程分级标注。`:"请从本章证据摘要中的图纸标注/勘察资料锁定基坑开挖深度数值,以确定性表述写入基坑支护小节(严禁「按图纸确定」类回避表述),不得编造数值。":/规格错位/u.test(a)?"请按冲突描述中的工程量清单权威规格修正本章对应部位的规格表述:同一材料不同部位允许不同规格,同一部位只允许权威规格,禁止把多种规格全文归一为一种。":"请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动;同一材料多种规格按所属部位/分部分项分别使用,禁止全文统一为一种规格。";return`${a};${b}`}),promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:j,signal:h,patchGuard:(0,f.XG)("global-consistency-repair",j)})));return d.content&&d.content!==a.content?d.content:a.content},recheck:M})))).forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;console.error("[gen] global consistency repair failed:",a.reason);return}let c=a.value,{chapter:e}=i[b];if(c.rolledBack)return void console.error("[gen] global consistency repair rolled back:",e.title);c.content&&c.content!==e.content&&(e.content=c.content,d+=1)}),0===d){L&&(I=(await z()).issues);break}n(b);let k=await C();A=k,0===a||0===k.length?(I=(await z()).issues,L=!1):L=!0,u=[...new Set([...I,...k])],(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-review",status:u.length>0?"failed":"success",message:u.length>0?`跨章一致性复检:仍有 ${u.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),n(b)}await ck({chapterDraftsFinal:b,template:c,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:j,progressStages:m,emitProgress:n,withProgressHeartbeat:o}),await cl({chapterDraftsFinal:b,projectContext:i,template:c,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:j,progressStages:m,emitProgress:n,withProgressHeartbeat:o});let O=await (0,D.KI)(b,k,l),P=(0,p.GG)(k),Q=(0,p.hI)(k),R=(0,p.Pt)(k),S=(0,F.yB)(s),T=void 0!==S&&S>0?S:(0,p.dc)(b.map(a=>a.content).join("\n\n")),U=0;for(let a of b){let b=(0,p.fE)(a.content,{authorityIndex:B,scheduleAuthority:P,assemblyRateAuthority:Q,supportAuthority:G,laborPeakAuthority:T});b.fixedCount>0&&(a.content=b.markdown,U+=b.fixedCount)}let V=(0,p.Dq)(k),W=0,X=0,Y=0,Z=0,$=0,_=0,aa=(0,p.qG)(b);for(let a of(W+=aa.removedCount,b)){let b=a.content.split(/\r?\n/u).length,c=(0,p.lR)(a.content),d=(0,p.QM)(c.markdown),e=(0,p.Vc)(d.markdown),f=(0,p.$h)(e.markdown),g=(0,p.EN)(f.markdown,{areaSummary:R,scheduleDays:P}),h=(0,p.K2)(g.markdown),i=(0,p.mG)(h.markdown,V),j=i.markdown.split(/\r?\n/u).length,k=b-j,l=f.fixedCount-0+g.fixedCount+h.fixedCount+i.fixedCount;Y+=f.fixedCount,$+=g.fixedCount,_+=h.fixedCount,Z+=i.fixedCount,(k>0||l>0)&&(W+=c.removedCount+d.removedCount,X+=e.removedCount,a.content=i.markdown)}let ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0;for(let a of b){let b=(0,p.ir)(a.content);b.fixedCount>0&&(a.content=b.markdown,ab+=b.fixedCount);let c=(0,p.xp)(a.content);c.fixedCount>0&&(a.content=c.markdown,ac+=c.fixedCount);let d=await (0,p.lv)(a.content);d.fixedCount>0&&(a.content=d.markdown,ad+=d.fixedCount);let e=(0,p.Co)(a.content);e.fixedCount>0&&(a.content=e.markdown,ae+=e.fixedCount);let f=(0,p.zj)(a.content);f.fixedCount>0&&(a.content=f.markdown,af+=f.fixedCount);let g=(0,p.SZ)(a.content);g.fixedCount>0&&(a.content=g.markdown,ag+=g.fixedCount);let h=(0,p.GI)(a.content);h.fixedCount>0&&(a.content=h.markdown,ah+=h.fixedCount)}if(v=!0,O.fixedCount>0||U>0||W>0||X>0||Y>0||$>0||_>0||ab>0||ac>0||ad>0||ae>0||af>0||ag>0||ah>0||Z>0){A=await C(),u=[...new Set([...I,...A])];let a=[O.fixedCount>0?`数值 ${O.fixedCount} 处`:"",U>0?`跨章数值 ${U} 处`:"",W>0?`重复表格 ${W} 行`:"",X>0?`重复段落 ${X} 行`:"",ab>0?`自伤表述改写 ${ab} 处`:"",ac>0?`危大辨识补漏 ${ac} 项`:"",ad>0?`扬尘六个百分百补写 ${ad} 项`:"",ae>0?`内部术语清洗 ${ae} 处`:"",af>0?`无表头表格补齐 ${af} 处`:"",ag>0?`两可表述归一 ${ag} 处`:"",ah>0?`配置污染清洗 ${ah} 处`:"",Z>0?`绿化养护期统一 ${Z} 处`:""].filter(Boolean).join("、");(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性定点修复:${a}${O.details.slice(0,4).length>0?`(${O.details.slice(0,4).join("、")})`:""}`,details:O.details.slice(4)},{subtitle:"跨章一致性修复"})),n(b)}let ai=A.filter(a=>!cg.test(a)),aj=[...I,...A.filter(a=>cg.test(a))],ak=ai.length>0?"failed":"success",al=ai.length>0?`跨章一致性修复完成:仍残留 ${ai.length} 个可修复冲突(已记录,由交付门禁兑底)`:aj.length>0?`跨章一致性修复完成:确定性冲突已全部消除;另有 ${aj.length} 个审查提示/资料两可项(已记录,由交付门禁复核)`:"跨章一致性修复完成:冲突已全部消除";(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-repair",status:ak,message:al},{subtitle:"跨章一致性修复"})),n(b);let am=y<b.length?{...E.stage,message:`${E.stage.message||"全局一致性审查完成"}(抽检 ${y}/${b.length} 章)`}:E.stage;(0,r.fx)(m,am),n(b)}catch(a){if(h?.aborted)throw a;console.error("[gen] global consistency review failed:",a)}return{issues:u,dedupRan:v}}async function co(a){(await cm({chapterDraftsFinal:a.finalChapterDrafts,template:a.template,repairPromptTexts:a.repairPromptTexts,requirement:a.requirement,signal:a.signal,generationDiagnostics:a.generationDiagnostics,progressStages:a.progressStages,emitProgress:a.emitProgress,withProgressHeartbeat:a.withProgressHeartbeat})).plannedSectionFixApplied&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle());let b=(0,p.qj)(a.finalMarkdown);b!==a.finalMarkdown&&(a.finalMarkdown=b,await a.recomputeFinalValidationBundle());let c=function(a){let b=a.split(/\r?\n/u),c=[],d=0,e=0;for(;e<b.length;){if(!/^\s*\|/u.test(b[e])){c.push(b[e]),e+=1;continue}let a=e;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;let f=b4(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(a.finalMarkdown);c.markdown!==a.finalMarkdown&&(a.finalMarkdown=c.markdown,await a.recomputeFinalValidationBundle());let d=(0,p.g4)(b9.aW.filter(a=>a.round2).map(b=>c=>b.fix(c,a.surfaceFixContext)),a.finalMarkdown,3);d.markdown!==a.finalMarkdown&&(a.finalMarkdown=d.markdown,await a.recomputeFinalValidationBundle());let e=await (0,E.NR)(a.finalMarkdown);e!==a.finalMarkdown&&(a.finalMarkdown=e,await a.recomputeFinalValidationBundle());let f=(0,p._D)(a.finalMarkdown);f.fixedCount>0&&(a.finalMarkdown=f.markdown,await a.recomputeFinalValidationBundle());let g=await (0,ag.eA)({markdown:a.finalMarkdown,chapters:a.finalChapterDrafts,model:a.tenderRequirements,similarity:a.requirementsSimilarity,signal:a.signal,diagnostics:a.generationDiagnostics});if(g.fixedCount>0){a.finalMarkdown=g.markdown,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"scoring-requirement-fix-final",status:"success",message:`评分项响应终检补写:${g.fixedCount} 条(${g.details.slice(0,3).join("、")})`,details:g.details.slice(3)},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}}let cp=/(?:\d+(?:\.\d+)?\s*(?:W|kW|kV|V|A|Hz|mm|cm|m|km|kg|g|t|K|MPa|kN|℃|%|L|mL|s|h|min)\b|C\d{2,}|HRB\d+|HPB\d+|DN\s*\d+|Φ\s*\d+(?:\.\d+)?|φ\s*\d+(?:\.\d+)?|\d+(?:\.\d+)?\s*[×x*]\s*\d+(?:\.\d+)?)/giu;function cq(a){return[...new Set((a.match(cp)||[]).map(a=>a.replace(/\s+/gu,"").trim()))].filter(Boolean).slice(0,8)}function cr(a,b=[]){return[...new Set(`${a} ${b.join(" ")}`.match(/[\p{Script=Han}]{2,}|[A-Za-z0-9_-]{3,}/gu)||[])].filter(a=>a.length>=2)}let cs=/(?:\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|K|L|ml|MPa|kPa|kN|N|℃|%|台|套|座|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元|W|kW|kV|V|A|Hz|米|处|道|根|盏|株|标段|层|樘|孔|眼|间|户|栋|幢|d)\b|DN\s*\d+|Φ\s*\d+(?:\.\d+)?|φ\s*\d+(?:\.\d+)?|C\d{2,}|HRB\d+|HPB\d+)/giu;function ct(a){return a.replace(/\s+/gu,"").toLowerCase()}function cu(a){return[...new Set((a.match(cs)||[]).map(ct))]}async function cv(a){let b=function(a){let b=new Set;for(let c of a.allEvidence)if(c.content)for(let a of cu((0,g.eE)(c.content)))b.add(a);let c=a.input.billFactLock;if(c)for(let a of c.entries){for(let c of cu(`${a.name} ${a.description} ${a.quantity}${a.unit}`))b.add(c);for(let c of cq(a.description))b.add(ct(c));for(let c of a.specQuantityPairs)for(let a of(b.add(ct(c.spec)),cu(c.quantity)))b.add(a)}let d=a.input.blueprintData?.quantities;if(d)for(let[a,c]of Object.entries(d))for(let d of("number"==typeof c.value&&Number.isFinite(c.value)&&b.add(ct(`${c.value}${c.unit||""}`)),cu(a)))b.add(d);for(let c of[...a.structuredFacts||[],...a.factsModel?.preciseFacts||[]])for(let a of cu((0,e.lG)(c.value)))b.add(a);return b}(a);if(0===b.size)return;let c=a=>{let c=[];for(let d of a.split(/[。;;!!??\n]/u).map(a=>a.trim()).filter(Boolean).filter(a=>!a.startsWith("#")&&(a.match(cs)??[]).length>0).map(a=>a.slice(0,160))){if(function(a){if(/高温|防暑|危大|专家论证|超过一定规模|40℃|37℃|35℃/u.test(a)||/第\s*\d+\s*(天|周|月|日|层|道|步|轮|批)/u.test(a))return!0;let b=a.match(cs)||[];return!!(b.length>0&&b.every(a=>/%$/u.test(a.trim()))&&/完成|进度|利用率|合格率|优良率|评标|得分|负荷/u.test(a)||b.every(a=>/^20\d{2}/u.test(a))&&/年/u.test(a)&&!/月|日/u.test(a))}(d))continue;let a=cu(d);if(0===a.length||a.every(a=>b.has(a)))continue;let e=a.filter(a=>!b.has(a));e.length>0&&c.push({sentence:d,tokens:e})}return c},d=new Map;for(let b of a.finalChapterDrafts){let a=c(b.content);a.length>0&&d.set(b.id,a.slice(0,12))}let h=[...d.values()].reduce((a,b)=>a+b.length,0);if(0===h){(0,r.fx)(a.progressStages,(0,r.X5)({type:"validation",roleId:"numeric-verification",status:"success",message:"正文数值确定性核对通过:全部正文数值均在资料原文/清单事实锁/蓝图参数桶中找到同值来源",details:[`数值权威库规模:${b.size} 个归一化 token`]},{subtitle:"数值确定性核对"})),a.emitProgress(a.finalChapterDrafts,a.progressStages);return}let i=0,j=0;for(let[b,e]of d){let d=a.finalChapterDrafts.findIndex(a=>a.id===b);if(d<0)continue;let g=a.finalChapterDrafts[d],h=g.content,k=e,l=c(h).length,m=0,n=!1,o=!1,p=[l];for(;k.length>0&&m<2;){m+=1;let e=(0,r.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:"running",message:`正文数值核对发现 ${k.length} 处疑似无来源数值,第 ${m} 轮定向修复中:${g.title}`,details:k.map(a=>`疑似:${a.sentence}(缺来源 token:${a.tokens.join("、")})`)},{subtitle:"数值确定性核对"});(0,r.fx)(a.progressStages,e),(0,r.fx)(a.finalGateRepairStages,e),a.emitProgress(a.finalChapterDrafts,a.progressStages);let i=["【正文数值定向核对修复】",...m>1?[`本轮为第 ${m} 轮(最多 2 轮):上一轮修复后仍有残留,无法确认来源的数值必须直接删除,禁止保留或替换为其他无来源数值。`]:[],"下列句子中的数值(标注「缺来源 token」)在项目绑定材料、工程量清单与蓝图中均找不到同值来源,属于疑似编造数值。请逐句核对并修复:","1. 若该数值在本章绑定证据中确实存在(仅表述口径不同),保持数值原样,只修正单位或表述;","2. 若该数值是行业通用工艺参数(如养护龄期、分层厚度),可按规范惯例保留并改为规范原文表述;","3. 其余情况必须删除该数值,改写为不带具体数值的过程控制表述(如「按设计要求」「分层碾压至压实度满足设计及规范要求」);","禁止把疑似数值替换为另一个同样无来源的数值;禁止改动句子的非数值部分;只做局部修改,不得新增、删除或合并小节。",k.map(a=>`- 疑似句:${a.sentence}(缺来源 token:${a.tokens.join("、")})`).join("\n")].join("\n"),j=await b0({originalContent:h,repairRound:"numeric-verification",diagnostics:a.generationDiagnostics,apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,f.l8)({template:a.template,chapter:{id:g.id,title:g.title,content:h,evidence:g.evidence,missingFacts:g.missingFacts,sections:g.sections},issues:k.map(a=>`疑似无来源数值:${a.sentence}(token:${a.tokens.join("、")})`),promptTexts:i,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,f.XG)("numeric-verification",a.generationDiagnostics)}));return b.content&&b.content!==h?b.content:h},recheck:a=>[c(a).length]});j.rolledBack||j.content===h||(h=j.content,a.finalChapterDrafts[d]={...g,content:h},n=!0),j.rolledBack&&(o=!0);let q=c(h).length;if(p.push(q),0===q||q>=l||m>=2)break;l=q,k=c(h).slice(0,12)}n&&(i+=1);let q=c(h).length;j+=q;let s=(0,r.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:0===q?"success":"failed",message:0===q?`数值核对修复完成:${g.title}(${e.length} 处疑似数值已处理,残留轨迹 ${p.join("→")})`:n?`数值核对修复部分生效:${g.title}(疑似数值残留轨迹 ${p.join("→")},已执行 ${m} 轮定向修复(每章最多 2 轮);残留项以 warning 记录,不阻断交付)`:o?`数值核对修复已回滚:${g.title}(修复后疑似数值增多,保留修复前正文;残留 ${q} 处以 warning 记录,不阻断交付)`:`数值核对修复未生效:${g.title}(模型未产生有效修改;残留 ${q} 处以 warning 记录,不阻断交付)`,details:[...e.map(a=>`疑似:${a.sentence}`),q>0?`已执行 ${m} 轮定向修复,残留项以 warning 记录,不阻断交付`:""]},{subtitle:"数值确定性核对"});(0,r.fx)(a.progressStages,s),(0,r.fx)(a.finalGateRepairStages,s),a.emitProgress(a.finalChapterDrafts,a.progressStages)}i>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.generationDiagnostics.llm.lastInfo=`正文数值确定性核对:权威库 ${b.size} token,${h} 处疑似无来源数值,${i} 章完成定向修复,残留 ${j} 处(每章最多 2 轮收敛修复,未收敛残留以 warning 记录,不阻断交付)`}async function cw(a){let b=a.requirementSemantics;if(!b||!b.parsed||0===(b.globalRequirements||[]).length&&0===(b.chapterRequirements||[]).length)return;let c=[...b.globalRequirements||[],...(b.chapterRequirements||[]).flatMap(a=>a.requirements)].filter(Boolean).length,d=(b,c,d)=>a.withProgressHeartbeat(()=>(0,bo.bb)('你是投标文档用户要求核验专家。逐条核对「用户要求」是否已在章节正文中落实。\n\n判定口径:正文存在明确满足该要求的实质性内容即算落实;仅泛泛提及、半句带过、被其他内容顶替均算未落实。\n\n不得因为正文有其他内容就降低标准;用户要求是最高优先级,未落实必须如实列入 unmet。\n\n只返回 JSON:{"satisfied":true/false,"unmet":["未落实要求原文"]}。',[`章节标题:${b}`,`用户要求(逐条核验):
|
|
52
|
+
${(0,B.av)(a.chapter.title,b)}`});return b0({originalContent:a.chapter.content,repairRound:"planned-section-repair",diagnostics:h,beforeMetrics:[a.sectionTitles.length],apply:async()=>{let b=await k(()=>(0,f.X6)(h,`planned-section-repair:${a.chapter.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[...j,"已有内容一律不得改动,不得删除任何已有小节、表格与数值参数;新增小节之外不得改动。"],promptTexts:d,requirement:e,forbidDrawingImages:!0,diagnostics:h,signal:g,patchGuard:(0,f.XG)("planned-section-repair",h),anchorTexts:[{text:a.lastHeadingLine,append:!0}],maxTokens:6e3})));return b.content&&b.content!==a.chapter.content?b.content:a.chapter.content},recheck:b=>[(0,D.yw)("",[{title:a.chapter.title,content:b,sections:a.chapter.sections}]).filter(b=>b.chapterTitle===a.chapter.title&&("missing_planned_section"===b.reason||"empty"===b.reason&&b.planned)).length]})},s=await Promise.allSettled(n.map(a=>q(a))),t=0;s.forEach((a,b)=>{if("rejected"===a.status){if(g?.aborted)throw a.reason;console.error("[gen] planned section repair failed:",a.reason);return}let c=a.value,{chapter:d}=n[b];if(c.rolledBack)return void console.error("[gen] planned section repair rolled back:",d.title);c.content&&c.content!==d.content&&(d.content=c.content,t+=1)}),j(b);let u=(0,r.X5)({type:"llm_review",roleId:"planned-section-repair",status:t>0?"success":"failed",message:t>0?`缺规划小节补写完成:补写 ${t} 章`:"缺规划小节补写:修复 patch 未落地(锚点失配或 LLM 未产出)"},{subtitle:"缺节补写收口"});return(0,r.fx)(i,u),l&&(0,r.fx)(l,u),{plannedSectionFixApplied:t>0}}async function cn(a){let{chapterDraftsFinal:b,template:c,reviewPromptTexts:d,repairPromptTexts:e,requirement:g,signal:h,projectContext:i,generationDiagnostics:j,preliminaryFactsModel:k,scopeConflicts:l,progressStages:m,emitProgress:n,withProgressHeartbeat:o,blueprintData:s,billFactLock:t}=a,u=[],v=!1;try{let w=a.globalReviewSamplingRate??1,x=w>=1||b.length<=2?b:b.filter((a,b)=>b%Math.max(2,Math.round(1/w))==0),y=x.length,z=async()=>{let a=b.map(a=>a.content).join("\n\n"),[e,f]=await Promise.all([o(()=>bt({template:c,chapters:x,chapterReviews:[],promptTexts:d,requirement:g,projectContext:i,diagnostics:j,signal:h})),b7(a,{diagnostics:j,signal:h})]);return{issues:[...new Set([...e.issues,...f.map(a=>{let b={level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`数据一致性矛盾(${a.kind}):${a.description}(原文 A:“${a.itemA.slice(0,60)}” ↔ 原文 B:“${a.itemB.slice(0,60)}”)`,suggestion:"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对,删除或修正其余矛盾表述。禁止将本缺陷描述与修复要求本身写入正文,输出仅限正文内容。"};return`${b.message};${b.suggestion||""}`})])],stage:e.stage}},A=[],B=s?(0,F.IV)(s):void 0,C=async()=>{let a=b.map(a=>a.content).join("\n\n");return[...(await (0,D.qm)(a,k,l)).filter(a=>/跨章一致性冲突/u.test(a.message)),...(await (0,D.hr)(a,k)).filter(a=>"error"===a.level),...(0,p.rA)(a,{laborPeakAuthority:(0,F.yB)(s)}),...(0,p.iY)(a),...(0,p.IJ)(a),...(0,p.nm)(a),...(0,p.ON)(a),...(0,p.Et)(a),...(0,p.H)(a),...(0,p.iy)(a,(0,F.L$)(s)),...(0,p.cv)(a,(0,F.i2)(s)),...(0,p.KE)(a,(0,F.Be)(s)),...(0,p.fg)(a,s?.contract.totalDays),...(0,p.$$)(a,k.specAuthorityMap),...(0,p.ex)(a),...(0,p.Fr)(a),...(0,p.bq)(a),...(0,p.vH)(a),...(0,p.cT)(a),...(0,p.ub)(a),...(0,p.CJ)(a),...(0,p.cl)(a),...(0,p.zP)(a),...await (0,p.r8)(a,G),...await (0,p.sn)(a),...(0,p.l4)(a),...s?(0,q.dr)(a,s).filter(a=>"error"===a.level):[],...(0,N.jW)(a),...(0,N.l5)(a)].map(a=>`${a.message};${a.suggestion||""}`)},E=await z(),G=(0,p.P3)(k),H=(0,p.z4)(k),I=E.issues;A=await C(),u=[...new Set([...I,...A])];let J=0;for(let a of b){let b=(0,p.fE)(a.content,{authorityIndex:B,supportAuthority:G});b.fixedCount>0&&(a.content=b.markdown,J+=b.fixedCount)}let K=await cc(b.map(a=>a.content).join("\n\n"),{billFactLock:t,specAuthorityMap:k.specAuthorityMap});if(K.replacements.length>0){let a=0;for(let c of b){let b=a,d=b+c.content.length,e=K.replacements.filter(a=>a.start>=b&&a.end<=d).map(a=>({...a,start:a.start-b,end:a.end-b}));if(e.length>0){let a=(0,p.gk)(c.content,e);c.content=a.markdown,J+=a.fixedCount}a=d+2}}(K.details.length>0||K.falsePositiveGroups.length>0||K.noAnchorGroups.length>0)&&(console.log(`[gen] numeric-arbiter: 替换 ${K.replacements.length} 处、误报裁决 ${K.falsePositiveGroups.length} 组、无锚保留 ${K.noAnchorGroups.length} 组`),(0,r.fx)(m,(0,r.X5)({type:"validation",roleId:"numeric-arbiter",status:"success",message:`数值裁决器(清单事实锁/规格权威):确定性硬替换 ${K.replacements.length} 处、误报降级 ${K.falsePositiveGroups.length} 组、无锚留 LLM 定向修复 ${K.noAnchorGroups.length} 组`,details:[...K.details.map(a=>`确定性替换:${a}`),...K.falsePositiveGroups.map(a=>`误报裁决(不同清单条目口径并存,不阻断):${a}`),...K.noAnchorGroups.map(a=>`无确定性锚点(交 LLM 定向修复,残留由门禁兜底):${a}`)]},{subtitle:"数值裁决"})),n(b)),J>0&&(A=await C(),u=[...new Set([...I,...A])]);let L=!1,M=a=>[[...(0,p.nm)(a),...(0,p.ON)(a),...(0,p.ub)(a),...(0,p.CJ)(a),...(0,p.cl)(a),...(0,N.jW)(a),...(0,N.l5)(a)].length];for(let a=0;a<1&&u.length>0;a+=1){(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-repair",status:"running",message:`跨章一致性冲突第 ${a+1} 轮定向修复(${u.length} 个冲突)`},{subtitle:"跨章一致性修复"})),n(b);let d=0,i=b.flatMap(a=>{let b=a.content.replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡"),c=u.filter(c=>{if(c.includes(a.title))return!0;if(/基坑深度数值未锁定/u.test(c))return/基坑|支护|开挖|土方|降水/u.test(a.title)||a.content.includes("基坑");if((c.match(/不一致的表述\s*([^;;。\n]+)/u)?.[1]||"").split(/[、,,]/u).some(a=>{let c=a.trim().replace(/\s+/gu,"").replace(/平方米|m²|m2/giu,"㎡");return c.length>=3&&b.includes(c)}))return!0;let d=c.match(/正文([^配比厚度\s]{1,6}?)(?:配比|厚度)/u)?.[1];return!!(d&&a.content.includes(d)||[...c.matchAll(/“([^”]{6,80})”/gu)].some(a=>b.includes(a[1].replace(/\s+/gu,""))))||[...c.matchAll(/(\d[\d,,.]*)\s*(?:人|台|日|个|次|天|月|套|具|处|项|条)/gu)].some(a=>b.includes(a[0].replace(/\s+/gu,"")))});return c.length>0?[{chapter:a,related:c}]:[]});if((await Promise.allSettled(i.map(({chapter:a,related:b})=>b0({originalContent:a.content,repairRound:"global-consistency-repair",diagnostics:j,apply:async()=>{let d=await o(()=>(0,f.X6)(j,`global-consistency-repair:${a.id}`,()=>(0,f.l8)({template:c,chapter:{id:a.id,title:a.title,content:a.content,evidence:a.evidence||[],missingFacts:a.missingFacts||[],sections:a.sections},issues:b.map(a=>{let b=/重复/u.test(a)?"请删除本冲突描述的重复内容(保留首次出现的完整版本),不得改动其余正文。":/缺少三要素/u.test(a)?"请按冲突描述中列出的缺失要素定向补写:只补缺失要素的内容(作业对象与工程量/工序顺序/施工方法),不得删除或改动已有正文;补写的工程量数值必须取工程量清单汇总值,不得编造。":/清单内部口径词|不应使用 Markdown 表格/u.test(a)?"请删除本冲突描述中点名的清单内部口径内容(“分部小计/本页小计/合计/按实/暂估”等口径行或承载专业工程正文的 Markdown 表格),把表格中的项目总量数据改写为段落式连贯叙述(数值保持不变),不得改动其余正文。":/基坑深度数值未锁定/u.test(a)?void 0!==H?`请在本章基坑支护/开挖小节写出确定性的基坑开挖深度表述:本工程基坑开挖深度为 ${H}m(权威口径来自图纸标注,严禁写其他深度数值或「按图纸确定」类回避表述),并同步保留既有危大工程分级标注。`:"请从本章证据摘要中的图纸标注/勘察资料锁定基坑开挖深度数值,以确定性表述写入基坑支护小节(严禁「按图纸确定」类回避表述),不得编造数值。":/规格错位/u.test(a)?"请按冲突描述中的工程量清单权威规格修正本章对应部位的规格表述:同一材料不同部位允许不同规格,同一部位只允许权威规格,禁止把多种规格全文归一为一种。":"请严格按冲突描述中给出的资料口径修正本章对应表述,不得引入新的数值;与资料口径一致的既有表述(含分层/子项数值)不得改动;同一材料多种规格按所属部位/分部分项分别使用,禁止全文统一为一种规格。";return`${a};${b}`}),promptTexts:e,requirement:g,forbidDrawingImages:!0,diagnostics:j,signal:h,patchGuard:(0,f.XG)("global-consistency-repair",j)})));return d.content&&d.content!==a.content?d.content:a.content},recheck:M})))).forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;console.error("[gen] global consistency repair failed:",a.reason);return}let c=a.value,{chapter:e}=i[b];if(c.rolledBack)return void console.error("[gen] global consistency repair rolled back:",e.title);c.content&&c.content!==e.content&&(e.content=c.content,d+=1)}),0===d){L&&(I=(await z()).issues);break}n(b);let k=await C();A=k,0===a||0===k.length?(I=(await z()).issues,L=!1):L=!0,u=[...new Set([...I,...k])],(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-review",status:u.length>0?"failed":"success",message:u.length>0?`跨章一致性复检:仍有 ${u.length} 个冲突`:"跨章一致性复检通过"},{subtitle:"全局一致性审查"})),n(b)}await ck({chapterDraftsFinal:b,template:c,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:j,progressStages:m,emitProgress:n,withProgressHeartbeat:o}),await cl({chapterDraftsFinal:b,projectContext:i,template:c,repairPromptTexts:e,requirement:g,signal:h,generationDiagnostics:j,progressStages:m,emitProgress:n,withProgressHeartbeat:o});let O=await (0,D.KI)(b,k,l),P=(0,p.GG)(k),Q=(0,p.hI)(k),R=(0,p.Pt)(k),S=(0,F.yB)(s),T=void 0!==S&&S>0?S:(0,p.dc)(b.map(a=>a.content).join("\n\n")),U=0;for(let a of b){let b=(0,p.fE)(a.content,{authorityIndex:B,scheduleAuthority:P,assemblyRateAuthority:Q,supportAuthority:G,laborPeakAuthority:T});b.fixedCount>0&&(a.content=b.markdown,U+=b.fixedCount)}let V=(0,p.Dq)(k),W=0,X=0,Y=0,Z=0,$=0,_=0,aa=(0,p.qG)(b);for(let a of(W+=aa.removedCount,b)){let b=a.content.split(/\r?\n/u).length,c=(0,p.lR)(a.content),d=(0,p.QM)(c.markdown),e=(0,p.Vc)(d.markdown),f=(0,p.$h)(e.markdown),g=(0,p.EN)(f.markdown,{areaSummary:R,scheduleDays:P}),h=(0,p.K2)(g.markdown),i=(0,p.mG)(h.markdown,V),j=i.markdown.split(/\r?\n/u).length,k=b-j,l=f.fixedCount-0+g.fixedCount+h.fixedCount+i.fixedCount;Y+=f.fixedCount,$+=g.fixedCount,_+=h.fixedCount,Z+=i.fixedCount,(k>0||l>0)&&(W+=c.removedCount+d.removedCount,X+=e.removedCount,a.content=i.markdown)}let ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0;for(let a of b){let b=(0,p.ir)(a.content);b.fixedCount>0&&(a.content=b.markdown,ab+=b.fixedCount);let c=(0,p.xp)(a.content);c.fixedCount>0&&(a.content=c.markdown,ac+=c.fixedCount);let d=await (0,p.lv)(a.content);d.fixedCount>0&&(a.content=d.markdown,ad+=d.fixedCount);let e=(0,p.Co)(a.content);e.fixedCount>0&&(a.content=e.markdown,ae+=e.fixedCount);let f=(0,p.zj)(a.content);f.fixedCount>0&&(a.content=f.markdown,af+=f.fixedCount);let g=(0,p.SZ)(a.content);g.fixedCount>0&&(a.content=g.markdown,ag+=g.fixedCount);let h=(0,p.GI)(a.content);h.fixedCount>0&&(a.content=h.markdown,ah+=h.fixedCount)}if(v=!0,O.fixedCount>0||U>0||W>0||X>0||Y>0||$>0||_>0||ab>0||ac>0||ad>0||ae>0||af>0||ag>0||ah>0||Z>0){A=await C(),u=[...new Set([...I,...A])];let a=[O.fixedCount>0?`数值 ${O.fixedCount} 处`:"",U>0?`跨章数值 ${U} 处`:"",W>0?`重复表格 ${W} 行`:"",X>0?`重复段落 ${X} 行`:"",ab>0?`自伤表述改写 ${ab} 处`:"",ac>0?`危大辨识补漏 ${ac} 项`:"",ad>0?`扬尘六个百分百补写 ${ad} 项`:"",ae>0?`内部术语清洗 ${ae} 处`:"",af>0?`无表头表格补齐 ${af} 处`:"",ag>0?`两可表述归一 ${ag} 处`:"",ah>0?`配置污染清洗 ${ah} 处`:"",Z>0?`绿化养护期统一 ${Z} 处`:""].filter(Boolean).join("、");(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-deterministic-fix",status:"success",message:`跨章一致性定点修复:${a}${O.details.slice(0,4).length>0?`(${O.details.slice(0,4).join("、")})`:""}`,details:O.details.slice(4)},{subtitle:"跨章一致性修复"})),n(b)}let ai=A.filter(a=>!cg.test(a)),aj=[...I,...A.filter(a=>cg.test(a))],ak=ai.length>0?"failed":"success",al=ai.length>0?`跨章一致性修复完成:仍残留 ${ai.length} 个可修复冲突(已记录,由交付门禁兑底)`:aj.length>0?`跨章一致性修复完成:确定性冲突已全部消除;另有 ${aj.length} 个审查提示/资料两可项(已记录,由交付门禁复核)`:"跨章一致性修复完成:冲突已全部消除";(0,r.fx)(m,(0,r.X5)({type:"llm_review",roleId:"global-consistency-repair",status:ak,message:al},{subtitle:"跨章一致性修复"})),n(b);let am=y<b.length?{...E.stage,message:`${E.stage.message||"全局一致性审查完成"}(抽检 ${y}/${b.length} 章)`}:E.stage;(0,r.fx)(m,am),n(b)}catch(a){if(h?.aborted)throw a;console.error("[gen] global consistency review failed:",a)}return{issues:u,dedupRan:v}}async function co(a){(await cm({chapterDraftsFinal:a.finalChapterDrafts,template:a.template,repairPromptTexts:a.repairPromptTexts,requirement:a.requirement,signal:a.signal,generationDiagnostics:a.generationDiagnostics,progressStages:a.progressStages,emitProgress:a.emitProgress,withProgressHeartbeat:a.withProgressHeartbeat,finalGateRepairStages:a.finalGateRepairStages})).plannedSectionFixApplied&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle());let b=(0,p.qj)(a.finalMarkdown);if(b!==a.finalMarkdown){a.finalMarkdown=b,await a.recomputeFinalValidationBundle();let c=(0,r.X5)({type:"validation",roleId:"commercial-strip",status:"success",message:"商务条款数据交付前兜底清洗:正文商务条款数据句已删除"},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,c),(0,r.fx)(a.finalGateRepairStages,c)}let c=function(a){let b=a.split(/\r?\n/u),c=[],d=0,e=0;for(;e<b.length;){if(!/^\s*\|/u.test(b[e])){c.push(b[e]),e+=1;continue}let a=e;for(;a+1<b.length&&/^\s*\|/u.test(b[a+1]);)a+=1;let f=b4(b.slice(e,a+1));f.removed>0&&(d+=1),c.push(...f.lines),e=a+1}return{markdown:c.join("\n"),removed:d}}(a.finalMarkdown);if(c.markdown!==a.finalMarkdown){a.finalMarkdown=c.markdown,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"table-deterministic-repair",status:"success",message:c.removed>0?`表格空单元格交付前确定性修复:删除 ${c.removed} 块`:"表格空单元格交付前确定性修复:合计行填充类修复已落地"},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let d=(0,p.g4)(b9.aW.filter(a=>a.round2).map(b=>c=>b.fix(c,a.surfaceFixContext)),a.finalMarkdown,3);if(d.markdown!==a.finalMarkdown){a.finalMarkdown=d.markdown,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"post-review-surface",status:"success",message:`评审轮后表面修复兜底:确定性清洗 ${d.fixedCount} 处`},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let e=await (0,E.NR)(a.finalMarkdown);if(e!==a.finalMarkdown){a.finalMarkdown=e,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"terminology-strip",status:"success",message:"内部术语句子确定性删除兜底:正文残留内部术语已删除"},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let f=(0,p._D)(a.finalMarkdown);if(f.fixedCount>0){a.finalMarkdown=f.markdown,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"toc-consistency",status:"success",message:`目录与正文一致性兜底:按正文实际结构重建目录 ${f.fixedCount} 处`},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}let g=await (0,ag.eA)({markdown:a.finalMarkdown,chapters:a.finalChapterDrafts,model:a.tenderRequirements,similarity:a.requirementsSimilarity,signal:a.signal,diagnostics:a.generationDiagnostics});if(g.fixedCount>0){a.finalMarkdown=g.markdown,await a.recomputeFinalValidationBundle();let b=(0,r.X5)({type:"validation",roleId:"scoring-requirement-fix-final",status:"success",message:`评分项响应终检补写:${g.fixedCount} 条(${g.details.slice(0,3).join("、")})`,details:g.details.slice(3)},{subtitle:"评审后兜底"});(0,r.fx)(a.progressStages,b),(0,r.fx)(a.finalGateRepairStages,b)}}let cp=/(?:\d+(?:\.\d+)?\s*(?:W|kW|kV|V|A|Hz|mm|cm|m|km|kg|g|t|K|MPa|kN|℃|%|L|mL|s|h|min)\b|C\d{2,}|HRB\d+|HPB\d+|DN\s*\d+|Φ\s*\d+(?:\.\d+)?|φ\s*\d+(?:\.\d+)?|\d+(?:\.\d+)?\s*[×x*]\s*\d+(?:\.\d+)?)/giu;function cq(a){return[...new Set((a.match(cp)||[]).map(a=>a.replace(/\s+/gu,"").trim()))].filter(Boolean).slice(0,8)}function cr(a,b=[]){return[...new Set(`${a} ${b.join(" ")}`.match(/[\p{Script=Han}]{2,}|[A-Za-z0-9_-]{3,}/gu)||[])].filter(a=>a.length>=2)}let cs=/(?:\d+(?:\.\d+)?\s*(?:mm|cm|m|km|㎡|m²|m3|m³|kg|g|t|K|L|ml|MPa|kPa|kN|N|℃|%|台|套|座|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元|W|kW|kV|V|A|Hz|米|处|道|根|盏|株|标段|层|樘|孔|眼|间|户|栋|幢|d)\b|DN\s*\d+|Φ\s*\d+(?:\.\d+)?|φ\s*\d+(?:\.\d+)?|C\d{2,}|HRB\d+|HPB\d+)/giu;function ct(a){return a.replace(/\s+/gu,"").toLowerCase()}function cu(a){return[...new Set((a.match(cs)||[]).map(ct))]}async function cv(a){let b=function(a){let b=new Set;for(let c of a.allEvidence)if(c.content)for(let a of cu((0,g.eE)(c.content)))b.add(a);let c=a.input.billFactLock;if(c)for(let a of c.entries){for(let c of cu(`${a.name} ${a.description} ${a.quantity}${a.unit}`))b.add(c);for(let c of cq(a.description))b.add(ct(c));for(let c of a.specQuantityPairs)for(let a of(b.add(ct(c.spec)),cu(c.quantity)))b.add(a)}let d=a.input.blueprintData?.quantities;if(d)for(let[a,c]of Object.entries(d))for(let d of("number"==typeof c.value&&Number.isFinite(c.value)&&b.add(ct(`${c.value}${c.unit||""}`)),cu(a)))b.add(d);for(let c of[...a.structuredFacts||[],...a.factsModel?.preciseFacts||[]])for(let a of cu((0,e.lG)(c.value)))b.add(a);return b}(a);if(0===b.size)return;let c=a=>{let c=[];for(let d of a.split(/[。;;!!??\n]/u).map(a=>a.trim()).filter(Boolean).filter(a=>!a.startsWith("#")&&(a.match(cs)??[]).length>0).map(a=>a.slice(0,160))){if(function(a){if(/高温|防暑|危大|专家论证|超过一定规模|40℃|37℃|35℃/u.test(a)||/第\s*\d+\s*(天|周|月|日|层|道|步|轮|批)/u.test(a))return!0;let b=a.match(cs)||[];return!!(b.length>0&&b.every(a=>/%$/u.test(a.trim()))&&/完成|进度|利用率|合格率|优良率|评标|得分|负荷/u.test(a)||b.every(a=>/^20\d{2}/u.test(a))&&/年/u.test(a)&&!/月|日/u.test(a))}(d))continue;let a=cu(d);if(0===a.length||a.every(a=>b.has(a)))continue;let e=a.filter(a=>!b.has(a));e.length>0&&c.push({sentence:d,tokens:e})}return c},d=new Map;for(let b of a.finalChapterDrafts){let a=c(b.content);a.length>0&&d.set(b.id,a.slice(0,12))}let h=[...d.values()].reduce((a,b)=>a+b.length,0);if(0===h){let c=(0,r.X5)({type:"validation",roleId:"numeric-verification",status:"success",message:"正文数值确定性核对通过:全部正文数值均在资料原文/清单事实锁/蓝图参数桶中找到同值来源",details:[`数值权威库规模:${b.size} 个归一化 token`]},{subtitle:"数值确定性核对"});(0,r.fx)(a.progressStages,c),(0,r.fx)(a.finalGateRepairStages,c),a.emitProgress(a.finalChapterDrafts,a.progressStages);return}let i=0,j=0;for(let[b,e]of d){let d=a.finalChapterDrafts.findIndex(a=>a.id===b);if(d<0)continue;let g=a.finalChapterDrafts[d],h=g.content,k=e,l=c(h).length,m=0,n=!1,o=!1,p=[l];for(;k.length>0&&m<2;){m+=1;let e=(0,r.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:"running",message:`正文数值核对发现 ${k.length} 处疑似无来源数值,第 ${m} 轮定向修复中:${g.title}`,details:k.map(a=>`疑似:${a.sentence}(缺来源 token:${a.tokens.join("、")})`)},{subtitle:"数值确定性核对"});(0,r.fx)(a.progressStages,e),(0,r.fx)(a.finalGateRepairStages,e),a.emitProgress(a.finalChapterDrafts,a.progressStages);let i=["【正文数值定向核对修复】",...m>1?[`本轮为第 ${m} 轮(最多 2 轮):上一轮修复后仍有残留,无法确认来源的数值必须直接删除,禁止保留或替换为其他无来源数值。`]:[],"下列句子中的数值(标注「缺来源 token」)在项目绑定材料、工程量清单与蓝图中均找不到同值来源,属于疑似编造数值。请逐句核对并修复:","1. 若该数值在本章绑定证据中确实存在(仅表述口径不同),保持数值原样,只修正单位或表述;","2. 若该数值是行业通用工艺参数(如养护龄期、分层厚度),可按规范惯例保留并改为规范原文表述;","3. 其余情况必须删除该数值,改写为不带具体数值的过程控制表述(如「按设计要求」「分层碾压至压实度满足设计及规范要求」);","禁止把疑似数值替换为另一个同样无来源的数值;禁止改动句子的非数值部分;只做局部修改,不得新增、删除或合并小节。",k.map(a=>`- 疑似句:${a.sentence}(缺来源 token:${a.tokens.join("、")})`).join("\n")].join("\n"),j=await b0({originalContent:h,repairRound:"numeric-verification",diagnostics:a.generationDiagnostics,apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,f.l8)({template:a.template,chapter:{id:g.id,title:g.title,content:h,evidence:g.evidence,missingFacts:g.missingFacts,sections:g.sections},issues:k.map(a=>`疑似无来源数值:${a.sentence}(token:${a.tokens.join("、")})`),promptTexts:i,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,f.XG)("numeric-verification",a.generationDiagnostics)}));return b.content&&b.content!==h?b.content:h},recheck:a=>[c(a).length]});j.rolledBack||j.content===h||(h=j.content,a.finalChapterDrafts[d]={...g,content:h},n=!0),j.rolledBack&&(o=!0);let q=c(h).length;if(p.push(q),0===q||q>=l||m>=2)break;l=q,k=c(h).slice(0,12)}n&&(i+=1);let q=c(h).length;j+=q;let s=(0,r.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:0===q?"success":"failed",message:0===q?`数值核对修复完成:${g.title}(${e.length} 处疑似数值已处理,残留轨迹 ${p.join("→")})`:n?`数值核对修复部分生效:${g.title}(疑似数值残留轨迹 ${p.join("→")},已执行 ${m} 轮定向修复(每章最多 2 轮);残留项以 warning 记录,不阻断交付)`:o?`数值核对修复已回滚:${g.title}(修复后疑似数值增多,保留修复前正文;残留 ${q} 处以 warning 记录,不阻断交付)`:`数值核对修复未生效:${g.title}(模型未产生有效修改;残留 ${q} 处以 warning 记录,不阻断交付)`,details:[...e.map(a=>`疑似:${a.sentence}`),q>0?`已执行 ${m} 轮定向修复,残留项以 warning 记录,不阻断交付`:""]},{subtitle:"数值确定性核对"});(0,r.fx)(a.progressStages,s),(0,r.fx)(a.finalGateRepairStages,s),a.emitProgress(a.finalChapterDrafts,a.progressStages)}i>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.generationDiagnostics.llm.lastInfo=`正文数值确定性核对:权威库 ${b.size} token,${h} 处疑似无来源数值,${i} 章完成定向修复,残留 ${j} 处(每章最多 2 轮收敛修复,未收敛残留以 warning 记录,不阻断交付)`}async function cw(a){let b=a.requirementSemantics;if(!b||!b.parsed||0===(b.globalRequirements||[]).length&&0===(b.chapterRequirements||[]).length)return;let c=[...b.globalRequirements||[],...(b.chapterRequirements||[]).flatMap(a=>a.requirements)].filter(Boolean).length,d=(b,c,d)=>a.withProgressHeartbeat(()=>(0,bo.bb)('你是投标文档用户要求核验专家。逐条核对「用户要求」是否已在章节正文中落实。\n\n判定口径:正文存在明确满足该要求的实质性内容即算落实;仅泛泛提及、半句带过、被其他内容顶替均算未落实。\n\n不得因为正文有其他内容就降低标准;用户要求是最高优先级,未落实必须如实列入 unmet。\n\n只返回 JSON:{"satisfied":true/false,"unmet":["未落实要求原文"]}。',[`章节标题:${b}`,`用户要求(逐条核验):
|
|
53
53
|
${d.map((a,b)=>`${b+1}. ${a}`).join("\n")}`,`章节正文:
|
|
54
54
|
${c.slice(0,12e3)}`].filter(Boolean).join("\n\n"),{maxTokens:1200,temperature:0,signal:a.signal,diagnostics:a.generationDiagnostics,prefixKey:"requirement-verification"})),e=(c,d,e,g)=>{let h=["【用户要求定向补写修复】",...g>1?[`本轮为第 ${g} 轮(最多 2 轮):上一轮补写后复验仍判定未落实,请务必逐条直接补写实质性内容。`]:[],"下列用户要求经核验未在本章正文中落实。请逐条在正文最合适的位置补充落实,用户要求是最高优先级:","用户要求与系统默认规则冲突时以用户要求为准;已落实内容不得删除或改写;只做局部修改,不得新增、删除或合并小节。",d.map(a=>`- ${a}`).join("\n"),...b?.styleRequirements?.length?[`
|
|
55
55
|
风格要求(补写内容同样必须遵守):
|
|
@@ -218,7 +218,7 @@ ${b.content}`),content:b.content,roleId:a.fileRoleByPath.get(b.filePath),process
|
|
|
218
218
|
${e.content||""}`,h=(0,g.qq)(f);if(h<=0)continue;let i=d.file?.relativePath||c;b.push({chapterId:"project-basic",filePath:i,score:1+h,content:e.content,roleId:a.fileRoleByPath.get(i),processingType:a.fileProcessingByPath.get(i),sectionTitle:e.sectionTitle,source:"pinned-evidence"})}}let h=new Set;return b.sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}|${a.sectionTitle||""}|${(0,e.de)(a.content).slice(0,180)}`;return!h.has(b)&&(h.add(b),!0)})}function i(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 j(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 k(a,b){let c=`${b.sectionTitle||""}
|
|
219
219
|
${b.filePath}
|
|
220
220
|
${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 l(a){return`${a.sectionTitle||""}${a.content}`.slice(0,600)}function m(a,b,c,e){let f=b.map(b=>{let e=(0,d.A1)(b,a.requiredFacts)*j(a,b.processingType)+k(a,b),f=c.semantic?c.semantic.similarity(c.semantic.queryText,l(b)):0;return{...b,score:.5*e+10*f}});return(0,d.QR)(f,c,e)}function n(a,b,c){if(c<=0||b.length<=c)return b;let e=b.map(b=>({item:b,lexical:(0,d.A1)(b,a.requiredFacts)*j(a,b.processingType)+k(a,b)}));return e.sort((a,b)=>b.lexical-a.lexical),e.slice(0,c).map(a=>a.item)}function o(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 p(a){if((0,f.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},limit:20,weights:i(b),generationMode:!0});return(0,d.QR)(c.results.filter(b=>a.scopedFilePaths.includes(b.filePath)).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,{Ti:()=>n,_H:()=>m,re:()=>l});let d=/^(?:为|达|共|约|计|配置|共计|总计|合计)$/u,e=/作业人员|施工人员|人员配置|班组|施工组|每村|分组|编组|编入|队伍/u,f=/^(?:为|达|共|约|计|配置|共计|总计|合计|投入|配备|启用)$/u,g=/^[))、::,,\s]{0,2}(?:混凝土|砼)?\s*(\d+(?:\.\d+)?)\s*(m3|m³|立方米|方|m2|m²|㎡|平方米|延长米|米|m|kg|千克|公斤|t|吨|套|个|块|根|只|组|件|片|樘|扇|盏|座|台|处|项|条|副|对|株)(?![A-Za-z0-9²³])/u,h=/^([^0-9]{0,2}?)(\d+(?:\.\d+)?)\s*人/u,i=/^([^0-9]{0,2}?)(\d+(?:\.\d+)?)\s*台/u,j=/阶段[^。;\n]{0,30}?(\d+(?:\.\d+)?)\s*人/u;function k(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 l(a){if(!a)return;let b=(a.resources?.labor?.composition??[]).filter(a=>a.trade&&Number.isFinite(a.count)&&a.count>0).map(a=>({trade:a.trade,count:a.count})),c=new Map;for(let b of a.resources?.equipment??[]){if(!b.name)continue;let a=c.get(b.name);a?a.push(b):c.set(b.name,[b])}let d=[];for(let[a,b]of c)for(let c of b){let e=c.quantity&&c.quantity>0?c.quantity:Math.round(((c.min??1)+(c.max??c.min??1))/2);Number.isFinite(e)&&!(e<=0)&&d.push({name:a,spec:c.spec||"",count:e,variantCount:b.length})}let e=new Map;for(let b of a.materialsPlan??[]){if(!b.name)continue;let a=e.get(b.name);a?a.push(b):e.set(b.name,[b])}let f=[];for(let[a,b]of e)if(!(b.length<2))for(let c of b){if(!c.spec||!Number.isFinite(c.quantity)||(c.quantity??0)<=0)continue;let d=k(c.unit||"");d&&f.push({name:a,spec:c.spec,quantity:c.quantity,unit:c.unit||"",family:d,variantCount:b.length})}return{composition:b,equipment:d,materials:f}}function m(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=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),p=[];for(let b of o){let c=a.slice(b.start,b.end);if(!c.includes("阶段"))continue;let e=[];for(let a of c.matchAll(RegExp(j.source,"gu")))e.push({start:b.start+(a.index??0),total:Number(a[1])});if(0!==e.length)for(let[c,f]of e.entries()){let g=f.start,i=e[c+1]?.start??b.end,j=a.slice(g,i),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),e=h.exec(c);e&&(!e[1]||d.test(e[1]))&&(k+=Number(e[2]))}k>0&&k===f.total&&p.push({start:g,end:i})}}let q=a=>p.some(b=>a>=b.start&&a<b.end);for(let f of b.composition)for(let b of n(a,f.trade)){if(q(b))continue;let g=a.slice(0,b),i=Math.max(g.lastIndexOf("。"),g.lastIndexOf(";"),g.lastIndexOf(";"),g.lastIndexOf("\n"));if(e.test(g.slice(i+1)))continue;let j=a.slice(b+f.trade.length,b+f.trade.length+12),k=h.exec(j);if(!k||k[1]&&!d.test(k[1]))continue;let l=Number(k[2]);if(l===f.count)continue;let m=b+f.trade.length+k[1].length;c.push({kind:"trade",label:`工种构成 ${f.trade}`,start:m,end:m+k[2].length,actual:l,expected:f.count,message:`工种构成人数与蓝图权威不一致:${f.trade} 正文 ${l} 人,蓝图权威 ${f.count} 人`,suggestion:"工种构成表必须与蓝图工种构成唯一口径一致,各工种人数不得自行改写。"})}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),g=i.exec(e);if(!g||g[1]&&!f.test(g[1]))continue;let h=Number(g[2]);if(h===d.count)continue;let j=b+d.name.length+g[1].length;c.push({kind:"equipment",label:`机械台数 ${d.name}`,start:j,end:j+g[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 d of b.materials)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 h=a.slice(e,f);if(/^\s*\|?\s*(?:合计|小计|总计|累计)/u.test(h))continue;let i=b-e,j=e+Math.max(h.lastIndexOf(";",i),h.lastIndexOf(";",i),h.lastIndexOf("。",i))+1,l=h.indexOf(";",i),m=h.indexOf(";",i),n=h.indexOf("。",i),o=Math.min(-1===l?h.length:l,-1===m?h.length:m,-1===n?h.length:n);if(!a.slice(j,e+o).includes(d.name))continue;let p=b+d.spec.length,q=a.slice(p,p+16),r=g.exec(q);if(!r||k(r[2])!==d.family)continue;let s=Number(r[1]);if(s===d.quantity)continue;let t=p+r[0].indexOf(r[1]);c.push({kind:"material",label:`材料拆分 ${d.name}(${d.spec})`,start:t,end:t+r[1].length,actual:s,expected:d.quantity,message:`材料规格拆分数量与蓝图权威不一致:${d.name}(${d.spec})正文 ${s}${d.unit},蓝图权威 ${d.quantity}${d.unit}`,suggestion:"同名多规格材料的拆分数量必须与清单逐项一致,不得自行分配。"})}return c}function n(a,b){if(!b)return{markdown:a,fixedCount:0,details:[],residualCount:0};let c=m(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=m(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,{M8:()=>m,Xp:()=>q,a0:()=>l,dn:()=>r,hM:()=>k,mI:()=>t,xb:()=>p});var d=c(37047),e=c(41991),f=c(70208);let g=["对与评标活动有关的工作人员的纪律要求","评标委员会成员与投标人接触的限制","评标纪律与廉洁从业承诺要求","评审争议处理与投标澄清配合程序","评审结果确认与中标公示流程","评标办法与分值构成说明","异常低价评审与计算方式说明","清单计量与报价口径约定","投标文件实质性响应要求","投标保证金缴纳与退还程序","开标程序与投标文件递交截止时间","评标期间行为管控与资料闭环","预付款与进度款支付比例约定","履约担保与保证金缴纳退还约定","价格波动与合同价款调整约定","暂列金额与暂估价使用约定","税费计取与发票结算约定","违约责任与罚款赔偿条款"],h=["劳动力配置计划与高峰期人数安排","施工质量保证措施与验收标准","安全生产管理与教育培训要求","施工进度计划与关键线路安排","材料设备采购进场计划与检验要求","施工现场文明施工与环境保护管理","劳动纪律与班组作业管理制度","施工机械设备配置与维护保养计划","农民工工资支付保障与劳务实名制管理","材料采购质量证明与进场验收管理","工期承诺与进度考核奖惩管理"],i=/评标|投标|行贿|打招呼|递条子|廉洁|串标|围标|弄虚作假|干扰评标|纪律|澄清|中标|报价|清单计量|评审|保证金|开标|递交|争议|异常低价|评标基准价|预付款|进度款|担保|价格波动|材料调差|暂列金额|暂估价|计税|税金|发票|违约/u;function j(a){let b=a.sectionTitle?.trim()||"",c=(a.content||"").replace(/\s+/gu," ").slice(0,400);return b?`${b}。${c}`:c}function k(a){let b=a.sectionTitle?.trim()||a.content.replace(/\s+/gu,"").slice(0,60);return`${a.filePath}::${b}`}async function l(a,b){if(0===a.length)return{safe:[],excluded:[]};let c=a.filter(a=>i.test(j(a)));if(0===c.length)return{safe:[...a],excluded:[]};let e=c.map(j),f=await (0,d.Mv)(e,[...g],b),k=await (0,d.Mv)(e,[...h],b),l=new Set;for(let a of c){let b=j(a),c=Math.max(...g.map(a=>f(b,a))),d=Math.max(...h.map(a=>k(b,a)));c>=.6&&c>d&&l.add(a)}return{safe:a.filter(a=>!l.has(a)),excluded:[...l]}}async function m(a){return(0,e.A)({prototypes:[...g],negativePrototypes:[...h],threshold:.6,embedDocuments:a})}function n(a){return a.replace(/[\s\p{P}\p{S}]+/gu,"").toLowerCase()}let o=/^(?:我公司|本公司|我方|投标人|供应商|承包人)(?:就|对)[^,。;]{0,22}(?:均属|属实|真实有效|承担|负责|无异议|为准)$/u;function p(a){let b=a.trim().replace(/\s+/gu,"");if(!b||(0,f.mq)(b)||o.test(b))return!0;let c=n(b);if(g.some(a=>n(a)===c))return!0;let d=b.replace(/农民工工资保证金|工资保证金/gu,""),e=/评标|投标|开标|中标|评审|保证金|串标|围标|廉洁|询标|递交/u.test(d),h=/纪律|监督|争议|澄清|程序|行为|管控|限制|接触|公示|承诺|响应|办法/u.test(b);return!!(e&&h||/异常低价|评标基准价/u.test(b)||/电子保函|保函|投标保证金|履约担保|履约保证金|保证金(?:的)?(?:缴纳|退还|提交|方式)/u.test(b)&&!/农民工|工资|专用账户|实名|考勤|劳资/u.test(b)||/暂列金额|暂估价|材料调差/u.test(b)||/预付款(?:支付|比例|约定|申请|保函)|进度款(?:支付|申请|计量|约定)|履约担保/u.test(b)||/价格波动(?:调整|约定)|违约金(?:条款|约定)|计税|税金(?:计取|结算)|发票(?:开具|结算)/u.test(b))||q(b)}function q(a){let b=a.trim().replace(/\s+/gu,"");if(!b)return!1;let c=b.replace(/^\d{1,3}(?:[..]\d{1,3})*[、..]?/u,"");return!!(/^具备(?:有效|相应|满足)/u.test(c)||/^(?:须|应|需|得)?提供[^,,。;]{0,12}(?:证明|材料|文件|证件|证书|报告)/u.test(c))||!!/营业执照|资质证书|安全生产许可证|资格预审|资格审查|资质审查|财务状况|业绩证明|业绩要求|银行资信|审计报告|信用记录|信用评价|不良行为记录|联合体投标|联合体协议/u.test(b)&&!/施工|技术|方案|措施|管理|控制|验收|工艺|流程|计划|组织|进度|质量|工期|文明|绿色|环保|节能|材料|设备|机械|人员|劳务|检验|检测|试验|保证|落实|制度/u.test(b)}function r(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&!!/投标人|投标方|承包人资格|资格要求|资格审查|资格预审|资质要求|资质条件|资质等级|资格条件|财务状况|业绩要求|业绩证明|信用要求|联合体/u.test(b)&&/营业执照|资质证书|安全生产许可证|级及以上资质|财务状况|财务报告|审计报告|银行资信|业绩证明|类似业绩|信用记录|信用评价|不良行为记录|投标保证金|履约保证金/u.test(b)}async function s(a){let b=a.sections.filter(a=>a?.trim());if(0===b.length)return[];let c=b.filter(a=>!p(a)),e=c.filter(a=>i.test(a));if(0===e.length)return c;let f=`${a.chapterTitle} ${a.chapterPurpose||""}`.trim(),j=await (0,d.Mv)(e,[...g],a.embedDocuments),k=await (0,d.Mv)(e,f?[f]:[],a.embedDocuments),l=await (0,d.Mv)(e,[...h],a.embedDocuments),m=new Set;for(let a of e){let b=Math.max(...g.map(b=>j(a,b))),c=f?k(a,f):0,d=Math.max(...h.map(b=>l(a,b)));b>=.6&&b>c&&b>d&&m.add(a)}return c.filter(a=>!m.has(a))}async function t(a,b){return Promise.all(a.map(async a=>({...a,sections:await s({sections:a.sections||[],chapterTitle:a.title,chapterPurpose:a.purpose,embedDocuments:b})})))}},73186:(a,b,c)=>{c.d(b,{Su:()=>i,U2:()=>k,Zq:()=>f,am:()=>j});var d=c(76760);function e(a){return d.resolve(a).replace(/\\/gu,"/").toLowerCase()}function f(a,b=[]){return{projectId:a,allowedFilePaths:[...new Set(b.filter(Boolean).map(e))]}}function g(a){return!!a?.allowedFilePaths.length}function h(a,b){if(!g(b))return!0;if(!a)return!1;let c=e(a);return b.allowedFilePaths.includes(c)}function i(a,b){return a.filter(a=>h(a.filePath,b))}function j(a,b){return a.filter(a=>h(a.sourceFile,b))}function k(a,b,c){if(!g(b))return;let d=a.filter(a=>!h(a.filePath,b));if(d.length>0){let a=d.slice(0,5).map(a=>a.filePath).join(";");throw Error(`EVIDENCE_SCOPE_VIOLATION:${c}:${a}`)}}},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))}},76193:(a,b,c)=>{c.d(b,{ll:()=>l,wF:()=>o,yT:()=>k}),c(51190),c(64406),c(10751);var d=c(93675);let e=new Set(["structure","table","fact_consistency","evidence_coverage","professional_chain","control_loop","format","style","scope"]),f=[{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:"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:"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:"internal-table-row-dup",kind:"deterministic",anchoredTo:"table-spam",giveUpOnFailure:!0},{id:"duplicate-basic-info-tables",kind:"deterministic",anchoredTo:"table-quality",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:"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:"empty-scoring-response",kind:"deterministic",anchoredTo:"requirements-coverage",giveUpOnFailure:!0},{id:"tender-meta-language",kind:"deterministic",anchoredTo:"formal-style",giveUpOnFailure:!0},{id:"forbidden-configuration",kind:"deterministic",anchoredTo:"formal-text-gate",giveUpOnFailure:!0},{id:"basis-regulation-region",kind:"deterministic",anchoredTo:"basis-regulations-coverage",authorities:["blueprint"],giveUpOnFailure:!0},{id:"work-injury-insurance",kind:"deterministic",anchoredTo:"local-adaptation-keyword",giveUpOnFailure:!0},{id:"duplicate-response-line",kind:"deterministic",anchoredTo:"duplicate-paragraph",giveUpOnFailure:!0},{id:"atlas-reference",kind:"deterministic",anchoredTo:"drawing-reference",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:"section-renumber",kind:"deterministic",anchoredTo:"section-numbering",giveUpOnFailure:!0}],g=[{id:"numeric-arbiter-concept",kind:"deterministic",anchoredTo:"parameter-concept-conflict",giveUpOnFailure:!0},{id:"numeric-arbiter-spec",kind:"deterministic",anchoredTo:"spec-location-mismatch",giveUpOnFailure:!0}],h=["source-enumeration","internal-terminology-anchor","fabricated-start-date","repeated-word","writer-missing-section","meta-discourse-declaration","formula-residue","finish-thickness","formal-placeholder","truncated-sentence"],i=[{id:"fact-landing",kind:"llm-patch",anchoredTo:"important-unplaced-facts",patchGuard:{detectors:[...h]},giveUpOnFailure:!0},{id:"table-repair",kind:"llm-patch",anchoredTo:"table-quality",patchGuard:{detectors:[...h]},giveUpOnFailure:!0},{id:"table-execution-repair",kind:"llm-patch",anchoredTo:"table-plan-execution",patchGuard:{detectors:[...h]},giveUpOnFailure:!0},{id:"templating-repair",kind:"llm-patch",anchoredTo:"templating-filler",patchGuard:{detectors:[...h]},giveUpOnFailure:!0},{id:"workpackage-skeleton-repair",kind:"llm-patch",anchoredTo:"workpackage-skeleton",patchGuard:{detectors:[...h]},giveUpOnFailure:!0},{id:"planned-section-repair",kind:"llm-patch",anchoredTo:"planned-section-completeness",patchGuard:{detectors:[...h]},giveUpOnFailure:!0},{id:"global-consistency-repair",kind:"llm-patch",anchoredTo:"global-consistency-review",patchGuard:{detectors:[...h]},giveUpOnFailure:!0}],j=new Set;function k(a,b){return j.add(a),b()}async function l(a,b){j.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),[{level:"warning",severity:"warning",category:"format",owner:"system",repairability:"manual_review",message:`交付前检测器「${a}」执行失败,已降级为待复核:${b}`,suggestion:"此为检测器基础设施异常,非正文内容缺陷;其余交付前检查已照常完成。可稍后重新生成复核,或人工复核该检测维度。"}]}}let m=[{id:"spec-gate-rules",scope:"full-document",category:"structure"},{id:"auto-spec-validation",scope:"full-document",category:"structure"},{id:"fact-consistency",scope:"full-document",category:"fact_consistency"},{id:"project-contamination",scope:"full-document",category:"scope"},{id:"project-basic-placeholder",scope:"full-document",category:"format"},{id:"standard-final",scope:"full-document",category:"structure"},{id:"fact-coverage",scope:"full-document",category:"evidence_coverage"},{id:"page-target",scope:"full-document",category:"structure"},{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},{id:"critical-section-depth",scope:"chapter",category:"structure"},{id:"critical-section-fact-density",scope:"chapter",category:"evidence_coverage"},{id:"chapter-fact-density",scope:"chapter",category:"evidence_coverage"},{id:"construction-org-professional-audit",scope:"chapter",category:"professional_chain"},{id:"toc-consistency",scope:"full-document",category:"structure",deterministicSafe:!0},{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"},{id:"requirements-coverage",scope:"full-document",category:"evidence_coverage"},{id:"fabricated-start-date",scope:"full-document",category:"fact_consistency",deterministicSafe:!0},{id:"field-value-mismatch",scope:"full-document",category:"fact_consistency",deterministicSafe:!0},{id:"area-arithmetic",scope:"full-document",category:"fact_consistency",deterministicSafe:!0},{id:"resource-consistency",scope:"full-document",category:"fact_consistency",authorities:["laborPeak"]},{id:"node-schedule-consistency",scope:"full-document",category:"fact_consistency"},{id:"cross-section-numeric-conflict",scope:"full-document",category:"fact_consistency"},{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"},{id:"spec-location-mismatch",scope:"full-document",category:"fact_consistency"},{id:"blueprint-citation-consistency",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"cross-project-value-copy",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{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"]},{id:"foundation-form-residue",scope:"full-document",category:"fact_consistency"},{id:"ambiguous-either-or",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"]},{id:"excavation-depth-lock",scope:"full-document",category:"fact_consistency"},{id:"excavation-hazard-classification",scope:"full-document",category:"fact_consistency"},{id:"support-form-fact-consistency",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"]},{id:"equipment-entry-timing",scope:"full-document",category:"fact_consistency"},{id:"fabricated-award",scope:"full-document",category:"fact_consistency"},{id:"bidder-qualification-section",scope:"full-document",category:"scope"},{id:"cross-chapter-duplicate-section",scope:"chapter",category:"structure"},{id:"basic-info-schedule-field",scope:"full-document",category:"fact_consistency"},{id:"duplicate-table",scope:"full-document",category:"table"},{id:"duplicate-paragraph",scope:"full-document",category:"structure"},{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"},{id:"support-system-conflict",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"]},{id:"dangerous-list-consistency",scope:"full-document",category:"fact_consistency"},{id:"hazard-exclusion-contradiction",scope:"full-document",category:"fact_consistency"},{id:"six-hundred-percent-coverage",scope:"full-document",category:"evidence_coverage"},{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:"repeated-word",scope:"full-document",category:"style",deterministicSafe:!0},{id:"commercial-data-in-body",scope:"full-document",category:"scope"},{id:"overview-recap",scope:"full-document",category:"style"},{id:"closure-phrase-density-cap",scope:"full-document",category:"style"},{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"},{id:"dangerous-applicability",scope:"full-document",category:"evidence_coverage"},{id:"innovation-tech-coverage",scope:"full-document",category:"evidence_coverage"},{id:"instruction-like-heading",scope:"full-document",category:"structure"},{id:"formal-heading-hierarchy",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"formal-content-integrity",scope:"full-document",category:"format",deterministicSafe:!0},{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:"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"},{id:"professional-score",scope:"chapter",category:"professional_chain"},{id:"generic-professional-content",scope:"chapter",category:"professional_chain"},{id:"management-measure-number",scope:"chapter",category:"professional_chain"},{id:"closed-loop-density",scope:"full-document",category:"control_loop"},{id:"cross-chapter-consistency",scope:"full-document",category:"fact_consistency"},{id:"process-spec-conflict",scope:"full-document",category:"fact_consistency"},{id:"evidence-usage-coverage",scope:"full-document",category:"evidence_coverage"},{id:"paragraph-generic",scope:"full-document",category:"style"},{id:"construction-org-generic-language",scope:"chapter",category:"style"},{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"},{id:"construction-org-chapter-data-coverage",scope:"chapter",category:"evidence_coverage"},{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"},{id:"construction-org-bonus-module",scope:"chapter",category:"professional_chain"},{id:"chapter-dependency",scope:"chapter",category:"professional_chain"},{id:"document-delivery-score",scope:"full-document",category:"professional_chain"},{id:"generated-fact-verification",scope:"full-document",category:"fact_consistency"},{id:"duplicate-basic-info",scope:"full-document",category:"structure"},{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"},{id:"precise-fact-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"},{id:"emergency-section-depth",scope:"full-document",category:"structure"},{id:"boq-row-trace",scope:"full-document",category:"evidence_coverage"},{id:"drawing-reference",scope:"full-document",category:"evidence_coverage"},{id:"web-evidence-leakage",scope:"full-document",category:"scope"},{id:"formal-placeholder",scope:"full-document",category:"format",deterministicSafe:!0},{id:"prompt-example-leak",scope:"full-document",category:"format"},{id:"degenerate-content",scope:"chapter",category:"style"},{id:"planned-auto-spec-gate",scope:"full-document",category:"structure"},{id:"planned-structure",scope:"full-document",category:"structure"},{id:"prompt-document-rule",scope:"full-document",category:"format"},{id:"local-adaptation-keyword",scope:"full-document",category:"evidence_coverage"},{id:"boq-division-coverage",scope:"full-document",category:"evidence_coverage"},{id:"important-unplaced-facts",scope:"chapter",category:"evidence_coverage"},{id:"table-plan-execution",scope:"chapter",category:"table"},{id:"templating-filler",scope:"full-document",category:"style"},{id:"templating-difficulty",scope:"full-document",category:"professional_chain"},{id:"workpackage-skeleton",scope:"chapter",category:"structure"},{id:"planned-section-completeness",scope:"chapter",category:"structure"},{id:"global-consistency-review",scope:"full-document",category:"fact_consistency"},{id:"source-enumeration",scope:"full-document",category:"style",deterministicSafe:!0},{id:"meta-discourse-declaration",scope:"full-document",category:"style",deterministicSafe:!0},{id:"finish-thickness",scope:"full-document",category:"fact_consistency",deterministicSafe:!0},{id:"formula-residue",scope:"full-document",category:"format",deterministicSafe:!0},{id:"truncated-sentence",scope:"full-document",category:"format",deterministicSafe:!0},{id:"block-structure-contract",scope:"chapter",category:"structure"},{id:"block-fact-density",scope:"chapter",category:"evidence_coverage"},{id:"block-templating",scope:"chapter",category:"style"},{id:"block-attribution-quantification",scope:"chapter",category:"professional_chain"},{id:"block-numeric-reconciliation",scope:"chapter",category:"fact_consistency"},{id:"block-format-constraints",scope:"chapter",category:"format"}];function n(a){return m.find(b=>b.id===a)}function o(){let a=[];for(let b of[...f,...g,...i]){let c=n(b.anchoredTo);if(!c){a.push(`修复器 ${b.id} 锚定检测器 ${b.anchoredTo} 未在注册表声明(检测定位=修复定位强制同源)`);continue}if(!function(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}(b.authorities,c.authorities)&&a.push(`修复器 ${b.id}(authorities=${JSON.stringify(b.authorities??[])})与锚定检测器 ${b.anchoredTo}(authorities=${JSON.stringify(c.authorities??[])})权威口径不一致`),"llm-patch"===b.kind&&!b.patchGuard){a.push(`LLM patch 修复器 ${b.id} 未声明 patchGuard(修复过程会重新引入已知坏内容,必须预检)`);continue}for(let c of b.patchGuard?.detectors??[]){let d=n(c);d?d.deterministicSafe||a.push(`修复器 ${b.id} patchGuard 引用检测器 ${c} 未标记 deterministicSafe(patchGuard 只收录零误伤确定性检测器)`):a.push(`修复器 ${b.id} patchGuard 引用检测器 ${c} 未在注册表声明`)}}for(let[b,c]of f.entries())f.slice(0,b).some(a=>a.id===c.id)&&a.push(`确定性修复器锚定声明重复:${c.id}`);let b=new Set(d.aW.map(a=>a.key));for(let c of b)f.some(a=>a.id===c)||a.push(`确定性修复器 ${c} 已接入 SURFACE_FIX_STEPS 但未在 DETERMINISTIC_FIXER_ANCHORS 声明锚定检测器`);for(let c of f)b.has(c.id)||a.push(`确定性修复器锚定声明 ${c.id} 无对应 SURFACE_FIX_STEPS 键(声明多余或键已改名)`);for(let[b,c]of g.entries())g.slice(0,b).some(a=>a.id===c.id)&&a.push(`数值裁决器修复器声明重复:${c.id}`);for(let b of m)b.category&&e.has(b.category)||a.push(`检测器 ${b.id} 声明了非法 category(当前=${b.category||"缺失"};合法值:${[...e].join("、")})`);if(a.length>0)throw Error(`检测器/修复器注册表一致性校验失败(${a.length} 项):
|
|
221
|
-
${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}}},81010:(a,b,c)=>{c.d(b,{C8:()=>al,dr:()=>av,OY:()=>at,DL:()=>ay,jM:()=>ad,RT:()=>ae,rR:()=>W,R3:()=>Z,iV:()=>au,RY:()=>$,Pd:()=>V,md:()=>ak,nR:()=>Y,m4:()=>X,eT:()=>ax,TF:()=>ai,Rx:()=>af,uw:()=>am,wY:()=>M,Fq:()=>az});var d=c(19898),e=c(73024),f=c(48161),g=c(76760),h=c(22213),i=c(1218),j=c(22157),k=c(38115),l=c(78217),m=c(3063);let n={seq:1,code:2,name:4,description:5,unit:6,quantity:8};function o(a){let b=a.map(a=>a.replace(/\s+/gu,""));return b.includes("序号")&&b.includes("项目编码")}function p(a){let b=a.map(a=>a.replace(/\s+/gu,"")),c=a=>b.findIndex(b=>a.includes(b)),d=c(["序号"]),e=c(["项目编码"]),f=c(["项目名称"]),g=c(["计量单位","单位"]),h=c(["工程量"]);if(!(d<0)&&!(e<0)&&!(f<0)&&!(g<0)&&!(h<0))return{seq:d,code:e,name:f,description:c(["项目特征描述"]),unit:g,quantity:h}}function q(a){return/^[一二三四五六七八九十\d]+(?:\.\d+)?$/u.test(a.trim())&&!r.test(a.trim())}let r=/^(?:\d{12}|(?:ZB|WB)\d{12})$/u,s=/工作表:(\d+(?:\.\d+)?)/u,t=/第1页\s*共(\d+)页/u,u=/工程名称:(.+?)\s*标段/u,v=/工程名称:([^\n||]{2,40}?)\s*$/mu,w=/第(\d+)页\s*共\d+页/gu;function x(a){let b=s.exec(a.sectionTitle);if(b)return b[1];let c=a.content.split("\n")[0]||"",d=s.exec(c);return d?d[1]:""}function y(a){let b=new Map;for(let c of a){let a=b.get(c.villageGroup)||[];a.push(c),b.set(c.villageGroup,a)}return b}var z=c(22496),A=c(95734),B=c(10751),C=c(48661);let D=[{zone:"east",pattern:/上海|江苏|浙江|安徽|福建|江西|山东/u,climate:{rainySeason:"6-8月",highTemp:"7-8月",winter:"12-2月"}},{zone:"south",pattern:/广东|广西|海南/u,climate:{rainySeason:"4-9月",highTemp:"6-9月",winter:"12-2月"}},{zone:"north",pattern:/北京|天津|河北|山西|内蒙古/u,climate:{rainySeason:"7-8月",highTemp:"7-8月",winter:"11-3月"}},{zone:"northeast",pattern:/辽宁|吉林|黑龙江/u,climate:{rainySeason:"7-8月",highTemp:"7月",winter:"11-3月"}},{zone:"northwest",pattern:/陕西|甘肃|宁夏|青海|新疆/u,climate:{rainySeason:"7-8月",highTemp:"7-8月",winter:"11-3月"}},{zone:"southwest",pattern:/四川|重庆|云南|贵州|西藏/u,climate:{rainySeason:"6-9月",highTemp:"7-8月",winter:"12-2月"}},{zone:"central",pattern:/湖北|湖南|河南/u,climate:{rainySeason:"6-8月",highTemp:"7-8月",winter:"12-2月"}}];function E(a){let b=`${a.name} ${a.description}`;return/塑料管|管道|检查井|雨水口|化粪池|涵管/u.test(b)?"管道铺设":/挖一般土方|挖沟槽|挖基坑|回填|清淤|余方|弃置|土方/u.test(b)&&"m3"===a.unit?"土方工程":/混凝土|垫层|涵头|压顶/u.test(b)&&"m3"===a.unit?"混凝土工程":/水泥混凝土|路床|铺装|道路|青砖|散水|块料/u.test(b)&&"m2"===a.unit?"道路铺装":/砌筑|砌体|砖/u.test(b)?"砌筑工程":/绿化|栽植|种植|苗木|草籽|喷播|灌木|乔木|色带|草坪/u.test(b)?"绿化工程":"安装工程"}let F={id:"village-municipal",projectTypes:["市政","园林绿化"],milestoneGroups:[{key:"prep",label:"施工准备与清杂拆除",pattern:/清杂|拆除|场地平整|临时/u},{key:"pipe",label:"污水管网工程",pattern:/塑料管|检查井|管网|排水|化粪池|雨水口/u},{key:"road",label:"道路铺装工程",pattern:/道路|路床|水泥混凝土|级配碎石|路缘石|青砖|散水|过路涵/u},{key:"landscape",label:"景观与绿化工程",pattern:/景观|绿化|栽植|种植|苗木|喷播|小菜园|沟塘|清淤/u},{key:"lighting",label:"亮化与收尾工程",pattern:/路灯|亮化|配电|电缆|防雷/u}],groupOfEntry:E,tradeMapping:[{trade:"管道工",pattern:/塑料管|管道|检查井|雨水口|化粪池|闭水|涵管|排水/u},{trade:"混凝土工",pattern:/混凝土|水泥砂浆|垫层|涵头|压顶/u},{trade:"瓦工",pattern:/砌筑|砌体|砖|路缘石|铺装|侧石|平石|块料|踏步|台阶/u},{trade:"绿化工",pattern:/绿化|栽植|种植|苗木|草籽|喷播|养护|灌木|乔木|色带|草坪/u},{trade:"电工",pattern:/路灯|配电|电缆|强电|防雷|接地|灯具|亮化/u},{trade:"普工",pattern:/土方|清杂|拆除|平整|回填|清淤|开挖/u}],laborUnitRange:{管道铺设:{unit:"m",min:.15,max:.3},土方工程:{unit:"m3",min:.08,max:.15},混凝土工程:{unit:"m3",min:.8,max:1.5},道路铺装:{unit:"m2",min:.3,max:.6},砌筑工程:{unit:"m3",min:1.2,max:2},绿化工程:{unit:"m2",min:.08,max:.15},安装工程:{unit:"项",min:0,max:0}},equipmentMapping:[{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/人机配合|开挖|挖土|沟槽/u,unit:"m3",basis:"人机配合开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"压路机",spec:"8~12t",pattern:/碾压|压实度/u,unit:"m2",basis:"路床碾压与压实度要求(清单特征)"},{name:"蛙式打夯机",spec:"",pattern:/回填|夯实/u,unit:"m3",basis:"沟槽回填夯实(清单条目)"},{name:"混凝土搅拌运输车",spec:"",pattern:/商品混凝土|C\d{2}混凝土/u,unit:"m3",basis:"商品混凝土运输(清单特征)"},{name:"插入式振捣器",spec:"",pattern:/混凝土浇筑|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"},{name:"洒水车",spec:"",pattern:/养护|绿化|喷播|栽植/u,unit:"m2",basis:"绿化养护与洒水(清单条目)"},{name:"高空作业车",spec:"",pattern:/路灯|灯具安装/u,unit:"套",basis:"路灯安装(清单条目)"}],machinePowerTable:[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"压路机",kw:75},{name:"蛙式打夯机",kw:3},{name:"混凝土搅拌运输车",kw:110},{name:"插入式振捣器",kw:1.5},{name:"洒水车",kw:90},{name:"高空作业车",kw:60}],laborCostRatio:{min:.15,max:.25},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"污水管网管道",namePattern:/塑料管|管道/u,unit:"m",divisor:200,descTemplate:"管道闭水试验分段检验,按每 200m 一段划分约 {count} 段(总长 {total}m)"},{scope:"道路工程",namePattern:/水泥混凝土|级配碎石|路床/u,unit:"m2",divisor:200,descTemplate:"路床压实度按每层每 200m\xb2 不少于 1 点检验,约 {count} 点(总面积 {total}m\xb2)"},{scope:"检查井",namePattern:/检查井/u,unit:"",divisor:1,descTemplate:"检查井逐座验收,共 {total} 座"}],difficultyTemplates:[{name:a=>`${a.villages.length} 个自然村分散施工组织协调`,measure:"按自然村分组划分施工段,多村平行施工 + 村内流水作业,配置专职协调员",basis:"清单按自然村分组",test:a=>a.villages.length>=2},{name:"雨季管网沟槽施工",measure:"雨季排水与边坡防护,分段开挖、快速回填(联动季节施工措施板块)",basis:"清单含沟槽开挖与管道铺设条目",test:a=>a.entries.some(a=>/挖沟槽|沟槽开挖|塑料管铺设/u.test(`${a.name} ${a.description}`))},{name:"村庄内道路施工交通疏导",measure:"分段封闭施工,设置临时道路保障居民出行(补疑条款:居民出行临时道路)",basis:"清单含道路工程条目且村内施工",test:a=>a.villages.length>0&&a.entries.some(a=>/道路|路床|路面/u.test(a.name))},{name:"既有杆管线保护",measure:"开挖前探测交底,杆线保护措施费含在清单单价内",basis:"清单特征原文含杆线保护条款",test:a=>a.entries.some(a=>/杆线|管线保护|既有管线/u.test(a.description))}],deploymentFlowFallback:"分区段流水作业",multiVillageFlow:a=>`多村平行施工 + 村内流水作业(${a} 个自然村分组)`,sequenceFallback:"清杂拆除 → 管网道路 → 景观绿化 → 亮化收尾",climateZone:"east",powerFallbackText:"临时用电以村庄既有电源分散接入为主,各施工组单独设置配电箱与计量表(柴油机械不计入用电负荷,电动机具零星分散)",waterNoteText:"施工用水以洒水车供水为主,总用水量按管网分段配置"},G={id:"building",projectTypes:["房建","装饰装修"],milestoneGroups:[{key:"prep",label:"施工准备与三通一平",pattern:/清杂|拆除|场地平整|临建|临时|三通一平/u},{key:"foundation",label:"基础工程",pattern:/桩基|基础|基坑|地下室|降水|支护|土方|挖方|回填/u},{key:"structure",label:"主体结构工程",pattern:/钢筋|模板|砌体|主体|框架|剪力墙|现浇|混凝土/u},{key:"finish",label:"装饰装修工程",pattern:/装饰|抹灰|防水|保温|门窗|屋面|涂料|吊顶|幕墙/u},{key:"mep",label:"安装与收尾工程",pattern:/电气|给排水|暖通|消防|电梯|智能化|收尾|竣工|调试/u}],groupOfEntry:function(a){let b=`${a.name} ${a.description}`;return/土方|挖方|回填|弃置|清淤/u.test(b)&&"m3"===a.unit?"土方工程":/钢筋|植筋/u.test(b)?"钢筋工程":/模板|支模/u.test(b)?"模板工程":/混凝土|垫层|现浇/u.test(b)?"混凝土工程":/砌筑|砌体|砖/u.test(b)?"砌筑工程":/防水|卷材|涂膜/u.test(b)?"防水工程":/保温|挤塑|聚苯/u.test(b)?"保温工程":/装饰|抹灰|涂料|吊顶|幕墙|墙砖|地砖|油漆|门窗/u.test(b)?"装饰工程":/电气|给排水|配电|照明|灯具|插座|管线|穿线|桥架|暖通|消防|电梯/u.test(b)?"安装电气":"安装工程"},tradeMapping:[{trade:"钢筋工",pattern:/钢筋|植筋/u},{trade:"模板工",pattern:/模板|支模/u},{trade:"防水工",pattern:/防水|卷材|涂膜/u},{trade:"架子工",pattern:/脚手架|外架/u},{trade:"抹灰工",pattern:/抹灰|粉刷|抹面/u},{trade:"水电工",pattern:/电气|给排水|配电|照明|灯具|插座|管线|穿线|桥架/u},{trade:"保温工",pattern:/保温|挤塑|聚苯/u},{trade:"混凝土工",pattern:/混凝土|水泥砂浆|垫层/u},{trade:"瓦工",pattern:/砌筑|砌体|砖|块料|铺装|墙砖|地砖/u},{trade:"普工",pattern:/土方|清杂|拆除|平整|回填|清淤|开挖/u}],laborUnitRange:{土方工程:{unit:"m3",min:.08,max:.15},钢筋工程:{unit:"t",min:.8,max:1.5},模板工程:{unit:"m2",min:.3,max:.6},混凝土工程:{unit:"m3",min:.8,max:1.5},砌筑工程:{unit:"m3",min:1.2,max:2},防水工程:{unit:"m2",min:.06,max:.12},保温工程:{unit:"m2",min:.15,max:.3},装饰工程:{unit:"m2",min:.2,max:.4},安装电气:{unit:"m",min:.08,max:.15},安装工程:{unit:"项",min:0,max:0}},equipmentMapping:[{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/开挖|挖土|基坑|土方/u,unit:"m3",basis:"土方开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"插入式振捣器",spec:"",pattern:/混凝土浇筑|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"},{name:"蛙式打夯机",spec:"",pattern:/回填|夯实/u,unit:"m3",basis:"回填夯实(清单条目)"},{name:"塔式起重机",spec:"QTZ63",pattern:/塔吊|塔式起重机/u,unit:"项",basis:"主体结构垂直运输(清单特征)"},{name:"施工升降机",spec:"SC200/200",pattern:/施工电梯|施工升降机/u,unit:"项",basis:"人员与材料垂直运输(清单特征)"},{name:"钢筋加工机械",spec:"",pattern:/钢筋/u,unit:"t",basis:"钢筋加工(清单条目)"},{name:"电焊机",spec:"",pattern:/焊接|钢结构|预埋/u,unit:"t",basis:"钢结构焊接与预埋(清单条目)"},{name:"混凝土输送泵",spec:"",pattern:/泵送|混凝土泵/u,unit:"m3",basis:"混凝土泵送(清单特征)"}],machinePowerTable:[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"插入式振捣器",kw:1.5},{name:"蛙式打夯机",kw:3},{name:"塔式起重机",kw:45},{name:"施工升降机",kw:33},{name:"钢筋加工机械",kw:15},{name:"电焊机",kw:15},{name:"混凝土输送泵",kw:90},{name:"物料提升机",kw:11}],laborCostRatio:{min:.18,max:.3},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"钢筋工程",namePattern:/钢筋/u,unit:"t",divisor:60,descTemplate:"钢筋按进场检验批划分,每 60t 一批,约 {count} 批(总量 {total}t)"},{scope:"混凝土工程",namePattern:/混凝土/u,unit:"m3",divisor:100,descTemplate:"混凝土按浇筑批次留置标准养护试件,每 100m\xb3 一批,约 {count} 批(总量 {total}m\xb3)"},{scope:"砌体工程",namePattern:/砌体|砌筑/u,unit:"m3",divisor:250,descTemplate:"砌体工程按砌筑量划分检验批,每 250m\xb3 一批,约 {count} 批(总量 {total}m\xb3)"},{scope:"防水工程",namePattern:/防水/u,unit:"m2",divisor:0,descTemplate:"防水工程按施工段划分检验批并做蓄水(淋水)试验(总量 {total}m\xb2)"}],difficultyTemplates:[{name:"深基坑施工",measure:"分层开挖、及时支护与信息化监测,编制专项施工方案并按危大工程规定组织专家论证",basis:"清单特征含基坑开挖深度",test:a=>a.entries.some(a=>{let b=/(?:挖深|开挖深度|基坑深度|坑深)[^。;;]{0,12}(\d+(?:\.\d+)?)\s*m/u.exec(a.description);return!!b&&Number.parseFloat(b[1]||"0")>=3})},{name:"高支模施工",measure:"编制专项施工方案并组织专家论证,支架验收合格后方可浇筑",basis:"清单特征含支模高度",test:a=>a.entries.some(a=>/支模高度|高支模|模板支撑[^。;;]{0,12}\d+(?:\.\d+)?\s*m/u.test(`${a.name} ${a.description}`))},{name:"大体积混凝土施工",measure:"分层浇筑、测温养护,掺加缓凝剂与矿物掺合料控制水化热",basis:"清单特征含大体积混凝土/筏板基础",test:a=>a.entries.some(a=>/大体积|基础底板|筏板/u.test(`${a.name} ${a.description}`))},{name:"垂直运输组织",measure:"塔吊与施工电梯合理布位,编制群塔作业防碰撞方案",basis:"清单特征含塔吊/施工电梯",test:a=>a.entries.some(a=>/塔吊|塔式起重机|施工电梯|施工升降机/u.test(`${a.name} ${a.description}`))},{name:"紧邻既有建筑保护",measure:"开工前房屋现状鉴定,设置沉降观测点,控制开挖对周边扰动",basis:"清单特征含紧邻既有建筑",test:a=>a.entries.some(a=>/紧邻|既有建筑|相邻建筑|周边建筑/u.test(a.description))}],deploymentFlowFallback:"分区段流水作业",sequenceFallback:"施工准备 → 基础工程 → 主体结构 → 装饰装修 → 安装收尾",climateZone:"central",powerFallbackText:"临时用电由现场总配电箱接入,采用 TN-S 三相五线制,各分配电箱单独计量(柴油机械不计入用电负荷)",waterNoteText:"施工用水以市政供水为主,总用水量按施工段分区配置"},H={id:"general",projectTypes:["其他"],milestoneGroups:[{key:"prep",label:"施工准备",pattern:/清杂|拆除|场地平整|临建|临时/u},{key:"main",label:"主体工程",pattern:/主体|结构|混凝土|钢筋|模板|砌体|土方|基础|安装/u},{key:"finish",label:"装饰与附属工程",pattern:/装饰|抹灰|防水|保温|门窗|屋面|绿化|景观/u},{key:"install",label:"安装工程",pattern:/电气|给排水|暖通|消防|电梯|灯具|管线|设备/u},{key:"close",label:"收尾与验收",pattern:/收尾|竣工|验收|调试|移交|清理/u}],groupOfEntry:E,tradeMapping:F.tradeMapping,laborUnitRange:F.laborUnitRange,equipmentMapping:[{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/开挖|挖土|沟槽|土方/u,unit:"m3",basis:"土方开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"插入式振捣器",spec:"",pattern:/混凝土浇筑|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"},{name:"蛙式打夯机",spec:"",pattern:/回填|夯实/u,unit:"m3",basis:"回填夯实(清单条目)"},{name:"混凝土搅拌运输车",spec:"",pattern:/商品混凝土|C\d{2}混凝土/u,unit:"m3",basis:"商品混凝土运输(清单特征)"}],machinePowerTable:[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"插入式振捣器",kw:1.5},{name:"蛙式打夯机",kw:3},{name:"混凝土搅拌运输车",kw:110}],laborCostRatio:{min:.15,max:.25},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"混凝土工程",namePattern:/混凝土/u,unit:"m3",divisor:100,descTemplate:"混凝土按浇筑批次留置标准养护试件,每 100m\xb3 一批,约 {count} 批(总量 {total}m\xb3)"},{scope:"检查井",namePattern:/检查井/u,unit:"",divisor:1,descTemplate:"检查井逐座验收,共 {total} 座"}],difficultyTemplates:[],deploymentFlowFallback:"分区段流水作业",sequenceFallback:"施工准备 → 主体施工 → 装饰安装 → 收尾验收",climateZone:void 0,powerFallbackText:"临时用电按现场配电箱分区接入,各用电点单独计量(柴油机械不计入用电负荷,电动机具零星分散)",waterNoteText:"施工用水按现场水源分区配置,总用水量按施工段核定"},I={id:"bridge-tunnel",projectTypes:["桥梁与隧道"],milestoneGroups:[{key:"prep",label:"施工准备与临时设施",pattern:/清杂|拆除|场地平整|临建|临时|三通一平|测量放样/u},{key:"foundation",label:"基础工程",pattern:/桩基|钻孔|灌注桩|围堰|承台|基础|基坑|降水|支护/u},{key:"substructure",label:"下部结构工程",pattern:/桥墩|桥台|墩柱|盖梁|系梁|支座垫石|下部/u},{key:"superstructure",label:"上部结构工程",pattern:/箱梁|梁板|主梁|现浇梁|预制|预应力|张拉|架设|合龙|上部/u},{key:"tunnel",label:"隧道洞身工程",pattern:/隧道|洞身|仰拱|衬砌|锚杆|喷混|掌子面|二衬/u},{key:"finish",label:"桥面系附属与收尾",pattern:/桥面|铺装|护栏|伸缩缝|防撞|排水|照明|收尾|竣工|交安|绿化/u}],groupOfEntry:function(a){let b=`${a.name} ${a.description}`;return/灌注桩|桩基|钻孔|围堰|承台/u.test(b)?"桩基与基础工程":/桥墩|桥台|墩柱|盖梁|系梁|下部/u.test(b)?"下部结构工程":/箱梁|梁板|主梁|现浇梁|预制|预应力|张拉|架设|上部/u.test(b)&&"m3"===a.unit?"上部结构工程":/钢绞线/u.test(b)&&"t"===a.unit?"钢绞线工程":/隧道|洞身|仰拱|衬砌|锚杆|喷混|掌子面/u.test(b)?"隧道工程":/桥面|铺装|护栏|伸缩缝|防撞/u.test(b)?"桥面系工程":/土方|挖方|填方|回填|清淤/u.test(b)&&"m3"===a.unit?"土方工程":/钢筋|植筋/u.test(b)?"钢筋工程":/模板|支模/u.test(b)?"模板工程":/混凝土|现浇/u.test(b)?"混凝土工程":"安装工程"},tradeMapping:[{trade:"桩基工",pattern:/灌注桩|桩基|钻孔/u},{trade:"钢筋工",pattern:/钢筋|植筋/u},{trade:"模板工",pattern:/模板|支模/u},{trade:"混凝土工",pattern:/混凝土|现浇|垫层/u},{trade:"张拉工",pattern:/预应力|张拉|钢绞线/u},{trade:"焊工",pattern:/焊接|钢结构|预埋件/u},{trade:"起重工",pattern:/吊装|架设|梁体|龙门吊|架桥机/u},{trade:"隧道工",pattern:/隧道|洞身|衬砌|锚杆|喷混|掌子面/u},{trade:"普工",pattern:/土方|清杂|拆除|平整|回填|清淤|开挖/u}],laborUnitRange:{桩基与基础工程:{unit:"m3",min:4,max:7},下部结构工程:{unit:"m3",min:1.5,max:3},上部结构工程:{unit:"m3",min:4,max:8},钢绞线工程:{unit:"t",min:1.5,max:3},隧道工程:{unit:"m3",min:1.5,max:3},桥面系工程:{unit:"m2",min:.4,max:.8},土方工程:{unit:"m3",min:.08,max:.15},钢筋工程:{unit:"t",min:.8,max:1.5},模板工程:{unit:"m2",min:.3,max:.6},混凝土工程:{unit:"m3",min:.8,max:1.5},安装工程:{unit:"项",min:0,max:0}},equipmentMapping:[{name:"旋挖钻机",spec:"",pattern:/钻孔|灌注桩|桩基/u,unit:"m3",basis:"桩基成孔(清单条目)"},{name:"泥浆泵",spec:"",pattern:/灌注桩|钻孔/u,unit:"m3",basis:"钻孔泥浆循环(清单条目)"},{name:"履带式起重机",spec:"",pattern:/吊装|梁体|预制/u,unit:"项",basis:"构件吊装(清单特征)"},{name:"架桥机",spec:"",pattern:/架设|架梁|箱梁/u,unit:"项",basis:"梁体架设(清单条目)"},{name:"张拉设备",spec:"",pattern:/预应力|张拉|钢绞线/u,unit:"束",basis:"预应力张拉(清单条目)"},{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/开挖|挖土|基坑|土方/u,unit:"m3",basis:"土方开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"混凝土输送泵",spec:"",pattern:/泵送|混凝土泵/u,unit:"m3",basis:"混凝土泵送(清单特征)"},{name:"插入式振捣器",spec:"",pattern:/混凝土浇筑|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"}],machinePowerTable:[{name:"旋挖钻机",kw:130},{name:"泥浆泵",kw:22},{name:"履带式起重机",kw:110},{name:"架桥机",kw:90},{name:"张拉设备",kw:7.5},{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"混凝土输送泵",kw:90},{name:"插入式振捣器",kw:1.5}],laborCostRatio:{min:.12,max:.22},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"桩基工程",namePattern:/灌注桩|桩基/u,unit:"",divisor:1,descTemplate:"钻孔灌注桩逐桩检验(桩位/孔径/沉渣厚度/混凝土充盈系数),共 {total} 根"},{scope:"钢筋工程",namePattern:/钢筋/u,unit:"t",divisor:60,descTemplate:"钢筋按进场检验批划分,每 60t 一批,约 {count} 批(总量 {total}t)"},{scope:"混凝土工程",namePattern:/混凝土/u,unit:"m3",divisor:100,descTemplate:"混凝土按浇筑批次留置标准养护试件,每 100m\xb3 一批,约 {count} 批(总量 {total}m\xb3)"},{scope:"预应力张拉",namePattern:/预应力|钢绞线/u,unit:"束",divisor:0,descTemplate:"预应力孔道逐束张拉并记录伸长值(总量 {total} 束)"}],difficultyTemplates:[{name:"深水基础施工",measure:"围堰施工与排水方案专项设计,汛期前完成基础施工,设置水位监测",basis:"清单特征含围堰/深水基础",test:a=>a.entries.some(a=>/围堰|深水|水中墩|钢板桩/u.test(`${a.name} ${a.description}`))},{name:"大体积混凝土施工",measure:"分层浇筑、测温养护,掺加缓凝剂与矿物掺合料控制水化热",basis:"清单特征含承台/大体积混凝土",test:a=>a.entries.some(a=>/承台|大体积|基础底板/u.test(`${a.name} ${a.description}`))},{name:"预应力张拉控制",measure:"张拉设备标定,双控(应力+伸长值)张拉,孔道压浆密实",basis:"清单特征含预应力/钢绞线",test:a=>a.entries.some(a=>/预应力|张拉|钢绞线/u.test(`${a.name} ${a.description}`))},{name:"隧道开挖与支护",measure:"超前地质预报,短进尺、弱爆破、强支护,监控量测信息化施工",basis:"清单特征含隧道洞身开挖",test:a=>a.entries.some(a=>/隧道|洞身|掌子面/u.test(`${a.name} ${a.description}`))},{name:"架梁起重吊装",measure:"编制吊装专项方案,吊装前试吊与支腿地基验算,专职指挥",basis:"清单特征含梁体架设",test:a=>a.entries.some(a=>/架设|架梁|架桥机|吊装/u.test(`${a.name} ${a.description}`))},{name:"高空作业安全控制",measure:"高墩作业平台封闭防护,设置安全网与临边防护,恶劣天气停止作业",basis:"清单特征含高墩/墩柱",test:a=>a.entries.some(a=>/高墩|墩柱|盖梁/u.test(`${a.name} ${a.description}`))}],deploymentFlowFallback:"分区段流水作业",sequenceFallback:"施工准备 → 基础工程 → 下部结构 → 上部结构 → 隧道洞身 → 桥面系与收尾",climateZone:void 0,powerFallbackText:"临时用电由现场总配电箱接入,采用 TN-S 三相五线制,各用电点单独计量(柴油机械不计入用电负荷)",waterNoteText:"施工用水以现场水源为主,总用水量按施工段核定"},J={id:"highway",projectTypes:["公路"],milestoneGroups:[{key:"prep",label:"施工准备",pattern:/清杂|拆除|场地平整|临建|临时|三通一平|测量放样/u},{key:"subgrade",label:"路基工程",pattern:/路基|土方|挖方|填方|压实|软基|清表|路床/u},{key:"pavement",label:"路面工程",pattern:/路面|水稳|基层|沥青|面层|摊铺|碾压|级配/u},{key:"bridge",label:"桥涵工程",pattern:/桥梁|桥台|桥墩|桩基|梁板|涵洞|通道|台帽/u},{key:"safety",label:"交安与附属收尾",pattern:/护栏|标线|标志|交安|绿化|排水|边沟|收尾|竣工/u}],groupOfEntry:function(a){let b=`${a.name} ${a.description}`;return/土方|挖方|填方|清表|软基|路基/u.test(b)&&"m3"===a.unit?"土方工程":/水稳|基层|级配|路床/u.test(b)&&"m2"===a.unit?"路面基层":/沥青|面层|摊铺/u.test(b)&&"m2"===a.unit?"沥青面层":/混凝土|现浇/u.test(b)&&"m2"===a.unit?"混凝土路面":/混凝土|现浇/u.test(b)?"混凝土工程":/砌筑|砌体|边沟|护坡|挡墙/u.test(b)?"砌筑工程":/钢筋|植筋/u.test(b)?"钢筋工程":/护栏|标线|标志|交安|波形梁/u.test(b)?"交安设施":"安装工程"},tradeMapping:[{trade:"机械操作工",pattern:/土方|挖方|填方|清表|路基/u},{trade:"压路机司机",pattern:/碾压|压实|路基|路面/u},{trade:"摊铺机司机",pattern:/摊铺|沥青|水稳|基层/u},{trade:"混凝土工",pattern:/混凝土|现浇|垫层/u},{trade:"钢筋工",pattern:/钢筋|植筋/u},{trade:"瓦工",pattern:/砌筑|砌体|边沟|护坡|挡墙/u},{trade:"交安工",pattern:/护栏|标线|标志|交安|波形梁/u},{trade:"普工",pattern:/清杂|拆除|平整|回填|清淤/u}],laborUnitRange:{土方工程:{unit:"m3",min:.08,max:.15},路面基层:{unit:"m2",min:.2,max:.4},沥青面层:{unit:"m2",min:.08,max:.15},混凝土路面:{unit:"m2",min:.15,max:.3},混凝土工程:{unit:"m3",min:.8,max:1.5},砌筑工程:{unit:"m3",min:1.2,max:2},钢筋工程:{unit:"t",min:.8,max:1.5},交安设施:{unit:"m",min:.3,max:.6},安装工程:{unit:"项",min:0,max:0}},equipmentMapping:[{name:"推土机",spec:"",pattern:/清表|土方|填方|平整/u,unit:"m3",basis:"土方摊铺平整(清单条目)"},{name:"平地机",spec:"",pattern:/路基|路床|平整/u,unit:"m2",basis:"路床整平(清单条目)"},{name:"装载机",spec:"",pattern:/土方|挖方|填方|清运/u,unit:"m3",basis:"土方装载(清单条目)"},{name:"压路机",spec:"8~12t",pattern:/碾压|压实/u,unit:"m2",basis:"路基路面碾压(清单特征)"},{name:"摊铺机",spec:"",pattern:/摊铺|沥青|水稳/u,unit:"m2",basis:"路面摊铺(清单条目)"},{name:"沥青洒布车",spec:"",pattern:/沥青|透层|粘层/u,unit:"m2",basis:"沥青洒布(清单条目)"},{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/开挖|挖土|沟槽|土方/u,unit:"m3",basis:"土方开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"洒水车",spec:"",pattern:/养护|洒水/u,unit:"m2",basis:"养护洒水(清单条目)"}],machinePowerTable:[{name:"推土机",kw:75},{name:"平地机",kw:120},{name:"装载机",kw:160},{name:"压路机",kw:75},{name:"摊铺机",kw:110},{name:"沥青洒布车",kw:60},{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"洒水车",kw:90}],laborCostRatio:{min:.12,max:.2},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"路基压实",namePattern:/路床|路基|填方/u,unit:"m2",divisor:1e3,descTemplate:"路基压实度按每 1000m\xb2 不少于 1 点检测,约 {count} 点(总面积 {total}m\xb2)"},{scope:"水稳基层",namePattern:/水稳|基层/u,unit:"m2",divisor:1e3,descTemplate:"水稳基层按每 1000m\xb2 一个检验批,约 {count} 批(总面积 {total}m\xb2)"},{scope:"沥青面层",namePattern:/沥青|面层/u,unit:"m2",divisor:1e3,descTemplate:"沥青面层按每 1000m\xb2 一个检验批,约 {count} 批(总面积 {total}m\xb2)"}],difficultyTemplates:[{name:"软土地基处理",measure:"软基处理方案专项设计(换填/搅拌桩/预压),沉降观测控制填筑速率",basis:"清单特征含软基处理",test:a=>a.entries.some(a=>/软基|软土|换填|搅拌桩/u.test(`${a.name} ${a.description}`))},{name:"交通疏导与半幅施工",measure:"分段半幅封闭施工,设置临时交通标志与导流设施,保障社会车辆通行",basis:"清单特征含保通/半幅施工",test:a=>a.entries.some(a=>/保通|半幅|交通疏导|既有道路/u.test(`${a.name} ${a.description}`))},{name:"路面平整度控制",measure:"摊铺机连续匀速作业,接缝处理与碾压工艺控制,平整度逐层检测",basis:"清单特征含沥青面层",test:a=>a.entries.some(a=>/沥青|面层/u.test(`${a.name} ${a.description}`))},{name:"路基沉降控制",measure:"分层填筑碾压,设置沉降观测点,填筑速率与观测数据联动",basis:"清单特征含高填方路基",test:a=>a.entries.some(a=>/高填方|填方/u.test(`${a.name} ${a.description}`))}],deploymentFlowFallback:"分段平行流水作业",sequenceFallback:"施工准备 → 路基工程 → 路面工程 → 桥涵工程 → 交安与附属收尾",climateZone:void 0,powerFallbackText:"临时用电由现场总配电箱接入,各用电点单独计量(柴油机械不计入用电负荷)",waterNoteText:"施工用水以现场水源为主,总用水量按施工段核定"},K={id:"water-conservancy",projectTypes:["水利水电"],milestoneGroups:[{key:"prep",label:"施工准备与围堰导流",pattern:/清杂|拆除|围堰|导流|截流|临建|临时/u},{key:"earthwork",label:"土方与基础工程",pattern:/土方|挖方|填方|基础|基坑|清淤|疏浚|开挖/u},{key:"structure",label:"闸站结构工程",pattern:/混凝土|钢筋|模板|闸室|闸墩|泵站|翼墙|底板|消力池|挡墙|砌筑/u},{key:"metal",label:"金属结构与机电安装",pattern:/金属结构|闸门|启闭机|埋件|机电|水泵|电气/u},{key:"finish",label:"护坡堤防与收尾",pattern:/护坡|护岸|堤防|绿化|水土保持|收尾|竣工|验收/u}],groupOfEntry:function(a){let b=`${a.name} ${a.description}`;return/围堰|导流|截流|清淤|疏浚/u.test(b)||/土方|挖方|填方|回填|开挖/u.test(b)&&"m3"===a.unit?"土方工程":/闸门|启闭机|埋件|金属结构/u.test(b)&&"t"===a.unit?"金属结构安装":/护坡|护岸|堤防|格宾|浆砌/u.test(b)&&"m2"===a.unit?"护坡工程":/钢筋|植筋/u.test(b)?"钢筋工程":/模板|支模/u.test(b)?"模板工程":/混凝土|现浇|底板|闸室|闸墩|泵站|翼墙|消力池/u.test(b)&&"m3"===a.unit?"混凝土工程":/砌筑|砌体|砖|挡墙/u.test(b)?"砌筑工程":(/机电|水泵|电气/u.test(b),"安装工程")},tradeMapping:[{trade:"钢筋工",pattern:/钢筋|植筋/u},{trade:"模板工",pattern:/模板|支模/u},{trade:"混凝土工",pattern:/混凝土|现浇|底板|闸室|闸墩|泵站|翼墙|消力池/u},{trade:"瓦工",pattern:/砌筑|砌体|砖|挡墙|护坡/u},{trade:"金属结构安装工",pattern:/金属结构|闸门|启闭机|埋件/u},{trade:"机电安装工",pattern:/机电|水泵|电气|配电/u},{trade:"潜水工",pattern:/水下|潜水/u},{trade:"普工",pattern:/土方|清杂|拆除|平整|回填|清淤|开挖/u}],laborUnitRange:{土方工程:{unit:"m3",min:.08,max:.15},混凝土工程:{unit:"m3",min:1,max:2},砌筑工程:{unit:"m3",min:1.2,max:2},钢筋工程:{unit:"t",min:.8,max:1.5},模板工程:{unit:"m2",min:.3,max:.6},金属结构安装:{unit:"t",min:15,max:25},护坡工程:{unit:"m2",min:.2,max:.4},安装工程:{unit:"项",min:0,max:0}},equipmentMapping:[{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/开挖|挖土|基坑|土方|清淤/u,unit:"m3",basis:"土方开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"装载机",spec:"",pattern:/土方|挖方|填方|清运/u,unit:"m3",basis:"土方装载(清单条目)"},{name:"混凝土输送泵",spec:"",pattern:/泵送|混凝土泵|混凝土/u,unit:"m3",basis:"混凝土泵送(清单特征)"},{name:"履带式起重机",spec:"",pattern:/吊装|闸门|启闭机/u,unit:"",basis:"闸门与启闭机吊装(清单条目,不限计量单位)"},{name:"泥浆泵",spec:"",pattern:/围堰|降水|导流|排水/u,unit:"",basis:"基坑降水与排水(清单条目,不限计量单位)"},{name:"插入式振捣器",spec:"",pattern:/混凝土|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"},{name:"蛙式打夯机",spec:"",pattern:/回填|夯实/u,unit:"m3",basis:"回填夯实(清单条目)"}],machinePowerTable:[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"装载机",kw:160},{name:"混凝土输送泵",kw:90},{name:"履带式起重机",kw:110},{name:"泥浆泵",kw:22},{name:"插入式振捣器",kw:1.5},{name:"蛙式打夯机",kw:3}],laborCostRatio:{min:.15,max:.25},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"混凝土工程",namePattern:/混凝土/u,unit:"m3",divisor:100,descTemplate:"混凝土按浇筑批次留置标准养护试件,每 100m\xb3 一批,约 {count} 批(总量 {total}m\xb3)"},{scope:"土方回填",namePattern:/回填|填方/u,unit:"m3",divisor:200,descTemplate:"土方回填按每 200m\xb3 一个检验批检测压实度,约 {count} 批(总量 {total}m\xb3)"},{scope:"金属结构",namePattern:/闸门|启闭机/u,unit:"",divisor:1,descTemplate:"金属结构逐件验收(出厂合格证+安装调试记录),共 {total} 件"}],difficultyTemplates:[{name:"围堰导流与度汛",measure:"围堰按度汛标准设计施工,汛期值守与应急预案,度汛演练",basis:"清单特征含围堰/导流",test:a=>a.entries.some(a=>/围堰|导流|度汛|截流/u.test(`${a.name} ${a.description}`))},{name:"深基坑降水与支护",measure:"降水方案专项设计,分层开挖及时支护,周边沉降监测",basis:"清单特征含基坑降水",test:a=>a.entries.some(a=>/降水|基坑|支护/u.test(`${a.name} ${a.description}`))},{name:"大体积混凝土施工",measure:"分层浇筑、测温养护,掺加缓凝剂与矿物掺合料控制水化热",basis:"清单特征含底板/大体积混凝土",test:a=>a.entries.some(a=>/底板|大体积|消力池/u.test(`${a.name} ${a.description}`))},{name:"闸门启闭机安装精度控制",measure:"埋件安装精度预控,闸门与启闭机联动调试,止水严密性试验",basis:"清单特征含闸门/启闭机",test:a=>a.entries.some(a=>/闸门|启闭机/u.test(`${a.name} ${a.description}`))},{name:"水下作业安全控制",measure:"潜水作业双人值守,水下作业专项方案与应急预案",basis:"清单特征含水下作业",test:a=>a.entries.some(a=>/水下|潜水/u.test(`${a.name} ${a.description}`))}],deploymentFlowFallback:"分区段流水作业",sequenceFallback:"施工准备与围堰导流 → 土方与基础 → 闸站结构 → 金属结构与机电安装 → 护坡堤防与收尾",climateZone:void 0,powerFallbackText:"临时用电由现场总配电箱接入,各用电点单独计量(柴油机械不计入用电负荷)",waterNoteText:"施工用水以现场水源为主,总用水量按施工段核定"},L={type:"object",required:["meta","data","outline"],properties:{meta:{type:"object",required:!0,properties:{version:{type:"string",required:!0,minLength:1},docType:{type:"string",required:!0,minLength:1},createdAt:{type:"string",required:!0,minLength:1},sourceMaterials:{type:"array",required:!0,items:{type:"string"}}}},data:{type:"object",required:!0,properties:{project:{type:"object",required:!0,properties:{name:{type:"string",required:!0,minLength:1},scope:{type:"string",required:!0},works:{type:"array",required:!0,items:{type:"string"}}}},contract:{type:"object",required:!0,properties:{totalDays:{type:"number",required:!0},qualityStandard:{type:"string",required:!0},pricingFile:{type:"string",required:!0}}},milestones:{type:"array",required:!0,minItems:1,items:{type:"object"}},resources:{type:"object",required:!0,properties:{labor:{type:"object",required:!0},equipment:{type:"array",required:!0}}},materialsPlan:{type:"array",required:!0},redLineFacts:{type:"array",required:!0},quantities:{type:"object",required:!0},standardBlocks:{type:"array",required:!0},keyDifficulties:{type:"array",required:!0,minItems:1}}},outline:{type:"object",required:!0,properties:{chapters:{type:"array",required:!0,minItems:1}}}}};function M(a){let b=a.boundFilePaths.filter(a=>/工程量清单/u.test(a)&&a.toLowerCase().endsWith(".xls")).filter(a=>{let b=a.split("/").pop()||a;return!/封面|编制说明/u.test(b)});if(0===b.length)return{warning:`绑定资料中未识别到工程量清单 .xls 文件(${a.boundFilePaths.length} 份资料)`};let c=g.join(f.homedir(),".customize-agent","projects",(0,d.computeProjectId)(g.resolve(a.projectRoot)),"kb.db");if(!e.existsSync(c))return{warning:`项目知识库索引不存在:${c}`};let h=[],i=[];for(let a of b)try{let b=function(a,b){let c=new((0,d.loadBetterSqlite3)())(a,{readonly:!0});try{return c.pragma("busy_timeout = 10000"),c.prepare("SELECT chunk_index, content, section_title FROM kb_chunks WHERE relative_path = ? ORDER BY chunk_index").all(b).map(a=>({chunkIndex:a.chunk_index,content:a.content,sectionTitle:a.section_title||""}))}finally{c.close()}}(c,a);if(0===b.length){h.push(`${a}(索引无切片)`);continue}let e=function(a){let b=a.sourceFile||"",c={totalChunks:a.chunks.length,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0},d=[],e=[];for(let b of a.chunks){let a=b.sectionTitle,f=a.includes("表格路径声明");if(a.includes("附录")){c.skippedChunks++;continue}f?(e.push(b),c.declarationChunks++):"表格数据"===a||a.includes("表标题")||a.includes("第")||a.includes("工作表:")?(d.push(b),c.markdownChunks++):c.skippedChunks++}let f=new Map,g=a=>{let b=s.exec(a);if(!b)return;let c=b[1],d=f.get(c),e=u.exec(a)||v.exec(a),g=t.exec(a);d?(!d.villageGroup&&e&&(d.villageGroup=e[1].trim()),void 0===d.totalPages&&g&&(d.totalPages=Number(g[1]))):f.set(c,{villageGroup:e?e[1].trim():"",totalPages:g?Number(g[1]):void 0})};for(let a of d)g(a.sectionTitle),g(a.content.split("\n")[0]||"");let h=[],i="",j="",k="",l="plain",m=function(a){let b=[],c=!1;for(let d=0;d<a.length;d++){let e=a[d]??"";if(e.includes(".")){let e=d+1<a.length?a[d+1]??"":"",f=/^\d+$/u.test(e)&&e.length>=2;b.push(f?"unit-project":"subsection"),c=f}else/^\d+$/u.test(e)?b.push(c?"subsection":"section"):(b.push("section"),c=!1)}return b}(function(a){let b=[],c="",d=n;for(let e of a){let a=e.content.split("\n"),f=c;for(let e of(c="",a)){if(e.startsWith("|"))f.trim(),f=e;else{if(!f)continue;f+=e}if(!f.endsWith("|"))continue;let a=f.split("|").map(a=>a.trim());if(f="",o(a)){d=p(a)??d;continue}!a[d.seq]&&q(a[d.code]??"")&&a[d.name]&&"分部小计"!==a[d.name]&&b.push(a[d.code]??"")}f.trim()&&(c=f)}return b}(d)),z=-1,A=n,B="";for(let a of d){let d=x(a),e=d||B;d&&(B=d);let g=f.get(e),n=g?.villageGroup||e||"",s=a.content.split("\n"),u=i;i="";let v=function(a){if(t.exec(a))return 1;w.lastIndex=0;let b=w.exec(a);return w.lastIndex=0,b?Number(b[1]):void 0}(a.content);for(let d=0;d<s.length;d++){let e=s[d]||"";if(e.startsWith("|"))u.trim()&&c.droppedIncompleteRows++,u=e;else if(u)u+=e;else{let a=w.exec(e);a&&(v=Number(a[1])),w.lastIndex=0;continue}if(u.endsWith("|")){let c=u.split("|").map(a=>a.trim());u="",o(c)&&(A=p(c)??A);let d=c[A.seq]??"",e=c[A.code]??"",f=c[A.name]??"",g=v,i=function(a){let b=a.join(" "),c=/第(\d+)页\s*共\d+页/u.exec(b);return c?Number(c[1]):void 0}(c);if(i&&(v=i),/^\d+$/u.test(d)&&r.test(e)){let i=Number((c[A.quantity]??"").trim()),m={seq:Number(d),code:e,name:f,description:A.description>=0?c[A.description]??"":"",unit:c[A.unit]??"",quantity:Number.isFinite(i)?i:0,section:j,subsection:k,sectionKind:l,villageGroup:n,page:g,sourceFile:b,chunkIndex:a.chunkIndex,sourceKind:"markdown"};m.seq>0&&h.push(m)}else if(!d&&q(e)&&f&&"分部小计"!==f){let a=m[z+=1]??(e.includes(".")?"subsection":"section");"unit-project"===a?(j=f,k="",l="unit-project"):"section"===a?(j=f,k="",l="plain"):k=f}}}u.trim()&&(i=u)}i.trim()&&c.droppedIncompleteRows++;let C=[];for(let a of(B="",e)){let c=x(a),d=c||B;c&&(B=c);let e=f.get(d),g=e?.villageGroup||d||"";C.push(...function(a,b){let c,d,e=[],f=a.split("\n"),g=()=>{c&&"number"==typeof c.seq&&c.seq>0&&e.push({seq:c.seq,code:c.code||"",name:c.name||"",description:(c.description||"").trim(),unit:c.unit||"",quantity:"number"==typeof c.quantity?c.quantity:0,section:"",subsection:"",villageGroup:b.villageGroup,sourceFile:b.sourceFile,chunkIndex:b.chunkIndex,sourceKind:"declaration"}),c=void 0,d=void 0},h=a=>{if(!c||!d)return;let b=a.trim();if(b){if("seq"===d){let a=Number(b);Number.isFinite(a)&&a>0&&(c.seq=a)}else if("code"===d)c.code=(c.code||"")+b;else if("name"===d)c.name=(c.name||"")+b;else if("description"===d)c.description=(c.description||"")+(c.description?" ":"")+b;else if("unit"===d)c.unit=b;else if("quantity"===d){let a=Number(b);Number.isFinite(a)&&(c.quantity=a)}}};for(let a of f){if(/^R\d+C\d+$/u.test(a)){/^R\d+C1$/u.test(a)?(g(),c={},d="seq"):d=void 0;continue}if(/^序号:$/u.test(a)){d="seq";continue}if(/^项目编码:$/u.test(a)){d="code";continue}if(/^项目名称:$/u.test(a)){d="name";continue}if(/^项目特征描述:$/u.test(a)){d="description";continue}if(/^单位:$/u.test(a)){d="unit";continue}if(/^工程量:$/u.test(a)){d="quantity";continue}if(/^(?:人工费|机械费|暂估价|合价|金额.*)$/u.test(a)){d=void 0;continue}h(a)}return g(),e}(a.content,{villageGroup:g,sourceFile:b,chunkIndex:a.chunkIndex}))}let D=new Map;for(let a of h)D.set(`${a.villageGroup}|${a.seq}`,a);for(let a of C){let b=`${a.villageGroup}|${a.seq}`;D.has(b)||D.set(b,a)}let E=[...D.values()].sort((a,b)=>a.villageGroup.localeCompare(b.villageGroup,"zh-CN")||a.seq-b.seq);var F=E,G=h;let H=y(G);for(let a of F){let b;if("declaration"===a.sourceKind&&!a.section){for(let c of H.get(a.villageGroup)||[]){if(c.seq>a.seq)break;b=c}b&&(a.section=b.section,a.subsection=b.subsection,a.sectionKind=b.sectionKind)}}let I=[...f.values()].map(a=>a.villageGroup).find(Boolean);if(I&&E.every(a=>!a.section))for(let a of E)a.section=I,a.sectionKind="unit-project";let J=[];for(let[a,b]of y(E)){let c=b.map(a=>a.seq).sort((a,b)=>a-b),e=c[c.length-1]||0,g=[];for(let a=1;a<=e;a++)c.includes(a)||g.push(a);let h=function(a,b){for(let[c,d]of a)if(d.villageGroup===b)return{sheetId:c,...d}}(f,a),i=h?.totalPages,j=function(a,b,c){let d=new Set,e="";for(let f of a){let a=x(f),g=a||e;if(a&&(e=a),!c||g===c){if(!c&&!(f.content.split("\n")[0]||"").includes(b))continue;for(let a of(t.test(f.content)&&d.add(1),w.lastIndex=0,f.content.matchAll(w))){let b=Number(a[1]);d.add(b),b>1&&d.add(b-1)}w.lastIndex=0}}return[...d]}(d,a,h?.sheetId),k=i?Array.from({length:i},(a,b)=>b+1).filter(a=>!j.includes(a)):[],l=b.filter(a=>"declaration"===a.sourceKind).length,m=b.filter(a=>!a.code).length,n=b.filter(a=>!a.name).length,o=b.filter(a=>a.code&&!r.test(a.code)).length;J.push({villageGroup:a,sheetId:h?.sheetId||"",totalPagesDeclared:i,pagesCovered:j.sort((a,b)=>a-b),pagesMissing:k,entryCount:b.length,entrySeqMissing:g,entriesFromDeclaration:l,entriesWithoutCode:m,entriesWithoutName:n,entriesWithInvalidCode:o,complete:0===g.length&&b.length>0})}return J.sort((a,b)=>a.villageGroup.localeCompare(b.villageGroup,"zh-CN")),{entries:E,villages:J,totalEntries:E.length,sourceFile:b,complete:J.length>0&&J.every(a=>a.complete),diagnostics:c}}({chunks:b,sourceFile:a});e.totalEntries>0?i.push({filePath:a,boq:e}):h.push(`${a}(解析出 0 条目)`)}catch(b){h.push(`${a}(${b instanceof Error?b.message:String(b)})`)}if(0===i.length)return{warning:`清单解析失败:${h.join(";")}`};let j=1===i.length?i[0].boq:function(a){let b=a=>{let b=a.split("/").slice(-2)[0]||"",c=/^(\d+)/u.exec(b);return c?Number(c[1]):Number.MAX_SAFE_INTEGER},c=[...a].sort((a,c)=>b(a.filePath)-b(c.filePath)),d=[],e=[],f={totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0},g=new Set;for(let a of c){var h;let b=((h=a.filePath).split("/").pop()||h).replace(/\.xls$/iu,"").replace(/[\s\u00a0]+/gu,"")||"单位工程";if(g.has(b)){let a=2;for(;g.has(`${b}(${a})`);)a+=1;b=`${b}(${a})`}for(let c of(g.add(b),a.boq.entries))c.subsection=c.subsection||c.section,c.section=b,c.sectionKind="unit-project",c.villageGroup=b,d.push(c);for(let[c,d]of a.boq.villages.entries())e.push({...d,villageGroup:1===a.boq.villages.length?b:`${b}\xb7${d.villageGroup||`工作表${c+1}`}`});f.totalChunks+=a.boq.diagnostics.totalChunks,f.markdownChunks+=a.boq.diagnostics.markdownChunks,f.declarationChunks+=a.boq.diagnostics.declarationChunks,f.skippedChunks+=a.boq.diagnostics.skippedChunks,f.droppedIncompleteRows+=a.boq.diagnostics.droppedIncompleteRows}return{entries:d,villages:e,totalEntries:d.length,sourceFile:c.map(a=>a.filePath).join(";"),complete:e.length>0&&e.every(a=>a.complete),diagnostics:f}}(i);return h.length>0?{boq:j,warning:`部分清单文件解析失败(已并入其余 ${i.length} 份):${h.join(";")}`}:{boq:j}}function N(a){let b=new Map;for(let c of a.entries){if(!c.name)continue;let a=(c.villageGroup||c.section||"").trim(),d=b.get(c.name);if(d)d.total+=c.quantity,a&&d.groupTotals.set(a,(d.groupTotals.get(a)??0)+c.quantity);else{let d=new Map;a&&d.set(a,c.quantity),b.set(c.name,{value:c.quantity,unit:c.unit,sourceFile:c.sourceFile,seq:c.seq,total:c.quantity,groupTotals:d})}}let c={};for(let[a,d]of b){let b=a=>Math.round(1e3*a)/1e3,e=[...d.groupTotals.entries()].map(([a,c])=>({group:a,value:b(c)}));c[a]={value:b(d.total),unit:d.unit,sourceFile:d.sourceFile,seq:d.seq,groups:e.length>0?e:void 0}}return c}let O=[{key:"绿化养护期",namePattern:/养护/u,extract:a=>{let b=/(?:一级|二级)养护[^。;;]{0,20}/u.exec(a.description);return b?b[0].trim():void 0}},{key:"喷播草籽种类",namePattern:/喷播|草籽/u,extract:a=>{let b=/(?:草籽|种子)[^。;;]*?(?:荷兰菊|紫花地丁|白三叶)[^。;;]*/u.exec(a.description);if(b)return b[0].replace(/^[^::]*[::]?/u,"").trim();let c=/(?:荷兰菊|紫花地丁|白三叶)[^。;;]*/u.exec(a.description);return c?c[0].trim():void 0}},{key:"池塘清淤深度",namePattern:/清淤|清塘/u,extract:a=>{let b=/(?:清淤深度|深度)[^。;;]*?(\d+(?:\.\d+)?)\s*m/u.exec(a.description);return b?`清淤深度 ${b[1]}m`:void 0}},{key:"过路涵涵头混凝土",namePattern:/涵头|过路涵/u,extract:a=>{let b=/(C\d{2})[^。;;]*混凝土/u.exec(a.description)||/混凝土[^。;;]*(C\d{2})/u.exec(a.description);return b?`涵头混凝土 ${b[1]}`:void 0}},{key:"路肩土预留",namePattern:/路肩/u,extract:a=>{let b=/(\d+(?:\.\d+)?)\s*[-~至]\s*(\d+(?:\.\d+)?)\s*m/u.exec(a.description);return b?`两侧各预留 ${b[1]}-${b[2]}m`:void 0}},{key:"一般路灯",namePattern:/路灯/u,extract:a=>{let b=/(\d+)\s*W/u.exec(a.description),c=/高\s*(\d+(?:\.\d+)?)\s*m/u.exec(a.description);if(!b&&!c)return;let d=["一般路灯"];return b&&d.push(`${b[1]}W LED`),c&&d.push(`高${c[1]}m`),/含基础|含灯杆基础|灯杆基础/u.test(a.description)&&d.push("含基础"),d.join(" ")}},{key:"暂列金额",namePattern:/暂列金额/u,extract:a=>{let b=/(\d+(?:\.\d+)?)\s*万元/u.exec(a.description);return b?`${b[1]}万元`:void 0},amount:!0}];function P(a,b,c=F){let{laborCostRatio:d,dailyWage:e}=c,f=Math.max(30,Math.round(b)),g=1e4*a*d.min,h=1e4*a*d.max,i=g/e.max,j=h/e.min,k=Math.max(1,Math.round(i/f*1.3)),l=Math.max(k,Math.round(j/f*1.6));return{min:k,max:l,detail:`合同估算价 ${a} 万元 \xd7 人工费占比 ${Math.round(100*d.min)}%~${Math.round(100*d.max)}% \xf7 综合工日单价 ${e.min}~${e.max} 元 \xf7 有效工期 ${f} 天 \xd7 峰值系数 1.3~1.6`}}let Q=[/C\d{2,3}/u,/DN\d{2,4}/iu,/Φ\d+(?:\.\d+)?/u,/\d+(?:\.\d+)?\s*(?:kW|W)/iu,/厚(?:度)?[::]*\s*\d+(?:\.\d+)?\s*(?:mm|cm)/u,/\d+\s*[×xX]\s*\d+(?:\s*[×xX]\s*\d+)?\s*(?:mm|cm)?/u,/HRB\d{3,4}/u,/Q\d{3}[A-Z]?/u,/YJV[^。;;]{0,12}|VV\d+[^。;;]{0,12}/u],R=new Set(["挖掘机","自卸汽车","压路机","洒水车","高空作业车","混凝土搅拌运输车"]),S=[{id:"vertical_transport",label:"垂直运输方式",relevance:/塔吊|塔式起重机|施工电梯|施工升降机|物料提升机|垂直运输/u,options:[{value:"塔式起重机",aliases:/塔吊|塔式起重机/},{value:"施工升降机",aliases:/施工电梯|施工升降机/},{value:"物料提升机",aliases:/物料提升机/},{value:"汽车式起重机",aliases:/汽车吊|汽车式起重机/}]},{id:"formwork",label:"模板体系",relevance:/模板/u,exclusive:!0,options:[{value:"木胶合板模板",aliases:/木胶合板|覆膜胶合板|胶合板模板|木模板/},{value:"钢模板",aliases:/钢模板|定型钢模/},{value:"铝合金模板",aliases:/铝合金模板|铝模/},{value:"大模板",aliases:/大模板/},{value:"爬升模板",aliases:/爬升模板|爬模/}]},{id:"concrete_supply",label:"混凝土供应",relevance:/混凝土/u,exclusive:!0,options:[{value:"商品混凝土(预拌)",aliases:/商品混凝土|预拌混凝土/},{value:"自拌混凝土",aliases:/自拌混凝土|现场拌制混凝土|现场搅拌混凝土/}]},{id:"scaffold",label:"脚手架体系",relevance:/脚手架|爬架/u,options:[{value:"落地式钢管脚手架",aliases:/落地式[^,。;;]{0,6}脚手架|落地脚手架/},{value:"悬挑式脚手架",aliases:/悬挑[^,。;;]{0,6}脚手架|悬挑脚手架/},{value:"附着式升降脚手架",aliases:/附着式升降脚手架|爬架/},{value:"门式脚手架",aliases:/门式脚手架/},{value:"盘扣式脚手架",aliases:/盘扣/},{value:"碗扣式脚手架",aliases:/碗扣/}]},{id:"foundation_support",label:"基坑支护形式",relevance:/基坑|支护/u,exclusive:!0,options:[{value:"放坡开挖",aliases:/放坡/},{value:"土钉墙支护",aliases:/土钉墙|土钉支护/},{value:"灌注桩支护",aliases:/灌注桩|钻孔灌注桩|排桩支护/},{value:"钢板桩支护",aliases:/钢板桩|拉森桩/},{value:"地下连续墙",aliases:/地下连续墙|地连墙/},{value:"锚杆(索)支护",aliases:/锚杆|锚索/},{value:"喷锚支护",aliases:/喷锚/}]},{id:"earthwork_haul",label:"土方外运方式",relevance:/土方|渣土|弃土/u,options:[{value:"自卸汽车外运",aliases:/自卸汽车|自卸车/},{value:"密闭渣土车外运",aliases:/密闭式?[^,。;;]{0,4}车|渣土车/},{value:"场内平衡利用",aliases:/场内平衡|就地平衡|场内调配|回填利用/}]},{id:"foundation_form",label:"基础形式",relevance:/基础/u,options:[{value:"独立基础",aliases:/独立基础/},{value:"条形基础",aliases:/条形基础|带形基础/},{value:"筏板基础",aliases:/筏板基础|筏形基础|满堂基础/},{value:"桩基础",aliases:/桩基础|桩基/u},{value:"箱形基础",aliases:/箱形基础|箱型基础/}]},{id:"vibration_isolation",label:"设备减振方式",relevance:/减振|隔振|减震|振动/u,options:[{value:"减振吊架",aliases:/减振吊架|隔振吊架|减震吊架|弹性吊架/},{value:"减振基础",aliases:/减振基础|隔振基础|减震基础|惯性基础/},{value:"橡胶隔振垫",aliases:/橡胶隔振垫|橡胶减振垫|隔振垫/},{value:"弹簧减振器",aliases:/弹簧减振器|弹簧隔振器|阻尼弹簧减振器/}]},{id:"concrete_pouring",label:"混凝土浇筑连续组织",relevance:/浇筑/u,options:[{value:"连续浇筑",aliases:/连续浇筑|一次浇筑|整体浇筑/,weakAliases:/同步浇筑|同步施工|同步/u},{value:"分段浇筑",aliases:/分段浇筑|分仓浇筑|跳仓浇筑|分区浇筑/}]},{id:"pavement_structure",label:"路面结构类型",relevance:/路面|基层|面层|沥青|水泥稳定/u,exclusive:!0,options:[{value:"柔性路面",aliases:/沥青混凝土路面|沥青混凝土面层|沥青路面|沥青面层/,weakAliases:/柔性/u},{value:"半刚性路面",aliases:/半刚性/u},{value:"刚性路面",aliases:/刚性路面|水泥混凝土路面|水泥混凝土面层/}]}],T=/不采用|不使用|不设置|不考虑|不得|禁止|取消/u;function U(a){return a.split(/[,,、::]/u).map(a=>a.trim()).filter(Boolean)}function V(a){let b=function(a,b){let c=[];for(let a of b){let b=function(a){let b=`${a.filePath||""} ${a.roleId||""} ${a.sectionTitle||""}`;return/补疑|澄清|答疑|修正|更新/u.test(b)?100:/招标文件|招标公告|投标人须知|前附表/u.test(b)?90:/清单|工程量/u.test(b)||/图纸|设计|dwg|drawing/iu.test(b)?80:/规范|标准|规程/u.test(b)?60:50}(a);for(let d of(0,i.wj)((0,j.lG)(a.content)).split(/[。;;\n]/u)){let a=d.trim();a.length<6||a.length>200||c.push({text:a,weight:b})}}for(let b of a){let a=`${b.key||""} ${b.fieldName||""} ${(0,j.lG)(b.value)}`.trim();a.length<6||a.length>200||c.push({text:a,weight:Math.round(60*Math.max(.5,Math.min(1,b.confidence||.7)))})}return c}(a.facts,a.evidence),c=[];for(let a of S){let d=new Map;for(let c of b){if(!a.relevance.test(c.text))continue;let b=U(c.text);for(let e of a.options){let a=b.find(a=>e.aliases.test(a));if(!a||T.test(a))continue;let f=d.get(e.value)||{score:0,mentions:0,bestWeight:0};f.score+=c.weight,f.mentions+=1,f.bestWeight=Math.max(f.bestWeight,c.weight),d.set(e.value,f)}}let e=[...d.entries()].map(([a,b])=>({value:a,...b})).sort((a,b)=>b.score-a.score||b.mentions-a.mentions||(a.value<b.value?-1:1)),f=e[0];if(!f||f.bestWeight<60)continue;if(a.exclusive){c.push({id:a.id,label:a.label,values:[f.value]});continue}let g=Math.max(60,.4*f.score),h=e.filter(a=>a.score>=g).slice(0,3).map(a=>a.value);h.length>0&&c.push({id:a.id,label:a.label,values:h})}return c}function W(a){return S.find(b=>b.id===a)}function X(a,b){return S.find(c=>{let d=a=>c.options.some(b=>b.aliases.test(a)||b.weakAliases?.test(a));return c.options.some(c=>c.aliases.test(a)||c.aliases.test(b))&&d(a)&&d(b)})}function Y(a,b){for(let c of a.options){let a=c.aliases.exec(b);if(a)return{option:c,index:a.index,end:a.index+a[0].length}}for(let c of a.options){let a=c.weakAliases?.exec(b);if(a)return{option:c,index:a.index,end:a.index+a[0].length}}}function Z(a,b){let c=U(a).find(a=>b.test(a));return!!c&&T.test(c)}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}let _=[{item:"主要施工方法",weight:"1.5",chapterPattern:/主要分部分项|施工方案|施工方法/u},{item:"物资计划",weight:"0.5",chapterPattern:/物资|资源配置|材料/u},{item:"机械设备计划",weight:"0.5",chapterPattern:/机械|资源配置|设备/u},{item:"劳动力安排",weight:"0.5",chapterPattern:/劳动力|资源配置|人员/u},{item:"质量措施",weight:"1.5",chapterPattern:/质量/u},{item:"安全措施",weight:"1.5",chapterPattern:/安全/u},{item:"工期措施",weight:"1.0",chapterPattern:/工期|进度/u},{item:"文明施工",weight:"1.0",chapterPattern:/文明施工|环境保护|绿色施工/u},{item:"总平面布置图",weight:"0.5",chapterPattern:/总平面|平面布置/u},{item:"重难点及保证措施",weight:"1.5",chapterPattern:/重难点|重点|难点|概况/u}];function aa(a,b){let c=a.trim();if(/^其他$|^其他工程$/u.test(c)){let a=b.map(a=>a.name);return a.some(a=>/彩绘|护栏|围栏|小品|标识|标牌|墙面|整治/u.test(a))?"环境整治工程":a.some(a=>/绿化|栽植|铺装|种植/u.test(a))?"景观附属工程":a.some(a=>/拆除|清理|清淤|清运/u.test(a))?"清理整治工程":"零星工程"}return/^其他装饰/u.test(c)?"零星装饰工程":/^措施项目$/u.test(c)?b.map(a=>a.name).some(a=>/化粪池|吊装|安装/u.test(a))?"模板、脚手架及化粪池安装工程":"模板与脚手架工程":/墙[、,]?柱面装饰/u.test(c)?b.some(a=>/幕墙|隔断/u.test(a.name))?c:"墙柱面装饰工程":c}function ab(a){let b=[];for(let c of a.matchAll(/(?:\d+|[一二三四五六七八九十]+)[..、]\s*([^::;;。]{1,40}?)[::]\s*([^。;;\n]{1,80})/gu)){let a=c[1].trim(),d=c[2].trim();!/具体详见|其他|满足验收/u.test(a)&&!/(?:(?:详)?见|按)(?:设计|施工)?图纸|招标文件补疑/u.test(d)&&a&&d&&b.push({key:a,value:d})}return b}function ac(a,b){let c=[...b].sort((a,b)=>a.seq-b.seq),d={},e=new Map;for(let a of c)a.name&&e.set(a.name,(e.get(a.name)||0)+a.quantity);for(let[a,b]of e){let e=c.find(b=>b.name===a)?.unit||"";d[a]={value:Math.round(1e3*b)/1e3,unit:e}}let f=[...new Set(c.map(a=>a.name).filter(Boolean))].slice(0,16),g=function(a){let b=[];for(let c of a)for(let a of ab(c.description))/含|配合|安装|铺设|浇筑|夯实|碾压|养护|刻痕|拉毛|切缝|灌缝|喷播|栽植|回填|吊装|固定/u.test(a.value)&&a.value.length<=60&&b.push(`${c.name}:${a.value}`);return[...new Set(b)].slice(0,20)}(c),h=[],i=new Set;for(let a of c){for(let b of ab(a.description)){let a=`${b.key}=${b.value}`;if(!i.has(a)&&(i.add(a),h.push({key:b.key,value:b.value,source:"boq"}),h.length>=24))break}if(h.length>=24)break}let j=[];for(let a of c)for(let b of ab(a.description))/压实|试验|检测|验收|闭水|合格/u.test(`${b.key}${b.value}`)&&j.length<12&&!j.includes(b.value)&&j.push(b.value);let k=(0,z.cn)([a]),l=[];for(let a of(0===j.length&&k.length>0&&j.push(...k[0].acceptance.slice(0,6).map(a=>`${a}(知识卡)`)),k.slice(0,2)))for(let b of a.standards)l.includes(b)||l.push(b);return{name:a,kind:"major",quantities:d,processChain:f,methods:g,params:h,acceptance:j,standards:l,source:"boq",coveredSeqs:c.map(a=>a.seq)}}function ad(a,b){if(b)return b.needsBlueprintAuthority(a);let c=[];return/劳动力/u.test(a)&&c.push("laborPeak"),/资源配置|资源|机械|设备|机具/u.test(a)&&c.push("blueprint"),/进度计划|进度|工期/u.test(a)&&c.push("schedule"),[...new Set(c)]}function ae(a,b,c){let d=ad(a,c),e=b?b.checks.filter(a=>!a.passed).map(a=>a.name):[],f=b?.authorityAvailability;return f?{missing:d.filter(a=>!f[a]),failedChecks:e}:{missing:d,failedChecks:e}}function af(a,b){let c=["【一体化蓝图参数桶——全项目口径唯一权威源,正文引用必须与此一致,不得自行推导不同数值】"];return c.push("计划类数值(劳动力人数/工期/工程量/养护期)必须且只能引用以下锚点值:禁止将各工种人数相加推导峰值、禁止按定额自行估算、禁止改写锚点数值。"),c.push(`- 项目:${a.project.name}(${a.project.scope})`),c.push(...(0,B.Xe)((0,B.IV)(a),b)),a.inspectionBatches.length>0&&c.push(`- 检验批划分:${a.inspectionBatches.map(a=>`${a.scope}——${a.planDesc}`).join(";")}`),c.push(`- 临时用电:${a.tempUtilities.powerLoad}`),c.push(`- 临时用水:${a.tempUtilities.waterUsage}`),a.decisionLock.entries.length>0&&c.push(`- 关键决策锁:${a.decisionLock.entries.map(a=>`${a.label}:${a.values.join("、")}`).join(";")}`),a.constructionDeployment.sections.length>0&&c.push(`- 施工部署:${a.constructionDeployment.flow};施工顺序 ${a.constructionDeployment.sequence}`),a.keyDifficulties.length>0&&c.push(`- 重难点(逐项列明):${a.keyDifficulties.map(a=>`${a.name}——${a.measure}`).join(";")}`),c.push(`- 金额禁区:${a.amountRule}`),c.push(a.drawingNote),c.join("\n")}let ag=[{domain:"contract",chapterPattern:/进度|工期|总体|部署|概况|工程|计划/u},{domain:"schedule",chapterPattern:/进度|工期|部署|计划|总体|施工方案|分部分项/u},{domain:"labor",chapterPattern:/劳动力|人员|资源|进度|工期|部署|概况/u},{domain:"equipment",chapterPattern:/机械|设备|资源/u},{domain:"material",chapterPattern:/物资|材料|资源|采购|亮化|路灯|照明/u},{domain:"quantity",chapterPattern:/分部分项|施工方案|施工方法|土方|道路|管网|工程概况/u},{domain:"spec",chapterPattern:/材料|物资|质量|技术|施工方案|分部分项/u},{domain:"earthwork",chapterPattern:/土方|土石方|道路|管网|施工方案|分部分项/u},{domain:"test",chapterPattern:/质量|试验|检测|验收/u},{domain:"redline",chapterPattern:/绿化|种植|养护|苗木|技能|培训|成品保护|质量|亮化|路灯|照明|概况|工程|总体/u}],ah=/编制|工程概况|项目概况|概况|说明/u;function ai(a,b,c){let d=[c.blockTitle,...c.subPointTitles,...c.skeletonNames??[]].map(a=>a.trim()).filter(a=>a.length>=2),e=a=>d.some(b=>a.includes(b)||b.includes(a)),f=[`【第 ${a.id} 章「${a.title}」蓝图切片(本节聚焦)——以下项目专属事实由蓝图冻结锁定,正文必须一致引用】`,m.Ru],g=[],h=[...new Set(a.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode).map(a=>a.path)))];h.length>0&&g.push(`本章 must_cite 参数(正文必须出现且与蓝图一致):${h.join("、")}`);let i=[];for(let b of a.subSections){let a=b.workPackages.filter(a=>e(a.name));if(0===a.length)continue;let c=[`## ${b.id} ${b.title}`],d=b.requiredParams.filter(a=>"must_cite"===a.mode).map(a=>a.path);for(let b of(d.length>0&&c.push(`must_cite 参数:${d.join("、")}`),a))c.push(...function(a){let b=[`
|
|
221
|
+
${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}}},81010:(a,b,c)=>{c.d(b,{C8:()=>al,dr:()=>av,OY:()=>at,DL:()=>ay,jM:()=>ad,RT:()=>ae,rR:()=>W,R3:()=>Z,iV:()=>au,RY:()=>$,Pd:()=>V,md:()=>ak,nR:()=>Y,m4:()=>X,eT:()=>ax,TF:()=>ai,Rx:()=>af,uw:()=>am,wY:()=>M,Fq:()=>az});var d=c(19898),e=c(73024),f=c(48161),g=c(76760),h=c(22213),i=c(1218),j=c(22157),k=c(38115),l=c(78217),m=c(3063);let n={seq:1,code:2,name:4,description:5,unit:6,quantity:8};function o(a){let b=a.map(a=>a.replace(/\s+/gu,""));return b.includes("序号")&&b.includes("项目编码")}function p(a){let b=a.map(a=>a.replace(/\s+/gu,"")),c=a=>b.findIndex(b=>a.includes(b)),d=c(["序号"]),e=c(["项目编码"]),f=c(["项目名称"]),g=c(["计量单位","单位"]),h=c(["工程量"]);if(!(d<0)&&!(e<0)&&!(f<0)&&!(g<0)&&!(h<0))return{seq:d,code:e,name:f,description:c(["项目特征描述"]),unit:g,quantity:h}}function q(a){return/^[一二三四五六七八九十\d]+(?:\.\d+)?$/u.test(a.trim())&&!r.test(a.trim())}let r=/^(?:\d{12}|(?:ZB|WB)\d{12})$/u,s=/工作表:(\d+(?:\.\d+)?)/u,t=/第1页\s*共(\d+)页/u,u=/工程名称:(.+?)\s*标段/u,v=/工程名称:([^\n||]{2,40}?)\s*$/mu,w=/第(\d+)页\s*共\d+页/gu;function x(a){let b=s.exec(a.sectionTitle);if(b)return b[1];let c=a.content.split("\n")[0]||"",d=s.exec(c);return d?d[1]:""}function y(a){let b=new Map;for(let c of a){let a=b.get(c.villageGroup)||[];a.push(c),b.set(c.villageGroup,a)}return b}var z=c(22496),A=c(95734),B=c(10751),C=c(48661);let D=[{zone:"east",pattern:/上海|江苏|浙江|安徽|福建|江西|山东/u,climate:{rainySeason:"6-8月",highTemp:"7-8月",winter:"12-2月"}},{zone:"south",pattern:/广东|广西|海南/u,climate:{rainySeason:"4-9月",highTemp:"6-9月",winter:"12-2月"}},{zone:"north",pattern:/北京|天津|河北|山西|内蒙古/u,climate:{rainySeason:"7-8月",highTemp:"7-8月",winter:"11-3月"}},{zone:"northeast",pattern:/辽宁|吉林|黑龙江/u,climate:{rainySeason:"7-8月",highTemp:"7月",winter:"11-3月"}},{zone:"northwest",pattern:/陕西|甘肃|宁夏|青海|新疆/u,climate:{rainySeason:"7-8月",highTemp:"7-8月",winter:"11-3月"}},{zone:"southwest",pattern:/四川|重庆|云南|贵州|西藏/u,climate:{rainySeason:"6-9月",highTemp:"7-8月",winter:"12-2月"}},{zone:"central",pattern:/湖北|湖南|河南/u,climate:{rainySeason:"6-8月",highTemp:"7-8月",winter:"12-2月"}}];function E(a){let b=`${a.name} ${a.description}`;return/塑料管|管道|检查井|雨水口|化粪池|涵管/u.test(b)?"管道铺设":/挖一般土方|挖沟槽|挖基坑|回填|清淤|余方|弃置|土方/u.test(b)&&"m3"===a.unit?"土方工程":/混凝土|垫层|涵头|压顶/u.test(b)&&"m3"===a.unit?"混凝土工程":/水泥混凝土|路床|铺装|道路|青砖|散水|块料/u.test(b)&&"m2"===a.unit?"道路铺装":/砌筑|砌体|砖/u.test(b)?"砌筑工程":/绿化|栽植|种植|苗木|草籽|喷播|灌木|乔木|色带|草坪/u.test(b)?"绿化工程":"安装工程"}let F={id:"village-municipal",projectTypes:["市政","园林绿化"],milestoneGroups:[{key:"prep",label:"施工准备与清杂拆除",pattern:/清杂|拆除|场地平整|临时/u},{key:"pipe",label:"污水管网工程",pattern:/塑料管|检查井|管网|排水|化粪池|雨水口/u},{key:"road",label:"道路铺装工程",pattern:/道路|路床|水泥混凝土|级配碎石|路缘石|青砖|散水|过路涵/u},{key:"landscape",label:"景观与绿化工程",pattern:/景观|绿化|栽植|种植|苗木|喷播|小菜园|沟塘|清淤/u},{key:"lighting",label:"亮化与收尾工程",pattern:/路灯|亮化|配电|电缆|防雷/u}],groupOfEntry:E,tradeMapping:[{trade:"管道工",pattern:/塑料管|管道|检查井|雨水口|化粪池|闭水|涵管|排水/u},{trade:"混凝土工",pattern:/混凝土|水泥砂浆|垫层|涵头|压顶/u},{trade:"瓦工",pattern:/砌筑|砌体|砖|路缘石|铺装|侧石|平石|块料|踏步|台阶/u},{trade:"绿化工",pattern:/绿化|栽植|种植|苗木|草籽|喷播|养护|灌木|乔木|色带|草坪/u},{trade:"电工",pattern:/路灯|配电|电缆|强电|防雷|接地|灯具|亮化/u},{trade:"普工",pattern:/土方|清杂|拆除|平整|回填|清淤|开挖/u}],laborUnitRange:{管道铺设:{unit:"m",min:.15,max:.3},土方工程:{unit:"m3",min:.08,max:.15},混凝土工程:{unit:"m3",min:.8,max:1.5},道路铺装:{unit:"m2",min:.3,max:.6},砌筑工程:{unit:"m3",min:1.2,max:2},绿化工程:{unit:"m2",min:.08,max:.15},安装工程:{unit:"项",min:0,max:0}},equipmentMapping:[{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/人机配合|开挖|挖土|沟槽/u,unit:"m3",basis:"人机配合开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"压路机",spec:"8~12t",pattern:/碾压|压实度/u,unit:"m2",basis:"路床碾压与压实度要求(清单特征)"},{name:"蛙式打夯机",spec:"",pattern:/回填|夯实/u,unit:"m3",basis:"沟槽回填夯实(清单条目)"},{name:"混凝土搅拌运输车",spec:"",pattern:/商品混凝土|C\d{2}混凝土/u,unit:"m3",basis:"商品混凝土运输(清单特征)"},{name:"插入式振捣器",spec:"",pattern:/混凝土浇筑|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"},{name:"洒水车",spec:"",pattern:/养护|绿化|喷播|栽植/u,unit:"m2",basis:"绿化养护与洒水(清单条目)"},{name:"高空作业车",spec:"",pattern:/路灯|灯具安装/u,unit:"套",basis:"路灯安装(清单条目)"}],machinePowerTable:[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"压路机",kw:75},{name:"蛙式打夯机",kw:3},{name:"混凝土搅拌运输车",kw:110},{name:"插入式振捣器",kw:1.5},{name:"洒水车",kw:90},{name:"高空作业车",kw:60}],laborCostRatio:{min:.15,max:.25},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"污水管网管道",namePattern:/塑料管|管道/u,unit:"m",divisor:200,descTemplate:"管道闭水试验分段检验,按每 200m 一段划分约 {count} 段(总长 {total}m)"},{scope:"道路工程",namePattern:/水泥混凝土|级配碎石|路床/u,unit:"m2",divisor:200,descTemplate:"路床压实度按每层每 200m\xb2 不少于 1 点检验,约 {count} 点(总面积 {total}m\xb2)"},{scope:"检查井",namePattern:/检查井/u,unit:"",divisor:1,descTemplate:"检查井逐座验收,共 {total} 座"}],difficultyTemplates:[{name:a=>`${a.villages.length} 个自然村分散施工组织协调`,measure:"按自然村分组划分施工段,多村平行施工 + 村内流水作业,配置专职协调员",basis:"清单按自然村分组",test:a=>a.villages.length>=2},{name:"雨季管网沟槽施工",measure:"雨季排水与边坡防护,分段开挖、快速回填(联动季节施工措施板块)",basis:"清单含沟槽开挖与管道铺设条目",test:a=>a.entries.some(a=>/挖沟槽|沟槽开挖|塑料管铺设/u.test(`${a.name} ${a.description}`))},{name:"村庄内道路施工交通疏导",measure:"分段封闭施工,设置临时道路保障居民出行(补疑条款:居民出行临时道路)",basis:"清单含道路工程条目且村内施工",test:a=>a.villages.length>0&&a.entries.some(a=>/道路|路床|路面/u.test(a.name))},{name:"既有杆管线保护",measure:"开挖前探测交底,杆线保护措施费含在清单单价内",basis:"清单特征原文含杆线保护条款",test:a=>a.entries.some(a=>/杆线|管线保护|既有管线/u.test(a.description))}],deploymentFlowFallback:"分区段流水作业",multiVillageFlow:a=>`多村平行施工 + 村内流水作业(${a} 个自然村分组)`,sequenceFallback:"清杂拆除 → 管网道路 → 景观绿化 → 亮化收尾",climateZone:"east",powerFallbackText:"临时用电以村庄既有电源分散接入为主,各施工组单独设置配电箱与计量表(柴油机械不计入用电负荷,电动机具零星分散)",waterNoteText:"施工用水以洒水车供水为主,总用水量按管网分段配置"},G={id:"building",projectTypes:["房建","装饰装修"],milestoneGroups:[{key:"prep",label:"施工准备与三通一平",pattern:/清杂|拆除|场地平整|临建|临时|三通一平/u},{key:"foundation",label:"基础工程",pattern:/桩基|基础|基坑|地下室|降水|支护|土方|挖方|回填/u},{key:"structure",label:"主体结构工程",pattern:/钢筋|模板|砌体|主体|框架|剪力墙|现浇|混凝土/u},{key:"finish",label:"装饰装修工程",pattern:/装饰|抹灰|防水|保温|门窗|屋面|涂料|吊顶|幕墙/u},{key:"mep",label:"安装与收尾工程",pattern:/电气|给排水|暖通|消防|电梯|智能化|收尾|竣工|调试/u}],groupOfEntry:function(a){let b=`${a.name} ${a.description}`;return/土方|挖方|回填|弃置|清淤/u.test(b)&&"m3"===a.unit?"土方工程":/钢筋|植筋/u.test(b)?"钢筋工程":/模板|支模/u.test(b)?"模板工程":/混凝土|垫层|现浇/u.test(b)?"混凝土工程":/砌筑|砌体|砖/u.test(b)?"砌筑工程":/防水|卷材|涂膜/u.test(b)?"防水工程":/保温|挤塑|聚苯/u.test(b)?"保温工程":/装饰|抹灰|涂料|吊顶|幕墙|墙砖|地砖|油漆|门窗/u.test(b)?"装饰工程":/电气|给排水|配电|照明|灯具|插座|管线|穿线|桥架|暖通|消防|电梯/u.test(b)?"安装电气":"安装工程"},tradeMapping:[{trade:"钢筋工",pattern:/钢筋|植筋/u},{trade:"模板工",pattern:/模板|支模/u},{trade:"防水工",pattern:/防水|卷材|涂膜/u},{trade:"架子工",pattern:/脚手架|外架/u},{trade:"抹灰工",pattern:/抹灰|粉刷|抹面/u},{trade:"水电工",pattern:/电气|给排水|配电|照明|灯具|插座|管线|穿线|桥架/u},{trade:"保温工",pattern:/保温|挤塑|聚苯/u},{trade:"混凝土工",pattern:/混凝土|水泥砂浆|垫层/u},{trade:"瓦工",pattern:/砌筑|砌体|砖|块料|铺装|墙砖|地砖/u},{trade:"普工",pattern:/土方|清杂|拆除|平整|回填|清淤|开挖/u}],laborUnitRange:{土方工程:{unit:"m3",min:.08,max:.15},钢筋工程:{unit:"t",min:.8,max:1.5},模板工程:{unit:"m2",min:.3,max:.6},混凝土工程:{unit:"m3",min:.8,max:1.5},砌筑工程:{unit:"m3",min:1.2,max:2},防水工程:{unit:"m2",min:.06,max:.12},保温工程:{unit:"m2",min:.15,max:.3},装饰工程:{unit:"m2",min:.2,max:.4},安装电气:{unit:"m",min:.08,max:.15},安装工程:{unit:"项",min:0,max:0}},equipmentMapping:[{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/开挖|挖土|基坑|土方/u,unit:"m3",basis:"土方开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"插入式振捣器",spec:"",pattern:/混凝土浇筑|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"},{name:"蛙式打夯机",spec:"",pattern:/回填|夯实/u,unit:"m3",basis:"回填夯实(清单条目)"},{name:"塔式起重机",spec:"QTZ63",pattern:/塔吊|塔式起重机/u,unit:"项",basis:"主体结构垂直运输(清单特征)"},{name:"施工升降机",spec:"SC200/200",pattern:/施工电梯|施工升降机/u,unit:"项",basis:"人员与材料垂直运输(清单特征)"},{name:"钢筋加工机械",spec:"",pattern:/钢筋/u,unit:"t",basis:"钢筋加工(清单条目)"},{name:"电焊机",spec:"",pattern:/焊接|钢结构|预埋/u,unit:"t",basis:"钢结构焊接与预埋(清单条目)"},{name:"混凝土输送泵",spec:"",pattern:/泵送|混凝土泵/u,unit:"m3",basis:"混凝土泵送(清单特征)"}],machinePowerTable:[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"插入式振捣器",kw:1.5},{name:"蛙式打夯机",kw:3},{name:"塔式起重机",kw:45},{name:"施工升降机",kw:33},{name:"钢筋加工机械",kw:15},{name:"电焊机",kw:15},{name:"混凝土输送泵",kw:90},{name:"物料提升机",kw:11}],laborCostRatio:{min:.18,max:.3},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"钢筋工程",namePattern:/钢筋/u,unit:"t",divisor:60,descTemplate:"钢筋按进场检验批划分,每 60t 一批,约 {count} 批(总量 {total}t)"},{scope:"混凝土工程",namePattern:/混凝土/u,unit:"m3",divisor:100,descTemplate:"混凝土按浇筑批次留置标准养护试件,每 100m\xb3 一批,约 {count} 批(总量 {total}m\xb3)"},{scope:"砌体工程",namePattern:/砌体|砌筑/u,unit:"m3",divisor:250,descTemplate:"砌体工程按砌筑量划分检验批,每 250m\xb3 一批,约 {count} 批(总量 {total}m\xb3)"},{scope:"防水工程",namePattern:/防水/u,unit:"m2",divisor:0,descTemplate:"防水工程按施工段划分检验批并做蓄水(淋水)试验(总量 {total}m\xb2)"}],difficultyTemplates:[{name:"深基坑施工",measure:"分层开挖、及时支护与信息化监测,编制专项施工方案并按危大工程规定组织专家论证",basis:"清单特征含基坑开挖深度",test:a=>a.entries.some(a=>{let b=/(?:挖深|开挖深度|基坑深度|坑深)[^。;;]{0,12}(\d+(?:\.\d+)?)\s*m/u.exec(a.description);return!!b&&Number.parseFloat(b[1]||"0")>=3})},{name:"高支模施工",measure:"编制专项施工方案并组织专家论证,支架验收合格后方可浇筑",basis:"清单特征含支模高度",test:a=>a.entries.some(a=>/支模高度|高支模|模板支撑[^。;;]{0,12}\d+(?:\.\d+)?\s*m/u.test(`${a.name} ${a.description}`))},{name:"大体积混凝土施工",measure:"分层浇筑、测温养护,掺加缓凝剂与矿物掺合料控制水化热",basis:"清单特征含大体积混凝土/筏板基础",test:a=>a.entries.some(a=>/大体积|基础底板|筏板/u.test(`${a.name} ${a.description}`))},{name:"垂直运输组织",measure:"塔吊与施工电梯合理布位,编制群塔作业防碰撞方案",basis:"清单特征含塔吊/施工电梯",test:a=>a.entries.some(a=>/塔吊|塔式起重机|施工电梯|施工升降机/u.test(`${a.name} ${a.description}`))},{name:"紧邻既有建筑保护",measure:"开工前房屋现状鉴定,设置沉降观测点,控制开挖对周边扰动",basis:"清单特征含紧邻既有建筑",test:a=>a.entries.some(a=>/紧邻|既有建筑|相邻建筑|周边建筑/u.test(a.description))}],deploymentFlowFallback:"分区段流水作业",sequenceFallback:"施工准备 → 基础工程 → 主体结构 → 装饰装修 → 安装收尾",climateZone:"central",powerFallbackText:"临时用电由现场总配电箱接入,采用 TN-S 三相五线制,各分配电箱单独计量(柴油机械不计入用电负荷)",waterNoteText:"施工用水以市政供水为主,总用水量按施工段分区配置"},H={id:"general",projectTypes:["其他"],milestoneGroups:[{key:"prep",label:"施工准备",pattern:/清杂|拆除|场地平整|临建|临时/u},{key:"main",label:"主体工程",pattern:/主体|结构|混凝土|钢筋|模板|砌体|土方|基础|安装/u},{key:"finish",label:"装饰与附属工程",pattern:/装饰|抹灰|防水|保温|门窗|屋面|绿化|景观/u},{key:"install",label:"安装工程",pattern:/电气|给排水|暖通|消防|电梯|灯具|管线|设备/u},{key:"close",label:"收尾与验收",pattern:/收尾|竣工|验收|调试|移交|清理/u}],groupOfEntry:E,tradeMapping:F.tradeMapping,laborUnitRange:F.laborUnitRange,equipmentMapping:[{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/开挖|挖土|沟槽|土方/u,unit:"m3",basis:"土方开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"插入式振捣器",spec:"",pattern:/混凝土浇筑|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"},{name:"蛙式打夯机",spec:"",pattern:/回填|夯实/u,unit:"m3",basis:"回填夯实(清单条目)"},{name:"混凝土搅拌运输车",spec:"",pattern:/商品混凝土|C\d{2}混凝土/u,unit:"m3",basis:"商品混凝土运输(清单特征)"}],machinePowerTable:[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"插入式振捣器",kw:1.5},{name:"蛙式打夯机",kw:3},{name:"混凝土搅拌运输车",kw:110}],laborCostRatio:{min:.15,max:.25},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"混凝土工程",namePattern:/混凝土/u,unit:"m3",divisor:100,descTemplate:"混凝土按浇筑批次留置标准养护试件,每 100m\xb3 一批,约 {count} 批(总量 {total}m\xb3)"},{scope:"检查井",namePattern:/检查井/u,unit:"",divisor:1,descTemplate:"检查井逐座验收,共 {total} 座"}],difficultyTemplates:[],deploymentFlowFallback:"分区段流水作业",sequenceFallback:"施工准备 → 主体施工 → 装饰安装 → 收尾验收",climateZone:void 0,powerFallbackText:"临时用电按现场配电箱分区接入,各用电点单独计量(柴油机械不计入用电负荷,电动机具零星分散)",waterNoteText:"施工用水按现场水源分区配置,总用水量按施工段核定"},I={id:"bridge-tunnel",projectTypes:["桥梁与隧道"],milestoneGroups:[{key:"prep",label:"施工准备与临时设施",pattern:/清杂|拆除|场地平整|临建|临时|三通一平|测量放样/u},{key:"foundation",label:"基础工程",pattern:/桩基|钻孔|灌注桩|围堰|承台|基础|基坑|降水|支护/u},{key:"substructure",label:"下部结构工程",pattern:/桥墩|桥台|墩柱|盖梁|系梁|支座垫石|下部/u},{key:"superstructure",label:"上部结构工程",pattern:/箱梁|梁板|主梁|现浇梁|预制|预应力|张拉|架设|合龙|上部/u},{key:"tunnel",label:"隧道洞身工程",pattern:/隧道|洞身|仰拱|衬砌|锚杆|喷混|掌子面|二衬/u},{key:"finish",label:"桥面系附属与收尾",pattern:/桥面|铺装|护栏|伸缩缝|防撞|排水|照明|收尾|竣工|交安|绿化/u}],groupOfEntry:function(a){let b=`${a.name} ${a.description}`;return/灌注桩|桩基|钻孔|围堰|承台/u.test(b)?"桩基与基础工程":/桥墩|桥台|墩柱|盖梁|系梁|下部/u.test(b)?"下部结构工程":/箱梁|梁板|主梁|现浇梁|预制|预应力|张拉|架设|上部/u.test(b)&&"m3"===a.unit?"上部结构工程":/钢绞线/u.test(b)&&"t"===a.unit?"钢绞线工程":/隧道|洞身|仰拱|衬砌|锚杆|喷混|掌子面/u.test(b)?"隧道工程":/桥面|铺装|护栏|伸缩缝|防撞/u.test(b)?"桥面系工程":/土方|挖方|填方|回填|清淤/u.test(b)&&"m3"===a.unit?"土方工程":/钢筋|植筋/u.test(b)?"钢筋工程":/模板|支模/u.test(b)?"模板工程":/混凝土|现浇/u.test(b)?"混凝土工程":"安装工程"},tradeMapping:[{trade:"桩基工",pattern:/灌注桩|桩基|钻孔/u},{trade:"钢筋工",pattern:/钢筋|植筋/u},{trade:"模板工",pattern:/模板|支模/u},{trade:"混凝土工",pattern:/混凝土|现浇|垫层/u},{trade:"张拉工",pattern:/预应力|张拉|钢绞线/u},{trade:"焊工",pattern:/焊接|钢结构|预埋件/u},{trade:"起重工",pattern:/吊装|架设|梁体|龙门吊|架桥机/u},{trade:"隧道工",pattern:/隧道|洞身|衬砌|锚杆|喷混|掌子面/u},{trade:"普工",pattern:/土方|清杂|拆除|平整|回填|清淤|开挖/u}],laborUnitRange:{桩基与基础工程:{unit:"m3",min:4,max:7},下部结构工程:{unit:"m3",min:1.5,max:3},上部结构工程:{unit:"m3",min:4,max:8},钢绞线工程:{unit:"t",min:1.5,max:3},隧道工程:{unit:"m3",min:1.5,max:3},桥面系工程:{unit:"m2",min:.4,max:.8},土方工程:{unit:"m3",min:.08,max:.15},钢筋工程:{unit:"t",min:.8,max:1.5},模板工程:{unit:"m2",min:.3,max:.6},混凝土工程:{unit:"m3",min:.8,max:1.5},安装工程:{unit:"项",min:0,max:0}},equipmentMapping:[{name:"旋挖钻机",spec:"",pattern:/钻孔|灌注桩|桩基/u,unit:"m3",basis:"桩基成孔(清单条目)"},{name:"泥浆泵",spec:"",pattern:/灌注桩|钻孔/u,unit:"m3",basis:"钻孔泥浆循环(清单条目)"},{name:"履带式起重机",spec:"",pattern:/吊装|梁体|预制/u,unit:"项",basis:"构件吊装(清单特征)"},{name:"架桥机",spec:"",pattern:/架设|架梁|箱梁/u,unit:"项",basis:"梁体架设(清单条目)"},{name:"张拉设备",spec:"",pattern:/预应力|张拉|钢绞线/u,unit:"束",basis:"预应力张拉(清单条目)"},{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/开挖|挖土|基坑|土方/u,unit:"m3",basis:"土方开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"混凝土输送泵",spec:"",pattern:/泵送|混凝土泵/u,unit:"m3",basis:"混凝土泵送(清单特征)"},{name:"插入式振捣器",spec:"",pattern:/混凝土浇筑|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"}],machinePowerTable:[{name:"旋挖钻机",kw:130},{name:"泥浆泵",kw:22},{name:"履带式起重机",kw:110},{name:"架桥机",kw:90},{name:"张拉设备",kw:7.5},{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"混凝土输送泵",kw:90},{name:"插入式振捣器",kw:1.5}],laborCostRatio:{min:.12,max:.22},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"桩基工程",namePattern:/灌注桩|桩基/u,unit:"",divisor:1,descTemplate:"钻孔灌注桩逐桩检验(桩位/孔径/沉渣厚度/混凝土充盈系数),共 {total} 根"},{scope:"钢筋工程",namePattern:/钢筋/u,unit:"t",divisor:60,descTemplate:"钢筋按进场检验批划分,每 60t 一批,约 {count} 批(总量 {total}t)"},{scope:"混凝土工程",namePattern:/混凝土/u,unit:"m3",divisor:100,descTemplate:"混凝土按浇筑批次留置标准养护试件,每 100m\xb3 一批,约 {count} 批(总量 {total}m\xb3)"},{scope:"预应力张拉",namePattern:/预应力|钢绞线/u,unit:"束",divisor:0,descTemplate:"预应力孔道逐束张拉并记录伸长值(总量 {total} 束)"}],difficultyTemplates:[{name:"深水基础施工",measure:"围堰施工与排水方案专项设计,汛期前完成基础施工,设置水位监测",basis:"清单特征含围堰/深水基础",test:a=>a.entries.some(a=>/围堰|深水|水中墩|钢板桩/u.test(`${a.name} ${a.description}`))},{name:"大体积混凝土施工",measure:"分层浇筑、测温养护,掺加缓凝剂与矿物掺合料控制水化热",basis:"清单特征含承台/大体积混凝土",test:a=>a.entries.some(a=>/承台|大体积|基础底板/u.test(`${a.name} ${a.description}`))},{name:"预应力张拉控制",measure:"张拉设备标定,双控(应力+伸长值)张拉,孔道压浆密实",basis:"清单特征含预应力/钢绞线",test:a=>a.entries.some(a=>/预应力|张拉|钢绞线/u.test(`${a.name} ${a.description}`))},{name:"隧道开挖与支护",measure:"超前地质预报,短进尺、弱爆破、强支护,监控量测信息化施工",basis:"清单特征含隧道洞身开挖",test:a=>a.entries.some(a=>/隧道|洞身|掌子面/u.test(`${a.name} ${a.description}`))},{name:"架梁起重吊装",measure:"编制吊装专项方案,吊装前试吊与支腿地基验算,专职指挥",basis:"清单特征含梁体架设",test:a=>a.entries.some(a=>/架设|架梁|架桥机|吊装/u.test(`${a.name} ${a.description}`))},{name:"高空作业安全控制",measure:"高墩作业平台封闭防护,设置安全网与临边防护,恶劣天气停止作业",basis:"清单特征含高墩/墩柱",test:a=>a.entries.some(a=>/高墩|墩柱|盖梁/u.test(`${a.name} ${a.description}`))}],deploymentFlowFallback:"分区段流水作业",sequenceFallback:"施工准备 → 基础工程 → 下部结构 → 上部结构 → 隧道洞身 → 桥面系与收尾",climateZone:void 0,powerFallbackText:"临时用电由现场总配电箱接入,采用 TN-S 三相五线制,各用电点单独计量(柴油机械不计入用电负荷)",waterNoteText:"施工用水以现场水源为主,总用水量按施工段核定"},J={id:"highway",projectTypes:["公路"],milestoneGroups:[{key:"prep",label:"施工准备",pattern:/清杂|拆除|场地平整|临建|临时|三通一平|测量放样/u},{key:"subgrade",label:"路基工程",pattern:/路基|土方|挖方|填方|压实|软基|清表|路床/u},{key:"pavement",label:"路面工程",pattern:/路面|水稳|基层|沥青|面层|摊铺|碾压|级配/u},{key:"bridge",label:"桥涵工程",pattern:/桥梁|桥台|桥墩|桩基|梁板|涵洞|通道|台帽/u},{key:"safety",label:"交安与附属收尾",pattern:/护栏|标线|标志|交安|绿化|排水|边沟|收尾|竣工/u}],groupOfEntry:function(a){let b=`${a.name} ${a.description}`;return/土方|挖方|填方|清表|软基|路基/u.test(b)&&"m3"===a.unit?"土方工程":/水稳|基层|级配|路床/u.test(b)&&"m2"===a.unit?"路面基层":/沥青|面层|摊铺/u.test(b)&&"m2"===a.unit?"沥青面层":/混凝土|现浇/u.test(b)&&"m2"===a.unit?"混凝土路面":/混凝土|现浇/u.test(b)?"混凝土工程":/砌筑|砌体|边沟|护坡|挡墙/u.test(b)?"砌筑工程":/钢筋|植筋/u.test(b)?"钢筋工程":/护栏|标线|标志|交安|波形梁/u.test(b)?"交安设施":"安装工程"},tradeMapping:[{trade:"机械操作工",pattern:/土方|挖方|填方|清表|路基/u},{trade:"压路机司机",pattern:/碾压|压实|路基|路面/u},{trade:"摊铺机司机",pattern:/摊铺|沥青|水稳|基层/u},{trade:"混凝土工",pattern:/混凝土|现浇|垫层/u},{trade:"钢筋工",pattern:/钢筋|植筋/u},{trade:"瓦工",pattern:/砌筑|砌体|边沟|护坡|挡墙/u},{trade:"交安工",pattern:/护栏|标线|标志|交安|波形梁/u},{trade:"普工",pattern:/清杂|拆除|平整|回填|清淤/u}],laborUnitRange:{土方工程:{unit:"m3",min:.08,max:.15},路面基层:{unit:"m2",min:.2,max:.4},沥青面层:{unit:"m2",min:.08,max:.15},混凝土路面:{unit:"m2",min:.15,max:.3},混凝土工程:{unit:"m3",min:.8,max:1.5},砌筑工程:{unit:"m3",min:1.2,max:2},钢筋工程:{unit:"t",min:.8,max:1.5},交安设施:{unit:"m",min:.3,max:.6},安装工程:{unit:"项",min:0,max:0}},equipmentMapping:[{name:"推土机",spec:"",pattern:/清表|土方|填方|平整/u,unit:"m3",basis:"土方摊铺平整(清单条目)"},{name:"平地机",spec:"",pattern:/路基|路床|平整/u,unit:"m2",basis:"路床整平(清单条目)"},{name:"装载机",spec:"",pattern:/土方|挖方|填方|清运/u,unit:"m3",basis:"土方装载(清单条目)"},{name:"压路机",spec:"8~12t",pattern:/碾压|压实/u,unit:"m2",basis:"路基路面碾压(清单特征)"},{name:"摊铺机",spec:"",pattern:/摊铺|沥青|水稳/u,unit:"m2",basis:"路面摊铺(清单条目)"},{name:"沥青洒布车",spec:"",pattern:/沥青|透层|粘层/u,unit:"m2",basis:"沥青洒布(清单条目)"},{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/开挖|挖土|沟槽|土方/u,unit:"m3",basis:"土方开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"洒水车",spec:"",pattern:/养护|洒水/u,unit:"m2",basis:"养护洒水(清单条目)"}],machinePowerTable:[{name:"推土机",kw:75},{name:"平地机",kw:120},{name:"装载机",kw:160},{name:"压路机",kw:75},{name:"摊铺机",kw:110},{name:"沥青洒布车",kw:60},{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"洒水车",kw:90}],laborCostRatio:{min:.12,max:.2},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"路基压实",namePattern:/路床|路基|填方/u,unit:"m2",divisor:1e3,descTemplate:"路基压实度按每 1000m\xb2 不少于 1 点检测,约 {count} 点(总面积 {total}m\xb2)"},{scope:"水稳基层",namePattern:/水稳|基层/u,unit:"m2",divisor:1e3,descTemplate:"水稳基层按每 1000m\xb2 一个检验批,约 {count} 批(总面积 {total}m\xb2)"},{scope:"沥青面层",namePattern:/沥青|面层/u,unit:"m2",divisor:1e3,descTemplate:"沥青面层按每 1000m\xb2 一个检验批,约 {count} 批(总面积 {total}m\xb2)"}],difficultyTemplates:[{name:"软土地基处理",measure:"软基处理方案专项设计(换填/搅拌桩/预压),沉降观测控制填筑速率",basis:"清单特征含软基处理",test:a=>a.entries.some(a=>/软基|软土|换填|搅拌桩/u.test(`${a.name} ${a.description}`))},{name:"交通疏导与半幅施工",measure:"分段半幅封闭施工,设置临时交通标志与导流设施,保障社会车辆通行",basis:"清单特征含保通/半幅施工",test:a=>a.entries.some(a=>/保通|半幅|交通疏导|既有道路/u.test(`${a.name} ${a.description}`))},{name:"路面平整度控制",measure:"摊铺机连续匀速作业,接缝处理与碾压工艺控制,平整度逐层检测",basis:"清单特征含沥青面层",test:a=>a.entries.some(a=>/沥青|面层/u.test(`${a.name} ${a.description}`))},{name:"路基沉降控制",measure:"分层填筑碾压,设置沉降观测点,填筑速率与观测数据联动",basis:"清单特征含高填方路基",test:a=>a.entries.some(a=>/高填方|填方/u.test(`${a.name} ${a.description}`))}],deploymentFlowFallback:"分段平行流水作业",sequenceFallback:"施工准备 → 路基工程 → 路面工程 → 桥涵工程 → 交安与附属收尾",climateZone:void 0,powerFallbackText:"临时用电由现场总配电箱接入,各用电点单独计量(柴油机械不计入用电负荷)",waterNoteText:"施工用水以现场水源为主,总用水量按施工段核定"},K={id:"water-conservancy",projectTypes:["水利水电"],milestoneGroups:[{key:"prep",label:"施工准备与围堰导流",pattern:/清杂|拆除|围堰|导流|截流|临建|临时/u},{key:"earthwork",label:"土方与基础工程",pattern:/土方|挖方|填方|基础|基坑|清淤|疏浚|开挖/u},{key:"structure",label:"闸站结构工程",pattern:/混凝土|钢筋|模板|闸室|闸墩|泵站|翼墙|底板|消力池|挡墙|砌筑/u},{key:"metal",label:"金属结构与机电安装",pattern:/金属结构|闸门|启闭机|埋件|机电|水泵|电气/u},{key:"finish",label:"护坡堤防与收尾",pattern:/护坡|护岸|堤防|绿化|水土保持|收尾|竣工|验收/u}],groupOfEntry:function(a){let b=`${a.name} ${a.description}`;return/围堰|导流|截流|清淤|疏浚/u.test(b)||/土方|挖方|填方|回填|开挖/u.test(b)&&"m3"===a.unit?"土方工程":/闸门|启闭机|埋件|金属结构/u.test(b)&&"t"===a.unit?"金属结构安装":/护坡|护岸|堤防|格宾|浆砌/u.test(b)&&"m2"===a.unit?"护坡工程":/钢筋|植筋/u.test(b)?"钢筋工程":/模板|支模/u.test(b)?"模板工程":/混凝土|现浇|底板|闸室|闸墩|泵站|翼墙|消力池/u.test(b)&&"m3"===a.unit?"混凝土工程":/砌筑|砌体|砖|挡墙/u.test(b)?"砌筑工程":(/机电|水泵|电气/u.test(b),"安装工程")},tradeMapping:[{trade:"钢筋工",pattern:/钢筋|植筋/u},{trade:"模板工",pattern:/模板|支模/u},{trade:"混凝土工",pattern:/混凝土|现浇|底板|闸室|闸墩|泵站|翼墙|消力池/u},{trade:"瓦工",pattern:/砌筑|砌体|砖|挡墙|护坡/u},{trade:"金属结构安装工",pattern:/金属结构|闸门|启闭机|埋件/u},{trade:"机电安装工",pattern:/机电|水泵|电气|配电/u},{trade:"潜水工",pattern:/水下|潜水/u},{trade:"普工",pattern:/土方|清杂|拆除|平整|回填|清淤|开挖/u}],laborUnitRange:{土方工程:{unit:"m3",min:.08,max:.15},混凝土工程:{unit:"m3",min:1,max:2},砌筑工程:{unit:"m3",min:1.2,max:2},钢筋工程:{unit:"t",min:.8,max:1.5},模板工程:{unit:"m2",min:.3,max:.6},金属结构安装:{unit:"t",min:15,max:25},护坡工程:{unit:"m2",min:.2,max:.4},安装工程:{unit:"项",min:0,max:0}},equipmentMapping:[{name:"挖掘机",spec:"0.6~1.0m\xb3",pattern:/开挖|挖土|基坑|土方|清淤/u,unit:"m3",basis:"土方开挖(清单特征)"},{name:"自卸汽车",spec:"8t",pattern:/余方弃置|弃方|外运|回填/u,unit:"m3",basis:"土方运输与回填(清单条目)"},{name:"装载机",spec:"",pattern:/土方|挖方|填方|清运/u,unit:"m3",basis:"土方装载(清单条目)"},{name:"混凝土输送泵",spec:"",pattern:/泵送|混凝土泵|混凝土/u,unit:"m3",basis:"混凝土泵送(清单特征)"},{name:"履带式起重机",spec:"",pattern:/吊装|闸门|启闭机/u,unit:"",basis:"闸门与启闭机吊装(清单条目,不限计量单位)"},{name:"泥浆泵",spec:"",pattern:/围堰|降水|导流|排水/u,unit:"",basis:"基坑降水与排水(清单条目,不限计量单位)"},{name:"插入式振捣器",spec:"",pattern:/混凝土|振捣/u,unit:"m3",basis:"混凝土浇筑(清单条目)"},{name:"蛙式打夯机",spec:"",pattern:/回填|夯实/u,unit:"m3",basis:"回填夯实(清单条目)"}],machinePowerTable:[{name:"挖掘机",kw:90},{name:"自卸汽车",kw:120},{name:"装载机",kw:160},{name:"混凝土输送泵",kw:90},{name:"履带式起重机",kw:110},{name:"泥浆泵",kw:22},{name:"插入式振捣器",kw:1.5},{name:"蛙式打夯机",kw:3}],laborCostRatio:{min:.15,max:.25},dailyWage:{min:250,max:350},inspectionBatchRules:[{scope:"混凝土工程",namePattern:/混凝土/u,unit:"m3",divisor:100,descTemplate:"混凝土按浇筑批次留置标准养护试件,每 100m\xb3 一批,约 {count} 批(总量 {total}m\xb3)"},{scope:"土方回填",namePattern:/回填|填方/u,unit:"m3",divisor:200,descTemplate:"土方回填按每 200m\xb3 一个检验批检测压实度,约 {count} 批(总量 {total}m\xb3)"},{scope:"金属结构",namePattern:/闸门|启闭机/u,unit:"",divisor:1,descTemplate:"金属结构逐件验收(出厂合格证+安装调试记录),共 {total} 件"}],difficultyTemplates:[{name:"围堰导流与度汛",measure:"围堰按度汛标准设计施工,汛期值守与应急预案,度汛演练",basis:"清单特征含围堰/导流",test:a=>a.entries.some(a=>/围堰|导流|度汛|截流/u.test(`${a.name} ${a.description}`))},{name:"深基坑降水与支护",measure:"降水方案专项设计,分层开挖及时支护,周边沉降监测",basis:"清单特征含基坑降水",test:a=>a.entries.some(a=>/降水|基坑|支护/u.test(`${a.name} ${a.description}`))},{name:"大体积混凝土施工",measure:"分层浇筑、测温养护,掺加缓凝剂与矿物掺合料控制水化热",basis:"清单特征含底板/大体积混凝土",test:a=>a.entries.some(a=>/底板|大体积|消力池/u.test(`${a.name} ${a.description}`))},{name:"闸门启闭机安装精度控制",measure:"埋件安装精度预控,闸门与启闭机联动调试,止水严密性试验",basis:"清单特征含闸门/启闭机",test:a=>a.entries.some(a=>/闸门|启闭机/u.test(`${a.name} ${a.description}`))},{name:"水下作业安全控制",measure:"潜水作业双人值守,水下作业专项方案与应急预案",basis:"清单特征含水下作业",test:a=>a.entries.some(a=>/水下|潜水/u.test(`${a.name} ${a.description}`))}],deploymentFlowFallback:"分区段流水作业",sequenceFallback:"施工准备与围堰导流 → 土方与基础 → 闸站结构 → 金属结构与机电安装 → 护坡堤防与收尾",climateZone:void 0,powerFallbackText:"临时用电由现场总配电箱接入,各用电点单独计量(柴油机械不计入用电负荷)",waterNoteText:"施工用水以现场水源为主,总用水量按施工段核定"},L={type:"object",required:["meta","data","outline"],properties:{meta:{type:"object",required:!0,properties:{version:{type:"string",required:!0,minLength:1},docType:{type:"string",required:!0,minLength:1},createdAt:{type:"string",required:!0,minLength:1},sourceMaterials:{type:"array",required:!0,items:{type:"string"}}}},data:{type:"object",required:!0,properties:{project:{type:"object",required:!0,properties:{name:{type:"string",required:!0,minLength:1},scope:{type:"string",required:!0},works:{type:"array",required:!0,items:{type:"string"}}}},contract:{type:"object",required:!0,properties:{totalDays:{type:"number",required:!0},qualityStandard:{type:"string",required:!0},pricingFile:{type:"string",required:!0}}},milestones:{type:"array",required:!0,minItems:1,items:{type:"object"}},resources:{type:"object",required:!0,properties:{labor:{type:"object",required:!0},equipment:{type:"array",required:!0}}},materialsPlan:{type:"array",required:!0},redLineFacts:{type:"array",required:!0},quantities:{type:"object",required:!0},standardBlocks:{type:"array",required:!0},keyDifficulties:{type:"array",required:!0,minItems:1}}},outline:{type:"object",required:!0,properties:{chapters:{type:"array",required:!0,minItems:1}}}}};function M(a){let b=a.boundFilePaths.filter(a=>/工程量清单/u.test(a)&&a.toLowerCase().endsWith(".xls")).filter(a=>{let b=a.split("/").pop()||a;return!/封面|编制说明/u.test(b)});if(0===b.length)return{warning:`绑定资料中未识别到工程量清单 .xls 文件(${a.boundFilePaths.length} 份资料)`};let c=g.join(f.homedir(),".customize-agent","projects",(0,d.computeProjectId)(g.resolve(a.projectRoot)),"kb.db");if(!e.existsSync(c))return{warning:`项目知识库索引不存在:${c}`};let h=[],i=[];for(let a of b)try{let b=function(a,b){let c=new((0,d.loadBetterSqlite3)())(a,{readonly:!0});try{return c.pragma("busy_timeout = 10000"),c.prepare("SELECT chunk_index, content, section_title FROM kb_chunks WHERE relative_path = ? ORDER BY chunk_index").all(b).map(a=>({chunkIndex:a.chunk_index,content:a.content,sectionTitle:a.section_title||""}))}finally{c.close()}}(c,a);if(0===b.length){h.push(`${a}(索引无切片)`);continue}let e=function(a){let b=a.sourceFile||"",c={totalChunks:a.chunks.length,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0},d=[],e=[];for(let b of a.chunks){let a=b.sectionTitle,f=a.includes("表格路径声明");if(a.includes("附录")){c.skippedChunks++;continue}f?(e.push(b),c.declarationChunks++):"表格数据"===a||a.includes("表标题")||a.includes("第")||a.includes("工作表:")?(d.push(b),c.markdownChunks++):c.skippedChunks++}let f=new Map,g=a=>{let b=s.exec(a);if(!b)return;let c=b[1],d=f.get(c),e=u.exec(a)||v.exec(a),g=t.exec(a);d?(!d.villageGroup&&e&&(d.villageGroup=e[1].trim()),void 0===d.totalPages&&g&&(d.totalPages=Number(g[1]))):f.set(c,{villageGroup:e?e[1].trim():"",totalPages:g?Number(g[1]):void 0})};for(let a of d)g(a.sectionTitle),g(a.content.split("\n")[0]||"");let h=[],i="",j="",k="",l="plain",m=function(a){let b=[],c=!1;for(let d=0;d<a.length;d++){let e=a[d]??"";if(e.includes(".")){let e=d+1<a.length?a[d+1]??"":"",f=/^\d+$/u.test(e)&&e.length>=2;b.push(f?"unit-project":"subsection"),c=f}else/^\d+$/u.test(e)?b.push(c?"subsection":"section"):(b.push("section"),c=!1)}return b}(function(a){let b=[],c="",d=n;for(let e of a){let a=e.content.split("\n"),f=c;for(let e of(c="",a)){if(e.startsWith("|"))f.trim(),f=e;else{if(!f)continue;f+=e}if(!f.endsWith("|"))continue;let a=f.split("|").map(a=>a.trim());if(f="",o(a)){d=p(a)??d;continue}!a[d.seq]&&q(a[d.code]??"")&&a[d.name]&&"分部小计"!==a[d.name]&&b.push(a[d.code]??"")}f.trim()&&(c=f)}return b}(d)),z=-1,A=n,B="";for(let a of d){let d=x(a),e=d||B;d&&(B=d);let g=f.get(e),n=g?.villageGroup||e||"",s=a.content.split("\n"),u=i;i="";let v=function(a){if(t.exec(a))return 1;w.lastIndex=0;let b=w.exec(a);return w.lastIndex=0,b?Number(b[1]):void 0}(a.content);for(let d=0;d<s.length;d++){let e=s[d]||"";if(e.startsWith("|"))u.trim()&&c.droppedIncompleteRows++,u=e;else if(u)u+=e;else{let a=w.exec(e);a&&(v=Number(a[1])),w.lastIndex=0;continue}if(u.endsWith("|")){let c=u.split("|").map(a=>a.trim());u="",o(c)&&(A=p(c)??A);let d=c[A.seq]??"",e=c[A.code]??"",f=c[A.name]??"",g=v,i=function(a){let b=a.join(" "),c=/第(\d+)页\s*共\d+页/u.exec(b);return c?Number(c[1]):void 0}(c);if(i&&(v=i),/^\d+$/u.test(d)&&r.test(e)){let i=Number((c[A.quantity]??"").trim()),m={seq:Number(d),code:e,name:f,description:A.description>=0?c[A.description]??"":"",unit:c[A.unit]??"",quantity:Number.isFinite(i)?i:0,section:j,subsection:k,sectionKind:l,villageGroup:n,page:g,sourceFile:b,chunkIndex:a.chunkIndex,sourceKind:"markdown"};m.seq>0&&h.push(m)}else if(!d&&q(e)&&f&&"分部小计"!==f){let a=m[z+=1]??(e.includes(".")?"subsection":"section");"unit-project"===a?(j=f,k="",l="unit-project"):"section"===a?(j=f,k="",l="plain"):k=f}}}u.trim()&&(i=u)}i.trim()&&c.droppedIncompleteRows++;let C=[];for(let a of(B="",e)){let c=x(a),d=c||B;c&&(B=c);let e=f.get(d),g=e?.villageGroup||d||"";C.push(...function(a,b){let c,d,e=[],f=a.split("\n"),g=()=>{c&&"number"==typeof c.seq&&c.seq>0&&e.push({seq:c.seq,code:c.code||"",name:c.name||"",description:(c.description||"").trim(),unit:c.unit||"",quantity:"number"==typeof c.quantity?c.quantity:0,section:"",subsection:"",villageGroup:b.villageGroup,sourceFile:b.sourceFile,chunkIndex:b.chunkIndex,sourceKind:"declaration"}),c=void 0,d=void 0},h=a=>{if(!c||!d)return;let b=a.trim();if(b){if("seq"===d){let a=Number(b);Number.isFinite(a)&&a>0&&(c.seq=a)}else if("code"===d)c.code=(c.code||"")+b;else if("name"===d)c.name=(c.name||"")+b;else if("description"===d)c.description=(c.description||"")+(c.description?" ":"")+b;else if("unit"===d)c.unit=b;else if("quantity"===d){let a=Number(b);Number.isFinite(a)&&(c.quantity=a)}}};for(let a of f){if(/^R\d+C\d+$/u.test(a)){/^R\d+C1$/u.test(a)?(g(),c={},d="seq"):d=void 0;continue}if(/^序号:$/u.test(a)){d="seq";continue}if(/^项目编码:$/u.test(a)){d="code";continue}if(/^项目名称:$/u.test(a)){d="name";continue}if(/^项目特征描述:$/u.test(a)){d="description";continue}if(/^单位:$/u.test(a)){d="unit";continue}if(/^工程量:$/u.test(a)){d="quantity";continue}if(/^(?:人工费|机械费|暂估价|合价|金额.*)$/u.test(a)){d=void 0;continue}h(a)}return g(),e}(a.content,{villageGroup:g,sourceFile:b,chunkIndex:a.chunkIndex}))}let D=new Map;for(let a of h)D.set(`${a.villageGroup}|${a.seq}`,a);for(let a of C){let b=`${a.villageGroup}|${a.seq}`;D.has(b)||D.set(b,a)}let E=[...D.values()].sort((a,b)=>a.villageGroup.localeCompare(b.villageGroup,"zh-CN")||a.seq-b.seq);var F=E,G=h;let H=y(G);for(let a of F){let b;if("declaration"===a.sourceKind&&!a.section){for(let c of H.get(a.villageGroup)||[]){if(c.seq>a.seq)break;b=c}b&&(a.section=b.section,a.subsection=b.subsection,a.sectionKind=b.sectionKind)}}let I=[...f.values()].map(a=>a.villageGroup).find(Boolean);if(I&&E.every(a=>!a.section))for(let a of E)a.section=I,a.sectionKind="unit-project";let J=[];for(let[a,b]of y(E)){let c=b.map(a=>a.seq).sort((a,b)=>a-b),e=c[c.length-1]||0,g=[];for(let a=1;a<=e;a++)c.includes(a)||g.push(a);let h=function(a,b){for(let[c,d]of a)if(d.villageGroup===b)return{sheetId:c,...d}}(f,a),i=h?.totalPages,j=function(a,b,c){let d=new Set,e="";for(let f of a){let a=x(f),g=a||e;if(a&&(e=a),!c||g===c){if(!c&&!(f.content.split("\n")[0]||"").includes(b))continue;for(let a of(t.test(f.content)&&d.add(1),w.lastIndex=0,f.content.matchAll(w))){let b=Number(a[1]);d.add(b),b>1&&d.add(b-1)}w.lastIndex=0}}return[...d]}(d,a,h?.sheetId),k=i?Array.from({length:i},(a,b)=>b+1).filter(a=>!j.includes(a)):[],l=b.filter(a=>"declaration"===a.sourceKind).length,m=b.filter(a=>!a.code).length,n=b.filter(a=>!a.name).length,o=b.filter(a=>a.code&&!r.test(a.code)).length;J.push({villageGroup:a,sheetId:h?.sheetId||"",totalPagesDeclared:i,pagesCovered:j.sort((a,b)=>a-b),pagesMissing:k,entryCount:b.length,entrySeqMissing:g,entriesFromDeclaration:l,entriesWithoutCode:m,entriesWithoutName:n,entriesWithInvalidCode:o,complete:0===g.length&&b.length>0})}return J.sort((a,b)=>a.villageGroup.localeCompare(b.villageGroup,"zh-CN")),{entries:E,villages:J,totalEntries:E.length,sourceFile:b,complete:J.length>0&&J.every(a=>a.complete),diagnostics:c}}({chunks:b,sourceFile:a});e.totalEntries>0?i.push({filePath:a,boq:e}):h.push(`${a}(解析出 0 条目)`)}catch(b){h.push(`${a}(${b instanceof Error?b.message:String(b)})`)}if(0===i.length)return{warning:`清单解析失败:${h.join(";")}`};let j=1===i.length?i[0].boq:function(a){let b=a=>{let b=a.split("/").slice(-2)[0]||"",c=/^(\d+)/u.exec(b);return c?Number(c[1]):Number.MAX_SAFE_INTEGER},c=[...a].sort((a,c)=>b(a.filePath)-b(c.filePath)),d=[],e=[],f={totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0},g=new Set;for(let a of c){var h;let b=((h=a.filePath).split("/").pop()||h).replace(/\.xls$/iu,"").replace(/[\s\u00a0]+/gu,"")||"单位工程";if(g.has(b)){let a=2;for(;g.has(`${b}(${a})`);)a+=1;b=`${b}(${a})`}for(let c of(g.add(b),a.boq.entries))c.subsection=c.subsection||c.section,c.section=b,c.sectionKind="unit-project",c.villageGroup=b,d.push(c);for(let[c,d]of a.boq.villages.entries())e.push({...d,villageGroup:1===a.boq.villages.length?b:`${b}\xb7${d.villageGroup||`工作表${c+1}`}`});f.totalChunks+=a.boq.diagnostics.totalChunks,f.markdownChunks+=a.boq.diagnostics.markdownChunks,f.declarationChunks+=a.boq.diagnostics.declarationChunks,f.skippedChunks+=a.boq.diagnostics.skippedChunks,f.droppedIncompleteRows+=a.boq.diagnostics.droppedIncompleteRows}return{entries:d,villages:e,totalEntries:d.length,sourceFile:c.map(a=>a.filePath).join(";"),complete:e.length>0&&e.every(a=>a.complete),diagnostics:f}}(i);return h.length>0?{boq:j,warning:`部分清单文件解析失败(已并入其余 ${i.length} 份):${h.join(";")}`}:{boq:j}}function N(a){let b=new Map;for(let c of a.entries){if(!c.name)continue;let a=(c.villageGroup||c.section||"").trim(),d=b.get(c.name);if(d)d.total+=c.quantity,a&&d.groupTotals.set(a,(d.groupTotals.get(a)??0)+c.quantity);else{let d=new Map;a&&d.set(a,c.quantity),b.set(c.name,{value:c.quantity,unit:c.unit,sourceFile:c.sourceFile,seq:c.seq,total:c.quantity,groupTotals:d})}}let c={};for(let[a,d]of b){let b=a=>Math.round(1e3*a)/1e3,e=[...d.groupTotals.entries()].map(([a,c])=>({group:a,value:b(c)}));c[a]={value:b(d.total),unit:d.unit,sourceFile:d.sourceFile,seq:d.seq,groups:e.length>0?e:void 0}}return c}let O=[{key:"绿化养护期",namePattern:/养护/u,extract:a=>{let b=/(?:一级|二级)养护[^。;;]{0,20}/u.exec(a.description);return b?b[0].trim():void 0}},{key:"喷播草籽种类",namePattern:/喷播|草籽/u,extract:a=>{let b=/(?:草籽|种子)[^。;;]*?(?:荷兰菊|紫花地丁|白三叶)[^。;;]*/u.exec(a.description);if(b)return b[0].replace(/^[^::]*[::]?/u,"").trim();let c=/(?:荷兰菊|紫花地丁|白三叶)[^。;;]*/u.exec(a.description);return c?c[0].trim():void 0}},{key:"池塘清淤深度",namePattern:/清淤|清塘/u,extract:a=>{let b=/(?:清淤深度|深度)[^。;;]*?(\d+(?:\.\d+)?)\s*m/u.exec(a.description);return b?`清淤深度 ${b[1]}m`:void 0}},{key:"过路涵涵头混凝土",namePattern:/涵头|过路涵/u,extract:a=>{let b=/(C\d{2})[^。;;]*混凝土/u.exec(a.description)||/混凝土[^。;;]*(C\d{2})/u.exec(a.description);return b?`涵头混凝土 ${b[1]}`:void 0}},{key:"路肩土预留",namePattern:/路肩/u,extract:a=>{let b=/(\d+(?:\.\d+)?)\s*[-~至]\s*(\d+(?:\.\d+)?)\s*m/u.exec(a.description);return b?`两侧各预留 ${b[1]}-${b[2]}m`:void 0}},{key:"一般路灯",namePattern:/路灯/u,extract:a=>{let b=/(\d+)\s*W/u.exec(a.description),c=/高\s*(\d+(?:\.\d+)?)\s*m/u.exec(a.description);if(!b&&!c)return;let d=["一般路灯"];return b&&d.push(`${b[1]}W LED`),c&&d.push(`高${c[1]}m`),/含基础|含灯杆基础|灯杆基础/u.test(a.description)&&d.push("含基础"),d.join(" ")}},{key:"暂列金额",namePattern:/暂列金额/u,extract:a=>{let b=/(\d+(?:\.\d+)?)\s*万元/u.exec(a.description);return b?`${b[1]}万元`:void 0},amount:!0}];function P(a,b,c=F){let{laborCostRatio:d,dailyWage:e}=c,f=Math.max(30,Math.round(b)),g=1e4*a*d.min,h=1e4*a*d.max,i=g/e.max,j=h/e.min,k=Math.max(1,Math.round(i/f*1.3)),l=Math.max(k,Math.round(j/f*1.6));return{min:k,max:l,detail:`合同估算价 ${a} 万元 \xd7 人工费占比 ${Math.round(100*d.min)}%~${Math.round(100*d.max)}% \xf7 综合工日单价 ${e.min}~${e.max} 元 \xf7 有效工期 ${f} 天 \xd7 峰值系数 1.3~1.6`}}let Q=[/C\d{2,3}/u,/DN\d{2,4}/iu,/Φ\d+(?:\.\d+)?/u,/\d+(?:\.\d+)?\s*(?:kW|W)/iu,/厚(?:度)?[::]*\s*\d+(?:\.\d+)?\s*(?:mm|cm)/u,/\d+\s*[×xX]\s*\d+(?:\s*[×xX]\s*\d+)?\s*(?:mm|cm)?/u,/HRB\d{3,4}/u,/Q\d{3}[A-Z]?/u,/YJV[^。;;]{0,12}|VV\d+[^。;;]{0,12}/u],R=new Set(["挖掘机","自卸汽车","压路机","洒水车","高空作业车","混凝土搅拌运输车"]),S=[{id:"vertical_transport",label:"垂直运输方式",relevance:/塔吊|塔式起重机|施工电梯|施工升降机|物料提升机|垂直运输/u,options:[{value:"塔式起重机",aliases:/塔吊|塔式起重机/},{value:"施工升降机",aliases:/施工电梯|施工升降机/},{value:"物料提升机",aliases:/物料提升机/},{value:"汽车式起重机",aliases:/汽车吊|汽车式起重机/}]},{id:"formwork",label:"模板体系",relevance:/模板/u,exclusive:!0,options:[{value:"木胶合板模板",aliases:/木胶合板|覆膜胶合板|胶合板模板|木模板/},{value:"钢模板",aliases:/钢模板|定型钢模/},{value:"铝合金模板",aliases:/铝合金模板|铝模/},{value:"大模板",aliases:/大模板/},{value:"爬升模板",aliases:/爬升模板|爬模/}]},{id:"concrete_supply",label:"混凝土供应",relevance:/混凝土/u,exclusive:!0,options:[{value:"商品混凝土(预拌)",aliases:/商品混凝土|预拌混凝土/},{value:"自拌混凝土",aliases:/自拌混凝土|现场拌制混凝土|现场搅拌混凝土/}]},{id:"scaffold",label:"脚手架体系",relevance:/脚手架|爬架/u,options:[{value:"落地式钢管脚手架",aliases:/落地式[^,。;;]{0,6}脚手架|落地脚手架/},{value:"悬挑式脚手架",aliases:/悬挑[^,。;;]{0,6}脚手架|悬挑脚手架/},{value:"附着式升降脚手架",aliases:/附着式升降脚手架|爬架/},{value:"门式脚手架",aliases:/门式脚手架/},{value:"盘扣式脚手架",aliases:/盘扣/},{value:"碗扣式脚手架",aliases:/碗扣/}]},{id:"foundation_support",label:"基坑支护形式",relevance:/基坑|支护/u,exclusive:!0,options:[{value:"放坡开挖",aliases:/放坡/},{value:"土钉墙支护",aliases:/土钉墙|土钉支护/},{value:"灌注桩支护",aliases:/灌注桩|钻孔灌注桩|排桩支护/},{value:"钢板桩支护",aliases:/钢板桩|拉森桩/},{value:"地下连续墙",aliases:/地下连续墙|地连墙/},{value:"锚杆(索)支护",aliases:/锚杆|锚索/},{value:"喷锚支护",aliases:/喷锚/}]},{id:"earthwork_haul",label:"土方外运方式",relevance:/土方|渣土|弃土/u,options:[{value:"自卸汽车外运",aliases:/自卸汽车|自卸车/},{value:"密闭渣土车外运",aliases:/密闭式?[^,。;;]{0,4}车|渣土车/},{value:"场内平衡利用",aliases:/场内平衡|就地平衡|场内调配|回填利用/}]},{id:"foundation_form",label:"基础形式",relevance:/基础/u,options:[{value:"独立基础",aliases:/独立基础/},{value:"条形基础",aliases:/条形基础|带形基础/},{value:"筏板基础",aliases:/筏板基础|筏形基础|满堂基础/},{value:"桩基础",aliases:/桩基础|桩基/u},{value:"箱形基础",aliases:/箱形基础|箱型基础/}]},{id:"vibration_isolation",label:"设备减振方式",relevance:/减振|隔振|减震|振动/u,options:[{value:"减振吊架",aliases:/减振吊架|隔振吊架|减震吊架|弹性吊架/},{value:"减振基础",aliases:/减振基础|隔振基础|减震基础|惯性基础/},{value:"橡胶隔振垫",aliases:/橡胶隔振垫|橡胶减振垫|隔振垫/},{value:"弹簧减振器",aliases:/弹簧减振器|弹簧隔振器|阻尼弹簧减振器/}]},{id:"concrete_pouring",label:"混凝土浇筑连续组织",relevance:/浇筑/u,options:[{value:"连续浇筑",aliases:/连续浇筑|一次浇筑|整体浇筑/,weakAliases:/同步浇筑|同步施工|同步/u},{value:"分段浇筑",aliases:/分段浇筑|分仓浇筑|跳仓浇筑|分区浇筑/}]},{id:"pavement_structure",label:"路面结构类型",relevance:/路面|基层|面层|沥青|水泥稳定/u,options:[{value:"柔性路面",aliases:/沥青混凝土路面|沥青混凝土面层|沥青路面|沥青面层/,weakAliases:/柔性/u},{value:"半刚性路面",aliases:/半刚性/u},{value:"刚性路面",aliases:/刚性路面|水泥混凝土路面|水泥混凝土面层/}]}],T=/不采用|不使用|不设置|不考虑|不得|禁止|取消/u;function U(a){return a.split(/[,,、::]/u).map(a=>a.trim()).filter(Boolean)}function V(a){let b=function(a,b){let c=[];for(let a of b){let b=function(a){let b=`${a.filePath||""} ${a.roleId||""} ${a.sectionTitle||""}`;return/补疑|澄清|答疑|修正|更新/u.test(b)?100:/招标文件|招标公告|投标人须知|前附表/u.test(b)?90:/清单|工程量/u.test(b)||/图纸|设计|dwg|drawing/iu.test(b)?80:/规范|标准|规程/u.test(b)?60:50}(a);for(let d of(0,i.wj)((0,j.lG)(a.content)).split(/[。;;\n]/u)){let a=d.trim();a.length<6||a.length>200||c.push({text:a,weight:b})}}for(let b of a){let a=`${b.key||""} ${b.fieldName||""} ${(0,j.lG)(b.value)}`.trim();a.length<6||a.length>200||c.push({text:a,weight:Math.round(60*Math.max(.5,Math.min(1,b.confidence||.7)))})}return c}(a.facts,a.evidence),c=[];for(let a of S){let d=new Map;for(let c of b){if(!a.relevance.test(c.text))continue;let b=U(c.text);for(let e of a.options){let a=b.find(a=>e.aliases.test(a));if(!a||T.test(a))continue;let f=d.get(e.value)||{score:0,mentions:0,bestWeight:0};f.score+=c.weight,f.mentions+=1,f.bestWeight=Math.max(f.bestWeight,c.weight),d.set(e.value,f)}}let e=[...d.entries()].map(([a,b])=>({value:a,...b})).sort((a,b)=>b.score-a.score||b.mentions-a.mentions||(a.value<b.value?-1:1)),f=e[0];if(!f||f.bestWeight<60)continue;if(a.exclusive){c.push({id:a.id,label:a.label,values:[f.value]});continue}let g=Math.max(60,.4*f.score),h=e.filter(a=>a.score>=g).slice(0,3).map(a=>a.value);h.length>0&&c.push({id:a.id,label:a.label,values:h})}return c}function W(a){return S.find(b=>b.id===a)}function X(a,b){return S.find(c=>{let d=a=>c.options.some(b=>b.aliases.test(a)||b.weakAliases?.test(a));return c.options.some(c=>c.aliases.test(a)||c.aliases.test(b))&&d(a)&&d(b)})}function Y(a,b){for(let c of a.options){let a=c.aliases.exec(b);if(a)return{option:c,index:a.index,end:a.index+a[0].length}}for(let c of a.options){let a=c.weakAliases?.exec(b);if(a)return{option:c,index:a.index,end:a.index+a[0].length}}}function Z(a,b){let c=U(a).find(a=>b.test(a));return!!c&&T.test(c)}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}let _=[{item:"主要施工方法",weight:"1.5",chapterPattern:/主要分部分项|施工方案|施工方法/u},{item:"物资计划",weight:"0.5",chapterPattern:/物资|资源配置|材料/u},{item:"机械设备计划",weight:"0.5",chapterPattern:/机械|资源配置|设备/u},{item:"劳动力安排",weight:"0.5",chapterPattern:/劳动力|资源配置|人员/u},{item:"质量措施",weight:"1.5",chapterPattern:/质量/u},{item:"安全措施",weight:"1.5",chapterPattern:/安全/u},{item:"工期措施",weight:"1.0",chapterPattern:/工期|进度/u},{item:"文明施工",weight:"1.0",chapterPattern:/文明施工|环境保护|绿色施工/u},{item:"总平面布置图",weight:"0.5",chapterPattern:/总平面|平面布置/u},{item:"重难点及保证措施",weight:"1.5",chapterPattern:/重难点|重点|难点|概况/u}];function aa(a,b){let c=a.trim();if(/^其他$|^其他工程$/u.test(c)){let a=b.map(a=>a.name);return a.some(a=>/彩绘|护栏|围栏|小品|标识|标牌|墙面|整治/u.test(a))?"环境整治工程":a.some(a=>/绿化|栽植|铺装|种植/u.test(a))?"景观附属工程":a.some(a=>/拆除|清理|清淤|清运/u.test(a))?"清理整治工程":"零星工程"}return/^其他装饰/u.test(c)?"零星装饰工程":/^措施项目$/u.test(c)?b.map(a=>a.name).some(a=>/化粪池|吊装|安装/u.test(a))?"模板、脚手架及化粪池安装工程":"模板与脚手架工程":/墙[、,]?柱面装饰/u.test(c)?b.some(a=>/幕墙|隔断/u.test(a.name))?c:"墙柱面装饰工程":c}function ab(a){let b=[];for(let c of a.matchAll(/(?:\d+|[一二三四五六七八九十]+)[..、]\s*([^::;;。]{1,40}?)[::]\s*([^。;;\n]{1,80})/gu)){let a=c[1].trim(),d=c[2].trim();!/具体详见|其他|满足验收/u.test(a)&&!/(?:(?:详)?见|按)(?:设计|施工)?图纸|招标文件补疑/u.test(d)&&a&&d&&b.push({key:a,value:d})}return b}function ac(a,b){let c=[...b].sort((a,b)=>a.seq-b.seq),d={},e=new Map;for(let a of c)a.name&&e.set(a.name,(e.get(a.name)||0)+a.quantity);for(let[a,b]of e){let e=c.find(b=>b.name===a)?.unit||"";d[a]={value:Math.round(1e3*b)/1e3,unit:e}}let f=[...new Set(c.map(a=>a.name).filter(Boolean))].slice(0,16),g=function(a){let b=[];for(let c of a)for(let a of ab(c.description))/含|配合|安装|铺设|浇筑|夯实|碾压|养护|刻痕|拉毛|切缝|灌缝|喷播|栽植|回填|吊装|固定/u.test(a.value)&&a.value.length<=60&&b.push(`${c.name}:${a.value}`);return[...new Set(b)].slice(0,20)}(c),h=[],i=new Set;for(let a of c){for(let b of ab(a.description)){let a=`${b.key}=${b.value}`;if(!i.has(a)&&(i.add(a),h.push({key:b.key,value:b.value,source:"boq"}),h.length>=24))break}if(h.length>=24)break}let j=[];for(let a of c)for(let b of ab(a.description))/压实|试验|检测|验收|闭水|合格/u.test(`${b.key}${b.value}`)&&j.length<12&&!j.includes(b.value)&&j.push(b.value);let k=(0,z.cn)([a]),l=[];for(let a of(0===j.length&&k.length>0&&j.push(...k[0].acceptance.slice(0,6).map(a=>`${a}(知识卡)`)),k.slice(0,2)))for(let b of a.standards)l.includes(b)||l.push(b);return{name:a,kind:"major",quantities:d,processChain:f,methods:g,params:h,acceptance:j,standards:l,source:"boq",coveredSeqs:c.map(a=>a.seq)}}function ad(a,b){if(b)return b.needsBlueprintAuthority(a);let c=[];return/劳动力/u.test(a)&&c.push("laborPeak"),/资源配置|资源|机械|设备|机具/u.test(a)&&c.push("blueprint"),/进度计划|进度|工期/u.test(a)&&c.push("schedule"),[...new Set(c)]}function ae(a,b,c){let d=ad(a,c),e=b?b.checks.filter(a=>!a.passed).map(a=>a.name):[],f=b?.authorityAvailability;return f?{missing:d.filter(a=>!f[a]),failedChecks:e}:{missing:d,failedChecks:e}}function af(a,b){let c=["【一体化蓝图参数桶——全项目口径唯一权威源,正文引用必须与此一致,不得自行推导不同数值】"];return c.push("计划类数值(劳动力人数/工期/工程量/养护期)必须且只能引用以下锚点值:禁止将各工种人数相加推导峰值、禁止按定额自行估算、禁止改写锚点数值。"),c.push(`- 项目:${a.project.name}(${a.project.scope})`),c.push(...(0,B.Xe)((0,B.IV)(a),b)),a.inspectionBatches.length>0&&c.push(`- 检验批划分:${a.inspectionBatches.map(a=>`${a.scope}——${a.planDesc}`).join(";")}`),c.push(`- 临时用电:${a.tempUtilities.powerLoad}`),c.push(`- 临时用水:${a.tempUtilities.waterUsage}`),a.decisionLock.entries.length>0&&c.push(`- 关键决策锁:${a.decisionLock.entries.map(a=>`${a.label}:${a.values.join("、")}`).join(";")}`),a.constructionDeployment.sections.length>0&&c.push(`- 施工部署:${a.constructionDeployment.flow};施工顺序 ${a.constructionDeployment.sequence}`),a.keyDifficulties.length>0&&c.push(`- 重难点(逐项列明):${a.keyDifficulties.map(a=>`${a.name}——${a.measure}`).join(";")}`),c.push(`- 金额禁区:${a.amountRule}`),c.push(a.drawingNote),c.join("\n")}let ag=[{domain:"contract",chapterPattern:/进度|工期|总体|部署|概况|工程|计划/u},{domain:"schedule",chapterPattern:/进度|工期|部署|计划|总体|施工方案|分部分项/u},{domain:"labor",chapterPattern:/劳动力|人员|资源|进度|工期|部署|概况/u},{domain:"equipment",chapterPattern:/机械|设备|资源/u},{domain:"material",chapterPattern:/物资|材料|资源|采购|亮化|路灯|照明/u},{domain:"quantity",chapterPattern:/分部分项|施工方案|施工方法|土方|道路|管网|工程概况/u},{domain:"spec",chapterPattern:/材料|物资|质量|技术|施工方案|分部分项/u},{domain:"earthwork",chapterPattern:/土方|土石方|道路|管网|施工方案|分部分项/u},{domain:"test",chapterPattern:/质量|试验|检测|验收/u},{domain:"redline",chapterPattern:/绿化|种植|养护|苗木|技能|培训|成品保护|质量|亮化|路灯|照明|概况|工程|总体/u}],ah=/编制|工程概况|项目概况|概况|说明/u;function ai(a,b,c){let d=[c.blockTitle,...c.subPointTitles,...c.skeletonNames??[]].map(a=>a.trim()).filter(a=>a.length>=2),e=a=>d.some(b=>a.includes(b)||b.includes(a)),f=[`【第 ${a.id} 章「${a.title}」蓝图切片(本节聚焦)——以下项目专属事实由蓝图冻结锁定,正文必须一致引用】`,m.Ru],g=[],h=[...new Set(a.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode).map(a=>a.path)))];h.length>0&&g.push(`本章 must_cite 参数(正文必须出现且与蓝图一致):${h.join("、")}`);let i=[];for(let b of a.subSections){let a=b.workPackages.filter(a=>e(a.name));if(0===a.length)continue;let c=[`## ${b.id} ${b.title}`],d=b.requiredParams.filter(a=>"must_cite"===a.mode).map(a=>a.path);for(let b of(d.length>0&&c.push(`must_cite 参数:${d.join("、")}`),a))c.push(...function(a){let b=[`
|
|
222
222
|
### 工作包:${a.name}(${"major"===a.kind?"主要":"一般"}工作包)`],c=Object.entries(a.quantities).map(([a,b])=>`${a} ${b.value}${b.unit}`).join("、");return c&&b.push(`- 工程量:${c}`),a.processChain.length>0&&b.push(`- 工序链:${a.processChain.join(" → ")}`),a.methods.length>0&&b.push(`- 施工方法(清单特征原文):${a.methods.join(";")}`),a.params.length>0&&b.push(`- 工艺参数:${a.params.map(a=>`${a.key}=${a.value}`).join(";")}`),a.acceptance.length>0&&b.push(`- 验收要求:${a.acceptance.join(";")}`),a.standards.length>0&&b.push(`- 规范依据:${a.standards.join(";")}`),b}(b));i.push(c.join("\n"))}let j=a.subSections.reduce((a,b)=>a+b.workPackages.length,0);if(0===i.length&&j>0){let b=[];for(let c of a.subSections){let a=c.workPackages.map(a=>{let b=Object.entries(a.quantities),c=b.slice(0,3).map(([a,b])=>`${a} ${b.value}${b.unit}`).join("、");return c?`${a.name}(${c}${b.length>3?" 等":""})`:a.name});a.length>0&&b.push(`- ${c.title}:${a.join(";")}`)}g.push(`【本章工作包索引(本节为章级总述/无专属工作包;各工作包详细参数见本章其他小节,本节不得复写单个分部方案)】
|
|
223
223
|
${b.join("\n")}`)}else g.push(...i);let k=function(a,b){let c=ag.filter(b=>b.chapterPattern.test(a.title)).map(a=>a.domain),d=(0,B.Bf)((0,B.IV)(b),c);return(ah.test(a.title)&&d.push(...function(a){let b=[];return(a.basisRegulations??[]).length>0&&b.push(`- 招标文件引用法规(项目专属事实,编制依据小节必须列出法规名称及文号):${a.basisRegulations.join("、")}`),b.push("- 编制依据小节由写作模型自行列写:国家法律法规及文号、工程所在地地方性法规、与本工程分部对应的现行施工验收规范名称及编号;不得空写「国家现行法律、行政法规」等类别话术,不得编造文号"),b}(b)),0===d.length)?"":["【本章数值锚点——计划类数值必须且只能引用以下锚点值;禁止将各工种人数相加推导峰值、禁止按定额自行估算、禁止改写或自设任何计划类数值】",...d].join("\n")}(a,b),l=c.sliceCharsCap??6e3,n=[...f,...g,k].filter(Boolean).join("\n\n");if(n.length>l){let a=[],b=0;for(let c of n.split("\n")){if(b+c.length+1>l)break;a.push(c),b+=c.length+1}n=`${a.join("\n")}
|
|
224
224
|
(本节蓝图切片过长已截断,未展开工作包见本章其他小节与绑定材料)`}return n}function aj(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function ak(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 al(a,b,c){let d=[],e=[],f=a,g=b.subSections.flatMap(a=>a.requiredParams.filter(a=>"must_cite"===a.mode&&a.strict)),h=[];/劳动力|人员|资源|进度|工期|部署|概况/u.test(b.title)&&c.resources.labor.peakValue>0&&h.push({path:"data.resources.labor.peak_value",mode:"must_cite",strict:!0}),/绿化|种植|养护|苗木|技能|培训|成品保护|质量/u.test(b.title)&&h.push({path:"data.redline.greening_maintenance",mode:"must_cite",strict:!0});let i=[...g,...h],j=new Set;for(let a of i)if(!j.has(a.path)){if(j.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(a.path.startsWith("data.quantities.")){let b=a.path.slice(16),g=c.quantities[b];if(!g||g.value<=0)continue;let h=g.unit||"",i=RegExp(`${aj(b)}[^\\n。;;]{0,40}?(\\d+(?:\\.\\d+)?)\\s*${h?aj(h):""}`,"gu"),j=!1;f=f.replace(i,(a,c)=>{j=!0;let e=Number(c);return e===g.value||e<=0?a:(d.push({anchor:b,from:`${e}${h}`,to:`${g.value}${h}`}),a.replace(c,String(g.value)))}),j||e.push(`${b} ${g.value}${h}`);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,l._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,l._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 am(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)){if(c.add(e.path),"data.contract.total_days"===e.path&&b.contract.totalDays>0){d.push(`总工期 ${b.contract.totalDays} 日历天`);continue}if(e.path.startsWith("data.quantities.")){let a=b.quantities[e.path.slice(16)];a&&a.value>0&&d.push(`${e.path.slice(16)} ${a.value}${a.unit}`)}}return d.join(";")}let an={core:1.5,general:1,brief:.6};function ao(a){return/^(?:确保\s*)?[人材机](?:员|力|料|械|工)?\s*的保障体系与措施$/u.test(a)}function ap(a,b){let c=a.replace(/\s+/gu,""),d=b.replace(/\s+/gu,"");return c===d||c.includes(d)||d.includes(c)}function aq(a,b){if(0===a.length)return;let c=Math.max(0,Math.round(b)),d=a.reduce((a,b)=>a+Math.max(1,b.subPoints.length),0),e=Math.max(1,Math.floor(c/1800)),f=a;if(f.length>e){let a=[],b=Math.max(1,Math.ceil(d/e)),c=[],g=0;for(let d of f){if(ar(d.title)){c.length>0&&(a.push(c),c=[],g=0),a.push([d]);continue}let f=Math.max(1,d.subPoints.length);c.length>0&&(g+f>6||a.length<e-1&&g+f>b)&&(a.push(c),c=[],g=0),c.push(d),g+=f}c.length>0&&a.push(c),f=a.map(a=>1===a.length?a[0]:{title:(a.find(a=>ar(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&&f.length<e;a+=1){let a=f.map(a=>Math.max(.5,a.subPoints.reduce((a,b)=>a+an[b.tier||"general"],0))),b=a.reduce((a,b)=>a+b,0)||f.length,d=-1,e=2800;if(f.forEach((f,g)=>{let h=Math.floor(c*a[g]/b);f.subPoints.length>=2&&h>e&&(d=g,e=h)}),d<0)break;let g=f[d],h=Math.ceil(g.subPoints.length/2);f.splice(d,1,{...g,subPoints:g.subPoints.slice(0,h),targetWords:0},{...g,subPoints:g.subPoints.slice(h),targetWords:0})}let g=f.map(a=>Math.max(.5,a.subPoints.reduce((a,b)=>a+an[b.tier||"general"],0))),h=g.reduce((a,b)=>a+b,0)||f.length,i=Math.min(1800,Math.floor(c/Math.max(1,f.length))),j=f.map((a,b)=>Math.max(i,Math.floor(c*g[b]/h))),k=j.reduce((a,b)=>a+b,0)-c;if(k>0){let a=j.map(a=>a-i),b=a.reduce((a,b)=>a+b,0);if(b>0){let c=0;j.forEach((d,e)=>{let f=Math.min(a[e],Math.floor(k*a[e]/b));j[e]=d-f,c+=f});for(let a=k-c;a>0;a-=1){let a=-1;if(j.forEach((b,c)=>{!(b<=i)&&(a<0||b>j[a])&&(a=c)}),a<0)break;j[a]=j[a]-1}}}let l=j.reduce((a,b)=>a+b,0);if(l<c){let a=0;j.forEach((b,c)=>{b>j[a]&&(a=c)}),j[a]=j[a]+(c-l)}for(let a of(f.forEach((a,b)=>{a.targetWords=Math.max(1,Math.min(j[b],4500))}),f.forEach(a=>{let b=Math.max(1,Math.floor(a.targetWords/300));if(a.subPoints.length<=b)return;let c=a.subPoints.length,d=a.subPoints.slice(0,b-1),e=a.subPoints.slice(b-1);a.subPoints=[...d,{title:"其他分部分项工程施工要点",sources:[...new Set(e.flatMap(a=>a.sources))],tier:"brief"}],console.warn(`[blueprint] 块「${a.title}」超密度守卫:要点数 ${c} → ${a.subPoints.length}(块预算 ${a.targetWords} 字,密度上限 ${b} 要点,${e.length} 个要点合并为概览要点)`)}),f)){if(0===a.subPoints.length)continue;let b=a.subPoints.map(a=>an[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)})}f!==a&&(a.length=0,a.push(...f))}function ar(a){return m.Yp.test(a)||m.gG.test(a)}function as(a,b,c){let d=new Map,e=[];for(let b of a){if(ao(b)||m.Yp.test(b)||m.gG.test(b)){e.push({kind:"solo",section:b});continue}let a=/工期|进度|节点|计划|纠偏|预警/u.test(b)?"工期进度":/质量|验收|三检|样板|隐蔽|复试|实测|通病/u.test(b)?"质量验收":/安全|危大|风险|隐患|应急|临边|洞口|消防|临电/u.test(b)?"安全风险":/文明|扬尘|噪声|绿色|废水|垃圾|环保|智慧/u.test(b)?"文明绿色":/劳务|工资|实名|银行|考勤|人员|岗位|组织|职责/u.test(b)?"组织劳务":/资源|材料|设备|机械|人材机|调配/u.test(b)?"资源保障":/施工|工艺|流程|顺序|穿插|部署|区段|流水/u.test(b)?"施工组织":"综合管理";d.has(a)||(d.set(a,[]),e.push({kind:"domain",key:a})),d.get(a).push(b)}let f=a=>{let b=[];for(let c of a){let a=b[b.length-1],d=a?a.sources[a.sources.length-1]:"";!(0,m.tZ)(c)&&!ao(c)&&a&&(ap(c,d)||function(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}(c,d)>=.75)?(a.sources.push(c),c.length>a.title.length&&(a.title=c)):b.push({title:c,sources:[c]})}return b},g=[];for(let a of e){if("solo"===a.kind){g.push({title:a.section,subPoints:[{title:a.section,sources:[a.section]}],facts:[],targetWords:0});continue}let c=f(d.get(a.key)||[]);for(let a=0;a<c.length;a+=6){let d=c.slice(a,a+6);g.push({title:d[0].title||b,subPoints:d,facts:[],targetWords:0})}}return aq(g,c),{blocks:g,coveredSections:a.slice(),fallbackSections:[]}}function at(a){let b,{blueprintChapter:c,inputSections:d,chapterTitle:e,targetWords:f}=a,g=[],i=[];if(c&&0!==c.subSections.length){for(let a of c.subSections){let b=a.workPackages.map(a=>({title:a.name,sources:[a.name],tier:"major"===a.kind?"core":"general"}));b.length>6?g.push(...function(a,b){let c=a.replace(/工程$/u,""),d=[],e=new Map;for(let a of b){let b=(0,j.Ld)(a.title),c=e.get(b);void 0===c&&(c=d.length,e.set(b,c),d.push({label:b,points:[]})),d[c].points.push(a)}let f=[];for(let a of d)for(let b=0;b<a.points.length;b+=6){let d=a.points.slice(b,b+6),e=0===b?(0,k.UW)(c,a.label):(0,k.UW)(c,d[0].title);f.push({title:e,subPoints:d,facts:[],targetWords:0})}return f}(a.title,b)):g.push({title:a.title,subPoints:b,facts:[],targetWords:0})}if(0===g.length){let a=as(d,e,f);g=a.blocks,i=a.coveredSections,b=a.fallbackSections}else i=d.filter(a=>g.some(b=>ap(b.title,a)||b.subPoints.some(b=>b.sources.some(b=>ap(b,a))||ap(b.title,a)))),b=d.filter(a=>!i.includes(a))}else{let a=as(d,e,f);g=a.blocks,i=a.coveredSections,b=a.fallbackSections}if(b.length>0){for(let a of as(b,e,f).blocks)g.some(b=>ap(b.title,a.title)||a.subPoints.some(a=>b.subPoints.some(b=>ap(b.title,a.title))))||g.push(a);i=[...i,...b],b=[]}if(a.projectContext&&a.evidence){let b=a.projectContext,c=a.evidence,d=m.gG.test(e)?[]:(a.blueprintChapter?.subSections??[]).map(a=>a.title),i=m.gG.test(e)?new Set(g.map(a=>(0,j.Sw)(a.title)).filter(Boolean)):new Set;g=g.map(a=>{if(!ar(a.title)||m.gG.test(e)&&m.gG.test(a.title))return a;let k=function(a,b){let c=[];for(let b of a){let a=b.trim(),d=a.replace(/\s+/gu,"");if(!(!d||/^其他$|^其它$|^其他工程$|^其余/u.test(d))&&!c.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(d)||d.includes(b)})&&(c.push(a),c.length>=12))break}return c}([...(0,h.Ep)(b,c).filter(a=>{let b=a.replace(/^[一二三四五六七八九十百\d]+[、..\s::-]+/u,"");return!i.has((0,j.Sw)(b))}),...d],0);if(k.length<3)return a;let l=Math.max(1,g.filter(a=>ar(a.title)).length),n=Math.max(3,Math.min(k.length,Math.floor(f/350/l)));if(k.length<=n)return{...a,subPoints:k.map(a=>({title:a,sources:[a],tier:"core"}))};let o=k.slice(0,n),p=k.slice(n);return{...a,subPoints:[...o.map(a=>({title:a,sources:[a],tier:"core"})),{title:"其他分部分项工程施工要点",sources:p,tier:"brief"}]}})}let l=(0,k.SX)(g.map(a=>({title:a.title})));return g.forEach((a,b)=>{a.title=l[b]}),aq(g,f),0===g.length&&e.trim()&&(g=[{title:e,subPoints:[],facts:[],targetWords:Math.min(2800,Math.max(1800,f))}]),{blocks:g,coveredSections:i,fallbackSections:b}}function au(a,b){let c=b.filter(Boolean),d=c.length;if(a&&a.subSections.length>0){d=a.subSections.reduce((a,b)=>a+b.workPackages.length,0);let b=c.filter(b=>a.subSections.some(a=>ap(a.title,b)||a.workPackages.some(a=>ap(a.name,b)))).length;d+=c.length-b}let e=Math.ceil(d/6);return{points:d,minFeasibleWords:1800*e}}function av(a,b){let c=[],d=a.split("\n").filter(a=>!/^\s*\|/u.test(a.trim())).join("\n");if(b.resources.labor.peakValue>0)for(let a of d.matchAll(/(?:劳动力峰值|施工高峰|高峰人数|高峰期劳动力|劳动力高峰)(?:为|约|达到|共计)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*人/gu)){let d=Number(a[1]);if(d>0&&d!==b.resources.labor.peakValue){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的劳动力峰值 ${d} 人`,suggestion:`请统一使用蓝图劳动力峰值:${b.resources.labor.peakValue} 人`});break}}if(b.contract.totalDays>0)for(let a of d.matchAll(/(?:总工期|施工工期|合同工期|工期)(?:为|约|共计|控制)?[^\n。;;]{0,20}?(\d+(?:\.\d+)?)\s*(?:日历)?天/gu)){let e=Math.max(0,(a.index??0)-16),f=d.slice(e,(a.index??0)+a[0].length),g=(a.index??0)-e+a[0].indexOf(String(a[1])),h=f.slice(0,g),i=/^(?:总工期|施工工期|合同工期)/u.test(a[0]),j=g>0&&/按|阶段|拆除|清杂|准备|第\d+日|至第|集中|延误|滞后|分解|机动|预留|保留|余量|缓冲|占用|无法容纳|不少于|不超过|不得超过|不大于|不低于|至少|最多/u.test(h),k=!i&&g>0&&/计划|安排/u.test(h);if(j||k)continue;let l=Number(a[1]);if(l>0&&l!==b.contract.totalDays){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工期表述 ${l}日历天`,suggestion:`请统一使用蓝图总工期:${b.contract.totalDays} 日历天`});break}}for(let d of b.redLineFacts.filter(a=>!a.amount&&"自然村数量"!==a.key)){let b=String(d.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))||c.push({level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实缺口:正文未体现「${d.key}=${d.value}」`,suggestion:`请在对应章节补写该红线事实(数值必须与蓝图一致)`}))}let e=b.redLineFacts.find(a=>"自然村数量"===a.key),f=e?Number(/(\d+)/u.exec(e.value)?.[1]):0;if(f>0)for(let a of d.matchAll(/(\d+)\s*个(?:美丽宜居)?自然村(?!分组|施工组)/gu)){let b=d.slice(Math.max(0,(a.index??0)-16),a.index??0);if(/片区|分为|分成|划分为|每组|每片|每台|每个|各台|各车|每村/u.test(b))continue;let e=Number(a[1]);if(e>0&&e!==f){c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图红线事实冲突:正文出现与蓝图不一致的自然村数量 ${e} 个`,suggestion:`请统一使用蓝图自然村数量:${f} 个自然村`});break}}let g=[],h=[],i=Object.entries(b.quantities).sort((a,b)=>b[0].length-a[0].length),j=[];for(let[a,b]of i){if(!b||b.value<=0)continue;let c=b.unit||"",e=c?`${function(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)":aj(a)}(c)}(?![0-9A-Za-z])`:"",f=RegExp(aj(a),"gu");for(let i of d.matchAll(f)){let f=i.index??0,k=f+a.length;if(j.some(a=>f<a.end&&k>a.start))continue;j.push({start:f,end:k});let l=d.slice(k,k+40),m=Math.min(...[l.search(/[、。;;,,\n]/u)].filter(a=>a>=0).concat([l.length])),n=l.slice(0,m),o=RegExp(`(?<![\\dA-Za-z])(\\d+(?:\\.\\d+)?)\\s*${e}`,"u").exec(n);if(!o)continue;let p=d.slice(f,k+(o.index??0)+o[0].length),q=p.slice(a.length);if(/按[^。;;\n|]{0,16}?(?:强度|厚度|规格|等级|部位)[^。;;\n|]{0,8}?(?:分区|分别|分规格|分强度|分等级|分部位)/u.test(q))continue;let r=p.lastIndexOf(String(o[1]));if(/(?:每层每|按每|每批|每处|每层)\s*$/u.test(p.slice(0,r))||/^[^\d]{0,4}(?:不少于|至少)\s*\d+\s*[点个处]/u.test(p.slice(r+String(o[1]).length))||r>0&&/(?:间距|不大于|不小于|≥|≤|直径|宽度|厚度|高度|深度|坡度)[^0-9]*$/u.test(p.slice(0,r)))continue;let s=d.slice(Math.max(0,f-12),f);if(/[郢庄岗塘圩坝池井]/u.test(s))continue;let t=d.lastIndexOf("\n\n",f),u=-1===t?0:t+2,v=d.indexOf("\n\n",f),w=-1===v?d.length:v;if(/[郢庄岗塘圩坝]/u.test(d.slice(u,w))||/(?:直径|DN|Φ|φ)\\s*\\d+/u.test(d.slice(Math.max(0,f-8),f))||/(?:直径|DN|Φ|φ)\\s*\\d+/u.test(d.slice(f+a.length,f+a.length+8)))continue;let x=Number(o[1]);if(Number.isFinite(x)&&!(x<=0)){if(x===b.value){h.push({ns:f});continue}(b.groups??[]).some(a=>1e-6>Math.abs(a.value-x))||g.push({name:a,value:x,unit:c,authorityValue:b.value,ns:f})}}}let k=a=>{let b=Math.max(d.lastIndexOf("。",a),d.lastIndexOf("\n",a)),c=d.indexOf("。",a);-1===c&&(c=d.length);let e=d.indexOf("\n",a);return -1===e&&(e=d.length),{start:b+1,end:Math.min(c,e)+1}},l=(a,b)=>{if(a.length>10)return!1;let c=a.map(a=>Math.round(100*a)),d=Math.round(100*b);for(let a=1;a<1<<c.length;a+=1){let b=0,e=0;for(let d=0;d<c.length;d+=1)(a&1<<d)!=0&&(b+=c[d],e+=1);if(e>=2&&b===d)return!0}return!1},m=new Set;{let a=new Map;for(let b of g){let c=a.get(b.name)??[];c.push(b.value),a.set(b.name,c)}for(let[b,c]of a){let a=[...new Set(c)];a.length>=2&&l(a,g.find(a=>a.name===b)?.authorityValue??0)&&m.add(b)}}let n=new Set;for(let a of g){let b=k(a.ns),e=d.lastIndexOf("\n\n",a.ns),f=-1===e?0:e+2;if(/(?:单体|单座|单栋|单幢|每座|每栋|化粪池|作业对象)/u.test(d.slice(f,b.end)))continue;let i=g.filter(c=>c!==a&&c.ns>=b.start&&c.ns<b.end).length+1,j=h.filter(a=>a.ns>=b.start&&a.ns<b.end).length;!(i>=2&&j>=1||m.has(a.name))&&(n.has(a.name)||(n.add(a.name),c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`蓝图引用冲突:正文出现与蓝图不一致的工程量 ${a.name} ${a.value}${a.unit}`,suggestion:`请统一使用蓝图工程量:${a.name} ${a.authorityValue}${a.unit}`})))}return c}let aw=/(?<=[日天])\s*[0-9]+(?:\.[0-9]+)?(?=[\s]*(?:招标|建设|质量|合同|项目|工程|资金|投标|开标|评标|付款|工期|开工|计划|计价|现场|资质|标段|[0-9]{1,3}[.、.]|[,,。;;]|$))/u;function ax(a){let b=Object.values(a.byKey||{}).filter(a=>!!(a&&a.label&&a.value)).sort((a,b)=>(b.priority||0)-(a.priority||0));return 0===b.length?"":b.slice(0,60).map(a=>{let b=String(a.value),c=aw.exec(b),d=c?b.slice(0,c.index).trim():b;return`- ${a.label}:${d}`}).join("\n")}function ay(a){let b=Date.now(),c={stage:"阶段 0",standardBlocksLoaded:0,standardBlockGaps:[],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]},h=M({projectRoot:a.projectRoot,boundFilePaths:a.boundFilePaths});h.warning&&c.warnings.push(h.warning);let i=h.boq;i&&(c.boq={sourceFile:i.sourceFile,totalEntries:i.totalEntries,complete:i.complete,villageCount:i.villages.length,pagesMissingTotal:i.villages.reduce((a,b)=>a+b.pagesMissing.length,0)},i.complete||c.warnings.push("清单解析完整性校验未通过(序号缺口/页码缺失),蓝图覆盖校验将兜底报告")),c.stage="阶段 A";let j=i||{entries:[],villages:[],totalEntries:0,sourceFile:"",complete:!1,diagnostics:{totalChunks:0,markdownChunks:0,declarationChunks:0,skippedChunks:0,droppedIncompleteRows:0}},k=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;if(a.boq.villages.length>0&&c>=3)return F;let d=[{strategy:G,patterns:[/砌体|装饰|幕墙|地下室|层高|户型|塔吊|塔式起重机|脚手架|抹灰|门窗|屋面|防水/u]},{strategy:I,patterns:[/桥墩|桥台|墩柱|盖梁|系梁|箱梁|梁板|支座|伸缩缝|桥面|隧道|洞身|衬砌|锚杆/u]},{strategy:J,patterns:[/路基|路面|沥青|水稳|摊铺|压实|面层/u]},{strategy:K,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((d[0]?.count||0)>=2)return d[0].strategy;let e=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"房建"===e||"装饰装修"===e?G:"桥梁与隧道"===e?I:"公路"===e?J:"水利水电"===e?K:H}({basicFacts:a.basicFacts,templateName:a.templateName,chapterTitles:a.chapterTitles,boq:j}),l=function(a){var b;let{boq:c}=a,d=a.strategy||F,h=N(c),i=function(a){let b=[];for(let c of O)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=function(a,b){let c=/(\d+)\s*个(?:美丽宜居)?自然村/u.exec(a);if(c)return Number(c[1]);let d=/(\d+)\s*个(?:美丽宜居)?自然村/u.exec(b);return d?Number(d[1]):0}(a.projectName,a.basicFacts||"")||c.villages.length;j>0&&i.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=function(a,b){let c=/(?<!节点)(?<!阶段)(?<!分项)(?<!关键)(?:计划工期|合同工期|工期总日历天数|工期控制|工期目标|总工期|工期)[^。;;\n]{0,12}?(\d{1,4})\s*个?\s*日历天/u.exec(a)||/(\d{1,4})\s*个?\s*日历天[^。;;\n]{0,8}?(?:总工期|倒排|分解|完成)/u.exec(a),d=c?Number(c[1]):0,e=/质量(?:标准|要求)[^。;;\n]{0,20}?[::]\s*([^。;;\n]{1,20})/u.exec(a)||/合格/u.exec(a),f=e?(e[1]||"合格").trim():"",g=/(合造价〔\d{4}〕\d+号)/u.exec(a),h=g?g[1]:"",i=/(?:合同估算价|招标控制价|最高投标限价|项目总投资|投资估算|工程概算)[^。;;\n]{0,20}?([\d,]+(?:\.\d+)?)\s*万/u.exec(a);return{totalDays:d,qualityStandard:f,pricingFile:h,estimatedAmount:i?Number(i[1].replace(/,/g,"")):0}}(a.basicFacts||"",0),m=function(a,b,c=F){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}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,l.totalDays,d),n=function(a,b,c=0,d=[],e=F){let f=Math.max(30,Math.round(.85*(b>0?b:360))),{groupOfEntry:g,laborUnitRange:h,tradeMapping:i,milestoneGroups:j}=e,k=new Map;for(let b of a.entries){if(b.quantity<=0)continue;let a=g(b),c=e.laborQuotaTable?.find(a=>a.pattern.test(`${b.name} ${b.description}`)&&a.unit===b.unit),d=c||h[a];if(!d||b.unit!==d.unit)continue;let f=i.find(a=>a.pattern.test(`${b.name} ${b.description}`))?.trade;if(!f)continue;let j=`${a}|${f}`,l=k.get(j)||{trade:f,workdaysMin:0,workdaysMax:0,unit:d.unit,basisQty:0,quota:c};l.quota!==c&&(l.quota=void 0),l.workdaysMin+=b.quantity*d.min,l.workdaysMax+=b.quantity*d.max,l.basisQty+=b.quantity,k.set(j,l)}let l=new Map;for(let a of k.values()){let b=l.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,l.set(a.trade,b)}let m=[...l.entries()].sort((a,b)=>b[1].max-a[1].max).map(([a,b])=>({trade:a,min:Math.max(1,Math.round(b.min/f*1.3)),max:Math.max(1,Math.round(b.max/f*1.6)),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 有效工期 ${f} 天(定额知识库命中)`:`工种工程量约 ${Math.round(b.qty)}${b.unit} \xd7 经验工效区间 \xf7 有效工期 ${f} 天(定额工效知识不全,降级区间表达)`})),n=m.reduce((a,b)=>a+(b.min||0),0),o=m.reduce((a,b)=>a+(b.max||0),0),p={min:Math.max(10,Math.round(.75*n)),max:Math.max(10,Math.round(.9*o))},q=p,r=`各工种同期在场按 0.75~0.9 重叠系数折算(各工种人数区间之和 ${n}~${o} 人)`;if(c>0){let a=P(c,f,e),b=Math.max(p.min,a.min),d=Math.min(p.max,a.max);b<=d?(q={min:b,max:d},r=`工程量推导区间 [${p.min}, ${p.max}] 与造价锚定区间 [${a.min}, ${a.max}] 的交集(${a.detail})`):(q={min:a.min,max:a.max},r=`工程量推导区间 [${p.min}, ${p.max}] 与造价锚定区间 [${a.min}, ${a.max}] 无交集,以造价锚定区间为准(${a.detail})`)}let s=Math.round((q.min+q.max)/2),t=[];for(let b of j){let c=a=>e.laborQuotaTable?.find(b=>b.pattern.test(`${a.name} ${a.description}`)&&b.unit===a.unit)||h[g(a)],k=a.entries.filter(a=>{if(a.quantity<=0||!b.pattern.test(`${a.name} ${a.description}`))return!1;let d=c(a);return!!d&&a.unit===d.unit&&i.some(b=>b.pattern.test(`${a.name} ${a.description}`))});if(0===k.length)continue;let l=k.reduce((a,b)=>a+b.quantity*(c(b)?.min||0),0),m=k.reduce((a,b)=>a+b.quantity*(c(b)?.max||0),0),n=d.find(a=>a.key===b.key)?.duration||Math.max(1,Math.round(f/j.length)),o=Math.max(1,Math.round(l/n*1.3)),p=Math.max(o,Math.round(m/n*1.6));t.push({phase:b.label,min:Math.min(o,s),max:Math.min(p,s),basis:`阶段条目工程量约 ${Math.round(k.reduce((a,b)=>a+b.quantity,0))} \xd7 经验工效区间 \xf7 阶段 ${n} 天(不均匀系数 1.3~1.6,同时在场人数按峰值 ${s} 人封顶)`})}let u=j[j.length-1];if(t.length>0&&u&&!t.some(a=>a.phase===u.label)){let a=Math.max(1,Math.round(.2*s));t.push({phase:u.label,min:a,max:a,basis:`收尾阶段零星作业兜底(峰值 ${s} 人的 20%),不参与工日推导`})}let v=m.map(a=>({trade:a.trade,mid:Math.max(1,Math.round(((a.min??1)+(a.max??a.min??1))/2))})),w=v.reduce((a,b)=>a+b.mid,0)||1,x=v.map(a=>({trade:a.trade,quota:a.mid*s/w})),y=x.map(a=>({trade:a.trade,count:Math.max(1,Math.floor(a.quota))})),z=s-y.reduce((a,b)=>a+b.count,0);if(z>0){let a=x.map((a,b)=>({index:b,frac:a.quota-Math.floor(a.quota)})).sort((a,b)=>b.frac-a.frac);for(let b=0;z>0&&b<a.length;b+=1){let c=a[b];if(!c)continue;let d=y[c.index];d&&(d.count+=1,z-=1)}}else if(z<0){let a=x.map((a,b)=>({index:b,quota:a.quota})).sort((a,b)=>a.quota-b.quota);for(let b=0;z<0&&b<a.length;b+=1){let c=a[b];if(!c)continue;let d=y[c.index];d&&!(d.count<=1)&&(d.count-=1,z+=1)}}let A=y.map(a=>({trade:a.trade,count:a.count,basis:`工种构成唯一口径:按工种工程量区间中值比例收敛(合计恒等于峰值 ${s} 人)`}));return{peak:q,peakValue:s,peakBasis:r,byPhase:t,byTrade:m,composition:A}}(c,l.totalDays,l.estimatedAmount||0,m,d),o=function(a,b=F){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));c.push({name:d.name,spec:d.spec,min:f,max:g,basis:`${d.basis};相关条目工程量合计约 ${Math.round(e)}${b[0]?.unit||""}`})}return c}(c,d),p=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 Q){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),q=function(a,b=F){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),r=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),s=function(a,b,c=F){let{machinePowerTable:d,powerFallbackText:e,waterNoteText:f}=c,g=a.filter(a=>!R.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}`}}(o,n,d),t=(a.evidence||[]).map(a=>String(a.content||"")).join("\n"),u=function(a,b){let c=function(){let a=g.join(f.homedir(),".customize-agent","template-references"),b=g.join(a,"files","standard-blocks");if(!e.existsSync(b))return[];let c=g.join(a,"standard-blocks.json"),d=[];if(e.existsSync(c))try{d=(JSON.parse(e.readFileSync(c,"utf8")).blocks||[]).map(a=>a.id)}catch{d=[]}return 0===d.length&&(d=e.readdirSync(b).filter(a=>a.endsWith(".md")).map(a=>a.replace(/\.md$/u,""))),d.flatMap(a=>{let c=g.join(b,`${a}.md`);if(!e.existsSync(c))return[];let d=e.readFileSync(c,"utf8"),f=(/^title:\s*(\S.*)$/mu.exec(d)||[])[1]?.trim()||a;return[{id:a,title:f,source:(/^source:\s*(\S.*)$/mu.exec(d)||[])[1]?.trim()||"",lines:d.split("\n").filter(Boolean)}]})}(),d=[],h=[];for(let e of c){let c=[],f=!1;for(let a of e.lines){if(a.startsWith("---")||/^(id|title|source|updatedAt|tags):/u.test(a)||a.startsWith("# "))continue;if(a.startsWith("## ")){f=!0;continue}if(f)continue;let b=a.trim();if(!/^[-*\d]+[.、]?\s+/u.test(b))continue;let d=b.replace(/^[-*\d]+[.、]?\s+/u,"").trim();d&&c.push(d)}if("hazardous-works-37"===e.id){let c=function(a,b){let c,d=[],e=[...b.matchAll(/(?:开挖深度|挖深|基坑深度|沟槽深度)[^。;;\n]{0,30}?(\d+(?:\.\d+)?)\s*m/gu)].map(a=>Number(a[1])),f=a.entries.some(a=>/挖一般土方|挖沟槽|挖基坑/u.test(a.name)),g=!1;if(f){d.push("基坑(槽)土方开挖、降水——判定阈值:开挖深度超过3m(含3m)属危大工程,超过5m(含5m)属超过一定规模(须专家论证)");let a=e.length>0?Math.max(...e):void 0;void 0===a?(c="本项目含沟槽/基坑土方开挖,但资料(清单特征「挖土深度:详见设计图纸」)未给出具体开挖深度,危大等级判定待人工确认(不静默判定)",g=!0):c=a<3?`资料确认最大开挖深度 ${a}m < 3m,未达危大工程阈值,按一般土方工程管控`:a<5?`资料确认最大开挖深度 ${a}m,达到 3m(含)未达 5m,属危大工程,需编制专项施工方案(施工单位技术负责人审核签字、总监理工程师审查签字)`:`资料确认最大开挖深度 ${a}m ≥ 5m,属超过一定规模的危大工程,专项方案须专家论证(不少于5名符合专业要求的专家)`}else c="本项目清单未含基坑(槽)土方开挖条目,基坑工程危大判定不涉及";return d.push("专家论证程序:超过一定规模的危大工程专项方案组织不少于5名符合专业要求的专家论证;修改后的方案由施工单位技术负责人审核签字、加盖单位公章,并由总监理工程师审查签字、加盖执业印章后方可实施"),{items:d,conclusion:c,gap:g}}(a,b);d.push({id:"hazardous_works",title:"危大工程判定",source:e.source,items:[...c.items,`本项目判定结论:${c.conclusion}`],gap:c.gap})}else d.push({id:e.id,title:e.title,source:e.source,items:c.slice(0,30)})}for(let a of["organization","construction_prep","survey_plan","product_protection","emergency_plans","seasonal_measures","fire_control","tech_management","smart_site","handover_warranty","quality_innovation"])h.push(a),d.push({id:a,title:a,source:"(缺口:参考文档资产未建设)",items:[],gap:!0});return{blocks:d,gaps:h}}(c,t),v=function(a,b=F){let c=a.villages.map(a=>a.villageGroup).map(a=>({name:a,basis:"清单按自然村分组(工程名称)"})),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),w=function(a,b=F){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),x=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:l,labor:n,boq:c,villageCount:j}),y=[...new Set(c.entries.map(a=>a.section).filter(Boolean))],z=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||""),A=z?function(a){for(let b of D)if(b.pattern.test(a))return{...b.climate};return{rainySeason:"",highTemp:"",winter:""}}(z):(b=d.climateZone)&&D.find(a=>a.zone===b)?.climate||{rainySeason:"",highTemp:"",winter:""},B=[];return m.some(a=>a.basis.includes("均分降级"))&&B.push("里程碑分组未命中策略特征(非 prep 权重占比 < 5%),已按总工期均分降级,详见 data.milestones.basis"),A.rainySeason||B.push("气候区域未识别,季节施工由写作层按建设地点常识处理"),{data:{project:{name:a.projectName||"(待提取:项目名称)",scope:c.villages.length>0?`${c.villages.length} 个自然村分组(${c.villages.map(a=>a.villageGroup).join("、")})`:"",works:y,location:z},contract:{totalDays:l.totalDays,qualityStandard:l.qualityStandard,pricingFile:l.pricingFile,estimatedAmount:l.estimatedAmount||void 0},climate:A,milestones:m,resources:{labor:n,equipment:o},materialsPlan:p,fundPlan:{wageRule:"工资性工程款按合造价〔2022〕8号执行",usagePlan:"按进度分阶段使用"},testPlan:[],earthworkBalance:r,tempUtilities:s,redLineFacts:i,amountRule:"商务禁区延续:金额类数据禁入正文(合同估算价例外),fund_plan/red_line_facts 渲染时遵守",decisionLock:x,quantities:h,specAuthorities:k,inspectionBatches:q,standardBlocks:u.blocks,constructionDeployment:v,keyDifficulties:w,basisRegulations:$(`${a.basicFacts||""}
|
|
@@ -232,4 +232,4 @@ ${s}${t?`
|
|
|
232
232
|
${t}`:""}
|
|
233
233
|
|
|
234
234
|
`;return q((0,g.yk)((0,g.j7)(`${a.slice(0,h)}${u}${a.slice(o).trimStart()}`)))}function s(a,b){return 0!==j(b).length&&/资料未明确|系统暂未从知识库确认|项目资料暂未明确/u.test(a)?["计划工期","合同工期","质量标准","合同估算价","合同估算价格","建设地点","建设规模"].filter(b=>RegExp(`${b}[^
|
|
235
|
-
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(a)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})):[]}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v9",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}},91943:(a,b,c)=>{c.d(b,{$t:()=>z,G5:()=>B,PA:()=>E,Rc:()=>j,dC:()=>D,vi:()=>A});let d=/[\u4e00-\u9fa5]/gu,e=/^([ \u3000]*)(\d{1,3})\.\s+\S/u,f=/^([ \u3000]*)([-*+])\s+\S/u,g=/^(#{1,6})\s+\S/u,h=/(?:\.{2,}|…{2,})\s*\d+\s*$/u,i=/。、|,、|;、|。,|,。|。。/u,j=[{open:"(",close:")",label:"全角括号"},{open:"《",close:"》",label:"书名号"}],k=/(?<=[。;!?])/u,l=/[的与和及或在于是对从向把被将按并而则如若等共约达须应需可要能以由使让]/u;function m(a){return(a.match(d)||[]).length}function n(a){let b=a.trim();return b.length>80?`${b.slice(0,80)}…`:b}function o(a){return g.test(a.trim())}function p(a){return a.trim().startsWith("|")}function q(a){let b=e.exec(a);return!!b&&300>=Number.parseInt(b[2],10)}function r(a){return f.test(a)}function s(a){return o(a)||p(a)}function t(a){return a.replace(/[|`*_<>#\s\u3000]/gu,"").replace(/^:?-{2,}:?$/u,"")}function u(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim())}function v(a){return u(a).map(t).join("|")}function w(a,b){for(let c=b-1;c>=0;c-=1)if(a[c].trim())return c;return -1}function x(a,b){for(let c=b+1;c<a.length;c+=1)if(a[c].trim())return c;return -1}function y(a){let b=[],c=0;for(;c<a.length;){let d=e.exec(a[c]),f=d?Number.parseInt(d[2],10):0;if(!d||f>300){c+=1;continue}let g=d[1].length,h=[{index:c,number:f}],i=c+1;for(;i<a.length;){if(!a[i].trim()){let b=i;for(;b<a.length&&!a[b].trim();)b+=1;let c=b<a.length?e.exec(a[b]):null;if(c&&c[1].length===g&&300>=Number.parseInt(c[2],10)){i=b;continue}break}let b=e.exec(a[i]);if(b&&b[1].length===g&&300>=Number.parseInt(b[2],10)){h.push({index:i,number:Number.parseInt(b[2],10)}),i+=1;continue}break}b.push({indent:g,items:h}),c=i>c?i:c+1}return b}function z(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c={cleanable:[],blocking:[]};for(let a of y(b)){let d=a.items.map(a=>a.number);if(1===a.items.length){d[0]>1&&c.cleanable.push({kind:"orphan-list-number",line:a.items[0].index+1,excerpt:n(b[a.items[0].index]),message:`孤立有序编号「${d[0]}.」(无前序 1.~${d[0]-1}.,疑似跨节继承编号)`});continue}d.every((a,b)=>a===b+1)||c.cleanable.push({kind:"list-numbering",line:a.items[0].index+1,excerpt:`编号序列 ${d.join(",")}`,message:`有序列表编号不连续(第 ${a.items[0].index+1}~${a.items[a.items.length-1].index+1} 行编号:${d.join(",")})`})}!function(a,b){let c=0;for(;c<a.length;){if(!r(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length;){if(!a[e].trim()){let b=e;for(;b<a.length&&!a[b].trim();)b+=1;if(b<a.length&&r(a[b])){e=b;continue}break}if(r(a[e])){d.push(e),e+=1;continue}break}if(1===d.length){let c=d[0],e=w(a,c),f=x(a,c),g=e>=0?a[e].trim():"",h=/[::]$/u.test(g)||/(?:包括|如下|以下|例如|分别是)[::]?$/u.test(g),i=e>=0&&!r(a[e])&&!o(a[e])&&!p(a[e])&&!q(a[e])&&!h,j=f>=0&&!r(a[f])&&!p(a[f]);i&&j&&b.cleanable.push({kind:"orphan-list-item",line:c+1,excerpt:n(a[c]),message:"孤立单项列表(前后均为正文语境,无列表上下文)"})}c=e>c?e:c+1}}(b,c),function(a,b){for(let c of function(a){let b=[],c=0;for(;c<a.length;){if(!p(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length&&p(a[e]);)d.push(e),e+=1;b.push({start:c,rows:d}),c=e}return b}(a)){let d=c.rows;if(d.length<2||!function(a){let b=a.trim();return b.startsWith("|")&&/^[\s|:-]+$/u.test(b)&&/-{3,}/u.test(b)}(a[d[1]]))continue;let e=u(a[d[0]]),f=v(a[d[0]]),g=e[0]?.replace(/[\s*_]/gu,"")??"";e.length>=3&&/表$/u.test(g)&&m(g)>=8&&b.blocking.push({kind:"table-title-in-header",line:d[0]+1,excerpt:g,message:`表格表头首格为表名(「${g}」),列语义错位(表名应独立成行,表头首格必须填列名)`});let h=d.slice(2);if(0===h.length){b.blocking.push({kind:"table-empty",line:d[0]+1,excerpt:n(a[d[0]]),message:"空表(仅表头与分隔线,无任何数据行)"});continue}let i=v(a[h[0]])===f;i&&b.cleanable.push({kind:"table-header-duplicate",line:h[0]+1,excerpt:n(a[h[0]]),message:"重复表头行(分隔线后数据行与表头内容一致)"});let j=new Set;for(let c of(i&&j.add(f),h)){if(i&&c===h[0])continue;let d=v(a[c]);if(!(!d||d.split("|").every(a=>!a))){if(j.has(d)){b.cleanable.push({kind:"table-row-duplicate",line:c+1,excerpt:n(a[c]),message:"表内数据行完全重复"});continue}j.add(d)}}}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=a[c].trim();if(!d||s(d)||q(d)||r(d)||h.test(d)||/\d$/u.test(d)||15>m(d))continue;let e=d[d.length-1];if(!/[\u4e00-\u9fa5]/u.test(e)||/[::、]$/u.test(d)||/[表图]$/u.test(d))continue;let f=x(a,c);if(f>=0&&(q(a[f])||r(a[f]))&&/(?:完成后|完毕后|结束后|如下|以下)$/u.test(d)||!(-1===f||o(a[f])||p(a[f])||q(a[f])||r(a[f]))&&!l.test(e))continue;let g=w(a,c),i=g>=0?a[g].trim():"";(g<0||o(i)||p(i)||q(i)||r(i)||/[。;!?""」』)\]】…]$/u.test(i))&&b.blocking.push({kind:"truncated-line",line:c+1,excerpt:n(a[c]),message:"句尾截断(行尾无终止标点且后续为标题/表格/列表/文末,疑似生成截断)"})}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=/^(#{3,6})\s+(\S.*)$/u.exec(a[c].trim());if(!d)continue;let e=d[1].length,f=x(a,c);if(-1===f){b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:n(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`});continue}let g=/^(#{1,6})\s+\S/u.exec(a[f].trim());g&&g[1].length<=e&&b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:n(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`})}}(b,c),function(a,b){let c=new Map;for(let d=0;d<a.length;d+=1){let e=a[d].trim();if(!e||s(e)||q(e)||r(e))continue;let f=e.replace(/\s+/gu,"");if(40>m(f))continue;let g=c.get(f);if(void 0===g){c.set(f,d);continue}b.cleanable.push({kind:"duplicate-line",line:d+1,excerpt:n(a[d]),message:`与第 ${g+1} 行完全重复(≥40 字)`})}}(b,c);for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||s(d)||q(d)||r(d))continue;let e=d.split(k).map(a=>a.trim()).filter(Boolean);for(let b=0;b+1<e.length;b+=1)if(e[b]===e[b+1]&&m(e[b])>=16){c.cleanable.push({kind:"duplicate-sentence-adjacent",line:a+1,excerpt:e[b].slice(0,60),message:`相邻句子重复(「${e[b].slice(0,24)}…」连续两遍)`});break}}for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||s(d))continue;let e=i.exec(d);e&&c.blocking.push({kind:"sentence-fracture",line:a+1,excerpt:n(d),message:`标点断裂(「${e[0]}」句读错乱,疑似句段拼接残留/漂移句)`})}let d=b.join("\n");for(let{open:a,close:e,label:f}of j){let g=d.split(a).length-1,h=d.split(e).length-1;if(g===h)continue;let i=b.findIndex(b=>b.split(a).length-1!=b.split(e).length-1);c.blocking.push({kind:"punctuation-unbalanced",line:Math.max(1,i+1),excerpt:n(b[i]??""),message:`${f}不闭合(开 ${g} 处、闭 ${h} 处,疑似内容丢失/拼接残留)`})}return c}function A(a){let b=a.replace(/\r\n?/gu,"\n"),c=[];for(let a=0;a<4;a+=1){let a=b.split("\n"),d=z(b);if(0===d.cleanable.length)break;let e=new Set,f=new Map;for(let b of y(a)){let d=b.items.map(a=>a.number);if(1===b.items.length&&d[0]>1){let e=b.items[0].index,g=a[e].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,"$1");g!==a[e]&&(f.set(e,g),c.push(`孤立编号去号:第 ${e+1} 行(「${d[0]}.」)`));continue}b.items.length>1&&!d.every((a,b)=>a===b+1)&&(b.items.forEach((b,c)=>{let d=a[b.index].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,`$1${c+1}. `);d!==a[b.index]&&f.set(b.index,d)}),c.push(`有序列表重排:第 ${b.items[0].index+1}~${b.items[b.items.length-1].index+1} 行(${d.join(",")} → 1..${d.length})`))}for(let b of d.cleanable){let d=b.line-1;if("orphan-list-item"===b.kind){let b=a[d].replace(/^([ \u3000]*)[-*+]\s+/u,"$1");b!==a[d]&&(f.set(d,b),c.push(`孤立列表项去号:第 ${d+1} 行`))}else if("table-header-duplicate"===b.kind)e.add(d),c.push(`重复表头行删除:第 ${d+1} 行`);else if("table-row-duplicate"===b.kind)e.add(d),c.push(`表内重复数据行删除:第 ${d+1} 行`);else if("duplicate-line"===b.kind)e.add(d),c.push(`完全重复行删除:第 ${d+1} 行`);else if("duplicate-sentence-adjacent"===b.kind){let b=function(a){let b=a.split(k),c=[];for(let a of b){let b=c[c.length-1];void 0!==b&&b===a&&m(a.trim())>=16||c.push(a)}return c.join("")}(a[d]);b!==a[d]&&(f.set(d,b),c.push(`相邻重复句去重:第 ${d+1} 行`))}}let g=a.map((a,b)=>e.has(b)?void 0:f.get(b)??a).filter(a=>void 0!==a).join("\n");if(g===b)break;b=g}return{markdown:b,cleaned:c}}function B(a,b){if(0===a.blocking.length)return;let c=a.blocking.slice(0,4).map(a=>`${a.message}(第 ${a.line} 行)`).join(";");return`${b?`${b} `:""}结构完整性未通过(${a.blocking.length} 处):${c}。请保留已正确内容,仅修正上述问题后重新输出完整小节。`}let C={"orphan-list-number":"孤立编号由确定性清理去号转正文;写时按小节独立起编,不得继承父级编号。","list-numbering":"编号重排为 1..n 连续;写时编号必须从 1 起连续。","orphan-list-item":"孤立单项列表去除列表符并入正文;单项内容不使用列表格式。","table-header-duplicate":"删除重复表头行;表格必须只有一个表头块。","table-row-duplicate":"删除重复数据行;同一数据不得在表内出现两次。","table-title-in-header":"表名必须独立成行(表题),表头首格必须为列名;须定向重写该表格。","table-empty":"空表须补充数据行或删除;不得交付仅表头的空表。","table-number-orphan-reference":"补建被引用的表实体或修正引用编号;表编号引用必须与实体一一对应。","table-number-duplicate":"表编号重排为全篇唯一;同一表编号不得出现两个实体。","duplicate-line":"删除后出现的重复行;该段内容只能出现一次。","duplicate-sentence-adjacent":"相邻重复句去重;不得同句连发两遍。","truncated-line":"句尾截断须补全该句后重写;不得交付截断内容。","empty-subsection":"空小节必须补写与该小节相关的正文内容,不得只留标题。","sentence-fracture":"句读断裂须重写该句;不得交付句段拼接残留。","punctuation-unbalanced":"全角括号/书名号不闭合须重写所在语句;成对性破坏是内容丢失信号,补齐或删除残缺部分,不得带病交付。"};function D(a,b){let c=b?.includeCleanable??!0,d=z(a),e=function(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c=[],d=new Map,e=/^表\s*(\d+)\s+\S/u;for(let a=0;a<b.length;a+=1){let c=e.exec((b[a]||"").trim());if(!c)continue;let f=a+1;for(;f<b.length&&!(b[f]||"").trim();)f+=1;if(f>=b.length||!/^\s*\|/u.test(b[f]||""))continue;let g=Number.parseInt(c[1],10);d.set(g,[...d.get(g)||[],a+1])}for(let[a,e]of d)e.length<=1||c.push({kind:"table-number-duplicate",line:e[1],excerpt:n((b[e[1]-1]||"").trim()),message:`表编号重复(「表${a}」实体出现 ${e.length} 次:第 ${e.join("、")} 行):表编号必须全篇唯一`});let f=[/[按如]\s*表\s*(\d+)/gu,/(?<![\u4e00-\u9fa5])见\s*表\s*(\d+)/gu,/(?:参见|详见|根据|依据|按照|参照|比照|遵照|结合)\s*表\s*(\d+)/gu];for(let a=0;a<b.length;a+=1){let e=b[a]||"";if(!e.includes("表"))continue;let g=new Set;for(let b of f){let f;for(b.lastIndex=0;f=b.exec(e);){let b=Number.parseInt(f[1],10);g.has(b)||d.has(b)||(g.add(b),c.push({kind:"table-number-orphan-reference",line:a+1,excerpt:n(e.trim()),message:`引用了「表${b}」但正文无该编号表实体(引用与实体必须一一对应)`}))}}}return c}(a);return(c?[...d.blocking,...e,...d.cleanable]:[...d.blocking,...e]).map(a=>({level:"error",severity:"blocker",category:"structure",message:`结构完整性缺陷:${a.message}(第 ${a.line} 行)`,suggestion:C[a.kind]}))}function E(a){let b,c=a.replace(/\r\n?/gu,"\n").split("\n"),d=[];{let a,b=!1,e=!1;for(let f of c){let c=f.trim();if(/^```/u.test(c)){b=!b;continue}if(b)continue;if(/^##\s+目录\s*$/u.test(c)){e=!0;continue}if(e){/^<div class="page-break"><\/div>$/u.test(c)&&(e=!1);continue}let g=/^##\s+第([一二三四五六七八九十百千万\d]+)章\s+/u.exec(c);if(g){a={declared:function(a){if(/^\d+$/u.test(a))return Number(a);let b={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if("十"===a)return 10;if(1===a.length)return b[a];if(a.startsWith("十"))return 10+(b[a[1]]??0);if(a.endsWith("十"))return(b[a[0]]??0)*10;let c=a.indexOf("十");if(c>0&&c===a.length-2)return(b[a[0]]??0)*10+(b[a[c+1]]??0)}(g[1]||""),prefixCounts:new Map},d.push(a);continue}if(/^##\s+/u.test(c)){a=void 0;continue}let h=/^###\s+(\d+)\.(\d+)\s+/u.exec(c);if(h&&a){let b=Number(h[1]);a.prefixCounts.set(b,(a.prefixCounts.get(b)||0)+1)}}}if(0===d.length)return{markdown:a,fixedCount:0};let e=d.map(a=>{if(void 0!==a.declared)return a.declared;let b=[...a.prefixCounts.entries()].sort((a,b)=>b[1]-a[1]||a[0]-b[0])[0];return b?.[0]}),f=!1,g=!1,h=0,i=0,j=0,k=0,l=c.map(a=>{let c=a.trim();if(/^```/u.test(c))return f=!f,a;if(f)return a;if(/^##\s+目录\s*$/u.test(c))return g=!0,a;if(g)return/^<div class="page-break"><\/div>$/u.test(c)&&(g=!1),a;if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(c))return b=e[h],h+=1,i=0,j=0,a;if(/^##\s+/u.test(c))return b=void 0,a;if(!b||a!==c)return a;let d=/^###\s+(.*)$/u.exec(c);if(d){i+=1,j=0;let c=(d[1]||"").replace(/^\d+(?:\.\d+)*\s+/u,"").trim();if(!c)return a;let e=`### ${b}.${i} ${c}`;return e!==a&&(k+=1),e}let l=/^####\s+(.*)$/u.exec(c);if(l){let c=/^\d+\.\d+\.(\d+)\s+(.*)$/u.exec(l[1]||"");if(!c)return a;j+=1;let d=`#### ${b}.${i}.${j} ${(c[2]||"").trim()}`;return d!==a&&(k+=1),d}return a});return 0===k?{markdown:a,fixedCount:0}:{markdown:l.join("\n"),fixedCount:k}}},93675:(a,b,c)=>{c.d(b,{aW:()=>l});var d=c(64406),e=c(65667),f=c(91943),g=c(40299),h=c(85016),i=c(55807),j=c(63516),k=c(54185);let l=[{key:"table-line-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.br)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"templated-labels",stage5:!0,round2:!0,fix:a=>{let b=(0,k.p_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"structure-integrity",stage5:!0,round2:!0,fix:a=>{let b=(0,f.vi)(a);return{markdown:b.markdown,fixedCount:b.cleaned.length}}},{key:"repeated-words",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Vw)(a);return{markdown:b,fixedCount:+(b!==a)}}},{key:"duplicate-tables",stage5:!1,round2:!0,fix:a=>{let b=(0,d.lR)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"finish-thickness",stage5:!0,round2:!0,fix:a=>{let b=(0,d.JF)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"slot-depth-value",stage5:!0,round2:!0,fix:a=>{let b=(0,d.yV)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"labor-peak",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.BR)(a,b.laborPeakAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"phase-labor-values",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.Pl)(a,b.phaseLaborAuthorities);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"resource-breakdown",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,e.Ti)(a,b.resourceBreakdownAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"internal-table-row-dup",stage5:!0,round2:!0,fix:a=>{let b=(0,d.QM)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"duplicate-basic-info-tables",stage5:!0,round2:!0,fix:a=>{let b=(0,d.y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"fallback-placeholder-rows",stage5:!0,round2:!0,fix:a=>{let b=(0,d.uL)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"greening-maintenance",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.mG)(a,b.greeningMaintenanceAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"paragraph-opening-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Qc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"paragraph-tail-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.kp)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"collision-numbered-heading",stage5:!0,round2:!0,fix:a=>{let b=(0,d.fK)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"heading-uncovered-items",stage5:!0,round2:!0,fix:a=>{let b=(0,d.N$)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"inverted-date-range",stage5:!0,round2:!0,fix:a=>{let b=(0,d.r_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-sentence",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"meta-discourse",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Fd)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"formula-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.EJ)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"self-undermining",stage5:!0,round2:!0,fix:a=>{let b=(0,d.ir)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"ambiguous-either-or",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.SZ)(a,{supportForm:b.supportFormAuthority,decisionLock:b.decisionLockEntries});return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"empty-scoring-response",stage5:!0,round2:!0,fix:a=>{let b=(0,j.w)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"tender-meta-language",stage5:!0,round2:!0,fix:a=>{let b=(0,j.TX)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"forbidden-configuration",stage5:!0,round2:!0,fix:a=>{let b=(0,d.GI)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"basis-regulation-region",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.zo)(a,b.basisRegulations);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"work-injury-insurance",stage5:!0,round2:!0,fix:a=>{let b=(0,d.qz)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"duplicate-response-line",stage5:!0,round2:!0,fix:a=>{let b=(0,j.Mf)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"atlas-reference",stage5:!0,round2:!1,fix:a=>{let b=(0,i.Fc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"tertiary-h4-dedupe",stage5:!1,round2:!0,fix:a=>(0,g.pV)(a)},{key:"internal-term-heading",stage5:!0,round2:!0,fix:a=>(0,h.fc)(a)},{key:"skeleton-fingerprint-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.sO)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"flow-form-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.z9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-title-completion",stage5:!1,round2:!0,fix:a=>{let b=(0,k.G9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"sentence-like-heading-split",stage5:!1,round2:!0,fix:(a,b)=>{let c=(0,k.Q1)(a,b.plannedSectionTitles);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"section-renumber",stage5:!0,round2:!0,fix:a=>{let b=(0,f.PA)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}}]}};
|
|
235
|
+
|。;;]{0,40}(?:资料未明确|系统暂未从知识库确认|项目资料暂未明确)`,"u").test(a)).map(a=>({level:"error",message:`${a} 已抽取到项目资料事实但正文仍显示暂未明确`,suggestion:"请优先使用项目基础事实卡片中的资料原值,不得用占位表达覆盖已确认事实。"})):[]}},87942:(a,b,c)=>{c.d(b,{x:()=>d});let d={version:"professional-document-workflow-v9",rules:["complete-local-knowledge-assumption","knowledge-coverage-recovery","fact-trace-placement","chapter-coverage-gate","structured-quality-report","post-repair-verification"]}},91943:(a,b,c)=>{c.d(b,{$t:()=>z,G5:()=>B,PA:()=>E,Rc:()=>j,dC:()=>D,vi:()=>A});let d=/[\u4e00-\u9fa5]/gu,e=/^([ \u3000]*)(\d{1,3})\.\s+\S/u,f=/^([ \u3000]*)([-*+])\s+\S/u,g=/^(#{1,6})\s+\S/u,h=/(?:\.{2,}|…{2,})\s*\d+\s*$/u,i=/。、|,、|;、|。,|,。|。。/u,j=[{open:"(",close:")",label:"全角括号"},{open:"《",close:"》",label:"书名号"}],k=/(?<=[。;!?])/u,l=/[的与和及或在于是对从向把被将按并而则如若等共约达须应需可要能以由使让]/u;function m(a){return(a.match(d)||[]).length}function n(a){let b=a.trim();return b.length>80?`${b.slice(0,80)}…`:b}function o(a){return g.test(a.trim())}function p(a){return a.trim().startsWith("|")}function q(a){let b=e.exec(a);return!!b&&300>=Number.parseInt(b[2],10)}function r(a){return f.test(a)}function s(a){return o(a)||p(a)}function t(a){return a.replace(/[|`*_<>#\s\u3000]/gu,"").replace(/^:?-{2,}:?$/u,"")}function u(a){return a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim())}function v(a){return u(a).map(t).join("|")}function w(a,b){for(let c=b-1;c>=0;c-=1)if(a[c].trim())return c;return -1}function x(a,b){for(let c=b+1;c<a.length;c+=1)if(a[c].trim())return c;return -1}function y(a){let b=[],c=0;for(;c<a.length;){let d=e.exec(a[c]),f=d?Number.parseInt(d[2],10):0;if(!d||f>300){c+=1;continue}let g=d[1].length,h=[{index:c,number:f}],i=c+1;for(;i<a.length;){if(!a[i].trim()){let b=i;for(;b<a.length&&!a[b].trim();)b+=1;let c=b<a.length?e.exec(a[b]):null;if(c&&c[1].length===g&&300>=Number.parseInt(c[2],10)){i=b;continue}break}let b=e.exec(a[i]);if(b&&b[1].length===g&&300>=Number.parseInt(b[2],10)){h.push({index:i,number:Number.parseInt(b[2],10)}),i+=1;continue}break}b.push({indent:g,items:h}),c=i>c?i:c+1}return b}function z(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c={cleanable:[],blocking:[]};for(let a of y(b)){let d=a.items.map(a=>a.number);if(1===a.items.length){d[0]>1&&c.cleanable.push({kind:"orphan-list-number",line:a.items[0].index+1,excerpt:n(b[a.items[0].index]),message:`孤立有序编号「${d[0]}.」(无前序 1.~${d[0]-1}.,疑似跨节继承编号)`});continue}d.every((a,b)=>a===b+1)||c.cleanable.push({kind:"list-numbering",line:a.items[0].index+1,excerpt:`编号序列 ${d.join(",")}`,message:`有序列表编号不连续(第 ${a.items[0].index+1}~${a.items[a.items.length-1].index+1} 行编号:${d.join(",")})`})}!function(a,b){let c=0;for(;c<a.length;){if(!r(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length;){if(!a[e].trim()){let b=e;for(;b<a.length&&!a[b].trim();)b+=1;if(b<a.length&&r(a[b])){e=b;continue}break}if(r(a[e])){d.push(e),e+=1;continue}break}if(1===d.length){let c=d[0],e=w(a,c),f=x(a,c),g=e>=0?a[e].trim():"",h=/[::]$/u.test(g)||/(?:包括|如下|以下|例如|分别是)[::]?$/u.test(g),i=e>=0&&!r(a[e])&&!o(a[e])&&!p(a[e])&&!q(a[e])&&!h,j=f>=0&&!r(a[f])&&!p(a[f]);i&&j&&b.cleanable.push({kind:"orphan-list-item",line:c+1,excerpt:n(a[c]),message:"孤立单项列表(前后均为正文语境,无列表上下文)"})}c=e>c?e:c+1}}(b,c),function(a,b){for(let c of function(a){let b=[],c=0;for(;c<a.length;){if(!p(a[c])){c+=1;continue}let d=[c],e=c+1;for(;e<a.length&&p(a[e]);)d.push(e),e+=1;b.push({start:c,rows:d}),c=e}return b}(a)){let d=c.rows;if(d.length<2||!function(a){let b=a.trim();return b.startsWith("|")&&/^[\s|:-]+$/u.test(b)&&/-{3,}/u.test(b)}(a[d[1]]))continue;let e=u(a[d[0]]),f=v(a[d[0]]),g=e[0]?.replace(/[\s*_]/gu,"")??"";e.length>=3&&/表$/u.test(g)&&m(g)>=8&&b.blocking.push({kind:"table-title-in-header",line:d[0]+1,excerpt:g,message:`表格表头首格为表名(「${g}」),列语义错位(表名应独立成行,表头首格必须填列名)`});let h=d.slice(2);if(0===h.length){b.blocking.push({kind:"table-empty",line:d[0]+1,excerpt:n(a[d[0]]),message:"空表(仅表头与分隔线,无任何数据行)"});continue}let i=v(a[h[0]])===f;i&&b.cleanable.push({kind:"table-header-duplicate",line:h[0]+1,excerpt:n(a[h[0]]),message:"重复表头行(分隔线后数据行与表头内容一致)"});let j=new Set;for(let c of(i&&j.add(f),h)){if(i&&c===h[0])continue;let d=v(a[c]);if(!(!d||d.split("|").every(a=>!a))){if(j.has(d)){b.cleanable.push({kind:"table-row-duplicate",line:c+1,excerpt:n(a[c]),message:"表内数据行完全重复"});continue}j.add(d)}}}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=a[c].trim();if(!d||s(d)||q(d)||r(d)||h.test(d)||/\d$/u.test(d)||15>m(d))continue;let e=d[d.length-1];if(!/[\u4e00-\u9fa5]/u.test(e)||/[::、]$/u.test(d)||/[表图]$/u.test(d))continue;let f=x(a,c);if(f>=0&&(q(a[f])||r(a[f]))&&/(?:完成后|完毕后|结束后|如下|以下)$/u.test(d)||!(-1===f||o(a[f])||p(a[f])||q(a[f])||r(a[f]))&&!l.test(e))continue;let g=w(a,c),i=g>=0?a[g].trim():"";(g<0||o(i)||p(i)||q(i)||r(i)||/[。;!?""」』)\]】…]$/u.test(i))&&b.blocking.push({kind:"truncated-line",line:c+1,excerpt:n(a[c]),message:"句尾截断(行尾无终止标点且后续为标题/表格/列表/文末,疑似生成截断)"})}}(b,c),function(a,b){for(let c=0;c<a.length;c+=1){let d=/^(#{3,6})\s+(\S.*)$/u.exec(a[c].trim());if(!d)continue;let e=d[1].length,f=x(a,c);if(-1===f){b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:n(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`});continue}let g=/^(#{1,6})\s+\S/u.exec(a[f].trim());g&&g[1].length<=e&&b.blocking.push({kind:"empty-subsection",line:c+1,excerpt:n(a[c]),message:`空小节「${d[2].trim().slice(0,40)}」(小节标题后无任何内容)`})}}(b,c),function(a,b){let c=new Map;for(let d=0;d<a.length;d+=1){let e=a[d].trim();if(!e||s(e)||q(e)||r(e))continue;let f=e.replace(/\s+/gu,"");if(40>m(f))continue;let g=c.get(f);if(void 0===g){c.set(f,d);continue}b.cleanable.push({kind:"duplicate-line",line:d+1,excerpt:n(a[d]),message:`与第 ${g+1} 行完全重复(≥40 字)`})}}(b,c);for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||s(d)||q(d)||r(d))continue;let e=d.split(k).map(a=>a.trim()).filter(Boolean);for(let b=0;b+1<e.length;b+=1)if(e[b]===e[b+1]&&m(e[b])>=16){c.cleanable.push({kind:"duplicate-sentence-adjacent",line:a+1,excerpt:e[b].slice(0,60),message:`相邻句子重复(「${e[b].slice(0,24)}…」连续两遍)`});break}}for(let a=0;a<b.length;a+=1){let d=b[a];if(!d.trim()||s(d))continue;let e=i.exec(d);e&&c.blocking.push({kind:"sentence-fracture",line:a+1,excerpt:n(d),message:`标点断裂(「${e[0]}」句读错乱,疑似句段拼接残留/漂移句)`})}let d=b.join("\n");for(let{open:a,close:e,label:f}of j){let g=d.split(a).length-1,h=d.split(e).length-1;if(g===h)continue;let i=b.findIndex(b=>b.split(a).length-1!=b.split(e).length-1);c.blocking.push({kind:"punctuation-unbalanced",line:Math.max(1,i+1),excerpt:n(b[i]??""),message:`${f}不闭合(开 ${g} 处、闭 ${h} 处,疑似内容丢失/拼接残留)`})}return c}function A(a){let b=a.replace(/\r\n?/gu,"\n"),c=[];for(let a=0;a<4;a+=1){let a=b.split("\n"),d=z(b);if(0===d.cleanable.length)break;let e=new Set,f=new Map;for(let b of y(a)){let d=b.items.map(a=>a.number);if(1===b.items.length&&d[0]>1){let e=b.items[0].index,g=a[e].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,"$1");g!==a[e]&&(f.set(e,g),c.push(`孤立编号去号:第 ${e+1} 行(「${d[0]}.」)`));continue}b.items.length>1&&!d.every((a,b)=>a===b+1)&&(b.items.forEach((b,c)=>{let d=a[b.index].replace(/^([ \u3000]*)\d{1,3}\.\s+/u,`$1${c+1}. `);d!==a[b.index]&&f.set(b.index,d)}),c.push(`有序列表重排:第 ${b.items[0].index+1}~${b.items[b.items.length-1].index+1} 行(${d.join(",")} → 1..${d.length})`))}for(let b of d.cleanable){let d=b.line-1;if("orphan-list-item"===b.kind){let b=a[d].replace(/^([ \u3000]*)[-*+]\s+/u,"$1");b!==a[d]&&(f.set(d,b),c.push(`孤立列表项去号:第 ${d+1} 行`))}else if("table-header-duplicate"===b.kind)e.add(d),c.push(`重复表头行删除:第 ${d+1} 行`);else if("table-row-duplicate"===b.kind)e.add(d),c.push(`表内重复数据行删除:第 ${d+1} 行`);else if("duplicate-line"===b.kind)e.add(d),c.push(`完全重复行删除:第 ${d+1} 行`);else if("duplicate-sentence-adjacent"===b.kind){let b=function(a){let b=a.split(k),c=[];for(let a of b){let b=c[c.length-1];void 0!==b&&b===a&&m(a.trim())>=16||c.push(a)}return c.join("")}(a[d]);b!==a[d]&&(f.set(d,b),c.push(`相邻重复句去重:第 ${d+1} 行`))}}let g=a.map((a,b)=>e.has(b)?void 0:f.get(b)??a).filter(a=>void 0!==a).join("\n");if(g===b)break;b=g}return{markdown:b,cleaned:c}}function B(a,b){if(0===a.blocking.length)return;let c=a.blocking.slice(0,4).map(a=>`${a.message}(第 ${a.line} 行)`).join(";");return`${b?`${b} `:""}结构完整性未通过(${a.blocking.length} 处):${c}。请保留已正确内容,仅修正上述问题后重新输出完整小节。`}let C={"orphan-list-number":"孤立编号由确定性清理去号转正文;写时按小节独立起编,不得继承父级编号。","list-numbering":"编号重排为 1..n 连续;写时编号必须从 1 起连续。","orphan-list-item":"孤立单项列表去除列表符并入正文;单项内容不使用列表格式。","table-header-duplicate":"删除重复表头行;表格必须只有一个表头块。","table-row-duplicate":"删除重复数据行;同一数据不得在表内出现两次。","table-title-in-header":"表名必须独立成行(表题),表头首格必须为列名;须定向重写该表格。","table-empty":"空表须补充数据行或删除;不得交付仅表头的空表。","table-number-orphan-reference":"补建被引用的表实体或修正引用编号;表编号引用必须与实体一一对应。","table-number-duplicate":"表编号重排为全篇唯一;同一表编号不得出现两个实体。","duplicate-line":"删除后出现的重复行;该段内容只能出现一次。","duplicate-sentence-adjacent":"相邻重复句去重;不得同句连发两遍。","truncated-line":"句尾截断须补全该句后重写;不得交付截断内容。","empty-subsection":"空小节必须补写与该小节相关的正文内容,不得只留标题。","sentence-fracture":"句读断裂须重写该句;不得交付句段拼接残留。","punctuation-unbalanced":"全角括号/书名号不闭合须重写所在语句;成对性破坏是内容丢失信号,补齐或删除残缺部分,不得带病交付。"};function D(a,b){let c=b?.includeCleanable??!0,d=z(a),e=function(a){let b=a.replace(/\r\n?/gu,"\n").split("\n"),c=[],d=new Map,e=/^表\s*(\d+)\s+\S/u;for(let a=0;a<b.length;a+=1){let c=e.exec((b[a]||"").trim());if(!c)continue;let f=a+1;for(;f<b.length&&!(b[f]||"").trim();)f+=1;if(f>=b.length||!/^\s*\|/u.test(b[f]||""))continue;let g=Number.parseInt(c[1],10);d.set(g,[...d.get(g)||[],a+1])}for(let[a,e]of d)e.length<=1||c.push({kind:"table-number-duplicate",line:e[1],excerpt:n((b[e[1]-1]||"").trim()),message:`表编号重复(「表${a}」实体出现 ${e.length} 次:第 ${e.join("、")} 行):表编号必须全篇唯一`});let f=[/[按如]\s*表\s*(\d+)/gu,/(?<![\u4e00-\u9fa5])见\s*表\s*(\d+)/gu,/(?:参见|详见|根据|依据|按照|参照|比照|遵照|结合)\s*表\s*(\d+)/gu];for(let a=0;a<b.length;a+=1){let e=b[a]||"";if(!e.includes("表"))continue;let g=new Set;for(let b of f){let f;for(b.lastIndex=0;f=b.exec(e);){let b=Number.parseInt(f[1],10);g.has(b)||d.has(b)||(g.add(b),c.push({kind:"table-number-orphan-reference",line:a+1,excerpt:n(e.trim()),message:`引用了「表${b}」但正文无该编号表实体(引用与实体必须一一对应)`}))}}}return c}(a);return(c?[...d.blocking,...e,...d.cleanable]:[...d.blocking,...e]).map(a=>({level:"error",severity:"blocker",category:"structure",message:`结构完整性缺陷:${a.message}(第 ${a.line} 行)`,suggestion:C[a.kind]}))}function E(a,b){let c=a.replace(/\r\n?/gu,"\n").split("\n"),d=[];{let a,b=!1,e=!1;for(let f of c){let c=f.trim();if(/^```/u.test(c)){b=!b;continue}if(b)continue;if(/^##\s+目录\s*$/u.test(c)){e=!0;continue}if(e){/^<div class="page-break"><\/div>$/u.test(c)&&(e=!1);continue}let g=/^##\s+第([一二三四五六七八九十百千万\d]+)章\s+/u.exec(c);if(g){a={declared:function(a){if(/^\d+$/u.test(a))return Number(a);let b={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if("十"===a)return 10;if(1===a.length)return b[a];if(a.startsWith("十"))return 10+(b[a[1]]??0);if(a.endsWith("十"))return(b[a[0]]??0)*10;let c=a.indexOf("十");if(c>0&&c===a.length-2)return(b[a[0]]??0)*10+(b[a[c+1]]??0)}(g[1]||""),prefixCounts:new Map},d.push(a);continue}if(/^##\s+/u.test(c)){a=void 0;continue}let h=/^###\s+(\d+)\.(\d+)\s+/u.exec(c);if(h&&a){let b=Number(h[1]);a.prefixCounts.set(b,(a.prefixCounts.get(b)||0)+1)}}}let e=b?.chapterNumber,f="number"==typeof e&&Number.isInteger(e)&&e>0&&d.length<=1?e:void 0;if(0===d.length&&void 0===f)return{markdown:a,fixedCount:0};let g=d.map(a=>{if(void 0!==a.declared)return a.declared;let b=[...a.prefixCounts.entries()].sort((a,b)=>b[1]-a[1]||a[0]-b[0])[0];return b?.[0]}),h=!1,i=!1,j=0,k=f,l=0,m=0,n=0,o=c.map(a=>{let b=a.trim();if(/^```/u.test(b))return h=!h,a;if(h)return a;if(/^##\s+目录\s*$/u.test(b))return i=!0,a;if(i)return/^<div class="page-break"><\/div>$/u.test(b)&&(i=!1),a;if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(b))return k=f??g[j],void 0===f&&(j+=1),l=0,m=0,a;if(/^##\s+/u.test(b))return void 0===f&&(k=void 0),a;if(!k||a!==b)return a;let c=/^###\s+(.*)$/u.exec(b);if(c){l+=1,m=0;let b=(c[1]||"").replace(/^\d+(?:\.\d+)*\s+/u,"").trim();if(!b)return a;let d=`### ${k}.${l} ${b}`;return d!==a&&(n+=1),d}let d=/^####\s+(.*)$/u.exec(b);if(d){let b=/^\d+\.\d+\.(\d+)\s+(.*)$/u.exec(d[1]||"");if(!b)return a;m+=1;let c=`#### ${k}.${l}.${m} ${(b[2]||"").trim()}`;return c!==a&&(n+=1),c}return a});return 0===n?{markdown:a,fixedCount:0}:{markdown:o.join("\n"),fixedCount:n}}},93675:(a,b,c)=>{c.d(b,{aW:()=>l});var d=c(64406),e=c(65667),f=c(91943),g=c(40299),h=c(85016),i=c(55807),j=c(63516),k=c(54185);let l=[{key:"table-line-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.br)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"templated-labels",stage5:!0,round2:!0,fix:a=>{let b=(0,k.p_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"structure-integrity",stage5:!0,round2:!0,fix:a=>{let b=(0,f.vi)(a);return{markdown:b.markdown,fixedCount:b.cleaned.length}}},{key:"repeated-words",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Vw)(a);return{markdown:b,fixedCount:+(b!==a)}}},{key:"duplicate-tables",stage5:!1,round2:!0,fix:a=>{let b=(0,d.lR)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"finish-thickness",stage5:!0,round2:!0,fix:a=>{let b=(0,d.JF)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"slot-depth-value",stage5:!0,round2:!0,fix:a=>{let b=(0,d.yV)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"labor-peak",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.BR)(a,b.laborPeakAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"phase-labor-values",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.Pl)(a,b.phaseLaborAuthorities);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"resource-breakdown",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,e.Ti)(a,b.resourceBreakdownAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"internal-table-row-dup",stage5:!0,round2:!0,fix:a=>{let b=(0,d.QM)(a);return{markdown:b.markdown,fixedCount:b.removedCount}}},{key:"duplicate-basic-info-tables",stage5:!0,round2:!0,fix:a=>{let b=(0,d.y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"fallback-placeholder-rows",stage5:!0,round2:!0,fix:a=>{let b=(0,d.uL)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"greening-maintenance",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.mG)(a,b.greeningMaintenanceAuthority);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"paragraph-opening-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Qc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"paragraph-tail-repeat",stage5:!0,round2:!0,fix:a=>{let b=(0,d.kp)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"collision-numbered-heading",stage5:!0,round2:!0,fix:a=>{let b=(0,d.fK)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"heading-uncovered-items",stage5:!0,round2:!0,fix:a=>{let b=(0,d.N$)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"inverted-date-range",stage5:!0,round2:!0,fix:a=>{let b=(0,d.r_)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-sentence",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Y4)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"meta-discourse",stage5:!0,round2:!0,fix:a=>{let b=(0,d.Fd)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"formula-residue",stage5:!0,round2:!0,fix:a=>{let b=(0,d.EJ)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"self-undermining",stage5:!0,round2:!0,fix:a=>{let b=(0,d.ir)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"ambiguous-either-or",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.SZ)(a,{supportForm:b.supportFormAuthority,decisionLock:b.decisionLockEntries});return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"empty-scoring-response",stage5:!0,round2:!0,fix:a=>{let b=(0,j.w)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"tender-meta-language",stage5:!0,round2:!0,fix:a=>{let b=(0,j.TX)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"forbidden-configuration",stage5:!0,round2:!0,fix:a=>{let b=(0,d.GI)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"basis-regulation-region",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,d.zo)(a,b.basisRegulations);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"work-injury-insurance",stage5:!0,round2:!0,fix:a=>{let b=(0,d.qz)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"duplicate-response-line",stage5:!0,round2:!0,fix:a=>{let b=(0,j.Mf)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"atlas-reference",stage5:!0,round2:!0,fix:a=>{let b=(0,i.Fc)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"tertiary-h4-dedupe",stage5:!1,round2:!0,fix:a=>(0,g.pV)(a)},{key:"internal-term-heading",stage5:!0,round2:!0,fix:a=>(0,h.fc)(a)},{key:"skeleton-fingerprint-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.sO)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"flow-form-variants",stage5:!1,round2:!0,fix:a=>{let b=(0,k.z9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"truncated-title-completion",stage5:!1,round2:!0,fix:a=>{let b=(0,k.G9)(a);return{markdown:b.markdown,fixedCount:b.fixedCount}}},{key:"sentence-like-heading-split",stage5:!1,round2:!0,fix:(a,b)=>{let c=(0,k.Q1)(a,b.plannedSectionTitles);return{markdown:c.markdown,fixedCount:c.fixedCount}}},{key:"section-renumber",stage5:!0,round2:!0,fix:(a,b)=>{let c=(0,f.PA)(a,{chapterNumber:b.chapterNumber});return{markdown:c.markdown,fixedCount:c.fixedCount}}}]}};
|