Kaynağa Gözat

dev:优化了文件切分模块,添加了三级分类逻辑并完成接入;

ChenJiSheng 1 ay önce
ebeveyn
işleme
27ccd61b13

+ 2 - 1
core/construction_review/component/doc_worker/classification/__init__.py

@@ -3,5 +3,6 @@
 """
 
 from .hierarchy_classifier import HierarchyClassifier
+from .chunk_classifier import ChunkClassifier
 
-__all__ = ["HierarchyClassifier"]
+__all__ = ["HierarchyClassifier", "ChunkClassifier"]

+ 340 - 0
core/construction_review/component/doc_worker/classification/chunk_classifier.py

@@ -0,0 +1,340 @@
+"""
+内容块分类模块(二级和三级分类)
+
+对已经完成一级分类的内容块进行二级和三级分类
+"""
+
+from __future__ import annotations
+
+import asyncio
+import csv
+from collections import OrderedDict
+from pathlib import Path
+from typing import Any, Dict, List, Optional
+
+from ..config.provider import default_config_provider
+from ..utils.llm_client import LLMClient
+from ..utils.prompt_loader import PromptLoader
+
+
+class ChunkClassifier:
+    """内容块分类器(二级和三级分类)"""
+
+    def __init__(self):
+        """初始化分类器"""
+        self._cfg = default_config_provider
+        
+        # 初始化LLM客户端和提示词加载器
+        self.llm_client = LLMClient(config_provider=self._cfg)
+        self.prompt_loader = PromptLoader()
+        
+        # 加载CSV分类标准
+        self._load_classification_standards()
+
+    def _load_classification_standards(self):
+        """从CSV文件加载二级和三级分类标准"""
+        csv_file = Path(__file__).parent.parent / "config" / "StandardCategoryTable.csv"
+        
+        if not csv_file.exists():
+            raise FileNotFoundError(f"分类标准CSV文件不存在: {csv_file}")
+        
+        # 结构: {first_code: {second_code: {second_cn, second_focus, third_items: [{third_code, third_cn, third_focus}]}}}
+        self.classification_tree: Dict[str, Dict[str, Any]] = {}
+        
+        with csv_file.open("r", encoding="utf-8-sig") as f:
+            reader = csv.DictReader(f)
+            for row in reader:
+                first_code = (row.get("first_contents_code") or "").strip()
+                first_cn = (row.get("first_contents") or "").strip()
+                second_code = (row.get("second_contents_code") or "").strip()
+                second_cn = (row.get("second_contents") or "").strip()
+                second_focus = (row.get("second_focus") or "").strip()
+                third_code = (row.get("third_contents_code") or "").strip()
+                third_cn = (row.get("third_contents") or "").strip()
+                third_focus = (row.get("third_focus") or "").strip()
+                
+                if not first_code or not second_code:
+                    continue
+                
+                # 初始化一级类别
+                if first_code not in self.classification_tree:
+                    self.classification_tree[first_code] = {}
+                
+                # 初始化二级类别
+                if second_code not in self.classification_tree[first_code]:
+                    self.classification_tree[first_code][second_code] = {
+                        "second_cn": second_cn,
+                        "second_focus": second_focus,
+                        "third_items": []
+                    }
+                
+                # 添加三级类别(如果存在)
+                if third_code and third_cn:
+                    self.classification_tree[first_code][second_code]["third_items"].append({
+                        "third_code": third_code,
+                        "third_cn": third_cn,
+                        "third_focus": third_focus
+                    })
+
+    def _build_secondary_standards(self, first_category_code: str) -> tuple[str, dict]:
+        """
+        构建二级分类标准文本
+        
+        返回:
+            (标准文本, 索引映射字典)
+        """
+        if first_category_code not in self.classification_tree:
+            return "(无二级分类标准)", {}
+        
+        standards_lines = ["    0. 非标准项 - 不符合以下任何类别"]
+        index_mapping = {0: ("非标准项", "non_standard")}
+        
+        for idx, (second_code, second_data) in enumerate(self.classification_tree[first_category_code].items(), 1):
+            second_cn = second_data["second_cn"]
+            second_focus = second_data["second_focus"]
+            
+            # 保存索引映射
+            index_mapping[idx] = (second_cn, second_code)
+            
+            if second_focus and second_focus != "NULL":
+                standards_lines.append(f"    {idx}. {second_cn} - 关注点:{second_focus}")
+            else:
+                standards_lines.append(f"    {idx}. {second_cn}")
+        
+        return "\n".join(standards_lines) if standards_lines else "(无二级分类标准)", index_mapping
+
+    def _build_tertiary_standards(self, first_category_code: str, second_category_code: str) -> tuple[str, dict]:
+        """
+        构建三级分类标准文本
+        
+        返回:
+            (标准文本, 索引映射字典)
+        """
+        if first_category_code not in self.classification_tree:
+            return "(无三级分类标准)", {}
+        
+        if second_category_code not in self.classification_tree[first_category_code]:
+            return "(无三级分类标准)", {}
+        
+        third_items = self.classification_tree[first_category_code][second_category_code]["third_items"]
+        
+        if not third_items:
+            return "(无三级分类标准)", {}
+        
+        standards_lines = ["    0. 非标准项 - 不符合以下任何类别"]
+        index_mapping = {0: ("非标准项", "non_standard")}
+        
+        for idx, third_item in enumerate(third_items, 1):
+            third_cn = third_item["third_cn"]
+            third_code = third_item["third_code"]
+            third_focus = third_item["third_focus"]
+            
+            # 保存索引映射
+            index_mapping[idx] = (third_cn, third_code)
+            
+            if third_focus and third_focus != "NULL":
+                standards_lines.append(f"    {idx}. {third_cn} - 关注点:{third_focus}")
+            else:
+                standards_lines.append(f"    {idx}. {third_cn}")
+        
+        return "\n".join(standards_lines), index_mapping
+
+    async def classify_chunks_secondary_async(self, chunks: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
+        """
+        异步对chunks进行二级分类
+        
+        参数:
+            chunks: 已完成一级分类的chunk列表
+            
+        返回:
+            添加了二级分类字段的chunk列表
+        """
+        print(f"\n正在对 {len(chunks)} 个内容块进行二级分类...")
+        
+        # 准备LLM请求
+        llm_requests = []
+        valid_chunks = []
+        index_mappings = []  # 保存每个请求对应的索引映射
+        
+        for chunk in chunks:
+            first_category_code = chunk.get("chapter_classification", "")
+            chunk_title = chunk.get("section_label", "")
+            hierarchy_path = " -> ".join(chunk.get("hierarchy_path", []))
+            content = chunk.get("review_chunk_content", "")
+            content_preview = content[:300] if content else ""
+            
+            # 获取一级分类的中文名称
+            first_category_cn = self._get_first_category_cn(first_category_code)
+            
+            # 构建二级分类标准(返回标准文本和索引映射)
+            secondary_standards, index_mapping = self._build_secondary_standards(first_category_code)
+            
+            if secondary_standards == "(无二级分类标准)":
+                # 如果没有二级分类标准,跳过
+                chunk["secondary_category_cn"] = "无"
+                chunk["secondary_category_code"] = "none"
+                continue
+            
+            # 渲染提示词
+            prompt = self.prompt_loader.render(
+                "chunk_secondary_classification",
+                first_category=first_category_cn,
+                chunk_title=chunk_title,
+                hierarchy_path=hierarchy_path,
+                content_preview=content_preview,
+                secondary_standards=secondary_standards
+            )
+            
+            messages = [
+                {"role": "system", "content": prompt["system"]},
+                {"role": "user", "content": prompt["user"]}
+            ]
+            
+            llm_requests.append(messages)
+            valid_chunks.append(chunk)
+            index_mappings.append(index_mapping)
+        
+        if not llm_requests:
+            print("  所有内容块都没有二级分类标准,跳过二级分类")
+            return chunks
+        
+        # 批量异步调用LLM API
+        llm_results = await self.llm_client.batch_call_async(llm_requests)
+        
+        # 处理分类结果
+        for chunk, llm_result, index_mapping in zip(valid_chunks, llm_results, index_mappings):
+            if llm_result and isinstance(llm_result, dict):
+                category_index = llm_result.get("category_index")
+                
+                # 验证索引并映射到类别
+                if isinstance(category_index, int) and category_index in index_mapping:
+                    secondary_cn, secondary_code = index_mapping[category_index]
+                    chunk["secondary_category_cn"] = secondary_cn
+                    chunk["secondary_category_code"] = secondary_code
+                else:
+                    # 索引无效,归类为非标准项
+                    print(f"  警告: LLM返回的索引 {category_index} 无效,归类为'非标准项'")
+                    chunk["secondary_category_cn"] = "非标准项"
+                    chunk["secondary_category_code"] = "non_standard"
+            else:
+                chunk["secondary_category_cn"] = "非标准项"
+                chunk["secondary_category_code"] = "non_standard"
+        
+        print(f"  二级分类完成!")
+        return chunks
+
+    async def classify_chunks_tertiary_async(self, chunks: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
+        """
+        异步对chunks进行三级分类
+        
+        参数:
+            chunks: 已完成二级分类的chunk列表
+            
+        返回:
+            添加了三级分类字段的chunk列表
+        """
+        print(f"\n正在对 {len(chunks)} 个内容块进行三级分类...")
+        
+        # 准备LLM请求
+        llm_requests = []
+        valid_chunks = []
+        index_mappings = []  # 保存每个请求对应的索引映射
+        
+        for chunk in chunks:
+            first_category_code = chunk.get("chapter_classification", "")
+            second_category_code = chunk.get("secondary_category_code", "")
+            second_category_cn = chunk.get("secondary_category_cn", "")
+            chunk_title = chunk.get("section_label", "")
+            content = chunk.get("review_chunk_content", "")
+            content_preview = content[:300] if content else ""
+            
+            # 获取一级分类的中文名称
+            first_category_cn = self._get_first_category_cn(first_category_code)
+            
+            # 构建三级分类标准(返回标准文本和索引映射)
+            tertiary_standards, index_mapping = self._build_tertiary_standards(first_category_code, second_category_code)
+            
+            if tertiary_standards == "(无三级分类标准)":
+                # 如果没有三级分类标准,跳过
+                chunk["tertiary_category_cn"] = "无"
+                chunk["tertiary_category_code"] = "none"
+                continue
+            
+            # 渲染提示词
+            prompt = self.prompt_loader.render(
+                "chunk_tertiary_classification",
+                first_category=first_category_cn,
+                secondary_category=second_category_cn,
+                chunk_title=chunk_title,
+                content_preview=content_preview,
+                tertiary_standards=tertiary_standards
+            )
+            
+            messages = [
+                {"role": "system", "content": prompt["system"]},
+                {"role": "user", "content": prompt["user"]}
+            ]
+            
+            llm_requests.append(messages)
+            valid_chunks.append(chunk)
+            index_mappings.append(index_mapping)
+        
+        if not llm_requests:
+            print("  所有内容块都没有三级分类标准,跳过三级分类")
+            return chunks
+        
+        # 批量异步调用LLM API
+        llm_results = await self.llm_client.batch_call_async(llm_requests)
+        
+        # 处理分类结果
+        for chunk, llm_result, index_mapping in zip(valid_chunks, llm_results, index_mappings):
+            if llm_result and isinstance(llm_result, dict):
+                category_index = llm_result.get("category_index")
+                
+                # 验证索引并映射到类别
+                if isinstance(category_index, int) and category_index in index_mapping:
+                    tertiary_cn, tertiary_code = index_mapping[category_index]
+                    chunk["tertiary_category_cn"] = tertiary_cn
+                    chunk["tertiary_category_code"] = tertiary_code
+                else:
+                    # 索引无效,归类为非标准项
+                    print(f"  警告: LLM返回的索引 {category_index} 无效,归类为'非标准项'")
+                    chunk["tertiary_category_cn"] = "非标准项"
+                    chunk["tertiary_category_code"] = "non_standard"
+            else:
+                chunk["tertiary_category_cn"] = "非标准项"
+                chunk["tertiary_category_code"] = "non_standard"
+        
+        print(f"  三级分类完成!")
+        return chunks
+
+    def _get_first_category_cn(self, first_category_code: str) -> str:
+        """获取一级分类的中文名称"""
+        category_mapping = {
+            "basis": "编制依据",
+            "overview": "工程概况",
+            "plan": "施工计划",
+            "technology": "施工工艺技术",
+            "safety": "安全保证措施",
+            "quality": "质量保证措施",
+            "environment": "环境保证措施",
+            "management": "施工管理及作业人员配备与分工",
+            "acceptance": "验收要求",
+            "other": "其他资料",
+            "non_standard": "非标准项"
+        }
+        return category_mapping.get(first_category_code, first_category_code)
+
+    def classify_chunks_secondary(self, chunks: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
+        """同步包装:二级分类"""
+        try:
+            return asyncio.run(self.classify_chunks_secondary_async(chunks))
+        except RuntimeError:
+            raise RuntimeError("请使用 await classify_chunks_secondary_async")
+
+    def classify_chunks_tertiary(self, chunks: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
+        """同步包装:三级分类"""
+        try:
+            return asyncio.run(self.classify_chunks_tertiary_async(chunks))
+        except RuntimeError:
+            raise RuntimeError("请使用 await classify_chunks_tertiary_async")

+ 21 - 33
core/construction_review/component/doc_worker/classification/hierarchy_classifier.py

@@ -11,7 +11,6 @@ import asyncio
 import json
 from typing import Any, Dict, List, Optional
 
-from foundation.observability.cachefiles import cache, CacheBaseDir
 from ..interfaces import HierarchyClassifier as IHierarchyClassifier
 from ..config.provider import default_config_provider
 from ..utils.llm_client import LLMClient
@@ -111,7 +110,7 @@ class HierarchyClassifier(IHierarchyClassifier):
 
         # 批量异步调用LLM API
         llm_results = await self.llm_client.batch_call_async(llm_requests)
-        cache.document_temp(llm_results, base_cache_dir=CacheBaseDir.CONSTRUCTION_REVIEW)
+        
         # 处理分类结果
         classified_items = []
         category_stats = Counter()
@@ -126,42 +125,31 @@ class HierarchyClassifier(IHierarchyClassifier):
                 category_code = llm_result.get("category_code", "")
                 confidence = llm_result.get("confidence", 0.0)
                 
-                # 强制移除"非规范项",必须从标准类别中选择
-                # 注意:"其他资料"是标准类别之一,不应该被移除
-                if category_cn in ["非规范项", "非规范", "其他项"] or category_code == "non_standard":
+                # 强制移除无效的类别代码,但保留"非标准项"作为有效的兜底类别
+                if category_code in ["non_standard_invalid", "unknown"]:
                     category_cn = ""
                     category_code = ""
                 
-                # 验证类别是否在标准类别列表中
-                if not category_cn or category_cn not in self.standard_categories:
-                    # 如果不在标准类别中,强制使用标准类别"其他资料"作为兜底
-                    if self.standard_categories:
-                        if category_cn:
-                            print(f"  警告: LLM返回的类别 '{category_cn}' 不在标准类别中,强制使用标准类别'其他资料'")
-                        else:
-                            print(f"  警告: LLM返回的类别为空或无效,强制使用标准类别'其他资料'")
-                        category_cn = "其他资料"
-                        category_code = self.category_mapping.get("其他资料", "other")
-                    else:
-                        # 如果标准类别列表为空,使用第一个映射的类别
-                        if self.category_mapping:
-                            category_cn = list(self.category_mapping.keys())[0]
-                            category_code = list(self.category_mapping.values())[0]
-                            print(f"  警告: 标准类别列表为空,使用第一个标准类别 '{category_cn}'")
-                        else:
-                            category_cn = "其他资料"
-                            category_code = "other"
-                            print(f"  警告: 无法确定标准类别,使用'其他资料'")
+                # 验证类别是否在标准类别列表中("非标准项"是特殊的兜底类别,也是有效的)
+                if not category_cn or (category_cn not in self.standard_categories and category_cn != "非标准项"):
+                    # 如果不在标准类别中,强制使用"非标准项"作为兜底
+                    if category_cn and category_cn != "非标准项":
+                        print(f"  警告: LLM返回的类别 '{category_cn}' 不在标准类别中,归类为'非标准项'")
+                    elif not category_cn:
+                        print(f"  警告: LLM返回的类别为空或无效,归类为'非标准项'")
+                    category_cn = "非标准项"
+                    category_code = "non_standard"
                 
-                # 确保category_code与mapping一致,且category_cn在标准类别中
-                if category_cn not in self.standard_categories:
-                    category_cn = "其他资料"
-                category_code = self.category_mapping.get(category_cn, category_code)
+                # 确保category_code与mapping一致
+                if category_cn in self.category_mapping:
+                    category_code = self.category_mapping.get(category_cn, category_code)
+                elif category_cn == "非标准项":
+                    category_code = "non_standard"
             else:
-                # LLM调用失败,使用标准类别"其他资料"作为兜底
-                print(f"  警告: 一级目录 '{level1_item['title']}' 的LLM分类失败,使用标准类别'其他资料'")
-                category_cn = "其他资料"
-                category_code = self.category_mapping.get("其他资料", "other")
+                # LLM调用失败,使用"非标准项"作为兜底
+                print(f"  警告: 一级目录 '{level1_item['title']}' 的LLM分类失败,归类为'非标准项'")
+                category_cn = "非标准项"
+                category_code = "non_standard"
                 confidence = 0.0
             
             classified_items.append(

+ 173 - 0
core/construction_review/component/doc_worker/config/StandardCategoryTable.csv

@@ -0,0 +1,173 @@
+first_contents_code,first_contents,second_contents_code,second_contents,second_focus,third_contents_code,third_contents,third_focus
+basis,编制依据,LawsAndRegulations,法律法规,NULL,NationalLawsAndRegulations,国家政府发布的法律法规与规章制度,国家级、法律、法规、规章、强制力、普遍适用、基础框架、顶层设计、行业准则、合规性、统一标准、权威性、强制性条文、基本要求。
+basis,编制依据,LawsAndRegulations,法律法规,NULL,ProvincialLawsAndRegulationsOfProjectLocation,工程所在地省级政府发布的法律法规与规章制度,地方性、区域性、细化补充、因地制宜、执行细则、地方特色、适应性要求、属地管理、动态调整、配套政策、本地化实施。
+basis,编制依据,StandardsAndSpecifications,标准规范,NULL,IndustryStandards,行业标准,需符合国家/行业强制或推荐性标准(如GB/T、JTG等)、时效性强(需跟踪最新版)、覆盖全生命周期(设计→施工→运维)、是定义工程项目的最低技术要求、质量验收准则、安全红线。
+basis,编制依据,StandardsAndSpecifications,标准规范,NULL,TechnicalRegulations,技术规程,操作流程标准化、工艺参数、量化风险管控、节点设备使用、规范施工验收细则、人员资质要求、应急预案模板、数字化交付标准、BIM协同规则、绿色施工指标、强制性条款需100%执行(如安全操作规范)、包含可视化元素(图表、流程图、三维模型指引)、与BIM技术深度融合(4D进度模拟、5D成本控制)。
+basis,编制依据,DocumentSystems,文件制度,NULL,SichuanRoadAndBridgeDocumentSystemsAndManagementProcedures,四川路桥下发的文件制度和管理程序文件,需包含集团级BIM实施标准、EPC总承包管理模式细则、强制要求下属单位接入集团统一的数字化管理平台(如PM系统)、设置科技创新成果转化的量化考核指标。
+basis,编制依据,DocumentSystems,文件制度,NULL,RoadAndBridgeGroupDocumentSystemsAndManagementProcedures,路桥集团下发的文件制度和管理程序文件,区域化管理细则、属地化政策适配、项目分级管控、应急响应机制、分包商信用评价、农民工工资支付、保障绿色施工区域、标准智慧工地建设指南、隐蔽工程验收流程、工程变更索赔指引。
+basis,编制依据,DocumentSystems,文件制度,NULL,BridgeCompanyDocumentSystemsAndManagementProcedures,桥梁公司下发的文件制度和管理程序文件,专业技术标准、工艺工法创新、特种设备管理、试验检测规程、安全生产责任制、班前安全教育工程、质量三检制技术交底、标准化竣工资料归档、规范创优工程培育计划。
+basis,编制依据,DocumentSystems,文件制度,NULL,ConstructionUnitDocumentSystemsAndManagementProcedures,建设单位下发的文件制度和管理程序文件,项目合同履约、工程款支付管理、设计变更审批、竣工验收标准、运营移交协议、保修期责任划分、参建单位考核评价、档案管理实施细则、信息沟通机制、争议解决程序。
+basis,编制依据,CompilationPrinciples,编制原则,NULL,NationalPoliciesStandardsAndDesignDocument,国家方针、政策、标准和设计文件,需动态更新(如新版《公路工程技术标准》实施后同步调整)、涉及多部门联合审查(发改委、住建部、生态环境部)。
+basis,编制依据,CompilationPrinciples,编制原则,NULL,BasicConstructionProcedures,基本建设程序,法定程序刚性、四阶段闭环管理、审批链条完整性、阶段成果验收、逆程序风险管控、数字化流程跟踪。
+basis,编制依据,CompilationPrinciples,编制原则,NULL,ProjectFunctionImplementation,工程项目功能实现,需求匹配度、全功能交付、使用效能保障、用户需求反演、系统集成测试、缺陷责任期追溯。
+basis,编制依据,CompilationPrinciples,编制原则,NULL,ContractPerformance,合同履约,契约精神、权利义务对等、支付节点刚性、变更索赔闭环、信用评价联动、争议解决机制
+basis,编制依据,CompilationPrinciples,编制原则,NULL,ConstructionForceConcentration,施工力量集中,资源集约化、专业化、班组机械配置标准化、劳动力调度、算法工序穿插优化、进度风险预警
+basis,编制依据,CompilationPrinciples,编制原则,NULL,ProcessControl,工序控制,工序逻辑链、工艺标准化、交接检验制度化、关键线路动态监测、平行检验机制、隐蔽工程追溯
+basis,编制依据,CompilationScope,编制范围,NULL,ProjectCoverage,填写完整涵盖本方案包含的所有工程,项目范围完整性、子项划分颗粒度、工程量清单闭合性、专业界面划分、变更管理阈值、风险识别矩阵价、值工程分析、可施工性评审、全生命周期覆盖、涉密工程隔离。
+basis,编制依据,CompilationScope,编制范围,NULL,ConstructionTechnology,部分工程可简要说明采取的施工工艺,工艺标准化体系、工法创新等级、质量控制关键点、机械化作业率、绿色施工技术、BIM协同设计、装配式构件应用、智能监测覆盖率、特殊环境适应性、非遗工艺传承。
+overview,工程概况,DesignSummary,设计概况,关注名称类、具体数值类、量化单位类、技术标准需引用国家或行业规范、关注标准号数字类、各类年限、等级数值、量化单位。,ProjectIntroduction,工程简介,工程名称、工程类型(如住宅、桥梁、隧道)、建设规模(如建筑面积、长度、高度)、工程地址、投资额、工程性质(新建/改建/扩建)、设计单位、设计依据(如合同编号)、工程范围(如施工边界坐标)。
+overview,工程概况,DesignSummary,设计概况,关注名称类、具体数值类、量化单位类、技术标准需引用国家或行业规范、关注标准号数字类、各类年限、等级数值、量化单位。,MainTechnicalStandards,主要技术标准,技术规范编号(如GB50021-2001《岩土工程勘察规范》)、设计使用年限、荷载标准(如活荷载、恒荷载)、抗震设防烈度、防火等级、环保标准(如绿色建筑认证)、材料标准(如混凝土强度等级C30)、施工工艺标准。
+overview,工程概况,GeologyWeather,工程地质与水文气象,关注地名类、具体水位数值类、量化单位类、关注记录降雨量、水位、气温等数值量化单位类。,HydrologicalConditions,水文状况,地下水位(历史最高水位、当前水位)、含水层类型(孔隙水、裂隙水、承压水)、隔水层厚度、渗透系数(K值)、给水度、水质腐蚀性(如pH值、氯离子含量)、补径排条件(补给源、径流方向)、水文地质参数(如越流系数)、地下水动态监测数据。
+overview,工程概况,GeologyWeather,工程地质与水文气象,关注地名类、具体水位数值类、量化单位类、关注记录降雨量、水位、气温等数值量化单位类。,ClimaticConditions,气候条件,气候类型(如亚热带季风气候)、年平均气温、极端气温、年降水量、降雨强度(如小时最大降雨量)、蒸发量、湿度、主导风向、风速、冰冻期、台风频率、气象数据来源(如当地气象站)。
+overview,工程概况,Surroundings,周边环境,周边环境需分析地形地貌名词、建筑分布名词及交通状况道路名词、相关量化单位、相关数字数值、各类专业性名词、建筑物名词、米或毫米等单位类。,PositionalRelationship,位置关系,相邻建(构)筑物(如住宅楼、桥梁)、距离(米)、方位角、山体坡度(°)、边坡稳定性(如安全系数)、河谷宽度、深基坑深度(米)、道路等级(如城市主干道)、高压电电压(kV)、地下管线类型(给水、燃气、电缆)、埋深(米)、保护距离。
+overview,工程概况,Surroundings,周边环境,周边环境需分析地形地貌名词、建筑分布名词及交通状况道路名词、相关量化单位、相关数字数值、各类专业性名词、建筑物名词、米或毫米等单位类。,StructuralDimensions,结构尺寸,建筑物高度/层数、山体海拔、边坡坡比(如1:1.5)、河谷断面尺寸、深基坑支护结构(如桩径、墙厚)、道路宽度(米)、高压电塔高度、地下管线段径(如DN100)。
+overview,工程概况,LayoutPlan,施工平面及立面布置,场地名词、数值类、量化单位类、名称类、数值类、量化单位类。,TemporaryFacilityLocation,临时设施位置,拌和站坐标(如X、Y)、钢筋加工场距工程距离(米)、材料堆码区域面积(㎡)、临时占地红线、与工程最近点距离、场地利用率(%)。
+overview,工程概况,LayoutPlan,施工平面及立面布置,场地名词、数值类、量化单位类、名称类、数值类、量化单位类。,ConstructionWorkPlatform,施工作业平台与便道参数,作业平台尺寸(长×宽、米)、地面形式(混凝土硬化、砂石铺垫)、施工便道长度(米)、宽度(米)、路面形式(沥青、碎石)、最小弯曲半径(米)、坡度(%)、承载力(kPa)。
+overview,工程概况,LayoutPlan,施工平面及立面布置,场地名词、数值类、量化单位类、名称类、数值类、量化单位类。,TemporaryWaterAndElectricityArrangement,临时水电布置,临时用水源(市政管网、地下水井)、管径(如DN100)、管线布置图(走向、节点距离)、供水压力(MPa)、变压器容量(kVA)、配电箱位置、线路走向(架空/埋地)、敷设方式(直埋、穿管)、电缆规格(如YJV22)。
+overview,工程概况,RequirementsTech,施工要求和技术保证条件,名称类、日期类。名称类、量化单位类、数值类。,DurationTarget,工期目标,开工日期(年月日)、竣工日期、总工期(天)、关键节点工期(如基础完工期)、进度计划(甘特图编号)、工期保证措施(如资源调配)。
+overview,工程概况,RequirementsTech,施工要求和技术保证条件,名称类、日期类。名称类、量化单位类、数值类。,QualityTarget,质量目标,质量目标(如合格率100%、鲁班奖)、合同条款编号、业主具体要求(如绿色施工认证)。
+overview,工程概况,RequirementsTech,施工要求和技术保证条件,名称类、日期类。名称类、量化单位类、数值类。,SecurityGoals,安全目标,安全目标(如零死亡事故、隐患整改率)、合同条款编号、业主具体要求(如绿色施工认证)。
+overview,工程概况,RequirementsTech,施工要求和技术保证条件,名称类、日期类。名称类、量化单位类、数值类。,EnvironmentalGoals,环境目标,环境目标(如扬尘控制、噪声限值)、合同条款编号、业主具体要求(如绿色施工认证)。
+overview,工程概况,RiskLevel,风险辨别与分级,危害隐患性词汇类、法规名称类、标准编号类。风险等级相关专业性词汇、属于、标准编号或其它编号、部门名称类、数值类、量化单位类。名称类、数值类。,DangerSource,危险源,地质灾害(地面沉降、滑坡)、水文风险(管涌、流砂)、施工风险(坍塌、触电)、环境风险(污染、火灾)、机械伤害(塔吊倾覆)、法律法规依据(如《安全生产法》)。
+overview,工程概况,RiskLevel,风险辨别与分级,危害隐患性词汇类、法规名称类、标准编号类。风险等级相关专业性词汇、属于、标准编号或其它编号、部门名称类、数值类、量化单位类。名称类、数值类。,ClassificationAndResponseMeasures,分级与应对措施,风险等级(重大、较大、一般)、分级标准(如LEC法)、应对措施(监测、支护、疏散)、应急预案编号、责任部门、监控频率。
+overview,工程概况,Stakeholders,参建各方责任主体单位,名称类、数值类。,UnitType,单位类型,建设单位(业主)、设计单位、监理单位、施工单位(总包)、监控单位(监测机构)、专业分包单位(如桩基分包)、统一社会信用代码、项目负责人。
+plan,施工计划,Schedule,施工进度计划,工序作业时间分析、关键工程节点安排、施工进度计划横道图、进度控制点、里程碑事件、工序搭接关系、工期延误风险、进度调整机制、施工流水节拍、网络计划技术(如双代号网络图),ProcessOperationTimeAnalysis,工序作业时间分析,需明确各工序的持续时间、逻辑关系及资源需求、是进度计划的基础;
+plan,施工计划,Schedule,施工进度计划,工序作业时间分析、关键工程节点安排、施工进度计划横道图、进度控制点、里程碑事件、工序搭接关系、工期延误风险、进度调整机制、施工流水节拍、网络计划技术(如双代号网络图),KeyProjectNodeArrangement,关键工程(工序)节点安排,主要工程(工序)节点的起止时间和持续时间、聚焦影响总工期的关键工序(如基础浇筑、主体封顶)、是进度控制的核心;
+plan,施工计划,Schedule,施工进度计划,工序作业时间分析、关键工程节点安排、施工进度计划横道图、进度控制点、里程碑事件、工序搭接关系、工期延误风险、进度调整机制、施工流水节拍、网络计划技术(如双代号网络图),ConstructionScheduleGanttChart,施工进度计划横道图等,直观展示进度安排的标准工具、需包含主要工序名称、起始时间、截止时间、持续时间、时间横道、责任人等信息;
+plan,施工计划,Materials,施工材料计划,名称类、规格类、数值类、数值单位类,ListOfConstructionMeasuresAndMaterials,施工措施材料清单,排除主题工程材料、施工措施材料应包含如临时支撑结构材料、辅助施工材料、非主体工程的挡防措施、作业平台处理、模板配置、人员上下通道、安全防护措施和安全防护用品等、详细列出材料名称、规格、数量、重量及来源(如厂家、经销商)、是材料计划的核心输出
+plan,施工计划,Equipment,施工设备计划,设备名称类、规格类、数值类、数值单位类、时间日期类,MainConstructionMachineryAndEquipment,主要施工机械设备,列出关键设备(如起重吊装设备、混凝土浇筑设备、张拉压浆设备、人员升降设备、钻孔设备、隧道专用设备、监测监控设备、质量检查验收设备等)、明确其设备名称、规格(如额定功率)、数量及来源(自有或租赁);
+plan,施工计划,Workforce,劳动力计划,工种名称类、时间日期类、数值类、数值单位类,WorkforceAllocationPlan,劳动力配置计划,明确工种投入(如木工、钢筋工等)情况、按施工阶段(如基础、主体、装饰)列出各工种(如模板工、混凝土工)的投入数量、确保劳动力与进度匹配;
+plan,施工计划,Workforce,劳动力计划,工种名称类、时间日期类、数值类、数值单位类,StageLaborDemand,阶段劳动力需求,明确周/旬/月的劳动力峰值及低谷、优化人员调度;
+plan,施工计划,SafetyCost,安全生产费用使用计划,名称类、金额类、货币数值类、货币单位类、不能将项目总的安全生产费用列入,CategoryOfSafetyProductionExpenses,安全生产费用类别,符合《企业安全生产费用提取和使用管理办法》(财资〔2022〕136号)及地方规定(如广东省水利厅2025年办法)、如安全防护设施、应急救援等;
+plan,施工计划,SafetyCost,安全生产费用使用计划,名称类、金额类、货币数值类、货币单位类、不能将项目总的安全生产费用列入,SecurityFeeName,安全费用名称,具体(如“施工现场临时用电系统改造”“应急救援器材采购”)、避免模糊表述;
+plan,施工计划,SafetyCost,安全生产费用使用计划,名称类、金额类、货币数值类、货币单位类、不能将项目总的安全生产费用列入,SingleInvestmentAmount,单项投入金额,明确每项费用的具体数值(如“临时防护栏杆采购:5万元”)、确保费用可量化;
+plan,施工计划,SafetyCost,安全生产费用使用计划,名称类、金额类、货币数值类、货币单位类、不能将项目总的安全生产费用列入,TotalSafetyProductionExpenses,安全生产费用总额,根据工程规模、风险等级计算、确保足额投入
+technology,施工工艺技术,MethodsOverview,主要施工方法概述,工艺名称类、施工专业词汇类、规格类、数值类、数值单位类,ConstructionTechnologySelection,施工工艺选择,需明确工程采用的核心工艺(如“现浇混凝土框架工艺”“装配式构件安装工艺”)、是施工方法概述的基础;
+technology,施工工艺技术,MethodsOverview,主要施工方法概述,工艺名称类、施工专业词汇类、规格类、数值类、数值单位类,MainConstructionMethods,主要施工方法,需概括各分部分项工程的关键做法(如“基础采用旋挖钻孔灌注桩施工”“主体采用铝模板体系施工”);
+technology,施工工艺技术,MethodsOverview,主要施工方法概述,工艺名称类、施工专业词汇类、规格类、数值类、数值单位类,TemplateConfigurationQuantity,模板配置数量,需根据施工进度和构件尺寸计算(如“柱模板配置20套”“梁模板配置15套”)、是模板管理的关键指标;
+technology,施工工艺技术,TechParams,技术参数,工程材料类名词、规格类、数值类、数值单位类、时间日期类、重量单位类,MaterialType,材料类型,需明确主要材料的类别(如“钢筋”“混凝土”“防水卷材”)、是技术参数的基础;
+technology,施工工艺技术,TechParams,技术参数,工程材料类名词、规格类、数值类、数值单位类、时间日期类、重量单位类,MaterialSpecifications,材料规格,需细化材料的尺寸、型号(如“钢筋HRB400EΦ16”“混凝土C30P6”)、直接影响工程质量;
+technology,施工工艺技术,TechParams,技术参数,工程材料类名词、规格类、数值类、数值单位类、时间日期类、重量单位类,DeviceName,设备名称,需列出关键设备的全称(如“挖掘机”“塔式起重机”“混凝土泵车”)、是设备管理的核心;
+technology,施工工艺技术,TechParams,技术参数,工程材料类名词、规格类、数值类、数值单位类、时间日期类、重量单位类,DeviceModel,设备型号,需明确设备的规格型号(如“徐工XE200挖掘机”“中联重科TC6013塔式起重机”)、用于设备的采购和维护;
+technology,施工工艺技术,TechParams,技术参数,工程材料类名词、规格类、数值类、数值单位类、时间日期类、重量单位类,EquipmentManufacturingTime,设备出厂时间,需包含设备的出厂时间
+technology,施工工艺技术,TechParams,技术参数,工程材料类名词、规格类、数值类、数值单位类、时间日期类、重量单位类,EquipmentPerformanceParameters,设备性能参数,需包含设备的额定功率、工作效率等(如“塔式起重机最大起重量8t”“混凝土泵车输送量60m³/h”)、是设备选型的依据;
+technology,施工工艺技术,TechParams,技术参数,工程材料类名词、规格类、数值类、数值单位类、时间日期类、重量单位类,EquipmentWeight,设备自重,需记录设备的自身重量(如“塔式起重机自重50t”)、用于基础设计和运输规划。
+technology,施工工艺技术,PrepWork,施工准备,名称类、数值类、规格类、数值单位类、岗位名称类、时间日期类、工程设备类,MeasurementAndStakeout,测量放样,需明确测量的基准点、控制网设置(如“建立施工平面控制网”“放出建筑物轴线”)、是施工定位的关键;
+technology,施工工艺技术,PrepWork,施工准备,名称类、数值类、规格类、数值单位类、岗位名称类、时间日期类、工程设备类,TemporaryWaterAndElectricityConsumption,临时水电用量,需计算施工期间的用水、用电量(如“临时用水管径DN100”“临时用电容量500kW”)、用于临时设施的设计;
+technology,施工工艺技术,PrepWork,施工准备,名称类、数值类、规格类、数值单位类、岗位名称类、时间日期类、工程设备类,TheSiteIsFlat,场地平整,需明确平整的范围、标高(如“平整场地至设计标高±0.000”“压实度达到90%”)、是施工场地准备的基础;
+technology,施工工艺技术,PrepWork,施工准备,名称类、数值类、规格类、数值单位类、岗位名称类、时间日期类、工程设备类,Staffing,人员配置,需列出各岗位的人员数量(如“项目经理1名”“施工员2名”“钢筋工10名”)、是劳动力管理的核心;
+technology,施工工艺技术,PrepWork,施工准备,名称类、数值类、规格类、数值单位类、岗位名称类、时间日期类、工程设备类,EquipmentEntry,设备进场,需明确设备的进场时间、运输方式(如“塔式起重机进场时间2026年3月1日”“采用平板车运输”)、是设备准备的关键;
+technology,施工工艺技术,PrepWork,施工准备,名称类、数值类、规格类、数值单位类、岗位名称类、时间日期类、工程设备类,SafetyProtectionFacilities,安全防护措施,需列出现场的安全设施(如“安全网”“防护栏杆”“消防栓”)、是安全保障的基础;
+technology,施工工艺技术,PrepWork,施工准备,名称类、数值类、规格类、数值单位类、岗位名称类、时间日期类、工程设备类,PersonnelAccess,人员上下通道,需明确通道的形式、位置(如“楼梯间通道”“脚手架斜道”)、是人员通行的安全保障。
+technology,施工工艺技术,Process,工艺流程,工序专业名称类、工程名称类、数值类、数值单位类,ConstructionProcess,施工工序,需列出工程的主要工序(如“地基处理→基础浇筑→主体结构→装饰装修”)、是工艺流程的核心;
+technology,施工工艺技术,Process,工艺流程,工序专业名称类、工程名称类、数值类、数值单位类,ProcessSequence,工艺顺序,需明确工序的先后逻辑(如“先绑扎钢筋后支模板”“先浇筑混凝土后养护”)、是流程执行的关键;
+technology,施工工艺技术,Process,工艺流程,工序专业名称类、工程名称类、数值类、数值单位类,ProcessFlowDiagram,工艺流程框图,需用图形展示工序的衔接(如“地基处理流程图”“主体结构施工流程图”)、是流程可视化的工具;
+technology,施工工艺技术,Operations,施工方法及操作要求,施工流程名称类、数值类、数值单位类,ConstructionProcessOperations,施工工序描述操作,需详细描述各工序的操作步骤(如“钢筋绑扎操作流程”“模板安装操作步骤”)、是操作指导的核心;
+technology,施工工艺技术,Operations,施工方法及操作要求,施工流程名称类、数值类、数值单位类,ConstructionPoints,施工要点,需明确工序的关键要求(如“钢筋绑扎需保证间距均匀”“模板安装需保证垂直度”)、是质量控制的关键;
+technology,施工工艺技术,Operations,施工方法及操作要求,施工流程名称类、数值类、数值单位类,FAQPrevention,常见问题及预防,需列出工序的常见问题及预防措施(如“预防混凝土蜂窝麻面:控制混凝土坍落度”“预防模板漏浆:密封模板缝隙”)、是风险防控的重点 
+technology,施工工艺技术,Operations,施工方法及操作要求,施工流程名称类、数值类、数值单位类,ProblemSolvingMeasures,问题处理措施,需明确问题的解决方法(如“混凝土蜂窝处理:剔除松散部分、用高一等级混凝土填补”“模板漏浆处理:用海绵条密封缝隙”)、是问题解决的指南;
+technology,施工工艺技术,Inspection,检查要求,材料进场检验、构配件抽查、工序检查内容、工序检查标准、隐蔽工程验收,MaterialInspectionUponArrival,材料进场质量检验,需明确材料的检验项目(如“钢筋的屈服强度检验”“混凝土的抗压强度检验”)、是材料质量控制的基础;
+technology,施工工艺技术,Inspection,检查要求,材料进场检验、构配件抽查、工序检查内容、工序检查标准、隐蔽工程验收,RandomInspectionOfIncomingComponents,构配件进场质量抽查,需明确构配件的抽查比例(如“构配件抽查比例为10%”“每批抽查5件”)、是构配件质量控制的手段;
+technology,施工工艺技术,Inspection,检查要求,材料进场检验、构配件抽查、工序检查内容、工序检查标准、隐蔽工程验收,ProcessInspectionContent,工序检查内容,需列出各工序的检查项目(如“钢筋绑扎的检查内容:间距、数量、锚固长度”“模板安装的检查内容:垂直度、平整度、支撑稳定性”)、是工序检查的核心;
+technology,施工工艺技术,Inspection,检查要求,材料进场检验、构配件抽查、工序检查内容、工序检查标准、隐蔽工程验收,ProcessInspectionStandards,工序检查标准,需明确检查的合格标准(如“钢筋间距允许偏差±10mm”“模板垂直度允许偏差5mm”)、是工序验收的依据;
+safety,安全保证措施,SafetySystem,安全保证体系,流程体系类名词、标准文书类、标标准编号编码数字类,SafetyProductionAssuranceSystemFrameworkDiagram,安全生产保证体系框图,安全保证体系的视觉化呈现、需明确体系的核心要素(如组织机构、制度流程、资源保障)及逻辑关系、是公司标准体系的具象化载体;
+safety,安全保证措施,SafetySystem,安全保证体系,流程体系类名词、标准文书类、标标准编号编码数字类,CompanyStandardSystemReference,公司标准体系引用,强调安全保证体系需承接公司现有标准(如《公司安全生产管理办法》《公司安全技术规程》)、确保体系的一致性与延续性;
+safety,安全保证措施,Organization,组织保证措施,名词类、人名类、岗位名称类、制度名词类,SafetyManagementOrganization,安全管理组织机构,基于项目经理为组长的安全工作领导小组、关注岗位组织架构名称类、部门名称类、关系结构类名词;
+safety,安全保证措施,Organization,组织保证措施,名词类、人名类、岗位名称类、制度名词类,PersonnelSafetyResponsibilities,人员安全职责,关注岗位名称类、人名类、责任制度名词类、岗位职责名词类、安全制度名词类;
+safety,安全保证措施,TechMeasures,技术保证措施,施工专业名词类、工序名称类 、施工设备名称类、施工材料名称类、施工场地名称类、岗位名称类,OverallSecurityMeasures,总体安全措施,包含保证施工过程中主要工序的人员、材料、机械设备安全所采取的技术措施、以及材料运输、吊装、施工作业区域的临边、临空、洞口安全防护设施、安全母绳布置、人员上下(横向)通道布置等、是针对项目整体的安全技术规划(如“施工现场临时用电总体方案”“高空作业总体防护措施”)、需覆盖所有施工环节;
+safety,安全保证措施,TechMeasures,技术保证措施,施工专业名词类、工序名称类 、施工设备名称类、施工材料名称类、施工场地名称类、岗位名称类,SafetyAssuranceMeasuresForKeyProcesses,主要工序安全措施,是针对关键工序的具体安全要求(如“深基坑开挖支护措施”“模板安装拆除安全规范”)、需明确每一步操作的安全要点;
+safety,安全保证措施,Monitoring,监测监控措施,组织机构名称类、施工区域名称类、监测专业名词类、施工场地名称类、设备名称类、数值类、数值单位类、岗位名称类,MonitoringOrganization,监测组织机构,监测监控的责任主体、需明确监测人员的资质(如注册安全工程师、监测技术员)及职责(如数据采集、分析、报告)、确保监测工作的专业性;
+safety,安全保证措施,Monitoring,监测监控措施,组织机构名称类、施工区域名称类、监测专业名词类、施工场地名称类、设备名称类、数值类、数值单位类、岗位名称类,MonitoringRange,监测范围,需覆盖施工区域内的所有风险点(如深基坑周边、高支模体系、临时用电线路)、避免遗漏;
+safety,安全保证措施,Monitoring,监测监控措施,组织机构名称类、施工区域名称类、监测专业名词类、施工场地名称类、设备名称类、数值类、数值单位类、岗位名称类,MonitoringItems,监测项目,需明确监测的具体内容(如深基坑的水平位移、高支模的立杆轴力、临时用电的电压电流)、是监测的核心;
+safety,安全保证措施,Monitoring,监测监控措施,组织机构名称类、施工区域名称类、监测专业名词类、施工场地名称类、设备名称类、数值类、数值单位类、岗位名称类,MonitoringPointSettings,监测点设置,需根据风险点的分布确定(如深基坑每10米设置一个位移监测点)、需符合《建筑基坑支护技术规程》(JGJ 120-2012)等行业标准;
+safety,安全保证措施,Monitoring,监测监控措施,组织机构名称类、施工区域名称类、监测专业名词类、施工场地名称类、设备名称类、数值类、数值单位类、岗位名称类,MonitoringInstrumentsAndEquipment,监测仪器设备,需明确仪器的名称(如全站仪、测斜仪、应力传感器)、型号(如徕卡TS60全站仪)及精度(如0.5秒级)、确保数据的准确性;
+safety,安全保证措施,Monitoring,监测监控措施,组织机构名称类、施工区域名称类、监测专业名词类、施工场地名称类、设备名称类、数值类、数值单位类、岗位名称类,MonitoringMethods,监测方法,需明确数据采集的方式(如人工读数、自动采集)、及数据处理方法(如统计分析、趋势预测)、是监测的关键环节;
+safety,安全保证措施,Monitoring,监测监控措施,组织机构名称类、施工区域名称类、监测专业名词类、施工场地名称类、设备名称类、数值类、数值单位类、岗位名称类,MonitoringFrequency,监测频率,需明确监测频率、(如深基坑每天一次、高支模每周两次)。
+safety,安全保证措施,Monitoring,监测监控措施,组织机构名称类、施工区域名称类、监测专业名词类、施工场地名称类、设备名称类、数值类、数值单位类、岗位名称类,WarningValuesAndControlValues,预警值及控制值,需根据设计文件及行业标准确定(如深基坑水平位移预警值为30mm、控制值为50mm)、是判断风险的重要依据;
+safety,安全保证措施,Monitoring,监测监控措施,组织机构名称类、施工区域名称类、监测专业名词类、施工场地名称类、设备名称类、数值类、数值单位类、岗位名称类,InformationFeedbackMechanism,信息反馈机制,监测数据的传递流程(如监测人员→项目安全部→项目经理→公司总部)、需明确反馈的时间要求(如实时反馈、每日汇总)、确保风险及时处理。
+safety,安全保证措施,Emergency,应急处置措施,事故名称类、救援器材类、机构名称类、数字类、数值单位类。,EmergencyProcedures,应急处置程序,应采用公司标准应急处理程序图(附件16)、应急响应的步骤流程(如“事故报告→现场警戒→人员疏散→救援实施→善后处理”)、需明确每一步的责任部门及时间要求、确保响应及时;
+safety,安全保证措施,Emergency,应急处置措施,事故名称类、救援器材类、机构名称类、数字类、数值单位类。,EmergencyMeasures,应急处置措施,应根据方案实施过程潜在的危险源、判断出可能造成的伤害类型、制定出有针对性的救援措施、保证在事故发生后伤者能得到有效和及时的救治、如触电、有毒有害气体中毒、高处坠落、物体打击、施工现场及驻地火灾等事故、针对不同类型事故的具体处理方法(如“火灾事故使用干粉灭火器扑救”“坍塌事故使用千斤顶支撑”)、需明确操作要点(如灭火器的使用方法、千斤顶的支撑位置)、确保救援有效;
+safety,安全保证措施,Emergency,应急处置措施,事故名称类、救援器材类、机构名称类、数字类、数值单位类。,EmergencySuppliesAndEquipmentSupport,应急物资及设备保障,应根据事故的不同、以表格的形式说明救援的物品名称、规格型号、单位、数量、监管人、联系电话等内容、应急处置的物质基础、需明确物资的名称(如灭火器、急救箱、千斤顶)、数量(如每100平方米配备2个灭火器)、存放位置(如施工现场入口处)及维护要求(如每月检查一次灭火器压力)、确保物资随时可用;
+safety,安全保证措施,Emergency,应急处置措施,事故名称类、救援器材类、机构名称类、数字类、数值单位类。,TrafficManagementAndMedicalRescue,交通疏导与医疗救援,应以表格的形式明确施工工点附近的医疗救援机构名称、联系电话、距离等、并附应急救援线路图;
+safety,安全保证措施,Emergency,应急处置措施,事故名称类、救援器材类、机构名称类、数字类、数值单位类。,PostDisposal,后期处置,包括善后处理、调查与评估、恢复生产等三个方面、事故后的恢复工作、需明确善后处理(如伤亡人员家属安抚、财产损失统计)、事故调查(如原因分析、责任认定评估)及整改措施(如完善安全制度、加强培训)、避免事故重复发生;
+quality,质量保证措施,QualitySystem,质量保证体系,组织机构名称类、岗位名称类、岗位职责词汇类。,QualityAssuranceSystemFramework,质量管理组织机构,应引用公司标准体系框图、质量体系的视觉化呈现、需明确体系的核心要素(如组织机构、制度流程、资源保障)及逻辑关系、是体系落地的框架基础;
+quality,质量保证措施,QualitySystem,质量保证体系,组织机构名称类、岗位名称类、岗位职责词汇类。,QualityManagementOrganization,人员职责,基于项目经理为组长的工作领导小组、小组中包括项目经理、项目总工、质量总监、工程部门、质检部门、专业分包单位(协作队伍)项目负责人和项目技术负责人等、需明确层级(如公司级、项目级、班组级)及组成部门(如质量部、工程部、技术部)、形成“横向到边、纵向到底”的管理网络;
+quality,质量保证措施,QualitySystem,质量保证体系,组织机构名称类、岗位名称类、岗位职责词汇类。,PersonnelResponsibilities,质量保证体系框图,需细化每个岗位的质量责任(如项目经理的“第一责任人”职责、质量员的“现场监督”职责)、避免职责模糊导致的管理漏洞;
+quality,质量保证措施,QualityGoals,质量目标,目标标准词汇类、合同条款类、具体工程名称类、量化数值类、数值单位类。,DecompositionOfQualityObjectives,质量目标分解,根据施工合同和业主要求填写、需将总目标拆解为分部(基础、主体、装饰)、分项工程的具体目标(如“主体结构混凝土强度合格率100%”)、是目标落地的关键;
+quality,质量保证措施,Excellence,工程创优规划,工程创优总体计划、技术准备(BIM/新技术应用)、过程控制(关键工序精品打造)、细部处理(节点优化)、精品工程创建、新技术推广(四新技术)、申报资料编制、工程资料归档、创优考核机制,OverallPlanForEngineeringExcellence,工程创优总体计划,需明确创优的阶段目标(如“基础工程创优”“主体工程创优”)及关键节点、是创优工作的路线图;
+quality,质量保证措施,Excellence,工程创优规划,工程创优总体计划、技术准备(BIM/新技术应用)、过程控制(关键工序精品打造)、细部处理(节点优化)、精品工程创建、新技术推广(四新技术)、申报资料编制、工程资料归档、创优考核机制,TechnicalPreparation,技术准备,需涵盖BIM技术应用、施工方案优化等、为创优提供技术支撑;
+quality,质量保证措施,Excellence,工程创优规划,工程创优总体计划、技术准备(BIM/新技术应用)、过程控制(关键工序精品打造)、细部处理(节点优化)、精品工程创建、新技术推广(四新技术)、申报资料编制、工程资料归档、创优考核机制,ProcessControl,过程控制,需聚焦关键工序(如“大体积混凝土浇筑”“钢结构安装”)、打造精品工序;
+quality,质量保证措施,Excellence,工程创优规划,工程创优总体计划、技术准备(BIM/新技术应用)、过程控制(关键工序精品打造)、细部处理(节点优化)、精品工程创建、新技术推广(四新技术)、申报资料编制、工程资料归档、创优考核机制,DetailedTreatment,细部处理,需优化节点做法(如“墙面抹灰阴阳角顺直”“防水卷材搭接严密”)、提升工程观感质量;
+quality,质量保证措施,Excellence,工程创优规划,工程创优总体计划、技术准备(BIM/新技术应用)、过程控制(关键工序精品打造)、细部处理(节点优化)、精品工程创建、新技术推广(四新技术)、申报资料编制、工程资料归档、创优考核机制,NewTechnologyPromotion,新技术推广,需应用“四新技术”(新技术、新材料、新工艺、新设备)、提升创优的技术含量;
+quality,质量保证措施,Excellence,工程创优规划,工程创优总体计划、技术准备(BIM/新技术应用)、过程控制(关键工序精品打造)、细部处理(节点优化)、精品工程创建、新技术推广(四新技术)、申报资料编制、工程资料归档、创优考核机制,PreparationOfApplicationMaterials,申报资料编制,需整理创优所需的资料(如工程质量报告、技术创新成果)、是创优申报的核心材料;
+quality,质量保证措施,Excellence,工程创优规划,工程创优总体计划、技术准备(BIM/新技术应用)、过程控制(关键工序精品打造)、细部处理(节点优化)、精品工程创建、新技术推广(四新技术)、申报资料编制、工程资料归档、创优考核机制,EngineeringDataArchiving,工程资料归档,需确保资料真实、完整、符合创优评审要求。
+quality,质量保证措施,QualityControl,质量控制程序与具体措施,原材料进场检验(三证一检)、实体工程质量验收(分项/分部工程验收)、质量通病防治(墙面空鼓/屋面渗漏)、季节性施工质量控制(冬期混凝土保温/雨期防水)、工序质量控制点、质量检查程序(自检/互检/专检)、质量问题整改(闭环管理),RawMaterialInspection,原材料进场检验,需执行“三证一检”(合格证、质检报告、生产许可证+进场复检)、确保材料质量;
+quality,质量保证措施,QualityControl,质量控制程序与具体措施,原材料进场检验(三证一检)、实体工程质量验收(分项/分部工程验收)、质量通病防治(墙面空鼓/屋面渗漏)、季节性施工质量控制(冬期混凝土保温/雨期防水)、工序质量控制点、质量检查程序(自检/互检/专检)、质量问题整改(闭环管理),PhysicalProjectQualityAcceptance,实体工程质量验收,需按分项(如“钢筋绑扎”)、分部工程(如“基础工程”)进行验收、符合规范要求;
+quality,质量保证措施,QualityControl,质量控制程序与具体措施,原材料进场检验(三证一检)、实体工程质量验收(分项/分部工程验收)、质量通病防治(墙面空鼓/屋面渗漏)、季节性施工质量控制(冬期混凝土保温/雨期防水)、工序质量控制点、质量检查程序(自检/互检/专检)、质量问题整改(闭环管理),PreventionAndControlOfCommonQualityDefectsInProcesses,工序质量通病防治,需针对常见问题(如“墙面空鼓”“屋面渗漏”)制定专项措施(如“抹灰前基层凿毛”“防水附加层施工”)、减少质量缺陷;
+quality,质量保证措施,QualityControl,质量控制程序与具体措施,原材料进场检验(三证一检)、实体工程质量验收(分项/分部工程验收)、质量通病防治(墙面空鼓/屋面渗漏)、季节性施工质量控制(冬期混凝土保温/雨期防水)、工序质量控制点、质量检查程序(自检/互检/专检)、质量问题整改(闭环管理),SeasonalConstructionQualityAssuranceMeasures,季节性施工质量保证措施,需针对冬期(混凝土保温)、雨期(防水加强)、高温(混凝土保湿)制定专项措施、确保施工质量;
+environment,环境保证措施,EnvSystem,环境保证体系,环境保证体系框图、公司标准体系引用,BlockDiagramOfEnvironmentalAssuranceSystem,环境保证体系框图,环境保证体系的视觉化呈现、需明确体系的核心要素(如组织机构、制度流程、资源保障)及逻辑关系、是公司标准体系的具象化载体;
+environment,环境保证措施,EnvSystem,环境保证体系,环境保证体系框图、公司标准体系引用,CompanyStandardSystemReference,公司标准体系引用,应引用公司标准体系框图、强调环境保证体系需承接公司现有标准(如《公司环境管理体系手册》《公司环境保护管理办法》)、确保体系的一致性与延续性;
+environment,环境保证措施,EnvOrg,环境保护组织机构,环境保护组织架构、管理人员姓名、管理人员职务、管理人员职责、环境管理岗位责任、责任考核机制、环境管理职责分工、环境管理人员资质、环境管理沟通机制,EnvironmentalAssuranceSystemFramework,环境保护组织架构,包含管理人员姓名、职务、职责、环境管理的责任主体、基于项目经理为组长的工作领导小组、小组中包括项目经理、项目副经理、项目总工、工程部门、质检部门、安全环保部门、专业分包单位(协作队伍)项目负责人和项目技术负责人等、需明确机构的层级(如公司级、项目级、班组级)及组成部门(如环境部、工程部、技术部)、形成“横向到边、纵向到底”的管理网络;
+environment,环境保证措施,EnvOrg,环境保护组织机构,环境保护组织架构、管理人员姓名、管理人员职务、管理人员职责、环境管理岗位责任、责任考核机制、环境管理职责分工、环境管理人员资质、环境管理沟通机制,EnvironmentalManagementJobResponsibilities,环境管理岗位责任,需明确各岗位的环境责任(如项目经理的“环境第一责任人”职责、环境专员的“现场巡查”职责)、是组织保证的基石;
+environment,环境保证措施,EnvOrg,环境保护组织机构,环境保护组织架构、管理人员姓名、管理人员职务、管理人员职责、环境管理岗位责任、责任考核机制、环境管理职责分工、环境管理人员资质、环境管理沟通机制,ResponsibilityAssessmentMechanism,责任考核机制,对环境职责履行情况的评价方式(如月度考核、年度评优)、需与环境绩效挂钩(如奖金发放、晋升晋级)、强化责任意识。
+environment,环境保证措施,EnvProtection,环境保护及文明施工措施,办公生活区环境卫生管理、生活垃圾分类处置、卫生防疫措施、饮用水安全保障、施工区域水土流失防治、截排水系统设计、边坡防护工程、沉沙池设置、噪声排放监测、低噪声设备选型、隔音屏障设置、施工时间管控、污水沉淀处理、油污隔离措施、废水检测达标、扬尘控制、废气净化处理、清洁能源使用、裸土覆盖、车辆冲洗设施。,EnvironmentalSanitationGuaranteeMeasuresForOfficeAndLivingAreas,办公生活区环境卫生保证措施,需明确责任分工(如保洁人员配置、卫生区域划分)及管理流程(如每日清扫、每周检查)、确保环境整洁;
+environment,环境保证措施,EnvProtection,环境保护及文明施工措施,办公生活区环境卫生管理、生活垃圾分类处置、卫生防疫措施、饮用水安全保障、施工区域水土流失防治、截排水系统设计、边坡防护工程、沉沙池设置、噪声排放监测、低噪声设备选型、隔音屏障设置、施工时间管控、污水沉淀处理、油污隔离措施、废水检测达标、扬尘控制、废气净化处理、清洁能源使用、裸土覆盖、车辆冲洗设施。,SoilAndWaterConservationMeasuresInTheConstructionArea,施工区域水土流失防治措施,需通过“截(截水沟)、排(排水沟)、拦(拦挡坝)、护(边坡防护)”综合措施、减少雨水对裸露土壤的冲刷;
+environment,环境保证措施,EnvProtection,环境保护及文明施工措施,办公生活区环境卫生管理、生活垃圾分类处置、卫生防疫措施、饮用水安全保障、施工区域水土流失防治、截排水系统设计、边坡防护工程、沉沙池设置、噪声排放监测、低噪声设备选型、隔音屏障设置、施工时间管控、污水沉淀处理、油污隔离措施、废水检测达标、扬尘控制、废气净化处理、清洁能源使用、裸土覆盖、车辆冲洗设施。,NoiseEmissionMonitoring,噪声排放监测,需按照《建筑施工场界环境噪声排放标准》(GB 12523-2011)要求、在施工现场边界设置监测点、每日监测1次、记录等效声级(Leq)和最大声级(Lmax);
+environment,环境保证措施,EnvProtection,环境保护及文明施工措施,办公生活区环境卫生管理、生活垃圾分类处置、卫生防疫措施、饮用水安全保障、施工区域水土流失防治、截排水系统设计、边坡防护工程、沉沙池设置、噪声排放监测、低噪声设备选型、隔音屏障设置、施工时间管控、污水沉淀处理、油污隔离措施、废水检测达标、扬尘控制、废气净化处理、清洁能源使用、裸土覆盖、车辆冲洗设施。,WaterPollutionPreventionAndControlMeasures,水污染防治措施,需在搅拌机、运输车清洗处设置沉淀池、施工废水经沉淀后回用(如洒水降尘)、避免直接排入市政管网;
+environment,环境保证措施,EnvProtection,环境保护及文明施工措施,办公生活区环境卫生管理、生活垃圾分类处置、卫生防疫措施、饮用水安全保障、施工区域水土流失防治、截排水系统设计、边坡防护工程、沉沙池设置、噪声排放监测、低噪声设备选型、隔音屏障设置、施工时间管控、污水沉淀处理、油污隔离措施、废水检测达标、扬尘控制、废气净化处理、清洁能源使用、裸土覆盖、车辆冲洗设施。,AirPollutionPreventionAndControlMeasures,大气污染防治措施,需采取“洒水降尘、裸土覆盖、车辆冲洗、道路硬化”等措施、确保施工现场目测扬尘高度小于1.5m(土方作业阶段)或0.5m(结构施工阶段)。
+Management,施工管理及作业人员配备与分工,Managers,施工管理人员,施工管理人员名单、岗位职责清单、管理职责分解、管理权限划分、管理流程衔接。,ConstructionManagementPersonnelList,施工管理人员名单,需以表格形式明确项目管理人员(如项目经理、项目书记、项目总工、项目副经理、质量总监、安全总监、各职能部门、主管技术员、测量员、质检员、以及专业分包单位(协作队伍)项目负责人和项目技术负责人等)的姓名、岗位及联系方式、是人员管理的基础台账;
+Management,施工管理及作业人员配备与分工,Managers,施工管理人员,施工管理人员名单、岗位职责清单、管理职责分解、管理权限划分、管理流程衔接。,JobResponsibilitiesList,岗位职责清单,需细化每个管理岗位的职责(如项目经理的“项目全面管理”职责、技术负责人的“技术方案审核”职责)、避免职责模糊导致的管理漏洞;
+Management,施工管理及作业人员配备与分工,SafetyStaff,专职安全生产管理人员,专职安全生产管理人员名单、安全生产考核合格证书、证书编号、证书有效期、安全岗位职责、安全责任追究。,ListOfFullTimeSafetyProductionManagementPersonnel,专职安全生产管理人员名单,需以表格形式明确专职安全员(如项目安全总监、专职安全员)的姓名、岗位及联系方式、是安全管理的核心台账;
+Management,施工管理及作业人员配备与分工,SafetyStaff,专职安全生产管理人员,专职安全生产管理人员名单、安全生产考核合格证书、证书编号、证书有效期、安全岗位职责、安全责任追究。,SafetyProductionQualificationCertificate,安全生产考核合格证书,需明确证书类型(如“建筑施工企业专职安全生产管理人员证书”)、编号及有效期、是上岗的必备资质;
+Management,施工管理及作业人员配备与分工,SafetyStaff,专职安全生产管理人员,专职安全生产管理人员名单、安全生产考核合格证书、证书编号、证书有效期、安全岗位职责、安全责任追究。,SafetyProductionManagementJobResponsibilities,安全生产管理岗位职责,需细化专职安全员的职责(如“现场安全检查”“隐患整改监督”“安全培训实施”)、确保安全管理工作落地;
+Management,施工管理及作业人员配备与分工,SpecialWorkers,特种作业人员,特种作业人员名单、特种作业操作资格证书、证书编号、证书有效期、特种作业工种、岗位职责、证书延期复核、违章作业记录。,ListOfSecialOperationsPersonnel,特种作业人员名单,需以表格形式明确特种作业人员(如建筑电工、建筑架子工、建筑起重机械司机等)的姓名、工种及联系方式、是特种作业管理的基础台账;
+Management,施工管理及作业人员配备与分工,SpecialWorkers,特种作业人员,特种作业人员名单、特种作业操作资格证书、证书编号、证书有效期、特种作业工种、岗位职责、证书延期复核、违章作业记录。,SpecialOperationsQualificationCertificate,特种作业操作资格证书,需明确证书类型(如“建筑施工特种作业操作资格证书”)、编号及有效期、是上岗的必备资质;
+Management,施工管理及作业人员配备与分工,SpecialWorkers,特种作业人员,特种作业人员名单、特种作业操作资格证书、证书编号、证书有效期、特种作业工种、岗位职责、证书延期复核、违章作业记录。,SpecialOperationsJobResponsibilities,特种作业岗位职责,需明确作业人员从事的具体工种(如“塔式起重机司机”“高处作业吊篮安装拆卸工”)、细化特种作业人员的职责是工种管理的关键;
+Management,施工管理及作业人员配备与分工,OtherWorkers,其它作业人员,专业分包单位管理人员数量、不同工种作业人员数量、作业人员台账、工种分类统计。,NumberOfManagementPersonnelInProfessionalSubcontractingUnits,专业分包单位管理人员数量,需明确分包单位(如劳务分包、专业分包)的管理人员(如分包项目经理、技术负责人)数量、是分包管理的基础;
+Management,施工管理及作业人员配备与分工,OtherWorkers,其它作业人员,专业分包单位管理人员数量、不同工种作业人员数量、作业人员台账、工种分类统计。,NumberOfWorkersInDifferentJobCategories,不同工种作业人员数量,需以表格形式明确各工种(如木工、钢筋工、混凝土工、砌筑工等)的作业人员数量、是劳动力调配的依据;
+Management,施工管理及作业人员配备与分工,OtherWorkers,其它作业人员,专业分包单位管理人员数量、不同工种作业人员数量、作业人员台账、工种分类统计。,WorkersLlog,作业人员台账,需记录作业人员的姓名、工种、身份证号、联系方式等信息、是人员管理的重要档案;
+acceptance,验收要求,Standards,验收标准,国家验收规范(如《公路工程质量检验评定标准》JTG F80/1-2017、《桥梁工程施工质量验收标准》GB 50205-2020)、行业标准(如《公路桥涵施工技术规范》JTG_T 3650-2020)、企业管理办法(如《四川路桥施工验收管理办法》《路桥集团专项施工方案验收条件》)、操作规程(如《桥梁施工安全操作规程》),NationalStandardsSpecificationsAndOperatingProcedures,国家标准、规范、操作规程,是验收的基础依据、需明确具体规范名称(如JTG F80/1-2017)、避免使用“国家规范”等泛化表述;
+acceptance,验收要求,Standards,验收标准,国家验收规范(如《公路工程质量检验评定标准》JTG F80/1-2017、《桥梁工程施工质量验收标准》GB 50205-2020)、行业标准(如《公路桥涵施工技术规范》JTG_T 3650-2021)、企业管理办法(如《四川路桥施工验收管理办法》《路桥集团专项施工方案验收条件》)、操作规程(如《桥梁施工安全操作规程》),IndustryStandardOperatingProcedures,行业标准、规范、操作规程,需指向具体行业的内部文件(如行业标准(如《公路桥涵施工技术规范》JTG_T 3650-2020)、体现行业管理要求;
+acceptance,验收要求,Standards,验收标准,国家验收规范(如《公路工程质量检验评定标准》JTG F80/1-2017、《桥梁工程施工质量验收标准》GB 50205-2020)、行业标准(如《公路桥涵施工技术规范》JTG_T 3650-2022)、企业管理办法(如《四川路桥施工验收管理办法》《路桥集团专项施工方案验收条件》)、操作规程(如《桥梁施工安全操作规程》),SichuanRoadAndBridgeManagementRegulations,四川路桥的管理办法,需关联企业管理办法(如《四川路桥施工验收管理办法》)、体现企业特色和企业管理要求;
+acceptance,验收要求,Standards,验收标准,国家验收规范(如《公路工程质量检验评定标准》JTG F80/1-2017、《桥梁工程施工质量验收标准》GB 50205-2020)、行业标准(如《公路桥涵施工技术规范》JTG_T 3650-2023)、企业管理办法(如《四川路桥施工验收管理办法》《路桥集团专项施工方案验收条件》)、操作规程(如《桥梁施工安全操作规程》),ManagementRegulationsOfLuqiaoGroup,路桥集团的管理办法,需关联集团管理办法(如《路桥集团专项施工方案验收条件》)、体现集团特色和集团管理要求;
+acceptance,验收要求,Standards,验收标准,国家验收规范(如《公路工程质量检验评定标准》JTG F80/1-2017、《桥梁工程施工质量验收标准》GB 50205-2020)、行业标准(如《公路桥涵施工技术规范》JTG_T 3650-2024)、企业管理办法(如《四川路桥施工验收管理办法》《路桥集团专项施工方案验收条件》)、操作规程(如《桥梁施工安全操作规程》),ManagementRegulationsOfBridgeCompany,桥梁公司的管理办法,需关联桥梁施工管理办法(如《桥梁施工安全操作规程》)、体现桥梁施工重点 focus:和桥梁施工标准管理要求;
+acceptance,验收要求,Procedure,验收程序,进场验收(材料/设备进场检验)、过程验收(工序/隐蔽工程验收)、阶段验收(基础/主体/装饰阶段验收)、完工验收(工程竣工预验收),OnsiteAcceptance,进场验收,需明确验收对象(如“钢筋进场验收”“塔式起重机进场验收”)、是质量控制的第一道防线;
+acceptance,验收要求,Procedure,验收程序,进场验收(材料/设备进场检验)、过程验收(工序/隐蔽工程验收)、阶段验收(基础/主体/装饰阶段验收)、完工验收(工程竣工预验收),ProcessAcceptance,过程验收,需关联施工工序(如“混凝土浇筑过程验收”“钢筋绑扎过程验收”)、强调动态管控;
+acceptance,验收要求,Procedure,验收程序,进场验收(材料/设备进场检验)、过程验收(工序/隐蔽工程验收)、阶段验收(基础/主体/装饰阶段验收)、完工验收(工程竣工预验收),StageAcceptance,阶段验收,需对应工程阶段(如“基础工程阶段验收”“主体结构阶段验收”)、是阶段性成果确认的关键;
+acceptance,验收要求,Procedure,验收程序,进场验收(材料/设备进场检验)、过程验收(工序/隐蔽工程验收)、阶段验收(基础/主体/装饰阶段验收)、完工验收(工程竣工预验收),CompletionAcceptance,完工验收,需明确验收内容(如“工程竣工预验收”“专项施工方案完工验收”)、是竣工验收的前提。
+acceptance,验收要求,Content,验收内容,安全生产条件验收(安全防护设施验收、临时用电验收)、资源配置验收(人员配置验收、设备配置验收)、施工工艺验收(模板安装工艺验收、混凝土浇筑工艺验收)、机械设备验收(塔式起重机验收、混凝土泵车验收)、临时支撑结构验收(脚手架验收、满堂支架验收)、人员操作平台验收(高空作业平台验收、操作脚手架验收)、安全防护设施验收(安全网验收、防护栏杆验收),SafetyProductionConditionAcceptance,安全生产条件验收,验收表格中要明确项目的具体验收标准、验收标准应尽量量化到具体参数或标准、需细化具体内容(如“安全防护设施验收”包括“安全网张挂验收”“防护栏杆安装验收”)、避免“安全生产验收”等泛化表述;
+acceptance,验收要求,Content,验收内容,安全生产条件验收(安全防护设施验收、临时用电验收)、资源配置验收(人员配置验收、设备配置验收)、施工工艺验收(模板安装工艺验收、混凝土浇筑工艺验收)、机械设备验收(塔式起重机验收、混凝土泵车验收)、临时支撑结构验收(脚手架验收、满堂支架验收)、人员操作平台验收(高空作业平台验收、操作脚手架验收)、安全防护设施验收(安全网验收、防护栏杆验收),ResourceAllocationAcceptance,资源配置验收,验收表格中要明确项目的具体验收标准、验收标准应尽量量化到具体参数或标准、需关联资源类型(如“人员配置验收”包括“特种作业人员资质验收”“管理人员到位验收”)、体现资源的针对性;
+acceptance,验收要求,Content,验收内容,安全生产条件验收(安全防护设施验收、临时用电验收)、资源配置验收(人员配置验收、设备配置验收)、施工工艺验收(模板安装工艺验收、混凝土浇筑工艺验收)、机械设备验收(塔式起重机验收、混凝土泵车验收)、临时支撑结构验收(脚手架验收、满堂支架验收)、人员操作平台验收(高空作业平台验收、操作脚手架验收)、安全防护设施验收(安全网验收、防护栏杆验收),ConstructionProcessAcceptance,施工工艺验收,验收表格中要明确项目的具体验收标准、验收标准应尽量量化到具体参数或标准、需明确工艺环节(如“模板安装工艺验收”包括“模板垂直度验收”“模板拼接缝验收”)、强调工艺的标准化;
+acceptance,验收要求,Content,验收内容,安全生产条件验收(安全防护设施验收、临时用电验收)、资源配置验收(人员配置验收、设备配置验收)、施工工艺验收(模板安装工艺验收、混凝土浇筑工艺验收)、机械设备验收(塔式起重机验收、混凝土泵车验收)、临时支撑结构验收(脚手架验收、满堂支架验收)、人员操作平台验收(高空作业平台验收、操作脚手架验收)、安全防护设施验收(安全网验收、防护栏杆验收),AcceptanceOfMechanicalEquipment,机械设备验收,验收表格中要明确项目的具体验收标准、验收标准应尽量量化到具体参数或标准、需指向具体设备(如“塔式起重机验收”包括“设备型号验收”“安全装置验收”)、确保设备符合施工要求。
+acceptance,验收要求,Content,验收内容,安全生产条件验收(安全防护设施验收、临时用电验收)、资源配置验收(人员配置验收、设备配置验收)、施工工艺验收(模板安装工艺验收、混凝土浇筑工艺验收)、机械设备验收(塔式起重机验收、混凝土泵车验收)、临时支撑结构验收(脚手架验收、满堂支架验收)、人员操作平台验收(高空作业平台验收、操作脚手架验收)、安全防护设施验收(安全网验收、防护栏杆验收),TemporarySupportStructure,临时支撑结构验收,验收表格中要明确项目的具体验收标准、验收标准应尽量量化到具体参数或标准、专项施工方案及审批记录、技术交底记录、构配件质量证明文件(合格证/检测报告)、地基承载力报告、搭设过程检查记录、荷载试验报告(高支模/大跨度)、验收记录表(含实测数据/影像资料)、整改复查记录。
+acceptance,验收要求,Content,验收内容,安全生产条件验收(安全防护设施验收、临时用电验收)、资源配置验收(人员配置验收、设备配置验收)、施工工艺验收(模板安装工艺验收、混凝土浇筑工艺验收)、机械设备验收(塔式起重机验收、混凝土泵车验收)、临时支撑结构验收(脚手架验收、满堂支架验收)、人员操作平台验收(高空作业平台验收、操作脚手架验收)、安全防护设施验收(安全网验收、防护栏杆验收),PersonnelOperationPlatform,人员操作平台验收,验收表格中要明确项目的具体验收标准、验收标准应尽量量化到具体参数或标准、架体材质(如钢管无裂纹、弯曲、型钢无开焊);架体构造(立杆间距、剪刀撑设置、连墙件固定);稳定性(移动式平台刹车装置、落地式平台基础坚实度);荷载限制(平台荷载不超过设计值、悬挂限载标志);防护栏杆(高度≥1.2m、竖向栏杆间距≤1.5m、底部设挡脚板);平台铺板(满铺、固定、无空隙);登高扶梯(防滑、固定、与平台连接牢固);安全网(平台周边设置密目网或安全平网)。
+acceptance,验收要求,Content,验收内容,安全生产条件验收(安全防护设施验收、临时用电验收)、资源配置验收(人员配置验收、设备配置验收)、施工工艺验收(模板安装工艺验收、混凝土浇筑工艺验收)、机械设备验收(塔式起重机验收、混凝土泵车验收)、临时支撑结构验收(脚手架验收、满堂支架验收)、人员操作平台验收(高空作业平台验收、操作脚手架验收)、安全防护设施验收(安全网验收、防护栏杆验收),SafetyProtectionFacilities,安全防护措施验收,验收表格中要明确项目的具体验收标准、验收标准应尽量量化到具体参数或标准、需结合场景需求(如建筑施工中的基坑临边防护、电梯井防护门)、功能定位(如预防事故的防护栏杆、减少事故影响的安全网)、技术要求(如材质、构造、固定方式)。其核心逻辑是“隔离危险、承接冲击、提醒注意”
+acceptance,验收要求,Timing,验收时间,专项施工方案验收时间(如《专项施工方案验收条件一览表》预估时间)、验收时间调整(根据实际进度调整验收时间)、验收条件触发时间(具备验收条件后15日内组织验收),AcceptanceTimeOfSpecialConstructionPlan,专项施工方案验收时间,需关联具体表格(如“《专项施工方案验收条件一览表》预估时间”)、体现时间的可追溯性;
+acceptance,验收要求,Timing,验收时间,专项施工方案验收时间(如《专项施工方案验收条件一览表》预估时间)、验收时间调整(根据实际进度调整验收时间)、验收条件触发时间(具备验收条件后16日内组织验收),AcceptanceTimeAdjustment,验收时间调整,需明确调整依据(如“根据施工进度调整验收时间”)、避免“时间调整”等泛化表述;
+acceptance,验收要求,Timing,验收时间,专项施工方案验收时间(如《专项施工方案验收条件一览表》预估时间)、验收时间调整(根据实际进度调整验收时间)、验收条件触发时间(具备验收条件后17日内组织验收),AcceptanceConditionTriggerTime,验收条件触发时间,需明确时间节点(如“具备验收条件后15日内组织验收”)、强调时效性。
+acceptance,验收要求,Personnel,验收人员,建设单位验收人员(如建设单位项目负责人、建设单位技术负责人)、设计单位验收人员(如设计单位项目负责人、设计单位专业工程师)、施工单位验收人员(如施工单位项目经理、施工单位技术负责人)、监理单位验收人员(如总监理工程师、专业监理工程师)、监测单位验收人员(如监测项目负责人、监测技术员),AcceptancePersonnelOfTheConstructionUnit,建设单位验收人员,需明确具体角色(如“建设单位项目负责人”)、避免“建设单位人员”等泛化表述;由施工作业班组在施工过程中自行对照方案自检、施工完成后由方案编制负责人、项目经理、项目副经理、项目技术负责人、安全环保处、工程处、机料处、合同处、专业分包单位(协作队伍)项目负责人和项目技术负责人等部门人员参加方案验收。
+acceptance,验收要求,Personnel,验收人员,建设单位验收人员(如建设单位项目负责人、建设单位技术负责人)、设计单位验收人员(如设计单位项目负责人、设计单位专业工程师)、施工单位验收人员(如施工单位项目经理、施工单位技术负责人)、监理单位验收人员(如总监理工程师、专业监理工程师)、监测单位验收人员(如监测项目负责人、监测技术员),DesignUnitAcceptancePersonnel,设计单位验收人员,需明确验收人员姓名、关联专业(如“设计单位专业工程师”)、体现设计的专业性;由施工作业班组在施工过程中自行对照方案自检、施工完成后由方案编制负责人、项目经理、项目副经理、项目技术负责人、安全环保处、工程处、机料处、合同处、专业分包单位(协作队伍)项目负责人和项目技术负责人等部门人员参加方案验收。
+acceptance,验收要求,Personnel,验收人员,建设单位验收人员(如建设单位项目负责人、建设单位技术负责人)、设计单位验收人员(如设计单位项目负责人、设计单位专业工程师)、施工单位验收人员(如施工单位项目经理、施工单位技术负责人)、监理单位验收人员(如总监理工程师、专业监理工程师)、监测单位验收人员(如监测项目负责人、监测技术员),ConstructionUnitAcceptancePersonnel,施工单位验收人员,需明确验收人员姓名、指向管理岗位(如“施工单位项目经理”“施工单位技术负责人”)、强调施工单位的主体责任;由施工作业班组在施工过程中自行对照方案自检、施工完成后由方案编制负责人、项目经理、项目副经理、项目技术负责人、安全环保处、工程处、机料处、合同处、专业分包单位(协作队伍)项目负责人和项目技术负责人等部门人员参加方案验收。
+acceptance,验收要求,Personnel,验收人员,建设单位验收人员(如建设单位项目负责人、建设单位技术负责人)、设计单位验收人员(如设计单位项目负责人、设计单位专业工程师)、施工单位验收人员(如施工单位项目经理、施工单位技术负责人)、监理单位验收人员(如总监理工程师、专业监理工程师)、监测单位验收人员(如监测项目负责人、监测技术员),InspectionPersonnelOfTheSupervisionUnit,监理单位验收人员,需明确验收人员姓名、监理角色(如“总监理工程师”“专业监理工程师”)、体现监理的监督职责;由施工作业班组在施工过程中自行对照方案自检、施工完成后由方案编制负责人、项目经理、项目副经理、项目技术负责人、安全环保处、工程处、机料处、合同处、专业分包单位(协作队伍)项目负责人和项目技术负责人等部门人员参加方案验收。
+acceptance,验收要求,Personnel,验收人员,建设单位验收人员(如建设单位项目负责人、建设单位技术负责人)、设计单位验收人员(如设计单位项目负责人、设计单位专业工程师)、施工单位验收人员(如施工单位项目经理、施工单位技术负责人)、监理单位验收人员(如总监理工程师、专业监理工程师)、监测单位验收人员(如监测项目负责人、监测技术员),MonitoringUnitAcceptancePersonnel,监测单位验收人员,需明确验收人员姓名、关联监测内容(如“监测项目负责人”“监测技术员”)、确保监测数据的准确性;由施工作业班组在施工过程中自行对照方案自检、施工完成后由方案编制负责人、项目经理、项目副经理、项目技术负责人、安全环保处、工程处、机料处、合同处、专业分包单位(协作队伍)项目负责人和项目技术负责人等部门人员参加方案验收。
+other,其它资料,Calculations,计算书,编制依据、工程简况、方案简述、设计参数、主要工况计算、局部计算、结论及建议、应力分析结果、变形分析结果、反力分析结果、屈曲分析结果,ContentRequirements,内容要求,专项施工方案中包含承重结构、重要临时设施、设备选型、吊绳吊具受力计算;地基承载力等工作内容编制的专项计算书、内容应包含编制依据、工程简况、方案简述、设计参数、主要工况计算、局部计算、结论及建议。
+other,其它资料,Calculations,计算书,编制依据、工程简况、方案简述、设计参数、主要工况计算、局部计算、结论及建议、应力分析结果、变形分析结果、反力分析结果、屈曲分析结果,CalculationOfMainWorkingConditions,主要工况计算,需针对关键施工工况(如“盖梁浇筑工况”“桩基础施工工况”)、包含“本工况描述”“应力/变形/反力/屈曲分析结果”、是计算书的核心内容;
+other,其它资料,Calculations,计算书,编制依据、工程简况、方案简述、设计参数、主要工况计算、局部计算、结论及建议、应力分析结果、变形分析结果、反力分析结果、屈曲分析结果,LocalCalculation,局部计算,需对于受力集中、结构复杂的局部重要节点进行细部分析(如“钢管桩与横梁连接节点”“模板支撑体系节点”)、确保结构安全;
+other,其它资料,Drawings,相关施工图纸,工程专业名词类、设备设施类、量化数值类、数值单位类、结构组件名称类、施工区域名称类,OverallLayoutPlan,总体平面布置图,需展示项目整体布局(如“施工便道”“材料堆放区”“临时设施”)、是施工部署的可视化基础;
+other,其它资料,Drawings,相关施工图纸,工程专业名词类、设备设施类、量化数值类、数值单位类、结构组件名称类、施工区域名称类,ConstructionSiteLayoutPlan,施工工点平面布置图,需围绕“空间规划”“功能实现”“安全文明”三大核心、覆盖从边界界定到具体设施的全流程要素。
+other,其它资料,Drawings,相关施工图纸,工程专业名词类、设备设施类、量化数值类、数值单位类、结构组件名称类、施工区域名称类,LongitudinalElevationLayoutOfSupportingStructure,支撑结构纵立面布置图,需明确支撑体系(如“钢管桩支架”“满堂脚手架”)的纵向布置(如“桩长”“间距”“标高”)、是结构安全的关键依据;
+other,其它资料,Drawings,相关施工图纸,工程专业名词类、设备设施类、量化数值类、数值单位类、结构组件名称类、施工区域名称类,CrossSectionalLayoutDiagram,支横断面布置图,需围绕“断面类型”“组成要素”“尺寸参数”“坡度设置”“附属设施”五大维度、覆盖道路、桥梁等工程的通用及专业要素。
+other,其它资料,Drawings,相关施工图纸,工程专业名词类、设备设施类、量化数值类、数值单位类、结构组件名称类、施工区域名称类,FloorPlan,平面布置图,需围绕“空间布局”“功能分区”“施工支持”三大核心、覆盖从区域划分到具体设施的全流程要素。
+other,其它资料,Drawings,相关施工图纸,工程专业名词类、设备设施类、量化数值类、数值单位类、结构组件名称类、施工区域名称类,DetailedStructuralDiagram,细部构造图,需细化关键节点(如“模板拼接节点”“支撑体系连接节点”)、标注尺寸、材料及工艺要求、指导现场施工;
+other,其它资料,Drawings,相关施工图纸,工程专业名词类、设备设施类、量化数值类、数值单位类、结构组件名称类、施工区域名称类,FormworkLayoutDrawing,模板布置图,需明确模板的平面位置(如“柱模板”“梁模板”)、尺寸及支撑方式、确保模板安装符合设计要求。
+other,其它资料,Drawings,相关施工图纸,工程专业名词类、设备设施类、量化数值类、数值单位类、结构组件名称类、施工区域名称类,TemplateConstructionDiagram,模板构造图,需覆盖模板体系组成、构造细节、支撑系统、节点处理及精度控制等全流程要素。
+other,其它资料,Tables,附图附表,工序名称类、施工危险因素词汇类、安全设备设施类、资质证照名称类、标准文书类、数值类、时间时期类、数值单位类,ConstructionScheduleNetworkDiagram,施工进度计划网络图,需用节点表示工序逻辑关系(如“桩基础施工→承台施工→盖梁施工”)、是进度控制的核心工具;
+other,其它资料,Tables,附图附表,工序名称类、施工危险因素词汇类、安全设备设施类、资质证照名称类、标准文书类、数值类、时间时期类、数值单位类,ConstructionScheduleGanttChart,施工进度计划横道图,围绕“时间维度”“任务要素”“进度关系”“调整控制”四大核心、覆盖从计划编制到动态监控的全流程。
+other,其它资料,Tables,附图附表,工序名称类、施工危险因素词汇类、安全设备设施类、资质证照名称类、标准文书类、数值类、时间时期类、数值单位类,HazardAnalysisAndResponseMeasuresTable,危险源分析和应对措施表,需识别施工中的危险源(如“高处坠落”“物体打击”)、制定针对性应对措施(如“设置防护栏杆”“佩戴安全带”)、是安全保障的关键文档;
+other,其它资料,Tables,附图附表,工序名称类、施工危险因素词汇类、安全设备设施类、资质证照名称类、标准文书类、数值类、时间时期类、数值单位类,ScannedCopyOfTheCertificateOfFulltimSafetyManagementPersonnel,专职安全管理人员证件扫描件,需包含“安全生产考核合格证书”“证书编号”“有效期”、确保管理人员资质符合要求;
+other,其它资料,Tables,附图附表,工序名称类、施工危险因素词汇类、安全设备设施类、资质证照名称类、标准文书类、数值类、时间时期类、数值单位类,ScannedCopyOfSpecialOperationsPersonnelsCertificate,特种作业人员证件扫描件,需围绕“信息真实性”“管理规范性”“使用便捷性”三大核心、覆盖证件内容、“证书编号”、“有效期”、法规标准四大维度
+other,其它资料,Tables,附图附表,工序名称类、施工危险因素词汇类、安全设备设施类、资质证照名称类、标准文书类、数值类、时间时期类、数值单位类,ScannedCopyOfProfessionalSubcontractorsQualifications,专业分包单位资质扫描件,需包含“营业执照”“资质证书”“安全生产许可证”、确保分包单位具备施工能力。
+other,其它资料,Team,编制及审核人员情况,专项施工方案验收条件一览表、编制人员信息、复核人员信息、审核人员信息、审批人员信息、姓名、职务、职称,ListOfAcceptanceConditionsForSpecialConstructionSchemes,专项施工方案验收条件一览表,需明确验收的前提条件(如“计算书完成”“设计图审核通过”)、是验收的流程依据;
+other,其它资料,Team,编制及审核人员情况,专项施工方案验收条件一览表、编制人员信息、复核人员信息、审核人员信息、审批人员信息、姓名、职务、职称,PreparePersonnelInformation,编制人员信息,需包含“姓名”“职务”“职称”(如“张三 技术员 助理工程师”)、确保编制人员具备专业能力;
+other,其它资料,Team,编制及审核人员情况,专项施工方案验收条件一览表、编制人员信息、复核人员信息、审核人员信息、审批人员信息、姓名、职务、职称,ReviewerInformation,审核人员信息,需包含“姓名”“职务”“职称”(如“李四 项目技术负责人 工程师”)、确保审核流程的严谨性;
+other,其它资料,Team,编制及审核人员情况,专项施工方案验收条件一览表、编制人员信息、复核人员信息、审核人员信息、审批人员信息、姓名、职务、职称,ApprovalPersonnelInformation,审批人员信息,需包含“姓名”“职务”“职称”(如“王五 项目经理 高级工程师”)、确保方案符合项目整体要求

+ 1 - 0
core/construction_review/component/doc_worker/config/config.yaml

@@ -32,6 +32,7 @@ categories:
     施工管理及作业人员配备与分工: management
     验收要求: acceptance
     其他资料: other
+    非标准项: non_standard
 
 # 输出配置
 output:

+ 64 - 3
core/construction_review/component/doc_worker/config/prompt.yaml

@@ -20,7 +20,8 @@ toc_classification:
     分类标准(一级目录名称及其包含的二级目录集合):
 
     {{ classification_standards }}
-        - 十一、非标准项(用于接收不符合前十项类别的目录项)
+
+    注意:如果待分类的目录项不符合以上任何标准类别,可以归类为"非标准项"。
 
     输出要求(只输出 JSON):
     {
@@ -39,12 +40,72 @@ toc_classification:
     - 环境保证措施 -> environment
     - 施工管理及作业人员配备与分工 -> management
     - 验收要求 -> acceptance
-    - 其他资料 -> other
-    - 非标准项 -> no_standard
+    - 其它资料 -> other
+    - 非标准项 -> non_standard
+
+
+
+
+
 
 
 
+chunk_secondary_classification:
+  system: |
+    你是一名工程与施工领域的专业文档分类专家,负责对施工方案文档的内容块进行二级分类。
+    - 根据内容块的标题、层级路径和实际内容,判断该内容块应属于哪个二级类别;
+    - 必须严格从提供的二级分类标准中选择一个最匹配的类别编号;
+    - 二级类别是对一级类别的细化,要准确把握内容的核心主题;
+    - 如果内容不符合任何二级类别标准,选择编号 0(非标准项);
+    
+    - /no_think
+  user_template: |
+    任务:对内容块进行二级分类。
 
+    一级分类:{{ first_category }}
+    内容块标题:{{ chunk_title }}
+    层级路径:{{ hierarchy_path }}
+    内容预览:{{ content_preview }}
 
+    二级分类标准(从以下列表中选择对应的编号):
+    {{ secondary_standards }}
 
+    重要提示:
+    1. 仔细分析内容,选择最匹配的类别编号
+    2. 只输出一个数字编号,不要输出类别名称
+    3. 如果不符合任何类别,输出 0
 
+    输出要求(只输出 JSON):
+    {
+      "category_index": 数字编号
+    }
+
+chunk_tertiary_classification:
+  system: |
+    你是一名工程与施工领域的专业文档分类专家,负责对施工方案文档的内容块进行三级分类。
+    - 根据内容块的二级分类、标题和实际内容,判断该内容块应属于哪个三级类别;
+    - 必须严格从提供的三级分类标准中选择一个最匹配的类别编号;
+    - 三级类别是对二级类别的进一步细化,要精确识别内容的具体类型;
+    - 如果内容不符合任何三级类别标准,选择编号 0(非标准项);
+    
+    - /no_think
+  user_template: |
+    任务:对内容块进行三级分类。
+
+    一级分类:{{ first_category }}
+    二级分类:{{ secondary_category }}
+    内容块标题:{{ chunk_title }}
+    内容预览:{{ content_preview }}
+
+    三级分类标准(从以下列表中选择对应的编号):
+    {{ tertiary_standards }}
+
+    重要提示:
+    1. 仔细分析内容,选择最匹配的类别编号
+    2. 只输出一个数字编号,不要输出类别名称
+    3. 如果不符合任何类别,输出 0
+
+    输出要求(只输出 JSON):
+    {
+      "category_index": 数字编号
+    }

+ 2 - 0
core/construction_review/component/doc_worker/pdf_worker/adapter.py

@@ -14,6 +14,7 @@ from typing import List, Optional
 from ..config.provider import default_config_provider
 from ..interfaces import DocumentPipeline, FileParseFacade, ResultWriter
 from ..classification.hierarchy_classifier import HierarchyClassifier
+from ..classification.chunk_classifier import ChunkClassifier
 from .fulltext_extractor import PdfFullTextExtractor
 from .json_writer import PdfJsonResultWriter
 from .text_splitter import PdfTextSplitter
@@ -51,6 +52,7 @@ def build_pdf_facade(config: Optional[PdfWorkerConfig] = None) -> FileParseFacad
         fulltext_extractor=PdfFullTextExtractor(),
         splitter=PdfTextSplitter(),
         writers=writers,
+        chunk_classifier=ChunkClassifier(),  # 添加chunk分类器
     )
 
     pipeline: DocumentPipeline = DefaultDocumentPipeline(components)

+ 131 - 0
core/construction_review/component/doc_worker/pdf_worker/batch_cli.py

@@ -0,0 +1,131 @@
+"""
+PDF 批量处理命令行入口
+
+支持处理单个文件或目录中的所有文件
+
+用法示例:
+  # 处理单个文件
+  python -m doc_worker.pdf_worker.batch_cli input.pdf
+  
+  # 批量处理目录中的所有PDF文件
+  python -m doc_worker.pdf_worker.batch_cli data/
+  
+  # 批量处理并指定输出目录
+  python -m doc_worker.pdf_worker.batch_cli data/ -o output/
+"""
+
+from __future__ import annotations
+
+import argparse
+from pathlib import Path
+from typing import List
+
+from .adapter import build_pdf_facade
+
+
+def find_pdf_files(path: Path) -> List[Path]:
+    """查找目录中的所有PDF文件"""
+    if path.is_file():
+        return [path] if path.suffix.lower() == '.pdf' else []
+    elif path.is_dir():
+        return sorted(path.glob('**/*.pdf'))
+    return []
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser(
+        description="PDF 文档批量分类切分工具"
+    )
+    parser.add_argument(
+        "path", 
+        help="PDF 文件路径或包含PDF文件的目录路径"
+    )
+    parser.add_argument(
+        "-l",
+        "--level",
+        type=int,
+        default=None,
+        help="要分类的目标层级(默认读取配置 text_splitting.target_level)",
+    )
+    parser.add_argument(
+        "--max-size",
+        type=int,
+        default=None,
+        help="最大分块字符数(默认读取配置 text_splitting.max_chunk_size)",
+    )
+    parser.add_argument(
+        "--min-size",
+        type=int,
+        default=None,
+        help="最小分块字符数(默认读取配置 text_splitting.min_chunk_size)",
+    )
+    parser.add_argument(
+        "-o",
+        "--output",
+        help="输出目录(可选,默认按配置 output.default_dir_name 放在源文件同目录)",
+    )
+
+    args = parser.parse_args()
+
+    input_path = Path(args.path)
+    if not input_path.exists():
+        raise SystemExit(f"错误:路径不存在 -> {input_path}")
+
+    # 查找所有PDF文件
+    pdf_files = find_pdf_files(input_path)
+    
+    if not pdf_files:
+        raise SystemExit(f"错误:未找到PDF文件 -> {input_path}")
+
+    print(f"\n找到 {len(pdf_files)} 个PDF文件")
+    print("=" * 80)
+
+    facade = build_pdf_facade()
+    
+    success_count = 0
+    failed_files = []
+
+    for idx, file_path in enumerate(pdf_files, 1):
+        print(f"\n[{idx}/{len(pdf_files)}] 处理: {file_path.name}")
+        print("-" * 80)
+        
+        try:
+            result = facade.process_file(
+                file_path=file_path,
+                target_level=args.level,
+                max_chunk_size=args.max_size,
+                min_chunk_size=args.min_size,
+                output_dir=args.output,
+            )
+
+            chunks = result.get("chunks", []) or []
+            toc_info = result.get("toc_info", {}) or {}
+            classification = result.get("classification", {}) or {}
+
+            print(f"✓ 完成")
+            print(f"  目录项数: {toc_info.get('toc_count', len(toc_info.get('toc_items', [])))}")
+            print(f"  文本块总数: {len(chunks)}")
+            print(f"  分类目标层级: {classification.get('target_level')}")
+            
+            success_count += 1
+            
+        except Exception as e:
+            print(f"✗ 失败: {e}")
+            failed_files.append((file_path.name, str(e)))
+
+    # 输出汇总信息
+    print("\n" + "=" * 80)
+    print("批量处理完成")
+    print("=" * 80)
+    print(f"总文件数: {len(pdf_files)}")
+    print(f"成功: {success_count}")
+    print(f"失败: {len(failed_files)}")
+    
+    if failed_files:
+        print("\n失败文件列表:")
+        for filename, error in failed_files:
+            print(f"  - {filename}: {error}")
+
+
+if __name__ == "__main__":
+    main()

+ 1 - 20
core/construction_review/component/doc_worker/pdf_worker/text_splitter.py

@@ -49,9 +49,6 @@ class PdfTextSplitter(TextSplitter, HierarchicalChunkMixin):
         # 使用完整全文
         full_text = "".join(p.get("text", "") for p in pages_content)
 
-        print(f"  正在定位{len(classification_items)}个已分类的标题...")
-        print(f"  目录所在页: {toc_pages}")
-
         # 步骤1: 在正文中定位已分类的标题(跳过目录页)
         located = self._title_matcher.find_title_positions(
             classification_items, full_text, pages_content, toc_pages
@@ -122,8 +119,7 @@ class PdfTextSplitter(TextSplitter, HierarchicalChunkMixin):
         # 步骤4: 生成最终的chunk_id和serial_number
         final_chunks = self._finalize_chunk_ids(all_chunks)
 
-        print(f"  初始切分: {len(all_chunks)} 个块")
-        print(f"  最终块数: {len(final_chunks)} 个块")
+        print(f"  完成切分: {len(final_chunks)} 个块")
 
         return final_chunks
 
@@ -193,12 +189,6 @@ class PdfTextSplitter(TextSplitter, HierarchicalChunkMixin):
                     toc_item["title"], content_block, fuzzy_threshold
                 )
                 if pos >= 0:
-                    # 调试:显示找到的标题及其周围内容
-                    context_start = max(0, pos - 20)
-                    context_end = min(len(content_block), pos + len(toc_item["title"]) + 50)
-                    context = content_block[context_start:context_end].replace("\n", " ")
-                    print(f"        找到子标题: {toc_item['title']} (level={item_level}), 位置={pos}, 上下文: ...{context}...")
-                    
                     all_sub_titles.append(
                         {
                             "title": toc_item["title"],
@@ -235,13 +225,10 @@ class PdfTextSplitter(TextSplitter, HierarchicalChunkMixin):
         
         # 找到最低层级(用于判断哪些是最底层的标题)
         max_level = max(sub["level"] for sub in all_sub_titles) if all_sub_titles else parent_level
-        
-        print(f"      父标题: {parent_title}, 找到 {len(all_sub_titles)} 个子标题, 直接子标题数: {len(direct_child_titles)}, 最低层级: {max_level}")
 
         # 如果没有直接子标题,但有更深层级的标题,使用最低层级标题切分(保持向后兼容)
         if not direct_child_titles and all_sub_titles:
             lowest_level_titles = [sub for sub in all_sub_titles if sub["level"] == max_level]
-            print(f"      没有直接子标题,使用最低层级标题切分: {len(lowest_level_titles)} 个")
             direct_child_titles = lowest_level_titles
 
         # 按直接子标题切分(如果存在)
@@ -259,17 +246,12 @@ class PdfTextSplitter(TextSplitter, HierarchicalChunkMixin):
                         break
 
                 chunk_content = content_block[start_pos:end_pos]
-                
-                # 调试信息
-                content_preview = chunk_content[:100].replace("\n", " ")
-                print(f"        切分块 {i+1}: {sub_title['title']} (level={sub_title['level']}), 位置: {start_pos}-{end_pos}, 长度: {len(chunk_content)}, 预览: {content_preview}...")
 
                 # 检查子标题是否有实际正文内容
                 title_len = len(sub_title["title"])
                 content_after_title = chunk_content[title_len:].strip()
 
                 if not content_after_title or len(content_after_title) < 10:
-                    print(f"        跳过(内容不足)")
                     continue
 
                 # 构建层级路径
@@ -279,7 +261,6 @@ class PdfTextSplitter(TextSplitter, HierarchicalChunkMixin):
 
                 # 只有当块超过 max_chunk_size 时才按句子切分
                 if len(chunk_content) > max_chunk_size:
-                    print(f"        块过大,按句子切分")
                     split_chunks = self._split_large_chunk(
                         chunk_content, max_chunk_size, sub_title["title"], hierarchy_path
                     )

+ 13 - 1
core/construction_review/component/doc_worker/pipeline.py

@@ -35,6 +35,7 @@ class PipelineComponents:
     fulltext_extractor: FullTextExtractor
     splitter: TextSplitter
     writers: List[ResultWriter]
+    chunk_classifier: Optional[object] = None  # ChunkClassifier,可选
 
 
 class DefaultDocumentPipeline(DocumentPipeline):
@@ -87,6 +88,17 @@ class DefaultDocumentPipeline(DocumentPipeline):
             min_chunk_size=min_chunk_size,
         )
 
+        # 5. 对chunks进行二级和三级分类(如果配置了chunk_classifier)
+        if self._c.chunk_classifier is not None:
+            try:
+                import asyncio
+                # 二级分类
+                chunks = asyncio.run(self._c.chunk_classifier.classify_chunks_secondary_async(chunks))
+                # 三级分类
+                chunks = asyncio.run(self._c.chunk_classifier.classify_chunks_tertiary_async(chunks))
+            except Exception as e:
+                print(f"  警告: Chunk分类失败: {e}")
+
         result: Dict[str, object] = {
             "source": source,
             "toc_info": toc_info,
@@ -100,7 +112,7 @@ class DefaultDocumentPipeline(DocumentPipeline):
             },
         }
 
-        # 5. 写出结果(可以有多个 writer)
+        # 6. 写出结果(可以有多个 writer)
         for writer in self._c.writers:
             writer.write(result)
 

+ 0 - 1
core/construction_review/component/doc_worker/utils/json_writer.py

@@ -76,6 +76,5 @@ class DefaultJsonResultWriter(ResultWriter):
             json.dump(output_data, f, ensure_ascii=False, indent=2)
 
         self.last_json_path = json_file
-        print(f"已保存完整结果 JSON: {json_file}")
 
 

+ 3 - 4
core/construction_review/component/doc_worker/utils/llm_client.py

@@ -4,7 +4,6 @@ LLM API客户端工具类
 """
 
 from __future__ import annotations
