HH/docs/PX360_External_API.postman_collection.json
ismail 7369d08012
All checks were successful
Build and Push Docker Image / build (push) Successful in 4m14s
feat: unified reference numbers + feedback modules QA audit
Reference numbers (unified scheme PREFIX-YYYYMM-HOSP-NNNN, e.g. CMP-202606-HHN-0001):
- new ReferenceSequence model + generate_reference() helper (apps/core)
- Complaint/Inquiry/Observation/Appreciation/Suggestion emit unified refs via save()
- prefix-based auto-routing in public track API (CMP/INQ/OBS trackable; APR/SGT internal-only)
- removed legacy CMP-/INQ- generators in ui_views, integrations, px_sources
- migrations: core.0003_referencesequence, appreciation.0006, feedback.0008, observations.0012
- unit tests (format, sanitization, monthly reset, 40-thread concurrency)

QA audit:
- isolated E2E hospital sandbox mirroring HH-N + 10 role users (create_e2e_isolated_env)
- feedback-modules-audit.spec.ts + audit helper (headed, run-to-completion)
- reports/feedback-modules-qa-report.md

Also bundles accumulated in-progress work across complaints, observations,
organizations, templates, and other modules.
2026-06-14 14:29:23 +03:00

799 lines
22 KiB
JSON

