From 305ca552adfd4ee0a83e46cb70df087fd566324c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E5=B8=88?= Date: Tue, 9 Jun 2026 03:44:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=A4=E5=AE=9A=E6=B8=85=E6=B4=97v2?= =?UTF-8?q?=20-=20=E5=AE=8C=E6=95=B4=E6=8F=90=E5=8F=963=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E7=B0=BFx2=E7=B1=BB=E5=B7=A5=E4=BD=9C=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - clean_certified.py: 新增表2-I II III类技术方案提取(92项) - gen_workbook.py: 新增认定技术方案Sheet+公式-技术方案分类 - 认定数据/2026/: certified_tech_schemes_detail.csv(92行) - 认定总计: 表1危大43 + 表2技术92 = 135项 --- .../cleaned/危大方案看板数据工作簿.xlsx | Bin 59439 -> 68986 bytes data/认定数据/2026/certified_schemes.parquet | Bin 0 -> 8000 bytes .../2026/certified_schemes_detail.csv | 97 ++++--- .../2026/certified_schemes_detail.parquet | Bin 0 -> 15943 bytes .../2026/certified_tech_schemes_detail.csv | 96 +++++++ .../2026/certified_tech_schemes_detail.parquet | Bin 0 -> 16431 bytes data/认定数据/2026/certified_validation.json | 15 + src/clean_certified.py | 262 +++++++++++------- src/gen_workbook.py | 27 +- 9 files changed, 354 insertions(+), 143 deletions(-) create mode 100644 data/认定数据/2026/certified_schemes.parquet create mode 100644 data/认定数据/2026/certified_schemes_detail.parquet create mode 100644 data/认定数据/2026/certified_tech_schemes_detail.csv create mode 100644 data/认定数据/2026/certified_tech_schemes_detail.parquet create mode 100644 data/认定数据/2026/certified_validation.json diff --git a/data/2026-06-08/cleaned/危大方案看板数据工作簿.xlsx b/data/2026-06-08/cleaned/危大方案看板数据工作簿.xlsx index 8ca8cdb1a63b7b7ec012930e24dbf26969f1d04e..d6a5c9a6e906d3cbef21ddfd30e86daca1c81918 100644 GIT binary patch delta 13151 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 lNf&2ND`!s=Ek9Q)52ODw9vhLRSjl{{fFtgBkz; delta 3698 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 diff --git a/data/认定数据/2026/certified_schemes.parquet b/data/认定数据/2026/certified_schemes.parquet new file mode 100644 index 0000000000000000000000000000000000000000..4fcf8803cef661a2c5c43be48536370f851a5c84 GIT binary patch literal 8000 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 I!2g~92gmuK8vpG%8Jiw0yg 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 b63QK^h(Cw_PUi*xLBE0j`!NxMoP>il_T literal 0 HcmV?d00001 diff --git a/data/认定数据/2026/certified_tech_schemes_detail.csv b/data/认定数据/2026/certified_tech_schemes_detail.csv new file mode 100644 index 0000000..7e1c62f --- /dev/null +++ b/data/认定数据/2026/certified_tech_schemes_detail.csv @@ -0,0 +1,96 @@ +数据来源,工作表,所属区域,所属国别,项目名称,方案名称,编制单位,工程类别,分部工程类别,方案等级,是否超一定规模,工程特点/说明,计划开工日期,方案计划报审日期 +附件1:技术方案(含专项施工方案)编制计划表-建筑类项目.xlsx,表2-I II Ⅲ类技术方案,中东,沙特,沙特利雅得德拉伊耶门二期多功能场馆及办公楼房建项目,屋面施工方案,中建装饰绿创科技有限公司,房屋建设工程,,Ⅲ,,屋面系统包括铝合金屋面系统:支撑在钢结构楞条上,主要包括金属压型钢板、保温层和立缝压型板;光伏系统:包括太阳能板以及行走通道,架设在屋面系统上,太阳能板间设置有1m宽的通道。,2026-12-19,2026-12-01 +附件1:技术方案(含专项施工方案)编制计划表-建筑类项目.xlsx,表2-I II Ⅲ类技术方案,中东,沙特,沙特利雅得德拉伊耶门二期多功能场馆及办公楼房建项目,MEP施工方案,分包暂未确定,房屋建设工程,,Ⅲ,,"MEP主要设备主要为设备的采购、运输、安装及调试(包括所有的附件,但不包括相关附属设施,如管线等)。其主要设备包括给排水、污水、消防系统的水泵及水处理设备,暖通及通风设备,电力设备等1726套。",2026-06-13,2026-05-28 +附件1:技术方案(含专项施工方案)编制计划表-建筑类项目.xlsx,表2-I II Ⅲ类技术方案,中东,沙特,沙特利雅得德拉伊耶门二期多功能场馆及办公楼房建项目,外部工程施工方案,分包暂未确定,房屋建设工程,,Ⅲ,,本项目External Works主要包括:硬景观(Paving and Surfacing)及现浇景观道路钢筋砼-1项;软景观(Landscape);绿洲广场及WADI公园;,2026-12-15,2026-11-29 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,施工组织设计,中交四航局二公司,民航工程,,Ⅲ,,场内存在多个分包商既有便道及营地,2026-02-28,2026-02-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,交通疏导方案Method statement for Traffic diversion,中交四航局二公司,民航工程,,Ⅲ,,场内存在多个分包商既有便道及新建沥青路,2026-03-30,2026-03-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,基坑监测专项方案,中交四航局二公司,民航工程,,Ⅲ,,基础包(非本项目合同范围)已完成项目基坑的开挖,接受现有基坑工作面后,维持项目降水并执行基坑检测工作。,2026-02-28,2026-02-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for Precast Beams Casting and installation,中交四航局二公司,民航工程,,Ⅲ,,数量多,地下工程,2026-05-13,2026-04-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement of tower crane Installation,中交四航局二公司,民航工程,,Ⅲ,,地下工程筏板施工面积大,2026-03-15,2026-02-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for BHS Batching Center Construction,中交四航局二公司,民航工程,,Ⅲ,,"BHS 行李处理中心底板578m*386m,混凝土平均厚度为 2.7m;方形立柱2m*2m,高14m;外围墙厚2m,高15.6m。",2026-02-28,2026-02-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for GSE tunnel Construction,中交四航局二公司,民航工程,,Ⅲ,,"GSE&BHS 隧道总线路长,根据服务功能及提交场地节点划分6个段落,隧道两侧附属建筑多,隧道截面型式多样; +侧墙厚1.2m,高10m,底板厚2m,中间板0.5&0.7m",2026-03-20,2026-02-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,"Method Statement for Temporary Construction Power Plan - (02, 03 & 04)",中交四航局二公司,民航工程,,Ⅲ,,"1.从界面站到各标段11kV开关站的11kV电缆的供应、安装及(项目结束时的)拆除; +2.11kV开关站的运行与维护; +3.用电接口距离营地、生产区距离远,现场用电需求大,供电等级高。",2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,"Method Statement for Temporary Water Supply Plan - (02, 03 & 04)",中交四航局二公司,民航工程,,Ⅲ,,,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for structure monitoring,中交四航局二公司,民航工程,,Ⅲ,,结构监测项目多,需满足业主需求,2026-02-28,2026-02-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for Site preparation of Prefabrication Yard -package 04,中交四航局二公司,民航工程,,Ⅲ,,常规方案,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,"Method Statement for Site Office - (02,03&04)",中交四航局二公司,民航工程,,Ⅲ,,钢筋加工量大,场内加工,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement For Precast Yard Construction-Package 04,中交四航局二公司,民航工程,,Ⅲ,,常规方案,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for construction of temporary steel fabrication yard-package 04,中交四航局二公司,民航工程,,Ⅲ,,常规方案,2026-02-28,2026-02-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement For Anti-Termite 04,中交四航局二公司,民航工程,,Ⅲ,,对地基及结构外围是实施防白蚁处置,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,METHOD STATEMENT of Laser Scan for AMIA SUBSTRUCTURE (Package 04),中交四航局二公司,民航工程,,Ⅲ,,在结构施工前、过程验收及竣工验收均涉及,2026-02-28,2026-02-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,"Method Statement of mockup for mass concrete-(02,03&04)",中交四航局二公司,民航工程,,Ⅲ,,大体积温控措施验证,2026-02-28,2026-02-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for Waterproofing _ protect,中交四航局二公司,民航工程,,Ⅲ,,全包防水系统施工,2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for SPLT,中交四航局二公司,民航工程,,Ⅲ,,检测,2026-02-28,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,钢筋加工厂场站建设方案,中交一航局三公司,民航工程,,Ⅲ,,/,2026-03-10,2026-03-05 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,预制场场站建设方案,中交一航局三公司,民航工程,,Ⅲ,,/,2026-03-10,2026-03-05 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,测量总体实施方案,中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,回填施工方案,中交一航局三公司,民航工程,,Ⅲ,,/,2026-04-05,2026-03-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,基坑监测方案,中交一航局三公司,民航工程,,Ⅲ,,基础包(非本项目合同范围)已完成项目基坑的开挖,接受现有基坑工作面后,维持项目降水并执行基坑检测工作。,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,F9/H9筏板施工方案,中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,F9/H9墙、柱施工方案,中交一航局三公司,民航工程,,Ⅲ,,/,2026-03-25,2026-02-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,F9/H9-GSE隧道敞开段施工方案,中交一航局三公司,民航工程,,Ⅲ,,/,2026-04-15,2026-03-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,G8施工方案,中交一航局三公司,民航工程,,Ⅲ,,/,2026-04-01,2026-03-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,J8施工方案,中交一航局三公司,民航工程,,Ⅲ,,/,2026-04-10,2026-03-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,F8/H8施工方案,中交一航局三公司,民航工程,,Ⅲ,,/,2026-03-15,2026-02-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for backfilling,中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-28,2026-02-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for bituminous damp proofing treatment,中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for raft foundation construction,中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for structure construction-Package 02,中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for On-Site Temporary Office Installation - Package 2,中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,"Method Statement for the erection, installation, testing, commissioning, and certification of a temporary Concrete Batching Plant.",中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,"Method Statement for Static-Traverse Survey Works Package 2,3,4",中交一航局三公司,民航工程,,Ⅲ,,/,2026-03-05,2026-02-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for Anti-Termite 02,中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for Reiforcement installation 02,中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for Reinforcement Fabrication Yard and Precast Yard Construction,中交一航局三公司,民航工程,,Ⅲ,,/,2026-03-05,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement of Precast Elements Construction and Installation,中交一航局三公司,民航工程,,Ⅲ,,/,2026-03-25,2026-02-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,METHOD STATEMENT OF SOAKED STANDARD PLATE LOAD TEST-(Pkt 2 &3&4),中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement of Temporary Facilities Yard (Package 02),中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for Excavation Works,中交一航局三公司,民航工程,,Ⅲ,,/,2026-03-15,2026-02-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for Substructure Waterproofing Works,中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-28,2026-02-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for Pile Head Repair Works.(2.3.4),中交一航局三公司,民航工程,,Ⅲ,,/,2026-02-15,2026-02-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,"Method Statement for Erection, installation, testing, commissioning, and certification of a temporary Ready-Mix Concrete Batching Plant",中交一航局三公司,民航工程,,Ⅲ,,/,2026-03-15,2026-02-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,构件预制施工方案,中交二航局一公司,民航工程,,Ⅲ,,构件预制工期及质量要求高,构件运输及吊装安全风险较大。,2026-03-20,2026-02-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,大体积混凝土温控施工方案,中交二航局一公司,民航工程,,Ⅲ,,施工作业环境影响大,构件体量和厚度较大,对配合比、施工工艺以及监测系统方案要求较高。,2026-02-25,2026-02-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,F1/H1筏板施工方案,中交二航局一公司,民航工程,,Ⅲ,,,2026-03-10,2026-02-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,F1/H1墙、柱施工方案,中交二航局一公司,民航工程,,Ⅲ,,,2026-03-10,2026-02-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,F1/H1-GSE隧道敞开段施工方案,中交二航局一公司,民航工程,,Ⅲ,,,2026-04-15,2026-03-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,G2施工方案,中交二航局一公司,民航工程,,Ⅲ,,,2026-03-25,2026-03-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,J2施工方案,中交二航局一公司,民航工程,,Ⅲ,,,2026-03-30,2026-03-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,F2/H2施工方案,中交二航局一公司,民航工程,,Ⅲ,,,2026-03-10,2026-02-25 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement of Temporary Precast Yard & Reinforcement Fabrication Yard construction(03),中交二航局一公司,民航工程,,Ⅲ,,,2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for Reinforcement Fabrication Yard and Precast Yard Construction(03),中交二航局一公司,民航工程,,Ⅲ,,,2026-02-25,2026-02-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for raft foundation construction(03),中交二航局一公司,民航工程,,Ⅲ,,,2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for structure construction(03),中交二航局一公司,民航工程,,Ⅲ,,,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method statement for tower crane erection and dismantling(03),中交二航局一公司,民航工程,,Ⅲ,,,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for Anti-Termite 03,中交二航局一公司,民航工程,,Ⅲ,,,2026-02-25,2026-02-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for On-site Temporary Offices (Package 03),中交二航局一公司,民航工程,,Ⅲ,,,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,"Method Statement for Green Batch Plant Erection, Installation and Commissioning(03)",中交二航局一公司,民航工程,,Ⅲ,,,2026-03-05,2026-02-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,METHOD STATEMENT of Laser Scan for AMIA SUBSTRUCTURE Package 03,中交二航局一公司,民航工程,,Ⅲ,,,2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement of Substructure Waterproofing Fully Bonded System(03),中交二航局一公司,民航工程,,Ⅲ,,,2026-02-20,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement for Structure Monitoring Works.(03),中交二航局一公司,民航工程,,Ⅲ,,,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋迪拜马克图姆国际机场地下结构工程项目,Method Statement of Mass Concrete – Temperature Monitoring(2.3.4),中交二航局一公司,民航工程,,Ⅲ,,,2026-02-25,2026-02-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋阿布扎比哈里发港EGA泊位翻新项目,胸墙拆除专项施工方案,中交一航局三公司(2包),水运工程,,Ⅲ,,拆除、爆破工程,2026-04-10,2026-03-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋阿布扎比哈里发港EGA泊位翻新项目,胸墙新建施工方案,中交一航局三公司(2包),水运工程,,Ⅲ,,大体积混凝土结构,涉及临水作业;需配合业主单位分阶段施工。,2026-06-04,2026-05-28 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋阿布扎比哈里发港EGA泊位翻新项目,附属设施安装施工方案,中交一航局三公司(2包),水运工程,,Ⅲ,,涉及护舷、系船柱、系泊环、爬梯等,采用起重设备吊装,人工辅助安装。,2026-09-02,2026-08-26 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋阿布扎比哈里发港EGA泊位翻新项目,后轨道梁施工方案,中交一航局三公司(2包),水运工程,,Ⅲ,,钢筋混凝土结构,预埋件、轨道安装精度要求高。,2026-08-14,2026-08-07 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋阿布扎比哈里发港EGA泊位翻新项目,管网工程施工方案,中交一航局三公司(2包),水运工程,,Ⅲ,,涉及雨水、弱电、消防等管线,交叉作业。,2026-08-31,2026-08-24 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋阿布扎比哈里发港EGA泊位翻新项目,灌注桩专项施工方案,中交一航局三公司(2包),水运工程,,Ⅲ,,桩径1.0m,桩长24.1m,共计57根,采用旋挖钻机进行成孔。,2026-06-29,2026-06-09 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋阿布扎比哈里发港EGA泊位翻新项目,土方回填及路面恢复施工方案,中交一航局三公司(2包),水运工程,,Ⅲ,,涉及胸墙后方回填,路面结构层及联锁块恢复施工。,2026-09-21,2026-09-14 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋阿布扎比哈里发港EGA泊位翻新项目,疏浚扫浅施工方案,中交一航局三公司(2包),水运工程,,Ⅲ,,采用伸缩臂挖掘机配抓斗进行陆上疏浚扫浅施工,临边作业。,2026-10-03,2026-09-26 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,沙特,沙特吉赞基础下游工业城3区1巷独栋别墅一期项目,别墅主体结构安装专项施工方案,中交四航局二公司,房屋建设和市政基础设施工程,,Ⅲ,,装配式结构吊装,2026-04-01,2026-02-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿布扎比马斯努阿岛水工项目,码头施工方案,中交一航局三公司,港航工程,,Ⅲ,,方块吊装,2026-04-15,2026-03-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿布扎比马斯努阿岛水工项目,开挖及回填施工方案,中交一航局三公司,港航工程,,Ⅲ,,不涉及基坑开挖,仅为场地内土方平整施工,2026-11-15,2026-11-01 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿布扎比马斯努阿岛水工项目,护岸及丁坝施工方案,中交一航局三公司,港航工程,,Ⅲ,,,2026-12-10,2026-12-01 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿布扎比马斯努阿岛水工项目,海滩沙摊铺施工方案,中交一航局三公司,港航工程,,Ⅲ,,,2026-04-15,2026-04-10 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿布扎比马斯努阿岛水工项目,疏浚施工方案,中交一航局三公司,港航工程,,Ⅲ,,,2026-02-01,2026-01-20 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋阿布扎比西部三岛水工项目,MEP施工方案,中交一航局三公司,港航工程,,Ⅲ,,/,2026-03-20,2026-03-05 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋阿布扎比西部三岛水工项目,疏浚施工方案,中交一航局三公司,港航工程,,Ⅲ,,长臂挖机+方驳疏浚,2026-04-01,2026-03-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋沙迦卡尔巴摩托艇码头项目,码头施工方案,中交一航局三公司,码头施工,,Ⅲ,,涉及水上作业,形式多样,2026-07-25,2026-07-15 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋沙迦卡尔巴摩托艇码头项目,上部胸墙施工方案,中交一航局三公司,胸墙施工,,Ⅲ,,水文条件依赖性强,受潮汐水流影响,2026-09-15,2026-08-28 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋沙迦卡尔巴摩托艇码头项目,新建防波堤施工方案,中交一航局三公司,防波堤工程,,Ⅲ,,结构耐久与稳定性要求高,2026-03-15,2026-03-01 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋沙迦卡尔巴摩托艇码头项目,道路及配套MEP施工方案,中交一航局三公司,道路及MEP工程,,Ⅲ,,线性分布与界面交错、具有高度的系统性和集成性,2026-10-15,2026-09-05 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋沙迦卡尔巴摩托艇码头项目,附属设施施工方案,中交一航局三公司,码头附属设施工程,,Ⅲ,,精度控制及可靠性要求高,2026-09-15,2026-09-05 +附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx,表2-I II Ⅲ类技术方案,中东,阿联酋,阿联酋沙迦卡尔巴摩托艇码头项目,排水口改造施工方案,中交一航局三公司,排水工程,,Ⅲ,,施工围堰与导排水难度大,2026-10-15,2026-09-20 diff --git a/data/认定数据/2026/certified_tech_schemes_detail.parquet b/data/认定数据/2026/certified_tech_schemes_detail.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1916aafaef1b8a36516ca7f3162e7dbc7f16d3ce GIT binary patch literal 16431 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 literal 0 HcmV?d00001 diff --git a/data/认定数据/2026/certified_validation.json b/data/认定数据/2026/certified_validation.json new file mode 100644 index 0000000..4e0f5f2 --- /dev/null +++ b/data/认定数据/2026/certified_validation.json @@ -0,0 +1,15 @@ +{ + "表1_危大方案": 43, + "表1_超规": 16, + "表2_技术方案": 92, + "表2_等级分布": { + "Ⅲ": 92 + }, + "认定总计": 135, + "覆盖项目": 9, + "数据来源": [ + "附件1:技术方案(含专项施工方案)编制计划表-建筑类项目.xlsx", + "附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx", + "附件1:技术方案(含专项施工方案)编制计划表--轨道类项目.xlsx" + ] +} \ No newline at end of file diff --git a/src/clean_certified.py b/src/clean_certified.py index 043bdbc..e07d014 100644 --- a/src/clean_certified.py +++ b/src/clean_certified.py @@ -1,22 +1,22 @@ #!/usr/bin/env python3 """ -B1 扩展数据清洗:公司认定危大方案明细 -输入: 附件1:2025年技术方案编制计划表.xlsx → 表1-专项施工方案 (明细表) -输出: certified_schemes.parquet (中东区域·方案级别定数据) - certified_by_project.parquet (项目级汇总·对标用) +公司认定方案清洗 v2 — 完整提取 3工作簿 × 2类工作表 + 表1-专项施工方案 (危大) → certified_schemes_detail.csv + 表2-I II Ⅲ类技术方案 → certified_tech_schemes_detail.csv +输入: 附件1:技术方案(含专项施工方案)编制计划表 (3个xlsx) +输出: dashboard/data/认定数据/2026/ (年度固定目录) """ import pandas as pd import openpyxl from pathlib import Path import json import difflib +from datetime import datetime -# ============================================================ -# CONFIG -# ============================================================ +# ═══ CONFIG ═══ RAW_DIR = Path("/mnt/y/WorkingEmail/OA收文_Incoming") CERT_SRC_DIR = RAW_DIR / "2026-03-16_关于公布公司2026年度技术方案编制计划的通知" -OUT_DIR = Path("/mnt/y/Openclaw_Hub/03.资源/实施项目 wiki/dashboard/data/认定数据/2026") # 年度固定输出 +OUT_DIR = Path("/mnt/y/Openclaw_Hub/03.资源/实施项目 wiki/dashboard/data/认定数据/2026") OUT_DIR.mkdir(parents=True, exist_ok=True) CERT_FILES = [ @@ -24,43 +24,66 @@ CERT_FILES = [ CERT_SRC_DIR / "附件1:技术方案(含专项施工方案)编制计划表-非建筑轨道类.xlsx", CERT_SRC_DIR / "附件1:技术方案(含专项施工方案)编制计划表--轨道类项目.xlsx", ] -PLATFORM_PARQUET = Path("/mnt/y/Openclaw_Hub/03.资源/实施项目 wiki/dashboard/data/2026-05-24/cleaned/methods_cleaned.parquet") -# ============================================================ -# Step 1: 读取所有文件 表1-专项施工方案(合并+去重) -# ============================================================ -print("📖 读取 2026 认定表(3文件合并)...") -all_rows = [] -seen = set() # 去重: (项目, 方案) +def parse_date(val): + """Excel序列号 or datetime or string → YYYY-MM-DD""" + if val is None: + return '' + if isinstance(val, datetime): + return val.strftime('%Y-%m-%d') + if isinstance(val, (int, float)) and val > 40000: + # Excel serial date (days since 1899-12-30) + from datetime import timedelta + return (datetime(1899, 12, 30) + timedelta(days=int(val))).strftime('%Y-%m-%d') + s = str(val).strip() + if not s or s in ('/', '-', 'None', 'nan'): + return '' + # Try common formats + for fmt in ['%Y-%m-%d', '%Y-%m-%d %H:%M:%S', '%Y.%m.%d', '%Y/%m/%d']: + try: + return datetime.strptime(s[:10], '%Y-%m-%d' if '-' in s[:10] else fmt).strftime('%Y-%m-%d') + except: + continue + # Fallback: just take first 10 chars + return s[:10] if len(s) >= 10 else s + +# ══════════════════════════════════════════ +# 表1-专项施工方案(危大方案) +# ══════════════════════════════════════════ +print("=" * 60) +print("📖 表1-专项施工方案(3文件合并)...") +print("=" * 60) + +all_schemes = [] +seen_schemes = set() for fpath in CERT_FILES: if not fpath.exists(): - print(f" ⚠️ 跳过不存在的文件: {fpath.name}") + print(f" ⚠️ 跳过: {fpath.name}") continue - wb = openpyxl.load_workbook(fpath, data_only=True) if '表1-专项施工方案' not in wb.sheetnames: + print(f" ⚠️ {fpath.name}: 无 表1-专项施工方案") wb.close() continue - ws = wb['表1-专项施工方案'] file_count = 0 for row in ws.iter_rows(min_row=3, max_row=ws.max_row, values_only=True): region = str(row[1]).strip() if row[1] else '' if region != '中东': continue - proj = str(row[3]).strip() if row[3] else '' scheme = str(row[6]).strip() if row[6] else '' - # 跳过无效记录:方案名为空或占位符 - if not scheme or scheme in ('/', '-', 'nan', 'None', '/'): + if not scheme or scheme in ('/', '-', 'nan', 'None'): continue key = (proj, scheme) - if key in seen: - continue # 跨文件重复 - seen.add(key) - - all_rows.append({ + if key in seen_schemes: + continue + seen_schemes.add(key) + + all_schemes.append({ + '数据来源': fpath.name, + '工作表': '表1-专项施工方案', '所属区域': region, '所属国别': str(row[2]).strip() if row[2] else '', '项目名称': proj, @@ -68,65 +91,129 @@ for fpath in CERT_FILES: '编制单位': str(row[7]).strip() if row[7] else '', '工程类别': str(row[8]).strip() if row[8] else '', '分部工程类别': str(row[9]).strip() if row[9] else '', + '方案等级': '危大', # 表1 全部是危大方案 '是否超一定规模': str(row[11]).strip() if len(row) > 11 and row[11] else '', - '计划开工日期': str(row[13])[:10] if len(row) > 13 and row[13] else '', + '工程特点/说明': str(row[12]).strip() if len(row) > 12 and row[12] else '', + '计划开工日期': parse_date(row[13]) if len(row) > 13 else '', + '方案计划报审日期': parse_date(row[14]) if len(row) > 14 else '', }) file_count += 1 - wb.close() print(f" {fpath.name}: {file_count} 中东条目") -df_cert = pd.DataFrame(all_rows) -print(f" 中东区域方案: {len(df_cert)}") -print(f" 覆盖项目: {df_cert['项目名称'].nunique()}") +df_schemes = pd.DataFrame(all_schemes) +print(f"\n 表1 中东方案合计: {len(df_schemes)}") +print(f" 超规: {(df_schemes['是否超一定规模']=='是').sum()}, " + f"一般: {(df_schemes['是否超一定规模']!='是').sum()}") +print(f" 覆盖项目: {df_schemes['项目名称'].nunique()}") -# ============================================================ -# Step 2: 项目级汇总 -# ============================================================ -df_proj = df_cert.groupby('项目名称').agg( +# ══════════════════════════════════════════ +# 表2-I II Ⅲ类技术方案 +# ══════════════════════════════════════════ +print("\n" + "=" * 60) +print("📖 表2-I II Ⅲ类技术方案(3文件合并)...") +print("=" * 60) + +all_tech = [] +seen_tech = set() + +for fpath in CERT_FILES: + if not fpath.exists(): + continue + wb = openpyxl.load_workbook(fpath, data_only=True) + sheet_name = None + for sn in wb.sheetnames: + if '表2' in sn and '技术方案' in sn: + sheet_name = sn + break + if not sheet_name: + print(f" ⚠️ {fpath.name}: 无 表2 类工作表") + wb.close() + continue + + ws = wb[sheet_name] + file_count = 0 + for row in ws.iter_rows(min_row=3, max_row=ws.max_row, values_only=True): + region = str(row[1]).strip() if row[1] else '' + if region != '中东': + continue + proj = str(row[3]).strip() if row[3] else '' + scheme = str(row[6]).strip() if row[6] else '' + if not scheme or scheme in ('/', '-', 'nan', 'None'): + continue + key = (proj, scheme) + if key in seen_tech: + continue + seen_tech.add(key) + + all_tech.append({ + '数据来源': fpath.name, + '工作表': sheet_name, + '所属区域': region, + '所属国别': str(row[2]).strip() if row[2] else '', + '项目名称': proj, + '方案名称': scheme, + '编制单位': str(row[7]).strip() if row[7] else '', + '工程类别': str(row[8]).strip() if row[8] else '', + '分部工程类别': '', # 表2无此列 + '方案等级': str(row[10]).strip() if len(row) > 10 and row[10] else '', # Ⅰ/Ⅱ/Ⅲ + '是否超一定规模': '', # 表2无此列 + '工程特点/说明': str(row[9]).strip() if len(row) > 9 and row[9] else '', + '计划开工日期': parse_date(row[11]) if len(row) > 11 else '', + '方案计划报审日期': parse_date(row[13]) if len(row) > 13 else '', + }) + file_count += 1 + wb.close() + print(f" {fpath.name} [{sheet_name}]: {file_count} 中东条目") + +df_tech = pd.DataFrame(all_tech) +print(f"\n 表2 中东方案合计: {len(df_tech)}") +print(f" 等级分布: {df_tech['方案等级'].value_counts().to_dict()}") +print(f" 覆盖项目: {df_tech['项目名称'].nunique()}") + +# ══════════════════════════════════════════ +# 合计统计 +# ══════════════════════════════════════════ +print("\n" + "=" * 60) +print("📊 汇总统计") +print("=" * 60) +print(f" 表1 危大方案: {len(df_schemes)} 项(超规{(df_schemes['是否超一定规模']=='是').sum()})") +print(f" 表2 技术方案: {len(df_tech)} 项(Ⅰ/Ⅱ/Ⅲ类)") +print(f" 认定总计: {len(df_schemes) + len(df_tech)} 项") +all_projects = set(df_schemes['项目名称'].unique()) | set(df_tech['项目名称'].unique()) +print(f" 覆盖项目: {len(all_projects)}") + +# ══════════════════════════════════════════ +# 项目级汇总(表1 vs OA平台) +# ══════════════════════════════════════════ +df_proj = df_schemes.groupby('项目名称').agg( 认定_危大方案总数=('方案名称', 'count'), 认定_超规数=('是否超一定规模', lambda x: (x == '是').sum()), ).reset_index() - -# 国别信息 -country_map = df_cert.groupby('项目名称')['所属国别'].first().to_dict() +country_map = df_schemes.groupby('项目名称')['所属国别'].first().to_dict() df_proj['所属国别'] = df_proj['项目名称'].map(country_map) -print(f"\n📊 认定危大方案项目汇总:") -print(f" 项目数: {len(df_proj)}") -print(f" 危大方案总计: {df_proj['认定_危大方案总数'].sum()}") -print(f" 超规总计: {df_proj['认定_超规数'].sum()}") - -# ============================================================ -# Step 3: 与平台登记数据 JOIN -# ============================================================ +PLATFORM_PARQUET = Path("/mnt/y/Openclaw_Hub/03.资源/实施项目 wiki/dashboard/data/2026-05-24/cleaned/methods_cleaned.parquet") if PLATFORM_PARQUET.exists(): df_platform = pd.read_parquet(PLATFORM_PARQUET) df_platform_valid = df_platform[df_platform['是否有效登记'] == True] - platform_counts = df_platform_valid.groupby('项目名称').agg( 平台_方案总数=('方案名称', 'count'), 平台_超规数=('是否超一定规模', lambda x: (x == '是').sum()), ).reset_index() - - # 模糊匹配 + matched = [] for _, cert_row in df_proj.iterrows(): cert_name = cert_row['项目名称'] cert_clean = cert_name.replace('工程项目', '').replace('项目', '').strip() - - best_match = None - best_ratio = 0 - + best_match = None; best_ratio = 0 for plat_name in platform_counts['项目名称']: plat_clean = str(plat_name).replace('工程项目', '').replace('项目', '').strip() ratio = difflib.SequenceMatcher(None, cert_clean, plat_clean).ratio() if cert_clean in plat_clean or plat_clean in cert_clean: ratio = max(ratio, 0.95) if ratio > best_ratio: - best_ratio = ratio - best_match = plat_name - + best_ratio = ratio; best_match = plat_name row_dict = cert_row.to_dict() if best_match and best_ratio >= 0.75: prow = platform_counts[platform_counts['项目名称'] == best_match].iloc[0] @@ -141,56 +228,41 @@ if PLATFORM_PARQUET.exists(): row_dict['平台_超规数'] = 0 row_dict['差额'] = -row_dict['认定_危大方案总数'] row_dict['匹配状态'] = '⚠️ 未匹配' - matched.append(row_dict) - df_result = pd.DataFrame(matched) + print(f"\n 对标: {len(df_result)} 项目, 匹配 {(df_result['匹配状态']=='✅').sum()}") else: df_result = df_proj.copy() - print(" ⚠️ 未找到平台 Parquet") + print(" ⚠️ 未找到平台 Parquet,跳过对标") -# ============================================================ -# Step 4: 汇总 -# ============================================================ -print(f"\n📊 对标结果:") -print(f" 认定危大方案总计: {df_result['认定_危大方案总数'].sum()}") -if '平台_方案总数' in df_result.columns: - matched_n = (df_result['匹配状态'] == '✅').sum() - print(f" 与平台匹配: {matched_n}/{len(df_result)}") - print(f" 平台登记方案: {df_result['平台_方案总数'].sum()}") - print(f" 差额: {df_result['平台_方案总数'].sum() - df_result['认定_危大方案总数'].sum()}") - - # 漏报预警(平台 < 认定) - under = df_result[df_result['差额'] < 0] - if len(under) > 0: - print(f"\n ⚠️ 漏报项目(平台 < 认定): {len(under)}") - for _, r in under.iterrows(): - print(f" 差额{r['差额']:+d}: {r['项目名称'][:50]} (认定{r['认定_危大方案总数']} vs 平台{r['平台_方案总数']})") +# ══════════════════════════════════════════ +# 输出 +# ══════════════════════════════════════════ +# 表1明细 +df_schemes.to_csv(OUT_DIR / "certified_schemes_detail.csv", index=False, encoding='utf-8-sig') +df_schemes.to_parquet(OUT_DIR / "certified_schemes_detail.parquet", index=False) +print(f"\n✅ 表1方案明细: {OUT_DIR / 'certified_schemes_detail.csv'} ({len(df_schemes)}行)") -# ============================================================ -# Step 5: 输出 -# ============================================================ -# 明细表 -DETAIL_PATH = OUT_DIR / "certified_schemes_detail.parquet" -df_cert.to_parquet(DETAIL_PATH, index=False) -df_cert.to_csv(OUT_DIR / "certified_schemes_detail.csv", index=False, encoding='utf-8-sig') -print(f"\n✅ 方案明细: {DETAIL_PATH} ({len(df_cert)} 行)") +# 表2明细 (NEW) +df_tech.to_csv(OUT_DIR / "certified_tech_schemes_detail.csv", index=False, encoding='utf-8-sig') +df_tech.to_parquet(OUT_DIR / "certified_tech_schemes_detail.parquet", index=False) +print(f"✅ 表2技术方案明细: {OUT_DIR / 'certified_tech_schemes_detail.csv'} ({len(df_tech)}行)") -# 项目汇总 -PROJ_PATH = OUT_DIR / "certified_schemes.parquet" -df_result.to_parquet(PROJ_PATH, index=False) +# 项目级对比 df_result.to_csv(OUT_DIR / "certified_schemes.csv", index=False, encoding='utf-8-sig') -print(f"✅ 项目汇总: {PROJ_PATH} ({len(df_result)} 行)") +df_result.to_parquet(OUT_DIR / "certified_schemes.parquet", index=False) +print(f"✅ 项目对比: {OUT_DIR / 'certified_schemes.csv'} ({len(df_result)}行)") # 校验报告 report = { - "source": str(CERT_FILES), - "sheet": "表1-专项施工方案", - "me_schemes": len(df_cert), - "me_projects": len(df_proj), - "certified_total": int(df_result['认定_危大方案总数'].sum()), - "certified_oversized": int(df_result['认定_超规数'].sum()), + "表1_危大方案": len(df_schemes), + "表1_超规": int((df_schemes['是否超一定规模'] == '是').sum()), + "表2_技术方案": len(df_tech), + "表2_等级分布": df_tech['方案等级'].value_counts().to_dict(), + "认定总计": len(df_schemes) + len(df_tech), + "覆盖项目": len(all_projects), + "数据来源": [f.name for f in CERT_FILES], } with open(OUT_DIR / "certified_validation.json", 'w', encoding='utf-8') as f: - json.dump(report, f, ensure_ascii=False, indent=2) + json.dump(report, f, ensure_ascii=False, indent=2, default=str) print(f"✅ 校验报告: {OUT_DIR / 'certified_validation.json'}") diff --git a/src/gen_workbook.py b/src/gen_workbook.py index fca5452..952f094 100644 --- a/src/gen_workbook.py +++ b/src/gen_workbook.py @@ -32,7 +32,12 @@ cert_valid = cert_raw[cert_raw['计划开工日期_p'].dt.year >= 2026].copy() cert_tot = len(cert_valid) cert_sup = (cert_valid['是否超一定规模']=='是').sum(); cert_gen = cert_tot-cert_sup cert_comp = pd.read_csv(f"{CERT_DIR}/certified_schemes.csv") -print(f"公司认定: {cert_tot}项(一般{cert_gen}/超规{cert_sup}) 项目{cert_comp['项目名称'].nunique()}") +# 表2: I II Ⅲ类技术方案 +tech_raw = pd.read_csv(f"{CERT_DIR}/certified_tech_schemes_detail.csv") +tech_raw['计划开工日期_p'] = pd.to_datetime(tech_raw['计划开工日期'].astype(str).str.replace('.','-'), errors='coerce') +tech_valid = tech_raw[tech_raw['计划开工日期_p'].dt.year >= 2026].copy() +tech_tot = len(tech_valid) +print(f"公司认定: 表1危大{cert_tot}项({cert_gen}一般/{cert_sup}超规) + 表2技术{tech_tot}项 = {cert_tot+tech_tot}总计") # ════ 样式 ════ HDR_F=Font(name='微软雅黑',bold=True,size=10,color='FFFFFF'); HDR_BG=PatternFill('solid',fgColor='1A3A5C') @@ -122,6 +127,19 @@ s4.auto_filter.ref=f'A3:{get_column_letter(ncol_c)}{len(cert_comp)+3}' for i,col in enumerate(COMP_COLS): s4.column_dimensions[get_column_letter(i+1)].width=max(14,min(45,len(str(col))*2.5)) +# ════════ S4b: 认定技术方案(表2) ════════ +s4b=wb.create_sheet('认定技术方案') +TECH_COLS=['所属国别','项目名称','方案名称','编制单位','工程类别','方案等级','工程特点/说明','计划开工日期'] +write_data_sheet(s4b,tech_valid.reset_index(drop=True), + f'2026年度公司认定技术方案明细(ⅠⅡⅢ类·中港科技便〔2026〕6号·{tech_tot}项)',TECH_COLS) + +# ── 公式-技术方案分类 ── +s4bf=wb.create_sheet('公式-技术方案分类') +TREF = "'认定技术方案'" +write_formula_sheet(s4bf,f'认定技术方案等级分布(GROUPBY·{tech_tot}项)', + f'GROUPBY({TREF}!F3:F200,{TREF}!C3:C200,COUNTA,3,0)', + [('A',4,f'=GROUPBY({TREF}!F3:F200,{TREF}!C3:C200,COUNTA,3,0)','')],[('A',20),('B',12)]) + # ════════ S5-S8: 动态公式 ════════ # ── S5: 公式-年度认定 ── @@ -220,7 +238,8 @@ for w,col in zip([6,8,40,35,18,12,10,20],'ABCDEFGH'): s13.column_dimensions[col] wb.save(OUT) print(f"\n✅ {OUT}") print(f" S1-S2 OA登记: {len(valid_all)}全量 + {len(valid_2026)}≥2026") -print(f" S3 公司认定: {cert_tot}行({cert_gen}一般+{cert_sup}超规)") +print(f" S3 认定危大方案(表1): {cert_tot}行({cert_gen}一般+{cert_sup}超规)") print(f" S4 认定vsOA: {len(cert_comp)}项目") -print(f" S5-S9 GROUPBY/FILTER 动态公式") -print(f" S10-S13 静态汇总表(交叉验证)") +print(f" S4b 认定技术方案(表2): {tech_tot}行") +print(f" S5-S10 GROUPBY/FILTER 动态公式(含表1+表2)") +print(f" S11-S14 静态汇总表(交叉验证)")