@@ -49,22 +49,41 @@ export const sseMiddleware: Middleware = (store) => {
4949 let parsedData : any = { } ;
5050
5151 if ( workloadType === 'rppg' ) {
52- // rPPG sends: HR, RR, SpO2, waveform
53- parsedData = {
54- HR : payload . HR ?? payload . heart_rate ,
55- RR : payload . RR ?? payload . respiratory_rate ?? payload . value ,
56- SpO2 : payload . SpO2 ?? payload . spo2 ,
57- } ;
58-
59- // Extract waveform if present
60- if ( payload . waveform && Array . isArray ( payload . waveform ) ) {
61- parsedData . waveform = payload . waveform ;
52+ // rPPG can send both waveform and numeric vitals
53+ if ( eventType === 'numeric' ) {
54+ const metric = payload . metric ;
55+
56+ if ( metric === 'HEART_RATE_AVG' || metric === 'HEART_RATE' ) {
57+ parsedData . HR = payload . value ;
58+ } else if ( metric === 'RESP_RATE_AVG' || metric === 'RESP_RATE' ) {
59+ parsedData . RR = payload . value ;
60+ } else if ( metric === 'SPO2' || metric === 'SPO2_AVG' || metric === 'OXYGEN_SATURATION' ) {
61+ parsedData . SpO2 = payload . value ;
62+ }
63+
64+ console . log ( '[SSE] ✓ Parsed rPPG numeric:' , {
65+ metric,
66+ value : payload . value ,
67+ vitals : { HR : parsedData . HR , RR : parsedData . RR , SpO2 : parsedData . SpO2 } ,
68+ } ) ;
69+ } else {
70+ // Waveform / aggregated payload
71+ parsedData = {
72+ HR : payload . HR ?? payload . heart_rate ,
73+ RR : payload . RR ?? payload . respiratory_rate ?? payload . value ,
74+ SpO2 : payload . SpO2 ?? payload . spo2 ,
75+ } ;
76+
77+ // Extract waveform if present
78+ if ( payload . waveform && Array . isArray ( payload . waveform ) ) {
79+ parsedData . waveform = payload . waveform ;
80+ }
81+
82+ console . log ( '[SSE] ✓ Parsed rPPG (waveform/aggregate):' , {
83+ vitals : { HR : parsedData . HR , RR : parsedData . RR , SpO2 : parsedData . SpO2 } ,
84+ waveformLength : parsedData . waveform ?. length
85+ } ) ;
6286 }
63-
64- console . log ( '[SSE] ✓ Parsed rPPG:' , {
65- vitals : { HR : parsedData . HR , RR : parsedData . RR , SpO2 : parsedData . SpO2 } ,
66- waveformLength : parsedData . waveform ?. length
67- } ) ;
6887
6988 } else if ( workloadType === 'ai-ecg' ) {
7089 console . log ( '[SSE] 🔬 AI-ECG raw payload:' , JSON . stringify ( payload , null , 2 ) ) ;
@@ -115,6 +134,10 @@ export const sseMiddleware: Middleware = (store) => {
115134 parsedData . BP_DIA = payload . value ;
116135 console . log ( '[SSE] ✓ MDPNP BP_DIA:' , payload . value ) ;
117136 }
137+ else if ( metric === 'MDC_PRESS_BLD_ART_ABP_SYS' ) {
138+ parsedData . BP_SYS = payload . value ;
139+ console . log ( '[SSE] ✓ MDPNP BP_SYS:' , payload . value ) ;
140+ }
118141 }
119142 else if ( eventType === 'waveform' ) {
120143 // Extract waveform based on device type
@@ -139,7 +162,7 @@ export const sseMiddleware: Middleware = (store) => {
139162 }
140163
141164 console . log ( '[SSE] ✓ Parsed MDPNP:' , {
142- vitals : { HR : parsedData . HR , CO2_ET : parsedData . CO2_ET , BP_DIA : parsedData . BP_DIA } ,
165+ vitals : { HR : parsedData . HR , CO2_ET : parsedData . CO2_ET , BP_SYS : parsedData . BP_SYS , BP_DIA : parsedData . BP_DIA } ,
143166 waveformType : parsedData . waveformType ,
144167 waveformLength : parsedData . waveform ?. length
145168 } ) ;
0 commit comments