-from foundation.observability.logger.loggering import review_logger as logger
 import asyncio
 import json
 from typing import Any, Dict, List, Optional
@@ -321,15 +320,15 @@ class LLMClient:
                 loop = asyncio.get_event_loop()
                 # 如果事件循环已在运行,避免 run_until_complete 引发异常,直接回退同步
                 if loop.is_running():
-                    logger.warning("检测到运行中的事件循环,batch_call 请改用 await batch_call_async;本次回退同步调用")
+                    print("检测到运行中的事件循环,batch_call 请改用 await batch_call_async;本次回退同步调用")
                     return self._batch_call_sync_fallback(requests)
 
                 # 事件循环存在但未运行,可以直接使用 run_until_complete
-                logger.info("异步调用LLM API进行目录分类处理")
+                print("异步调用LLM API进行目录分类处理")
                 return loop.run_until_complete(self.batch_call_async(requests))
             except RuntimeError:
                 # 如果没有事件循环,回退到同步调用
-                logger.info("同步调用LLM API进行目录分类处理(无事件循环)")
+                print("同步调用LLM API进行目录分类处理(无事件循环)")
                 return self._batch_call_sync_fallback(requests)
         else:
             return self._batch_call_sync_fallback(requests)

+ 9 - 25
core/construction_review/component/doc_worker/utils/prompt_loader.py

