export const CARDIOLOGY_VISIT = {
specialty: 'cardiology',
segments: [
{ speaker: 'provider', text: 'I see you are here for a blood pressure follow-up.', timestamp_ms: 0 },
{ speaker: 'patient', text: 'Yes, I have been taking the lisinopril like you prescribed.', timestamp_ms: 3500 },
{ speaker: 'provider', text: 'Your BP today is 138 over 85. Better, but still elevated. Let us increase lisinopril from 10 to 20mg.', timestamp_ms: 7200 },
{ speaker: 'patient', text: 'Okay. Should I be worried?', timestamp_ms: 15000 },
{ speaker: 'provider', text: 'Not at all. Come back in four weeks.', timestamp_ms: 18000 },
],
};
export const DERMATOLOGY_VISIT = {
specialty: 'dermatology',
segments: [
{ speaker: 'provider', text: 'What brings you in today?', timestamp_ms: 0 },
{ speaker: 'patient', text: 'I have this mole on my back that has been changing color.', timestamp_ms: 2500 },
{ speaker: 'provider', text: 'How long has it been changing? Any itching or bleeding?', timestamp_ms: 5000 },
{ speaker: 'patient', text: 'About three months. It itches sometimes.', timestamp_ms: 8000 },
{ speaker: 'provider', text: 'The borders look irregular. I want to do a biopsy today.', timestamp_ms: 12000 },
],
};
import devConfig from '../config/dev';
import { CARDIOLOGY_VISIT } from '../../fixtures/transcripts';
import axios from 'axios';
async function runDevEncounter() {
const api = axios.create({
baseURL: devConfig.abridge.baseUrl,
headers: {
'Authorization': `Bearer ${devConfig.abridge.clientSecret}`,
'X-Org-Id': devConfig.abridge.orgId,
},
});
const { data: session } = await api.post('/encounters/sessions', {
patient_id: 'demo-patient-001',
provider_id: 'demo-provider-001',
encounter_type: 'outpatient',
specialty: CARDIOLOGY_VISIT.specialty,
sandbox: true,
});
for (const seg of CARDIOLOGY_VISIT.segments) {
await api.post(`/encounters/sessions/${session.session_id}/transcript`, seg);
}
await api.post(`/encounters/sessions/${session.session_id}/finalize`);
for (let i = 0; i < 30; i++) {
const { data } = await api.get(`/encounters/sessions/${session.session_id}/note`);
if (data.status === 'completed') {
console.log(JSON.stringify(data.note.sections, null, 2));
await axios.post(`${devConfig.fhir.baseUrl}/DocumentReference`, {
resourceType: 'DocumentReference',
status: 'current',
content: [{ attachment: { contentType: 'text/plain', data: Buffer.from(JSON.stringify(data.note.sections)).toString('base64') } }],
});
console.log('Note pushed to local FHIR server');
return;
}
await new Promise(r => setTimeout(r, 2000));
}
}
runDevEncounter().catch(console.error);
{
"scripts": {
"dev:fhir": "docker start hapi-fhir 2>/dev/null || docker run -d --name hapi-fhir -p 8080:8080 hapiproject/hapi:latest",
"dev:encounter": "tsx watch src/dev/test-encounter.ts",
"dev:all": "npm run dev:fhir && npm run dev:encounter",
"test:fixtures": "vitest run --grep 'fixture'"
}
}