Files
vigilcare-clinical/vigilcare-dashboard/src/api/encounters.js
T

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()
}