@@ -29,7 +29,7 @@ class PromptLoader:
         self._prompt_file = Path(prompt_file)
         
         if csv_file is None:
-            csv_file = Path(__file__).parent.parent / "config" / "Construction_Plan_Content_Specification.csv"
+            csv_file = Path(__file__).parent.parent / "config" / "StandardCategoryTable.csv"
         self._csv_file = Path(csv_file)
         
         self._prompts: Dict[str, Any] = {}
@@ -46,46 +46,30 @@ class PromptLoader:
             self._prompts = yaml.safe_load(f) or {}
 
     def _load_classification_standards(self):
-        """从CSV文件加载分类标准"""
+        """从CSV文件加载分类标准(新格式:StandardCategoryTable.csv)"""
         if not self._csv_file.exists():
             raise FileNotFoundError(f"分类标准CSV文件不存在: {self._csv_file}")
         
         # 使用OrderedDict保持一级目录的顺序
         level1_to_level2: Dict[str, List[str]] = OrderedDict()
         
-        # 已知的标准一级目录列表(用于过滤无效数据)
-        valid_level1_keywords = [
-            "编制依据", "工程概况", "施工计划", "施工工艺技术", 
-            "安全保证措施", "质量保证措施", "环境保证措施",
-            "施工管理及作业人员配备与分工", "验收要求", "其他资料"
-        ]
-        
         with self._csv_file.open("r", encoding="utf-8-sig") as f:  # 使用 utf-8-sig 自动处理 BOM
