78 lines
2.4 KiB
JavaScript
78 lines
2.4 KiB
JavaScript
import { api, BASE_URL, authHeaders } from './client'
|
|
|
|
export function fetchActiveEncounters(department, { page = 1, pageSize = 20 } = {}) {
|
|
const params = new URLSearchParams({
|
|
status: 'ACTIVE',
|
|
page: String(page),
|
|
pageSize: String(pageSize),
|
|
})
|
|
if (department) params.set('department', department)
|
|
return api.get(`/api/v1/encounters?${params}`)
|
|
}
|
|
|
|
export async function fetchAllActiveEncounters(department) {
|
|
const items = []
|
|
let page = 1
|
|
let totalCount = 0
|
|
|
|
do {
|
|
const data = await fetchActiveEncounters(department, { page, pageSize: 100 })
|
|
items.push(...(data.items ?? []))
|
|
totalCount = data.totalCount ?? items.length
|
|
page += 1
|
|
} while (items.length < totalCount)
|
|
|
|
return items
|
|
}
|
|
|
|
export function fetchEncounter(id) {
|
|
return api.get(`/api/v1/encounters/${id}`)
|
|
}
|
|
|
|
export async function fetchObservations(encounterId, { limit = 50 } = {}) {
|
|
const all = []
|
|
let cursor = null
|
|
do {
|
|
const params = new URLSearchParams({ limit: String(limit) })
|
|
if (cursor) params.set('cursor', cursor)
|
|
const page = await api.get(`/api/v1/encounters/${encounterId}/observations?${params}`)
|
|
all.push(...(page.items ?? []))
|
|
cursor = page.hasMore ? page.nextCursor : null
|
|
} while (cursor)
|
|
return all
|
|
}
|
|
|
|
export function fetchTimeline(encounterId) {
|
|
return api.get(`/api/v1/encounters/${encounterId}/timeline`)
|
|
}
|
|
|
|
export function submitVitalsObservations(encounterId, observations) {
|
|
return api.post(`/api/v1/encounters/${encounterId}/observations`, {
|
|
observations,
|
|
})
|
|
}
|
|
|
|
export function fetchDischargeSummaryStatus(encounterId) {
|
|
return api.get(`/api/v1/encounters/${encounterId}/discharge-summary`)
|
|
}
|
|
|
|
export async function fetchDischargeSummaryContent(encounterId) {
|
|
const res = await fetch(
|
|
`${BASE_URL}/api/v1/encounters/${encounterId}/discharge-summary/content`,
|
|
{ headers: authHeaders() },
|
|
)
|
|
if (res.status === 404) {
|
|
const envelope = await res.json().catch(() => null)
|
|
const code = envelope?.error?.code
|
|
if (code === 'DISCHARGE_SUMMARY_PENDING') return null
|
|
throw new Error(envelope?.error?.message ?? 'Discharge summary not found.')
|
|
}
|
|
if (res.status === 401) {
|
|
throw new Error('Session expired — please log in again.')
|
|
}
|
|
if (!res.ok) {
|
|
const envelope = await res.json().catch(() => null)
|
|
throw new Error(envelope?.error?.message ?? `Failed to download discharge summary (${res.status})`)
|
|
}
|
|
return res.text()
|
|
} |