{
"info": {
"_postman_id": "px360-external-api-collection",
"name": "PX360 External API",
"description": "PX360 Patient Experience Platform - External API endpoints.\n\nBase URL: `/api/v1/external/`\n\nAll requests require an `X-API-Key` header. Set the `api_key` variable in your environment.",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Lookup",
"item": [
{
"name": "List Hospitals",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/hospitals/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "hospitals", ""]
}
},
"response": [
{
"name": "Success",
"originalRequest": {
"method": "GET",
"url": {
"raw": "{{base_url}}/api/v1/external/hospitals/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "hospitals", ""]
}
},
"status": "OK",
"code": 200,
"body": "{\n \"count\": 3,\n \"results\": [\n { \"id\": \"uuid\", \"name\": \"Al Nuzha\", \"code\": \"HH-N\" },\n { \"id\": \"uuid\", \"name\": \"Al Olya\", \"code\": \"HH-A\" },\n { \"id\": \"uuid\", \"name\": \"Al Suwaidi\", \"code\": \"HH-S\" }\n ]\n}"
}
]
},
{
"name": "List Location Types",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/location-types/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "location-types", ""]
}
},
"response": [
{
"name": "Success",
"originalRequest": {
"method": "GET",
"url": {
"raw": "{{base_url}}/api/v1/external/location-types/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "location-types", ""]
}
},
"status": "OK",
"code": 200,
"body": "{\n \"count\": 4,\n \"results\": [\n { \"value\": \"OP\", \"label\": \"Outpatient\", \"label_ar\": \"خارجي\" },\n { \"value\": \"IP\", \"label\": \"Inpatient\", \"label_ar\": \"تنويم\" },\n { \"value\": \"ER\", \"label\": \"Emergency\", \"label_ar\": \"طوارئ\" },\n { \"value\": \"GENERAL\", \"label\": \"General\", \"label_ar\": \"عام\" }\n ]\n}"
}
]
},
{
"name": "List Areas",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/areas/?hospital=Al Nuzha",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "areas", ""],
"query": [
{
"key": "hospital",
"value": "Al Nuzha"
},
{
"key": "location_type",
"value": "OP",
"disabled": true
}
]
}
},
"response": [
{
"name": "Success",
"originalRequest": {
"method": "GET",
"url": {
"raw": "{{base_url}}/api/v1/external/areas/?hospital=Al Nuzha",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "areas", ""],
"query": [
{ "key": "hospital", "value": "Al Nuzha" }
]
}
},
"status": "OK",
"code": 200,
"body": "{\n \"count\": 27,\n \"results\": [\n { \"id\": \"uuid\", \"name\": \"Emergency\", \"name_ar\": \"\", \"code\": \"emergency\" }\n ]\n}"
}
]
},
{
"name": "List Departments",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/departments/?hospital=Al Nuzha",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "departments", ""],
"query": [
{
"key": "hospital",
"value": "Al Nuzha"
}
]
}
},
"response": [
{
"name": "Success",
"originalRequest": {
"method": "GET",
"url": {
"raw": "{{base_url}}/api/v1/external/departments/?hospital=Al Nuzha",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "departments", ""],
"query": [
{ "key": "hospital", "value": "Al Nuzha" }
]
}
},
"status": "OK",
"code": 200,
"body": "{\n \"count\": 37,\n \"results\": [\n { \"id\": \"uuid\", \"name\": \"Critical Care Department\", \"name_en\": \"Critical Care Department\", \"name_ar\": \"\", \"code\": \"hh_n_critical_care_department\" }\n ]\n}"
}
]
},
{
"name": "List Sections",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/sections/?hospital=Al Nuzha&department=Critical Care Department",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "sections", ""],
"query": [
{
"key": "hospital",
"value": "Al Nuzha"
},
{
"key": "department",
"value": "Critical Care Department"
}
]
}
},
"response": [
{
"name": "Success",
"originalRequest": {
"method": "GET",
"url": {
"raw": "{{base_url}}/api/v1/external/sections/?hospital=Al Nuzha&department=Critical Care Department",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "sections", ""],
"query": [
{ "key": "hospital", "value": "Al Nuzha" },
{ "key": "department", "value": "Critical Care Department" }
]
}
},
"status": "OK",
"code": 200,
"body": "{\n \"count\": 3,\n \"results\": [\n { \"id\": \"uuid\", \"name\": \"ICU\", \"name_ar\": \"\", \"code\": \"hh_n_critical_care_department__icu\" }\n ]\n}"
}
]
}
]
},
{
"name": "Complaints",
"item": [
{
"name": "Create Complaint",
"request": {
"method": "POST",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
},
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"hospital\": \"Al Nuzha\",\n \"title\": \"Long wait time in ER\",\n \"description\": \"I waited 3 hours in the emergency room without being seen.\",\n \"contact_name\": \"John Doe\",\n \"contact_phone\": \"+966501234567\",\n \"contact_email\": \"john@example.com\",\n \"location_type\": \"ER\",\n \"area\": \"Emergency\",\n \"department\": \"Critical Care Department\",\n \"section\": \"ICU\",\n \"relation_to_patient\": \"patient\",\n \"patient_name\": \"John Doe\",\n \"incident_date\": \"2026-06-10\",\n \"expected_result\": \"Faster service in ER\"\n}"
},
"url": {
"raw": "{{base_url}}/api/v1/external/complaints/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "complaints", ""]
}
},
"response": [
{
"name": "Created",
"originalRequest": {
"method": "POST",
"url": {
"raw": "{{base_url}}/api/v1/external/complaints/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "complaints", ""]
}
},
"status": "Created",
"code": 201,
"body": "{\n \"success\": true,\n \"reference_number\": \"CMP-20260609-167152\",\n \"status\": \"open\"\n}"
}
]
},
{
"name": "List Complaints",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/complaints/list/?page=1&page_size=20",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "complaints", "list", ""],
"query": [
{
"key": "page",
"value": "1"
},
{
"key": "page_size",
"value": "20"
},
{
"key": "created_from",
"value": "2026-01-01",
"disabled": true
},
{
"key": "created_to",
"value": "2026-06-30",
"disabled": true
},
{
"key": "status",
"value": "open",
"disabled": true
}
]
}
},
"response": []
},
{
"name": "Get Complaint",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/complaints/CMP-20260609-167152/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "complaints", "CMP-20260609-167152", ""]
}
},
"response": [
{
"name": "Success",
"status": "OK",
"code": 200,
"body": "{\n \"id\": \"uuid\",\n \"reference_number\": \"CMP-20260609-167152\",\n \"title\": \"Long wait time in ER\",\n \"description\": \"I waited 3 hours...\",\n \"status\": \"open\",\n \"severity\": \"medium\",\n \"priority\": \"medium\",\n \"contact_name\": \"John Doe\",\n \"contact_phone\": \"+966501234567\",\n \"hospital_name\": \"Al Nuzha\",\n \"created_at\": \"2026-06-09T13:38:03.808618+03:00\",\n \"updated_at\": \"2026-06-09T13:38:03.808683+03:00\"\n}"
}
]
},
{
"name": "Set Satisfaction",
"request": {
"method": "PATCH",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
},
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"satisfaction\": \"satisfied\"\n}"
},
"url": {
"raw": "{{base_url}}/api/v1/external/complaints/CMP-20260609-167152/satisfaction/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "complaints", "CMP-20260609-167152", "satisfaction", ""]
}
},
"response": [
{
"name": "Success",
"status": "OK",
"code": 200,
"body": "{\n \"success\": true,\n \"reference_number\": \"CMP-20260609-167152\",\n \"satisfaction\": \"satisfied\"\n}"
}
]
}
]
},
{
"name": "Inquiries",
"item": [
{
"name": "Create Inquiry",
"request": {
"method": "POST",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
},
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"hospital\": \"Al Nuzha\",\n \"subject\": \"Appointment rescheduling\",\n \"message\": \"I need to reschedule my cardiology appointment.\",\n \"contact_name\": \"Jane Smith\",\n \"contact_phone\": \"+966509876543\",\n \"contact_email\": \"jane@example.com\",\n \"category\": \"appointment\",\n \"location_type\": \"OP\",\n \"department\": \"Cardiology\"\n}"
},
"url": {
"raw": "{{base_url}}/api/v1/external/inquiries/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "inquiries", ""]
}
},
"response": [
{
"name": "Created",
"status": "Created",
"code": 201,
"body": "{\n \"success\": true,\n \"reference_number\": \"INQ-20260609-124293\",\n \"status\": \"open\"\n}"
}
]
},
{
"name": "List Inquiries",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/inquiries/list/?page=1&page_size=20",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "inquiries", "list", ""],
"query": [
{
"key": "page",
"value": "1"
},
{
"key": "page_size",
"value": "20"
}
]
}
},
"response": []
},
{
"name": "Get Inquiry",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/inquiries/INQ-20260609-124293/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "inquiries", "INQ-20260609-124293", ""]
}
},
"response": []
}
]
},
{
"name": "Observations",
"item": [
{
"name": "Create Observation",
"request": {
"method": "POST",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
},
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"hospital\": \"Al Nuzha\",\n \"description\": \"Wet floor near the main entrance, no warning sign posted.\",\n \"title\": \"Wet floor hazard\",\n \"severity\": \"medium\",\n \"location_text\": \"Main entrance lobby\",\n \"contact_name\": \"Anonymous Reporter\",\n \"contact_phone\": \"+966501112233\"\n}"
},
"url": {
"raw": "{{base_url}}/api/v1/external/observations/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "observations", ""]
}
},
"response": [
{
"name": "Created",
"status": "Created",
"code": 201,
"body": "{\n \"success\": true,\n \"reference_number\": \"OBS-O8TCIC\",\n \"status\": \"new\"\n}"
}
]
},
{
"name": "List Observations",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/observations/list/?page=1&page_size=20",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "observations", "list", ""],
"query": [
{
"key": "page",
"value": "1"
},
{
"key": "page_size",
"value": "20"
}
]
}
},
"response": []
},
{
"name": "Get Observation",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/observations/OBS-O8TCIC/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "observations", "OBS-O8TCIC", ""]
}
},
"response": []
}
]
},
{
"name": "Appreciations",
"item": [
{
"name": "Create Appreciation",
"request": {
"method": "POST",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
},
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"hospital\": \"Al Nuzha\",\n \"message\": \"Dr. Ahmed was incredibly kind and thorough during my visit.\",\n \"contact_name\": \"Sara Ali\",\n \"contact_phone\": \"+966503334455\"\n}"
},
"url": {
"raw": "{{base_url}}/api/v1/external/appreciations/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "appreciations", ""]
}
},
"response": [
{
"name": "Created",
"status": "Created",
"code": 201,
"body": "{\n \"success\": true,\n \"reference_number\": \"APR-20260609-239270\",\n \"status\": \"draft\"\n}"
}
]
},
{
"name": "List Appreciations",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/appreciations/list/?page=1&page_size=20",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "appreciations", "list", ""],
"query": [
{
"key": "page",
"value": "1"
},
{
"key": "page_size",
"value": "20"
}
]
}
},
"response": []
},
{
"name": "Get Appreciation",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/appreciations/<uuid>/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "appreciations", "<uuid>", ""]
}
},
"response": []
}
]
},
{
"name": "Suggestions",
"item": [
{
"name": "Create Suggestion",
"request": {
"method": "POST",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
},
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"hospital\": \"Al Nuzha\",\n \"message\": \"Please implement a digital queue management system to reduce wait times.\",\n \"contact_name\": \"Suggestor\",\n \"contact_phone\": \"+966504445566\",\n \"title\": \"Digital queue system\",\n \"category\": \"technology\",\n \"rating\": 4\n}"
},
"url": {
"raw": "{{base_url}}/api/v1/external/suggestions/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "suggestions", ""]
}
},
"response": [
{
"name": "Created",
"status": "Created",
"code": 201,
"body": "{\n \"success\": true,\n \"reference_number\": \"SG-20260609-316316\",\n \"status\": \"submitted\"\n}"
}
]
},
{
"name": "List Suggestions",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/suggestions/list/?page=1&page_size=20",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "suggestions", "list", ""],
"query": [
{
"key": "page",
"value": "1"
},
{
"key": "page_size",
"value": "20"
}
]
}
},
"response": []
},
{
"name": "Get Suggestion",
"request": {
"method": "GET",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
}
],
"url": {
"raw": "{{base_url}}/api/v1/external/suggestions/<uuid>/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "suggestions", "<uuid>", ""]
}
},
"response": []
}
]
},
{
"name": "Doctor Ratings",
"item": [
{
"name": "Submit Doctor Rating",
"request": {
"method": "POST",
"header": [
{
"key": "X-API-Key",
"value": "{{api_key}}",
"type": "text"
},
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"hospital_id\": 1,\n \"doctor_id\": \"10738\",\n \"doctor_name\": \"Dr. Omaymah Yaqoub\",\n \"rating\": 4,\n \"feedback\": \"Great doctor, very caring and attentive.\",\n \"rating_date\": \"2026-06-10\",\n \"patient_uhid\": \"UHID12345\",\n \"patient_name\": \"Ahmed Ali\",\n \"patient_type\": \"OP\",\n \"department_name\": \"Internal Medicine\"\n}"
},
"url": {
"raw": "{{base_url}}/api/v1/external/doctor-ratings/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "doctor-ratings", ""]
}
},
"response": [
{
"name": "Created",
"originalRequest": {
"method": "POST",
"url": {
"raw": "{{base_url}}/api/v1/external/doctor-ratings/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "doctor-ratings", ""]
}
},
"status": "Created",
"code": 201,
"body": "{\n \"success\": true,\n \"rating_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"staff_id\": \"f1e2d3c4-b5a6-7890-abcd-ef1234567890\",\n \"doctor_name\": \"OMAYMAH YAQOUB ELAMEIAN\",\n \"rating\": 4\n}"
},
{
"name": "Doctor Not Found",
"originalRequest": {
"method": "POST",
"url": {
"raw": "{{base_url}}/api/v1/external/doctor-ratings/",
"host": ["{{base_url}}"],
"path": ["api", "v1", "external", "doctor-ratings", ""]
}
},
"status": "Bad Request",
"code": 400,
"body": "{\n \"doctor_id\": [\n \"Doctor with employee ID '99999' not found at this hospital.\"\n ]\n}"
}
]
}
]
}
],
"variable": [
{
"key": "base_url",
"value": "http://localhost:8000"
},
{
"key": "api_key",
"value": "your-api-key-here"
}
]
}