- Add patients API client with CRUD operations - Create patient list page with search and pagination - Implement multi-step patient form (4 steps): 1. Basic Info (PatientID, Name, Sex, Birthdate, etc.) 2. Address (Street, ZIP, Province/City dropdowns) 3. Contact & ID (Phone, Email, ID documents) 4. Additional (Demographics, Death Indicator, Comments) - Add province/city cascading dropdowns - Integrate ValueSets for dropdown options - Update implementation plan
34 KiB
CLQMS Frontend Implementation Plan
Project Overview
CLQMS (Clinical Laboratory Quality Management System) frontend built with SvelteKit using the KISS (Keep It Simple) principle.
Architecture Decisions (KISS Principles)
- No TypeScript - Plain JavaScript to keep it simple
- Tailwind CSS & DaisyUI - Utility classes, minimal custom CSS
- Simple Fetch API - Manual wrapper functions, no codegen
- SvelteKit File-based Routing - Standard patterns
- Server-side auth checking - SvelteKit hooks for session validation
Project Structure\n\n\nsrc/\n├── lib/\n│ ├── api/ # API service functions\n│ │ ├── client.js # Base fetch wrapper with auth\n│ │ ├── auth.js # Auth endpoints\n│ │ ├── valuesets.js # ValueSet endpoints\n│ │ ├── locations.js # Location endpoints\n│ │ ├── contacts.js # Contact endpoints\n│ │ ├── specialties.js # Specialty endpoints\n│ │ └── ... # Other endpoint modules\n│ ├── components/ # Reusable Svelte components\n│ │ ├── DataTable.svelte\n│ │ ├── Modal.svelte\n│ │ ├── SelectDropdown.svelte\n│ │ ├── Sidebar.svelte\n│ │ └── ToastContainer.svelte\n│ ├── stores/ # Svelte stores\n│ │ ├── auth.js # Auth state\n│ │ └── valuesets.js # Cached lookup values\n│ └── utils/ # Utility functions\n│ └── toast.js # Toast notifications\n├── routes/\n│ ├── +layout.svelte # Root layout with nav\n│ ├── +page.svelte # Redirect to login\n│ ├── login/\n│ │ └── +page.svelte\n│ └── (app)/ # Group: protected routes\n│ ├── +layout.svelte # Auth check with sidebar\n│ ├── dashboard/\n│ │ └── +page.svelte\n│ └── master-data/\n│ ├── +page.svelte\n│ ├── locations/\n│ ├── contacts/\n│ ├── specialties/\n│ └── valuesets/\n├── app.css # Global styles with Tailwind\n└── app.html # HTML template\n
Implementation Phases
Phase 0: Foundation ✅ COMPLETED
Priority: High | Time Estimate: 1-2 hours | Status: Done
- Initialize SvelteKit project with Tailwind CSS
- Configure API base URL and environment variables
- Create base API client with JWT token handling
- Implement login/logout flow
- Create root layout with navigation
- Set up protected route group with auth checks
- Create dashboard homepage
Key Files:
src/lib/api/client.js- Base fetch wrappersrc/lib/api/auth.js- Auth endpointssrc/lib/stores/auth.js- Auth state managementsrc/routes/+layout.svelte- Root layoutsrc/routes/(app)/+layout.svelte- Protected layoutsrc/routes/login/+page.svelte- Login page
Phase 1: Foundation Data ✅ COMPLETED
Priority: High | Time Estimate: 4-6 hours | Status: Done
Why First: These are prerequisites for all other modules. ValueSets provide dropdown options; Master Data provides reference entities.
1a. System ValueSets Module (Library) ✅ COMPLETED
System ValueSets are pre-defined lookup values used throughout the application (gender, marital status, specimen types, etc.). These are read-only libraries fetched from JSON files and cached.
- ValueSet browser page (view system value sets by key)
- ValueSet items viewer (read-only)
- Cache frequently used value sets in stores
- SelectDropdown component using cached value sets
- Refresh ValueSet cache
API Endpoints (Library/System ValueSets):
GET /api/valueset- List all library value sets with item countsGET /api/valueset/{key}- Get library value set by key (e.g., 'marital_status', 'sex')POST /api/valueset/refresh- Refresh library ValueSet cache from JSON files
1b. Master Data - Locations & Contacts ✅ COMPLETED
- Locations list page with search (supports LocCode, LocName filters)
- Locations create/edit form
- Contacts (Physicians) list page
- Contacts create/edit form
API Endpoints:
Locations:
GET /api/location- List locations (query: LocCode, LocName)POST /api/location- Create location (required: LocCode, LocFull)PATCH /api/location- Update location (required: LocCode, LocFull)DELETE /api/location- Delete location (body: { LocationID })GET /api/location/{id}- Get location details
Location Schema:
LocationID- Primary key (auto-generated)SiteID- Reference to siteLocCode- Location code, max 6 chars (required)Parent- Parent location ID (for hierarchical locations)LocFull- Full location name, max 255 chars (required)Description- Description, max 255 charsLocType- Location type (e.g., ROOM, WARD, BUILDING)CreateDate,EndDate- Timestamps
Contacts:
GET /api/contact- List contactsPOST /api/contact- Create contact (required: NameFirst)PATCH /api/contact- Update contactDELETE /api/contact- Delete contactGET /api/contact/{id}- Get contact details
Contact Schema:
ContactID- Primary key (auto-generated)NameFirst- First name (required)NameLast- Last nameTitle- Title (e.g., Dr, Mr, Mrs)Initial- Middle initialBirthdate- Date of birth (ISO 8601)EmailAddress1,EmailAddress2- Email addressesPhone- Primary phoneMobilePhone1,MobilePhone2- Mobile numbersSpecialty- Medical specialty codeSubSpecialty- Sub-specialty codeCreateDate,EndDate- Timestamps
1d. Master Data - Supporting Entities ✅ COMPLETED
- Occupations management
- Medical Specialties management
- Counters management (for ID generation)
API Endpoints:
Occupations:
GET /api/occupation- List occupationsPOST /api/occupation- Create occupation (required: OccCode, OccText)PATCH /api/occupation- Update occupation (required: OccCode, OccText)GET /api/occupation/{id}- Get occupation details
Occupation Schema:
OccupationID- Primary key (auto-generated)OccCode- Occupation code (required)OccText- Occupation name/text (required)Description- Additional descriptionCreateDate- Creation timestamp
Medical Specialties:
GET /api/medicalspecialty- List specialtiesPOST /api/medicalspecialty- Create specialty (required: SpecialtyText)PATCH /api/medicalspecialty- Update specialty (required: SpecialtyText)GET /api/medicalspecialty/{id}- Get specialty details
Medical Specialty Schema:
SpecialtyID- Primary key (auto-generated)SpecialtyText- Specialty name/text (required)Parent- Parent specialty ID (for hierarchical structure)Title- Title/abbreviationCreateDate,EndDate- Timestamps
Counters:
GET /api/counter- List countersPOST /api/counter- Create counterPATCH /api/counter- Update counterDELETE /api/counter- Delete counter (body: { CounterID })GET /api/counter/{id}- Get counter details
Counter Schema:
CounterID- Primary key (auto-generated)CounterDesc- Counter description/nameCounterValue- Current counter valueCounterStart- Starting valueCounterEnd- Ending value (for auto-reset)CounterReset- Reset pattern (D=Daily, M=Monthly, Y=Yearly)
1e. Master Data - Geography ✅ COMPLETED
- Geographical areas list
- Provinces list (read-only dropdown)
- Cities list with province filter
API Endpoints:
GET /api/areageo- List all geographical areasGET /api/areageo/provinces- List provincesGET /api/areageo/cities?province_id={id}- List cities (with province filter)
Notes:
- Geography endpoints are read-only (no POST/PATCH/DELETE)
- Used for patient address province/city selection
- Returns hierarchical location data
Phase 2: Patient Management\nPriority: High | Time Estimate: 3-4 hours\n\nDependencies: Master Data (locations, contacts, occupations, provinces/cities)\n\n#### 2a. Patient CRUD ✅ COMPLETED\n- [x] Patients list page with pagination and search\n- [x] Patient create form with validation (multi-step)\n- [x] Patient edit form (multi-step modal)\n- [x] Patient detail view (via edit modal)\n- [x] Patient delete with confirmation\n\nAPI Endpoints:\n- GET /api/patient - List patients (query: page, perPage, InternalPID, PatientID, Name, Birthdate)\n- POST /api/patient - Create patient\n- PATCH /api/patient - Update patient\n- DELETE /api/patient - Delete patient (soft delete, body: { InternalPID })\n- GET /api/patient/{id} - Get patient by ID\n- GET /api/patient/check - Check if patient exists (query: PatientID, EmailAddress1)
2b. Advanced Patient Features
- Patient identifier management (KTP, PASS, SSN, etc.)
- Patient linking (family relationships)
- Custodian/guardian assignment
- Patient address management
Fields to Implement:
- PatientID, AlternatePID
- Prefix, NameFirst, NameMiddle, NameLast, NameMaiden, Suffix
- Sex, Birthdate, PlaceOfBirth, Citizenship
- Address fields (Street_1/2/3, ZIP, Province, City, Country)
- Contact (Phone, MobilePhone, EmailAddress1/2)
- Identifiers (PatIdt - type and number)
- Demographics (Race, MaritalStatus, Religion, Ethnic)
- Linked patients (LinkTo)
- Custodian
- DeathIndicator, TimeOfDeath
- Comments (PatCom)
Phase 3: Patient Visits
Priority: High | Time Estimate: 2-3 hours
Dependencies: Patients, Master Data (locations, contacts)
- Visits list page with filters
- Create visit form
- Edit visit form
- View visits by patient
- ADT workflow (Admit/Discharge/Transfer)
API Endpoints:
GET /api/patvisit- List visitsPOST /api/patvisit- Create visitPATCH /api/patvisit- Update visitDELETE /api/patvisit- Delete visitGET /api/patvisit/{id}- Get visit by IDGET /api/patvisit/patient/{patientId}- Get visits by patientPOST /api/patvisitadt- Create ADT visitPATCH /api/patvisitadt- Update ADT visit
Fields:
- VisitID, PatientID, VisitDate, VisitType
- SiteID, LocationID, DepartmentID
- AttendingPhysician, ReferringPhysician
Phase 4: Specimen Management
Priority: Medium | Time Estimate: 2-3 hours
Dependencies: ValueSets (specimen types, collection methods, statuses)
- Specimens list page
- Specimen create/edit forms
- Container definitions management
- Specimen preparation methods
- Specimen statuses
- Collection methods
- Samples list with status filtering
API Endpoints:
GET /api/specimen- List specimensPOST /api/specimen- Create specimenPATCH /api/specimen- Update specimenGET /api/specimen/{id}- Get specimen detailsGET /api/specimen/container- List containersPOST /api/specimen/container- Create containerPATCH /api/specimen/container- Update containerGET /api/specimen/container/{id}- Get container detailsGET /api/specimen/prep- List preparationsPOST /api/specimen/prep- Create preparationPATCH /api/specimen/prep- Update preparationGET /api/specimen/prep/{id}- Get preparation detailsGET /api/specimen/status- List statusesPOST /api/specimen/status- Create statusPATCH /api/specimen/status- Update statusGET /api/specimen/status/{id}- Get status detailsGET /api/specimen/collection- List collection methodsPOST /api/specimen/collection- Create collection methodPATCH /api/specimen/collection- Update collection methodGET /api/specimen/collection/{id}- Get collection method detailsGET /api/sample- Get samples (with status filter)
Phase 5: Test Catalog\nPriority: Medium | Time Estimate: 2-3 hours\n\nDependencies: Organization (disciplines, departments), ValueSets\n\n- [ ] Test definitions list with filtering\n- [ ] Create/edit test definitions\n- [ ] Test mapping management (host/client codes)\n\nAPI Endpoints:\n- GET /api/tests - List tests\n- POST /api/tests - Create test\n- PATCH /api/tests - Update test\n- GET /api/tests/{id} - Get test details\n\nQuery Parameters:\n- page, perPage - Pagination\n- SiteID - Filter by site\n- TestType - Filter by type (TEST, PARAM, CALC, GROUP, TITLE)\n- VisibleScr - Filter by screen visibility (0=hidden, 1=visible)\n- VisibleRpt - Filter by report visibility (0=hidden, 1=visible)\n- TestSiteName - Search by test name or code\n\nTest Types:\n- TEST - Technical test\n- PARAM - Parameter\n- CALC - Calculated\n- GROUP - Panel/Profile\n- TITLE - Section header\n\nTest Definition Schema:\n- id - Primary key\n- TestCode - Test code\n- TestName - Test name\n- TestType - Type (TEST, PARAM, CALC, GROUP, TITLE)\n- DisciplineID - Reference to discipline\n- DepartmentID - Reference to department\n- SpecimenType - Specimen type code\n- Unit - Measurement unit\n- Formula - Calculation formula
Phase 6: Orders\nPriority: High | Time Estimate: 3-4 hours\n\nDependencies: Patients, Visits, Tests, Specimen, ValueSets (priorities, statuses)\n\n- [ ] Orders list with status filtering\n- [ ] Create order with test selection\n- [ ] Order detail view\n- [ ] Update order status\n- [ ] Order items management\n\nAPI Endpoints:\n- GET /api/ordertest - List orders (filters: OrderStatus, InternalPID, page, perPage)\n- POST /api/ordertest - Create order (requires: PatientID, Tests array)\n- PATCH /api/ordertest - Update order\n- DELETE /api/ordertest - Delete order\n- GET /api/ordertest/{id} - Get order details\n- POST /api/ordertest/status - Update order status (body: { OrderID, OrderStatus })\n\nOrder Status Values:\n- ORD - Ordered\n- SCH - Scheduled\n- ANA - Analysis\n- VER - Verified\n- REV - Reviewed\n- REP - Reported\n\nPriority Values:\n- R - Routine\n- S - Stat\n- U - Urgent\n\nOrderTest Schema:\n- OrderID - Order identifier\n- PatientID - Reference to patient\n- VisitID - Reference to visit\n- OrderDate - Order timestamp (ISO 8601)\n- OrderStatus - Status code (ORD, SCH, ANA, VER, REV, REP)\n- Priority - Priority code (R, S, U)\n- SiteID - Reference to site\n- RequestingPhysician - Requesting physician identifier\n\nCreate Order Request:\njson\n{\n \"PatientID\": \"string\",\n \"VisitID\": \"string\" (optional),\n \"Priority\": \"R|S|U\",\n \"SiteID\": integer (optional),\n \"RequestingPhysician\": \"string\" (optional),\n \"Tests\": [\n {\n \"TestID\": integer,\n \"SpecimenType\": \"string\" (optional)\n }\n ]\n}\n
Phase 7: Results & Dashboard
Priority: High | Time Estimate: 2-3 hours
Dependencies: Orders
- Dashboard with summary cards
- Results list with patient filtering
- Sample tracking view
API Endpoints:
GET /api/dashboard- Get dashboard summary- Returns: pendingOrders, todayResults, criticalResults, activePatients
GET /api/result- Get patient results (filter by PatientID, pagination with page)
Dashboard Metrics:
- pendingOrders - Number of pending orders
- todayResults - Results processed today
- criticalResults - Critical/panic results
- activePatients - Currently active patients
Phase 8: User-defined ValueSets
Priority: Medium | Time Estimate: 3-4 hours Dependencies: Test Catalog (Phase 5)
User-defined ValueSets are created and managed by lab administrators in the database (not from JSON files). These require full CRUD operations and are used for test result interpretation (reference ranges, flags, interpretations).
- User ValueSet definitions list page
- User ValueSet definition create/edit form
- User ValueSet items management (CRUD)
API Endpoints:
User ValueSet Definitions:
GET /api/valueset/user/def- List user value set definitionsPOST /api/valueset/user/def- Create user value set definitionGET /api/valueset/user/def/{id}- Get user value set definition by IDPUT /api/valueset/user/def/{id}- Update user value set definitionDELETE /api/valueset/user/def/{id}- Delete user value set definition
User ValueSet Items:
GET /api/valueset/user/items- List user value set items (filter by VSetID)POST /api/valueset/user/items- Create user value set itemGET /api/valueset/user/items/{id}- Get user value set item by IDPUT /api/valueset/user/items/{id}- Update user value set itemDELETE /api/valueset/user/items/{id}- Delete user value set item
ValueSetDef Schema:
id- Primary keyVSetCode- Value set codeVSetName- Value set nameDescription- DescriptionCategory- Category
ValueSetItem Schema:
id- Primary keyVSetID- Reference to ValueSet definitionVValue- Value codeVLabel- Display labelVSeq- Sequence orderIsActive- Active flag (boolean)
Phase 9: Organization Structure\nPriority: Medium | Time Estimate: 2-3 hours\n\n- [ ] Accounts management\n- [ ] Sites management\n- [ ] Disciplines management\n- [ ] Departments management\n- [ ] Workstations management\n\nAPI Endpoints:\n\nAccounts:\n- GET /api/organization/account - List accounts\n- POST /api/organization/account - Create account\n- PATCH /api/organization/account - Update account (body: { id, AccountName, AccountCode, AccountType })\n- DELETE /api/organization/account - Delete account (body: { id })\n- GET /api/organization/account/{id} - Get account details\n\nAccount Schema:\n- id - Primary key\n- AccountName - Account name\n- AccountCode - Account code\n- AccountType - Account type\n\nSites:\n- GET /api/organization/site - List sites\n- POST /api/organization/site - Create site\n- PATCH /api/organization/site - Update site (body: { id, SiteName, SiteCode, AccountID })\n- DELETE /api/organization/site - Delete site (body: { id })\n- GET /api/organization/site/{id} - Get site details\n\nSite Schema:\n- id - Primary key\n- SiteName - Site name\n- SiteCode - Site code\n- AccountID - Reference to account\n\nDisciplines:\n- GET /api/organization/discipline - List disciplines\n- POST /api/organization/discipline - Create discipline\n- PATCH /api/organization/discipline - Update discipline (body: { id, DisciplineName, DisciplineCode })\n- DELETE /api/organization/discipline - Delete discipline (body: { id })\n- GET /api/organization/discipline/{id} - Get discipline details\n\nDiscipline Schema:\n- id - Primary key\n- DisciplineName - Discipline name\n- DisciplineCode - Discipline code\n\nDepartments:\n- GET /api/organization/department - List departments\n- POST /api/organization/department - Create department\n- PATCH /api/organization/department - Update department (body: { id, DeptName, DeptCode, SiteID })\n- DELETE /api/organization/department - Delete department (body: { id })\n- GET /api/organization/department/{id} - Get department details\n\nDepartment Schema:\n- id - Primary key\n- DeptName - Department name\n- DeptCode - Department code\n- SiteID - Reference to site\n\nWorkstations:\n- GET /api/organization/workstation - List workstations\n- POST /api/organization/workstation - Create workstation\n- PATCH /api/organization/workstation - Update workstation (body: { id, WorkstationName, WorkstationCode, SiteID, DepartmentID })\n- DELETE /api/organization/workstation - Delete workstation (body: { id })\n- GET /api/organization/workstation/{id} - Get workstation details\n\nWorkstation Schema:\n- id - Primary key\n- WorkstationName - Workstation name\n- WorkstationCode - Workstation code\n- SiteID - Reference to site\n- DepartmentID - Reference to department
Phase 10: Edge API (Instrument Integration)
Priority: Low | Time Estimate: 2-3 hours
- Edge results viewer
- Pending orders for instruments
- Instrument status monitoring
API Endpoints:
GET /api/edge/orders- Fetch pending orders (filter by instrument_id, status)POST /api/edge/orders/{orderId}/ack- Acknowledge order deliveryPOST /api/edge/results- Receive results from instrument (tiny-edge)POST /api/edge/status- Log instrument status (status: online, offline, error, maintenance)
Phase 11: Authentication
Priority: High | Time Estimate: 1-2 hours | Status: ✅ COMPLETED
Foundation authentication system for user login/logout and session management.
- Login page with form validation
- JWT token handling (HTTP-only cookie)
- Logout functionality
- Auth state management
- Protected route guards
- Auth status checking
API Endpoints:
V1 Authentication:
POST /api/auth/login- User login (returns JWT in cookie)POST /api/auth/logout- User logoutGET /api/auth/check- Check authentication statusPOST /api/auth/register- Register new userPOST /api/auth/change_pass- Change password (authenticated)
V2 Authentication:
POST /v2/auth/login- V2 User loginPOST /v2/auth/logout- V2 User logoutGET /v2/auth/check- V2 Check authenticationPOST /v2/auth/register- V2 Register new user
Security:
- JWT tokens stored in HTTP-only cookies
- Bearer token support for API requests
- Automatic redirect to login on 401 responses
Reusable Components to Build
1. FormInput.svelte
Text input with label, validation, and error display.
Status: Not yet implemented - using native inputs with DaisyUI styling
<FormInput
label="Patient ID"
name="patientId"
value={patientId}
required
pattern="[A-Za-z0-9]+"
/>
2. SelectDropdown.svelte ✅ COMPLETED
Dropdown populated from ValueSets or API data.
<SelectDropdown
label="Gender"
name="sex"
value={sex}
options={genderOptions}
/>
3. DataTable.svelte ✅ COMPLETED
Sortable, paginated table with actions.
<DataTable
columns={['ID', 'Name', 'Status']}
data={patients}
onEdit={handleEdit}
onDelete={handleDelete}
pagination={true}
/>
4. SearchBar.svelte
Search input with debounce.
Status: Not yet implemented
5. Modal.svelte ✅ COMPLETED
Reusable modal for confirmations and forms.
Code Patterns
API Client Pattern
// lib/api/client.js
const API_BASE = import.meta.env.VITE_API_URL || 'http://localhost/clqms01';
export async function apiFetch(endpoint, options = {}) {
const token = get(authToken);
const res = await fetch(`${API_BASE}${endpoint}`, {
...options,
headers: {
'Content-Type': 'application/json',
...(token && { 'Authorization': `Bearer ${token}` }),
...options.headers
}
});
if (res.status === 401) {
// Handle unauthorized
authToken.set(null);
goto('/login');
return;
}
return res.json();
}
Form Handling Pattern
<script>
let formData = { name: '', email: '' };
let errors = {};
let loading = false;
async function handleSubmit() {
loading = true;
errors = {};
const result = await createItem(formData);
if (result.status === 'error') {
errors = result.errors || { general: result.message };
} else {
// Success - redirect or show message
}
loading = false;
}
</script>
<form on:submit|preventDefault={handleSubmit}>
<FormInput
label="Name"
bind:value={formData.name}
error={errors.name}
/>
<button type="submit" disabled={loading}>
{loading ? 'Saving...' : 'Save'}
</button>
</form>
Store Pattern for ValueSets
// lib/stores/valuesets.js
import { writable } from 'svelte/store';
export const valueSets = writable({});
export async function loadValueSet(key) {
const res = await fetch(`/api/valueset/${key}`);
const data = await res.json();
valueSets.update(vs => ({
...vs,
[key]: data.data?.Items || []
}));
}
// Usage in component:
// onMount(() => loadValueSet('GENDER'));
Environment Setup
Create .env file:
VITE_API_URL=http://localhost/clqms01
Getting Started
-
Initialize SvelteKit:
npm create svelte@latest clqms-fe cd clqms-fe npm install npx svelte-add@latest tailwindcss npm install -
Configure tailwind.config.js:
export default { content: ['./src/**/*.{html,js,svelte,ts}'], theme: { extend: {} }, plugins: [] }; -
Start with Phase 0:
- Create API client
- Set up auth stores
- Build login page
- Create protected layout
Navigation Structure
Dashboard (Home)
├── Master Data
│ ├── System ValueSets (read-only from JSON)
│ ├── Locations
│ ├── Contacts
│ ├── Occupations
│ ├── Medical Specialties
│ ├── Counters
│ └── Geography (Provinces/Cities)
├── Organization
│ ├── Accounts
│ ├── Sites
│ ├── Disciplines
│ ├── Departments
│ └── Workstations
├── Patients
│ ├── All Patients
│ └── Patient Visits
├── Laboratory
│ ├── Specimens
│ ├── Tests
│ ├── Orders
│ ├── Results
│ └── User ValueSets (CRUD in database)
└── Edge
└── Instrument Status
Notes
- Use
+layout.server.jsfor server-side auth checks - Use SvelteKit's
invalidateAll()after mutations - Cache ValueSets in localStorage for better UX
- Implement optimistic updates where appropriate
- Use loading states for all async operations
- Add toast notifications for success/error feedback
API Reference Summary
Authentication
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/login |
User login (JWT in cookie) |
| POST | /api/auth/logout |
User logout |
| GET | /api/auth/check |
Check auth status |
| POST | /api/auth/register |
Register new user |
| POST | /api/auth/change_pass |
Change password |
| POST | /v2/auth/login |
V2 Login |
| POST | /v2/auth/logout |
V2 Logout |
| GET | /v2/auth/check |
V2 Auth check |
| POST | /v2/auth/register |
V2 Register |
ValueSets (Library/System)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/valueset |
List all library value sets |
| GET | /api/valueset/{key} |
Get value set by key |
| POST | /api/valueset/refresh |
Refresh cache from JSON |
ValueSets (User-defined)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/valueset/user/def |
List user value set definitions |
| POST | /api/valueset/user/def |
Create definition |
| GET | /api/valueset/user/def/{id} |
Get definition by ID |
| PUT | /api/valueset/user/def/{id} |
Update definition |
| DELETE | /api/valueset/user/def/{id} |
Delete definition |
| GET | /api/valueset/user/items |
List items (filter: VSetID) |
| POST | /api/valueset/user/items |
Create item |
| GET | /api/valueset/user/items/{id} |
Get item by ID |
| PUT | /api/valueset/user/items/{id} |
Update item |
| DELETE | /api/valueset/user/items/{id} |
Delete item |
Master Data - Locations
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/location |
List locations (query: LocCode, LocName) |
| POST | /api/location |
Create location |
| PATCH | /api/location |
Update location |
| DELETE | /api/location |
Delete location |
| GET | /api/location/{id} |
Get location by ID |
Master Data - Contacts
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/contact |
List contacts |
| POST | /api/contact |
Create contact |
| PATCH | /api/contact |
Update contact |
| DELETE | /api/contact |
Delete contact |
| GET | /api/contact/{id} |
Get contact by ID |
Master Data - Supporting Entities
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/occupation |
List occupations |
| POST | /api/occupation |
Create occupation |
| PATCH | /api/occupation |
Update occupation |
| GET | /api/occupation/{id} |
Get occupation by ID |
| GET | /api/medicalspecialty |
List specialties |
| POST | /api/medicalspecialty |
Create specialty |
| PATCH | /api/medicalspecialty |
Update specialty |
| GET | /api/medicalspecialty/{id} |
Get specialty by ID |
| GET | /api/counter |
List counters |
| POST | /api/counter |
Create counter |
| PATCH | /api/counter |
Update counter |
| DELETE | /api/counter |
Delete counter |
| GET | /api/counter/{id} |
Get counter by ID |
Master Data - Geography (Read-only)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/areageo |
List all geographical areas |
| GET | /api/areageo/provinces |
List provinces |
| GET | /api/areageo/cities |
List cities (query: province_id) |
Patients
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/patient |
List patients (query: page, perPage, Name, etc.) |
| POST | /api/patient |
Create patient |
| PATCH | /api/patient |
Update patient |
| DELETE | /api/patient |
Delete patient (soft delete) |
| GET | /api/patient/{id} |
Get patient by ID |
| GET | /api/patient/check |
Check if patient exists |
Patient Visits
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/patvisit |
List visits (query: page, perPage) |
| POST | /api/patvisit |
Create visit |
| PATCH | /api/patvisit |
Update visit |
| DELETE | /api/patvisit |
Delete visit |
| GET | /api/patvisit/{id} |
Get visit by PVID |
| GET | /api/patvisit/patient/{patientId} |
Get visits by patient |
| POST | /api/patvisitadt |
Create ADT visit |
| PATCH | /api/patvisitadt |
Update ADT visit |
Organization - Accounts
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/organization/account |
List accounts |
| POST | /api/organization/account |
Create account |
| PATCH | /api/organization/account |
Update account |
| DELETE | /api/organization/account |
Delete account |
| GET | /api/organization/account/{id} |
Get account by ID |
Organization - Sites
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/organization/site |
List sites |
| POST | /api/organization/site |
Create site |
| PATCH | /api/organization/site |
Update site |
| DELETE | /api/organization/site |
Delete site |
| GET | /api/organization/site/{id} |
Get site by ID |
Organization - Disciplines
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/organization/discipline |
List disciplines |
| POST | /api/organization/discipline |
Create discipline |
| PATCH | /api/organization/discipline |
Update discipline |
| DELETE | /api/organization/discipline |
Delete discipline |
| GET | /api/organization/discipline/{id} |
Get discipline by ID |
Organization - Departments
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/organization/department |
List departments |
| POST | /api/organization/department |
Create department |
| PATCH | /api/organization/department |
Update department |
| DELETE | /api/organization/department |
Delete department |
| GET | /api/organization/department/{id} |
Get department by ID |
Organization - Workstations
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/organization/workstation |
List workstations |
| POST | /api/organization/workstation |
Create workstation |
| PATCH | /api/organization/workstation |
Update workstation |
| DELETE | /api/organization/workstation |
Delete workstation |
| GET | /api/organization/workstation/{id} |
Get workstation by ID |
Specimen Management
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/specimen |
List specimens |
| POST | /api/specimen |
Create specimen |
| PATCH | /api/specimen |
Update specimen |
| GET | /api/specimen/{id} |
Get specimen by ID |
| GET | /api/specimen/container |
List containers |
| POST | /api/specimen/container |
Create container |
| PATCH | /api/specimen/container |
Update container |
| GET | /api/specimen/container/{id} |
Get container by ID |
| GET | /api/specimen/prep |
List preparations |
| POST | /api/specimen/prep |
Create preparation |
| PATCH | /api/specimen/prep |
Update preparation |
| GET | /api/specimen/prep/{id} |
Get preparation by ID |
| GET | /api/specimen/status |
List statuses |
| POST | /api/specimen/status |
Create status |
| PATCH | /api/specimen/status |
Update status |
| GET | /api/specimen/status/{id} |
Get status by ID |
| GET | /api/specimen/collection |
List collection methods |
| POST | /api/specimen/collection |
Create collection method |
| PATCH | /api/specimen/collection |
Update collection method |
| GET | /api/specimen/collection/{id} |
Get collection method by ID |
| GET | /api/sample |
Get samples |
Test Catalog
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/tests |
List tests (query: TestType, SiteID, etc.) |
| POST | /api/tests |
Create test |
| PATCH | /api/tests |
Update test |
| GET | /api/tests/{id} |
Get test by ID |
Orders
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/ordertest |
List orders (query: OrderStatus, InternalPID) |
| POST | /api/ordertest |
Create order |
| PATCH | /api/ordertest |
Update order |
| DELETE | /api/ordertest |
Delete order |
| GET | /api/ordertest/{id} |
Get order by ID |
| POST | /api/ordertest/status |
Update order status |
Results & Dashboard
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/dashboard |
Get dashboard summary |
| GET | /api/result |
Get patient results (query: PatientID, page) |
Edge API (Instrument Integration)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/edge/orders |
Fetch pending orders |
| POST | /api/edge/orders/{orderId}/ack |
Acknowledge order |
| POST | /api/edge/results |
Receive instrument results |
| POST | /api/edge/status |
Log instrument status |