| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558 |
- from __future__ import annotations
- import re
- from pathlib import Path
- from sqlalchemy import select
- from sqlalchemy.orm import Session
- from app.core.errors import APIError
- from app.db.models.document import DocumentExtractionTemplate
- SUPPORTED_FILE_EXTENSIONS = {
- ".pdf": "pdf",
- ".doc": "word",
- ".docx": "word",
- ".xls": "excel",
- ".xlsx": "excel",
- ".csv": "excel",
- }
- LEGACY_GENERIC_TEMPLATES = [
- {
- "code": "ground_main_fan_inspection_report",
- "name": "地面主通风机检验报告",
- "document_type": "ground_main_fan_inspection_report",
- "description": "抽取地面主通风机检验报告的报告信息、检测项目、风机基本参数和电机基本参数。",
- "prompt": (
- "你是一名矿山通防业务资料抽取专家。请从地面主通风机检验报告中"
- "提取报告基本信息、检测项目结果、风机基本参数和电机基本参数。"
- "数值必须保留原单位和原文含义,找不到时填 null,不得编造。"
- "本轮不提取特性曲线数据。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "地面主通风机检验报告",
- "主通风机检验报告",
- "主要通风机检验报告",
- ],
- "groups": [
- {
- "key": "report_info",
- "name": "报告基本信息",
- "fields": [
- {"key": "report_issuer", "name": "报告出具单位", "type": "text"},
- {"key": "qualification_status", "name": "资质情况", "type": "text"},
- {"key": "report_date", "name": "报告时间", "type": "date"},
- {"key": "expiry_date", "name": "到期时间", "type": "date"},
- ],
- },
- {
- "key": "inspection_items",
- "name": "检测项目",
- "fields": [
- {"key": "basic_requirements", "name": "基本要求", "type": "text"},
- {"key": "appearance_structure", "name": "外观及结构", "type": "text"},
- {"key": "installation_configuration", "name": "安装及配置", "type": "text"},
- {"key": "surge_check", "name": "喘振", "type": "text"},
- {"key": "airflow_pressure_comparison", "name": "风量、压力", "type": "object"},
- {"key": "fan_efficiency", "name": "通风机运行效率", "type": "number"},
- {"key": "motor_operating_power", "name": "电动机运行功率", "type": "number"},
- {"key": "noise", "name": "噪声", "type": "number"},
- {"key": "vibration_velocity_rms", "name": "振动速度有效值", "type": "number"},
- {"key": "motor_temperature", "name": "电动机轴承、定子温度", "type": "object"},
- {"key": "motor_cold_insulation_resistance", "name": "电动机冷态绝缘电阻", "type": "number"},
- {"key": "grounding_resistance", "name": "接地电阻值", "type": "number"},
- {"key": "blade_clearance", "name": "叶片与机壳(保护圈)的单侧间隙值", "type": "number"},
- ],
- },
- {
- "key": "fan_parameters",
- "name": "风机基本参数",
- "fields": [
- {"key": "fan_model", "name": "风机型号", "type": "text"},
- {"key": "fan_explosion_grade", "name": "风机防爆等级", "type": "text"},
- {"key": "fan_airflow_range", "name": "风量范围", "type": "text"},
- {"key": "fan_pressure_range", "name": "风压范围", "type": "text"},
- {"key": "fan_motor_power", "name": "电机功率", "type": "number"},
- {"key": "friction_spark_certificate", "name": "摩擦火花安全检验合格证号", "type": "text"},
- {"key": "safety_mark_certificate", "name": "安全标志准用证号", "type": "text"},
- {"key": "explosion_proof_certificate", "name": "防爆合格证号", "type": "text"},
- {"key": "fan_factory_serial", "name": "出厂编号", "type": "text"},
- {"key": "fan_manufacturer", "name": "生产厂家", "type": "text"},
- ],
- },
- {
- "key": "motor_parameters",
- "name": "电机基本参数",
- "fields": [
- {"key": "motor_model", "name": "电机型号", "type": "text"},
- {"key": "motor_explosion_grade", "name": "电机防爆等级", "type": "text"},
- {"key": "motor_rated_power", "name": "额定功率", "type": "number"},
- {"key": "motor_rated_voltage", "name": "额定电压", "type": "number"},
- {"key": "motor_rated_current", "name": "额定电流", "type": "number"},
- {"key": "motor_rated_frequency", "name": "额定频率", "type": "number"},
- {"key": "motor_rated_speed", "name": "额定转速", "type": "number"},
- {"key": "motor_insulation_class", "name": "绝缘等级", "type": "text"},
- {"key": "motor_safety_mark_certificate", "name": "电机安标证号", "type": "text"},
- {"key": "motor_explosion_proof_certificate", "name": "电机防爆合格证号", "type": "text"},
- ],
- },
- ],
- },
- },
- {
- "code": "main_fan_external_leakage_rate_report",
- "name": "主要通风机外部漏风率测定报告",
- "document_type": "main_fan_external_leakage_rate_report",
- "description": "抽取主要通风机外部漏风率测定的基础数据、风量结果、漏风率和合规结论。",
- "prompt": (
- "你是一名矿山主要通风机外部漏风率审查专家。请从报告中提取测定日期、"
- "组织安排、仪器、测定基础数据、南风井和北风井的排风量、总回风量、漏风量、"
- "漏风率以及标准限值符合性。"
- "summary 只输出分析结果:南风井漏风率及结论、北风井漏风率及结论、"
- "最大漏风率、是否超过 5% 限值和总体结论;不要写证据原文或过程说明。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "主要通风机外部漏风率测定报告",
- "外部漏风率测定报告",
- "主要通风机外部漏风率",
- ],
- "groups": [
- {
- "key": "report_info",
- "name": "报告基本信息",
- "order": 1,
- "fields": [
- {"key": "report_title", "name": "报告名称", "type": "text"},
- {"key": "mine_name", "name": "矿井名称", "type": "text"},
- {"key": "measurement_date", "name": "测定日期", "type": "date"},
- {"key": "report_date", "name": "报告日期", "type": "date"},
- {"key": "issuing_department", "name": "出具部门", "type": "text"},
- {"key": "regulation_basis", "name": "依据文件", "type": "text"},
- ],
- },
- {
- "key": "measurement_plan",
- "name": "测定组织与仪器",
- "order": 2,
- "fields": [
- {"key": "measurement_groups", "name": "测定分组和人员", "type": "list"},
- {"key": "measurement_instruments", "name": "使用仪器", "type": "list"},
- {"key": "measurement_time", "name": "测定时间段", "type": "text"},
- {"key": "repeat_count", "name": "测量次数", "type": "number"},
- {"key": "allowed_error", "name": "允许误差", "type": "number"},
- ],
- },
- {
- "key": "base_measurements",
- "name": "测定基础数据",
- "order": 3,
- "fields": [
- {"key": "measurement_locations", "name": "测点基础数据", "type": "list"},
- ],
- },
- {
- "key": "leakage_results",
- "name": "漏风率测定结果",
- "order": 4,
- "fields": [
- {"key": "south_fan_exhaust_airflow", "name": "南风井主扇排风量", "type": "number"},
- {"key": "south_total_return_airflow", "name": "南风井总回风量", "type": "number"},
- {"key": "south_leakage_airflow", "name": "南风井漏风量", "type": "number"},
- {"key": "south_leakage_rate", "name": "南风井漏风率", "type": "number"},
- {"key": "north_fan_exhaust_airflow", "name": "北风井主扇排风量", "type": "number"},
- {"key": "north_total_return_airflow", "name": "北风井总回风量", "type": "number"},
- {"key": "north_leakage_airflow", "name": "北风井漏风量", "type": "number"},
- {"key": "north_leakage_rate", "name": "北风井漏风率", "type": "number"},
- ],
- },
- {
- "key": "conclusion",
- "name": "结论",
- "order": 5,
- "fields": [
- {"key": "standard_limit", "name": "标准限值", "type": "number"},
- {"key": "maximum_leakage_rate", "name": "最大漏风率", "type": "number"},
- {"key": "compliance_status", "name": "是否符合规定", "type": "text"},
- {"key": "conclusion_text", "name": "结论", "type": "text"},
- ],
- },
- ],
- },
- },
- ]
- DEFAULT_BUSINESS_TEMPLATES = [
- {
- "code": "ground_main_fan_inspection_report",
- "name": "地面主通风机检验报告",
- "document_type": "ground_main_fan_inspection_report",
- "description": "分析两台主通风机的报告合规性、资质、证书、检验项目和能力差异。",
- "prompt": (
- "你是一名矿山主通风机检验报告审查专家。报告通常包含 1#、2# 两台风机,"
- "每台风机都有风机参数、电机参数和检验项目。请重点完成以下分析:\n"
- "1. 检查报告有效期是否满足 5 年、2 年要求,过期报警,剩余 3 个月预警。\n"
- "2. 比较两台风机能力和功率是否相同。\n"
- "3. 检查检验单位资质及报告是否在资质有效期内。\n"
- "4. 检查授权签字人是否具备授权范围和签字资格。\n"
- "5. 检查检验仪器是否在有效期内。\n"
- "6. 检查特性曲线数量是否完整。\n"
- "7. 检查摩擦火花安全检验合格证号、安全标志准用证号、防爆合格证号是否缺失;"
- "缺失一项即报警,安标证号必须进入人工安标网站核验状态。\n"
- "8. 比较两台风机工况风量、风压,差异较大时判定能力不同。\n"
- "summary 必须严格按上述 1-8 项逐条输出,格式为“序号. 项目:结果”。"
- "每项只写分析结果和风险等级,不写证据、原文引用、过程说明或长句解释;"
- "每项不超过 30 个汉字,整体不超过 260 个汉字。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "地面主通风机检验报告",
- "主通风机检验报告",
- "主要通风机检验报告",
- ],
- "groups": [
- {
- "key": "compliance_analysis",
- "name": "报告合规分析",
- "order": 8,
- "analysis_only": True,
- "fields": [
- {"key": "validity_5y_status", "name": "5年有效期结论", "type": "text"},
- {"key": "validity_2y_status", "name": "2年有效期结论", "type": "text"},
- {"key": "validity_alert_level", "name": "有效期预警等级", "type": "text"},
- {"key": "validity_basis", "name": "有效期判定依据", "type": "text"},
- {"key": "fans_same_capability", "name": "两台风机能力是否相同", "type": "text"},
- {"key": "fans_same_power", "name": "两台风机功率是否相同", "type": "text"},
- {"key": "agency_qualification_valid", "name": "单位资质是否有效", "type": "text"},
- {"key": "report_in_agency_qualification", "name": "报告是否在资质有效期内", "type": "text"},
- {"key": "authorized_signatory", "name": "授权签字人", "type": "text"},
- {"key": "signatory_compliance", "name": "授权签字人是否合规", "type": "text"},
- {"key": "instruments_valid", "name": "仪器是否均在有效期内", "type": "text"},
- {"key": "invalid_instruments", "name": "过期仪器明细", "type": "list"},
- {"key": "characteristic_curve_count", "name": "特性曲线数量", "type": "number"},
- {"key": "characteristic_curve_check", "name": "特性曲线检查结论", "type": "text"},
- {"key": "friction_spark_certificate_missing", "name": "摩擦火花证是否缺失", "type": "text"},
- {"key": "safety_mark_certificate_missing", "name": "安标证是否缺失", "type": "text"},
- {"key": "explosion_proof_certificate_missing", "name": "防爆合格证是否缺失", "type": "text"},
- {"key": "certificate_lookup_status", "name": "安标证核验状态", "type": "text"},
- {"key": "certificate_alert_level", "name": "证书缺失报警等级", "type": "text"},
- {"key": "fan1_operating_airflow", "name": "1#工况风量", "type": "number"},
- {"key": "fan1_operating_pressure", "name": "1#工况风压", "type": "number"},
- {"key": "fan2_operating_airflow", "name": "2#工况风量", "type": "number"},
- {"key": "fan2_operating_pressure", "name": "2#工况风压", "type": "number"},
- {"key": "airflow_difference_percent", "name": "风量差异百分比", "type": "number"},
- {"key": "pressure_difference_percent", "name": "风压差异百分比", "type": "number"},
- {"key": "capability_comparison_result", "name": "能力对比结论", "type": "text"},
- ],
- },
- {
- "key": "report_info",
- "name": "报告基本信息",
- "order": 1,
- "fields": [
- {"key": "report_issuer", "name": "报告出具单位", "type": "text", "aliases": ["委托单位", "受检单位", "检验机构"]},
- {"key": "report_code", "name": "报告编号", "type": "text"},
- {"key": "inspection_category", "name": "检验类别", "type": "text"},
- {"key": "inspection_standard", "name": "检验依据", "type": "text"},
- {"key": "report_date", "name": "报告时间", "type": "date"},
- {"key": "expiry_date", "name": "到期时间", "type": "date"},
- {"key": "qualification_status", "name": "资质情况", "type": "text"},
- ],
- },
- {
- "key": "fan1_parameters",
- "name": "1#风机基本参数",
- "order": 2,
- "fields": [
- {"key": "fan1_model", "name": "1#风机型号", "type": "text", "aliases": ["型号"]},
- {"key": "fan1_explosion_grade", "name": "1#防爆等级", "type": "text"},
- {"key": "fan1_airflow_range", "name": "1#风量范围", "type": "text", "aliases": ["风量范围"]},
- {"key": "fan1_pressure_range", "name": "1#风压范围", "type": "text", "aliases": ["风压范围"]},
- {"key": "fan1_motor_power", "name": "1#电机功率", "type": "number", "aliases": ["电机功率"]},
- {"key": "fan1_friction_spark_certificate", "name": "1#摩擦火花安全检验合格证号", "type": "text", "aliases": ["摩擦火花安全检验合格证号"]},
- {"key": "fan1_safety_mark_certificate", "name": "1#安全标志准用证号", "type": "text", "aliases": ["安全标志准用证号", "安标证号"]},
- {"key": "fan1_explosion_proof_certificate", "name": "1#防爆合格证号", "type": "text", "aliases": ["防爆合格证号"]},
- {"key": "fan1_factory_serial", "name": "1#出厂编号", "type": "text", "aliases": ["出厂编号"]},
- {"key": "fan1_manufacturer", "name": "1#生产厂家", "type": "text", "aliases": ["生产厂家"]},
- ],
- },
- {
- "key": "fan1_motor_parameters",
- "name": "1#电机基本参数",
- "order": 3,
- "fields": [
- {"key": "fan1_motor_model", "name": "1#电机型号", "type": "text", "aliases": ["电机型号"]},
- {"key": "fan1_motor_explosion_grade", "name": "1#电机防爆等级", "type": "text", "aliases": ["防爆等级"]},
- {"key": "fan1_motor_rated_power", "name": "1#额定功率", "type": "number", "aliases": ["额定功率"]},
- {"key": "fan1_motor_rated_voltage", "name": "1#额定电压", "type": "number", "aliases": ["额定电压"]},
- {"key": "fan1_motor_rated_current", "name": "1#额定电流", "type": "number", "aliases": ["额定电流"]},
- {"key": "fan1_motor_rated_frequency", "name": "1#额定频率", "type": "number", "aliases": ["额定频率"]},
- {"key": "fan1_motor_rated_speed", "name": "1#额定转速", "type": "number", "aliases": ["额定转速"]},
- {"key": "fan1_motor_insulation_class", "name": "1#绝缘等级", "type": "text", "aliases": ["绝缘等级"]},
- {"key": "fan1_motor_safety_mark_certificate", "name": "1#电机安标证号", "type": "text", "aliases": ["安标证号"]},
- {"key": "fan1_motor_explosion_proof_certificate", "name": "1#电机防爆合格证号", "type": "text", "aliases": ["防爆合格证号"]},
- ],
- },
- {
- "key": "fan1_inspection_items",
- "name": "1#检验项目",
- "order": 4,
- "fields": [
- {"key": "fan1_basic_requirements", "name": "1#基本要求", "type": "text"},
- {"key": "fan1_appearance_structure", "name": "1#外观及结构", "type": "text"},
- {"key": "fan1_installation_configuration", "name": "1#安装及配置", "type": "text"},
- {"key": "fan1_surge_check", "name": "1#喘振", "type": "text"},
- {"key": "fan1_fan_efficiency", "name": "1#通风机运行效率", "type": "number"},
- {"key": "fan1_motor_operating_power", "name": "1#电动机运行功率", "type": "number"},
- {"key": "fan1_noise", "name": "1#噪声", "type": "number"},
- {"key": "fan1_vibration_velocity_rms", "name": "1#振动速度有效值", "type": "number"},
- {"key": "fan1_motor_temperature", "name": "1#电动机轴承、定子温度", "type": "object"},
- {"key": "fan1_motor_cold_insulation_resistance", "name": "1#电动机冷态绝缘电阻", "type": "number"},
- {"key": "fan1_grounding_resistance", "name": "1#接地电阻值", "type": "number"},
- {"key": "fan1_blade_clearance", "name": "1#叶片与机壳单侧间隙值", "type": "number"},
- ],
- },
- {
- "key": "fan2_parameters",
- "name": "2#风机基本参数",
- "order": 5,
- "fields": [
- {"key": "fan2_model", "name": "2#风机型号", "type": "text", "aliases": ["型号"]},
- {"key": "fan2_explosion_grade", "name": "2#防爆等级", "type": "text"},
- {"key": "fan2_airflow_range", "name": "2#风量范围", "type": "text", "aliases": ["风量范围"]},
- {"key": "fan2_pressure_range", "name": "2#风压范围", "type": "text", "aliases": ["风压范围"]},
- {"key": "fan2_motor_power", "name": "2#电机功率", "type": "number", "aliases": ["电机功率"]},
- {"key": "fan2_friction_spark_certificate", "name": "2#摩擦火花安全检验合格证号", "type": "text"},
- {"key": "fan2_safety_mark_certificate", "name": "2#安全标志准用证号", "type": "text"},
- {"key": "fan2_explosion_proof_certificate", "name": "2#防爆合格证号", "type": "text"},
- {"key": "fan2_factory_serial", "name": "2#出厂编号", "type": "text"},
- {"key": "fan2_manufacturer", "name": "2#生产厂家", "type": "text"},
- ],
- },
- {
- "key": "fan2_motor_parameters",
- "name": "2#电机基本参数",
- "order": 6,
- "fields": [
- {"key": "fan2_motor_model", "name": "2#电机型号", "type": "text"},
- {"key": "fan2_motor_explosion_grade", "name": "2#电机防爆等级", "type": "text"},
- {"key": "fan2_motor_rated_power", "name": "2#额定功率", "type": "number"},
- {"key": "fan2_motor_rated_voltage", "name": "2#额定电压", "type": "number"},
- {"key": "fan2_motor_rated_current", "name": "2#额定电流", "type": "number"},
- {"key": "fan2_motor_rated_frequency", "name": "2#额定频率", "type": "number"},
- {"key": "fan2_motor_rated_speed", "name": "2#额定转速", "type": "number"},
- {"key": "fan2_motor_insulation_class", "name": "2#绝缘等级", "type": "text"},
- {"key": "fan2_motor_safety_mark_certificate", "name": "2#电机安标证号", "type": "text"},
- {"key": "fan2_motor_explosion_proof_certificate", "name": "2#电机防爆合格证号", "type": "text"},
- ],
- },
- {
- "key": "fan2_inspection_items",
- "name": "2#检验项目",
- "order": 7,
- "fields": [
- {"key": "fan2_basic_requirements", "name": "2#基本要求", "type": "text"},
- {"key": "fan2_appearance_structure", "name": "2#外观及结构", "type": "text"},
- {"key": "fan2_installation_configuration", "name": "2#安装及配置", "type": "text"},
- {"key": "fan2_surge_check", "name": "2#喘振", "type": "text"},
- {"key": "fan2_fan_efficiency", "name": "2#通风机运行效率", "type": "number"},
- {"key": "fan2_motor_operating_power", "name": "2#电动机运行功率", "type": "number"},
- {"key": "fan2_noise", "name": "2#噪声", "type": "number"},
- {"key": "fan2_vibration_velocity_rms", "name": "2#振动速度有效值", "type": "number"},
- {"key": "fan2_motor_temperature", "name": "2#电动机轴承、定子温度", "type": "object"},
- {"key": "fan2_motor_cold_insulation_resistance", "name": "2#电动机冷态绝缘电阻", "type": "number"},
- {"key": "fan2_grounding_resistance", "name": "2#接地电阻值", "type": "number"},
- {"key": "fan2_blade_clearance", "name": "2#叶片与机壳单侧间隙值", "type": "number"},
- ],
- },
- ],
- },
- },
- ]
- DEFAULT_BUSINESS_TEMPLATES.append(
- next(
- item
- for item in LEGACY_GENERIC_TEMPLATES
- if item["code"] == "main_fan_external_leakage_rate_report"
- )
- )
- DEFAULT_BUSINESS_TEMPLATES.append(
- {
- "code": "monthly_air_distribution_plan",
- "name": "月度配风计划",
- "document_type": "monthly_air_distribution_plan",
- "description": "抽取月度配风计划的通风系统参数、南北风井需风量计算、用风地点明细和结论。",
- "prompt": (
- "你是一名矿井通风配风审查专家。请从月度配风计划中提取矿井通风方式、"
- "主通风机参数、采掘布局、南北风井各用风地点需风量、风量合计、"
- "总需风量和现有回风量对比。summary 只输出简短结果:"
- "北风井需风量与可用风量及结论、南风井需风量与可用风量及结论、"
- "全矿井总需风量与总回风量及结论。不要写计算过程、公式和原文证据。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "配风计划",
- "月度配风计划",
- "矿井配风计划",
- ],
- "groups": [
- {
- "key": "report_info",
- "name": "报告基本信息",
- "order": 1,
- "fields": [
- {"key": "plan_title", "name": "配风计划名称", "type": "text"},
- {"key": "mine_name", "name": "矿井名称", "type": "text"},
- {"key": "plan_month", "name": "计划月份", "type": "text"},
- {"key": "issuing_department", "name": "编制单位", "type": "text"},
- {"key": "prepared_by", "name": "编制人", "type": "text"},
- {"key": "reviewer", "name": "审核人", "type": "text"},
- {"key": "chief_engineer", "name": "总工程师", "type": "text"},
- {"key": "plan_date", "name": "编制日期", "type": "date"},
- ],
- },
- {
- "key": "ventilation_system",
- "name": "矿井通风系统",
- "order": 2,
- "fields": [
- {"key": "ventilation_method", "name": "通风方法", "type": "text"},
- {"key": "ventilation_mode", "name": "通风方式", "type": "text"},
- {"key": "intake_shaft_count", "name": "进风井数量", "type": "number"},
- {"key": "intake_shaft_names", "name": "进风井名称", "type": "list"},
- {"key": "return_shaft_count", "name": "回风井数量", "type": "number"},
- {"key": "return_shaft_names", "name": "回风井名称", "type": "list"},
- {"key": "mine_total_return_airflow", "name": "矿井总回风量", "type": "number"},
- {"key": "north_return_airflow", "name": "北风井回风量", "type": "number"},
- {"key": "south_return_airflow", "name": "南风井回风量", "type": "number"},
- {"key": "equivalent_orifice", "name": "矿井等积孔", "type": "number"},
- {"key": "north_fan_model", "name": "北风井主通风机型号", "type": "text"},
- {"key": "north_fan_blade_angle", "name": "北风井叶片角度", "type": "text"},
- {"key": "north_fan_motor_mode", "name": "北风井电机运行方式", "type": "text"},
- {"key": "north_fan_exhaust_airflow", "name": "北风井排风量", "type": "number"},
- {"key": "north_fan_negative_pressure", "name": "北风井负压", "type": "number"},
- {"key": "south_fan_model", "name": "南风井主通风机型号", "type": "text"},
- {"key": "south_fan_blade_angle", "name": "南风井叶片角度", "type": "text"},
- {"key": "south_fan_motor_mode", "name": "南风井电机运行方式", "type": "text"},
- {"key": "south_fan_exhaust_airflow", "name": "南风井排风量", "type": "number"},
- {"key": "south_fan_negative_pressure", "name": "南风井负压", "type": "number"},
- ],
- },
- {
- "key": "mining_layout",
- "name": "采掘布局",
- "order": 3,
- "fields": [
- {"key": "layout_summary", "name": "采掘布局概述", "type": "text"},
- {"key": "fully_mechanized_faces", "name": "综采工作面", "type": "list"},
- {"key": "standby_faces", "name": "备采工作面", "type": "list"},
- {"key": "heading_faces", "name": "掘进工作面", "type": "list"},
- {"key": "north_load_areas", "name": "北风井负荷区域", "type": "list"},
- {"key": "south_load_areas", "name": "南风井负荷区域", "type": "list"},
- ],
- },
- {
- "key": "airflow_results",
- "name": "风量计算结果",
- "order": 4,
- "fields": [
- {"key": "north_coal_airflow", "name": "北风井采煤面需风量", "type": "number"},
- {"key": "north_standby_airflow", "name": "北风井备采面需风量", "type": "number"},
- {"key": "north_heading_airflow", "name": "北风井掘进面需风量", "type": "number"},
- {"key": "north_chamber_airflow", "name": "北风井硐室需风量", "type": "number"},
- {"key": "north_other_airflow", "name": "北风井其他巷道需风量", "type": "number"},
- {"key": "north_ventilation_factor", "name": "北风井通风系数", "type": "number"},
- {"key": "north_required_airflow", "name": "北风井总需风量", "type": "number"},
- {"key": "north_available_airflow", "name": "北风井可用总回风量", "type": "number"},
- {"key": "north_capacity_status", "name": "北风井能力结论", "type": "text"},
- {"key": "south_coal_airflow", "name": "南风井采煤面需风量", "type": "number"},
- {"key": "south_standby_airflow", "name": "南风井备采面需风量", "type": "number"},
- {"key": "south_heading_airflow", "name": "南风井掘进面需风量", "type": "number"},
- {"key": "south_chamber_airflow", "name": "南风井硐室需风量", "type": "number"},
- {"key": "south_other_airflow", "name": "南风井其他巷道需风量", "type": "number"},
- {"key": "south_ventilation_factor", "name": "南风井通风系数", "type": "number"},
- {"key": "south_required_airflow", "name": "南风井总需风量", "type": "number"},
- {"key": "south_available_airflow", "name": "南风井可用总回风量", "type": "number"},
- {"key": "south_capacity_status", "name": "南风井能力结论", "type": "text"},
- {"key": "mine_required_airflow", "name": "全矿井总需风量", "type": "number"},
- {"key": "mine_available_airflow", "name": "全矿井总回风量", "type": "number"},
- {"key": "mine_capacity_status", "name": "全矿井能力结论", "type": "text"},
- ],
- },
- {
- "key": "location_details",
- "name": "用风地点明细",
- "order": 5,
- "fields": [
- {"key": "workface_airflow_details", "name": "采掘工作面配风明细", "type": "list"},
- {"key": "other_roadway_airflow_details", "name": "其他巷道配风明细", "type": "list"},
- {"key": "local_fan_details", "name": "局部通风机配置", "type": "list"},
- ],
- },
- {
- "key": "conclusion",
- "name": "结论",
- "order": 6,
- "fields": [
- {"key": "north_conclusion", "name": "北风井结论", "type": "text"},
- {"key": "south_conclusion", "name": "南风井结论", "type": "text"},
- {"key": "mine_conclusion", "name": "全矿井结论", "type": "text"},
- {"key": "overall_pass", "name": "是否满足需风要求", "type": "text"},
- ],
- },
- ],
- },
- }
- )
- DEFAULT_BUSINESS_TEMPLATES.append(
- {
- "code": "mine_ventilation_resistance_report",
- "name": "矿井通风阻力测定报告",
- "document_type": "mine_ventilation_resistance_report",
- "description": "抽取矿井通风阻力测定路线、测点参数、阻力结果、等积孔、有效风量率和结论。",
- "prompt": (
- "你是一名矿井通风阻力测定审查专家。请从报告中提取报告信息、通风系统参数、"
- "测定路线、主要和次要路线阻力、相对误差、自然风压、等积孔、有效风量率、"
- "三区阻力分布和结论建议。summary 只输出结果:主要路线阻力及误差、"
- "次要路线阻力及误差、等积孔及通风难易程度、有效风量率及是否合格、总体结论。"
- "summary 必须严格输出 5 条:1.主要路线;2.次要路线;3.等积孔;"
- "4.有效风量率;5.总体结论。每条不超过 35 个汉字,不写公式、原文引用和计算过程。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "矿井通风阻力测定报告",
- "通风阻力测定报告",
- "通风阻力测定",
- ],
- "groups": [
- {
- "key": "report_info",
- "name": "报告基本信息",
- "order": 1,
- "fields": [
- {"key": "project_name", "name": "项目名称", "type": "text"},
- {"key": "report_code", "name": "报告编号", "type": "text"},
- {"key": "mine_name", "name": "矿井名称", "type": "text"},
- {"key": "client_name", "name": "委托单位", "type": "text"},
- {"key": "testing_organization", "name": "测定单位", "type": "text"},
- {"key": "measurement_start_date", "name": "测定开始日期", "type": "date"},
- {"key": "measurement_end_date", "name": "测定结束日期", "type": "date"},
- {"key": "report_date", "name": "报告日期", "type": "date"},
- {"key": "standard_basis", "name": "测定依据", "type": "text"},
- {"key": "environment_conditions", "name": "测试环境条件", "type": "object"},
- {"key": "instruments", "name": "使用仪器", "type": "list"},
- ],
- },
- {
- "key": "ventilation_system",
- "name": "矿井通风系统",
- "order": 2,
- "fields": [
- {"key": "ventilation_method", "name": "通风方法", "type": "text"},
- {"key": "ventilation_mode", "name": "通风方式", "type": "text"},
- {"key": "intake_shafts", "name": "进风井", "type": "list"},
- {"key": "return_shafts", "name": "回风井", "type": "list"},
- {"key": "total_return_airflow", "name": "矿井总回风量", "type": "number"},
- {"key": "main_fan_model", "name": "主通风机型号", "type": "text"},
- {"key": "main_fan_blade_angle", "name": "叶片角度", "type": "text"},
- {"key": "main_fan_exhaust_airflow", "name": "主通风机排风量", "type": "number"},
- {"key": "main_fan_negative_pressure", "name": "主通风机负压", "type": "number"},
- {"key": "gas_grade", "name": "瓦斯等级", "type": "text"},
- {"key": "coal_dust_risk", "name": "煤尘爆炸危险性", "type": "text"},
- {"key": "spontaneous_combustion_tendency", "name": "煤层自燃倾向性", "type": "text"},
- ],
- },
- {
- "key": "measurement_design",
- "name": "测定路线与测点",
- "order": 3,
- "fields": [
- {"key": "measurement_method", "name": "测定方法", "type": "text"},
- {"key": "main_route_name", "name": "主要测定路线", "type": "text"},
- {"key": "secondary_route_name", "name": "次要测定路线", "type": "text"},
- {"key": "planned_point_count", "name": "计划测点数量", "type": "number"},
- {"key": "effective_point_count", "name": "结果表测点数量", "type": "number"},
- {"key": "route_coverage", "name": "路线覆盖范围", "type": "text"},
- ],
- },
- {
- "key": "resistance_results",
- "name": "阻力测定结果",
- "order": 4,
- "fields": [
- {"key": "fan_house_water_column", "name": "风机房水柱计读数", "type": "number"},
- {"key": "fan_house_velocity_pressure", "name": "风硐平均动压", "type": "number"},
- {"key": "natural_ventilation_pressure", "name": "自然风压", "type": "number"},
- {"key": "main_route_theoretical_resistance", "name": "主要路线理论阻力", "type": "number"},
- {"key": "main_route_measured_resistance", "name": "主要路线实测阻力", "type": "number"},
- {"key": "main_route_absolute_error", "name": "主要路线绝对误差", "type": "number"},
- {"key": "main_route_relative_error", "name": "主要路线相对误差", "type": "number"},
- {"key": "secondary_route_theoretical_resistance", "name": "次要路线理论阻力", "type": "number"},
- {"key": "secondary_route_measured_resistance", "name": "次要路线实测阻力", "type": "number"},
- {"key": "secondary_route_absolute_error", "name": "次要路线绝对误差", "type": "number"},
- {"key": "secondary_route_relative_error", "name": "次要路线相对误差", "type": "number"},
- {"key": "maximum_resistance_route", "name": "最大阻力路线", "type": "text"},
- {"key": "measurement_accuracy_pass", "name": "测定精度是否合格", "type": "text"},
- ],
- },
- {
- "key": "analysis_results",
- "name": "通风系统分析",
- "order": 5,
- "fields": [
- {"key": "equivalent_orifice", "name": "矿井等积孔", "type": "number"},
- {"key": "ventilation_difficulty", "name": "通风难易程度", "type": "text"},
- {"key": "three_zone_distribution", "name": "三区阻力分布", "type": "object"},
- {"key": "three_zone_conclusion", "name": "三区分布结论", "type": "text"},
- {"key": "intake_airflow", "name": "矿井总进风量", "type": "number"},
- {"key": "effective_airflow", "name": "有效风量", "type": "number"},
- {"key": "effective_airflow_rate", "name": "有效风量率", "type": "number"},
- {"key": "effective_airflow_rate_pass", "name": "有效风量率是否合格", "type": "text"},
- {"key": "resistance_coefficient_details", "name": "主要巷道摩擦阻力系数", "type": "list"},
- ],
- },
- {
- "key": "conclusion",
- "name": "结论与建议",
- "order": 6,
- "fields": [
- {"key": "conclusions", "name": "结论", "type": "list"},
- {"key": "recommendations", "name": "建议", "type": "list"},
- {"key": "overall_assessment", "name": "总体评价", "type": "text"},
- ],
- },
- ],
- },
- }
- )
- DEFAULT_BUSINESS_TEMPLATES.append(
- {
- "code": "ventilation_capacity_verification_report",
- "name": "矿井通风能力核定报告",
- "document_type": "ventilation_capacity_verification_report",
- "description": "抽取通风能力核定结果、通风系统参数、南北风井需风量、生产能力计算和验证结论。",
- "prompt": (
- "你是一名矿井通风能力核定审查专家。请从报告中提取核定依据、通风能力核定结果、"
- "矿井通风系统、瓦斯和煤尘情况、2025年采掘布局、北南风井需风量、"
- "矿井总需风量、生产能力计算和实测验证结果。"
- "summary 只输出简短结果:核定通风能力、北风井需风量与可用风量、"
- "南风井需风量与可用风量、全矿井需风量与总回风量、有效风量率及结论。"
- "不要写公式、原文引用和冗长计算过程。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "通风能力核定报告",
- "矿井通风能力核定",
- "通风能力核定",
- ],
- "groups": [
- {
- "key": "report_info",
- "name": "报告基本信息",
- "order": 1,
- "fields": [
- {"key": "report_title", "name": "报告名称", "type": "text"},
- {"key": "mine_name", "name": "矿井名称", "type": "text"},
- {"key": "prepared_by", "name": "编制人", "type": "text"},
- {"key": "reviewer", "name": "审核人", "type": "text"},
- {"key": "issuing_unit", "name": "编制单位", "type": "text"},
- {"key": "report_date", "name": "报告日期", "type": "date"},
- {"key": "compilation_personnel", "name": "编制人员", "type": "list"},
- {"key": "verification_basis", "name": "核定依据", "type": "list"},
- ],
- },
- {
- "key": "capacity_result",
- "name": "通风能力核定结果",
- "order": 2,
- "fields": [
- {"key": "verified_year", "name": "核定年度", "type": "number"},
- {"key": "ventilation_capacity", "name": "通风能力", "type": "number"},
- {"key": "capacity_unit", "name": "能力单位", "type": "text"},
- {"key": "capacity_result_text", "name": "核定结果", "type": "text"},
- ],
- },
- {
- "key": "mine_overview",
- "name": "矿井及通风概况",
- "order": 3,
- "fields": [
- {"key": "mine_area", "name": "井田面积", "type": "number"},
- {"key": "remaining_reserves", "name": "剩余可采储量", "type": "number"},
- {"key": "service_years", "name": "剩余服务年限", "type": "number"},
- {"key": "design_capacity", "name": "设计生产能力", "type": "number"},
- {"key": "previous_verified_capacity", "name": "最近核定生产能力", "type": "number"},
- {"key": "ventilation_method", "name": "通风方法", "type": "text"},
- {"key": "ventilation_mode", "name": "通风方式", "type": "text"},
- {"key": "intake_return_layout", "name": "进回风井布局", "type": "text"},
- {"key": "intake_shafts", "name": "进风井", "type": "list"},
- {"key": "return_shafts", "name": "回风井", "type": "list"},
- {"key": "intake_airflow", "name": "矿井总进风量", "type": "number"},
- {"key": "return_airflow", "name": "矿井总回风量", "type": "number"},
- {"key": "north_return_airflow", "name": "北风井回风量", "type": "number"},
- {"key": "south_return_airflow", "name": "南风井回风量", "type": "number"},
- {"key": "equivalent_orifice", "name": "全矿井等积孔", "type": "number"},
- {"key": "north_fan_model", "name": "北风井主通风机型号", "type": "text"},
- {"key": "north_fan_blade_angle", "name": "北风井叶片角度", "type": "text"},
- {"key": "north_fan_exhaust_airflow", "name": "北风井排风量", "type": "number"},
- {"key": "north_fan_negative_pressure", "name": "北风井负压", "type": "number"},
- {"key": "south_fan_model", "name": "南风井主通风机型号", "type": "text"},
- {"key": "south_fan_blade_angle", "name": "南风井叶片角度", "type": "text"},
- {"key": "south_fan_exhaust_airflow", "name": "南风井排风量", "type": "number"},
- {"key": "south_fan_negative_pressure", "name": "南风井负压", "type": "number"},
- ],
- },
- {
- "key": "gas_dust_conditions",
- "name": "瓦斯煤尘及自燃情况",
- "order": 4,
- "fields": [
- {"key": "gas_grade", "name": "瓦斯等级", "type": "text"},
- {"key": "absolute_gas_emission", "name": "绝对瓦斯涌出量", "type": "number"},
- {"key": "relative_gas_emission", "name": "相对瓦斯涌出量", "type": "number"},
- {"key": "absolute_co2_emission", "name": "绝对二氧化碳涌出量", "type": "number"},
- {"key": "relative_co2_emission", "name": "相对二氧化碳涌出量", "type": "number"},
- {"key": "coal_dust_explosive", "name": "煤尘是否具有爆炸性", "type": "text"},
- {"key": "spontaneous_combustion_grade", "name": "自燃倾向性等级", "type": "text"},
- {"key": "shortest_ignition_period", "name": "最短自然发火期", "type": "object"},
- ],
- },
- {
- "key": "airflow_verification",
- "name": "风量核定结果",
- "order": 5,
- "fields": [
- {"key": "max_demand_period", "name": "最大需风量时期", "type": "text"},
- {"key": "north_coal_airflow", "name": "北风井采煤面需风量", "type": "number"},
- {"key": "north_standby_airflow", "name": "北风井备采面需风量", "type": "number"},
- {"key": "north_heading_airflow", "name": "北风井掘进面需风量", "type": "number"},
- {"key": "north_chamber_airflow", "name": "北风井硐室需风量", "type": "number"},
- {"key": "north_other_airflow", "name": "北风井其他巷道需风量", "type": "number"},
- {"key": "north_required_airflow", "name": "北风井总需风量", "type": "number"},
- {"key": "north_available_airflow", "name": "北风井实际回风量", "type": "number"},
- {"key": "north_capacity_status", "name": "北风井是否满足", "type": "text"},
- {"key": "south_required_airflow", "name": "南风井总需风量", "type": "number"},
- {"key": "south_available_airflow", "name": "南风井实际回风量", "type": "number"},
- {"key": "south_capacity_status", "name": "南风井是否满足", "type": "text"},
- {"key": "mine_required_airflow", "name": "全矿井总需风量", "type": "number"},
- {"key": "mine_available_airflow", "name": "全矿井实际总回风量", "type": "number"},
- {"key": "mine_capacity_status", "name": "全矿井是否满足", "type": "text"},
- ],
- },
- {
- "key": "capacity_calculation",
- "name": "生产能力核定",
- "order": 6,
- "fields": [
- {"key": "calculation_method", "name": "核定方法", "type": "text"},
- {"key": "coalface_capacity_details", "name": "采煤工作面生产能力", "type": "list"},
- {"key": "heading_capacity_details", "name": "掘进工作面生产能力", "type": "list"},
- {"key": "north_region_capacity", "name": "北风井区域生产能力", "type": "number"},
- {"key": "south_region_capacity", "name": "南风井区域生产能力", "type": "number"},
- {"key": "final_capacity", "name": "最终核定通风能力", "type": "number"},
- ],
- },
- {
- "key": "verification_conclusion",
- "name": "实测验证与结论",
- "order": 7,
- "fields": [
- {"key": "measured_intake_airflow", "name": "实测总进风量", "type": "number"},
- {"key": "measured_return_airflow", "name": "实测总回风量", "type": "number"},
- {"key": "effective_airflow", "name": "有效风量", "type": "number"},
- {"key": "effective_airflow_rate", "name": "有效风量率", "type": "number"},
- {"key": "measured_equivalent_orifice", "name": "实测等积孔", "type": "number"},
- {"key": "other_roadway_airflow", "name": "其他巷道需风量", "type": "number"},
- {"key": "other_roadway_ratio", "name": "其他巷道需风量占比", "type": "number"},
- {"key": "conclusions", "name": "核定结论", "type": "list"},
- {"key": "recommendations", "name": "建议", "type": "list"},
- ],
- },
- ],
- },
- }
- )
- DEFAULT_BUSINESS_TEMPLATES.append(
- {
- "code": "airflow_measurement_decadal_report",
- "name": "风量实测旬报表",
- "document_type": "airflow_measurement_decadal_report",
- "description": "抽取测风旬报的风井主扇参数、矿井通风总量、有效风量率和测点明细。",
- "prompt": (
- "你是一名矿井测风数据审查专家。请从风量实测旬报表中提取报表日期、"
- "北风井和南风井主扇运行参数、矿井总回风量、总排风量、总进风量、"
- "有效风量、有效风量率和全部测点明细。"
- "summary 只输出简短结果:报表日期;北风井总回风/总排风/负压;"
- "南风井总回风/总排风/负压;矿井总回风/总进风/有效风量率及是否合格;"
- "测点数量及异常点数。不要写公式和原文引用。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "风量实测旬报表",
- "测风旬报表",
- "测风旬报",
- ],
- "groups": [
- {
- "key": "report_info",
- "name": "报表基本信息",
- "order": 1,
- "fields": [
- {"key": "report_title", "name": "报表名称", "type": "text"},
- {"key": "mine_name", "name": "矿井名称", "type": "text"},
- {"key": "measurement_date", "name": "测风日期", "type": "date"},
- {"key": "weather", "name": "气候", "type": "text"},
- {"key": "atmospheric_pressure", "name": "大气压力", "type": "number"},
- {"key": "total_equivalent_orifice", "name": "总等积孔", "type": "number"},
- {"key": "ground_temperature", "name": "地面温度", "type": "number"},
- ],
- },
- {
- "key": "fan_operation",
- "name": "主扇运行参数",
- "order": 2,
- "fields": [
- {"key": "north_return_airflow", "name": "北风井总回风量", "type": "number"},
- {"key": "north_exhaust_airflow", "name": "北风井总排风量", "type": "number"},
- {"key": "north_fan_model", "name": "北风井风机型号", "type": "text"},
- {"key": "north_operating_fan", "name": "北风井运行主扇", "type": "text"},
- {"key": "north_blade_angle", "name": "北风井叶片角度", "type": "number"},
- {"key": "north_negative_pressure", "name": "北风井负压", "type": "number"},
- {"key": "north_motor_power", "name": "北风井电机功率", "type": "number"},
- {"key": "north_fan_power", "name": "北风井风机功率", "type": "number"},
- {"key": "north_efficiency", "name": "北风井效率", "type": "number"},
- {"key": "north_power_factor", "name": "北风井功率因数", "type": "number"},
- {"key": "north_voltage", "name": "北风井电压", "type": "number"},
- {"key": "north_current", "name": "北风井电流", "type": "number"},
- {"key": "south_return_airflow", "name": "南风井总回风量", "type": "number"},
- {"key": "south_exhaust_airflow", "name": "南风井总排风量", "type": "number"},
- {"key": "south_fan_model", "name": "南风井风机型号", "type": "text"},
- {"key": "south_operating_fan", "name": "南风井运行主扇", "type": "text"},
- {"key": "south_blade_angle", "name": "南风井叶片角度", "type": "number"},
- {"key": "south_negative_pressure", "name": "南风井负压", "type": "number"},
- {"key": "south_motor_power", "name": "南风井电机功率", "type": "number"},
- {"key": "south_fan_power", "name": "南风井风机功率", "type": "number"},
- {"key": "south_efficiency", "name": "南风井效率", "type": "number"},
- {"key": "south_power_factor", "name": "南风井功率因数", "type": "number"},
- {"key": "south_voltage", "name": "南风井电压", "type": "number"},
- {"key": "south_current", "name": "南风井电流", "type": "number"},
- ],
- },
- {
- "key": "mine_totals",
- "name": "矿井通风总量",
- "order": 3,
- "fields": [
- {"key": "mine_total_return_airflow", "name": "矿井总回风量", "type": "number"},
- {"key": "mine_total_exhaust_airflow", "name": "矿井总排风量", "type": "number"},
- {"key": "mine_total_intake_airflow", "name": "矿井总进风量", "type": "number"},
- {"key": "effective_airflow", "name": "有效风量", "type": "number"},
- {"key": "effective_airflow_rate", "name": "有效风量率", "type": "number"},
- ],
- },
- {
- "key": "measurement_points",
- "name": "测点明细",
- "order": 4,
- "fields": [
- {"key": "measurement_point_count", "name": "测点数量", "type": "number"},
- {"key": "measurement_point_details", "name": "测点数据明细", "type": "list"},
- {"key": "insufficient_airflow_points", "name": "风量不足测点", "type": "list"},
- {"key": "gas_anomaly_points", "name": "瓦斯异常测点", "type": "list"},
- ],
- },
- {
- "key": "analysis",
- "name": "分析结论",
- "order": 5,
- "fields": [
- {"key": "effective_airflow_rate_pass", "name": "有效风量率是否合格", "type": "text"},
- {"key": "north_fan_status", "name": "北风井运行状态", "type": "text"},
- {"key": "south_fan_status", "name": "南风井运行状态", "type": "text"},
- {"key": "overall_conclusion", "name": "总体结论", "type": "text"},
- ],
- },
- ],
- },
- }
- )
- DEFAULT_BUSINESS_TEMPLATES.append(
- {
- "code": "gas_grade_appraisal_report",
- "name": "瓦斯等级鉴定报告",
- "document_type": "gas_grade_appraisal_report",
- "description": "抽取瓦斯等级鉴定报告的瓦斯和二氧化碳涌出量、测点结果、鉴定等级和结论。",
- "prompt": (
- "你是一名矿井瓦斯等级鉴定审查专家。请从报告中提取报告信息、矿井瓦斯和"
- "二氧化碳涌出量、通风系统参数、鉴定测点、井巷风流瓦斯数据、历史等级和最终结论。"
- "summary 只输出简短结果:本年度瓦斯等级;绝对和相对瓦斯涌出量;"
- "二氧化碳绝对和相对涌出量;采煤面和掘进面最大绝对瓦斯涌出量;"
- "是否存在瓦斯突出、喷出及总体结论。不要写公式和原文引用。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "瓦斯等级鉴定报告",
- "矿井瓦斯等级鉴定",
- "瓦斯等级鉴定",
- ],
- "groups": [
- {
- "key": "report_info",
- "name": "报告基本信息",
- "order": 1,
- "fields": [
- {"key": "report_title", "name": "报告名称", "type": "text"},
- {"key": "report_code", "name": "报告编号", "type": "text"},
- {"key": "mine_name", "name": "矿井名称", "type": "text"},
- {"key": "appraisal_year", "name": "鉴定年度", "type": "text"},
- {"key": "appraisal_organization", "name": "鉴定单位", "type": "text"},
- {"key": "report_date", "name": "编制日期", "type": "date"},
- {"key": "appraisal_personnel", "name": "鉴定人员", "type": "list"},
- ],
- },
- {
- "key": "mine_overview",
- "name": "矿井基本情况",
- "order": 2,
- "fields": [
- {"key": "mine_area", "name": "井田面积", "type": "number"},
- {"key": "geological_reserves", "name": "地质储量", "type": "number"},
- {"key": "recoverable_reserves", "name": "可采储量", "type": "number"},
- {"key": "verified_capacity", "name": "核定生产能力", "type": "number"},
- {"key": "main_coal_seams", "name": "主要可采煤层", "type": "list"},
- {"key": "coal_quality", "name": "煤质情况", "type": "text"},
- {"key": "historical_gas_grade", "name": "历史瓦斯等级", "type": "text"},
- ],
- },
- {
- "key": "ventilation_system",
- "name": "矿井通风概况",
- "order": 3,
- "fields": [
- {"key": "ventilation_method", "name": "通风方法", "type": "text"},
- {"key": "ventilation_mode", "name": "通风方式", "type": "text"},
- {"key": "intake_shafts", "name": "进风井", "type": "list"},
- {"key": "return_shafts", "name": "回风井", "type": "list"},
- {"key": "total_intake_airflow", "name": "总进风量", "type": "number"},
- {"key": "north_return_airflow", "name": "北回风井回风量", "type": "number"},
- {"key": "north_blade_angle", "name": "北回风井叶片角度", "type": "number"},
- {"key": "north_negative_pressure", "name": "北回风井负压", "type": "number"},
- {"key": "south_return_airflow", "name": "南回风井回风量", "type": "number"},
- {"key": "south_blade_angle", "name": "南回风井叶片角度", "type": "number"},
- {"key": "south_negative_pressure", "name": "南回风井负压", "type": "number"},
- {"key": "effective_airflow_rate", "name": "有效风量率", "type": "number"},
- {"key": "equivalent_orifice", "name": "矿井等积孔", "type": "number"},
- {"key": "north_fan_model", "name": "北回风井主通风机型号", "type": "text"},
- {"key": "north_fan_power", "name": "北回风井主通风机额定功率", "type": "text"},
- {"key": "south_fan_model", "name": "南回风井主通风机型号", "type": "text"},
- {"key": "south_fan_power", "name": "南回风井主通风机额定功率", "type": "text"},
- ],
- },
- {
- "key": "gas_results",
- "name": "瓦斯和二氧化碳鉴定结果",
- "order": 4,
- "fields": [
- {"key": "absolute_gas_emission", "name": "矿井绝对瓦斯涌出量", "type": "number"},
- {"key": "relative_gas_emission", "name": "矿井相对瓦斯涌出量", "type": "number"},
- {"key": "absolute_co2_emission", "name": "二氧化碳绝对涌出量", "type": "number"},
- {"key": "relative_co2_emission", "name": "二氧化碳相对涌出量", "type": "number"},
- {"key": "coalface_max_gas_emission", "name": "综采面最大绝对瓦斯涌出量", "type": "number"},
- {"key": "coalface_max_co2_emission", "name": "综采面二氧化碳涌出量", "type": "number"},
- {"key": "heading_max_gas_emission", "name": "掘进面最大绝对瓦斯涌出量", "type": "number"},
- {"key": "heading_max_co2_emission", "name": "掘进面二氧化碳涌出量", "type": "number"},
- {"key": "gas_grade", "name": "本年度瓦斯等级", "type": "text"},
- {"key": "previous_gas_grade", "name": "上年度瓦斯等级", "type": "text"},
- {"key": "gas_outburst_status", "name": "瓦斯突出情况", "type": "text"},
- {"key": "gas_blowout_status", "name": "瓦斯喷出情况", "type": "text"},
- {"key": "production_status", "name": "鉴定月生产状况", "type": "text"},
- ],
- },
- {
- "key": "measurement_results",
- "name": "测点鉴定结果",
- "order": 5,
- "fields": [
- {"key": "measurement_point_count", "name": "鉴定测点数量", "type": "number"},
- {"key": "measurement_point_results", "name": "各测点瓦斯和二氧化碳结果", "type": "list"},
- {"key": "historical_results", "name": "历年鉴定结果", "type": "list"},
- ],
- },
- {
- "key": "conclusion",
- "name": "结论与建议",
- "order": 6,
- "fields": [
- {"key": "gas_grade_conclusion", "name": "瓦斯等级结论", "type": "text"},
- {"key": "comparison_with_previous", "name": "与上年度对比", "type": "text"},
- {"key": "conclusions", "name": "结论", "type": "list"},
- {"key": "recommendations", "name": "建议", "type": "list"},
- ],
- },
- ],
- },
- }
- )
- DEFAULT_BUSINESS_TEMPLATES.append(
- {
- "code": "coal_dust_explosion_spontaneous_combustion_report",
- "name": "煤尘爆炸性、自燃倾向性鉴定报告",
- "document_type": "coal_dust_explosion_spontaneous_combustion_report",
- "description": "抽取煤尘爆炸性、自燃倾向性、工业分析、吸氧量和鉴定结论。",
- "prompt": (
- "你是一名煤矿火灾防治资料审查专家。请从煤尘爆炸性和自燃倾向性鉴定报告中"
- "提取报告信息、样品信息、检验环境、仪器设备、煤尘爆炸性、自燃倾向性、"
- "工业分析指标和最终结论。summary 只输出简短结果:煤尘是否有爆炸性;"
- "自燃倾向性等级;吸氧量和水灰挥发分等关键指标;报告有效期及状态;总体结论。"
- "不要写公式和原文引用。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "煤尘爆炸性",
- "自燃倾向性",
- "煤尘爆炸性、自燃倾向性鉴定报告",
- "煤自燃倾向性鉴定",
- ],
- "groups": [
- {
- "key": "report_info",
- "name": "报告基本信息",
- "order": 1,
- "fields": [
- {"key": "report_title", "name": "报告名称", "type": "text"},
- {"key": "controlled_code", "name": "受控编号", "type": "text"},
- {"key": "report_code", "name": "报告编号", "type": "text"},
- {"key": "client_name", "name": "委托单位", "type": "text"},
- {"key": "mine_name", "name": "矿井名称", "type": "text"},
- {"key": "testing_organization", "name": "检测检验机构", "type": "text"},
- {"key": "inspection_category", "name": "检验类别", "type": "text"},
- {"key": "inspection_date", "name": "检验日期", "type": "date"},
- {"key": "valid_until", "name": "有效期至", "type": "date"},
- ],
- },
- {
- "key": "sample_info",
- "name": "样品信息",
- "order": 2,
- "fields": [
- {"key": "sample_name", "name": "设备或样品名称", "type": "text"},
- {"key": "coal_seam", "name": "煤层名称", "type": "text"},
- {"key": "sample_code", "name": "样品编号", "type": "text"},
- {"key": "contract_code", "name": "合同编号", "type": "text"},
- {"key": "submitter", "name": "送样人", "type": "text"},
- {"key": "coal_type", "name": "煤的类别", "type": "text"},
- {"key": "sampling_location", "name": "取样地点", "type": "text"},
- {"key": "sampling_coal_seam", "name": "取样煤层", "type": "text"},
- {"key": "sampling_date", "name": "取样日期", "type": "date"},
- {"key": "sample_mass", "name": "样品质量", "type": "number"},
- {"key": "sample_status", "name": "样品状态", "type": "text"},
- ],
- },
- {
- "key": "testing_conditions",
- "name": "检验环境与仪器",
- "order": 3,
- "fields": [
- {"key": "temperature", "name": "检验环境温度", "type": "number"},
- {"key": "humidity", "name": "相对湿度", "type": "number"},
- {"key": "pressure", "name": "大气压力", "type": "number"},
- {"key": "testing_basis", "name": "检验依据", "type": "list"},
- {"key": "instruments", "name": "检验用主要仪器设备", "type": "list"},
- ],
- },
- {
- "key": "explosion_test",
- "name": "煤尘爆炸性鉴定",
- "order": 4,
- "fields": [
- {"key": "dust_explosion_result", "name": "煤尘爆炸性结论", "type": "text"},
- {"key": "flame_length", "name": "火焰长度", "type": "number"},
- {"key": "minimum_rock_dust", "name": "最低岩粉用量", "type": "number"},
- {"key": "dust_explosion_judgement", "name": "单项判定", "type": "text"},
- ],
- },
- {
- "key": "spontaneous_combustion",
- "name": "自燃倾向性鉴定",
- "order": 5,
- "fields": [
- {"key": "moisture", "name": "水分 Mad", "type": "number"},
- {"key": "ash", "name": "灰分 Aad", "type": "number"},
- {"key": "ash_dry", "name": "灰分 Ad", "type": "number"},
- {"key": "volatile", "name": "挥发分 Vad", "type": "number"},
- {"key": "volatile_dry", "name": "挥发分 Vd", "type": "number"},
- {"key": "volatile_daf", "name": "干燥无灰基挥发分 Vdaf", "type": "number"},
- {"key": "total_sulfur", "name": "煤中全硫", "type": "number"},
- {"key": "true_density", "name": "真相对密度", "type": "number"},
- {"key": "oxygen_adsorption", "name": "吸氧量", "type": "number"},
- {"key": "spontaneous_combustion_grade", "name": "自燃倾向性等级", "type": "text"},
- ],
- },
- {
- "key": "conclusion",
- "name": "结论与签署",
- "order": 6,
- "fields": [
- {"key": "inspection_conclusion", "name": "检验结论", "type": "text"},
- {"key": "approver", "name": "批准人", "type": "text"},
- {"key": "reviewer", "name": "审核人", "type": "text"},
- {"key": "inspector", "name": "检验人", "type": "text"},
- {"key": "preparer", "name": "编制人", "type": "text"},
- {"key": "issue_date", "name": "签发日期", "type": "date"},
- ],
- },
- ],
- },
- }
- )
- DEFAULT_BUSINESS_TEMPLATES.append(
- {
- "code": "safety_monitoring_system_ledger",
- "name": "安全监控系统台账",
- "document_type": "safety_monitoring_system_ledger",
- "description": "抽取安全监控系统分站、传感器、测点状态、报警值、断电值和复电值。",
- "prompt": (
- "你是一名煤矿安全监控系统台账审查专家。请从安全监控系统台账中提取"
- "台账名称、矿井、编制单位、数据来源、工作表结构、分站数量和位置、"
- "传感器类型和数量、测点字段、报警值、断电值、复电值和断电范围。"
- "对于数据量很大的明细,请按分站和传感器类型汇总,同时保留关键甲烷、"
- "一氧化碳、风速、温度、烟雾、风门和局扇测点。"
- "summary 只输出结果:台账版本;分站和传感器数量;主要传感器类型;"
- "甲烷、一氧化碳、温度、风速报警及断电要求;总体完整性结论。"
- "不要写公式和原文引用。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "安全监控系统台账",
- "安全监控系统",
- "安全监测系统设备台账",
- "监控系统台账",
- ],
- "groups": [
- {
- "key": "ledger_info",
- "name": "台账基本信息",
- "order": 1,
- "fields": [
- {"key": "ledger_title", "name": "台账名称", "type": "text"},
- {"key": "mine_name", "name": "矿井名称", "type": "text"},
- {"key": "department", "name": "编制单位", "type": "text"},
- {"key": "ledger_version", "name": "台账版本或月份", "type": "text"},
- {"key": "sheet_names", "name": "工作表结构", "type": "list"},
- {"key": "data_source", "name": "数据来源系统", "type": "text"},
- ],
- },
- {
- "key": "system_structure",
- "name": "系统结构汇总",
- "order": 2,
- "fields": [
- {"key": "substation_count", "name": "分站数量", "type": "number"},
- {"key": "sensor_count", "name": "传感器或测点数量", "type": "number"},
- {"key": "substation_details", "name": "分站清单", "type": "list"},
- {"key": "sensor_type_counts", "name": "传感器类型数量", "type": "object"},
- {"key": "monitored_parameters", "name": "监测参数", "type": "list"},
- ],
- },
- {
- "key": "sensor_definitions",
- "name": "传感器与测点定义",
- "order": 3,
- "fields": [
- {"key": "sensor_fields", "name": "台账字段", "type": "list"},
- {"key": "critical_sensor_details", "name": "关键传感器明细", "type": "list"},
- {"key": "gas_sensor_count", "name": "甲烷传感器数量", "type": "number"},
- {"key": "co_sensor_count", "name": "一氧化碳传感器数量", "type": "number"},
- {"key": "airflow_sensor_count", "name": "风速传感器数量", "type": "number"},
- {"key": "temperature_sensor_count", "name": "温度传感器数量", "type": "number"},
- {"key": "smoke_sensor_count", "name": "烟雾传感器数量", "type": "number"},
- {"key": "door_sensor_count", "name": "风门传感器数量", "type": "number"},
- {"key": "fan_sensor_count", "name": "局扇测点数量", "type": "number"},
- ],
- },
- {
- "key": "alarm_settings",
- "name": "报警与断电设置",
- "order": 4,
- "fields": [
- {"key": "gas_alarm_thresholds", "name": "甲烷报警阈值", "type": "list"},
- {"key": "co_alarm_thresholds", "name": "一氧化碳报警阈值", "type": "list"},
- {"key": "temperature_alarm_thresholds", "name": "温度报警阈值", "type": "list"},
- {"key": "airflow_alarm_thresholds", "name": "风速报警阈值", "type": "list"},
- {"key": "power_cut_rules", "name": "断电控制规则", "type": "list"},
- {"key": "power_restore_rules", "name": "复电控制规则", "type": "list"},
- ],
- },
- {
- "key": "analysis",
- "name": "台账完整性分析",
- "order": 5,
- "fields": [
- {"key": "ledger_complete", "name": "台账是否完整", "type": "text"},
- {"key": "missing_items", "name": "缺失项", "type": "list"},
- {"key": "abnormal_settings", "name": "异常设置", "type": "list"},
- {"key": "overall_conclusion", "name": "总体结论", "type": "text"},
- ],
- },
- ],
- },
- }
- )
- DEFAULT_BUSINESS_TEMPLATES.append(
- {
- "code": "dust_dispersion_free_silica_monitoring_ledger",
- "name": "采掘作业场所粉尘分散度、游离二氧化硅含量监测台账",
- "document_type": "dust_dispersion_free_silica_monitoring_ledger",
- "description": "抽取采掘作业场所粉尘分散度、游离二氧化硅含量监测计划或台账的矿井、采样时间、检测地点、检测项目、频次、联系人和检测日期。",
- "prompt": (
- "你是一名煤矿粉尘防治资料审查专家。请从采掘作业场所粉尘分散度、"
- "游离二氧化硅含量监测计划表或监测台账中提取标题、监测年度、覆盖矿井、"
- "采样时间、检测地点、检测项目、频次周期、联系人及电话、备注、计划检测日期和"
- "实际检测日期。请按矿井逐条整理计划记录,不得把计划时间当作实际检测时间,"
- "空值保留为 null。summary 只输出结果:监测年度;覆盖矿井数量;检测项目;"
- "频次要求;计划记录数量;计划日期和实际日期的完整情况;总体结论。"
- "不要写公式和原文引用。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "粉尘分散度、游离二氧化硅含量监测",
- "粉尘分散度",
- "游离二氧化硅",
- "采掘作业场所粉尘",
- "粉尘检测计划表",
- "粉尘分散度监测台账",
- ],
- "groups": [
- {
- "key": "ledger_info",
- "name": "台账基本信息",
- "order": 1,
- "fields": [
- {"key": "monitoring_title", "name": "监测计划或台账名称", "type": "text"},
- {"key": "monitoring_year", "name": "监测年度", "type": "text"},
- {"key": "document_kind", "name": "资料性质", "type": "text"},
- {"key": "applicable_scope", "name": "适用范围", "type": "text"},
- {"key": "sheet_names", "name": "工作表结构", "type": "list"},
- ],
- },
- {
- "key": "plan_summary",
- "name": "监测计划汇总",
- "order": 2,
- "fields": [
- {"key": "mine_count", "name": "覆盖矿井数量", "type": "number"},
- {"key": "plan_record_count", "name": "监测计划记录数量", "type": "number"},
- {"key": "mine_names", "name": "覆盖矿井", "type": "list"},
- {"key": "monitoring_items", "name": "检测项目", "type": "list"},
- {"key": "frequency_cycle", "name": "检测频次或周期", "type": "list"},
- {"key": "coverage_requirements", "name": "覆盖和抽样要求", "type": "list"},
- ],
- },
- {
- "key": "mine_plan_records",
- "name": "各矿井监测计划",
- "order": 3,
- "fields": [
- {"key": "mine_plan_records", "name": "逐矿计划记录", "type": "list"},
- ],
- },
- {
- "key": "schedule",
- "name": "检测时间安排",
- "order": 4,
- "fields": [
- {"key": "planned_detection_dates", "name": "计划检测时间", "type": "list"},
- {"key": "actual_detection_dates", "name": "实际检测日期", "type": "list"},
- {"key": "missing_planned_dates", "name": "缺少计划日期的矿井", "type": "list"},
- {"key": "missing_actual_dates", "name": "缺少实际日期的矿井", "type": "list"},
- ],
- },
- {
- "key": "contacts",
- "name": "联系人信息",
- "order": 5,
- "fields": [
- {"key": "primary_contacts", "name": "矿方联系人及电话", "type": "list"},
- {"key": "onsite_contacts", "name": "现场检测联系人及电话", "type": "list"},
- {"key": "contact_phone_map", "name": "联系人电话映射", "type": "object"},
- ],
- },
- {
- "key": "analysis",
- "name": "计划完整性分析",
- "order": 6,
- "fields": [
- {"key": "plan_complete", "name": "计划信息是否完整", "type": "text"},
- {"key": "missing_items", "name": "缺失项", "type": "list"},
- {"key": "overall_conclusion", "name": "总体结论", "type": "text"},
- ],
- },
- ],
- },
- }
- )
- DEFAULT_BUSINESS_TEMPLATES.append(
- {
- "code": "vehicle_air_door_inspection_record",
- "name": "行车风门检查记录",
- "document_type": "vehicle_air_door_inspection_record",
- "description": "抽取出行车风门台账、风门编号、类型、性质、材料、规格、数量以及检查问题、整改措施和整改状态。",
- "prompt": (
- "你是一名煤矿通风设施检查资料审查专家。请从行车风门检查记录中提取"
- "资料名称、矿井名称、年度、台账名称、风门台账明细、分区统计、检查月份、"
- "检查时间、各风门检查记录、存在问题、整改措施、是否整改及备注。"
- "风门台账需要逐条保留序号、属地、风门地点、风门编号、风门类型、风门性质、"
- "风门材料、数量和风门规格。检查记录需要按安装地点、风门性质、检查时间、"
- "存在问题、整改措施、是否整改和备注逐条整理。"
- "如果 OCR 将矿井名称识别为“上海煤矿”,应结合文件信息纠正为“上湾煤矿”。"
- "summary 只输出结果:年度和月份;风门台账数量;自动/手动风门数量;"
- "主要规格;检查风门数量;发现问题数量和整改情况;总体结论。"
- "不要写公式和原文引用。"
- ),
- "extraction_schema": {
- "match_keywords": [
- "行车风门检查记录",
- "行车风门台账",
- "行车风门",
- "风门检查记录",
- ],
- "groups": [
- {
- "key": "document_info",
- "name": "资料基本信息",
- "order": 1,
- "fields": [
- {"key": "record_title", "name": "检查记录名称", "type": "text"},
- {"key": "mine_name", "name": "矿井名称", "type": "text"},
- {"key": "record_year", "name": "检查年度", "type": "text"},
- {"key": "ledger_name", "name": "风门台账名称", "type": "text"},
- {"key": "inspection_month", "name": "检查月份", "type": "text"},
- {"key": "page_count", "name": "资料页数", "type": "number"},
- ],
- },
- {
- "key": "inventory_summary",
- "name": "行车风门台账汇总",
- "order": 2,
- "fields": [
- {"key": "district_count", "name": "涉及盘区或区域数量", "type": "number"},
- {"key": "air_door_record_count", "name": "风门台账记录数量", "type": "number"},
- {"key": "total_door_sets", "name": "风门总套数", "type": "number"},
- {"key": "automatic_door_count", "name": "自动风门数量", "type": "number"},
- {"key": "manual_door_count", "name": "手动风门数量", "type": "number"},
- {"key": "inactive_door_count", "name": "停用或常开风门数量", "type": "number"},
- {"key": "common_specifications", "name": "常见风门规格", "type": "list"},
- ],
- },
- {
- "key": "air_door_inventory",
- "name": "行车风门台账明细",
- "order": 3,
- "fields": [
- {"key": "air_door_records", "name": "逐条风门台账", "type": "list"},
- ],
- },
- {
- "key": "inspection_summary",
- "name": "检查结果汇总",
- "order": 4,
- "fields": [
- {"key": "inspection_dates", "name": "检查时间", "type": "list"},
- {"key": "inspected_door_count", "name": "检查风门数量", "type": "number"},
- {"key": "problem_door_count", "name": "存在问题的风门数量", "type": "number"},
- {"key": "rectified_count", "name": "已完成整改数量", "type": "number"},
- {"key": "unrectified_count", "name": "未完成整改数量", "type": "number"},
- {"key": "rectification_rate", "name": "整改率", "type": "number"},
- ],
- },
- {
- "key": "inspection_records",
- "name": "风门检查明细",
- "order": 5,
- "fields": [
- {"key": "inspection_records", "name": "逐条检查记录", "type": "list"},
- ],
- },
- {
- "key": "analysis",
- "name": "问题与结论",
- "order": 6,
- "fields": [
- {"key": "problem_records", "name": "存在问题的记录", "type": "list"},
- {"key": "problem_types", "name": "问题类型", "type": "list"},
- {"key": "rectification_measures", "name": "整改措施", "type": "list"},
- {"key": "overall_conclusion", "name": "总体结论", "type": "text"},
- ],
- },
- ],
- },
- }
- )
- LEGACY_TEMPLATE_CODES = {
- "pdf_document_v1",
- "word_document_v1",
- "excel_document_v1",
- }
- def detect_file_format(file_ext: str | None) -> str:
- extension = Path(file_ext or "").suffix.lower()
- if not extension:
- extension = f".{str(file_ext or '').strip().lstrip('.').lower()}"
- if extension not in SUPPORTED_FILE_EXTENSIONS:
- supported = "、".join(sorted(SUPPORTED_FILE_EXTENSIONS))
- raise APIError(
- 422,
- "unsupported_file_format",
- f"暂不支持该文件格式,可用扩展名:{supported}",
- )
- return SUPPORTED_FILE_EXTENSIONS[extension]
- def _active_template_schema(item: dict) -> dict:
- schema = item["extraction_schema"]
- return {
- **schema,
- "groups": [
- group
- for group in schema.get("groups", [])
- if not group.get("analysis_only")
- ],
- }
- def ensure_default_templates(db: Session) -> None:
- default_codes = {item["code"] for item in DEFAULT_BUSINESS_TEMPLATES}
- for item in DEFAULT_BUSINESS_TEMPLATES:
- template_data = {
- **item,
- "extraction_schema": _active_template_schema(item),
- }
- template = db.scalar(
- select(DocumentExtractionTemplate).where(
- DocumentExtractionTemplate.code == item["code"]
- )
- )
- if template is None:
- db.add(DocumentExtractionTemplate(**template_data))
- else:
- template.name = template_data["name"]
- template.document_type = template_data["document_type"]
- template.description = template_data["description"]
- template.prompt = template_data["prompt"]
- template.extraction_schema = template_data["extraction_schema"]
- template.enabled = True
- legacy_templates = db.scalars(
- select(DocumentExtractionTemplate).where(
- DocumentExtractionTemplate.code.in_(LEGACY_TEMPLATE_CODES - default_codes)
- )
- ).all()
- for template in legacy_templates:
- template.enabled = False
- db.commit()
- def get_template_by_id(
- db: Session,
- template_id: str,
- ) -> DocumentExtractionTemplate:
- template = db.get(DocumentExtractionTemplate, template_id)
- if template is None or not template.enabled:
- raise APIError(404, "extraction_template_not_found", "抽取模板不存在或未启用")
- return template
- def resolve_document_template(
- db: Session,
- *,
- title: str,
- template_id: str | None = None,
- ) -> DocumentExtractionTemplate:
- if template_id:
- return get_template_by_id(db, template_id)
- templates = db.scalars(
- select(DocumentExtractionTemplate)
- .where(DocumentExtractionTemplate.enabled.is_(True))
- .order_by(DocumentExtractionTemplate.updated_at.desc())
- ).all()
- raw_title = title.strip()
- normalized_title = re.sub(
- r"[\s\-_—–()()\[\]【】..]+",
- "",
- raw_title.lower(),
- )
- matched: list[tuple[int, DocumentExtractionTemplate]] = []
- for template in templates:
- schema = template.extraction_schema or {}
- keywords = [str(item).lower() for item in schema.get("match_keywords", [])]
- score = 0
- normalized_name = re.sub(
- r"[\s\-_—–()()\[\]【】..]+",
- "",
- template.name.lower(),
- )
- normalized_code = re.sub(r"[\s\-_—–()()\[\]【】..]+", "", template.code.lower())
- if normalized_name and normalized_name in normalized_title:
- score += 100
- if normalized_code and normalized_code in normalized_title:
- score += 80
- for keyword in keywords:
- normalized_keyword = re.sub(
- r"[\s\-_—–()()\[\]【】..]+",
- "",
- keyword,
- )
- if normalized_keyword and normalized_keyword in normalized_title:
- score += 50 + len(normalized_keyword)
- if score:
- matched.append((score, template))
- if matched:
- matched.sort(key=lambda item: item[0], reverse=True)
- return matched[0][1]
- raise APIError(
- 422,
- "extraction_template_required",
- "请选择资料对应的业务抽取模板",
- )
- def template_field_definitions(
- template: DocumentExtractionTemplate,
- ) -> list[dict]:
- schema = template.extraction_schema or {}
- definitions: list[dict] = []
- for group in sorted(
- schema.get("groups", []),
- key=lambda item: int(item.get("order", 999)),
- ):
- for field_order, field in enumerate(group.get("fields", [])):
- definitions.append(
- {
- **field,
- "group_key": group.get("key", ""),
- "group_name": group.get("name", ""),
- "group_order": group.get("order", 999),
- "field_order": field_order,
- }
- )
- if definitions:
- return definitions
- return list(schema.get("fields", []))
|