feat: enhance menu management with three-level hierarchy support, additional metadata fields, and utility scripts for data extraction

This commit is contained in:
2026-07-22 10:30:42 +07:00
parent f37be85873
commit abdf9467e6
21 changed files with 859 additions and 2348 deletions
@@ -0,0 +1,168 @@
{
"info": {
"name": "SIS Lịch Đặt Khám API (Fixed)",
"description": "Collection tự động tạo từ tài liệu hướng dẫn API lịch đặt khám của bệnh viện S.I.S Cần Thơ.",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "1. Get Token",
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"pm.globals.set(\"access_token\", jsonData.access_token);"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/x-www-form-urlencoded"
},
{
"key": "Cookie",
"value": ".AspNetCore.Culture=c%3Den%7Cuic%3Den; __tenant=3a0f747c-57b6-753b-ba21-3987e8e93b9a"
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"key": "grant_type",
"value": "client_credentials",
"type": "text"
},
{
"key": "client_id",
"value": "DigitalHealthSolutions_LabConn",
"type": "text"
},
{
"key": "client_secret",
"value": "AcEnBCaphERGOGYMaStATITEnaPETYpR",
"type": "text"
},
{
"key": "scope",
"value": "LabConn",
"type": "text"
}
]
},
"url": {
"raw": "{{base_url}}/connect/token",
"host": [
"{{base_url}}"
],
"path": [
"connect",
"token"
]
},
"description": "Lấy Access Token để chứng thực cho các API khác."
}
},
{
"name": "2. Danh sách bác sĩ có lịch làm việc",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{access_token}}",
"type": "string"
}
]
},
"method": "GET",
"header": [
{
"key": "__tenant",
"value": "3a0f747c-57b6-753b-ba21-3987e8e93b9a"
},
{
"key": "Cookie",
"value": ".AspNetCore.Culture=c%3Den%7Cuic%3Den; __tenant=3a0f747c-57b6-753b-ba21-3987e8e93b9a"
}
],
"url": {
"raw": "{{base_url}}/api/app/his/doctors/work-schedules",
"host": [
"{{base_url}}"
],
"path": [
"api",
"app",
"his",
"doctors",
"work-schedules"
]
},
"description": "Lấy danh sách các bác sĩ đang có lịch làm việc."
}
},
{
"name": "3. Lịch làm việc chi tiết bác sĩ",
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{access_token}}",
"type": "string"
}
]
},
"method": "GET",
"header": [
{
"key": "__tenant",
"value": "3a0f747c-57b6-753b-ba21-3987e8e93b9a"
},
{
"key": "Cookie",
"value": ".AspNetCore.Culture=c%3Den%7Cuic%3Den; __tenant=3a0f747c-57b6-753b-ba21-3987e8e93b9a"
}
],
"url": {
"raw": "{{base_url}}/api/app/his/doctors/:doctorCode/work-schedule-days",
"host": [
"{{base_url}}"
],
"path": [
"api",
"app",
"his",
"doctors",
":doctorCode",
"work-schedule-days"
],
"variable": [
{
"key": "doctorCode",
"value": "00492",
"description": "Mã bác sĩ (ví dụ 00492)"
}
]
},
"description": "Lấy chi tiết các ngày làm việc của một bác sĩ thông qua mã bác sĩ (DoctorCode)."
}
}
],
"variable": [
{
"key": "base_url",
"value": "https://dhs.sisvietnam.vn",
"type": "string"
}
]
}
+259
View File
@@ -0,0 +1,259 @@
{
"info": {
"_postman_id": "4c495f9e-cbb0-4bcc-9721-2c5cf9120247",
"name": "Web",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_exporter_id": "6738901"
},
"item": [
{
"name": "get token",
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();\r",
"pm.globals.set(\"access_token\", jsonData.access_token);"
],
"type": "text/javascript",
"packages": {},
"requests": {}
}
},
{
"listen": "prerequest",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {},
"requests": {}
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/x-www-form-urlencoded"
},
{
"key": "Cookie",
"value": ".AspNetCore.Culture=c%3Den%7Cuic%3Den; __tenant=3a0f747c-57b6-753b-ba21-3987e8e93b9a"
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"type": "text",
"key": "grant_type",
"value": "client_credentials"
},
{
"type": "text",
"key": "client_id",
"value": "DigitalHealthSolutions_LabConn"
},
{
"type": "text",
"key": "client_secret",
"value": "AcEnBCaphERGOGYMaStATITEnaPETYpR"
},
{
"type": "text",
"key": "scope",
"value": "LabConn"
}
]
},
"url": {
"raw": "{{url}}/connect/token",
"host": [
"{{url}}"
],
"path": [
"connect",
"token"
]
}
},
"response": []
},
{
"name": "lich lam viec chi tiet bs",
"event": [
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {},
"requests": {}
}
}
],
"protocolProfileBehavior": {
"disableBodyPruning": true
},
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGNjFGNTMzMTAyRUI4OTlFQTc2Mjk3MDQ4MUVFQTQ2QTkxODdBMTYiLCJ4NXQiOiJmMkgxTXhBdXVKbnFkaWx3U0I3cVJxa1llaFkiLCJ0eXAiOiJhdCtqd3QifQ.eyJpc3MiOiJodHRwczovL2Rocy5zaXN2aWV0bmFtLnZuLyIsImV4cCI6MTc4NDY5MTk1MSwiaWF0IjoxNzg0NjA1NTUxLCJhdWQiOiJEaWdpdGFsSGVhbHRoU29sdXRpb25zIiwic2NvcGUiOiJMYWJDb25uIiwianRpIjoiNWJkNTlhY2ItZjM5Yy00NGZhLTgyNmMtYTM4NjFkNDNmZGIxIiwib2lfcHJzdCI6IkRpZ2l0YWxIZWFsdGhTb2x1dGlvbnNfTGFiQ29ubiIsImNsaWVudF9pZCI6IkRpZ2l0YWxIZWFsdGhTb2x1dGlvbnNfTGFiQ29ubiIsIm9pX3Rrbl9pZCI6IjNhMjI5NGY0LTg0NGItMjJkZC05ZDNjLTQ4MjU2MmMyNjQxMCJ9.XwlnWLRrvuzr43CZjtOy6x9uIQqQZscjptTojX_ZlKA7uAuin6hn6ftgXyE8salvDmrETuS-1iWBiIkPaG2HAxjnf1rDtjw0MCfZBcqJC8Q1FOcskQhZn7GUUirVtEvv26t7LTHyCfjApwNtHnHmsfeIhYPbMb8A4PUikMABqd6qwgk8MLSA25endvloNmPUdLmov7xrPJIlePtYJorf0O-bi87WTMANDvMg6xRIY2CTPuDlzRTnsA5N4nDKcUzYHc75gwkC7U_5FLMhPulHB4ep8eEzUlU9TpageslzidSytBKwxGL_xM5Ts3UrPWKWt8dm5qCmw0B2Lnl0AvNttw",
"type": "string"
}
]
},
"method": "GET",
"header": [
{
"key": "__tenant",
"value": "3a0f747c-57b6-753b-ba21-3987e8e93b9a"
},
{
"key": "Cookie",
"value": ".AspNetCore.Culture=c%3Den%7Cuic%3Den; __tenant=3a0f747c-57b6-753b-ba21-3987e8e93b9a"
},
{
"key": "Authorization",
"value": "Brear",
"type": "text",
"disabled": true
}
],
"body": {
"mode": "raw",
"raw": "",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/api/app/his/doctors/:doctorCode/work-schedule-days",
"host": [
"{{url}}"
],
"path": [
"api",
"app",
"his",
"doctors",
":doctorCode",
"work-schedule-days"
],
"variable": [
{
"key": "doctorCode",
"value": "00492"
}
]
}
},
"response": []
},
{
"name": "get ds ich làm bs",
"event": [
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {},
"requests": {}
}
}
],
"protocolProfileBehavior": {
"disableBodyPruning": true
},
"request": {
"auth": {
"type": "noauth"
},
"method": "GET",
"header": [
{
"key": "__tenant",
"value": "3a0f747c-57b6-753b-ba21-3987e8e93b9a"
},
{
"key": "Cookie",
"value": ".AspNetCore.Culture=c%3Den%7Cuic%3Den; __tenant=3a0f747c-57b6-753b-ba21-3987e8e93b9a",
"disabled": true
},
{
"key": "Authorization",
"value": "Bearer {{access_token}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/api/app/his/doctors/work-schedules",
"host": [
"{{url}}"
],
"path": [
"api",
"app",
"his",
"doctors",
"work-schedules"
]
}
},
"response": []
}
],
"event": [
{
"listen": "prerequest",
"script": {
"type": "text/javascript",
"packages": {},
"requests": {},
"exec": [
""
]
}
},
{
"listen": "test",
"script": {
"type": "text/javascript",
"packages": {},
"requests": {},
"exec": [
""
]
}
}
],
"variable": [
{
"key": "url",
"value": ""
}
]
}
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
[]
+15
View File
@@ -0,0 +1,15 @@
import sys
from pypdf import PdfReader
pdf_path = sys.argv[1]
output_path = sys.argv[2]
reader = PdfReader(pdf_path)
text = ""
for i, page in enumerate(reader.pages):
text += f"\n--- Page {i + 1} ---\n"
text += page.extract_text()
with open(output_path, "w", encoding="utf-8") as f:
f.write(text)
print(f"Extracted {len(reader.pages)} pages to {output_path}")
+68
View File
@@ -0,0 +1,68 @@
--- Page 1 ---
Api l ị ch đ ặ t khám - web
1. Get Token
Link:
Ph ươ ng th ứ c: POST
../connect/token
Header
Body x-www-form-urlencoded
Response
https://dhs.sisvietnam.vn
__tenant 3a0f747c-57b6-753b-ba21-
3987e8e93b9a
Content-Type application/json
Key Values
grant_type x client_credentials
client_id x DigitalHealthSolutions_LabConn
client_secret x AcEnBCaphERGOGYMaStATITEnaP
ETYpR
scope x LabConn
Thu ộ c tính B ắ t bu ộ c value
1{2 "access_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGNjFGNTMzMTAyRUI4OTlFQTc2Mjk3MDQ4MUVFQTQ2QTkxODdBMTYiLCJ4NXQiOiJmMkgxTXhBdXVKbnFkaWx3U0I3cVJxa1llaFkiLCJ0eXAiOiJhdCtqd3QifQ.eyJpc3MiOiJodHRwczovL2Rocy5zaXN2aWV0bmFtLnZuLyIsImV4cCI6MTc4NDY5MjA1OCwiaWF0IjoxNzg0NjA1NjU4LCJhdWQiOiJEaWdpdGFsSGVhbHRoU29sdXRpb25zIiwic2NvcGUiOiJMYWJDb25uIiwianRpIjoiOWVlZDNhNzItZTcxZC00MWM4LWJhYTgtMzVlMTY5YmEwMzE5Iiwib2lfcHJzdCI6IkRpZ2l0YWxIZWFsdGhTb2x1dGlvbnNfTGFiQ29ubiIsImNsaWVudF9pZCI6IkRpZ2l0YWxIZWFsdGhTb2x1dGlvbnNfTGFiQ29ubiIsIm9pX3Rrbl9pZCI6IjNhMjI5NGY2LTI2NjMtNTQ0OC1iMjU4LWI5Yjk0YzYxYWQ2ZSJ9.R7GQQxWU7MqKnQMhaZPtIMAxwjkTklmPgoFF8aisAZTPq4z7TnMAL36tlKvLeazIKfE0KIVtdfi9AqXeIwXt6co4_-5i9MJ03QJvJVdqul9nGiXaRtuSUagPogclkZ9wZeZU4IHxSFS7WCKuuX-Rv4EjNP2H-Igr5ss5cqfw7mIgQLknIlQ7jQolxqeO9IJgDBH90lxnpaC0S8ZTg3S_6cv2kPG8s8FdqgodOJnFG-d7YFlS4WR9O_z0uRnBS9cIhCRaxoo1GqtzvLVPjeyJecy48DnrNsqYEwsNQx4hWTiHC_9rFlfKCIuWQnv7wKWkkNt-ZsUABkk5PZrtHeZVeg",
--- Page 2 ---
2. Danh sách bác s ĩ có l ị ch làm vi ệ c
Ph ươ ng th ứ c: GET
…/api/app/his/doctors/work-schedules
Header
Response
3 "token_type":"Bearer",4 "expires_in":863985}
__tenant 3a0f747c-57b6-753b-ba21-3987e8e93b9a
Authorization Bearer + Token
Key Vaules
1{2 "data":{3 "fromDate":"2026-07-15",4 "toDate":"2026-07-29",5 "doctors":[6 {7 "doctorId":"feaf54ac-e8c2-42a5-bb3b-65e9ba7fc2a7",8 "doctorCode":"00001",9 "fullName":"TS. BS. TR Ầ N CHÍ C Ư Ờ NG",10 "birthYear":null,11 "gender":null,12 "practicingCertificate":"001257/BYT-CCHN",13 "title":"TS. BS"14 }15 ]16 },17 "success":true,18 "statusCode":200,19 "timestamp":"2026-07-15T10:14:59.0784+07:00"20}
fromDate date Làm vi ệ c t ừ ngày
toDate date Làm vi ệ c đ ế n ngày
doctorId GUID Id bác s ĩ
doctorCode string Mã bác s ĩ
fullName string Tên bác s ĩ
birthYear string Gi ớ i tính
N ộ i dung Ki ể u d ữ li ệ u Mô t ả
--- Page 3 ---
3. L ị ch làm vi ệ c chi ti ế t bác s ĩ
Ph ươ ng th ứ c: GET
…/api/app/his/doctors/{DoctorCode}/work-schedule-days
Header
Response
gender string N ă m sinh
practicingCertificat
e
string Ch ứ ng ch ỉ hành ngh ề
title string Ch ứ c danh
__tenant 3a0f747c-57b6-753b-ba21-3987e8e93b9a
Authorization Bearer + Token
Key Vaules
1{2 "data":{3 "doctorId":"feaf54ac-e8c2-42a5-bb3b-65e9ba7fc2a7",4 "doctorCode":"00001",5 "fromDate":"2026-07-15",6 "toDate":"2026-07-29",7 "days":[8 {9 "date":"2026-07-15",10 "dayOfWeek":411 },12 {13 "date":"2026-07-20",14 "dayOfWeek":215 },16 {17 "date":"2026-07-27",18 "dayOfWeek":219 },20 {21 "date":"2026-07-29",22 "dayOfWeek":423 }24 ]25 },26 "success":true,27 "statusCode":200,28 "timestamp":"2026-07-15T08:59:26.2920087+07:00"29}
N ộ i dung Ki ể u d ữ li ệ uMô t ả
--- Page 4 ---
doctorId GUID ID bác s ĩ
doctorCode string Mã bác s ĩ
fromDate string Làm vi ệ c t ừ ngày
toDate string Làm vi ệ c đ ế n ngày
date string Ngày làm vi ệ c
dayOfWeek int Th ứ :
1: th ứ 2
2: th ứ 3
3: th ứ 4
4: th ứ 5
5: th ứ 6