-            reader = csv.DictReader(f, delimiter="\t")
+            reader = csv.DictReader(f)
             for row in reader:
-                # 处理可能的 BOM 问题,查找包含"一级目录"的键
-                level1_key = next((k for k in row.keys() if "一级目录" in k), "一级目录")
-                
-                level1 = (row.get(level1_key) or "").strip()
-                level2 = (row.get("二级目录") or "").strip()
+                # 新CSV格式:first_contents_code, first_contents, second_contents_code, second_contents
+                level1 = (row.get("first_contents") or "").strip()
+                level2 = (row.get("second_contents") or "").strip()
                 
                 # 跳过空的一级目录
                 if not level1:
                     continue
                 
-                # 跳过明显不是一级目录的行:
-                # 1. 一级目录名称不在已知标准列表中
-                # 2. 且没有二级目录
-                # 3. 或一级目录名称很短(可能是数据错误)
-                is_valid_level1 = any(keyword in level1 for keyword in valid_level1_keywords)
-                if not is_valid_level1 and (not level2 or len(level1) < 5):
-                    continue
-                
+                # 初始化一级目录
                 if level1 not in level1_to_level2:
                     level1_to_level2[level1] = []
                 
-                # 只添加非空的二级目录
-                if level2:
+                # 只添加非空且不重复的二级目录
+                if level2 and level2 not in level1_to_level2[level1]:
                     level1_to_level2[level1].append(level2)
         
         # 生成分类标准文本

