|
@@ -1,24 +1,34 @@
|
|
|
import { groupBy } from '@/tools';
|
|
import { groupBy } from '@/tools';
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-export function fromAnalysisModel(mode: 'tongue' | 'face', data: Record<string, any>): AnalysisModel {
|
|
|
|
|
|
|
+export function fromAnalysisModel(mode: 'tongue' | 'face', data: Record<string, any>): AnalysisModel;
|
|
|
|
|
+export function fromAnalysisModel(mode: 'pulse', data: Record<string, any>): PulseAnalysisModel;
|
|
|
|
|
+export function fromAnalysisModel(
|
|
|
|
|
+ mode: 'tongue' | 'face' | 'pulse',
|
|
|
|
|
+ data: Record<string, any>
|
|
|
|
|
+): AnalysisModel | PulseAnalysisModel {
|
|
|
let model: AnalysisModel;
|
|
let model: AnalysisModel;
|
|
|
- switch ( mode ) {
|
|
|
|
|
|
|
+ switch (mode) {
|
|
|
case 'tongue':
|
|
case 'tongue':
|
|
|
model = fromTongueAnalysisModel(data);
|
|
model = fromTongueAnalysisModel(data);
|
|
|
break;
|
|
break;
|
|
|
case 'face':
|
|
case 'face':
|
|
|
model = fromFaceAnalysisModel(data);
|
|
model = fromFaceAnalysisModel(data);
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case 'pulse':
|
|
|
|
|
+ return fromPulseAnalysisModel(data);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const group = groupBy<AnalysisException>(model.exception, (item) => item.cover ?? '');
|
|
const group = groupBy<AnalysisException>(model.exception, (item) => item.cover ?? '');
|
|
|
- model.exceptionGroup = Object.entries(group).map(([ key, exception ]) => (
|
|
|
|
|
- { key, exception }
|
|
|
|
|
- ));
|
|
|
|
|
|
|
+ model.exceptionGroup = Object.entries(group).map(([key, exception]) => ({ key, exception }));
|
|
|
return model;
|
|
return model;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+export interface PulseAnalysisModel extends Pick<Awaited<ReturnType<typeof Bridge.pulse>>, 'measureId' | 'summaryLabel' | 'summaryValue'> {
|
|
|
|
|
+ hand?: number;
|
|
|
|
|
+ results?: string;
|
|
|
|
|
+ url?: string;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
export interface AnalysisModel {
|
|
export interface AnalysisModel {
|
|
|
table: {
|
|
table: {
|
|
|
columns: string[];
|
|
columns: string[];
|
|
@@ -41,6 +51,31 @@ export interface AnalysisException {
|
|
|
tags: string[];
|
|
tags: string[];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+function fromPulseAnalysisModel(data: Record<string, any>): PulseAnalysisModel {
|
|
|
|
|
+ const pulse = (function (value) {
|
|
|
|
|
+ if (typeof value === 'string')
|
|
|
|
|
+ try {
|
|
|
|
|
+ value = JSON.parse(value);
|
|
|
|
|
+ } catch (e) {}
|
|
|
|
|
+ return typeof value === 'object' ? value : {};
|
|
|
|
|
+ })(data.pulse);
|
|
|
|
|
+
|
|
|
|
|
+ const getSummary = (value?: string[]) => (Array.isArray(value) && value.length ? value : void 0);
|
|
|
|
|
+ const summary =
|
|
|
|
|
+ getSummary(pulse?.summary_desc?.summary) ??
|
|
|
|
|
+ getSummary(pulse?.summary_desc?.left?.summary) ??
|
|
|
|
|
+ getSummary(pulse?.summary_desc?.right?.summary) ??
|
|
|
|
|
+ [];
|
|
|
|
|
+
|
|
|
|
|
+ return {
|
|
|
|
|
+ measureId: data?.measureId,
|
|
|
|
|
+ hand: pulse?.hand ?? 0,
|
|
|
|
|
+ summaryValue: pulse?.summary,
|
|
|
|
|
+ summaryLabel: pulse?.summary_desc,
|
|
|
|
|
+ results: summary.join(','),
|
|
|
|
|
+ };
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
function fromTongueAnalysisModel(data: Record<string, any>): AnalysisModel {
|
|
function fromTongueAnalysisModel(data: Record<string, any>): AnalysisModel {
|
|
|
const exception: AnalysisException[] = [];
|
|
const exception: AnalysisException[] = [];
|
|
|
const fromTongueException = fromAnalysisException(exception);
|
|
const fromTongueException = fromAnalysisException(exception);
|