diff --git a/flask_app/general/file2markdown.py b/flask_app/general/file2markdown.py
index 9d9a7c0..dd95110 100644
--- a/flask_app/general/file2markdown.py
+++ b/flask_app/general/file2markdown.py
@@ -75,12 +75,13 @@ def convert_file_to_markdown(file_path, file_name="extract1.txt"):
'get_image': 'none'
})
- # 打印请求耗时
- print("request time: ", resp.elapsed.total_seconds())
+ # 打印请求耗时(网络请求时间)
+ print("Request network time: ", resp.elapsed.total_seconds(), "seconds")
# 解析响应内容
data = json.loads(resp.text)
-
+ duration = data.get('duration',"错误!") # 提取 'duration'
+ print("实际转换时间(ms):", duration)
# 检查响应中是否包含Markdown内容
if 'result' in data and 'markdown' in data['result']:
markdown_content = data['result']['markdown']
@@ -101,6 +102,6 @@ def convert_file_to_markdown(file_path, file_name="extract1.txt"):
if __name__ == "__main__":
# file_path=r"C:\Users\Administrator\Desktop\fsdownload\e702f1e6-095d-443d-bb7d-ef2e42037cb1\ztbfile_procurement.pdf"
- file_path=r"C:\Users\Administrator\Desktop\fsdownload\bbf7504f-3c75-45e5-b3e2-ab0a15ec9c14\tmp\ztbfile_procurement.pdf"
+ file_path=r"D:\flask_project\flask_app\static\output\output1\f91db70d-8d96-44a5-b840-27d2f1ecbe95\ztbfile\ztbfile_11-16.pdf"
res=convert_file_to_markdown(file_path)
print(res)
\ No newline at end of file
diff --git a/flask_app/general/json_utils.py b/flask_app/general/json_utils.py
index ff803e5..95369e1 100644
--- a/flask_app/general/json_utils.py
+++ b/flask_app/general/json_utils.py
@@ -438,6 +438,28 @@ def add_outer_key(original_data, new_key):
new_data = {new_key: original_data}
return new_data
+
+
+def rename_outer_key(data, new_key):
+ """
+ 将字典的最外层唯一键重命名为 new_key。
+
+ 参数:
+ data (dict): 只有一个外层键的字典。
+ new_key (str): 新的键名。
+
+ 返回:
+ dict: 修改后的字典。
+ """
+ if not isinstance(data, dict) or len(data) != 1:
+ raise ValueError("输入数据必须是一个只有一个外层键的字典。")
+
+ # 获取原始键和值
+ old_key, value = next(iter(data.items()))
+
+ # 构造新的字典
+ return {new_key: value}
+
def transform_json_values(data):
if isinstance(data, dict):
return {key.replace(' ', ''): transform_json_values(value) for key, value in data.items()}
@@ -452,6 +474,7 @@ def transform_json_values(data):
else:
return data
+
if __name__ == "__main__":
data="""{
"新内容": "六、残疾人福利性单位声明函(适用于货物类项目
diff --git a/flask_app/general/post_processing.py b/flask_app/general/post_processing.py
index d32dc1d..9e1d324 100644
--- a/flask_app/general/post_processing.py
+++ b/flask_app/general/post_processing.py
@@ -32,10 +32,20 @@ def inner_post_processing(base_info):
# 定义一个辅助函数用于递归查找包含特定子字符串的键
def find_keys_containing(dic, substring):
+ """
+ 递归查找包含特定子字符串的键,并返回对应的值列表。
+
+ 参数:
+ dic (dict): 要搜索的字典。
+ substring (str): 子字符串。
+
+ 返回:
+ list: 匹配键的值列表。
+ """
found_values = []
if isinstance(dic, dict):
for key, value in dic.items():
- if substring in key:
+ if substring in key and value not in ["未知", ""]:
found_values.append(value)
if isinstance(value, dict):
found_values.extend(find_keys_containing(value, substring))
@@ -73,7 +83,6 @@ def inner_post_processing(base_info):
else:
# 如果 value 既不是 dict 也不是 str,忽略
continue
-
# 第二步:如果没有找到包含 "金额" 的键,尝试在所有键值中查找符合模式的值
amount_pattern = re.compile(
r'(?:\d{1,3}(?:[,,]\d{3})*(?:\.\d+)?|\d+(?:\.\d+)?|[\u4e00-\u9fff]+(?:\.\d+)?)\s*(?:元|万元)')
@@ -109,20 +118,13 @@ def inner_post_processing(base_info):
concatenated = []
for item in value:
if isinstance(item, dict):
- pairs = []
- for k, v in item.items():
- if v not in ["未知", ""]:
- pairs.append(f"{k}:{v}")
+ pairs = [f"{k}:{v}" for k, v in item.items() if v not in ["未知", ""]]
concatenated.append(" ".join(pairs))
else:
- # 如果列表中有非字典且非字符串的项,直接转换为字符串
concatenated.append(str(item))
return " ".join(concatenated)
elif isinstance(value, dict):
- pairs = []
- for k, v in value.items():
- if v not in ["未知", ""]:
- pairs.append(f"{k}:{v}")
+ pairs = [f"{k}:{v}" for k, v in value.items() if v not in ["未知", ""]]
return " ".join(pairs)
else:
return str(value) if value not in ["未知", ""] else ""
@@ -138,57 +140,45 @@ def inner_post_processing(base_info):
"招标单位名称": [["招标人/代理信息", "招标人"]],
"招标公告地址": [["关键时间/内容", "信息公示媒介"]],
}
- # 定义需要格式化的日期字段
- date_fields = ["开标时间", "报名截止日期"]
+ # 定义需要格式化的字段及其对应的格式化函数
+ formatting_rules = {
+ "开标时间": format_chinese_date,
+ "报名截止日期": format_chinese_date,
+ "招标项目预算": lambda x: format_amount(ensure_string(x)),
+ }
# 提取并映射字段
for new_key, paths in mapping.items():
- value = None
- for path in paths:
- value = get_nested(base_info, path)
- if value:
- break
- if new_key in date_fields and value:
- # 调用 format_chinese_date 函数格式化日期
- formatted_value = format_chinese_date(value) # 或者使用 format_chinese_date(value) 如果你定义了该函数
- extracted_info[new_key] = ensure_string(formatted_value) if formatted_value else ""
- else:
- # 对 '招标项目预算' 应用 format_amount
- if new_key == "招标项目预算" and value:
- formatted_amount = format_amount(ensure_string(value))
- extracted_info[new_key] = formatted_amount
+ value = next((get_nested(base_info, path) for path in paths if get_nested(base_info, path)), None)
+ if value:
+ if new_key in formatting_rules:
+ formatted_value = formatting_rules[new_key](value)
+ extracted_info[new_key] = ensure_string(formatted_value) if formatted_value else ""
else:
- extracted_info[new_key] = ensure_string(value) if value else ""
+ extracted_info[new_key] = ensure_string(value)
+ else:
+ extracted_info[new_key] = ""
# 特殊处理 '招标项目地点'
- # 在 '项目信息' 下查找包含 "地点" 的键
project_info = base_info.get("项目信息", {})
location_candidates = find_keys_containing(project_info, "地点")
- if location_candidates:
- # 选择第一个找到的地点
- extracted_info["招标项目地点"] = ensure_string(location_candidates[0])
- else:
- extracted_info["招标项目地点"] = ""
+ extracted_info["招标项目地点"] = ensure_string(location_candidates[0]) if location_candidates else ""
- # 特殊处理 '联系人' 和 '联系电话'
- # 提取 '项目联系方式'
- project_contact = get_nested(base_info, ["招标人/代理信息", "项目联系方式"], {})
- if not isinstance(project_contact, dict):
- project_contact = {}
-
- # 提取 '招标人联系方式'
- bidder_contact = get_nested(base_info, ["招标人/代理信息", "招标人联系方式"], {})
- if not isinstance(bidder_contact, dict):
- bidder_contact = {}
+ # 优先级:项目联系方式>招标人>招标代理
+ contact_info_sections = [
+ get_nested(base_info, ["招标人/代理信息", "项目联系方式"], {}),
+ get_nested(base_info, ["招标人/代理信息", "招标人联系方式"], {}),
+ get_nested(base_info,["招标人/代理信息", "招标代理机构联系方式"], {})
+ ]
+ contact_info_sections = [ci for ci in contact_info_sections if isinstance(ci, dict)]
# 定义候选键列表,按优先级排序
- name_candidates = ["联系人", "名称", "招标"]
- phone_candidates = ["电话", "手机", "联系方式"]
+ name_candidates = ["名称","联系人"]
+ phone_candidates = ["联系电话", "联系方式"]
# 提取 '联系人'
- contact_names = [project_contact, bidder_contact]
contact_name = ""
- for contact in contact_names:
+ for contact in contact_info_sections:
extracted_name = extract_field(contact, name_candidates)
if extracted_name:
contact_name = extracted_name
@@ -196,9 +186,8 @@ def inner_post_processing(base_info):
extracted_info["联系人"] = ensure_string(contact_name) if contact_name else ""
# 提取 '联系电话'
- contact_phones = [project_contact, bidder_contact]
contact_phone = ""
- for contact in contact_phones:
+ for contact in contact_info_sections:
extracted_phone = extract_field(contact, phone_candidates)
if extracted_phone:
contact_phone = extracted_phone
@@ -206,15 +195,10 @@ def inner_post_processing(base_info):
extracted_info["联系电话"] = ensure_string(contact_phone) if contact_phone else ""
# 特殊处理 '投标保证金'
- # 提取 '保证金相关'
guarantee_info = get_nested(base_info, ["保证金相关"], {})
- if not isinstance(guarantee_info, dict):
- guarantee_info = {}
- bid_bond = extract_bid_bond(guarantee_info)
- # 对 '投标保证金' 应用 format_amount
- if bid_bond:
- formatted_bid_bond = format_amount(ensure_string(bid_bond))
- extracted_info["投标保证金"] = formatted_bid_bond
+ if isinstance(guarantee_info, dict):
+ bid_bond = extract_bid_bond(guarantee_info)
+ extracted_info["投标保证金"] = format_amount(ensure_string(bid_bond)) if bid_bond else ""
else:
extracted_info["投标保证金"] = ""
@@ -308,802 +292,63 @@ def outer_post_processing(combined_data, includes, good_list):
if __name__ == "__main__":
combined_data = {
- "基础信息": {
- "招标人/代理信息": {
- "招标人": ["广水市公路管理局", "sss"],
- "招标人联系方式": {
- "名称": "广水市公路管理局",
- "联系电话": "17362698785",
- "地址": "随州市广水市四贤路 7号应山办事处南门"
- },
- "招标代理机构": "湖北众恒永业工程项目管理有限公司广水分公司",
- "招标代理机构联系方式": {
- "名称": "湖北众恒永业工程项目管理有限公司广水分公司",
- "联系电话": "13997896775",
- "地址": "广水市名都花园 22栋"
- },
- "项目联系方式": {
- "名称": "闵杨、喻亚",
- "联系电话": "13997896775、15337331616"
- }
- },
- "项目信息": {
- "项目名称": "107国道交通信号灯及安全防护设施采购项目",
- "项目编号": "HBZHYY-2021-001",
- "项目概况": "107国道交通信号灯及安全防护设施采购项目",
- "项目基本情况": {
- "政府采购计划编号": "2020-09-000560",
- "项目编号": "HBZHYY-2021-001",
- "项目名称": "107国道交通信号灯及安全防护设施采购项目",
- "采购方式": "公开招标",
- "预算金额": "RMB10071358.07元",
- "最高限价": "RMB10070194.68元(一包:RMB6230708.59元、二包:RMB2175838.09元、三包:RMB1663648元)",
- "采购需求": {
- "7.1": "项目概况及内容:一包:107国道交通信号灯及安全防护设施的监控抓拍系统、电子警察、信号灯、专用配套设备等。二包:107国道广水段标示标牌及标线等。三包:107国道霞家河超限检测站抓拍、超重系统等。(以上具体要求见招标文件第三章项目技术、服务及商务要求。)",
- "7.2": "项目地点:107国道路段。",
- "7.3": "投标人只能对此项目三个包中的一个包进行报名,若同时对两个包或两个包以上进行报名,则所有报名无效。"
- },
- "合同履行期限": "合同签订后 6个月内。",
- "本项目不接受联合体投标": "否",
- "是否可采购进口产品": "否"
- },
- "招标控制价": "RMB10070194.68元",
- "投标竞争下浮率": "未知",
- "分包": "不允许",
- "是否接受联合体投标": "否"
- },
- "采购要求": {
- "采购需求": {
- "交通标线": [
- "1)《中华人民共和国道路交通安全法实施条例》",
- "2)《城市道路交通设施设计规范》(GB 50688-2011,2019年修订版)",
- "3)《道路交通标志和标线》(GB 5768.2-2009)",
- "4)《道路交通标志反光膜》(GB/T18833-2012)",
- "5)《路面标线涂料》(JT/T280-2004)",
- "6)《道路交通标线质量要求和检测方法》(GB/T 16311-2009)",
- "7)《道路交通信号灯设置与安装规范》(GB 14886-2016)",
- "8)《道路交通信号控制机》(GB 25280-2010)",
- "9)《公路交通安全设施设计技术规范》(JTG D81-2017)",
- "10) 《闯红灯自动记录系统通用技术条件》(GA/T496-2014)",
- "11) 《视频安防监控系统工程设计规范》 (GB50395-2007)",
- "12) 《视频安防监控系统技术要求》(GA/T367-2001)",
- "13) 《道路交通安全违法行为图像取证技术规范》(GA/T832-2014)",
- "14) 《机动车号牌图像自动识别技术规范》(GA/T833-2016)",
- "15) 《道路车辆智能监测记录系统通用技术条件》(GA/T497-2016)",
- "16) 《公安交通指挥系统工程建设通用程序和要求》(GA/T651-2014)",
- "17) 《公安交通管理外场设备基础设施施工通用要求》(GA/T652-2017)",
- "18) 《安全防范工程技术标准》(GB50348-2018)",
- "19) 《建筑物防雷设计规范》(GB50057-2010)",
- "20) 《光纤通信系统通用规范》(SJ 20552-1995)",
- "21) 《安全防范工程程序与要求》(GA/T75-1994)",
- "22) 《安全防范系统验收规则》(GA308-2001)",
- "23) 《安全防范系统通用图形符号》(GA/T74-2017)",
- "24)其它相关技术规范与标准。",
- "1. 投标货物必须符合中华人民共和国公共安全行业标准“GA/T298—2001《道路标线涂料》”、交通行业标准“JT/T280—2004《路面标线涂料》”及“GB/T24722《路而标线用玻璃珠》”的规范要求,重点指标要求如下| 检测项目|技术指标|技术指标|| ---|---|---|| 检测项目|反光型|凸起型|| 密度(g/cm3)|1.8-2.3|1.8-2.3|| 软化点(℃)|90-125|≥100|107国道交通信号灯及安全防护设施采购项目招标文件湖北众恒永业工程项目管理有限公司广水分公司编制25/ 96| 不粘胎干燥时间|不粘胎干燥时间|不粘胎干燥时间|≤3|≤3|| ---|---|---|---|---|| 涂抹外观|涂抹外观|涂抹外观|涂膜冷凝后应无皱纹、斑点、起泡、裂纹、脱落及表面发粘 等现象,涂膜颜色和外观应与标准板差异不大。|涂膜冷凝后应无皱纹、斑点、起泡、裂纹、脱落及表面发粘 等现象,涂膜颜色和外观应与标准板差异不大。|| 抗压轻度|抗压轻度|抗压轻度|≥12|23℃±1℃,≥12 50℃±2℃,≥2|| 耐磨性(mg)负载 1kg200转 后减重|耐磨性(mg)负载 1kg200转 后减重|耐磨性(mg)负载 1kg200转 后减重|≤80|——|| 耐水性|耐水性|耐水性|经水浸泡 24小时后无异常|经水浸泡 24小时后无异常|| 耐碱性|耐碱性|耐碱性|在氢氧化钙饱和溶液中浸 24h无异常现象|在氢氧化钙饱和溶液中浸 24h无异常现象|| 流动度(S)|流动度(S)|流动度(S)|35±10|——|| 玻璃珠含量(%)|玻璃珠含量(%)|玻璃珠含量(%)|▲≥20|▲≥20|| 色度 性能|白 色|色品坐标(x, y)|在以下四角点色品坐标组成的四边形内 (0.350,0.300);(0.290,0.340) (0.360,0.310);(0.320,0.370)|在以下四角点色品坐标组成的四边形内 (0.350,0.300);(0.290,0.340) (0.360,0.310);(0.320,0.370)|| 色度 性能|白 色|亮度因素|▲≥0.35|▲≥0.35|",
- "2. 道路标线施划施工内容必须符合“GB5768—2009中《道路标线》”的规范要求。",
- "3. 标线质量要求: ①投标人必须提供施工使用的热熔涂料及玻璃珠的相关质量证明文件(检测报告等); ▲②热熔标线旧标线的清除、采用高压水除线。★③热熔标线施划,标线表面加铺玻璃微珠,标线涂层厚度 1.8mm±0.2mm。",
- "4. 标线相关计量说明: 4.1.本项目价格形式为固定单价,最终计量结算,按照工程量清单单价据实结算。",
- "5. 道路热熔标线质保期 12个月。"
- ],
- "交通标志": [
- "1.标志牌铝板技术标准:①标志牌所采用铝板技术标准执行 GB/T38/80—06; ★②标志牌版面采用 3mm厚的铝板;",
- "2.标志牌版面反光膜技术标准: ①标志牌版面反光膜技术标准 GB/T18833)—2012《道路交通反光膜》; ★②标志牌反光膜采用Ⅳ类反光膜; ③版面字体采用电脑刻字技术,标志版面颜色应符合 GB5768—2017规定。",
- "注:指路标志板面内容由采购方确认后制作。④标志牌版面反光膜质保期应不少于 10年。(投标人需在投标文件中作出承诺)",
- "3.标志牌杆件材料技术标准: ★①标志标牌杆件立柱采用热浸镀锌内外表面防腐镀锌处理,热镀锌后再进行喷塑处理,应符合国家标准要求。★②标志标牌杆件 F悬臂横梁采用热浸镀锌内外表面防腐镀锌处理,热镀锌后再进行喷塑处理,应符合国家标准要求。★③标志标牌立柱和横梁采用无缝钢管。",
- "4.标志标牌安装施工工艺技术标准: ①标志标牌安装施工工艺必须符合“GB5768—2017中《道路标志标线安装施工》”及《城 市道路交通报纸和标线设置》(GB51038)的规范要求。★②标志板与标志杆采用抱箍连接,抱箍必须经过热镀锌处理。",
- "5.标志标牌安装施工安全技术标准: ①交通标志标牌安装位置准确,角度符合要求,且安装牢固。②严格执行交通安全维护与施工安全防护。标志基础应提前完成好养护,大型标志杆安 装、大型标识标牌安装均应采用吊车、升降车配合人工完成,其他采用人工辅以小型机械施 工作业。③施工、保修符合现行有效的国家有关质量标准及实施规范。",
- "6.道路标志标牌质保期 12个月。"
- ],
- "交通信号灯": {
- "交通信号灯具": [
- "1、道路交通信号灯单灯必须符合国家标准 GB14887-2011《道路交通信号灯》全部技术规定,并通过公安部交通安全产品质量监督检测中心的检测。",
- "2、道路交通信号灯光源必须采用户外型超亮度发光二极管(LED),使用寿命不少于50000小时。",
- "3、信号灯灯具材质为铝质金属材料。机动车信号灯灯芯透镜尺寸采用¢400mm规格,人行信号灯灯芯透镜尺寸采用¢300mm,相同规格的灯芯可以互换。信号灯外观应与目前广水市使用的信号灯外观相一致。",
- "4、信号灯需采用恒流供电电路,单体信号灯功率¢400mm规格不超过20VA;¢300mm规格不超过 15VA。"
- ],
- "倒计时器": [
- "1、道路交通信号倒计时器安装在信号灯的上方或右方,2位数码显示倒九秒提示。",
- "2、当机动车信号灯采用悬臂式杆件时,机动车信号灯倒计时器规格为 800×600,当采用立柱式杆件时,倒计时器规格为 400×400。人行信号灯倒计时显示器透光面为Φ300mm或 300mm ×300mm。",
- "3、倒计时显示器的光学性能、工作条件、机械强度、电气性能均符合国家安全行业 标准 GA/T508-2004《道路交通信号倒计时显示器》的全部技术规定。",
- "4、倒计时器运行中遇到电磁、静电、电网等干扰时不能有死机现象。",
- "5、倒计时器必须经过过电压、过电流测试,具有防雷击功能。",
- "6、倒计时器应为学习型,并支持脉冲触发、黄灯触发及通讯式触发。"
- ],
- "信号灯灯杆": [
- "1、信号灯杆所属的立柱、法兰盘、地脚螺栓、螺母、垫片、加强筋等金属构件及悬臂、支撑臂、拉杆、抱箍座、夹板等附件的防腐性能应符合 GB/T18226《公路交通工程钢构件防腐技术条件》的规定。",
- "2、信号灯杆应采用圆形或多棱形经热镀锌处理的钢管制造;悬臂式灯杆悬臂杆与支撑杆使用圆形或多棱形的变截面型材制作,悬臂与灯杆连接端宜焊接固定法兰盘,悬臂下应留有进出线孔。",
- "3、信号灯杆制作后须经过防锈处理,底层喷涂富锌防锈底漆,外层喷涂银灰色瓷漆。",
- "4、信号灯灯杆距路面约 300-350mm处留有拉线孔和拉线孔门。",
- "5、孔门盖应设有防盗措施,孔内设置接地端子座,并与接地线可靠接驳。",
- "6、立柱式灯杆顶部安装灯具处应留有出线孔,并配备橡胶护套、电缆线回水弯挂钩,灯杆顶部应安装塑料或经防腐处理的内套式金属防水管帽。",
- "7、悬臂式灯杆拉杆宜使用圆钢制作,一端配有可调距离的螺旋扣,直径和长度根据悬臂长度确定。",
- "8、信号灯杆杆体底部应焊接固定法兰盘,法兰盘与杆体之间应均匀焊接加强筋。",
- "9、一体式人行信号灯采用整灯嵌入式设计、结构紧凑、方便拆装、便于维护。杆体前后金属面板喷塑处理,两侧铝型材包边。"
- ],
- "交通信号机": [
- "★应采用区域控制信号机,并应与广水市交通信号控制系统兼容,信号机能接入已有系统平台,实现联网优化功能。",
- "1、控制功能",
- " (1)区域协调控制:可对单个孤立交叉口、干道多个交叉口和关联性较强的交叉口群进行综合性地信号控制。",
- "(2)线性协调控制:可对干道多个相邻交叉口进行协调控制。",
- "(3)多时段控制:可根据交叉口的交通状况,将每天划分为多个不同的时段,每个时段配置不同的控制方案,能设置至少 10个时段、10种以上不同控制方案,能根据不同周日类型对方案进行调整。信号机能够根据内置时钟选择各个时段的控制方案,实现交叉口的合理控制。",
- "(4)感应控制:信号机能根据检测到车辆达到情况,在保证最小安全绿灯时间的前提下,调整感应方向的绿信比参数,实现路口的最佳配时,保证交叉口的通行顺畅。通过参数配置,在感应方向没有机动车请求的情况下,信号机能够跳过感应相位,直接放行下一相位。",
- "(5)单点优化控制:信号机能根据检测的交通流信息,适当调整路口周期时长和绿信比分配,实现路口信号控制的最优方案。",
- "(6)无缆线协调控制:信号机能够通过配置路口相位差,即使在不联网的条件下,依然实现各个路口的绿波协调控制效果。",
- "(7)手动控制:在某些特殊情况下,使用者可以通过手动装置完成手动强制功能,使信号显示停留在任意相位(包括全红、黄闪);信号机也可响应来自监控中心操作终端或现场笔记本的手动控制指令。",
- "(8)黄闪控制:信号机具有黄闪控制功能,可以通过手动控制实现黄闪,或者通过规定时段自动进入黄闪控制。另外,当信号机的硬件发生故障时,可以进入硬件故障黄闪。",
- "(9)全红控制:信号机能够根据时间表调用信号机的全红控制方案,实现对交叉口的全红控制功能。路口信号机具备一键全红功能,即:触动信号机某一按钮即实现路口全红控制,该按钮应设置在手控箱中便于操作。中心控制软件具备一键全红功能,用法同上。",
- "(10)公交优先控制:支持 RFID、地磁、线圈等检测方式,支持多种公交优先控制策略。",
- "(11)黑灯:能够一键关闭所有信号灯。",
- "(12)行人过街按钮:信号机支持行人按钮信号输入,可在路口和路段响应来自行人按钮的行人过街请求。",
- "(13)溢出控制:信号机发现路口拥堵后,能够立即调整绿灯时间或其他指定灯色的方式,避免过多车辆涌入拥堵方向或快速放行,抑制拥堵扩散(或溢出)或加速疏导。",
- "(14)相位控制:至少 8个相位控制,可扩至 16个以上相位控制。",
- "(15)信号灯组输出:至少 8个独立信号组输出,可扩展至 16个以上独立信号组输出。",
- "2、采集功能",
- " (1)信号机支持接入线圈、地磁、视频、微波、超声波检测器、RFID等多种检测方式。",
- "(2)信号机支持交通信息采集与统计,并支持交通流量共享。",
- "3、运维功能",
- " (1)信号机能够自动检测地磁故障,若故障,能够自动上传故障信息至监控中心。",
- "(2)具有故障自检功能,如信号机死机时迅速做出反应重新启动信号机;出现绿灯冲突时,马上切换到黄闪状态,对绿灯冲突进行检测和处理,并记录绿灯冲突的灯组;对信号灯驱动部分和外线出现的故障以及信号机各主要部件的故障进行自动检测和记录。",
- "(3)信号机支持检测机柜内电压状态指标,若出现异常情况,能够及时报警并上传中心控制系统。",
- "(4)信号机主控板一旦发生故障后,信号机仍能够继续运行定周期方案,保障路口交通秩序,等待主控板故障排除后,自动恢复。",
- "(5)信号机出现故障时应能按“上位机控制→无电缆协调控制→感应控制→定时控制→黄闪”实现降级。",
- "4、通信功能",
- " (1)交通信号控制器支持有线、无线联网。",
- "(2)交通信号控制机应基于开放的通信协议,满足《交通信号控制机与上位机间的数据通信协议》(GB/T20999-2017)标准或 NTCIP通讯协议体系架构,符合度≥90%。",
- "5、操作功能",
- " (1)交通信号控制器必须提供维护软件,支持通过串口、网口连接。信号机侧面具备手动控制面板,能够在现场进行手动控制。",
- "6、其他功能",
- " (1)机动车灯按顺序的转换过程中无显示中断现象。人行横道灯绿灯时间能够灵活确定。绿闪、黄灯、全红时间设置为 0时,该灯色不应出现,且不会影响信号的正常转换。",
- "(2)信号机从自动控制方式转入手动控制方式时,信号机应保持原有相位的最小安全时间,最小安全时间可根据路口实际情况设定;从手动控制方式(驻留或步进)转入自动控制方式时,信号状态不会突变,各相位信号应保持转换时刻的状态,至少保持最小安全时间。",
- "(3)信号机采用的芯片具有精确的时钟,与中心系统联接后,系统可定时校准信号机时钟,采用具有时、分、秒、年、月、日、星期的晶体时钟计时,保证信号机时钟精度在 1 秒内。若信号机不与中心连接,配置 GPS接口,可通过 GPS接口进行精确的时钟校准,保证时钟分秒无差。停电时由电池保持时钟继续工作,采用锂电池作为后备电源。",
- "(4)停电保护功能:自动保存修改的各项控制参数,停电后数据不会丢失。",
- "质保期:2 年。"
- ]
- },
- "交通监控视频子系统": {
- "系统功能": [
- "▲系统能实现 24小时高清视频录像功能。可以在白天或夜间有辅助光源的情况下实现 清晰录像;视频编码格式至少支持 H.264/ H.265;可自动记录车辆通过时间、地点、所在车 道、违法类型等信息;录像中能清晰地反映车辆的颜色、车辆类型、运动轨迹,并提供录像 查询、下载等功能。",
- "▲至少具备监控前端设备切换、云台/快球控制器方向控制、焦距调节、镜头缩放、光 圈调节、预置位设置、雨刷和电源开关控制、自定义辅助开关控制、监控前端设备锁定与解 锁、云台/快球控制器的参数设定等功能。",
- "系统可对城市进行全面综合交通视频监控;通过交通视频监控系统的巡检功能,定时不 间断地对城市进行全面监控扫描。值班人员可以根据图像画面上所发出的报警信息,及时定 点跟踪确认。第一时间进行力量调度,并对事件的发展情况和事态的全程变化状况全程跟踪、 实时录像、调查取证。",
- "利用交通视频监控系统,可以准确地对城市报警情况进行核实。当接到报警信息后,可 以将摄像头调整到报警位置,进行识别判断;确认报警信息是否属实。",
- "交通视频监控系统由于位置高、监控距离远、视角广的特点,在发生某些特定事件救援 时,可以有效地对救援点交通进行一个诊断,减少或者避免由于客观原因造成的事态扩大。",
- "▲设备具备车辆布控功能,当监视画面中出现布控名单中的机动车时,设备可触发报警 并跟踪,布控名单中可添加 10000个号牌信息"
- ],
- "一体化高速球机": [
- "1、▲采用≥1.8英寸红外型 800万像素逐行扫描图像传感器。",
- "2、光学变倍≥22倍,焦距≥6.5~143mm,支持 H.265、H.264、MJPEG视频编码。",
- "3、分辨率≥3840×2160,帧率≥30fps,亮度等级≥11级。",
- "4、支持超低照度监控:彩色模式≤0.01lx,黑白模式≤0.003lx,具备三码流功能:主码流 3840×2160、30帧/秒、8Mbps;子码流 1280×720、30帧/秒、1Mbps;第三码流主码流 3840×2160、30帧/秒、1Mbps,码率设置为 128Kbps~8Mbps。",
- "5、摄像机具备自动增益控制功能、自动白平衡调整功能、逆光补偿调整功能、日夜模式、电子快门、自动聚焦、断电记忆、定时启动、区域遮盖、自动定位、在线升级、断线自动重连。",
- "6、▲支持前端存储功能。",
- "7、支持 360°水平连续旋转,支持垂直-15°~90°旋转。",
- "8、摄像机具备良好的电源适应性,在 AC24±35%或 DC24±35%范围内,能正常工作, IP防护等级≥IP67,环境温度满足-45~70℃。"
- ],
- "光纤收发器": [
- "1、1路千兆以太网。",
- "2、单模单纤,光接口为 FC接口,满足实际传输距离要求。",
- "3、10/100/1000M自适应以太网接口。",
- "4、工作环境适应性强,满足全天候使用的要求。",
- "5、耐压≥300V。"
- ],
- "交通诱导子系统": {
- "交通诱导屏": [
- "1、主要特性",
- "1)温度范围-40~70℃",
- "2)光带宽度>130mm",
- "3)通迅接口:RS485、网络通讯、3G网络",
- "4)视角:水平:110°~120°垂直:55°",
- "5)发光亮度:6500-7000 cd/m2",
- "6)平整度≤0.5mm",
- "7)使用寿命≥10万小时",
- "8)平均故障时间≥1万小时",
- "9)电源采用 n+1高可靠容错的开关电源系统",
- "10)显示尺寸:长 3.84米×高 2.56米=9.83平方米",
- "11)机箱要求:冷轧钢板,机箱为内外两层,内箱体为全封闭、全天候、防风雨型,符合 IP65防护等级",
- "12)抗风等级:40m/s",
- "2、技术参数:",
- "1)物理点间距:10mm",
- "2)物理密度:10000点/m2",
- "3)发光点颜色:1R1G",
- "4)基色:纯红+纯绿",
- "5)模组尺寸:320mm\\*160mm",
- "6)刷新频率:≥800HZ",
- "7)工作电压:AC220V±10%,50Hz(三相五线制)",
- "8)平均功耗:350W/m2",
- "9)最大功耗:≤700W/ m2"
- ]
- },
- "电子警察子系统": {
- "系统功能": [
- "(1)闯红灯违法抓拍功能★系统可以实现对单方向各车道闯红灯车辆的监测、图像抓拍等功能。闯红灯捕获率≥90%,每一违法记录拍摄连续 3张反映闯红灯过程的图片,其中第一个位置的图片反映机动 车未到达停止线的情况,并能清晰辨别车辆类型、交通信号灯红灯、停止线;第二个位置的 图片反映机动车已越过停止线的情况,并能清晰辨别车辆类型、号牌号码、交通信号灯红灯、 停止线;第三个位置的图片反映机动车越过停止线继续前行的情况,并能清晰辨别车辆类型、 交通信号灯红灯、停止线。",
- "(2)不按车道行驶记录功能 当车辆遇到“分向行驶车道”不按规定的转向、右转车辆占用直行车道,或在左转、右 转车道上直行等情形,系统可以实现对此类违法行为的记录,以三张图片清晰、完整表现违 法过程。",
- "(3)违章变道记录功能 ▲系统能够对违法变道车辆进行记录,抓拍三张不同位置的图片以反映整个违法变道过 程,其中第一张为车辆在初始车道行驶时抓拍的图片,第二张为压线行驶时抓拍的图片,第 三张为变换到另一个车道上行驶时抓拍的图片。",
- "(4)闯禁令记录功能 系统能够对违反禁左、禁右、禁止掉头等通行的车辆,进行检测、抓拍记录与识别。",
- "(5)卡口监测记录功能 系统能够准确捕获、记录车辆通行信息(车辆尾部的图片),对通过车辆的捕获率不小 于 99%。记录的车辆信息除包含图像信息外,还包括文本信息,如日期、时间(精确到秒)、 地点、方向、号牌号码等。车辆信息写入关联数据库,并将相关文本信息叠加到图片上。",
- "(6)逆行记录功能 系统能够对逆向行驶的违法车辆进行检测、抓拍记录与识别。",
- "(7)压线行驶记录功能 系统能够对压线行驶的违法车辆进行检测、抓拍记录与识别,其主要针对在连续一段时 间内压车道线行驶的车辆,此类车辆会影响前后车驾驶员的判断,干扰前后车的正常形式。",
- "(8)车身颜色识别功能 ▲系统能够自动对车身深浅和颜色进行识别,可供用户根据车身颜色来查询通行车辆。",
- "(9)车牌号码自动识别 系统能够对符合“GA36-2014”标准的民用车牌、新能源车辆、警用车牌、使领馆车牌 的号牌自动识别能力。",
- "(10)图像防纂改功能 记录的原始图像信息具备防纂改功能,避免在传输存储、处理等过程中被认为篡改。",
- "(11)测速功能 系统能够与测速设备配套使用,监控车辆行驶的速度,对超速行驶的车辆进行抓拍。",
- "(12)未系安全带检测功能 ★采用视频检测技术,对未系安全带行为进行检测,抓拍记录与识别。",
- "(13)接打电话检测功能 采用视频检测技术,实现对前排驾驶人接打电话状态的检测,抓拍记录与识别。",
- "(14)驾驶人面部特征记录功能 ★在电子警察杆件上增加车辆正向采集的摄像机,可通过路口终端服务器实现驾驶人面 部特征记录功能。可将违法行为与对应车辆的正向图片匹配起来,从而将违法行为固定到驾 驶人,有效遏制驾驶分非法买卖现象,同时为公安交通管理和刑侦案件侦破提供技术支持。",
- "(15)车辆稽查布控功能 系统具备车辆交通安全违法行为监测报警和布控车辆自动比对报警功能,比对方式包括 精确比对和模糊比对。",
- "(16)交通流量数据采集功能 系统能够按车道和时段进行车辆流量、平均速度、车辆类型、占有率、平均车头时距、 平均排队长度、饱和度等数据的统计。所有统计数据应支持以报表形式输出。",
- "(17)高清录像功能 系统支持道路交通情况的实时视频录像存储,视频质量能清晰反映覆盖区域内行驶机动 车的车牌号码。视频采用预分配存储机制,前端支持进行滚动存储 7天以上。",
- "(18)数据断点续传功能 系统支持断点续传功能。当遇到网络中断或其他故障时,车辆信息存储在前端设备中, 待故障排除后自动续传。",
- "(19)时间校准功能 按照《GA/T832-2014道路交通安全违法行为图像取证技术规范》的要求,24h内计时 误差不超过 1.0s,确保所有前端设备点位每日至少与电子警察中心系统时钟同步一次。",
- "(20)网络远程维护功能 系统可以实时查看前端设备的运行状态。能通过网络实现远程维护、远程设置和远程升 级等功能。",
- "(20)黑白名单功能 ▲系统支持车牌黑/白名单设置,最大可设置 60万条黑/白名单。",
- "(21)连续闯红灯监测功能 ▲支持连续闯红灯事件检测功能,对某一时间段内连续闯红灯事件进行检测,并自动上 传报警信息。"
- ],
- "高清视频摄像机": [
- "1、有效像素≥900W像素",
- "2、最低照度彩色≤0.001lx",
- "3、传感器类型≥1英寸全局曝光 COMS/GMOS/GS COMS",
- "4、电子快门至少满足 1/25s至 1/100,000s,可调",
- "5、视频压缩标准至少支持 H264、H265等",
- "6、视频分辨率≥4096×2160,向下可设置",
- "7、视频流帧率≥25fps,至少双视频流",
- "8、图片压缩方式JPEG",
- "9、图像分辨率≥4096(H)×2160(V)",
- "10、强光抑制具备",
- "11、协议API接口开放具备;支持标准 ONVIF协议与第三方厂家设备进行互联;支持 GB/T28181;应提供 SDK",
- "12、接口通讯接口≥1个 RJ45,10M/100M/1000M自适应以太网电口;≥1个 RS-485接口",
- "13、前端存储卡嵌入式,支持断网时本地存储,裸容量≥128GB",
- "14、功能应具备 I/O触发、RS-485触发、视频触发,支持电源同步;支持频闪式卜光装置和脉冲式补光装置同步补光",
- "15、功能具备 AI深度学习算法和 GPU芯片",
- "16、高清工业级镜头光圈、聚焦手动光圈;焦距应可根据车道宽度及抓拍距离进行调整设置,要求中心成像圆内解像力不小于 900万像素,边缘解像力不低于中心 60%,镜头的成像尺寸应与摄像机成像靶面尺寸相等或略大。镜头应配置电动偏振镜,具备根据环境自动切换功能",
- "17、防护罩防护罩类型室外型防护罩,含底座;具备隔热防潮、防水、防尘、防腐、防震等功能;具有加热器、支架、遮阳罩等,具有良好的密封性和恒温等功能。",
- "18、防护罩防护等级≥IP66"
- ],
- "LED补光灯": [
- "1|配置方式|每个车道配置≥1台;补光装置必须与高清摄像设备高度匹配",
- "2|LED管芯|采用超高亮大功率白光 LED管芯,灯珠数量不少于 20颗",
- "3|功耗|30W/车道≤单台平均功耗≤50W/车道,可调",
- "4|峰值光照度|≤300lx",
- "4|(基准轴)|≤300lx",
- "5|峰值光照度|应大于等于基准轴上有效光照度的 50%",
- "5|(补光区)|应大于等于基准轴上有效光照度的 50%",
- "6|平均光照度|≤50lx",
- "7|闪光频率|≥50Hz;补光装置应能与集成式高清摄像设备同步",
- "8|有效补光距离|≥25m",
- "9|最大点亮时间|≤4ms(可调节)",
- "10|控制方式|电平,同步触发方式",
- "11|安全性|在保证瞬时亮度的前提下,必须进行防炫目处理,不会造成光污染",
- "12|使用寿命|≥50000小时",
- "13|防护等级|不低于 IP65",
- "14|其它|应配置光栅装置或遮光阻断装置"
- ],
- "光纤收发器": [
- "1、1路千兆以太网。",
- "2、单模单纤,光接口为 FC接口,满足实际传输距离要求。",
- "3、10/100/1000M自适应以太网接口。",
- "4、工作环境适应性强,满足全天候使用的要求。",
- "5、耐压≥300V。"
- ],
- "交换机": [
- "1、交换容量≥6Gbps,包转发率≥7Mpps;MAC地址列表≥8K;应具备线性转发能力;",
- "2、应至少具有 8个 10/100/1000M自适应以太网接口和至少 2个 1000M光口;",
- "3、以太网光端口传输距离应不小于 40km,以太网光模块为单芯双向光模块,光口接口类型为 LC型接口,光模块连接单模光纤;",
- "4、至少支持 IEEE802.1p、IEEE802.1q、IEEE802.3、IEEE802.3u、IEEE802.3z、IEEE802.3x等协议;",
- "5、应具有 IEEE802.1Q VLAN,应实现信号控制独立传输,至少支持 4个 VLAN划分;",
- "6、应至少支持三层动态路由协议;",
- "7、应具有 IEEE802.1p_QOS功能;",
- "8、应具有 IGMP静态组播、端口聚合、端口镜像等功能;",
- "9、IP40以上等级防护;",
- "10、应采用无风扇设计;",
- "11、应具有网管功能。"
- ],
- "红绿灯信号检测器": [
- "每路口配置 1套,至少能检测 12路独立红灯信号,红灯信号检测准确率为 100%。"
- ],
- "终端服务器": [
- "1、结构形式:采用嵌入式架构;",
- "2、操作系统:嵌入式操作系统;",
- "3、▲接入路数:提供≥12路高清摄像机视频存储、过车记录存储、图片存储、数据上传、视频流转发等;",
- "4、主机存储:内置 SATA接口;配置存储容量≥16T硬盘 ;",
- "5、网络接口:提供≥8个 RJ45 1000M网络接口;",
- "6、其他接口:提供 RS232、RS485、外置 USB接口、VGA接口等;",
- "7、访问操作:支持 Web操作访问;",
- "8、▲接口协议:至少支持 ONVIF,GB/T28181等;",
- "9、API接口开放支持;支持标准 ONVIF协议与第三方厂家设备进行互通;支持 GB/T 28181。",
- "10、▲支持套牌车检测,可将抓拍图片与本地历史数据进行车辆特征比对分析,检测出套牌车辆,同时给出告警提示"
- ]
- },
- "交通卡口子系统": {
- "系统功能": [
- "(1)卡口记录功能:捕获正常行驶车辆的过车图片,抓拍率≥99%;",
- "(2)逆行记录功能:对逆向行驶的违法车辆进行检测、抓拍记录与识别;",
- "(3)压线行驶记录功能:对压线行驶的违法车辆进行检测、抓拍记录与 识别,其主要针对在连续一段时间内压车道线行驶的车辆,此类车辆会影响前后 车驾驶员的判断,干扰前后车的正常行驶;",
- "(4)车身颜色识别功能:可自动对车身深浅和颜色进行识别,可供用户 根据车身颜色来查询通行车辆;",
- "(5)车牌号码自动识别:对符合“GA36-2014”标准的民用车牌、新能 源车辆、警用车牌、使领馆车牌的号牌自动识别能力;",
- "(6)闯禁行记录功能:对违反禁止通行的车辆,进行检测、抓拍记录与 识别;",
- "(7) ▲图像防纂改功能:记录的原始图像信息具备防纂改功能,避免在 传输存储、处理等过程中被人为篡改;",
- "(8)测速功能:与测速设备配套使用,监控车辆行驶的速度,对超速行 驶的车辆进行抓拍;",
- "(9) ★未系安全带检测功能:采用视频检测技术,对未系安全带行为进 行检测,抓拍记录与识别;",
- "(10)接打电话检测功能:采用视频检测技术,实现对前排驾驶人接打电 话状态的检测,抓拍记录与识别;",
- "(11) ★人脸特征抠图:采用视频检测技术对驾驶室人脸特征进行检测, 并将人脸特征抠出,为公安交通管理和刑侦案件侦破提供技术支持。",
- "(12) ▲支持混合抓拍模式,设备支持正面/侧面/背面行人(包括成年人和 儿童)的抓拍;支持对骑自行车、骑三轮车、骑电动车、踩平衡车、骑车带人等 非机动车的抓拍;支持对轿车、客车、面包车、货车、卡车、摩托车等机动车的 抓拍"
- ],
- "高清视频抓拍像机": [
- "1|摄像机|有效像素|≥900W像素",
- "1|摄像机|最低照度|彩色≤0.001lx",
- "1|摄像机|传感器类型|≥1英寸全局曝光 COMS/GMOS/GS COMS",
- "1|摄像机|电子快门|至少满足 1/25s至 1/100,000s,可调",
- "2|视频图 像|视频压缩标准|至少支持 H264、H265等",
- "2|视频图 像|视频分辨率|≥4096×2160,向下可设置",
- "2|视频图 像|视频流帧率|≥25fps,至少双视频流",
- "3|视频图 像|图片压缩方式|JPEG",
- "3|视频图 像|图像分辨率|≥4096(H)×2160(V)",
- "3|视频图 像|强光抑制|具备",
- "4|协议|API接口开放|具备;支持标准 ONVIF协议与第三方厂家设备进行互联; 支持 GB/T28181;应提供 SDK",
- "5|接口|通讯接口|≥1个 RJ45,10M/100M/1000M自适应以太网电口;≥1 个 RS-485接口",
- "5|接口|前端存储卡|嵌入式,支持断网时本地存储,裸容量≥128GB",
- "5|功能|具备其他功能|应具备 I/O触发、RS-485触发、视频触发,支持电源同步; 支持频闪式卜光装置和脉冲式补光装置同步补光",
- "5|功能|具备其他功能|具备 AI深度学习算法和 GPU芯片",
- "6|高清工 业级镜 头|光圈、聚焦|手动光圈;焦距应可根据车道宽度及抓拍距离进行调整设 置,要求中心成像圆内解像力不小于 900万像素,边缘解 像力不低于中心 60%,镜头的成像尺寸应与摄像机成像靶 面尺寸相等或略大。镜头应配置电动偏振镜,具备根据环 境自动切换功能",
- "7|防护罩|防护罩类型|室外型防护罩,含底座;具备隔热防潮、防水、防尘、防 腐、防震等功能;具有加热器、支架、遮阳罩等,具有良 好的密封性和恒温等功能。",
- "7|防护罩|防护等级|≥IP66"
- ],
- "补光灯": [
- "1、配置方式:每个车道配置≥1台;补光装置必须与高清摄像设备高度匹配",
- "2、LED管芯:采用超高亮大功率白光 LED管芯,灯珠数量不少于 20颗",
- "3、功耗:30W/车道≤单台平均功耗≤50W/车道,可调",
- "4、峰值光照度:≤300lx",
- "4、(基准轴):≤300lx",
- "5、峰值光照度:应大于等于基准轴上有效光照度的 50%",
- "5、(补光区):应大于等于基准轴上有效光照度的 50%",
- "6、平均光照度:≤50lx",
- "7、闪光频率:≥50Hz;补光装置应能与集成式高清摄像设备同步",
- "8、有效补光距离:≥25m",
- "9、最大点亮时间:≤4ms(可调节)",
- "10、控制方式:电平,同步触发方式",
- "11、安全性:在保证瞬时亮度的前提下,必须进行防炫目处理,不会造成光污染",
- "12、使用寿命:≥50000小时",
- "13、防护等级:不低于 IP65",
- "14、其它:应配置光栅装置或遮光阻断装置"
- ],
- "闪光灯": [
- "1、色温范围 5500±500K。",
- "2、补光距离 16m~30m。",
- "3、回电时间≤60ms,满足相机 2张连拍需求。",
- "4、闪光灯寿命>500万次。",
- "5、自带光敏控制,可根据环境亮度自动调节闪光强度。",
- "6、防护等级 IP66。",
- "7、在-20℃~70℃温度范围内均能正常工作。"
- ],
- "光纤收发器": [
- "1、1路千兆以太网。",
- "2、单模单纤,光接口为 FC接口,满足实际传输距离要求。",
- "3、10/100/1000M自适应以太网接口。",
- "4、工作环境适应性强,满足全天候使用的要求。",
- "5、耐压≥300V。"
- ],
- "交换机": [
- "1、交换容量≥6Gbps,包转发率≥7Mpps;MAC地址列表≥8K;应具备线性转发能力;",
- "2、应至少具有 8个 10/100/1000M自适应以太网接口和至少 2个 1000M光口;",
- "3、以太网光端口传输距离应不小于 40km,以太网光模块为单芯双向光模块,光口接口类型为 LC型接口,光模块连接单模光纤;",
- "4、至少支持 IEEE802.1p、IEEE802.1q、IEEE802.3、IEEE802.3u、IEEE802.3z、IEEE802.3x等协议;",
- "5、应具有 IEEE802.1Q VLAN,应实现信号控制独立传输,至少支持 4个 VLAN划分;",
- "6、应至少支持三层动态路由协议;",
- "7、应具有 IEEE802.1p_QOS功能;",
- "8、应具有 IGMP静态组播、端口聚合、端口镜像等功能;",
- "9、IP40以上等级防护;",
- "10、应采用无风扇设计;",
- "11、应具有网管功能。"
- ],
- "终端服务器": [
- "1、结构形式:采用嵌入式架构;",
- "2、操作系统:嵌入式操作系统;",
- "3、接入路数:提供≥8路高清摄像机视频存储、过车记录存储、图片存储、数据上传、视频流转发等;",
- "4、主机存储:内置 SATA接口;配置存储容量≥16T硬盘 ;",
- "5、网络接口:提供≥8个 RJ45 1000M网络接口;",
- "6、其他接口:提供 RS232、RS485、外置 USB接口、VGA接口等;",
- "7、访问操作:支持 Web操作访问;",
- "8、接口协议:至少支持 ONVIF,GB/T28181等;",
- "9、API接口开放支持;支持标准 ONVIF协议与第三方厂家设备进行互通;支持 GB/T 28181。"
- ]
- },
- "区间测速子系统": {
- "系统功能": [
- "(1)卡口记录功能:捕获正常行驶车辆的过车图片,抓拍率≥95%;",
- "(2)逆行记录功能:对逆向行驶的违法车辆进行检测、抓拍记录与识别;",
- "(3)压线行驶记录功能:对压线行驶的违法车辆进行检测、抓拍记录与 识别,其主要针对在连续一段时间内压车道线行驶的车辆,此类车辆会影响前后 车驾驶员的判断,干扰前后车的正常形式;",
- "(4)车身颜色识别功能:可自动对车身深浅和颜色进行识别,可供用户 根据车身颜色来查询通行车辆;",
- "(5)车牌号码自动识别:对符合“GA36-2014”标准的民用车牌、新能 源车辆、警用车牌、使领馆车牌的号牌自动识别能力;",
- "(6) ▲闯禁行记录功能:对违反禁止通行的车辆,进行检测、抓拍记录 与识别;",
- "(7)图像防纂改功能:记录的原始图像信息具备防纂改功能,避免在传 输存储、处理等过程中被认为篡改;",
- "(8) ★测速功能:与测速设备配套使用,监控车辆行驶的速度,对超速 行驶的车辆进行抓拍;",
- "(9)未系安全带检测功能:采用视频检测技术,对未系安全带行为进行 检测,抓拍记录与识别;",
- "(10)接打电话检测功能:采用视频检测技术,实现对前排驾驶人接打电 话状态的检测,抓拍记录与识别;",
- "(11)人脸特征抠图:采用视频检测技术对驾驶室人脸特征进行检测,并 将人脸特征抠出,为公安交通管理和刑侦案件侦破提供技术支持。"
- ],
- "高清视频抓拍像机": [
- "1|摄像机|有效像素|≥900W像素",
- "1|摄像机|最低照度|彩色≤0.001lx",
- "1|摄像机|传感器类型|≥1英寸全局曝光 COMS/GMOS/GS COMS",
- "1|摄像机|电子快门|至少满足 1/25s至 1/100,000s,可调",
- "2|视频图 像|视频压缩标准|至少支持 H264、H265等",
- "2|视频图 像|视频分辨率|≥4096×2160,向下可设置",
- "2|视频图 像|视频流帧率|≥25fps,至少双视频流",
- "3|视频图 像|图片压缩方式|JPEG",
- "3|视频图 像|图像分辨率|≥4096(H)×2160(V)",
- "3|视频图 像|强光抑制|具备",
- "4|协议|API接口开放|具备;支持标准 ONVIF协议与第三方厂家设备进行互联; 支持 GB/T28181;应提供 SDK",
- "5|接口|通讯接口|≥1个 RJ45,10M/100M/1000M自适应以太网电口;≥1 个 RS-485接口",
- "5|接口|前端存储卡|嵌入式,支持断网时本地存储,裸容量≥128GB",
- "5|功能|具备其他功能|应具备 I/O触发、RS-485触发、视频触发,支持电源同步; 支持频闪式卜光装置和脉冲式补光装置同步补光",
- "5|功能|具备其他功能|具备 AI深度学习算法和 GPU芯片",
- "6|高清工 业级镜 头|光圈、聚焦|手动光圈;焦距应可根据车道宽度及抓拍距离进行调整设 置,要求中心成像圆内解像力不小于 900万像素,边缘解 像力不低于中心 60%,镜头的成像尺寸应与摄像机成像靶 面尺寸相等或略大。镜头应配置电动偏振镜,具备根据环 境自动切换功能",
- "7|防护罩|防护罩类型|室外型防护罩,含底座;具备隔热防潮、防水、防尘、防 腐、防震等功能;具有加热器、支架、遮阳罩等,具有良 好的密封性和恒温等功能。",
- "7|防护罩|防护等级|≥IP66"
- ],
- "补光灯": [
- "1、色温范围 5500±500K。",
- "2、补光距离 16m~30m。",
- "3、回电时间≤60ms,满足相机 2张连拍需求。",
- "4、闪光灯寿命>500万次。",
- "5、自带光敏控制,可根据环境亮度自动调节闪光强度。",
- "6、防护等级 IP66。",
- "7、在-20℃~70℃温度范围内均能正常工作。"
- ],
- "闪光灯": [
- "1、色温范围 5500±500K。",
- "2、补光距离 16m~30m。",
- "3、回电时间≤60ms,满足相机 2张连拍需求。",
- "4、闪光灯寿命>500万次。",
- "5、自带光敏控制,可根据环境亮度自动调节闪光强度。",
- "6、防护等级 IP66。",
- "7、在-20℃~70℃温度范围内均能正常工作。"
- ],
- "光纤收发器": [
- "1、1路千兆以太网。",
- "2、单模单纤,光接口为 FC接口,满足实际传输距离要求。",
- "3、10/100/1000M自适应以太网接口。",
- "4、工作环境适应性强,满足全天候使用的要求。",
- "5、耐压≥300V。"
- ],
- "交换机": [
- "1、交换容量≥6Gbps,包转发率≥7Mpps;MAC地址列表≥8K;应具备线性转发能力;",
- "2、应至少具有 8个 10/100/1000M自适应以太网接口和至少 2个 1000M光口;",
- "3、以太网光端口传输距离应不小于 40km,以太网光模块为单芯双向光模块,光口接口类型为 LC型接口,光模块连接单模光纤;",
- "4、至少支持 IEEE802.1p、IEEE802.1q、IEEE802.3、IEEE802.3u、IEEE802.3z、IEEE802.3x等协议;",
- "5、应具有 IEEE802.1Q VLAN,应实现信号控制独立传输,至少支持 4个 VLAN划分;",
- "6、应至少支持三层动态路由协议;",
- "7、应具有 IEEE802.1p_QOS功能;",
- "8、应具有 IGMP静态组播、端口聚合、端口镜像等功能;",
- "9、IP40以上等级防护;",
- "10、应采用无风扇设计;",
- "11、应具有网管功能。"
- ],
- "终端服务器": [
- "1、结构形式:采用嵌入式架构;",
- "2、操作系统:嵌入式操作系统;",
- "3、接入路数:提供≥8路高清摄像机视频存储、过车记录存储、图片存储、数据上传、视频流转发等;",
- "4、主机存储:内置 SATA接口;配置存储容量≥16T硬盘 ;",
- "5、网络接口:提供≥8个 RJ45 1000M网络接口;",
- "6、其他接口:提供 RS232、RS485、外置 USB接口、VGA接口等;",
- "7、访问操作:支持 Web操作访问;",
- "8、接口协议:至少支持 ONVIF,GB/T28181等;",
- "9、API接口开放支持;支持标准 ONVIF协议与第三方厂家设备进行互通;支持 GB/T 28181。"
- ]
- },
- "后台": {
- "接入服务器": [
- "1、机架式服务器;",
- "2、处理器:至少配置 2颗单颗 10核 CPU,单核 CPU主频≥2.0GHz;",
- "3、内存:配置 128GB DDR4内存;",
- "4、硬盘:配置 6块 1.2T SAS硬盘,转速≥10Krpm;",
- "5、RAID:配置 RAID控制器,支持 RAID0、1、10、1E、5、50、60等;",
- "6、网络:配置双千兆网卡;",
- "7、电源:双电源;"
- ],
- "存储服务器": [
- "1、4U 48盘位磁盘阵列;",
- "2、单设备配置 64位多核处理器;",
- "3、16GB缓存;",
- "4、冗余电源;",
- "5、支持 SATA硬盘;",
- "6、2个千兆网口;",
- "7、1个系统 SSD盘;",
- "8、支持视音频、图片、直接写入,支持视频高速预览、回放、下载,支持云内容灾备 份,支持一体化运维,支持 GB/T28181-2011、Onvif、RTSP、H265、SVAC等标准视频协议。"
- ],
- "硬盘": [
- "4T,3.5寸,SATA"
- ]
- },
- "室外挂箱": [
- "1、采用悬挂式安装方式,悬挂于杆件立柱,高度应确保机箱下边缘距离地面净高 2.5 米以上。设备机箱安装后不得侵入机动车道建筑界限以内,不得影响车辆正常通行。设备机 箱应安装牢固;",
- "2、设备机箱表面应经过考漆处理,应具备防锈蚀、防盐雾、防霉菌能力;",
- "3、应能摆放通信接入端设备。机箱内部空间应足够大,能确保设备、装置的合理摆放, 设有存放用户手册、说明书、接线图、维修记录等资料的存储盒,并有适当空间预留。机箱 空间应有利于机箱内各设备单元的散热、安装、使用和维修,同时应提供设备辅助散热措施, 提高系统环境适应能力;",
- "4、设备机箱的结构应能防雨并能降低灰尘及有害物质的侵入,机箱门盖应有溢水槽, 机箱门内侧应配备密封条,机箱顶部应具有防积水措施。机箱防护等级应达到 IP55以上;",
- "5、机箱结构应具有足够的机械强度,应能承受正常条件下可预料到的运输、安装、搬 运、维护等过程中的操作;",
- "6、机箱门的最大开启角度应大于 120°。机箱门锁应采用保险柜天地锁式的结构设计 防止被非法打开,门锁至少可对上、下及左右侧中的一侧进行缩栓式保护,应具备较强的设 备防砸、防盗能力。机箱应具有防盗报警功能,机箱在非正常状态下开启时能够报警提示。机箱门接缝处有耐久且有弹性的密封垫,密封垫连续设置,无间断接口。机柜门锁上后,无 松动、变形现象;",
- "7、设备机箱内设应置有具备稳压、过载、漏电、短路保护功能的电源开关和防雷保护 功能的电源浪涌保护器。在熔断器和电源开关等处应有警告标志。机箱内合适位置配备接地 铜排,接地铜排的截面应不小于 100 mm2,接地端子应进行防腐处理。并应设置接地标志; 接地铜排应保证良好接地,接地线截面积应不小于 16mm2;",
- "8、机箱内应配备不少于 2路单相 2孔扁圆电源插座、2路单相 3孔扁圆电源插座;",
- "9、电源开关:应具有稳压、短路、过载、漏电保护;电源保护响应时间应为纳秒级; 开关的额定电压、额定电流值应满足设备正常运行的要求;机械寿命应不少于 20000次;具 有良好的散热性能。",
- "10、室外大机箱需满足上述使用外,还应可安装前端管理主机。"
- ],
- "交通管道": []
- }
- },
- "服务要求": {
- "分级权限管理功能": "根据人员岗位不同设置不同的角色,并依据岗位职能给角色分配相应的权限,从而实现用户权限管理,防止关键数据的泄漏。",
- "数据备份与恢复功能": "系统数据能导出数据库并保存在指定地址,需要时能由在指定地址保存的数据及时恢复;当网络出现异常时,将每个通道车辆进出数据存放于客户端, 网络恢复正常后,客户端存放的临时数据自动上传至服务器。",
- "车牌识别功能": "通过车牌识别仪实现车辆进出图像抓拍和车牌识别功能、提高内部车辆通行效率;",
- "支持断网及联网状态运行": "系统须支持网络中断状态和正常联网运行。若运行期间发生网络中断,前端系统能够自动检测网络状态,待网络恢复后及时将数据自动上传到管理系统服务器上。"
- },
- "商务要求": {
- "设备的运输、安装、调试、试运行和验收": "投标人应负责设备的包装、运输、安装、调试及试运行。投标人在设备安装、调试、试运行期间,必须指定至少一名现场执证技术负责人员,负责上述工作。投标人负责调试和试运行的结果必须符合采购人的技术要求,同时也应达到行业有关技术规范的要求。验收标准以相关行业标准及合同确定的标准为准。",
- "技术标准和规范": "投标人所提供的设备的全部技术性能 均须达到并优于有关该类设备制造与安装的国家标准。如果投标人同时采用其他有关标准,应保证设备技术性能达到并优于国家标准。",
- "技术资料的提供": "投标人应提供设备的所有资料文件。投标人应提供中文版的设备样本和产品技术性能条件说明书。产品出厂检验合格证书、产品出产国本土商会证明、产品报关文件。备品备件目录。",
- "备件": "投标人应提供一个保质期满后,在正常使用下保证设备长期稳定运行的备件 和材料清单,并标明其种类、生产厂家、单价和总价。采购人有权选择备件。",
- "易损件": "投标人应提供一个易损易耗件清单,并标明 用途、生产厂、订货编号、使用寿命和单价。",
- "出厂检验": "设备出厂前,投标人应对设备进行检验和试运转,并在 两周内将所有检验证书和报告提交采购人。但此类检验和试运转不能替代现场最终接收时的检验和试运转。",
- "现场培训": "投标人必须免费提供用户单位 1-2 名技术人员进行 培训,并到达合格要求。投标人应在设备调试完毕后进行现场培训,应安排工程师给予指导,并对采购人的技术人员、 操作人员和维护人员进行实际操作培训。",
- "售后服务": "本项目质保期为三年;投标人提供的设备质量保证期,时间从最终验收合格交付准用证之日起计算。在质量保证期内,由于设备本身质量原因造成的任何损失或损坏,投标人须免费负责更换。质量保证期满后,投标人必须对所提供的设备定期进行检查和保养,并负责终身维护。对于损坏的零部件,投标人应保证以不高于在设备出产地购买的一般价格提供给采购人。"
- },
- "其他要求": {
- "项目建设依据及相关规范": "系统规划设计必须按照国际、国家和本地区的有关标准和规范进行。本设计将依据和参照以下的设计规范和要求进行:l 各部委下发的通知文件:《高等院校安全防范工程技术规范》湖北省教育厅、公安厅关于推进高校视频监控系统建设的通知《鄂教综治【 2014 】 2 号文》l 城市联网监控报警系统设计方面:u 《城市监控报警联网系统技术标准》( GA/T669-2008 )u 《跨区域视频监控联网共享技术规范》 DB33/T 629-2007l 安防视频监控系统设计方面:u 《安全防范视频监控联网系统信息传输、交换、控制技术要求》 GB/T28181-2011u 《中华人民共和国公安部行业标准》( GA70-94 )u 《视频安防监控系统技术要求》( GA/T367-2001 )u 《民用闭路监视电视系统工程技术规范》 (GB50198-9 4)u 《工业电视系统工程设计规范》( GBJ1 15-87 )u 《安全防范系统通用图形符号》( GA/T7 5-2000 )u 《道路交通安全违法行为图像取证技术规范》( GA/T 832 — 2009 )u 《机动车号牌图像自动识别技术规范》( GA/833-2009 )u 《建筑及建筑群综合布线工程设计规范》( GB/T50311-2000 )l 视频监控图像质量方面:54u 《电视视频通道测试方法》( GB3659-83 )u 《彩色电视图像质量主观评价方法》( GB7401-1987 )l 视频系统网络设计方面:u 《信息技术开放系统互连网络层安全协议》( GB /T 17963 )u 《计算机信息系统安全》( GA 216.1 - 1999 )u 《计算机软件开发规范》( GB8566-88 )l 视频系统工程建设方面u 《安全防范工程程序与要求》( GA/T75-94 )u 《安全防范工程技术规范》 (GB 50348-2004)u 《电子计算机机房设计规范》 (GB50174-93 )u 《建筑物防雷设计规范》 (GB50057-94)u 《建筑物电子信息系统防雷技术规范》 (GB50343-2004)u 《安全防范系统雷电浪涌防护技术要求》 (GA/T670-2006)u 《民用建筑电气设计规范》 (JGJ/T16-92)"
- }
- },
- "关键时间/内容": {
- "投标文件递交截止日期": "2021年12月1日点分",
- "投标文件递交地点": "广水市公共资源交易中心五楼号开标室",
- "开标时间": "www",
- "开标地点": "广水市公共资源交易中心五楼号开标室",
- "澄清招标文件的截止时间": "未知",
- "投标有效期": "提交投标文件截止之日起 60日历日",
- "信息公示媒介": [
- {
- "名称": "中国湖北政府采购网",
- "网址": "http://www.ccgp-hubei.gov.cn/"
- },
- {
- "名称": "中国广水网",
- "网址": "http://www.zggsw.gov.cn/"
- }
- ]
- },
- "保证金相关": {
- "是否提交履约保证金": "未知",
- "质量保证金": "未知"
- },
- "其他信息": {
- "投标费用承担": "投标人应承担所有与准备和参加投标有关的费用。不论投标的结果如何,分散采购机构和采购人均无义务和责任承担这些费用。",
- "招标代理服务费": {
- "收费标准": "服务费按国家规定收费标准按国家发展改革委关于印发《招标代理服务收费管理暂行办法》的通知(计价格[2002]1980 号)执行。",
- "支付方": "中标方",
- "支付时间": "政府采购代理缴纳中标服务费"
- },
- "是否退还投标文件": "否",
- "踏勘现场": "不组织",
- "投标预备会": "不召开",
- "偏离": {
- "商务要求响应、偏离说明表": "第七章投标文件格式(参考)附件十二",
- "商务要求“★”号条款响应、偏离说明表": "第七章投标文件格式(参考)附件十三",
- "技术、服务要求响应、偏离说明表": "第七章投标文件格式(参考)附件十五",
- "技术、服务要求“★”号条款响应、偏离说明表": "第七章投标文件格式(参考)附件十六",
- "偏离项处理": "投标文件中应详细说明偏离项的具体内容及原因,未按要求提供偏离说明的,可能导致投标无效"
- }
- }
+ "招标人/代理信息": {
+ "招标人": "见招标公告",
+ "招标人联系方式": {
+ "名称": "见招标公告",
+ "联系电话": "见招标公告",
+ "地址": "见招标公告"
},
- "投标文件要求": {
- "投标文件": {
- "投标的语言": {
- "投标的语言": "投标人提交的投标文件以及投标人与分散采购机构或采购人就有关投标的所有来往函电均应使用中文。投标人提交的相关证明文件、资料或文献可以用另一种语言,但相应内容应附有中文翻译本,在解释投标文件的相关内容时以中文翻译本为准。"
- },
- "投标文件的构成": {
- "投标文件的构成": "投标人编制的投标文件应包括但不限于下列内容:第一部分资格证明文件(详见第七章“投标文件格式”中资格证明文件组成)第二部分商务文件(详见第七章“投标文件格式”中商务文件组成)第三部分技术、服务文件(详见第七章“投标文件格式”中技术、服务文件组成).投标文件编制"
- },
- "11": [
- "如招标文件有分包要求,投标人对招标文件中多个包进行投标的,其投标文件的编制应按每包要求分别装订和封装,并注明对应包号。",
- "投标人应当对投标文件进行装订,供应商应仔细阅读招标文件的所有内容,按招标文件的要求提供响应招标文件内容的投标文件且装订成册(投标文件正本须用不能擦去的墨水书写或打印,投标文件副本可以复印,其正、副本都应装订成册,并在封面上正确标明“正本”、“副本”字样。每页页码要按先后顺序打印或用不能擦去的墨水书写,不得采用活页夹等可随时拆换的方式装订,不允许出现活页、漏页、错页和夹页,不允许将多包合编或合订在一起,否则作为不合格投标文件处理),并保证所提供的全部资料的真实性、合法性,从而使其投标文件对招标文件做出实质性的响应,否则,其投标文件将被拒绝。由此产生的后果及责任由投标人自行承担。",
- "投标人应按照招标文件第七章“投标文件格式”提供的《投标书》、《开标一览表》、《投标报价明细表》、《法定代表人授权书》等格式、要求、规定来编制投标文件。",
- "投标人应对投标文件中所提供资料的真实性负责,如有虚假,将依法承担相应责任。投标人应自觉接受分散采购机构对其中任何资料进一步核实的要求。",
- "因投标人投标文件填报的内容不详,或没有提供招标文件中所要求的全部资料及数据等,由此产生的后果及责任由投标人自行承担。",
- "投标文件用纸应统一为A4规格(图纸除外)。",
- "投标人应将投标文件第一部分资格证明文件、第二部分商务文件、第三部分技术、服务文件分册编制装订,分别逐页连续标注页码,建立目录索引。各部分文件及内容详见第七章“投标文件格式”要求。"
- ],
- "投标报价": {
- "投标人所提供的货物(工程或服务)均以人民币计价。": [],
- "投标人应按照“第三章项目技术、服务及商务要求”规定的货物(工程或服务)内容、责任范围以及合同条款进行报价。并按照《开标一览表》和《投标报价明细表》的格式报出分项价格和投标总价。报价上的优惠应体现在各分项报价中,投标总价应为优惠后的最终报价。投标总价中不得包含招标文件要求以外的内容,否则,在评标时不予核减。": [],
- "《投标报价明细表》填写时应响应下列要求:": [
- "应包括所有根据合同或其他原因由投标人支付的款项、费用;",
- "应包含货物运至最终目的地的运输、保险和伴随货物(工程或服务)的有关费用;",
- "应详细提供《投标报价明细表》和《投标货物、服务清单》等内容,否则按照无效投标处理。"
- ],
- "每一种规格的货物(工程或服务)只允许有一个报价,否则按照无效投标处理。": [],
- "投标人的投标总报价在合同执行过程中是固定不变的,不得以任何理由予以变更。故投标人的投标总报价应包含本招标内容全部工作所需的一切费用,即投标总报价为“交钥匙”价。对在合同实施过程中可能发生的其它费用(如:增加耗材、材料涨价、人工、运输成本增加等因素),采购人不予支付。": [],
- "对于招标文件未列明,而投标人认为必需的费用也需列入其投标总价。在合同实施时,采购人将不予支付投标人没有列入的项目费用,并认为此项目的费用已包括在其投标总价中。": [],
- "投标人应对项目招标范围内的全部内容进行报价,不得缺、漏项或只投其中的部分内容的,否则按照无效投标处理。": []
- },
- "备选方案": {
- "备选方案": "只允许投标人提供一个投标方案(招标文件中要求提供备选方案的除外),否则按照无效投标处理。"
- },
- "中标后分包": {
- "中标后分包": "招标文件规定项目非主体、非关键性工作中标后可以分包的,投标人拟在中标后将项目的非主体、非关键性工作分包,应当在投标文件中载明具备相应资质条件的分包承担主体,分包承担主体不得再次分包。"
- },
- "联合体投标": [
- "两个及以上供应商可以组成一个联合体,以一个投标人的身份共同参与投标。",
- "采取联合体形式投标的,联合体各方均应当符合政府采购法第二十二条第一款规定的条件。联合体的主体应完全满足项目投标人资格要求。",
- "联合体各方之间应签订联合投标协议,明确约定联合体主体及各方承担的工作和相应的责任,其投标文件中应提供联合投标协议。",
- "以联合体形式参加政府采购活动的,联合体各方不得再单独参加或者与其他供应商另外组成联合体参加同一合同项下的政府采购活动。",
- "采取联合体形式投标的,其投标文件应由联合体所有成员或其各自正式书面授权的代表签署(盖章),以便对所有成员作为整体及作为个体均具有法律约束力。",
- "采取联合体形式投标的,项目评审时只对联合体主体进行评议。",
- "联合体中标的,联合体各方应当共同与采购人签订采购合同,就采购合同约定的事项对采购人承担连带责任,联合体主体单位负主要责任。",
- "联合体中有同类资质的供应商按照联合体分工承担相同工作的,应当按照资质等级较低的供应商确定资质等级。",
- "招标文件第一章“投标人资格要求”中未载明是否接受联合体投标的,视同接受。",
- "以联合体形式参与投标的,其价格扣除相关规定详见第五章“评标方法、程序及标准”。"
- ],
- "资格证明文件": [
- "投标人应按本节及第四章“资格审查方法及标准”的要求,提供足以证明其符合项目“投标人资格要求”且中标后有能力履行合同的文件,并作为其投标文件的组成部分。",
- "资格证明文件应真实、合法,并就此承担相应法律责任。",
- "资格证明文件正本应为清晰彩色影印件且加盖单位公章,否则按照无效投标处理。副本可为正本的复印件,但应在副本封面加盖单位公章。"
- ],
- "投标有效期": [
- "投标有效期详见本章“投标须知前附表”中规定。投标文件中承诺的投标有效期应当不少于招标文件中载明的投标有效期。投标有效期不足的,按照无效投标处理。",
- "特殊情况下,在原投标有效期截止之前,分散采购机构或采购人可要求投标人延长投标有效期。这种要求与答复均应以书面形式提交。投标人可拒绝分散采购机构或采购人的这种要求,但其投标在原投标有效期期满后将不再有效。同意延长投标有效期的投标人不会被要求和允许修正其投标内容,而只会被要求相应地延长其投标保证金的有效期。"
- ],
- "投标文件的数量和签署": [
- "投标人应按本章“投标须知前附表”中规定的份数要求编制投标文件,投标文件的副本可为正本的复印件,但应在副本封面加盖单位公章。每套投标文件应清楚地标明“正本”、“副本”。副本与正本不一致的,以正本为准。",
- "投标文件的正本应打印或用不褪色墨水书写,应由法定代表人或经其正式授权的代表签字或盖章。由被授权代表签字或盖章的,应以书面形式出具授权证明,其《法定代表人授权书》应附在投标文件中。",
- "投标文件中任何涂改和增删,应由法定代表人或经其正式授权的代表在旁边签字后方为有效。",
- "招标文件中要求加盖公章及签字(签章)之处,投标文件正本中应按要求提供加盖公章及签字(签章)的原件,否则按照无效投标处理。"
- ],
- "投标文件的密封和标记": [
- "投标人应将投标文件第一部分资格证明文件、第二部分商务文件、第三部分技术、服务文件分册装订。",
- "投标人应将投标文件各部分正本和各部分副本分开或合装在密封袋内。副本与正本不一致的,以正本为准。",
- "如果未按要求加写密封、标记或存在错误,分散采购机构对其误投或提前启封概不负责。",
- "为方便开标时唱标,投标人应将《开标一览表》原件一份装入信封,单独密封提交,并在信封上标明“开标一览表”字样。未单独提交或单独提交的上述资料未按照招标文件规定的格式填写完整并签字、盖章的分散采购机构拒绝其投标。",
- "“开标一览表”信封和投标文件的封包上应注明采购项目编号、项目名称、投标内容和有“在(招标文件中规定的开标日期和时间)之前不得启封”的字样,封口处加盖投标人公章。"
- ],
- "投标文件递交": [
- "投标人应在不迟于投标邀请书中规定的投标截止日期和时间将投标文件密封递交至分散采购机构规定的投标地点。",
- "分散采购机构拒收逾期送达或者未按招标文件要求密封的投标文件。",
- "分散采购机构收到投标文件后,应当如实记载投标文件的送达时间和密封情况,签收保存。"
- ],
- "投标文件的修改和撤回": [
- "投标人在投标截止时间前,可以对所递交的投标文件进行补充、修改或者撤回,并书面通知分散采购机构。补充、修改的内容应当按照招标文件要求签署、盖章、密封后,作为投标文件的组成部分。",
- "投标有效期内投标人不得撤销其投标文件。",
- "投标人所递交的投标文件无论中标与否不予退还。投标人所递交的投标文件无论中标与否不予退还。"
- ]
- }
+ "招标代理机构": "见招标公告",
+ "招标代理机构联系方式": {
+ "名称": "见招标公告",
+ "联系电话": "见招标公告",
+ "地址": "见招标公告"
+ }
+ },
+ "项目信息": {
+ "项目名称": "见招标公告第2条,项目概况与招标范围",
+ "项目编号": "未知",
+ "项目概况": {
+ "招标项目名称": "见招标公告第2条,项目概况与招标范围",
+ "工程项目名称": "见招标公告第2条,项目概况与招标范围"
},
- "开评定标流程": {
- "开标与评标": {
- "开标": [
- "分散采购机构在第一章“投标邀请书”中约定的日期、时间和地点组织公开开标。开标时采购人和投标人代表(投标人法定代表人或其授权代表)参加,参加开标的代表应签到以证明其出席。",
- "投标人法定代表人或其授权代表应携带有效身份证明参加项目开标会,投标人未参加开标的,视同认可开标结果。截止投标文件递交时间,投标人不足3家的,不进行开标。",
- "开标时,由投标人相互检查投标文件的密封情况,经确认无误后由分散采购机构工作人员当众拆封,宣布投标人名称、投标价格和招标文件规定的需要宣布的其他内容。",
- "投标人代表对开标过程和开标记录有疑义,以及认为采购人、分散采购机构相关工作人员有需要回避的情形的,应当场提出询问或者回避申请。采购人、分散采购机构将及时处理投标人代表提出的询问或者回避申请。"
- ],
- "资格审查": [
- "公开招标采购项目开标结束后,采购人与分散采购机构依据法律、法规及招标文件的规定,对投标人的资格进行审查,以确定投标人资格是否合格。合格投标人不足3家的,不进行评标。",
- "资格审查详见第四章“资格审查方法及标准”。"
- ],
- "评标方法": [
- "最低评标价法。最低评标价法是指投标文件满足招标文件全部实质性要求,且投标报价最低的投标人为中标候选人的评标方法。",
- "综合评分法。综合评分法是指投标文件满足招标文件全部实质性要求,且按照评审因素的量化指标评审得分最高的投标人为中标候选人的评标方法。",
- "评标方法详见第五章“评标方法、程序及标准”。"
- ],
- "评标委员会的组成": [
- "评标委员会由采购人代表和评审专家组成,成员人数应当为5人及以上单数,其中评审专家不得少于成员总数的三分之二;采购预算金额在1000万元及以上、技术复杂或社会影响较大的项目,评标委员会成员人数应当为7人及以上单数。",
- "评标委员会成员依法从政府采购专家库中随机抽取。对技术复杂、专业性强的采购项目,通过随机方式难以确定合适评审专家的,经主管预算单位同意,采购人可以自行选定相应专业领域的评审专家。"
- ],
- "评标程序": {
- "评标委员会负责具体评标事务,并独立履行下列职责:": [
- "审查、评价投标文件是否符合招标文件的商务、技术等实质性要求;",
- "要求投标人对投标文件有关事项作出澄清或者说明;",
- "对投标文件进行综合比较和评价;",
- "确定中标候选人名单或中标人;",
- "向采购人、分散采购机构或者有关部门报告评标中发现的违法行为。"
- ],
- "评标程序详见第五章“评标方法、程序及标准”。评标程序详见第五章“评标方法、程序及标准”。": []
- }
- },
- "中标与合同": {
- "确定中标人": {
- "采购人收到评标报告5个工作日内,按评标报告推荐的中标候选人顺序确定中标人。": [],
- "中标候选人并列的:": [
- "采用最低评标价法的,评标结果按投标报价由低到高顺序排列。投标报价相同的并列,由采购人确定或者采购人委托评标委员会以投票方式确定中标人。",
- "采用综合评分法的,评标结果按评审后得分由高到低顺序排列。得分相同的,按投标报价由低到高顺序排列。得分且投标报价相同的并列,由采购人确定或者采购人委托评标委员会以投票方式确定中标人。28.2中标人的数量有其他规定的,按招标文件相关规定执行。"
- ],
- "中标人确定后,分散采购机构在政府采购监管部门指定的媒体上发布中标公告,中标人在中标结果公示后2个工作日内到分散采购机构领取《中标通知书》。《中标通知书》是政府采购合同的组成部分,对中标人和采购人具有同等法律效力。": [],
- "中标通知书发出后,采购人不得违法改变中标结果,中标人无正当理由不得放弃中标。": [],
- "中标人拒绝与采购人签订合同的,采购人可以按照评标报告推荐的中标候选人名单排序,确定下一候选人为中标人,也可以重新开展政府采购活动。": []
- },
- "合同授予": {
- "合同授予": "除本章“确定中标人”规定及其他法律规定的情形外,采购人把合同授予被确定为实质上响应招标文件要求且排名第一的中标人。"
- },
- "合同签订": [
- "采购人应当自中标通知书发出之日起30日内,按照招标文件规定和中标人投标文件的承诺,与中标人签订书面合同。所签订的合同不得对招标文件确定的事项和中标人投标文件作实质性修改。",
- "采购人不得向中标人提出任何不合理的要求作为签订合同的条件。",
- "政府采购合同应当包括采购人与中标人的名称和住所、标的、数量、质量、价款或者报酬、履行期限及地点和方式、验收要求、违约责任、解决争议的方法等内容。",
- "采购人与中标人应当根据合同的约定依法履行合同义务。政府采购合同的履行、违约责任和解决争议的方法等适用《中华人民共和国合同法》。",
- "采购人应当自政府采购合同签订之日起2个工作日内,将政府采购合同在省级以上人民政府财政部门指定的媒体上公告,但政府采购合同中涉及国家秘密、商业秘密的内容除外。",
- "采购人应当加强对中标人的履约管理,并按照采购合同约定,及时向中标人支付采购资金。对于中标人违反采购合同约定的行为,采购人应当及时处理,依法追究其违约责任。采购人应当加强对中标人的履约管理,并按照采购合同约定,及时向中标人支付采购资金。对于中标人违反采购合同约定的行为,采购人应当及时处理,依法追究其违约责任。"
- ]
- }
+ "项目基本情况": {
+ "资金来源及比例": "见招标公告",
+ "资金落实情况": "已落实",
+ "招标范围": "见招标公告",
+ "交货期": "见招标公告",
+ "交货地点": "见招标公告",
+ "技术性能指标": "见第五章供货要求和第四章合同条款及格式。已正式出版发行的最新的国家电网有限公司技术要求文件将作为招标文件的补充部分,招标文件技术规范有明确规定的,以技术规范为准,技术规范没有明确规定的,评标委员会将参考技术要求文件评审,投标文件不符合国家电网有限公司技术要求文件规定的主要技术要求的,将被视为实质性不响应招标文件。",
+ "投标人资质条件、能力、信誉": "见招标公告第3条,投标人资格要求",
+ "是否接受联合体投标": "见招标公告资格要求"
},
- "无效标与废标项": {
- "否决和无效投标情形": [
- "应详细提供《投标报价明细表》和《投标货物、服务清单》等内容,否则按照无效投标处理。",
- "只允许投标人提供一个投标方案(招标文件中要求提供备选方案的除外),否则按照无效投标处理。",
- "分,“★”指标不符合招标文件技术参数的视为无效投标,针对“★”指标,投标人须对应招标文件第三章商务技术要求产品参数要求逐条提供包括但不限于第三方产品检测报告、产品技术白皮书、产品官网或公开的技术资料等佐证资料,并加盖产品制造商公章;“▲”指标不满足招标文件第三章商务技术要求产品参数要求的每项扣",
- "本表应按要求由投标人法人授权代表签字,并加盖投标单位公章,否则将被视为非响应性投标,将按照无效投标处理。",
- "审查不合格作无效投标处理。",
- "的要求提供响应招标文件内容的投标文件且装订成册(投标文件正本须用不能擦去的墨水书写或打印,投标文件副本可以复印,其正、副本都应装订成册,并在封面上正确标明“正本”、“副本”字样。每页页码要按先后顺序打印或用不能擦去的墨水书写,不得采用活页夹等可随时拆换的方式装订,不允许出现活页、漏页、错页和夹页,不允许将多包合编或合订在一起,否则作为不合格投标文件处理),并保证所提供的全部资料的真实性、合法性,从而使其投标文件对招标文件做出实质性的响应,否则,其投标文件将被拒绝。",
- "所递交的资格证明文件出现不符合下列情形之一或不足以证明其符合下列情形之一的,应视为资格审查不合格,并按照无效投标处理:",
- "资格证明文件正本应为清晰彩色影印件且加盖单位公章,否则按照无效投标处理。",
- "容的,否则按照无效投标处理。",
- "投标有效期详见本章“投标须知前附表”中规定。投标文件中承诺的投标有效期应当不少于招标文件中载明的投标有效期。投标有效期不足的,按照无效投标处理。",
- "修正后的报价按照本节第4条规定经投标人确认后产生约束力,投标人不确认的,按照无效投标处理。",
- "法律、法规和招标文件规定的其他无效投标情形。",
- "的报价,有可能影响产品质量或者不能诚信履约的,应当要求其在评标现场合理的时间内提供书面说明,必要时提交相关证明材料;投标人不能证明其报价合理性的,评标委员应当将其作为无效投标处理。",
- "每一种规格的货物(工程或服务)只允许有一个报价,否则按照无效投标处理。",
- "招标文件中要求加盖公章及签字(签章)之处,投标文件正本中应按要求提供加盖公章及签字(签章)的原件,否则按照无效投标处理。",
- "评标委员会应当对符合资格的投标人的投标文件进行符合性审查,以确定其是否满足招标文件的实质性要求。符合性审查出现下列情形之一的投标按照无效投标处理:"
- ],
- "废标项": "",
- "不得存在的情形": [
- "投标人应按照“第三章项目技术、服务及商务要求”规定的货物(工程或服务)内容、责任范围以及合同条款进行报价。并按照《开标一览表》和《投标报价明细表》的格式报出分项价格和投标总价。报价上的优惠应体现在各分项报价中,投标总价应为优惠后的最终报价。投标总价中不得包含招标文件要求以外的内容,否则,在评标时不",
- "投标人应对项目招标范围内的全部内容进行报价,不得缺、漏项或只投其中的部分内",
- "说明:1、组成联合体的大中型企业和其他自然人、法人或者其他组织,与残疾人福利性单位之间不得存在投资关系。",
- "“开标一览表”信封和投标文件的封包上应注明采购项目编号、项目名称、投标内容和有“在(招标文件中规定的开标日期和时间)之前不得启封”的字样,封口处加盖投标人公章。",
- "除单一来源采购项目外,为采购项目提供整体设计、规范编制或者项目管理、监理、检测等服务的供应商,不得再参加该采购项目的其他采购活动。",
- "的要求提供响应招标文件内容的投标文件且装订成册(投标文件正本须用不能擦去的墨水书写或打印,投标文件副本可以复印,其正、副本都应装订成册,并在封面上正确标明“正本”、“副本”字样。每页页码要按先后顺序打印或用不能擦去的墨水书写,不得采用活页夹等可随时拆换的方式装订,不允许出现活页、漏页、错页和夹页,不允许将多包合编或合订在一起,否则作为不合格投标文件处理),并保证所提供的全部资料的真实性、合法性,从而使其投标文件对招标文件做出实质性的响应,否则,其投标文件将被拒绝。",
- "为本采购项目提供整体设计、规范编制或者项目管理、监理、检测等服务的,不得再参加本项目的其他招标采购活动。",
- "投标人的投标总报价在合同执行过程中是固定不变的,不得以任何理由予以变更。",
- "以联合体形式参加政府采购活动的,联合体各方不得再单独参加或者与其他供应商另外组成联合体参加同一合同项下的政府采购活动。",
- "单位负责人为同一人或者存在直接控股、管理关系的不同供应商,不得参加同一合同项下的政府采购活动。",
- "投标有效期内投标人不得撤销其投标文件。",
- "投标人应按照评标委员会要求的澄清内容在规定时间内做出澄清。投标文件报价出现前后不一致的,按照本节第3条规定进行修正,投标人的澄清、说明或者补正不得超出投标文件的范围或者改变投标文件的实质性内容。",
- "说明:1、组成联合体的大中型企业和其他自然人、法人或者其他组织,与小型、微型企业之间不得存在投资关系。",
- "经采购人允许,潜在投标人可进入项目现场进行考察,但潜在投标人不得因此使采购人承担有关责任和蒙受损失。",
- "招标文件规定项目非主体、非关键性工作中标后可以分包的,投标人拟在中标后将项目的非主体、非关键性工作分包,应当在投标文件中载明具备相应资质条件的分包承担主体,分包承担主体不得再次分包。",
- "单位负责人为同一人或者存在直接控股、管理关系的不同投标人,不得参加本项目同一合同项下的政府采购活动。"
- ]
- },
- "资格审查": {
- "资格性审查": [
- "应具备《政府采购法》第二十二条第一款规定的条件,提供下列材料:",
- "法人或者其他组织的营业执照等证明文件,自然人的身份证明(投标人根据自身情况提供对应的证明材料):
(一)法人
(1)企业法人(包括合伙企业):提供工商部门注册的有效“企业法人营业执照”或 “营业执照”;
(2)事业单位法人:提供有效的“事业单位法人证书”。
(二)其他组织
(1)非企业专业服务机构:提供执业许可证等证明文件;
(2)个体工商户:提供有效的“个体工商户营业执照”。
(三)自然人:提供有效的自然人身份证明。(仅限中国公民)",
- "财务状况报告,依法缴纳税收和社会保障资金的相关材料(投标人根据自身情况提供对应的证明材料):
(一)财务状况报告
(1)法人:提供经第三方审计的财务报告(完整的财务报告,包括“四表一注”,即资产负债表、利润表、现金流量表、所有者权益变动表及其附注),或其基本开户银行出具的资信证明;
(2)部分其他组织和自然人:没有经第三方审计的财务报告的,可以提供银行出具的资信证明;
(3)投标人没有经第三方审计的财务报告和资信证明时,也可以提供财政部门认可的政府采购专业担保机构出具的投标担保函。",
- "具备履行合同所必需的设备和专业技术能力的证明材料:
(一)提供具备足够数量的设施设备的证明材料;
(二)提供具备足够数量的技术人员的证明材料。",
- "参加政府采购活动前 3年内在经营活动中没有重大违法记录的书面声明:
(一)应严格按照附件格式提交“参加政府采购活动前三年内在经营活动中没有重大违法记录的书面声明函”;
(二)政府采购法第二十二条第一款第五项所称重大违法记录,是指供应商因违法经营受到刑事处罚或者责令停产停业、吊销许可证或者执照、较大数额罚款等行政处罚;
(三)按照财政部《关于规范政府采购行政处罚有关问题的通知》的规定,各级人民政府财政部门依法对参加政府采购活动的供应商作出的禁止参加政府采购活动等行政处罚决定在全国范围内生效。",
- "具备法律、行政法规规定的其他条件的证明材料:
(一)国家对生产和销售相关产品或提供相关服务有专门法律、行政法规规定的,则必须提供取得国家有关主管部门行政许可的证明材料。",
- "未被列入失信被执行人、重大税收违法案件当事人名单,未被列入政府采购严重违法失信行为记录名单。",
- "本项目的特定资格要求:
1.3.1未被列入“信用中国”网站(www.creditchina.gov.cn)信用服务栏失信被执行人、重大税收违法案件当事人名单和“中国政府采购”网站(www.ccgp.gov.cn)政府采购严重违法失信行为记录名单并提供网页截图以证明;
1.3.2、一包:在中国境内注册,营业执照具有电子与智能化工程专业承包相关经营范围;;
二包:投标人应是合法的具有相关施工能力的企业(必须提供热熔型道路标线涂料、交通标志牌生产制造商针对本项目的正式授权书),投标人所投标线涂料、交通标志牌应具备经国家相关质量监督检验机构检测后出具的合法有效的检测报告;",
- "法定代表人身份证明或法定代表人授权委托书原件(委托代理人需提供劳动合同和社保证明);",
- "湖北省政府采购供应商信用承诺书。",
- "不符合联合体投标相关规定和要求的;",
- "招标文件第一章“投标人资格要求”中有特殊要求的,投标人应提供其符合特殊要求的证明材料或者情况说明;",
- "投标人认为需提供的其它相关资格证明材料;",
- "资格证明文件正本应为清晰彩色影印件且加盖单位公章。"
- ],
- "符合性审查": {
- "1.投标总报价超过项目(分包)预算金额或最高限价的": "投标按照无效投标处理",
- "2.《投标书》、《开标一览表》、《投标报价明细表》未提供或不符合招标文件要求的": "投标按照无效投标处理",
- "3.工期(服务期限)、质保期不符合招标文件要求的": "投标按照无效投标处理",
- "4.出现两个或两个以上不同报价的": "投标按照无效投标处理",
- "5.出现两个或两个以上投标方案的(招标文件中要求提供备选方案的除外)": "投标按照无效投标处理",
- "6.投标报价存在缺项、漏项的": "投标按照无效投标处理",
- "7.投标有效期不足的": "投标按照无效投标处理",
- "8.正本未按要求提供加盖公章及签字(签章)的": "投标按照无效投标处理",
- "9.符合招标文件第二章“投标人须知”中39条中规定情形,以分公司形式参与投标的,法定代表人授权书未由总公司法定代表人签字(盖章)并加盖公章的": "投标按照无效投标处理",
- "10.未按要求提供招标文件第二章“十其他注意事项”中规定的书面声明的": "投标按照无效投标处理",
- "11.未提供所投货物(工程或服务)的具体参数值或功能表述,或原文复制招标文件的技术规格相关部分内容作为其投标文件的一部分的": "投标按照无效投标处理",
- "12.含有采购人不能接受的附加条件的": "投标按照无效投标处理",
- "13.未按要求提供《符合性审查对照表》、《商务要求响应、偏离说明表》、《商务要求“★”号条款响应、偏离说明表》、《商务评议对照表》和《技术、服务要求响应、偏离说明表》、《技术、服务要求“★”号条款响应、偏离说明表》、《技术、服务评议对照表》的": "投标按照无效投标处理",
- "14.法律、法规和招标文件规定的其他无效投标情形": "投标按照无效投标处理"
- }
- },
- "技术评分": {},
- "商务评分": {}
+ "招标控制价": "未知",
+ "投标竞争下浮率": "未提供"
+ },
+ "关键时间/内容": {
+ "投标文件递交截止日期": "见招标公告。",
+ "开标时间": "同投标截止时间,见招标公告",
+ "开标地点": "招标人招投标交易平台信息系统",
+ "澄清招标文件的截止时间": "未提供",
+ "投标有效期": "未提供",
+ "信息公示媒介": {
+ "中标候选人公示媒介": "招标人招投标交易平台信息系统、中国招标投标公共服务平台",
+ "评标结果异议公示媒介": "未知",
+ "中标结果公告公示媒介": "招标人招投标交易平台信息系统或以书面形式"
+ }
+ },
+ "保证金相关": {
+ "投标保证金额": "其他"
+ },
+ "其他信息": {
+ "重新招标、不再招标和终止招标": "未提供",
+ "投标费用承担": "未提供",
+ "是否退还投标文件": "未提供"
}
+}
+ extract_info=inner_post_processing(combined_data)
+ print(json.dumps(extract_info,ensure_ascii=False,indent=4))
tech_dict = {
"交通标线": [
"1)《中华人民共和国道路交通安全法实施条例》",
@@ -1558,13 +803,13 @@ if __name__ == "__main__":
"交通管道": []
}
- includes = ["基础信息", "资格审查", "商务评分", "技术评分", "无效标与废标项", "投标文件要求", "开评定标流程"]
- good_list = ['交通标线', '标志牌铝板', '标志牌版面反光膜', '标志牌杆件材料', '标志标牌安装施工工艺',
- '标志标牌安装施工安全', '交通信号灯具', '倒计时器', '信号灯灯杆', '交通信号机', '系统功能',
- '一体化高速球机', '光纤收发器', '高清视频抓拍像机', '补光灯', '交通诱导屏', '高清视频摄像机',
- 'LED补光灯', '交换机', '红绿灯信号检测器', '终端服务器', '闪光灯', '接入服务器', '存储服务器', '硬盘',
- '室外挂箱', '交通管道']
- outer_post_processing(combined_data,includes,good_list)
+ # includes = ["基础信息", "资格审查", "商务评分", "技术评分", "无效标与废标项", "投标文件要求", "开评定标流程"]
+ # good_list = ['交通标线', '标志牌铝板', '标志牌版面反光膜', '标志牌杆件材料', '标志标牌安装施工工艺',
+ # '标志标牌安装施工安全', '交通信号灯具', '倒计时器', '信号灯灯杆', '交通信号机', '系统功能',
+ # '一体化高速球机', '光纤收发器', '高清视频抓拍像机', '补光灯', '交通诱导屏', '高清视频摄像机',
+ # 'LED补光灯', '交换机', '红绿灯信号检测器', '终端服务器', '闪光灯', '接入服务器', '存储服务器', '硬盘',
+ # '室外挂箱', '交通管道']
+ # outer_post_processing(combined_data,includes,good_list)
# print(json.dumps(res2,ensure_ascii=False,indent=4))
# print(json.dumps(res3,ensure_ascii=False,indent=4))
# get_tech_star_deviation(json.dumps(tech_dict,ensure_ascii=False,indent=4))
diff --git a/flask_app/general/商务技术评分提取.py b/flask_app/general/商务技术评分提取.py
index 00e23f1..425da66 100644
--- a/flask_app/general/商务技术评分提取.py
+++ b/flask_app/general/商务技术评分提取.py
@@ -2,14 +2,13 @@ import json
import os
import re
import time
-from collections import defaultdict
-
+from typing import Any, Dict
from flask_app.general.doubao import read_txt_to_string
from flask_app.general.file2markdown import convert_file_to_markdown
from flask_app.general.format_change import get_pdf_page_count, pdf2docx
from flask_app.general.json_utils import extract_content_from_json
from flask_app.general.model_continue_query import process_continue_answers
-from flask_app.general.通义千问long import upload_file, qianwen_long, qianwen_plus
+from flask_app.general.通义千问long import upload_file, qianwen_long, qianwen_plus, qianwen_long_stream
def remove_unknown_scores(data):
@@ -26,48 +25,105 @@ def remove_unknown_scores(data):
def combine_technical_and_business(data):
data = remove_unknown_scores(data)
extracted_data = {
- '技术评分': {
- '技术评分': {} # 初始化技术评分
- },
- '商务评分': {
- '商务评分': {}, # 初始化商务评分
- '投标报价评分': {} # 初始化投标报价评分
- # '其他评分' 将在需要时动态添加
- }
+ '技术评分': {},
+ '商务评分': {}
}
+ # 用于累加 '其他评分' 的总分
+ other_total_score = 0
+ other_items = {}
+ def process_data(data: Dict[str, Any]) -> Dict[str, Any]:
+ """
+ 处理给定的数据字典,如果存在外键 '技术评分' 且其子键符合 '技术评分-<数字>' 格式,
+ 则删除外键 '技术评分' 并将其子键提升到更高层级。即'技术评分-1' '技术评分-2'作为外键
+ Args:
+ data (Dict[str, Any]): 输入的数据字典。
+
+ Returns:
+ Dict[str, Any]: 处理后的数据字典。
+ """
+ # 定义匹配 '技术评分-数字' 的正则表达式
+ pattern = re.compile(r'^技术评分-\d+$')
+
+ # 创建一个新的字典以避免在遍历时修改原字典
+ new_data = {}
+
+ for key, value in data.items():
+ if key == "技术评分" and isinstance(value, dict):
+ # 检查所有子键是否符合 '技术评分-<数字>' 格式
+ if all(pattern.match(child_key) for child_key in value.keys()):
+ # 如果符合,提升子键到更高层级
+ new_data.update(value)
+ else:
+ # 如果不符合,保留原键值
+ new_data[key] = process_data(value) if isinstance(value, dict) else value
+ elif isinstance(value, dict):
+ # 递归处理子字典
+ new_data[key] = process_data(value)
+ else:
+ # 对于非字典类型的值,直接保留
+ new_data[key] = value
+
+ return new_data
+
def extract_nested(data):
+ nonlocal other_total_score, other_items
if isinstance(data, dict):
for key, value in data.items():
# 区分 '技术评分'
- if key == '技术评分':
- total_score=compute_total_score({key:value})
- extracted_data['技术评分']['技术评分'] = value
+ if key.startswith('技术评分'):
+ total_score = compute_total_score({key: value})
+ if 0 < total_score <= 100:
+ new_key = f'{key}({total_score}分)'
+ else:
+ new_key = f'{key}'
+ extracted_data['技术评分'][new_key] = value
# 匹配到后,不再递归处理其子项
continue
# 区分 '商务评分'
elif key == '商务评分':
- extracted_data['商务评分']['商务评分'] = value
+ total_score = compute_total_score({key: value})
+ if 0 < total_score <= 100:
+ new_key = f'商务评分({total_score}分)'
+ else:
+ new_key = '商务评分'
+ extracted_data['商务评分'][new_key] = value
# 匹配到后,不再递归处理其子项
continue
# 区分 '投标报价评分'
elif key == '投标报价评分':
- extracted_data['商务评分']['投标报价评分'] = value
+ total_score = compute_total_score({key: value})
+ if 0 < total_score <= 100:
+ new_key = f'投标报价评分({total_score}分)'
+ else:
+ new_key = '投标报价评分'
+ extracted_data['商务评分'][new_key] = value
# 匹配到后,不再递归处理其子项
continue
# 其他键名归为 '其他评分'
else:
- if '其他评分' not in extracted_data['商务评分']:
- extracted_data['商务评分']['其他评分'] = {}
- extracted_data['商务评分']['其他评分'][key] = value
- continue
+ # 计算当前项的总分
+ current_score = compute_total_score({key: value})
+ other_total_score += current_score
+ # 保持原键名,不添加(分数)
+ other_items[key] = value
+ processed_data=process_data(data)
+ extract_nested(processed_data)
+
+ # 如果有 '其他评分',替换为包含总分的键名
+ if other_items:
+ if other_total_score > 0:
+ new_key = f'其他评分({other_total_score}分)'
+ else:
+ new_key = '其他评分'
+ extracted_data['商务评分'][new_key] = other_items
- extract_nested(data)
return extracted_data
+
# 防止外键只有一个'一包'的情况
def process_data_based_on_key(data):
exclude_word = ["包", "未知", "评分因素"]
@@ -102,8 +158,8 @@ def compute_total_score(data):
# 获取唯一的外层键和值
outer_key, outer_value = next(iter(data.items()))
- # 更新后的正则表达式,匹配中英文括号中的分数,如 '(24分)' 或 '(24分)'
- score_pattern = re.compile(r'[((](\d+)分[))]')
+ # 更新后的正则表达式,匹配中英文括号中的分数,如 '(24分)' 或 '(24分)' #考虑了空格的影响
+ score_pattern = re.compile(r'[((]\s*(\d+)\s*分\s*[))]')
def process_node(node):
nonlocal total
@@ -119,7 +175,7 @@ def compute_total_score(data):
elif key == '评分':
if isinstance(value, str):
# 提取 '评分' 键的值中的数字,如 '20分'
- match_score = re.match(r'(\d+)分', value)
+ match_score = re.match(r'\s*(\d+)\s*分\s*', value)
if match_score:
score = int(match_score.group(1))
total += score
@@ -205,52 +261,32 @@ def combine_evaluation_standards(evaluation_method_path,invalid_path,zb_type):
if not evaluation_method_path:
return DEFAULT_EVALUATION_REVIEW.copy()
- def run_first_query(file_path):
- print("判断有无评分")
- # 上传文件并获取文件ID
- file_id = upload_file(file_path)
-
- # 定义用户查询
- query = (
- """根据该文档,你判断它是否有关于技术评分或商务评分或投标报价的具体的评分及要求如果有,返回'是',否则返回'否'。
- 要求与指南:
- 1. 评分要求主要以表格形式呈现,且有评分因素及评分要求、标准。
- 2. 竞争性磋商文件通常无评分要求,但若满足'1.'的内容,也请返回'是'。
- 3. 仅返回'是'或'否',不需要其他解释或内容。
- """
- ) # 应对竞争性谈判这种无评分要求的情况
-
- # 执行查询
- return qianwen_long(file_id, query),file_id
- def run_second_qeury(file_id,processed_filepath,model_type):
- print("获取评分项...")
- # 执行 user_query 相关的逻辑
- user_query_1 = (
- """
- 你是一个对招投标业务非常熟悉的专家。根据该文档中的评标办法表格,请你列出该文件的技术评分,商务评分,投标报价评分以及它们对应的具体评分要求,请以JSON格式返回结果。
-格式要求:
+ def generate_prompt(zb_type):
+ common_prompt="""你是一个对招投标业务非常熟悉的专家。根据该文档中的评标办法表格,请你列出该文件的技术评分,商务评分,投标报价评分以及它们对应的具体评分要求,请以JSON格式返回结果。
+**格式要求**:
1.总体结构:
- -JSON 的最外层包含三个键:技术评分、商务评分 和 投标报价评分。
+ -JSON 的最外层包含三个键:'技术评分'、'商务评分' 和 '投标报价评分'。
-每个大项(如技术评分、商务评分)下包含具体的评分项,评分项按以下规则表示。
2.评分项表示规则:
- -层级嵌套规则:
- 若评分因素(内容)存在嵌套关系(通过表格结构判断):主评分因素需附加括号,括号中注明该主评分项的总分,若无具体评分,则无需添加该括号。例如:产品技术响应(8分);子评分因素作为嵌套键名,列在主评分因素之下,无需再附加括号表示评分。
+ -每个评分项由评分因素和评分标准组成。
+ -评分因素:
+ 若评分因素(内容、项)存在嵌套关系(通过表格结构判断):主评分因素需附加括号,括号中注明该主评分因素的总分,若无具体评分,则无需添加该括号,例如:产品技术响应(8分);子评分因素作为嵌套键名,列在主评分因素之下,无需再附加括号表示评分。
-注意:禁止通过归纳、推测或自行总结来生成子评分因素,尤其不可根据'评分标准'中的打分要求来反向总结'子评分因素'。
- 若评分因素(内容)不存在嵌套关系:键名直接为评分因素,无需附加括号表示总分。
- -评分项内容:
- -每个评分项最内层值都是列表,列表中包含描述评分标准或要求的字典。
+ 若评分因素(内容、项)不存在嵌套关系:键名直接为评分因素,无需附加括号表示总分。
+ -评分标准:
+ -评分因素的键值为评分标准,它是列表形式,列表中包含描述分值及评分要求的字典。
-字典个数:
默认为1个字典,若某评分因素包括多个评分标准(多个表格单元格),可以用多个并列字典表示。
-字典结构如下:
- 评分:该评分标准的总分(如 8分),字符串类型;不能是一个范围数字(如0-8分);若为定性指标(如“合格制”),可标明相应的定性指标;无评分时可删去'评分'键值对。
- 要求:说明评分标准或要求。
+ 评分:该评分标准的分值即最高分(如'8分'),字符串类型;不能是一个范围数字(如0-8分);若为定性指标(如“合格制”),可标明相应的定性指标;无评分时可删去'评分'键值对。
+ 要求:评分标准或细则,一个表格单元格内的所有内容。
-禁止情况:
禁止将同个单元格内的内容拆分至多个字典中;禁止遗漏单元格内任何信息,包括注的内容。
3.备注信息:
-若评分部分包含附加信息(如大项评分的整体要求,未直接归属于具体评分项),需添加一个 备注 键,值为该附加信息。
-要求与指南:
-1. 请首先定位评分表,不要回答有关资格审查、符合审查的内容,也不要从评标办法正文中提取回答。
+**要求与指南**:
+1. 请首先定位评分表,请不要遗漏任何一个评分表的信息,不要回答有关资格审查、符合审查的内容,也不要从评标办法正文中提取回答。
2. 若表中的评分大项不是这三个,或者有额外的评分大项:
-请你根据语义及你对招投标业务的熟悉,分别映射到'技术评分'、'商务评分'、'投标报价评分',而不必按照表格中大项名称。
-映射关系可以是“一对一”或“多对一”,例如两个评分大项可以同时归类到“技术评分”。关键是不遗漏表中的评分大项,确保每个大项都被映射。
@@ -258,47 +294,51 @@ def combine_evaluation_standards(evaluation_method_path,invalid_path,zb_type):
-请将评分因素正确地归类到'技术评分'、'商务评分'、'投标报价评分',不要遗漏任何一个评分因素。
3. 若表格中商务和技术评分混合一起,或者有部分评分因素无法通过表格结构明确归类:
-请根据你对招投标业务的熟悉,对表格中的评分因素进行准确分类。关键是确保每个评分因素都能被归类到'技术评分'或'商务评分'或'投标报价评分',不要遗漏任何一个评分因素。
-特殊情况:
- 1. 最外层键名为各大评分项;但是如果该招标、采购活动有多个分包,则最外层键名为对应的包名,如'一包',内部格式不变。
- 2. 若大项的'xx评分'要求未在文中说明,则键名'xx评分'的键值设为字符串'本项目无xx评分项',例如"技术评分":"本项目无技术评分项",而非默认的字典格式。
- 3. 默认情况大项评分仅有'技术评分''商务评分''投标报价评分',若在充分归类之后,表格中仍有评分因素未被归类,才添加大项评分'其他'保存该内容。
+
+**特殊情况**:
+ 1. 缺失评分项:若大项的'xx评分'要求未在文中说明,则键名'xx评分'的键值设为字符串'本项目无xx评分项',例如"技术评分":"本项目无技术评分项",而非默认的字典格式。
+ 2. 其他评分:默认情况大项评分仅有'技术评分''商务评分''投标报价评分',若在充分归类之后,表格中仍有评分因素未被归类,才添加大项评分'其他评分'保存该内容。
+ 3. 多包评分:默认只有一包,最外层键名为各大评分项,而不是'一包';但是如果该招标、采购活动有多个分包且每个分包有独自的评分表,则最外层键名为对应的包名,如'一包''二包',内部才是各大评分项。
+ 4. 多张技术评分表:若同一包下有多张技术评分表,请不要遗漏任何一个评分表的信息,此时最外层键名'技术评分'替换为'技术评分-d',d为自然数,从1开始,分别保存每张技术评分表的信息。
+ -例如有'技术评分标准(1)其他项目','技术评分标准(2)施工类',算作两个技术评分表,最外层的键名分别为'技术评分-1''技术评分-2',替换默认的'技术评分'
-禁止内容:
+**禁止内容**:
1. 确保所有输出内容均基于提供的实际招标文件内容(除了最外层的三个评分大项名称),不使用任何预设的示例作为回答。
2. 不得擅自添加不属于评审因素的键名以及 `'备注'` 之外的其他键名。
3. 不得遗漏评分表中的任何评分因素,确保每个评分因素都被正确归类到评分大项下。
-
- 以下为示例输出,仅供格式参考:
- {
- "一包": {
- "技术评分": {
- "实施方案(16分)":{
- "总体实施方案":[
- {
- "评分":8,
- "要求":"根据投标人总体实施方案进行评分"
- }
- ],
- "项目实施要点":[
- {
- "评分":8,
- "要求":"根据投标人对项目实施要点、难点进行评分。"
- }
- ]
- },
- "设计创意": [
- {
- "评分": "10分",
- "要求": "主题突出,形式多样,内容与形式完美统一,得10分,其他酌情打分。"
- }
- ],
- "备注": "技术标采用暗标形式,暗标不得出现投标人名称、人员姓名。"
- },
- "商务评分": {
- "主要监理岗位的职责": [
- {
- "评分": "4分",
- "要求": "1、总监理工程师的职责全面、清晰、合理得 2 分;一般的 1 分。2、其他主要监理人员及岗位的职责全面、清晰、合理得 2 分;一般的 1 分。"
+ """
+ if zb_type == 1:
+ example_output="""
+以下为示例输出,仅供格式参考:
+ {
+ "技术评分": {
+ "实施方案(16分)":{
+ "总体实施方案":[
+ {
+ "评分":8,
+ "要求":"根据投标人总体实施方案进行评分"
+ }
+ ],
+ "项目实施要点":[
+ {
+ "评分":8,
+ "要求":"根据投标人对项目实施要点、难点进行评分。"
+ }
+ ]
+ },
+ "设计创意": [
+ {
+ "评分": "10分",
+ "要求": "主题突出,形式多样,内容与形式完美统一,得10分,其他酌情打分。"
+ }
+ ],
+ "备注": "技术标采用暗标形式,暗标不得出现投标人名称、人员姓名。"
+ },
+ "商务评分": {
+ "主要监理岗位的职责": [
+ {
+ "评分": "4分",
+ "要求": "1、总监理工程师的职责全面、清晰、合理得 2 分;一般的 1 分。2、其他主要监理人员及岗位的职责全面、清晰、合理得 2 分;一般的 1 分。"
}
],
"制造商实力": [
@@ -312,64 +352,20 @@ def combine_evaluation_standards(evaluation_method_path,invalid_path,zb_type):
}
]
},
- "投标报价评分": {
- "投标报价是否出现违反计价规范": [
- {
- "评分": "合格制",
- "要求": "A:投标报价未违反计价规范的,评审意见为“合格”;B:投标报价违反计价规范的,评审意见为“不合格”"
- }
- ]
- }
- }
- }
- """
- )
- user_query_2 = (
- """
-你是一个对招投标业务非常熟悉的专家。根据该文档中的评标办法表格,请你列出该文件的技术评分,商务评分,投标报价评分以及它们对应的具体评分要求,请以JSON格式返回结果。
-格式要求:
-1.总体结构:
- -JSON 的最外层包含三个键:'技术评分'、'商务评分' 和 '投标报价评分'。
- -每个大项(如技术评分、商务评分)下包含具体的评分项,评分项按以下规则表示。
-2.评分项表示规则:
- -层级嵌套规则:
- 若评分因素(内容)存在嵌套关系(通过表格结构判断):主评分因素需附加括号,括号中注明该主评分项的总分,若无具体评分,则无需添加该括号。例如:产品技术响应(8分);子评分因素作为嵌套键名,列在主评分因素之下,无需再附加括号表示评分。
- -注意:禁止通过归纳、推测或自行总结来生成子评分因素,尤其不可根据'评分标准'中的打分要求来反向总结'子评分因素'。
- 若评分因素(内容)不存在嵌套关系:键名直接为评分因素,无需附加括号表示总分。
- -评分项内容:
- -每个评分项最内层值都是列表,列表中包含描述评分标准或要求的字典。
- -字典个数:
- 默认为1个字典,若某评分因素包括多个评分标准(多个表格单元格),可以用多个并列字典表示。
- -字典结构如下:
- 评分:该评分标准的总分(如 8分),字符串类型;不能是一个范围数字(如0-8分);若为定性指标(如“合格制”),可标明相应的定性指标;无评分时可删去'评分'键值对。
- 要求:说明评分标准或要求。
- -禁止情况:
- 禁止将同个单元格内的内容拆分至多个字典中;禁止遗漏单元格内任何信息,包括注的内容。
-
-3.备注信息:
- -若评分部分包含附加信息(如大项评分的整体要求,未直接归属于具体评分项),需添加一个 '备注' 键,值为该附加信息。
-
-要求与指南:
-1. 请首先定位评分表,不要回答有关资格审查、符合审查的内容,也不要从评标办法正文中提取回答。
-2. 若表中的评分大项不是这三个,或者有额外的评分大项:
- -请你根据语义及你对招投标业务的熟悉,分别映射到'技术评分'、'商务评分'、'投标报价评分',而不必按照表格中大项名称。
- -映射关系可以是“一对一”或“多对一”,例如两个评分大项可以同时归类到“技术评分”。关键是不遗漏表中的评分大项,确保每个大项都被映射。
- 若表中只有评分因素而无评分大项:
- -请将评分因素正确地归类到'技术评分'、'商务评分'、'投标报价评分',不要遗漏任何一个评分因素。
-3. 若表格中商务和技术评分混合一起,或者有部分评分因素无法通过表格结构明确归类:
- -请根据你对招投标业务的熟悉,对表格中的评分因素进行准确分类。关键是确保每个评分因素都能被归类到'技术评分'或'商务评分'或'投标报价评分',不要遗漏任何一个评分因素。
-特殊情况:
- 1. 最外层键名为各大评分项;但是如果该招标、采购活动有多个分包,则最外层键名为对应的包名,如'一包',内部格式不变。
- 2. 若大项的'xx评分'要求未在文中说明,则键名'xx评分'的键值设为字符串'本项目无xx评分项',例如"技术评分":"本项目无技术评分项",而非默认的字典格式。
- 3. 默认情况大项评分仅有'技术评分''商务评分''投标报价评分',若在充分归类之后,表格中仍有评分因素未被归类,才添加大项评分'其他'保存该内容。
-
-禁止内容:
-1. 确保所有输出内容均基于提供的实际招标文件内容(除了最外层的三个评分大项名称),不使用任何预设的示例作为回答。
-2. 不得擅自添加不属于评审因素的键名以及 `'备注'` 之外的其他键名。
-
+ "投标报价评分": {
+ "投标报价是否出现违反计价规范": [
+ {
+ "评分": "合格制",
+ "要求": "A:投标报价未违反计价规范的,评审意见为“合格”;B:投标报价违反计价规范的,评审意见为“不合格”"
+ }
+ ]
+ }
+ }
+ """
+ elif zb_type == 2:
+ example_output="""
以下为示例输出,仅供格式参考:
-{
- "一包": {
+ {
"技术评分": {
"产品技术响应(8分)":{
"常规参数符合":[
@@ -420,11 +416,34 @@ def combine_evaluation_standards(evaluation_method_path,invalid_path,zb_type):
]
}
}
-}
"""
- )
- # 执行第二个查询
- user_query = user_query_1 if zb_type == 1 else user_query_2
+ else:
+ raise ValueError("Invalid zb_type. 请输入 1 或 2。")
+ # 拼接最终的提示内容
+ final_prompt = common_prompt + example_output
+ return final_prompt
+
+ def run_first_query(file_path):
+ print("判断有无评分")
+ # 上传文件并获取文件ID
+ file_id = upload_file(file_path)
+
+ # 定义用户查询
+ query = (
+ """根据该文档,你判断它是否有关于技术评分或商务评分或投标报价的具体的评分及要求如果有,返回'是',否则返回'否'。
+ 要求与指南:
+ 1. 评分要求主要以表格形式呈现,且有评分因素及评分要求、标准。
+ 2. 竞争性磋商文件通常无评分要求,但若满足'1.'的内容,也请返回'是'。
+ 3. 仅返回'是'或'否',不需要其他解释或内容。
+ """
+ ) # 应对竞争性谈判这种无评分要求的情况
+
+ # 执行查询
+ return qianwen_long(file_id, query),file_id
+ def run_second_qeury(file_id,processed_filepath,model_type):
+ print("获取评分项...")
+ # 执行 user_query 相关的逻辑
+ user_query=generate_prompt(zb_type)
if model_type==4:
full_text = read_txt_to_string(processed_filepath)
user_query += f"\n文件内容:\n{full_text}\n"
@@ -434,16 +453,16 @@ def combine_evaluation_standards(evaluation_method_path,invalid_path,zb_type):
# evaluation_res=doubao_model(user_query,True)
evaluation_res = qianwen_plus(user_query, True)
else:
- evaluation_res = qianwen_long(file_id, user_query,2,1,True) # 有些重复的键名,只有qianwen_long_text能保留
+ evaluation_res = qianwen_long_stream(file_id, user_query,2,1,True) # 有些重复的键名,只有qianwen_long_text能保留
message = evaluation_res[0]
# print(message)
total_tokens = evaluation_res[1]
- # print(evaluation_res)
# 清理和处理响应
cleaned_evaluation_res = extract_content_from_json(message,True) # 带上True处理重复键名的情况-》生成列表
# print(json.dumps(cleaned_evaluation_res,ensure_ascii=False,indent=4))
max_tokens = 7900 if model_type == 4 else 5900
if not cleaned_evaluation_res and total_tokens > max_tokens:
+ print(f"total_tokens: {total_tokens}")
questions_to_continue.append((user_query, evaluation_res))
else:
temp_final.update(cleaned_evaluation_res)
@@ -468,60 +487,66 @@ def combine_evaluation_standards(evaluation_method_path,invalid_path,zb_type):
return final_res
try:
- judge_res,file_id = run_first_query(evaluation_method_path)
- # 检查 judge_res 的内容
- def get_default_result():
- return {
- '技术评分': '本招标文件没有技术评分!',
- '商务评分': '本招标文件没有商务评分!'
- }
- # 如果 judge_res 包含 '是',直接运行第二步查询
- if '是' in judge_res:
- if get_pdf_page_count(evaluation_method_path)<=20:
- model_type=4 #qianwen-plus
- processed_filepath = convert_file_to_markdown(evaluation_method_path,"extract2.txt") # 转markdown格式
- else:
- evaluation_method_docxpath=pdf2docx(evaluation_method_path)
- file_id=upload_file(evaluation_method_docxpath)
- model_type = 2 #qianwen-long
- processed_filepath = ""
- return run_second_qeury(file_id,processed_filepath,model_type)
- # 标准化路径,避免多种表示形式造成的误判
+ judge_res, file_id = run_first_query(evaluation_method_path)
eval_path = os.path.abspath(evaluation_method_path)
invalid_eval_path = os.path.abspath(invalid_path)
- # 判断路径是否一致
- if eval_path == invalid_eval_path:
- # 如果路径一致,直接返回默认结果
- return get_default_result()
- # 路径不一致,尝试运行第一次查询
- judge_res, file_id = run_first_query(invalid_path)
- # 如果 judge_res 包含 '是',运行第二步查询
+ # 获取 evaluation_method_path 所在的目录
+ eval_dir = os.path.dirname(eval_path)
+ # extract3.txt是invalid_path->markdown,不一定存在
+ extract3_path = os.path.join(eval_dir, "extract3.txt")
if '是' in judge_res:
- model_type = 0
- processed_filepath = ""
+ if get_pdf_page_count(evaluation_method_path) <= 20:
+ model_type = 4 # qianwen-plus
+ processed_filepath = convert_file_to_markdown(evaluation_method_path, "extract2.txt")
+ else:
+ if eval_path == invalid_eval_path:
+ if os.path.exists(extract3_path):
+ print("qianwen-plus1:extract3.txt")
+ processed_filepath = extract3_path
+ model_type = 4 # 使用 qianwen-plus
+ else:
+ processed_filepath = ""
+ file_id = upload_file(invalid_eval_path)
+ model_type = 3 # 默认 qianwen-long-stream
+ else:
+ evaluation_method_docxpath = pdf2docx(evaluation_method_path)
+ file_id = upload_file(evaluation_method_docxpath)
+ processed_filepath = ""
+ model_type = 3 # qianwen-long_stream
return run_second_qeury(file_id, processed_filepath, model_type)
- # 默认返回结果
- return get_default_result()
- except Exception as e:
- print(f"Error in combine_evaluation_standards: {e}")
- # 在出错时返回默认的包含空字符串的字典
+
+ # 如果 judge_res 不包含 '是' 并且路径不同,处理 invalid_path
+ if eval_path != invalid_eval_path:
+ judge_res_invalid, file_id_invalid = run_first_query(invalid_path)
+ if '是' in judge_res_invalid:
+ if os.path.exists(extract3_path):
+ print("qianwen-plus2:extract3.txt")
+ processed_filepath = extract3_path
+ model_type = 4 # qianwen-plus
+ else:
+ processed_filepath = ""
+ model_type = 3 # 默认 qianwen-long_stream
+ return run_second_qeury(file_id_invalid, processed_filepath, model_type)
+
+ # 如果路径相同或未找到 '是',返回默认结果
return DEFAULT_EVALUATION_REVIEW.copy()
-
-#目前评分这块如果表格过长,会有问题,可以考虑textin+doubao,小于20页用text,>20页转word->qianwen-long
-#TODO:代码计算总分,商务评分修改
-#TODO:废标项,增加对表格的提取+排除重复项
+ except Exception as e:
+ print(f"Error in combine_evaluation_standards: {e}")
+ # 出错时返回默认结果
+ return DEFAULT_EVALUATION_REVIEW.copy()
if __name__ == "__main__":
start_time=time.time()
# truncate_file=r"C:\Users\Administrator\Desktop\招标文件-采购类\tmp2\2024-新疆-塔城地区公安局食药环分局快检实验室项目_evaluation_method.pdf"
- evaluation_method_path = r'D:\flask_project\flask_app\static\output\output1\f91db70d-8d96-44a5-b840-27d2f1ecbe95\invalid_del.docx'
- invalid_path=r'D:\flask_project\flask_app\static\output\output1\f91db70d-8d96-44a5-b840-27d2f1ecbe95\invalid_del.docx'
+ evaluation_method_path = r'D:\flask_project\flask_app\static\output\output1\test\招标文件-第二章-第六章-172404【电能表标准设备172404-1305001-0002】_evaluation_method.pdf'
+ invalid_path=r'D:\flask_project\flask_app\static\output\output1\test\招标文件-第二章-第六章-172404【电能表标准设备172404-1305001-0002】_invalid.docx'
# truncate_file = "C:\\Users\\Administrator\\Desktop\\货物标\\output2\\2-招标文件(统计局智能终端二次招标)_evaluation_method.pdf"
# truncate_file="C:\\Users\\Administrator\\Desktop\\货物标\\output2\\广水市妇幼招标文件最新(W改)_evaluation_method.pdf"
# truncate_file = "C:\\Users\\Administrator\\Desktop\\fsdownload\\2d481945-1f82-45a5-8e56-7fafea4a7793\\ztbfile_evaluation_method.pdf"
# truncate_file="C:\\Users\\Administrator\\Desktop\\fsdownload\\ztbfile_evaluation_method.pdf"
res = combine_evaluation_standards(evaluation_method_path,invalid_path,2)
+ print("------------------------------")
print(json.dumps(res, ensure_ascii=False, indent=4))
end_time=time.time()
print("elapsed time:"+str(end_time-start_time))
\ No newline at end of file
diff --git a/flask_app/general/多线程提问.py b/flask_app/general/多线程提问.py
index fd43e5f..8fdba84 100644
--- a/flask_app/general/多线程提问.py
+++ b/flask_app/general/多线程提问.py
@@ -130,99 +130,6 @@ def rag_assistant(knowledge_name):
)
return assistant
-#TODO:http格式,有bug还没修改
-def create_assistant(knowledge_name):
- """
- Create an assistant using DashScope routes via HTTP request based on the provided knowledge name.
-
- Parameters:
- knowledge_name (str): The name of the knowledge base to associate with the assistant.
-
- Returns:
- dict: Response from the routes containing assistant details.
-
- Raises:
- ValueError: If the DASHSCOPE_API_KEY environment variable is not set.
- Exception: If any error occurs during the HTTP request.
- """
- # Step 1: Initialize the Retriever and get the Pipeline ID
- try:
- retriever = DashScopeCloudRetriever(knowledge_name)
- pipeline_id = str(retriever.pipeline_id)
- except Exception as e:
- print(f"Error retrieving pipeline ID for knowledge '{knowledge_name}': {e}")
- return None
-
- # Step 2: Fetch the routes Key from Environment Variables
- api_key = os.getenv("DASHSCOPE_API_KEY")
- if not api_key:
- raise ValueError("DASHSCOPE_API_KEY environment variable is not set.")
-
- # Step 3: Define the routes Endpoint and Headers
- url = 'https://dashscope.aliyuncs.com/api/v1/assistants'
- headers = {
- "Content-Type": "application/json",
- "Authorization": f"Bearer {api_key}"
- }
-
- # Step 4: Construct the Instructions
- instructions = (
- "请记住以下材料,他们对回答问题有帮助,请你简洁准确地给出回答,不要给出无关内容。${documents}"
- )
-
- # Step 5: Define the Tools
- tools = [
- {
- "type": "code_interpreter"
- },
- {
- "type": "rag",
- "prompt_ra": {
- "pipeline_id": pipeline_id,
- "parameters": {
- "type": "object",
- "properties": {
- "query_word": {
- "type": "str",
- "value": "${documents}"
- }
- }
- }
- }
- }
- ]
-
- # Step 6: Construct the Payload
- payload = {
- "model": "qwen-max",
- "name": "智能小助手", # "Smart Helper" in Chinese
- "description": "智能助手,支持知识库查询和插件调用。",
- "temperature": 0.3,
- "instructions": instructions,
- "tools": tools,
- "file_ids": [], # Add file IDs if necessary
- "metadata": {} # Add metadata if necessary
- }
-
- # Optional: If you have specific file_ids or metadata, you can modify the payload accordingly
- # For example:
- # payload["file_ids"] = ["file_id_1", "file_id_2"]
- # payload["metadata"] = {"key1": "value1", "key2": "value2"}
-
- # Step 7: Make the HTTP POST Request
- try:
- response = requests.post(url, headers=headers, data=json.dumps(payload))
- response.raise_for_status() # Raises HTTPError for bad responses (4xx or 5xx)
- assistant = response.json()
- print("Assistant created successfully:")
- print(json.dumps(assistant, indent=4, ensure_ascii=False))
- return assistant
- except requests.exceptions.HTTPError as http_err:
- print(f"HTTP error occurred: {http_err} - Response: {response.text}")
- except Exception as err:
- print(f"An error occurred: {err}")
-
-
def pure_assistant():
assistant = Assistants.create(
model='qwen-max',
diff --git a/flask_app/general/截取pdf通用函数.py b/flask_app/general/截取pdf通用函数.py
index 97f0bf3..ea0c002 100644
--- a/flask_app/general/截取pdf通用函数.py
+++ b/flask_app/general/截取pdf通用函数.py
@@ -19,7 +19,6 @@ def get_start_and_common_header(input_path,end_page):
)
# 新增目录匹配模式
catalog_pattern = regex.compile(r'\s*目\s*录\s*$', regex.MULTILINE)
-
pdf_document = PdfReader(input_path)
for i, page in enumerate(pdf_document.pages):
if i > end_page:
@@ -261,7 +260,7 @@ def get_invalid_file(file_path, output_folder, common_header,begin_page):
return ""
if __name__ == "__main__":
- file_path=r'C:\Users\Administrator\Desktop\new招标文件\货物标\HBDL-2024-0310-001-招标文件.pdf'
- output_folder=r'C:\Users\Administrator\Desktop\new招标文件\货物标\tmp'
- res=get_invalid_file(file_path,output_folder,"")
+ file_path=r'D:\flask_project\flask_app\static\output\output1\f91db70d-8d96-44a5-b840-27d2f1ecbe95\ztbfile.pdf'
+ output_folder=r'D:\flask_project\flask_app\static\output\output1\f91db70d-8d96-44a5-b840-27d2f1ecbe95\tmp'
+ res=get_invalid_file(file_path,output_folder,"",0)
diff --git a/flask_app/general/无效标和废标公共代码.py b/flask_app/general/无效标和废标公共代码.py
index fcf82ab..5c1f774 100644
--- a/flask_app/general/无效标和废标公共代码.py
+++ b/flask_app/general/无效标和废标公共代码.py
@@ -896,7 +896,6 @@ def combine_find_invalid(invalid_docpath, output_dir):
print("无效标与废标done...")
return {"无效标与废标项": combined_dict}
-#TODO:添加到txt中也要做一个去重。
if __name__ == '__main__':
start_time = time.time()
# truncate_json_path = "C:\\Users\\Administrator\\Desktop\\货物标\\output4\\tmp2\\竞争性谈判文件(3)_tobidders_notice_part1\\truncate_output.json"
diff --git a/flask_app/general/通义千问long.py b/flask_app/general/通义千问long.py
index a44dc58..e002f0d 100644
--- a/flask_app/general/通义千问long.py
+++ b/flask_app/general/通义千问long.py
@@ -376,7 +376,6 @@ def qianwen_plus(user_query, need_extra=False):
else:
return ""
-#TODO:若采购需求和评分那块响应超时比较多,考虑都改为流式
if __name__ == "__main__":
# Example file path - replace with your actual file path
diff --git a/flask_app/routes/偏离表main.py b/flask_app/routes/偏离表main.py
index b31d6d1..49de6a2 100644
--- a/flask_app/routes/偏离表main.py
+++ b/flask_app/routes/偏离表main.py
@@ -5,7 +5,7 @@ from copy import deepcopy
from flask_app.general.doubao import doubao_model
from flask_app.general.format_change import pdf2docx, docx2pdf,doc2docx
-from flask_app.general.json_utils import clean_json_string
+from flask_app.general.json_utils import clean_json_string, rename_outer_key
from flask_app.general.merge_pdfs import merge_pdfs
from flask_app.general.通义千问long import qianwen_plus
from flask_app.general.通用功能函数 import get_global_logger
@@ -343,7 +343,7 @@ def extract_business_deviation(busi_requirements_dict):
1. 每个以★、▲或其他特殊符号开头的要求项应作为单独的字符串。
2. 每条内容需要有实际的含义、要求,不能光有标题性质的表述如'★售后服务期限(质保期)及要求';对于类似'技术要求中带★条款项不满足的视为无效投标'这种描述带星★或带三角▲或带特殊符号的响应情况的,它本身不属于具体的★、▲商务要求,因此不需要添加进字符串列表中。
3. 你的回答内容需从所给文本中提取,尽量不改变原文的表达(除非以下要求与指南3.的特殊情况),请勿擅自添加三角▲、五角星★,请勿返回普通的商务要求。
- 4. 若无重要商务要求(★、▲或其他特殊符号开头的商务要求项),键值为空列表,即[],无需额外返回说明性文字。
+ 4. 若无重要商务要求(即★、▲或其他特殊符号开头的商务要求项),键值为空列表,即[],无需额外返回说明性文字。
5. 若输入文本中存在嵌套键值对格式,且键值本身语义完整且符合'重要商务要求',可直接将其添加至'商务要求'的键值中;若键值字符串本身语义表达不完整,可将键值对用冒号':'拼接之后作为一条商务要求,若键值字符串以★、▲或其他特殊符号开头,将符号移至拼接后的开头,例如'"★交货地点:采购人指定地点"'。
6. 对于以三角▲或五角星★或其他特殊符号开头的字符串:
a. 如果该字符串仅为标题性质的表述且不具备实际商务要求的含义,请根据语义关联性将其开头的三角▲或五角星★添加到紧随其后的若干(可为一)内容之后,形成完整的商务要求,并确保整个内容连贯。
@@ -369,7 +369,7 @@ def extract_business_deviation(busi_requirements_dict):
c. 无论哪种情况,都需确保不遗漏任何以三角▲或五角星★或其他特殊符号开头的重要信息。
**禁止内容**:
- 确保所有输出内容均基于提供的实际文本内容,不使用任何预设的示例作为回答。
+ 确保所有输出内容均基于提供的实际文本内容,不使用任何预设的示例作为回答,禁止编造回答。
**示例输入如下**:
{{
@@ -415,6 +415,7 @@ def extract_business_deviation(busi_requirements_dict):
# 分配结果到相应的变量,未处理的结果使用默认值
business_req_deviation = results[0] if results[0] is not None else default_return[0]
business_star_req_deviation = results[1] if results[1] is not None else default_return[1]
+ business_star_req_deviation=rename_outer_key(business_star_req_deviation,"商务要求带星")
return business_req_deviation, business_star_req_deviation
diff --git a/flask_app/routes/小解析main.py b/flask_app/routes/小解析main.py
index 0784b90..bb9967a 100644
--- a/flask_app/routes/小解析main.py
+++ b/flask_app/routes/小解析main.py
@@ -67,7 +67,7 @@ def little_parse_engineering(output_folder, pdf_path,logger):
# 假设最后一个文件是需要处理的基础信息文件
baseinfo_file_path = files[-1]
if not baseinfo_file_path:
- baseinfo_file_path=files[-2]
+ baseinfo_file_path=files[-2] #invalid_path
# 上传文件并获取文件 ID
file_id = upload_file(baseinfo_file_path)
# 注意:以下路径被硬编码,确保该路径存在并且正确
@@ -140,10 +140,10 @@ if __name__ == "__main__":
# zb_type=2 #1:工程标 2:货物标
# input_file = "C:\\Users\\Administrator\\Desktop\\货物标\\zbfiles\\ztbfile.pdf"
- output_folder=r"C:\Users\Administrator\Desktop\货物标\zbfiles\tmp"
- zb_type=2 #1:工程 2:货物
+ output_folder=r"C:\Users\Administrator\Desktop\fsdownload\b18e9c17-e866-4116-8db3-aaab722d1463\tmp"
+ zb_type=1 #1:工程 2:货物
# input_file=r"C:\Users\Administrator\Desktop\fsdownload\865a5d46-a5f8-467a-8374-c71c415d0af9\ztbfile.pdf"
- input_file=r"C:\Users\Administrator\Desktop\货物标\zbfiles\2020-安徽-安徽省生态环境厅电梯采购.pdf"
+ input_file=r"C:\Users\Administrator\Desktop\fsdownload\b18e9c17-e866-4116-8db3-aaab722d1463\ztbfile.pdf"
final_json_path=little_parse_main(output_folder, input_file, file_type, zb_type,"122334")
with open(final_json_path, 'r', encoding='utf-8') as f:
# logger.info('final_json_path:' + final_json_path)
diff --git a/flask_app/routes/货物标解析main.py b/flask_app/routes/货物标解析main.py
index 426ca38..05007be 100644
--- a/flask_app/routes/货物标解析main.py
+++ b/flask_app/routes/货物标解析main.py
@@ -210,7 +210,6 @@ def post_process_baseinfo(base_info,logger):
logger.error(f"Error in post_process_baseinfo: {e}")
return base_info, [] # 返回空列表
-#TODO:错误处理,通过返回值completion来错误处理,而不是正则表达 学习装饰器、 整体后处理
def goods_bid_main(output_folder, file_path, file_type, unique_id):
logger = get_global_logger(unique_id)
# 预处理文件,获取处理后的数据
@@ -277,9 +276,10 @@ def goods_bid_main(output_folder, file_path, file_type, unique_id):
#TODO: ec7d5328-9c57-450f-baf4-2e5a6f90ed1d
-#TODO:1.先截取合同、投标文件格式之前的页码 即 invalid 如果页码小于50页,那么剩下的不切了直接仍。
+#TODO:
# 2.废标项这边,考虑大模型+正则并用
-# 3.限制评分项的因素。
+# 废标项,增加对表格的提取+排除重复项
+# 考虑将工程标和货物标的 投标人须知那块结合
if __name__ == "__main__":
diff --git a/flask_app/start_up.py b/flask_app/start_up.py
index c90c425..0c8ea6f 100644
--- a/flask_app/start_up.py
+++ b/flask_app/start_up.py
@@ -41,8 +41,6 @@ def create_app():
logger.info("清理完毕!")
return app
-#TODO:培训要求、总体要求、进度要求、'建设要求'到技术要求中,归类到其他要求中
-
if __name__ == '__main__':
app = create_app()
app.run(debug=True, host='0.0.0.0', port=5000)
diff --git a/flask_app/static/提示词/小解析基本信息工程标.txt b/flask_app/static/提示词/小解析基本信息工程标.txt
index 122d5fc..9f16e3b 100644
--- a/flask_app/static/提示词/小解析基本信息工程标.txt
+++ b/flask_app/static/提示词/小解析基本信息工程标.txt
@@ -36,4 +36,4 @@
"开标地点":"线上开标"
}
-8.请你根据招标文件信息,投标人需要递交的投标保证金(或磋商保证金)是多少?请按json格式给我提供信息,键名为'投标保证金额',键值为原文中的具体金额,如果不需要递交保证金或者金额未知,键值为"其他"。
\ No newline at end of file
+8.请你根据招标文件信息,投标人需要递交的投标保证金(或磋商保证金)是多少?请按json格式给我提供信息,键名为'投标保证金额',键值为原文中的具体金额;如果不需要递交保证金或者金额未知,键值为"其他",请不要返回其他说明信息,保持回答的简洁。
\ No newline at end of file
diff --git a/flask_app/static/提示词/小解析基本信息货物标.txt b/flask_app/static/提示词/小解析基本信息货物标.txt
index 87877dd..155ed2f 100644
--- a/flask_app/static/提示词/小解析基本信息货物标.txt
+++ b/flask_app/static/提示词/小解析基本信息货物标.txt
@@ -36,7 +36,7 @@
"开标地点":"供应商通过供应商客户端进入江夏区政府采购电子交易系统开标大厅中进行远程开启"
}
-8.请你根据招标文件信息,投标人需要递交的投标保证金(或磋商保证金)是多少?请按json格式给我提供信息,键名为'投标保证金额',键值为原文中的具体金额的完整表述,如果不需要递交保证金或者金额未知,键值为"其他"。
+8.请你根据招标文件信息,投标人需要递交的投标保证金(或磋商保证金)是多少?请按json格式给我提供信息,键名为'投标保证金额',键值为原文中的具体金额;如果不需要递交保证金或者金额未知,键值为"其他",请不要返回其他说明信息,保持回答的简洁。
diff --git a/flask_app/test_case/商务技术评分数据.py b/flask_app/test_case/商务技术评分数据.py
new file mode 100644
index 0000000..a325900
--- /dev/null
+++ b/flask_app/test_case/商务技术评分数据.py
@@ -0,0 +1,202 @@
+data={
+ "技术评分": {
+ "技术评分-1": {
+ "一、技术方案(24分)": [
+ {
+ "评分": "24分",
+ "要求": "方案的先进性:好4-3分,一般2-1分,不好0分。方案的创新性:好4-3分,一般2-1分,不好0分。方案的技术指标:好4-3分,一般2-1分,不好0分。方案的经济指标:好4-3分,一般2-1分,不好0分。方案的质量指标:好4-3分,一般2-1分,不好0分。方案的风险:低4-3分,中等2-1分,高0分。"
+ }
+ ],
+ "二、安全保障(10分)": [
+ {
+ "评分": "10分",
+ "要求": "安全保障体系完整、措施得力10-9分;体系及措施完善,一般8-4 分;有保障措施,但不完善、不完整、不得力3-1分;没有0分。"
+ }
+ ],
+ "三、质量保障(10分)": [
+ {
+ "评分": "10分",
+ "要求": "质量保障体系完整、措施得力10-9分;体系及措施完善,一般8-4 分;有保障措施,但不完善、不完整、不得力3-1分;没有0分。"
+ }
+ ],
+ "四、进度保障(6分)": [
+ {
+ "评分": "6分",
+ "要求": "工作进度计划控制措施得力6-5分,工作计划合理,一般4-3分,有保障措施,但不完善、不完整、不得力2-1分,没有0分。"
+ }
+ ],
+ "五、管理机构及人员(15分)": [
+ {
+ "评分": "15分",
+ "要求": "项目主要负责人的资历及业绩情况优良8-6分,一般5-3分,差2-1 分,没有0分。水平优良7-5分,项目队伍成员全部具备相关资质,主要工作人员从事相关工作时间在5年及以上;组织机构完善,分工合理,职责、界面清晰,工作有计划、有监督、有检查。水平一般4-3分,主要工作人员及部分工作人员具备相关资质,主要工作人员从事相关工作时间在5年以下;组织机构较完善,分工合理,职责、界面清晰,工作有计划。水平差2-1分,主要工作人员具备相关资质,从事相关工作时间在5年以下;组织机构不完善,职责、界面有缺陷。没有0分,主要工作人员不具备相关资质;无组织机构。"
+ }
+ ],
+ "六、后续服务承诺(5分)": [
+ {
+ "评分": "5分",
+ "要求": "根据后续服务承诺内容合理性、针对性酌情打分,5-0分。"
+ }
+ ],
+ "七、类似项目业绩和实施经验(10分)": [
+ {
+ "评分": "10分",
+ "要求": "近3年同类项目经历每个得2分,最高10分。"
+ }
+ ],
+ "八、对投标人评价(20分)": [
+ {
+ "评分": "20分",
+ "要求": "根据最近一年度业主单位对供应商的评价结果进行评分,95分及以上得20分,每降低5分,扣2分,扣完为止;未取得业主单位评价结果的供应商或业主单位未开展供应商年度评价的,按供应商提供的最近一年度履约评价证明材料(业主单位满意度调查表、资信评价等),提供评价结果为满意或优良的,每份得4分,最高得20分。"
+ }
+ ]
+ },
+ "技术评分-2": {
+ "1.工程业绩(12分)": [
+ {
+ "评分": "12分",
+ "要求": "对满足招标公告要求的业绩进行评审,按照业绩数量从高到低对投标人进行排序并评价。优:排序为前30%(含)的。11-12分良:排序为前30%(不含)-70%(含)的。9-10分一般:剩余排序的。7-8分注:按以上百分比规则计算时,四舍五入取整。"
+ }
+ ],
+ "2.施工组织机构(11分)": [
+ {
+ "评分": "11分",
+ "要求": "对施工组织机构、进度计划及施工工期保证措施进行评价。优:组织机构、进度计划及施工工期保证措施科学合理。10-11分良:组织机构、进度计划及施工工期保证措施满足施工要求。8-9分一般:组织机构、进度计划及施工工期保证措施一般或不合理。6-7分"
+ }
+ ],
+ "3.主要施工方法(10分)": [
+ {
+ "评分": "10分",
+ "要求": "对根据项目特点编制的施工方法进行评价。优:施工方法优良,工艺先进。9-10分良:施工方法较好,工艺可行。7-8 分一般:施工方法一般,工艺简单。6分"
+ }
+ ],
+ "4.安全管理(5分)": [
+ {
+ "评分": "5分",
+ "要求": "对安全目标、安全保证管理体系、安全组织机构、安全管控实施方案进行评价。优:安全管理组织详细,可控性高。5分良:安全管理组织可行,有一定可控性。4分一般:安全管理组织模糊,可控性低。3分"
+ }
+ ],
+ "5.主要施工机械组织(5分)": [
+ {
+ "评分": "5分",
+ "要求": "对新施工机械、机具及施工工艺保证措施进行评价。优:施工机械组织周密,可控性强。5分良:施工机械组织可行,有一定可控性。4分一般:施工机械组织简单,可控性低。3分"
+ }
+ ],
+ "6.劳动力安排组织(8分)": [
+ {
+ "评分": "8分",
+ "要求": "对劳动力安排组织进行评价。优:劳动力安排组织周密,劳动力配备科学合理,可控性强。7-8分良:劳动力安排组织可行,劳动力配备基本满足,有一定可控性。-6分一般:劳动力安排组织简单,劳动力配备不足,可控性低。3-4分"
+ }
+ ],
+ "7.确保工程质量的技术组织措施(5分)": [
+ {
+ "评分": "5分",
+ "要求": "对确保工程质量的技术组织措施进行评价。优:工程质量技术组织措施科学,全面,对影响工程质量的相关因素分析和考虑全面,针对性强。5分良:工程质量技术组织措施合理,对影响工程质量的相关因素分析和考虑不全面,具备一定针对性。4分一般:工程质量技术组织措施简单,未考虑影响工程质量的相关因素,针对性低。3分"
+ }
+ ],
+ "8.确保安全生产的技术组织措施(5分)": [
+ {
+ "评分": "5分",
+ "要求": "对确保安全生产的技术组织方案进行评价。优:安全技术组织措施科学,全面,针对性强。5分良:安全技术组织措施合理,具备一定针对性。4分一般:安全技术组织措施简单,针对性低。3分"
+ }
+ ],
+ "9.应急抢险措施(5分)": [
+ {
+ "评分": "5分",
+ "要求": "对应急抢险措施方案进行评价。优:应急抢险措施科学,全面,针对性强。5分良:应急抢险措施合理,具备一定针对性。4分一般:应急抢险措施简单,针对性低。3分"
+ }
+ ],
+ "10.确保工期的技术组织措施(5分)": [
+ {
+ "评分": "5分",
+ "要求": "对确保工期的技术组织方案进行评价。优:工期技术组织措施科学,全面,针对性强。5分良:工期技术组织措施合理,具备一定针对性。4分一般:工期技术组织措施简单,针对性低。3分"
+ }
+ ],
+ "11.确保文明施工的技术组织措施(9分)": [
+ {
+ "评分": "9分",
+ "要求": "对文明施工及环保措施的有效性、可操作性进行评价。优:文明施工五牌一图制作规范,着装统一整洁,施工现场防尘降噪等措施完备。8-9分良:五牌一图制作满足要求,有着装要求,施工现场防尘降噪等具备一定措施。6-7分一般:五牌一图制作欠规范,无着装要求,施工现场防尘降噪等措施一般。4-5分"
+ }
+ ],
+ "12、对投标人评价(20分)": [
+ {
+ "评分": "20分",
+ "要求": "根据最近一年度业主单位对供应商的评价结果进行评分,95分及以上得20分,每降低5分,扣2分,扣完为止;未取得业主单位评价结果的供应商或业主单位未开展供应商年度评价的,按供应商提供的最近一年度履约评价证明材料(业主单位满意度调查表、资信评价等),提供评价结果为满意或优良的,每份得4分,最高得20分。"
+ }
+ ]
+ }
+ },
+ "商务评分": {
+ "1.诚信评价(0分)": [
+ {
+ "评分": "-30-0分",
+ "要求": "不存在《国家电网有限公司供应商关系管理办法》中规定的不良行为;或存在《国家电网有限公司供应商关系管理办法》中规定的不良行为,但最近一次受到供应商不良行为处理解除之日,距离投标截止日超过3年,不扣分。至本项目投标截止日,存在《国家电网有限公司供应商关系管理办法》中规定的不良行为,且最近一次受到供应商不良行为处理解除之日,距离投标截止日超过2年但在3年以内(含),扣5 分,其中,存在行贿行为的,扣10分。至本项目投标截止日,存在《国家电网有限公司供应商关系管理办法》中规定的不良行为,且最近一次受到供应商不良行为处理解除之日,距离投标截止日超过1年但在2年以内(含),扣10 分,其中,存在行贿行为的,扣20分。至本项目投标截止日,存在《国家电网有限公司供应商关系管理办法》中规定的不良行为,且最近一次受到供应商不良行为处理解除之日1年以内(含),扣15分,其中,存在行贿行为的,扣30分。"
+ },
+ {
+ "评分": "-10-0分",
+ "要求": "不存在失信行为,或存在质量、诚信以外失信行为,情节轻微,行政处罚罚款累计在1万元以下,不扣分。存在质量、诚信以外失信行为,行政处罚罚款累计在1万元及以上30万元以下,扣5分。存在质量、诚信失信行为,或存在质量、诚信以外失信行为,但未纳入失信黑名单,行政处罚罚款累计在30万元及以上扣10分。"
+ },
+ {
+ "评分": "-20-0分",
+ "要求": "投标截止日近一年内,经查证核实,投标人存在打招呼、请托关照等可能影响评标工作公正性行为的,扣20分。无上述行为的,不扣分。"
+ }
+ ],
+ "2.绿色低碳评价(12分)": [
+ {
+ "评分": "2分",
+ "要求": "对企业的绿色发展顶层规划及执行情况进行评价:建立了科学合理的绿色发展顶层规划并执行较好的,得2分;建立了科学合理的绿色发展顶层规划并执行一般的,得1分;未建立绿色发展顶层规划的,得0分。"
+ },
+ {
+ "评分": "4分",
+ "要求": "对国家级能源管理体系、质量管理体系、职业健康安全管理体系及环境管理体系证书认证情况进行评价:取得4项认证的得4分;取得1-3项认证的得2分;未取得认证的得0分。"
+ },
+ {
+ "评分": "4分",
+ "要求": "对企业发布ESG(环境、社会和公司治理)报告,取得环评/能评报告,取得废水/废气/废固报告情况进行评价:具有2类/3类报告的得4分;具有1类报告的得2分;未取得的得0分。如涉及环境行政处罚的,扣4分。"
+ },
+ {
+ "评分": "2分",
+ "要求": "对供应商电能消耗量中绿电的使用情况及取得绿色电力证书情况进行评价:情况良好的得2分;情况一般的得1分;情况较差的得0分。"
+ }
+ ],
+ "3.科研创新评价(7分)": [
+ {
+ "评分": "1分",
+ "要求": "对供应商投标截止日近3年内取得的科技成果情况进行综合评价:取得过国家级科技创新成果的,得1分;取得过省级科技创新成果的,得0.5分;取得过其他级别创新成果的,得0.3分;未取得任何级别创新成果的,得0分。"
+ },
+ {
+ "评分": "1分",
+ "要求": "企业制定创新激励相关政策和机制的,得1分;企业未制定创新激励相关政策和机制的,得0分。"
+ },
+ {
+ "评分": "3分",
+ "要求": "拥有高级及以上职称人员和高级技师人员≥30人,得3分;拥有高级及以上职称人员和高级技师人员≥15人,得2分;拥有高级及以上职称人员和高级技师人员<15人,得1分;"
+ },
+ {
+ "评分": "2分",
+ "要求": "对供应商投标截止日近3年内科研经费投入进行评价:任一年研发投入占比达2%以上,得2分;有研发投入,得1分;无研发投入,得0分。"
+ }
+ ],
+ "4.综合评价(81分)": [
+ {
+ "评分": "36分",
+ "要求": "对投标人的能力、人员、资质等综合实力进行评审。优:32-33分良:29-31分一般:26-28分"
+ },
+ {
+ "评分": "2分",
+ "要求": "获得中国质量奖、中国质量提名奖、全国质量奖及中国工业大奖任意一项及以上的,得2分;投标人具有各省、自治区、直辖市、计划单列市科技行政管理部门同本级财政、税务部门组成的本地区高新技术企业认定管理机构颁发的高新技术企业证书的,得1分。"
+ },
+ {
+ "评分": "45分",
+ "要求": "对商务投标文件的整体情况进行评审,根据是否按照招标文件规定的投标文件格式提交了完整的商务投标文件、有无制作投标文件目录、有无填写偏差表、遗漏项数、文件签署进行评审。优:提交了完整的商务投标文件且整体情况优良。14分良:提交了基本完整的商务投标文件且整体情况较好。13分一般:提交的商务投标文件存在多项缺漏项或整体情况一般。12 分报价质量:对投标报价完整性、准确性、规范性、合理性进行综合评审。优:30-31分"
+ }
+ ]
+ },
+ "投标报价评分": {
+ "投标报价评分标准": [
+ {
+ "评分": "100分",
+ "要求": "计算基准价价格得分=100-100xnx(|投标人的评标价-基准价|/基准价)。四舍五入取小数点后两位。当投标人的评标价<基准价时, $n = 0 . 5 ;$当投标人的评标价>基准价时, $n = 2$O 基准价为所有通过技术、商务评审的合格投标人的评标价去掉部分高价和部分低价后(但不影响其参与价格分计算)的算术平均值x(1+浮动系数),浮动系数为C,开标现场随机抽取并公布,浮动系数抽取范围-3%-0%,以0.5%为级差。其中计算投标报价的基准价时,需要去除的投标报价情况如下:合格投标数量≤5时,直接计算;合格投标数量=6时,去掉一个最高价;合格投标数量≥7时,去掉一个最高价、一个最低价。注:1、公式中的评标价:各包通过技术、商务初评的合格投标人的投标报价经算术错误修正后并按以下公式折算后的价格。2、投标报价按照国家现行税收法律法规、部门规章、行业规范执行。"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/flask_app/testdir/test3.py b/flask_app/testdir/test3.py
index d3b6bcd..254ce2b 100644
--- a/flask_app/testdir/test3.py
+++ b/flask_app/testdir/test3.py
@@ -1,175 +1,399 @@
-import json
-
-from flask_app.general.doubao import doubao_model
-from flask_app.general.json_utils import clean_json_string
-
+from flask_app.general.商务技术评分提取 import compute_total_score
data={
- "服务要求": [
- "投标人和制造商在质量保证期内应当为采购人提供以下技术支持和服务:",
- "(1) 电话咨询中标人和制造商应当为采购人提供技术援助电话,解答采购人在使用中遇到的问题,及时为采购人提出解决问题的建议。",
- "▲(2) 现场响应采购人遇到使用及技术问题,电话咨询不能解决的, 中标人和制造商应在 2 小内到达现场(远郊区 4 小时内到达现场)进行处理,确保产品正常工作;无法在 8 小时内解决的,应在 24 小时内提供备用产品, 使采购人能够正常使用。",
- "(3) 技术升级在质保期内,如果中标人和制造商的产品技术升级,供应商应及时通知采购人,如 采购人有相应要求, 中标人和制造商应对采购人购买的产品进行升级服务。",
- "(4)在质保期内, 中标人每年至少主动为使用单位提供一次售后服务, 做好售后服务记录(使用单位签字盖章 ), 作为退还质保金的依据。",
- "▲(三) 备品备件及易损件",
- "中标人和制造商售后服务中,维修使用的备品备件及易损件应为原厂配件,未经采购人同意不得使用非原厂配件,常用的、容易损坏的备品备件及易损件的价格清单须在投标文件中列出。",
- "▲供应商对其提供产品的使用和操作应尽培训义务。供应商应提供对采购人的基本免费培训, 使采购人使用人员能够正常操作。"
- ],
- "商务要求": [
- "★交货期要求/工期要求签到合同后 15 日历天/60 日历天",
- "★质保要求三年",
- "1. 交货期 、交货地点及验收方式",
- "(一) 交货期(或为: 实施时间)",
- "1 、 中标人应在采购合同签订后 15 个日历日内完成交货;",
- "2 、 中标人应在采购合同签订后 60个日历日内完成安装调试并可投入使用。",
- "(二) 交货地点(或为: 实施地点)",
- "1 、交货地点: 广水市市内各中小学。",
- "2 、交货要求:",
- "(1) 中标人提供的全部货物必须完全符合招标文件要求的品种和数量; 规格型号和技术参数必须完全满足招标文件和中标人在投标中承诺的正偏离的要求;货物的品牌 、生产厂家必须符合中标人在投标中承诺的品牌和生产厂家。",
- "(2) 中标人提供的货物未达到招标投标文件规定要求, 且对采购人造成损失的, 由中标人承担一切责任, 并赔偿所造成的损失。",
- "(3) 采购人需要制造商对中标人交付的产品(包括质量 、技术参数等) 进行确认的, 制造商应予以配合, 并出具书面意见。",
- "(4) 产品包装材料归采购人所有。注:本项目为采购人与使用人(用户)分离的项目 。中标人在送货前须按 采购人的要求 制作送货的相关的表格交采购人审核。",
- "(三) 验收方式",
- "1 、到货验收:到货验收由各项目单位(用户) 和中标人共同负责实施 。货物到达各项目单位(用户) 后, 由各项目单位(用户)组织人员和中标人代表在场当面开箱检查,核对货物的品牌、规格型号,查阅货物技术资料、装箱单、合格证等资, 检查外观, 核实货物数量 。到货验收合格条件如下:",
- "(1) 中标人在合同约定时间内完成交货;",
- "(2)货物的品牌 、规格型号符合中标人投标的承诺;",
- "(3)货物技术资料 、装箱单 、合格证等资料齐全;",
- "(4)货物全新 、完好无损;",
- "(5)货物数量符合采购人指定各项目单位(用户) 配备数量。",
- "2 、项目初验:各项目单位货物安装调试完成,运行正常,相关人员技术培训完成后 。中标人向项目单 位(用户)提供完整的项目实施资料(供货清单,货物和合格证、使用说明书、保修卡,货物安装布线图,培训资料,售后服务联系表。规范装订成册) 。 由各项目单位(用户)组织初验, 初验后按采购人要求填写初验合格证明。",
- "3 、项目终验:项目终验由采购人组织并成立验收小组验收 。项目终验合格条件如下:",
- "(1)设备技术参数与投标文件和采购合同一致, 性能指标达到 规定的标准;",
- "(2) 本项目所有项目单位(用户)初验合格(提供项单位初验合格证明 );",
- "(3) 项目实施资料完整(按采购人要求提供并规范装订成册 ) 。",
- "(4) 交货 、安装完成时间在合同规定时间内 完成。",
- "2. 报价要求",
- "本次报价须为人民币报价,包含:产品价、运输费( 含装卸费)、保险费、安装调试费、 税费、培训费等货到采购人指定地点并完成本项目的所有费用。因投标人自身原因造成漏报、 少报皆由其自行承担责任, 采购人不再补偿。",
- "3. 质量保证及售后服务",
- "▲ 1 、投标人应明确承诺: 所投设备免费质保期三年, 并提供设备生产厂家针对此项目的授权书及售后服务承诺函。",
- "2、投标产品属于国家规定“三包 ”范围的,其产品质量保证期不得低于“三包 ”规定。",
- "3 、投标人的质量保证期承诺优于国家“三包 ”规定的, 按招标文件要求, 投标人承诺执行。",
- "4 、投标产品由制造商(指产品生产制造商, 或其负责销售 、售后 服务机构, 以下同) 负责标准售后服务的, 应当在投标文件中予以明确说明,并附制造商售后服务承诺。",
- "2 、质保期外服务要求",
- "( 1) 质量保证期过后, 供应商和制造商应同样提供免费电话咨询服务, 并应承诺提供 产品上门维护服务。",
- "(2) 质量保证期过后, 采购人需要继续由原供应商和制造商提供售后服务 的, 该供应商和制造商应以优惠价格提供售后服务。",
- "4. 付款方式",
- "(一)中标人在合同约定时间内完成交货,经采购人审核确认后,中标人出具全额发票, 采购人在 10 个工作日内向市财政局提交申请, 支付合同全额的 40%;",
- "(二)中标人在合同约定时间内完成所供货物 的安装集成并投入正常使用,经采购人组织验收(终验)合格后, 付到合同总额的 9 5%, 余额 5%留作质保金。",
- "5. 知识产权",
- "采购人在中华人民共和国境内使用投标人提供的货物及服务时免受第三方提出的侵犯 其专利权或其它知识产权的起诉。如果第三方提出侵权指控, 中标人应承担由此而引起的一切法律责任和费用。",
- "6. 培训",
- "▲供应商对其提供产品的使用和操作应尽培训义务。供应商应提供对采购人的基本免费 培训, 使采购人使用人员能够正常操作。",
- "7. 投标人及产品制造商要求",
- "▲ (一) 投标人",
- "投标人(含集团公司旗下专业子公司) 获得 ISO9001 质量管理体系认证 、ISO 14001 环 境管理体系认证及 OHSAS18001 职业健康安全管理体系认证。投标人(含集团公司)具备工信部核发的《中华人民共和国基础电信业务经营许可证》, 具有合法电信网络运营商资格。以上证明资料提供复印件, 加盖制造商公章。",
- "▲( 二) 产品制造商",
- "为保证系统的安全性, 所投视频监控产品制造商需获得中国信息安全测评中心颁发的 《国家安全信息漏洞库(CNNVD) 技术支撑单位等级证书》。提供所投网络产品(交换机) 制造商, 近 2 年第三方权威咨询机构(IDC 或 CCW) 行 业销量排名数据证明。以上证明资料提供复印件, 加盖制造商公章。",
- "8. 其他",
- "(一)投标人必须在投标文件中对以上条款和服务承诺明确列出,承诺内容必须达到本 篇及招标文件其他条款的要求。",
- "(二) 其他未尽事宜由供需双方在采购合同中 详细约定。"
- ]
+"技术评分": {
+ "分标172404-1304085-9999 红外热成像仪技术详评细则": {
+ "技术业绩(10--13)": [
+ {
+ "评分": "13分",
+ "要求": "投标人提供了500台及以上红外热成像仪的供货业绩。"
+ },
+ {
+ "评分": "12分",
+ "要求": "投标人提供了100~499台红外热成像仪的供货业绩。"
+ },
+ {
+ "评分": "10分",
+ "要求": "投标人提供了1~99台红外热成像仪的供货业绩。"
+ }
+ ],
+ "关键技术能力(30--46)": [
+ {
+ "评分": "8分",
+ "要求": "主要技术参数项目(带*号项目包括:探测器像素(分辨率)、热灵敏度(噪声等效温差,NETD)、测温准确度(准确度))完全响应且有1项及以上优于招标文件要求。"
+ },
+ {
+ "评分": "6分",
+ "要求": "主要技术参数项目完全响应。"
+ },
+ {
+ "评分": "22分",
+ "要求": "重要技术参数项目(包括:测温一致性、连续稳定工作时间)完全响应且有1项及以上优于招标文件要求。"
+ },
+ {
+ "评分": "18分",
+ "要求": "重要技术参数项目完全响应。"
+ },
+ {
+ "评分": "14分",
+ "要求": "重要技术参数项目一项不满足减2分,以2分为级差,最低得14分。"
+ },
+ {
+ "评分": "8分",
+ "要求": "其它技术参数及使用环境条件等完全响应且有1项及以上优于招标文件要求。"
+ },
+ {
+ "评分": "6分",
+ "要求": "其它技术参数及使用环境条件等完全响应。"
+ },
+ {
+ "评分": "4分",
+ "要求": "其它技术参数及使用环境条件等有1项及以上不满足招标文件要求。"
+ },
+ {
+ "评分": "8分",
+ "要求": "投标产品的检验报告与投标文件技术规范响应的技术参数、性能指标、使用环境条件等完全一致或检验报告值优于响应值。"
+ },
+ {
+ "评分": "6分",
+ "要求": "投标产品的检验报告与投标文件技术规范响应的技术参数、性能指标、使用环境条件等一项检验报告值低于响应值减1分,以1分为级差,最低得6分。"
+ }
+ ],
+ "人力资源(1--3)": [
+ {
+ "评分": "3分",
+ "要求": "拥有高级及以上职称人员和高级技师人员≥30人。"
+ },
+ {
+ "评分": "2分",
+ "要求": "15≤拥有高级及以上职称人员和高级技师人员<30人。"
+ },
+ {
+ "评分": "1分",
+ "要求": "拥有高级及以上职称人员和高级技师人员<15人。"
+ }
+ ],
+ "工装设备(1--3)": [
+ {
+ "评分": "3分",
+ "要求": "生产设备品种、数量和精度全部优于产品制造需要者,且检测设备先进,方法科学规范,具备全部型式试验项目试验能力。"
+ },
+ {
+ "评分": "2分",
+ "要求": "生产设备品种、数量和精度全部满足产品制造需要,且主要工装优于制造能力需要;且检测设备优良,方法严谨规范,具备部分型式试验项目试验能力。"
+ },
+ {
+ "评分": "1分",
+ "要求": "生产设备品种、数量和精度基本满足产品制造需要,且检测设备可靠,方法合理规范,仅满足出厂试验需要。"
+ }
+ ],
+ "关键组件/原材料(1--3)": [
+ {
+ "评分": "3分",
+ "要求": "优于技术规范书中货物组件材料配置要求。"
+ },
+ {
+ "评分": "2分",
+ "要求": "完全满足技术规范书中货物组件材料配置要求。"
+ },
+ {
+ "评分": "1分",
+ "要求": "有一项不满足技术规范书中货物组件材料配置要求。"
+ }
+ ],
+ "制造环境(2--3)": [
+ {
+ "评分": "3分",
+ "要求": "具有封闭厂房和净化车间,生产环境的温度、湿度、照明和降尘量等全部优于国家或行业规程规定。"
+ },
+ {
+ "评分": "2分",
+ "要求": "仅能满足一般制造能力需要。"
+ }
+ ],
+ "工艺方法(1--3)": [
+ {
+ "评分": "3分",
+ "要求": "生产线及其工艺流程科学先进,针对关键工序节点的制造保障设备、措施设定设计管控科学有效,各工序的作业指导书、工艺控制文件齐全、统一、规范,产品工艺技术成熟、稳定,现场记录内容规范、详实,并具有可追溯性。"
+ },
+ {
+ "评分": "2分",
+ "要求": "生产线及其工艺流程满足质量保证需要,针对关键工序节点的制造保障设备、措施设定设计管控比较科学有效,主要工序的作业指导书、工艺控制文件齐全、统一、规范,产品工艺技术成熟、稳定,现场记录内容规范、详实,并具有可追溯性。"
+ },
+ {
+ "评分": "1分",
+ "要求": "生产线及其工艺流程满足质量保证需要,但各工序节点保障、管控水平一般,主要工序的作业指导书、工艺控制文件不够齐全、统一、规范,现场记录内容不够规范、详实,可追溯性较差。"
+ }
+ ],
+ "专项应答(0--3)": [
+ {
+ "评分": "3分",
+ "要求": "对产品专项应答或招标文件要求的提升设备质量专项应答等进行响应,应答响应情况较好。"
+ },
+ {
+ "评分": "2分",
+ "要求": "对产品专项应答或招标文件要求的提升设备质量专项应答等进行响应,应答响应情况一般。"
+ },
+ {
+ "评分": "0分",
+ "要求": "未应答响应。"
+ }
+ ],
+ "绩效评价(0--20)": [
+ {
+ "评分": "20分",
+ "要求": "重点考虑供应商在运行质量方面的表现,同时考虑供应商在生产制造、履约协调、现场安装、全寿命周期等方面的综合表现,根据评价结果进行评审。"
+ }
+ ],
+ "投标响应(1--3)": [
+ {
+ "评分": "3分",
+ "要求": "投标文件响应情况良好。"
+ },
+ {
+ "评分": "2分",
+ "要求": "投标文件响应情况一般。"
+ },
+ {
+ "评分": "1分",
+ "要求": "投标文件响应情况较差。"
+ }
+ ]
+ },
+ "分标172404-1701016-9999防火板技术详评细则": {
+ "投标文件对招标文件响应情况(5--10)": [
+ {
+ "评分": "7分",
+ "要求": "投标文件的对应性、规范性、全面性最优者。"
+ },
+ {
+ "评分": "3分",
+ "要求": "认真填写技术偏差表或清楚地说明无技术偏差。"
+ },
+ {
+ "评分": "1分",
+ "要求": "无技术偏差但在表中无说明。"
+ },
+ {
+ "评分": "0分",
+ "要求": "有技术偏差而不列出。"
+ }
+ ],
+ "投标设备对技术规范书的响应情况(23--35)": [
+ {
+ "评分": "10分",
+ "要求": "投标文件所述产品主要经济技术指标全部响应。"
+ },
+ {
+ "评分": "6分",
+ "要求": "投标文件所述产品主要经济技术指标每出现1项不符合项扣1分,最低得6分。"
+ },
+ {
+ "评分": "25分",
+ "要求": "对招标文件主要参数的响应情况全部满足技术规范要求。"
+ },
+ {
+ "评分": "17分",
+ "要求": "对招标文件主要参数的响应情况每出现1项不符合项扣1分,最低得17分。"
+ }
+ ],
+ "合同业绩(9--15)": [
+ {
+ "评分": "15分",
+ "要求": "超过公告要求200%及以上。"
+ },
+ {
+ "评分": "13分",
+ "要求": "超过公告要求100%及以上。"
+ },
+ {
+ "评分": "11分",
+ "要求": "超过公告要求50%及以上。"
+ },
+ {
+ "评分": "9分",
+ "要求": "业绩满足公告要求。"
+ }
+ ],
+ "资源实力(5--20)": [
+ {
+ "评分": "5分",
+ "要求": "生产和试验装备满足要求。"
+ },
+ {
+ "评分": "3分",
+ "要求": "生产和试验装备一般。"
+ },
+ {
+ "评分": "1分",
+ "要求": "生产和试验装备较差。"
+ },
+ {
+ "评分": "5分",
+ "要求": "工艺水平满足要求。"
+ },
+ {
+ "评分": "3分",
+ "要求": "工艺水平一般。"
+ },
+ {
+ "评分": "1分",
+ "要求": "工艺水平较差。"
+ },
+ {
+ "评分": "5分",
+ "要求": "人员实力强。"
+ },
+ {
+ "评分": "3分",
+ "要求": "人员实力一般。"
+ },
+ {
+ "评分": "1分",
+ "要求": "人员实力较差。"
+ },
+ {
+ "评分": "5分",
+ "要求": "剩余生产能力按照采购文件要求酌情打分。"
+ }
+ ],
+ "质量控制(3--10)": [
+ {
+ "评分": "5分",
+ "要求": "外购外协组件材料优秀可靠水平较高。"
+ },
+ {
+ "评分": "4分",
+ "要求": "外购外协组件材料等同于采购文件要求。"
+ },
+ {
+ "评分": "3分",
+ "要求": "外购外协组件材料略有差异,但基本满足采购文件要求。"
+ },
+ {
+ "评分": "5分",
+ "要求": "质量保证措施得力。"
+ },
+ {
+ "评分": "1分",
+ "要求": "质量保证措施一般。"
+ },
+ {
+ "评分": "0分",
+ "要求": "没有质量保证措施。"
+ }
+ ],
+ "服务合作(3--10)": [
+ {
+ "评分": "3分",
+ "要求": "技术服务措施、技术力量、管理水平良好。"
+ },
+ {
+ "评分": "2分",
+ "要求": "技术服务措施、技术力量、管理水平一般。"
+ },
+ {
+ "评分": "1分",
+ "要求": "技术服务措施、技术力量、管理水平较差。"
+ },
+ {
+ "评分": "3分",
+ "要求": "维修、售后服务的承诺书和实施细则良好。"
+ },
+ {
+ "评分": "2分",
+ "要求": "维修、售后服务的承诺书和实施细则一般。"
+ },
+ {
+ "评分": "1分",
+ "要求": "维修、售后服务的承诺书和实施细则较差。"
+ }
+ ],
+ "合同执行相关人员描述(1-4分)": [
+ {
+ "评分": "4分",
+ "要求": "良好。"
+ },
+ {
+ "评分": "2-3分",
+ "要求": "一般。"
+ },
+ {
+ "评分": "1分",
+ "要求": "较差。"
+ }
+ ]
+ },
+ "分标172404-1802010-9999防火涂料技术详评细则": {
+ "一、投标文件对招标文件要求的功能及技术参数响应情况(3--10)": [
+ {
+ "评分": "10分",
+ "要求": "投标文件所述产品主要技术参数/物料描述/物料扩展描述响应情况。"
+ }
+ ],
+ "二、检测设备、检验报告响应情况(6--10)": [
+ {
+ "评分": "10分",
+ "要求": "产品检测流程严谨,检测设备的性能、数量、种类等满足要求,检测试验报告齐全。"
+ },
+ {
+ "评分": "6分",
+ "要求": "检测报告不全者,以1分为级差扣分,最低得6分。"
+ }
+ ],
+ "三、制造厂工装设备、质量管理体系响应情况(6--10)": [
+ {
+ "评分": "5分",
+ "要求": "产品工装设备的性能、数量、种类等方面水平较高。"
+ },
+ {
+ "评分": "3分",
+ "要求": "产品工装设备的性能、数量、种类等方面水平较低。"
+ },
+ {
+ "评分": "5分",
+ "要求": "产品质量管理体系及有关流程的响应情况明确的质量管理流程,制造工艺及质量保证措施全面可行,执行的质量标准符合国家现行各项标准要求。"
+ },
+ {
+ "评分": "3分",
+ "要求": "产品质量管理体系及有关流程的响应情况不符合要求。"
+ }
+ ],
+ "四、原材料、组部件、配套件响应情况(6--10)": [
+ {
+ "评分": "5分",
+ "要求": "原材料质量水平、检测报告等响应情况好。"
+ },
+ {
+ "评分": "3分",
+ "要求": "原材料质量水平、检测报告等响应情况一般。"
+ },
+ {
+ "评分": "5分",
+ "要求": "组部件、配套件种类齐全并附有合格的检测报告。"
+ },
+ {
+ "评分": "3分",
+ "要求": "组部件、配套件种类不齐全或检测报告不合格。"
+ }
+ ],
+ "五、销售业绩(10--30)": [
+ {
+ "评分": "30分",
+ "要求": "根据投标人提供的有效的供货业绩证明(以增值税发票累计金额为准)酌情评分。"
+ }
+ ],
+ "六、履约评价(0--30)": [
+ {
+ "评分": "10分",
+ "要求": "根据取得好评履约评价意见的情况,进行评分,无评价意见不得分。"
+ },
+ {
+ "评分": "20分",
+ "要求": "如供应商为经销商,根据取得的制造商授权书数量,酌情评分,如为制造商则得满分。"
+ }
+ ]
+ }
+ },
}
-def extract_business_deviation(procurement):
- new_data = {}
- counter = 1
- if "服务要求" in procurement:
- new_data[f"招标要求{counter}"] = procurement["服务要求"]
- counter += 1
-
- # Extract "商务要求"
- if "商务要求" in procurement:
- new_data[f"招标要求{counter}"] = procurement["商务要求"]
- counter += 1
-
- # Extract "其他要求"
- if "其他要求" in procurement:
- new_data[f"招标要求{counter}"] = procurement["其他要求"]
- counter += 1
-
- business_requirements_string = json.dumps(new_data, ensure_ascii=False, indent=4)
- # print(business_requirements_string)
- prompt_template1 = """请帮我从以下文本中摘取商务要求部分,并将信息重新组织,键名为'商务要求',键值为字符串列表,其中每个字符串为一条商务要求,保留三角▲、五角星★(若有),但是去除开头的序号(若有)。
-#角色
-你是一个专业的招投标业务专家,擅长从招标文件中总结商务要求的部分,并逐条列出,作为编写商务要求偏离表的前置准备。
-
-#要求与指南:
-1. 每条内容需要有实际的含义、要求,不能光有标题性质的表述如'售后服务期限(质保期)及要求'。
-2. 你的回答内容需从所给文本中整理,尽量不改变原文的表达,请勿擅自添加三角▲、五角星★(除非以下要求与指南3.的特殊情况)
-3. 若输入文本中存在嵌套键值对格式,且键值本身语义完整且符合'商务要求',可直接将其添加至'商务要求'的键值中;若键值本身语义表达不完整,可将键值对用冒号':'拼接之后作为一条商务要求。
-4. 对于以三角▲或五角星★开头的字符串:
- a. 如果该字符串仅为标题性质的表述且不具备实际商务要求的含义,请根据语义关联性将其开头的三角▲或五角星★添加到紧随其后的若干(可为一)内容之后,形成完整的商务要求,并确保整个内容连贯。
- 注:默认在该字符串后面的一个字符串开头添加三角▲或五角星★,若有明确的序号或者语义表示了其后若干字符串之间的相关性,那么可在这些字符串开头都添加三角▲或五角星★,作为若干商务要求。
- b. 如果该字符串已经包含实际的商务要求,那么该内容作为一条完整的商务要求,保留开头的三角▲或五角星★。
- - 示例输入:
- ```
- "★ 提供高质量的售后服务,服务期限不少于两年。"
- ```
- - 示例输出:
- ```
- "★ 提供高质量的售后服务,服务期限不少于两年。"
- ```
- c. 无论哪种情况,都需确保不遗漏任何以三角▲或五角星★开头的重要信息。
-5. 若无商务要求,键值为空列表,即[]
-
-### 示例输入如下:
-{{
- "招标要求1": ["▲(1)整个平台运行运维服务,须安排人员驻场对平台进行运行维护,采用 4人轮流值班,依照 7×12小时对可视化督察巡控平台进行操作,确保平台稳定运行。","▲ (一) 投标人","1.投标人需要获得 ISO9001 质量管理体系认证 、ISO 14001 环境管理体系认证及 OHSAS18001 职业健康安全管理体系认证。","2.投标人具备网络运营商资格。"]
- "招标要求2": {{
- "合同履行期限": ["★交货期(工期):合同签订之日起 15个日历天内完成,并通过项目验收。"],
- "交货地点": ["采购人指定地点"],
- "报价方式": ["(1)本项目报价须为固定总价,包含但不限于:采购、实施、调试、试运行、验收、运维等所有完成本项目相关的一切费用。","(2)因投标人自身原因造成漏报、少报皆由其自行承担责任,采购人不再补偿。"],
- "其他要求": ["无。"]
- }}
-}}
-### 对应的参考输出如下:
-{{
- "商务要求":[
- "▲整个平台运行运维服务,须安排人员驻场对平台进行运行维护,采用 4人轮流值班,依照 7×12小时对可视化督察巡控平台进行操作,确保平台稳定运行。",
- "▲投标人 获得 ISO9001 质量管理体系认证 、ISO 14001 环境管理体系认证及 OHSAS18001 职业健康安全管理体系认证。",
- "▲投标人具备网络运营商资格"
- "★交货期(工期):合同签订之日起 15个日历天内完成,并通过项目验收。",
- "交货地点:采购人指定地点",
- "本项目报价须为固定总价,包含但不限于:采购、实施、调试、试运行、验收、运维等所有完成本项目相关的一切费用。",
- "因投标人自身原因造成漏报、少报皆由其自行承担责任,采购人不再补偿。"
- ]
-}}
-
-文本内容:{full_text}
- """
- user_query1 = prompt_template1.format(full_text=business_requirements_string)
- print(user_query1)
- model_res1 = doubao_model(user_query1)
- print(model_res1)
- # business_req_deviation = clean_json_string(model_res1)
- # prompt_template2 = """以下文本是项目采购需求的商务要求部分,请你帮我从键值列表中各字符串中提取带星★或带三角▲的要求项,你的返回格式同输入文本格式,外键名为'商务要求带星',键值为字符串列表,其中每个字符串为带星★或带三角▲的要求项。
- # 要求与指南:
- # 1. 每个星★或三角▲要求占据一个字符串。
- # 2. 若没有带星★或带三角▲的要求项,键值为空列表,即[]
- #
- # 特殊情况处理:
- # 对于输入类似于'技术要求中带★条款项不满足的视为无效投标'这种描述带星★或带三角▲的响应情况的,它本身不是带星或带三角的要求,因此不需要添加进字符串列表中;仅需把本身是带★或带三角▲的要求添加进来。
- #
- # ### 示例输入如下:
- # {{
- # "商务要求": [
- # "考虑设备兼容性、项目实施、交付及售后服务",
- # "★交货期(工期):合同签订之日起 15个日历天内完成,并通过项目验收。",
- # "▲本项目报价须为固定总价,包含但不限于:采购、实施、调试、试运行、验收、运维等所有完成本项目相关的一切费用。"
- # ]
- # }}
- # ### 对应的输出如下:
- # {{
- # "商务要求带星": [
- # "★交货期(工期):合同签订之日起 15个日历天内完成,并通过项目验收。",
- # "▲本项目报价须为固定总价,包含但不限于:采购、实施、调试、试运行、验收、运维等所有完成本项目相关的一切费用。"
- # ]
- # }}
- #
- # 文本内容:{full_text}
- # """
- # user_query2 = prompt_template2.format(full_text=model_res1)
- # model_res2 = doubao_model(user_query2)
- # business_star_req_deviation = clean_json_string(model_res2)
- #
- # return business_req_deviation, business_star_req_deviation
-
-extract_business_deviation(data)
+res=compute_total_score(data)
+print(res)
\ No newline at end of file
diff --git a/flask_app/工程标/截取pdf工程标版.py b/flask_app/工程标/截取pdf工程标版.py
index fe4a52f..0eab7e0 100644
--- a/flask_app/工程标/截取pdf工程标版.py
+++ b/flask_app/工程标/截取pdf工程标版.py
@@ -14,7 +14,6 @@ def extract_pages_tobidders_notice(pdf_path, output_folder, begin_pattern, begin
pdf_document = PdfReader(pdf_path)
exclusion_pattern = regex.compile(
r'文件的构成|文件的组成|须对应|需对应|须按照|需按照|须根据|需根据|文件组成|文件构成|文件的编制|文件编制')
-
def run_extraction():
start_page = None
mid_page = None
@@ -22,14 +21,15 @@ def extract_pages_tobidders_notice(pdf_path, output_folder, begin_pattern, begin
chapter_type = None # 用于存储“章”或“部分”
combined_mid_pattern = None
end_pattern = None
-
+ catalog_pattern = regex.compile(r'\s*目\s*录\s*$', regex.MULTILINE)
for i, page in enumerate(pdf_document.pages):
text = page.extract_text() or ""
cleaned_text = clean_page_content(text, common_header)
if mid_page is not None and exclusion_pattern and regex.search(exclusion_pattern, cleaned_text):
continue
-
+ if begin_page==0 and catalog_pattern.search(cleaned_text):
+ continue # 如果存在目录,跳过当前页面
if start_page is None:
match = regex.search(begin_pattern, cleaned_text)
if match and i > begin_page:
@@ -362,7 +362,7 @@ def truncate_pdf_main_engineering(input_path, output_folder, selection, logger,
1: 0, # 公告
2: 5, # 评标
3: 5, # 资格
- 4: 1, # 前附表
+ 4: 0, # 前附表
5: 0 # 无效标
}.get(selection, 0)
@@ -443,7 +443,7 @@ if __name__ == "__main__":
logger = get_global_logger("123")
start_time = time.time()
# input_path = r"C:\Users\Administrator\Desktop\new招标文件\工程标"
- pdf_path=r"D:\flask_project\flask_app\static\output\output1\f91db70d-8d96-44a5-b840-27d2f1ecbe95\ztbfile.pdf"
+ pdf_path=r"C:\Users\Administrator\Desktop\货物标\zbfiles\唐山市公安交通警察支队机动车查验机构视频存储回放系统竞争性谈判-招标文件正文(1).pdf"
# pdf_path = r"C:\Users\Administrator\Desktop\招标文件\招标02.pdf"
# input_path=r"C:\Users\Administrator\Desktop\招标文件\招标test文件夹\zbtest8.pdf"
diff --git a/flask_app/货物标/商务服务其他要求提取.py b/flask_app/货物标/商务服务其他要求提取.py
index 28c5fa2..3e6dddb 100644
--- a/flask_app/货物标/商务服务其他要求提取.py
+++ b/flask_app/货物标/商务服务其他要求提取.py
@@ -390,7 +390,6 @@ def get_business_requirements(procurement_path, processed_filepath, model_type):
return final_res
-# TODO:改为先判断,再摘取
if __name__ == "__main__":
# truncate_file = "C:\\Users\\Administrator\\Desktop\\fsdownload\\e4be098d-b378-4126-9c32-a742b237b3b1\\ztbfile_procurement.docx"
# truncate_file = r"C:\Users\Administrator\Desktop\货物标\output1\2-招标文件(广水市教育局封闭管理)_procurement.pdf"
diff --git a/flask_app/货物标/基础信息解析货物标版.py b/flask_app/货物标/基础信息解析货物标版.py
index 18bacd1..fbc2bc9 100644
--- a/flask_app/货物标/基础信息解析货物标版.py
+++ b/flask_app/货物标/基础信息解析货物标版.py
@@ -64,7 +64,6 @@ def combine_basic_info(merged_baseinfo_path, procurement_path,clause_path,invali
return {"基础信息": aggregated_baseinfo}
-#TODO:招标控制价50000怎么来的
if __name__ == "__main__":
start_time=time.time()
# baseinfo_file_path = "C:\\Users\\Administrator\\Desktop\\货物标\\truncate_all\\ztbfile_merged_baseinfo\\ztbfile_merged_baseinfo_3-31.pdf"
diff --git a/flask_app/货物标/截取pdf货物标版.py b/flask_app/货物标/截取pdf货物标版.py
index 3441a6a..9ce33be 100644
--- a/flask_app/货物标/截取pdf货物标版.py
+++ b/flask_app/货物标/截取pdf货物标版.py
@@ -16,9 +16,12 @@ def extract_pages_generic(pdf_document, begin_pattern, end_pattern, begin_page,
text = page.extract_text() or ""
cleaned_text = clean_page_content(text, common_header)
if output_suffix == "tobidders_notice":
+ catalog_pattern = regex.compile(r'\s*目\s*录\s*$', regex.MULTILINE)
if exclusion_pattern and flag and (start_page is not None) and regex.search(exclusion_pattern, cleaned_text):
flag=False
continue
+ if begin_page==0 and catalog_pattern.search(cleaned_text):
+ continue # 如果存在目录,跳过当前页面
else:
#一般投标文件的编制、组成在'投标人须知前附表/正文'中,需要防止begin_pattern匹配到这部分内容,所以在start_page is None的时候使用该exclusion_pattern
if exclusion_pattern and flag and (start_page is None) and regex.search(exclusion_pattern, cleaned_text):
@@ -168,6 +171,7 @@ def extract_pages_tobidders_notice(pdf_path, begin_pattern, begin_page, common_h
end_page = None
combined_mid_pattern = None # 中间页的组合模式
pdf_document = PdfReader(pdf_path)
+ catalog_pattern = regex.compile(r'\s*目\s*录\s*$', regex.MULTILINE)
for i, page in enumerate(pdf_document.pages):
text = page.extract_text() or ""
cleaned_text = clean_page_content(text, common_header)
@@ -175,6 +179,8 @@ def extract_pages_tobidders_notice(pdf_path, begin_pattern, begin_page, common_h
# 如果已经找到中间页,且当前页匹配排除模式,则跳过
if exclusion_pattern and regex.search(exclusion_pattern, cleaned_text) and mid_page is not None:
continue
+ if begin_page==0 and catalog_pattern.search(cleaned_text):
+ continue # 如果存在目录,跳过当前页面
# 识别起始页
if start_page is None:
@@ -304,6 +310,7 @@ def extract_pages_twice_tobidders_notice(pdf_document, common_header, begin_page
exclusion_pattern = regex.compile(r'文件的构成|文件的组成|文件构成|文件组成|文件的编制|文件编制')
+
# 提取第一部分
start_page1, end_page1 = extract_pages_generic(pdf_document, begin_pattern, end_pattern, begin_page, common_header,exclusion_pattern,output_suffix)
if start_page1 is None or end_page1 is None:
@@ -476,7 +483,7 @@ def truncate_pdf_main_goods(input_path, output_folder, selection,logger, output_
pdf_path = convert_to_pdf(input_path)
common_header, last_begin_index = get_start_and_common_header(input_path, 10)
begin_page = last_begin_index if last_begin_index != 0 else {
- 4: 1,
+ 4: 0,
2: 5,
3: 5,
1: 0,
@@ -612,11 +619,11 @@ if __name__ == "__main__":
logger = get_global_logger("123")
# input_path = r"C:\Users\Administrator\Desktop\new招标文件\货物标"
# pdf_path = r"C:\Users\Administrator\Desktop\招标文件-采购类\2024-贵州-贵州医科大学附属医院导视系统零星制作安装项目.pdf"
- pdf_path=r"D:\flask_project\flask_app\static\output\output1\f91db70d-8d96-44a5-b840-27d2f1ecbe95\ztbfile.pdf"
+ pdf_path=r"D:\flask_project\flask_app\static\output\output1\test\招标文件-第二章-第六章-172404【电能表标准设备172404-1305001-0002】.pdf"
# input_path = r"C:\Users\Administrator\Desktop\货物标\zbfiles\2-招标文件(广水市教育局封闭管理).pdf"
# pdf_path=r"C:\Users\Administrator\Desktop\文件解析问题\文件解析问题\1414cb9c-7bf4-401c-8761-2acde151b9c2\ztbfile.pdf"
- output_folder = r"D:\flask_project\flask_app\static\output\output1\f91db70d-8d96-44a5-b840-27d2f1ecbe95\tmp"
+ output_folder = r"D:\flask_project\flask_app\static\output\output1\test"
# output_folder = r"C:\Users\Administrator\Desktop\new招标文件\output2"
- selection = 4 # 例如:1 - 公告, 2 - 评标办法, 3 - 资格审查后缀有qualification1或qualification2(与评标办法一致) 4.投标人须知前附表part1 投标人须知正文part2 5-采购需求
+ selection = 6 # 例如:1 - 公告, 2 - 评标办法, 3 - 资格审查后缀有qualification1或qualification2(与评标办法一致) 4.投标人须知前附表part1 投标人须知正文part2 5-采购需求 6-invalid_path
generated_files = truncate_pdf_main_goods(pdf_path, output_folder, selection,logger)
- # print(generated_files)
+ print(generated_files)
diff --git a/flask_app/货物标/提取采购需求main.py b/flask_app/货物标/提取采购需求main.py
index 24cd490..46cfbec 100644
--- a/flask_app/货物标/提取采购需求main.py
+++ b/flask_app/货物标/提取采购需求main.py
@@ -11,8 +11,6 @@ from flask_app.general.通义千问long import upload_file
from flask_app.货物标.商务服务其他要求提取 import get_business_requirements
-
-#TODO:目前若截取不到采购需求,默认上传整份procurement_path=invalid_path,再转md格式,后续可以判断,这种可以就转docx,不再转md了
def fetch_procurement_reqs(procurement_path, invalid_path):
#procurement_path可能是pdf\docx
# 定义默认的 procurement_reqs 字典
@@ -31,7 +29,7 @@ def fetch_procurement_reqs(procurement_path, invalid_path):
try:
proc_path = os.path.abspath(procurement_path)
invalid_path = os.path.abspath(invalid_path)
- # 判断路径是否一致
+ # 判断路径是否一致,一致表示一开始procurement_path截取为空
if proc_path == invalid_path:
# 读取 PDF 页码数
page_count = get_pdf_page_count(procurement_path)
@@ -43,11 +41,11 @@ def fetch_procurement_reqs(procurement_path, invalid_path):
else:
tech_model_type= 1 #doubao
busi_model_type =4 #qianwen-plus
- processed_filepath = convert_file_to_markdown(procurement_path) # 转markdown格式
+ processed_filepath = convert_file_to_markdown(procurement_path,"extract3.txt") # invalid_path->markdown格式
else:
tech_model_type = 1 #doubao
busi_model_type = 4
- processed_filepath = convert_file_to_markdown(procurement_path) # 转markdown格式
+ processed_filepath = convert_file_to_markdown(procurement_path) # 正常情况:procurement_path->markdown格式
# processed_filepath = pdf2txt(procurement_path) # 纯文本提取
# 使用 ThreadPoolExecutor 并行处理 get_technical_requirements 和 get_business_requirements
with concurrent.futures.ThreadPoolExecutor() as executor:
@@ -76,9 +74,6 @@ def fetch_procurement_reqs(procurement_path, invalid_path):
# 在出错时返回默认的包含空字符串的字典
return DEFAULT_PROCUREMENT_REQS.copy()
-
-# TODO:技术要求可以在技术参数之后执行,把完整的技术参数输入,问大模型,除了上述内容还有哪些,这样的话把技术标和其他的区分开。
-
if __name__ == "__main__":
start_time = time.time()
output_folder = "C:\\Users\\Administrator\\Desktop\\货物标\\货物标output"