diff --git a/.gitignore b/.gitignore index 1b6094f..404a873 100644 --- a/.gitignore +++ b/.gitignore @@ -27,9 +27,19 @@ run_real_import.py test_import_rollback.py import_bindings.py temp_repo.py +analyze_*.py +final_importer.py +ultimate_importer.py +*_importer.py # Temporary Data/Reports excel_info.txt parsing_output.txt unmatched_permits_report.txt analysis/data/checkpoints/ + +# Excel files (except templates) +*.xlsx +!样表.xlsx +审批服务部门.xlsx + diff --git a/docs/API_V2.md b/docs/API_V2.md index e7f042b..eedcb64 100644 --- a/docs/API_V2.md +++ b/docs/API_V2.md @@ -8,7 +8,7 @@ 通过自然语言或事项名称检索相关的许可事项及其法律风险提示内容。 -- **URL**: `/fs-ai-asistant/api/workflow/lawrisk/v2` +- **URL**: `172.22.80.11:8000/fs-ai-asistant/api/workflow/lawrisk/v2` - **Method**: `POST` (推荐) 或 `GET` - **Authentication**: 无 (面向前端查询) / 或根据部署配置 @@ -71,18 +71,140 @@ - **Method**: `GET` ### 2.1 响应示例 +请求命令: +```cmd +curl -X POST "http://127.0.0.1:8000/fs-ai-asistant/api/workflow/lawrisk/v2" \ + -d "query=食品小作坊登记证" \ + -d "region=市级" +``` + +响应: ```json { - "success": true, - "data": { - "regions": [ - { "id": "uuid-1", "name": "市级" }, - { "id": "uuid-2", "name": "禅城区" } - ] - } + "data": { + "conversationId": "", + "conversationInfo": {}, + "costStatistics": {}, + "debug": {}, + "executionSteps": [], + "executionTime": 30805, + "knowledgeSources": [], + "lawRisk": "", + "llmRespond": "", + "messageId": "", + "questionExtend": [], + "risk_subject": [ + { + "display_name": "", + "id": "", + "permits": [ + { + "binds_all_themes": false, + "business_scopes": [], + "contact_info": null, + "filler_name": null, + "id": "e255e87b-b37a-4b25-8197-bd0e4920edd3", + "jurisdiction_scope": "市级", + "name": "食品小作坊登记证", + "permit_file": { + "content_type": "application/octet-stream", + "created_at": "2025-12-20T06:54:27.158628+00:00", + "file_id": "1b1dde35-25b9-462b-b52c-9b196bc2a706", + "file_size": 86655, + "filename": "101(生产科) 风险提示表(食品小作坊登记,市场监管部门) (1)_转自XLS.xlsx", + "uploaded_by": "system_admin_reset" + }, + "permit_source": { + "source_detail": "{\"sheet\": \"市级\", \"permit\": \"食品小作坊登记证\", \"risk_rows\": 5, \"imported_at\": \"2025-12-20T06:54:27.889868\"}", + "source_name": "101(生产科) 风险提示表(食品小作坊登记,市场监管部门) (1)_转自XLS.xlsx", + "source_type": "excel", + "updated_at": "2025-12-20T06:54:27.158628+00:00" + }, + "permit_status": "后置事项", + "risks": [ + { + "document_no": "2019年12月20日佛山市人民政府令第9号", + "id": "1854fac0-178e-4868-8bfd-3736672028a5", + "legal_basis": "《佛山市食品生产加工小作坊集中管理办法》", + "remark": "", + "risk_content": "在选址方面,应该按照统一规划进入食品集中加工中心从事生产经营活动。", + "serial_number": "1", + "summary": "**第四条** 市、区人民政府对本行政区域内的食品小作坊实行集中管理,按照统一规划引导食品小作坊进入食品集中加工中心从事生产经营活动。" + }, + { + "document_no": "根据2018年12月29日第十三届全国人民代表大会常务委员会第七次会议《关于修改〈中华人民共和国产品质量法〉等五部法律的决定》修正", + "id": "08690483-c156-428e-9a89-0bca82abb781", + "legal_basis": "《中华人民共和国食品安全法》", + "remark": "", + "risk_content": "在人员方面,其负责人以及直接负责人五年内未因违反《中华人民共和国食品安全法》、《广东省食品生产加工小作坊和食品摊贩管理条例》被吊销许可证的,或因食品安全犯罪被判处有期徒刑以上刑罚的。", + "serial_number": "2", + "summary": "**第一百三十五条** 被吊销许可证的食品生产经营者及其法定代表人、直接负责的主管人员和其他直接责任人员自处罚决定作出之日起五年内不得申请食品生产经营许可,或者从事食品生产经营管理工作、担任食品生产经营企业食品安全管理人员。\n 因食品安全犯罪被判处有期徒刑以上刑罚的,终身不得从事食品生产经营管理工作,也不得担任食品生产经营企业食品安全管理人员。" + }, + { + "document_no": "2015年7月31日广东省第十二届人民代表大会常务委员会第十九次会议通过", + "id": "6037582b-58c0-4801-a62f-74af8ef11729", + "legal_basis": "《广东省食品生产加工小作坊和食品摊贩管理条例》", + "remark": "", + "risk_content": "在人员方面,其负责人以及直接负责人五年内未因违反《中华人民共和国食品安全法》、《广东省食品生产加工小作坊和食品摊贩管理条例》被吊销许可证的,或因食品安全犯罪被判处有期徒刑以上刑罚的。", + "serial_number": "3", + "summary": "**第五十七条** 违反本条例规定,食品小作坊被吊销食品小作坊登记证或者食品摊贩被吊销食品摊贩登记卡的,其负责人以及直接责任人五年内不得从事食品生产经营活动。" + }, + { + "document_no": "2015年7月31日广东省第十二届人民代表大会常务委员会第十九次会议通过", + "id": "2bf8fe36-4750-4f99-80c5-9c0ed448cbf1", + "legal_basis": "《广东省食品生产加工小作坊和食品摊贩管理条例》", + "remark": "", + "risk_content": "在生产食品种类方面,应不在食品小作坊禁止生产加工食品种类目录内。", + "serial_number": "4", + "summary": "**第十四条** 禁止食品小作坊生产加工下列食品:\n- (一) 乳制品、罐头制品等食品;\n- (二) 婴幼儿配方食品和其他专供特定人群的主辅食品;\n- (三) 声称具有保健功能的食品;\n- (四) 不符合食品安全标准的土榨花生油等食用油;\n- (五) 使用酒精勾兑的酒类;\n- (六) 国家和省规定的禁止生产的其他食品。\n  前款规定以外禁止生产加工的食品目录,由地级以上市人民政府食品药品监督管理部门制定,经同级人民政府批准后报省人民政府食品药品监督管理部门备案,并向社会公布。地级以上市人民政府食品药品监督管理部门可以根据食品安全监督抽检结果、食品安全风险评估结果对本行政区域内食品小作坊禁止生产加工的食品目录进行调整。" + }, + { + "document_no": "佛市监公字〔2024〕1 号", + "id": "b29381d8-ec3d-4683-93e7-1d08b6122cfe", + "legal_basis": "佛山市市场监督管理局关于修订《佛山市禁止食品小作坊生产加工的食品目录》的公告", + "remark": "", + "risk_content": "在生产食品种类方面,应不在食品小作坊禁止生产加工食品种类目录内。", + "serial_number": "5", + "summary": "" + } + ], + "source_update_date": null, + "subitem_summary": null, + "theme": { + "id": "cd096099-c3dd-4fc3-84d2-1f835b930565", + "name": "开办食品小作坊" + }, + "themes": [ + { + "id": "cd096099-c3dd-4fc3-84d2-1f835b930565", + "name": "开办食品小作坊" + } + ], + "unit_name": null + } + ], + "region": { + "id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "name": "市级" + }, + "theme": { + "id": "", + "name": "" + } + } + ], + "roundNumber": 0, + "totalKnowledgeSources": 0, + "workflowStatus": "ok", + "workflowTrackingId": "" + }, + "message": "OK", + "success": true } ``` + +其中response["data"]["risk_subject"][n]["risk_subject"][m]["permits"][k]["risks"][l]["serial_number"] 是该risk的序号,要求在风险提示的展示中,按照序号的顺序展示,并且把序号标注在行头。 unit_name 是实施单位名称 ,需要增加一列以展示(目前这批数据这个字段基本都为空)。 --- ## 3. 主题列表接口 (V2 Themes) @@ -91,9 +213,154 @@ - **URL**: `/fs-ai-asistant/api/workflow/lawrisk/v2/themes` - **Method**: `GET` - +请求命令示例: +```cmd +curl -X GET "http://127.0.0.1:8000/fs-ai-asistant/api/workflow/lawrisk/v2/themes" +``` ### 3.1 响应字段说明 -- `data.themes`: 包含主题名称、唯一 ID、关联事项数量及关联地区数量。 +响应示例: +```json +{ + "data": [ + { + "id": "915e3a0a-1605-4659-b23e-05b73a1d49bb", + "name": "开办三类医疗器械经营企业", + "permit_count": 2, + "region_count": 1 + }, + { + "id": "64b3c94f-4b40-47ab-9bad-ea9bfd47cd2f", + "name": "开办二类医疗器械销售企业", + "permit_count": 1, + "region_count": 1 + }, + { + "id": "51a76f78-cf1c-4738-bf37-b869574d3e78", + "name": "开办便利店", + "permit_count": 4, + "region_count": 1 + }, + { + "id": "a3963762-d76a-4917-a12a-0c92a4213fc6", + "name": "开办健身房", + "permit_count": 1, + "region_count": 1 + }, + { + "id": "a3d1b51e-0768-4302-a975-fe4b0bd2f39f", + "name": "开办农副食品加工企业", + "permit_count": 1, + "region_count": 1 + }, + { + "id": "bc9722a1-8a1a-4ddb-ac91-e1cadf10d01f", + "name": "开办咖啡馆/茶馆", + "permit_count": 3, + "region_count": 1 + }, + { + "id": "544cf0dd-709f-4db2-9017-19499f59a222", + "name": "开办小餐饮店", + "permit_count": 3, + "region_count": 1 + }, + { + "id": "c4009ca8-394e-4346-8dcc-37de3cc1242e", + "name": "开办旅馆", + "permit_count": 8, + "region_count": 1 + }, + { + "id": "ed6240a7-74f8-41a2-8ef5-d2d3170e17a5", + "name": "开办月子中心", + "permit_count": 1, + "region_count": 1 + }, + { + "id": "bf50a206-1ddd-4296-80f4-fd72d988f3ab", + "name": "开办歌舞娱乐场所", + "permit_count": 4, + "region_count": 1 + }, + { + "id": "0e20dfb7-81bb-4da4-9bab-c7b76f7fa5b1", + "name": "开办母婴用品店", + "permit_count": 1, + "region_count": 1 + }, + { + "id": "28904977-9f0d-4ee3-a436-5a1c26fd3e80", + "name": "开办洗浴场所", + "permit_count": 7, + "region_count": 1 + }, + { + "id": "61a5c70f-898a-42a5-b924-54e476d9a2f8", + "name": "开办烘焙坊/面包房", + "permit_count": 3, + "region_count": 1 + }, + { + "id": "4030c13b-b0b8-4b09-a90f-544a89feb4be", + "name": "开办网吧", + "permit_count": 4, + "region_count": 1 + }, + { + "id": "4ae1f92b-75c7-4704-b42e-ef1be28a9e32", + "name": "开办药店", + "permit_count": 3, + "region_count": 1 + }, + { + "id": "2d326a6b-6761-4c05-b2b7-af1949e9247d", + "name": "开办超市", + "permit_count": 5, + "region_count": 1 + }, + { + "id": "cabc47da-5749-4547-a94f-fd5960a4fd11", + "name": "开办酒吧", + "permit_count": 3, + "region_count": 1 + }, + { + "id": "cd096099-c3dd-4fc3-84d2-1f835b930565", + "name": "开办食品小作坊", + "permit_count": 1, + "region_count": 1 + }, + { + "id": "577b2dfc-83a8-4fe1-8def-3c2c3f5fde90", + "name": "开办食品生产企业", + "permit_count": 1, + "region_count": 1 + }, + { + "id": "b3e20858-8fb4-4f60-9c98-4fd6d5e95d09", + "name": "开办饭店", + "permit_count": 3, + "region_count": 1 + }, + { + "id": "234983db-27c4-44bc-b8b5-872d578ce65c", + "name": "开办饮料制造企业", + "permit_count": 1, + "region_count": 1 + }, + + { + "id": "585f04b2-9f66-4982-84b0-82b6405b55c0", + "name": "现场制售食品", + "permit_count": 3, + "region_count": 1 + } + ], + "success": true +} +``` + +- `data`: 主题列表,每个元素包含主题名称、唯一 ID、关联事项数量及关联地区数量。 --- @@ -103,9 +370,445 @@ - **URL**: `/fs-ai-asistant/api/workflow/lawrisk/v2/unbound-permits` - **Method**: `GET` +请求示例: +```cmd +curl -X GET "http://127.0.0.1:8000/fs-ai-asistant/api/workflow/lawrisk/v2/unbound-permits" +``` +响应示例: +```json +{ + "data": [ + { + "permit_id": "80563b15-279c-40a2-86a0-d2e93fd7419b", + "permit_name": "《卫星地面接收设施安装服务许可证》(换发)审批,《卫星地面接收设施安装服务许可证》(注销)审批,《卫星地面接收设施安装服务许可证》(新证)审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:00.955259+00:00" + }, + { + "permit_id": "22740687-11b0-4612-adf3-e7fd1a0661c7", + "permit_name": "《市场准入负面清单》禁止准入类:禁止违规开展金融相关经营活动“非金融机构、不从事金融活动的企业,在注册名称和经营范围中原则上不得使用与金融相关的字样”(设立依据效力层级不足允许暂时保留的禁止或许可措施)", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:50.380230+00:00" + }, + { + "permit_id": "27ce3253-db4f-4330-a848-e3041cd88119", + "permit_name": "一次性内部资料准印证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:17.933643+00:00" + }, + { + "permit_id": "4585413f-4ad1-4b77-8da5-b1e28bb5d315", + "permit_name": "人力资源服务(不含职业中介活动、劳务派遣服务)备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:39.233543+00:00" + }, + { + "permit_id": "c4712c0a-d25c-4fc0-8f26-aa8e88981cd5", + "permit_name": "从事出版物零售业务许可(含音像制品、电子出版物)", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:55.241352+00:00" + }, + { + "permit_id": "81b0f99f-2c90-4af5-9cda-5f24f8fa81a2", + "permit_name": "从事包装装潢印刷品和其他印刷品(不含商标、票据、保密印刷)印刷经营活动企业(不含外资企业)的设立、变更审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:51.810833+00:00" + }, + { + "permit_id": "e88db6ee-4867-4eaf-838c-5bc315ca6dd7", + "permit_name": "从事县内道路旅客运输包车经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:14.088309+00:00" + }, + { + "permit_id": "3896be62-0554-4ede-b356-6d227136ac77", + "permit_name": "养老机构备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:10.831626+00:00" + }, + { + "permit_id": "b98ae2bd-2275-4321-8d33-0f79169ac659", + "permit_name": "农药经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:49.657047+00:00" + }, + { + "permit_id": "8f5f44b9-f1d7-4e4d-b12d-6c6892046c02", + "permit_name": "出版物发行单位在批准的经营范围内通过互联网等信息网络从事出版物发行业务的备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:56.604582+00:00" + }, + { + "permit_id": "b531c8fd-542a-4a7f-b81a-14c036d1176c", + "permit_name": "出版物批发、零售单位设立不具备法人资格的分支机构,或者出版单位设立发行本版出版物的不具备法人资格的发行分支机构的备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:21.548538+00:00" + }, + { + "permit_id": "5f10b6ec-043d-4860-b2c6-33bfefcf6212", + "permit_name": "出版物批发单位设立、变更审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:53.523540+00:00" + }, + { + "permit_id": "5b5c8358-79a6-4da5-80c8-592e682e4bfb", + "permit_name": "医疗废物经营许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:13.858160+00:00" + }, + { + "permit_id": "91fd909f-2748-4c10-b2eb-080b5202adea", + "permit_name": "医疗机构(三级医院、三级妇幼保健院、急救中心、急救站、临床检验中心、中外合资合作医疗机构、港澳台独资医疗机构)设置审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:30.712569+00:00" + }, + { + "permit_id": "396d6864-4367-4d93-874a-87bbe952aa1d", + "permit_name": "医疗机构(不含诊所)执业许可(执业登记)", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:36.010931+00:00" + }, + { + "permit_id": "fd21d74d-0626-46a3-9f98-e0658d2ca206", + "permit_name": "印章刻制业许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:44.519352+00:00" + }, + { + "permit_id": "cee87970-8dde-4432-99d3-ab513e226a0b", + "permit_name": "危险化学品建设项目安全条件审查、安全设施设计审查", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:04.203627+00:00" + }, + { + "permit_id": "1a925fea-06ba-425e-a55a-010d5d64aebf", + "permit_name": "危险化学品经营许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:05.987094+00:00" + }, + { + "permit_id": "5ddaa103-551b-421f-bff6-a6798fa74860", + "permit_name": "危险废物收集经营许可证核发(广东省厅事项名称) 【国家标准名:危险废物经营许可】", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:37.873518+00:00" + }, + { + "permit_id": "3e744c82-6c29-483b-b3ea-c2cdaba13364", + "permit_name": "巡游出租汽车经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:16.727323+00:00" + }, + { + "permit_id": "f42e8b4c-6b1d-4045-89d7-d271b97286f8", + "permit_name": "巡游出租汽车车辆运营证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:15.414125+00:00" + }, + { + "permit_id": "568d9a41-ebfe-471c-88a3-1bdff42eee07", + "permit_name": "广播电视节目制作经营许可证(载明事项变更)审批,广播电视节目制作经营许可证(新证)审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:02.491594+00:00" + }, + { + "permit_id": "1aaac0af-d9fb-45de-8f6f-16d8d83d8743", + "permit_name": "广播电视视频点播业务许可证(乙种)审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:59.306600+00:00" + }, + { + "permit_id": "22b08a42-513a-457b-9711-8a33e7dc9315", + "permit_name": "废弃电器电子产品处理企业资格审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:57.986279+00:00" + }, + { + "permit_id": "c15bd023-ece1-4276-8b00-88ecf86538ba", + "permit_name": "房地产经纪机构及其分支机构设立备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:00.840084+00:00" + }, + { + "permit_id": "6f2ae217-c183-46cf-8396-b5cc5c1d7868", + "permit_name": "托育机构备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:32.130909+00:00" + }, + { + "permit_id": "dc092bf1-6db7-45b7-8057-d3d3462dc279", + "permit_name": "承印加工境外一般性出版物审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:20.273714+00:00" + }, + { + "permit_id": "095deece-5470-40d8-b40d-f1abebcdbd37", + "permit_name": "承印加工境外包装装潢和其他印刷品备案核准", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:19.010827+00:00" + }, + { + "permit_id": "70ecd014-ef71-4424-991b-e0da7a9a2270", + "permit_name": "排污许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:24.382708+00:00" + }, + { + "permit_id": "3bee0ab0-84ad-49d8-9fc3-c207e2feda9e", + "permit_name": "放射诊疗许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:39.267696+00:00" + }, + { + "permit_id": "02192810-36a6-4414-b5b4-5483849debb4", + "permit_name": "机动车维修经营备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:22.730905+00:00" + }, + { + "permit_id": "631095d1-6867-4cae-ab8a-b416038e8341", + "permit_name": "机动车驾驶培训机构备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:26.142682+00:00" + }, + { + "permit_id": "8bcbd71d-b2c6-4e2b-b8d6-2c964fe4fce4", + "permit_name": "校车使用许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:56.884580+00:00" + }, + { + "permit_id": "76bb6473-f312-41b2-b1d2-58d28e2dcc54", + "permit_name": "民办职业培训学校新设立、变更", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:40.972628+00:00" + }, + { + "permit_id": "87aaecad-89aa-41fe-a7e8-fc43d28bff18", + "permit_name": "水路运输辅助业登记备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:20.741309+00:00" + }, + { + "permit_id": "841ff980-d426-4aa7-bb32-18d097aee30e", + "permit_name": "演出经纪机构延续,演出经纪机构从事营业性演出经营活动审批,演出经纪机构变更,演出经纪机构补证,演出经纪机构注销", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:15.548510+00:00" + }, + { + "permit_id": "d895ec6d-d1e3-44d7-8f37-92bf2853dfac", + "permit_name": "烟花爆竹(批发)许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:07.636555+00:00" + }, + { + "permit_id": "af8399e3-0e2b-44e6-a80e-e07d284d5f25", + "permit_name": "燃气燃烧器具安装、维修企业资质核准", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:59.345750+00:00" + }, + { + "permit_id": "31c706eb-86c9-4ad2-b620-e4a686c581d9", + "permit_name": "燃气经营许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:54.843386+00:00" + }, + { + "permit_id": "ac41cc51-9a8f-4372-a378-fbbe984a1495", + "permit_name": "生鲜乳准运证明核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:53.317646+00:00" + }, + { + "permit_id": "c447b5fd-d8fd-46e7-83fc-5c779a24fa84", + "permit_name": "电视剧制作许可证(乙种)载明内容变更,电视剧制作许可证(乙种)延期,电视剧制作许可证(乙种)申请", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:04.006623+00:00" + }, + { + "permit_id": "a06dfd85-8c45-48e4-a673-66864fa59ccf", + "permit_name": "社会力量举办非学历教育机构审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:27.632682+00:00" + }, + { + "permit_id": "8d7b8f3d-1e42-49f7-8fcb-1a63d20afec8", + "permit_name": "种畜禽生产经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:46.117964+00:00" + }, + { + "permit_id": "06c44604-8973-429b-89f9-dac1a36ef9a7", + "permit_name": "第二、三类非药品类易制毒化学品生产、经营备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:02.384024+00:00" + }, + { + "permit_id": "9eefc68a-4af4-4a63-a1ff-b17c4ebd6c4b", + "permit_name": "第二类精神药品零售业务审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:30.463981+00:00" + }, + { + "permit_id": "0b46e1b3-85d5-4340-86c5-88542e590f5d", + "permit_name": "经营性人力资源服务许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:37.602676+00:00" + }, + { + "permit_id": "f5207d56-1a70-4e05-993f-a3ffebe06fab", + "permit_name": "蜂种生产经营许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:47.742703+00:00" + }, + { + "permit_id": "23afab0f-8fe9-4aa3-879f-6122517a3094", + "permit_name": "辐射安全许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:36.294121+00:00" + }, + { + "permit_id": "9dc9bfcc-86ce-4492-9440-675f335c9723", + "permit_name": "道路旅客运输站(场)经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:17.852644+00:00" + }, + { + "permit_id": "53ff5cc1-3437-48cb-842d-2364443782d2", + "permit_name": "道路货物运输经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:19.332629+00:00" + }, + { + "permit_id": "f8ed23e2-2ffe-4a24-b6cb-3d36a6a90da3", + "permit_name": "金属冶炼建设项目安全设施设计审查", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:09.165803+00:00" + }, + { + "permit_id": "5b1e7605-8e69-4729-9260-7479efb523fa", + "permit_name": "音像制作单位的变更审批,音像制作单位的设立审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:05.565007+00:00" + }, + { + "permit_id": "b7cbcbf0-5662-46bf-b853-6a8fad222805", + "permit_name": "饮用水供水单位卫生许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:28.833332+00:00" + } + ], + "success": true +} +``` ### 4.1 响应字段说明 -- `data.permits`: 包含地区信息、事项名称、实施单位及更新时间。用于快速定位需要分类的数据。 +- `data`: 列表,包含地区信息、事项名称、实施单位及更新时间。用于快速定位需要分类的数据。 --- @@ -116,6 +819,442 @@ - **URL**: `/fs-ai-asistant/api/workflow/lawrisk/getPermits` - **Method**: `POST` +请求命令示例: +```cmd +curl -X GET "http://127.0.0.1:8000/fs-ai-asistant/api/workflow/lawrisk/v2/unbound-permits" +``` +响应: +```json +{ + "data": [ + { + "permit_id": "80563b15-279c-40a2-86a0-d2e93fd7419b", + "permit_name": "《卫星地面接收设施安装服务许可证》(换发)审批,《卫星地面接收设施安装服务许可证》(注销)审批,《卫星地面接收设施安装服务许可证》(新证)审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:00.955259+00:00" + }, + { + "permit_id": "22740687-11b0-4612-adf3-e7fd1a0661c7", + "permit_name": "《市场准入负面清单》禁止准入类:禁止违规开展金融相关经营活动“非金融机构、不从事金融活动的企业,在注册名称和经营范围中原则上不得使用与金融相关的字样”(设立依据效力层级不足允许暂时保留的禁止或许可措施)", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:50.380230+00:00" + }, + { + "permit_id": "27ce3253-db4f-4330-a848-e3041cd88119", + "permit_name": "一次性内部资料准印证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:17.933643+00:00" + }, + { + "permit_id": "4585413f-4ad1-4b77-8da5-b1e28bb5d315", + "permit_name": "人力资源服务(不含职业中介活动、劳务派遣服务)备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:39.233543+00:00" + }, + { + "permit_id": "c4712c0a-d25c-4fc0-8f26-aa8e88981cd5", + "permit_name": "从事出版物零售业务许可(含音像制品、电子出版物)", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:55.241352+00:00" + }, + { + "permit_id": "81b0f99f-2c90-4af5-9cda-5f24f8fa81a2", + "permit_name": "从事包装装潢印刷品和其他印刷品(不含商标、票据、保密印刷)印刷经营活动企业(不含外资企业)的设立、变更审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:51.810833+00:00" + }, + { + "permit_id": "e88db6ee-4867-4eaf-838c-5bc315ca6dd7", + "permit_name": "从事县内道路旅客运输包车经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:14.088309+00:00" + }, + { + "permit_id": "3896be62-0554-4ede-b356-6d227136ac77", + "permit_name": "养老机构备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:10.831626+00:00" + }, + { + "permit_id": "b98ae2bd-2275-4321-8d33-0f79169ac659", + "permit_name": "农药经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:49.657047+00:00" + }, + { + "permit_id": "8f5f44b9-f1d7-4e4d-b12d-6c6892046c02", + "permit_name": "出版物发行单位在批准的经营范围内通过互联网等信息网络从事出版物发行业务的备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:56.604582+00:00" + }, + { + "permit_id": "b531c8fd-542a-4a7f-b81a-14c036d1176c", + "permit_name": "出版物批发、零售单位设立不具备法人资格的分支机构,或者出版单位设立发行本版出版物的不具备法人资格的发行分支机构的备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:21.548538+00:00" + }, + { + "permit_id": "5f10b6ec-043d-4860-b2c6-33bfefcf6212", + "permit_name": "出版物批发单位设立、变更审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:53.523540+00:00" + }, + { + "permit_id": "5b5c8358-79a6-4da5-80c8-592e682e4bfb", + "permit_name": "医疗废物经营许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:13.858160+00:00" + }, + { + "permit_id": "91fd909f-2748-4c10-b2eb-080b5202adea", + "permit_name": "医疗机构(三级医院、三级妇幼保健院、急救中心、急救站、临床检验中心、中外合资合作医疗机构、港澳台独资医疗机构)设置审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:30.712569+00:00" + }, + { + "permit_id": "396d6864-4367-4d93-874a-87bbe952aa1d", + "permit_name": "医疗机构(不含诊所)执业许可(执业登记)", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:36.010931+00:00" + }, + { + "permit_id": "fd21d74d-0626-46a3-9f98-e0658d2ca206", + "permit_name": "印章刻制业许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:44.519352+00:00" + }, + { + "permit_id": "cee87970-8dde-4432-99d3-ab513e226a0b", + "permit_name": "危险化学品建设项目安全条件审查、安全设施设计审查", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:04.203627+00:00" + }, + { + "permit_id": "1a925fea-06ba-425e-a55a-010d5d64aebf", + "permit_name": "危险化学品经营许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:05.987094+00:00" + }, + { + "permit_id": "5ddaa103-551b-421f-bff6-a6798fa74860", + "permit_name": "危险废物收集经营许可证核发(广东省厅事项名称) 【国家标准名:危险废物经营许可】", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:37.873518+00:00" + }, + { + "permit_id": "3e744c82-6c29-483b-b3ea-c2cdaba13364", + "permit_name": "巡游出租汽车经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:16.727323+00:00" + }, + { + "permit_id": "f42e8b4c-6b1d-4045-89d7-d271b97286f8", + "permit_name": "巡游出租汽车车辆运营证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:15.414125+00:00" + }, + { + "permit_id": "568d9a41-ebfe-471c-88a3-1bdff42eee07", + "permit_name": "广播电视节目制作经营许可证(载明事项变更)审批,广播电视节目制作经营许可证(新证)审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:02.491594+00:00" + }, + { + "permit_id": "1aaac0af-d9fb-45de-8f6f-16d8d83d8743", + "permit_name": "广播电视视频点播业务许可证(乙种)审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:59.306600+00:00" + }, + { + "permit_id": "22b08a42-513a-457b-9711-8a33e7dc9315", + "permit_name": "废弃电器电子产品处理企业资格审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:57.986279+00:00" + }, + { + "permit_id": "c15bd023-ece1-4276-8b00-88ecf86538ba", + "permit_name": "房地产经纪机构及其分支机构设立备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:00.840084+00:00" + }, + { + "permit_id": "6f2ae217-c183-46cf-8396-b5cc5c1d7868", + "permit_name": "托育机构备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:32.130909+00:00" + }, + { + "permit_id": "dc092bf1-6db7-45b7-8057-d3d3462dc279", + "permit_name": "承印加工境外一般性出版物审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:20.273714+00:00" + }, + { + "permit_id": "095deece-5470-40d8-b40d-f1abebcdbd37", + "permit_name": "承印加工境外包装装潢和其他印刷品备案核准", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:19.010827+00:00" + }, + { + "permit_id": "70ecd014-ef71-4424-991b-e0da7a9a2270", + "permit_name": "排污许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:24.382708+00:00" + }, + { + "permit_id": "3bee0ab0-84ad-49d8-9fc3-c207e2feda9e", + "permit_name": "放射诊疗许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:39.267696+00:00" + }, + { + "permit_id": "02192810-36a6-4414-b5b4-5483849debb4", + "permit_name": "机动车维修经营备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:22.730905+00:00" + }, + { + "permit_id": "631095d1-6867-4cae-ab8a-b416038e8341", + "permit_name": "机动车驾驶培训机构备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:26.142682+00:00" + }, + { + "permit_id": "8bcbd71d-b2c6-4e2b-b8d6-2c964fe4fce4", + "permit_name": "校车使用许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:56.884580+00:00" + }, + { + "permit_id": "76bb6473-f312-41b2-b1d2-58d28e2dcc54", + "permit_name": "民办职业培训学校新设立、变更", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:40.972628+00:00" + }, + { + "permit_id": "87aaecad-89aa-41fe-a7e8-fc43d28bff18", + "permit_name": "水路运输辅助业登记备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:20.741309+00:00" + }, + { + "permit_id": "841ff980-d426-4aa7-bb32-18d097aee30e", + "permit_name": "演出经纪机构延续,演出经纪机构从事营业性演出经营活动审批,演出经纪机构变更,演出经纪机构补证,演出经纪机构注销", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:15.548510+00:00" + }, + { + "permit_id": "d895ec6d-d1e3-44d7-8f37-92bf2853dfac", + "permit_name": "烟花爆竹(批发)许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:07.636555+00:00" + }, + { + "permit_id": "af8399e3-0e2b-44e6-a80e-e07d284d5f25", + "permit_name": "燃气燃烧器具安装、维修企业资质核准", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:59.345750+00:00" + }, + { + "permit_id": "31c706eb-86c9-4ad2-b620-e4a686c581d9", + "permit_name": "燃气经营许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:54.843386+00:00" + }, + { + "permit_id": "ac41cc51-9a8f-4372-a378-fbbe984a1495", + "permit_name": "生鲜乳准运证明核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:53.317646+00:00" + }, + { + "permit_id": "c447b5fd-d8fd-46e7-83fc-5c779a24fa84", + "permit_name": "电视剧制作许可证(乙种)载明内容变更,电视剧制作许可证(乙种)延期,电视剧制作许可证(乙种)申请", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:04.006623+00:00" + }, + { + "permit_id": "a06dfd85-8c45-48e4-a673-66864fa59ccf", + "permit_name": "社会力量举办非学历教育机构审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:27.632682+00:00" + }, + { + "permit_id": "8d7b8f3d-1e42-49f7-8fcb-1a63d20afec8", + "permit_name": "种畜禽生产经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:46.117964+00:00" + }, + { + "permit_id": "06c44604-8973-429b-89f9-dac1a36ef9a7", + "permit_name": "第二、三类非药品类易制毒化学品生产、经营备案", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:02.384024+00:00" + }, + { + "permit_id": "9eefc68a-4af4-4a63-a1ff-b17c4ebd6c4b", + "permit_name": "第二类精神药品零售业务审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:30.463981+00:00" + }, + { + "permit_id": "0b46e1b3-85d5-4340-86c5-88542e590f5d", + "permit_name": "经营性人力资源服务许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:37.602676+00:00" + }, + { + "permit_id": "f5207d56-1a70-4e05-993f-a3ffebe06fab", + "permit_name": "蜂种生产经营许可证核发", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:47.742703+00:00" + }, + { + "permit_id": "23afab0f-8fe9-4aa3-879f-6122517a3094", + "permit_name": "辐射安全许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:54:36.294121+00:00" + }, + { + "permit_id": "9dc9bfcc-86ce-4492-9440-675f335c9723", + "permit_name": "道路旅客运输站(场)经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:17.852644+00:00" + }, + { + "permit_id": "53ff5cc1-3437-48cb-842d-2364443782d2", + "permit_name": "道路货物运输经营许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:19.332629+00:00" + }, + { + "permit_id": "f8ed23e2-2ffe-4a24-b6cb-3d36a6a90da3", + "permit_name": "金属冶炼建设项目安全设施设计审查", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:09.165803+00:00" + }, + { + "permit_id": "5b1e7605-8e69-4729-9260-7479efb523fa", + "permit_name": "音像制作单位的变更审批,音像制作单位的设立审批", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:56:05.565007+00:00" + }, + { + "permit_id": "b7cbcbf0-5662-46bf-b853-6a8fad222805", + "permit_name": "饮用水供水单位卫生许可", + "region_id": "2c29ca08-efc6-4e2c-abc2-d73685e0bdd1", + "region_name": "市级", + "unit_name": null, + "updated_at": "2025-12-20T06:55:28.833332+00:00" + } + ], + "success": true +} +``` --- ## 6. 数据更新策略 diff --git a/lawrisk/api/v2.py b/lawrisk/api/v2.py index 3a9aa38..086fae9 100644 --- a/lawrisk/api/v2.py +++ b/lawrisk/api/v2.py @@ -10,7 +10,7 @@ from concurrent.futures import ThreadPoolExecutor from typing import Any, Dict, Iterable, Optional from lawrisk.api.auth import login_required, get_current_user, ensure_admin_access -from lawrisk.services.lawrisk_v2_service import search_v2, list_regions, suggest_related_questions +from lawrisk.services.lawrisk_v2_service import search_v2, list_regions from lawrisk.services.licensing_repo import ( list_permits_for_region, load_permits_and_risks, @@ -94,7 +94,7 @@ def lawrisk_search_v2(): result_v2 = search_v2(query, debug_flag, region_filter) # Generate recommendations based on search results - rec_questions = suggest_related_questions(query, result_v2, max(1, top_k_int)) + rec_questions = [] risk_subject = result_v2.get("risk_subject", []) if isinstance(result_v2, dict) else [] found = bool(risk_subject) @@ -141,7 +141,7 @@ def lawrisk_unbound_permits(): """Get list of permits that are not bound to any theme.""" try: permits = list_unbound_permits() - return jsonify({"success": True, "data": {"permits": permits}}) + return jsonify({"success": True, "data": permits}) except Exception as exc: print(f"lawrisk_unbound_permits error: {exc}") return jsonify({"success": False, "message": str(exc)}), 500 @@ -152,7 +152,7 @@ def lawrisk_all_themes(): """Get list of all themes.""" try: themes = list_all_themes() - return jsonify({"success": True, "data": {"themes": themes}}) + return jsonify({"success": True, "data": themes}) except Exception as exc: print(f"lawrisk_all_themes error: {exc}") return jsonify({"success": False, "message": str(exc)}), 500 @@ -1639,3 +1639,88 @@ def admin_permits_filter_options(): except Exception as exc: print(f"admin_permits_filter_options error: {exc}") return jsonify({"success": False, "message": str(exc)}), 500 + + +@v2_bp.route('/admin/approval-departments/setup', methods=['POST']) +def admin_setup_approval_departments(): + """Setup approval department mappings (admin only).""" + from lawrisk.services.licensing_repo import _lic_pg_conn, _ensure_permit_approval_departments_schema + + user, error = _admin_guard(prefer_json=True) + if error: + return error + + try: + # Common permit -> department mappings + mappings = [ + ('营业执照', '市场监管部门'), + ('食品经营许可证', '市场监管部门'), + ('药品经营许可证', '市场监管部门'), + ('医疗器械经营许可证', '市场监管部门'), + ('特种设备使用登记', '市场监管部门'), + ] + + # Ensure schema exists + _ensure_permit_approval_departments_schema() + + with _lic_pg_conn() as conn: + cur = conn.cursor() + + # Check current count + cur.execute("SELECT COUNT(*) FROM permit_approval_departments") + before_count = cur.fetchone()[0] + + inserted = 0 + updated = 0 + + for permit_name, dept_name in mappings: + # Check if exists + cur.execute(""" + SELECT id FROM permit_approval_departments + WHERE permit_name = %s + """, (permit_name,)) + + existing = cur.fetchone() + + if existing: + # Update + cur.execute(""" + UPDATE permit_approval_departments + SET department_name = %s, updated_at = now() + WHERE permit_name = %s + """, (dept_name, permit_name)) + updated += 1 + else: + # Insert + record_id = str(uuid.uuid4()) + cur.execute(""" + INSERT INTO permit_approval_departments (id, permit_name, department_name) + VALUES (%s, %s, %s) + """, (record_id, permit_name, dept_name)) + inserted += 1 + + conn.commit() + + # Get final count + cur.execute("SELECT COUNT(*) FROM permit_approval_departments") + after_count = cur.fetchone()[0] + + # Get all mappings + cur.execute("SELECT permit_name, department_name FROM permit_approval_departments ORDER BY permit_name") + all_mappings = [{"permit_name": row[0], "department_name": row[1]} for row in cur.fetchall()] + + return jsonify({ + "success": True, + "data": { + "inserted": inserted, + "updated": updated, + "before_count": before_count, + "after_count": after_count, + "mappings": all_mappings + } + }) + except Exception as exc: + print(f"admin_setup_approval_departments error: {exc}") + import traceback + traceback.print_exc() + return jsonify({"success": False, "message": str(exc)}), 500 diff --git a/lawrisk/services/licensing_repo.py b/lawrisk/services/licensing_repo.py index df0d1c5..210d0b5 100644 --- a/lawrisk/services/licensing_repo.py +++ b/lawrisk/services/licensing_repo.py @@ -65,6 +65,9 @@ _OPERATION_LOG_SCHEMA_LOCK = threading.Lock() _PERMIT_THEME_OVERRIDE_SCHEMA_READY: Optional[bool] = None _PERMIT_THEME_OVERRIDE_SCHEMA_LOCK = threading.Lock() +_PERMIT_APPROVAL_DEPARTMENTS_SCHEMA_READY: Optional[bool] = None +_PERMIT_APPROVAL_DEPARTMENTS_SCHEMA_LOCK = threading.Lock() + _IMPORT_HEADER_ALIASES: Dict[str, Set[str]] = { "permit_name": { "许可事项", @@ -2788,6 +2791,50 @@ def _ensure_permit_theme_override_schema(conn: Optional[pg.Connection] = None) - _PERMIT_THEME_OVERRIDE_SCHEMA_READY = True +def _create_permit_approval_departments_schema(conn: pg.Connection) -> None: + """Create table for mapping permits to approval departments.""" + cur = conn.cursor() + cur.execute( + """ + CREATE TABLE IF NOT EXISTS permit_approval_departments ( + id uuid PRIMARY KEY, + permit_name text NOT NULL, + department_name text NOT NULL, + created_at timestamptz NOT NULL DEFAULT now(), + updated_at timestamptz NOT NULL DEFAULT now() + ) + """ + ) + cur.execute( + """ + CREATE UNIQUE INDEX IF NOT EXISTS permit_approval_departments_name_idx + ON permit_approval_departments (permit_name) + """ + ) + + +def _ensure_permit_approval_departments_schema(conn: Optional[pg.Connection] = None) -> None: + """Ensure approval departments table exists.""" + global _PERMIT_APPROVAL_DEPARTMENTS_SCHEMA_READY + if _PERMIT_APPROVAL_DEPARTMENTS_SCHEMA_READY: + return + + with _PERMIT_APPROVAL_DEPARTMENTS_SCHEMA_LOCK: + if _PERMIT_APPROVAL_DEPARTMENTS_SCHEMA_READY: + return + if conn is not None: + original_autocommit = conn.autocommit + try: + conn.autocommit = True + _create_permit_approval_departments_schema(conn) + finally: + conn.autocommit = original_autocommit + else: + with _lic_pg_conn(autocommit=True) as ensure_conn: + _create_permit_approval_departments_schema(ensure_conn) + _PERMIT_APPROVAL_DEPARTMENTS_SCHEMA_READY = True + + def _create_operation_log_schema(conn: pg.Connection) -> None: """Create a table for auditing user operations.""" cur = conn.cursor() @@ -3614,6 +3661,12 @@ def load_permits_and_risks( _ensure_permit_file_schema() except Exception as exc: logger.warning("[PERMIT-FILES] Failed to ensure permit file schema before loading permits: %s", exc) + + try: + _ensure_permit_approval_departments_schema() + except Exception as exc: + logger.warning("[PERMIT-APPROVAL] Failed to ensure approval departments schema: %s", exc) + sql = """ SELECT rtp.theme_id, @@ -3632,11 +3685,13 @@ def load_permits_and_risks( rpd.responsible_contact, rpd.jurisdiction_scope, rpd.filler_name, - rpd.unit_name, + COALESCE(pad.department_name, rpd.unit_name) AS unit_name, rpd.source_update_date, rpd.contact_info FROM region_permit_details rpd JOIN permits p ON p.id = rpd.permit_id + LEFT JOIN permit_approval_departments pad + ON (p.name = pad.permit_name OR p.name LIKE CONCAT(pad.permit_name, '%')) LEFT JOIN region_theme_permits rtp ON rtp.region_id = rpd.region_id AND rtp.permit_id = rpd.permit_id @@ -4116,7 +4171,7 @@ def _select_permit_file_blob(conn: pg.Connection, region_id: str, permit_id: str def find_permit_contexts_by_name(permit_name: str) -> List[Dict[str, str]]: - """Return region/theme contexts for permits with an exact name match.""" + """Return region/theme contexts for permits with an exact name match or prefix match.""" if not permit_name: return [] @@ -4140,7 +4195,30 @@ def find_permit_contexts_by_name(permit_name: str) -> List[Dict[str, str]]: with _lic_pg_conn() as conn: cur = conn.cursor() cur.execute(sql, (permit_name,)) - for row in cur.fetchall(): + rows = cur.fetchall() + + # If no exact match, try prefix match (e.g. "药品经营许可" matching "药品经营许可证") + if not rows and len(permit_name) >= 2: + sql_fuzzy = """ + SELECT + rpd.region_id, + r.name AS region_name, + rtp.theme_id, + t.name AS theme_name, + p.id AS permit_id, + p.name AS permit_name + FROM region_permit_details rpd + JOIN permits p ON p.id = rpd.permit_id + JOIN regions r ON r.id = rpd.region_id + LEFT JOIN region_theme_permits rtp ON rtp.region_id = rpd.region_id AND rtp.permit_id = rpd.permit_id + LEFT JOIN themes t ON t.id = rtp.theme_id + WHERE p.name LIKE %s + ORDER BY r.name, t.name NULLS LAST + """ + cur.execute(sql_fuzzy, (permit_name + "%",)) + rows = cur.fetchall() + + for row in rows: region_id, region_name, theme_id, theme_name, permit_id, canonical_name = row rid = str(region_id) pid = str(permit_id) diff --git a/static/db_admin.html b/static/db_admin.html index cbcfc49..a25378f 100644 --- a/static/db_admin.html +++ b/static/db_admin.html @@ -2256,48 +2256,6 @@ max-height: 600px; overflow-y: auto; } - - .sample-excel-table { - width: 100%; - border-collapse: separate; - border-spacing: 0; - font-size: 12px; - color: #4a5568; - min-width: 800px; - } - - .sample-excel-table th, - .sample-excel-table td { - border-right: 1px solid #edf2f7; - border-bottom: 1px solid #edf2f7; - padding: 10px 12px; - text-align: left; - vertical-align: top; - line-height: 1.5; - } - - .sample-excel-table th { - background: #f8fafc; - font-weight: 700; - color: #2d3748; - position: sticky; - top: 0; - z-index: 10; - border-bottom: 2px solid #e2e8f0; - } - - .sample-excel-table tr:hover { - background: #f7fafc; - } - - .sample-excel-table td:first-child, - .sample-excel-table th:first-child { - border-left: 1px solid #edf2f7; - } - - .sample-excel-table tr:last-child td { - border-bottom: none; - } @@ -4391,7 +4349,10 @@ function getSampleExcelHtml() { - return `
企业开办风险提示表
许可(备案)事项名称仅销售预包装食品备案登记
许可情况
(前置事项/后置事项/备案事项)
备案事项
填表人王XX
联系方式(内部使用)833XXXXX
事项实施层级市级
单位名称佛山市市场监督管理局
表格更新日期45981
序号风险提示内容法律依据文号摘要备注
1办理仅销售预包装食品备案的范围。《中华人民共和国食品安全法》主席令第二十一号第三十五条 销售食用农产品和仅销售预包装食品的,不需要取得许可。仅销售预包装食品的,应当报所在地县级以上地方人民政府食品安全监督管理部门备案。
2销售酒类应设置不向未成年人销售酒的标志,且不得向未成年人销售酒。《中华人民共和国未成年人保护法》中华人民共和国主席令第65号第五十九条 学校、幼儿园周边不得设置烟、酒、彩票销售网点。禁止向未成年人销售烟、酒、彩票或者兑付彩票奖金。烟、酒和彩票经营者应当在显著位置设置不向未成年人销售烟、酒或者彩票的标志;对难以判明是否是未成年人的,应当要求其出示身份证件。
填表说明:1、序号一至七为内部信息,不对外显示。序号八风险提示相关内容为系统对外显示的内容。
2、风险提示内容更新需重新填写表格,本表格的内容将在系统中覆盖原有内容。
3、更新表格时,需要保留的条款,请一并填进表格内。如需删除相关条款内容,更新表格时不填在表格内即可。
4、事项实施层级分为:1.市级; 2.区级/镇街; 3.不实施。
5、同一个事项在不同行政区域实施,可以根据本辖区实际情况,填写个性化的风险提示内容。
`; + return ` +
+ 样表示例 +
`; } const nextDisabled = !state.sessionId || state.selectedSheets.size === 0 || state.uploading || state.previewLoading;