+ 0 - 8
core/construction_review/component/doc_worker/utils/title_matcher.py

@@ -58,8 +58,6 @@ class TitleMatcher:
             
             # 步骤2: 如果找到的位置在目录页范围内,继续在目录页之后查找
             if pos >= 0 and toc_end_pos > 0 and toc_start_pos <= pos < toc_end_pos:
-                print(f"    [跳过目录] {title} -> 位置: {pos} (在目录页)")
-                
                 # 在目录页之后继续查找
                 if toc_end_pos < len(full_text):
                     search_start = int(toc_end_pos)
@@ -68,13 +66,10 @@ class TitleMatcher:
                     
                     if pos_in_remaining >= 0:
                         pos = search_start + pos_in_remaining
-                        print(f"    [找到正文] {title} -> 位置: {pos}")
                     else:
                         pos = -1
-                        print(f"    [未找到] {title} (目录页之后)")
                 else:
                     pos = -1
-                    print(f"    [未找到] {title} (目录页之后无内容)")
             
             # 步骤3: 确认位置并添加到结果
             if pos >= 0:
@@ -92,10 +87,8 @@ class TitleMatcher:
                             "found": True,
                         }
                     )
-                    print(f"    [确认] {title} -> 页码: {page_num}, 位置: {pos}")
                 else:
                     # 位置仍然在目录页内,标记为未找到
