pediatric-ai-scribe-v3/src/routes/hpi.js
ifedan-ed 04252c3015 v3.0.0: Auth, admin panel, security fixes, per-tab model selector
- Add authMiddleware to all AI/transcribe routes (were unauthenticated)
- Add full admin panel: user management, registration toggle, stats
- Fix XSS in email verification (escape user.name in HTML)
- Fix missing APP_URL fallback in password reset email
- Add per-tab model selector (respects OpenRouter/Bedrock/Azure lists)
- Fix transcribeAudio to send Authorization header
- Fix labs input: textarea instead of single-line input
- Add structured logging: audit_log, api_log, access_log tables
- Add admin CLI (admin-cli.js) for Docker exec management
- Fix duplicate var duration declaration in ai.js catch block
- Fix RETURNING check case-sensitivity in database.js
2026-03-21 19:25:51 -04:00

45 lines
1.8 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { callAI } = require('../utils/ai');
const PROMPTS = require('../utils/prompts');
const { authMiddleware } = require('../middleware/auth');
// HPI from encounter
router.post('/generate-hpi-encounter', authMiddleware, async (req, res) => {
try {
const { transcript, patientAge, patientGender, model, setting } = req.body;
if (!transcript || !transcript.trim()) return res.status(400).json({ error: 'Transcript empty' });
const prompt = setting === 'inpatient' ? PROMPTS.hpiInpatient : PROMPTS.hpiEncounter;
const result = await callAI([
{ role: 'system', content: prompt },
{ role: 'user', content: `Patient: ${patientAge || 'Unknown'}, ${patientGender || 'Unknown'}\nSetting: ${setting || 'outpatient'}\n\nTRANSCRIPT:\n${transcript}` }
], { model });
res.json({ success: true, hpi: result.content, model: result.model });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// HPI from dictation
router.post('/generate-hpi-dictation', authMiddleware, async (req, res) => {
try {
const { transcript, patientAge, patientGender, model, setting } = req.body;
if (!transcript || !transcript.trim()) return res.status(400).json({ error: 'Dictation empty' });
const prompt = setting === 'inpatient' ? PROMPTS.hpiInpatient : PROMPTS.hpiDictation;
const result = await callAI([
{ role: 'system', content: prompt },
{ role: 'user', content: `Patient: ${patientAge || 'Unknown'}, ${patientGender || 'Unknown'}\nSetting: ${setting || 'outpatient'}\n\nDICTATION:\n${transcript}` }
], { model });
res.json({ success: true, hpi: result.content, model: result.model });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
module.exports = router;