feat(compliance): add 45 CFR § 164.312 inactivity lockout, break-glass protocol, Fed R Evid 902(11) self-authenticating affidavit, and aai.dev legal dossier
This commit is contained in:
@@ -37,6 +37,7 @@ import { TelehealthRoom } from '@/components/telehealth/TelehealthRoom';
|
||||
import { WaitlistModal } from '@/components/waitlist/WaitlistModal';
|
||||
import { CourtAuditVaultModal } from '@/components/compliance/CourtAuditVaultModal';
|
||||
import { CommandPalette } from '@/components/ui/CommandPalette';
|
||||
import { InactivityLockoutModal } from '@/components/ui/InactivityLockoutModal';
|
||||
import { ClinicalToastContainer, ToastMessage } from '@/components/ui/ClinicalToast';
|
||||
import { clinicalAudio } from '@/lib/clinical-audio';
|
||||
import {
|
||||
@@ -60,6 +61,7 @@ import {
|
||||
VolumeX,
|
||||
Sparkles,
|
||||
Scale,
|
||||
Lock,
|
||||
} from 'lucide-react';
|
||||
|
||||
export default function Home() {
|
||||
@@ -90,6 +92,7 @@ export default function Home() {
|
||||
// Polish state: Command Palette, Toasts & Audio
|
||||
const [isCommandPaletteOpen, setIsCommandPaletteOpen] = useState(false);
|
||||
const [isCourtVaultOpen, setIsCourtVaultOpen] = useState(false);
|
||||
const [isTerminalLocked, setIsTerminalLocked] = useState(false);
|
||||
const [toasts, setToasts] = useState<ToastMessage[]>([]);
|
||||
const [audioEnabled, setAudioEnabled] = useState(true);
|
||||
|
||||
@@ -360,6 +363,20 @@ export default function Home() {
|
||||
<span className="sm:hidden">Vault</span>
|
||||
</button>
|
||||
|
||||
{/* Quick Terminal Lockout Button (HIPAA 45 CFR § 164.312(a)(2)(iii)) */}
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
clinicalAudio.playClick();
|
||||
setIsTerminalLocked(true);
|
||||
}}
|
||||
className="flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg bg-slate-100 hover:bg-rose-50 border border-slate-200 hover:border-rose-300 text-slate-700 hover:text-rose-700 text-xs font-bold transition shadow-2xs"
|
||||
title="Lock Clinical Terminal (Cmd+L / 45 CFR § 164.312(a)(2)(iii))"
|
||||
>
|
||||
<Lock className="w-3.5 h-3.5 text-slate-500 hover:text-rose-600" />
|
||||
<span className="hidden md:inline">Lock</span>
|
||||
</button>
|
||||
|
||||
{/* Clinic Dropdown */}
|
||||
<div className="relative">
|
||||
<select
|
||||
@@ -705,6 +722,16 @@ export default function Home() {
|
||||
activeTenant={activeTenant}
|
||||
/>
|
||||
|
||||
{/* HIPAA Inactivity & Break-Glass Lockout Modal (45 CFR § 164.312(a)(2)(iii) & § 164.312(a)(2)(ii)) */}
|
||||
<InactivityLockoutModal
|
||||
isLocked={isTerminalLocked}
|
||||
onUnlock={() => setIsTerminalLocked(false)}
|
||||
onManualLock={() => setIsTerminalLocked(true)}
|
||||
doctorName={activeProvider.name}
|
||||
clinicName={activeTenant.name}
|
||||
inactivityTimeoutMinutes={15}
|
||||
/>
|
||||
|
||||
{/* Global Command Palette (Cmd+K) */}
|
||||
<CommandPalette
|
||||
isOpen={isCommandPaletteOpen}
|
||||
@@ -726,6 +753,7 @@ export default function Home() {
|
||||
onToggleAudio={handleToggleAudio}
|
||||
audioEnabled={audioEnabled}
|
||||
onOpenCourtVault={() => setIsCourtVaultOpen(true)}
|
||||
onLockTerminal={() => setIsTerminalLocked(true)}
|
||||
/>
|
||||
|
||||
{/* Hospital Clinical Toast Notification System */}
|
||||
|
||||
Reference in New Issue
Block a user