-                    print(f"    [未找到] {title} (只在目录页)")
                     located.append(
                         {
                             "title": title,
@@ -107,7 +100,6 @@ class TitleMatcher:
                         }
                     )
             else:
-                print(f"    [未找到] {title}")
                 located.append(
                     {
                         "title": title,

+ 1 - 2
core/construction_review/component/doc_worker/命令

@@ -6,6 +6,5 @@ python -m core.construction_review.component.doc_worker.pdf_worker.cli "E:\LLM\d
 python -m file_parse.pdf_worker.cli "Z:\施工方案及编制依据案例库(第一阶段)1205\施工方案文档列表\44_四川公路桥梁建设集团有限公司镇巴(川陕界)至广安高速公路通广段C合同段C4项目经理部.pdf" -l 1 --max-size 3000 --min-size 50 -o ./output
 
 
-    - 例如:"第七章 环境保证措施"的核心标题是"环境保证措施",应该匹配到"环境保证措施"类别;
-    - 如果目录项明显不属于任何标准类别,应分类为"其他资料"。
 
+python -m doc_worker.pdf_worker.cli "data\44_四川公路桥梁建设集团有限公司镇巴(川陕界)至广安高速公路通广段C合同段C4项目经理部.pdf" -l 1 --max-size 3000 --min-size 50 -o ./output

+ 48 - 0
core/construction_review/component/document_processor.py

@@ -26,6 +26,7 @@ try:
     from .doc_worker.docx_worker.full_text_extractor import DocxFullTextExtractor
     from .doc_worker.docx_worker.text_splitter import DocxTextSplitter
     from .doc_worker.classification.hierarchy_classifier import HierarchyClassifier as DocxHierarchyClassifier
+    from .doc_worker.classification.chunk_classifier import ChunkClassifier
     from .doc_worker.config.provider import default_config_provider
 except ImportError:
     from core.construction_review.component.doc_worker.interfaces import DocumentSource, TOCExtractor, FullTextExtractor, TextSplitter
@@ -37,6 +38,7 @@ except ImportError:
     from core.construction_review.component.doc_worker.docx_worker.full_text_extractor import DocxFullTextExtractor
     from core.construction_review.component.doc_worker.docx_worker.text_splitter import DocxTextSplitter
     from core.construction_review.component.doc_worker.classification.hierarchy_classifier import HierarchyClassifier as DocxHierarchyClassifier
+    from core.construction_review.component.doc_worker.classification.chunk_classifier import ChunkClassifier
     from core.construction_review.component.doc_worker.config.provider import default_config_provider
 
 class DocumentProcessor:
@@ -58,6 +60,8 @@ class DocumentProcessor:
         )
         self.docx_text_splitter = DocxTextSplitter()
         self.docx_classifier = DocxHierarchyClassifier()
+        # 二三级分类器(通用)
+        self.chunk_classifier = ChunkClassifier()
 
     async def process_document(self, file_content: bytes, file_type: str,
                             #  progress_callback: Optional[Callable[[int, str], None]] = None
@@ -175,6 +179,22 @@ class DocumentProcessor:
 
             logger.info(f"切分完成,共生成 {len(chunks)} 个文本块")
 
+            # 步骤5: 对chunks进行二级分类
+            logger.info("步骤5: 对内容块进行二级分类")
+            try:
+                chunks = await self.chunk_classifier.classify_chunks_secondary_async(chunks)
+                logger.info("二级分类完成")
+            except Exception as e:
+                logger.warning(f"二级分类失败: {str(e)},跳过二级分类")
+
+            # 步骤6: 对chunks进行三级分类
+            logger.info("步骤6: 对内容块进行三级分类")
+            try:
+                chunks = await self.chunk_classifier.classify_chunks_tertiary_async(chunks)
+                logger.info("三级分类完成")
+            except Exception as e:
+                logger.warning(f"三级分类失败: {str(e)},跳过三级分类")
+
             # 适配返回格式
             return {
                 'document_type': 'pdf',
@@ -189,6 +209,10 @@ class DocumentProcessor:
                             'section_label': chunk.get('section_label', ''),
                             'project_plan_type': chunk.get('project_plan_type', ''),
                             'chapter_classification': chunk.get('chapter_classification', ''),
+                            'secondary_category_cn': chunk.get('secondary_category_cn', ''),
+                            'secondary_category_code': chunk.get('secondary_category_code', ''),
+                            'tertiary_category_cn': chunk.get('tertiary_category_cn', ''),
+                            'tertiary_category_code': chunk.get('tertiary_category_code', ''),
                             'element_tag': chunk.get('element_tag', {})
                         }
                     }
@@ -301,6 +325,22 @@ class DocumentProcessor:
 
             logger.info(f"切分完成,共生成 {len(chunks)} 个文本块")
 
+            # 步骤5: 对chunks进行二级分类
+            logger.info("步骤5: 对内容块进行二级分类")
+            try:
+                chunks = await self.chunk_classifier.classify_chunks_secondary_async(chunks)
+                logger.info("二级分类完成")
+            except Exception as e:
+                logger.warning(f"二级分类失败: {str(e)},跳过二级分类")
+
+            # 步骤6: 对chunks进行三级分类
+            logger.info("步骤6: 对内容块进行三级分类")
+            try:
+                chunks = await self.chunk_classifier.classify_chunks_tertiary_async(chunks)
+                logger.info("三级分类完成")
+            except Exception as e:
+                logger.warning(f"三级分类失败: {str(e)},跳过三级分类")
+
             # 适配返回格式
             return {
                 'document_type': 'docx',
@@ -315,6 +355,10 @@ class DocumentProcessor:
                             'section_label': chunk.get('section_label', ''),
                             'project_plan_type': chunk.get('project_plan_type', ''),
                             'chapter_classification': chunk.get('chapter_classification', ''),
+                            'secondary_category_cn': chunk.get('secondary_category_cn', ''),
+                            'secondary_category_code': chunk.get('secondary_category_code', ''),
+                            'tertiary_category_cn': chunk.get('tertiary_category_cn', ''),
+                            'tertiary_category_code': chunk.get('tertiary_category_code', ''),
                             'element_tag': chunk.get('element_tag', {})
                         }
                     }
@@ -483,6 +527,10 @@ class DocumentProcessor:
                             'section_label': metadata.get('section_label', ''),
                             'project_plan_type': metadata.get('project_plan_type', ''),
                             'chapter_classification': metadata.get('chapter_classification', ''),
+                            'secondary_category_cn': metadata.get('secondary_category_cn', ''),
+                            'secondary_category_code': metadata.get('secondary_category_code', ''),
+                            'tertiary_category_cn': metadata.get('tertiary_category_cn', ''),
+                            'tertiary_category_code': metadata.get('tertiary_category_code', ''),
                             'element_tag': element_tag,
                             'chapter': metadata.get('section_label', f'第{chunk.get("page", 0)}页'),
                             'title': metadata.get('section_label', ''),