diff --git a/packages/features/accounts/src/server/api.ts b/packages/features/accounts/src/server/api.ts index d1faaef..d29e52b 100644 --- a/packages/features/accounts/src/server/api.ts +++ b/packages/features/accounts/src/server/api.ts @@ -1,22 +1,24 @@ import { SupabaseClient } from '@supabase/supabase-js'; import { Database } from '@kit/supabase/database'; - -import { AnalysisResultDetails, UserAnalysis } from '../types/accounts'; +import type { UuringElement, UuringuVastus } from '@kit/shared/types/medipost-analysis'; import PersonalCode from '~/lib/utils'; +import type { AnalysisResultDetails, AnalysisResultDetailsMapped, UserAnalysis } from '../types/analysis-results'; +import type { AnalysisOrder } from '../types/analysis-orders'; + export type AccountWithParams = Database['medreport']['Tables']['accounts']['Row'] & { accountParams: - | (Pick< - Database['medreport']['Tables']['account_params']['Row'], - 'weight' | 'height' - > & { - isSmoker: - | Database['medreport']['Tables']['account_params']['Row']['is_smoker'] - | null; - }) + | (Pick< + Database['medreport']['Tables']['account_params']['Row'], + 'weight' | 'height' + > & { + isSmoker: + | Database['medreport']['Tables']['account_params']['Row']['is_smoker'] | null; + }) + | null; }; /** @@ -25,7 +27,7 @@ export type AccountWithParams = * @param {SupabaseClient} client - The Supabase client instance. */ class AccountsApi { - constructor(private readonly client: SupabaseClient) {} + constructor(private readonly client: SupabaseClient) { } /** * @name getAccount diff --git a/packages/features/accounts/src/types/accounts.ts b/packages/features/accounts/src/types/accounts.ts index 86d51f3..02700b2 100644 --- a/packages/features/accounts/src/types/accounts.ts +++ b/packages/features/accounts/src/types/accounts.ts @@ -1,15 +1,5 @@ -import * as z from 'zod'; - import { Database } from '@kit/supabase/database'; -export type UserAnalysisElement = - Database['medreport']['Tables']['analysis_response_elements']['Row']; -export type UserAnalysisResponse = - Database['medreport']['Tables']['analysis_responses']['Row'] & { - elements: UserAnalysisElement[]; - }; -export type UserAnalysis = UserAnalysisResponse[]; - export type ApplicationRole = Database['medreport']['Tables']['accounts']['Row']['application_role']; export enum ApplicationRoleEnum { @@ -17,51 +7,3 @@ export enum ApplicationRoleEnum { Doctor = 'doctor', SuperAdmin = 'super_admin', } - -export const ElementSchema = z.object({ - unit: z.string(), - norm_lower: z.number(), - norm_upper: z.number(), - norm_status: z.number(), - analysis_name: z.string(), - response_time: z.string(), - response_value: z.number(), - norm_lower_included: z.boolean(), - norm_upper_included: z.boolean(), -}); -export type Element = z.infer; - -export const OrderSchema = z.object({ - status: z.string(), - medusa_order_id: z.string(), - created_at: z.coerce.date(), -}); -export type Order = z.infer; - -export const SummarySchema = z.object({ - id: z.number(), - value: z.string(), - status: z.string(), - user_id: z.string(), - created_at: z.coerce.date(), - created_by: z.string(), - updated_at: z.coerce.date().nullable(), - updated_by: z.string(), - doctor_user_id: z.string().nullable(), - analysis_order_id: z.number(), -}); -export type Summary = z.infer; - -export const AnalysisResultDetailsSchema = z.object({ - id: z.number(), - analysis_order_id: z.number(), - order_number: z.string(), - order_status: z.string(), - user_id: z.string(), - created_at: z.coerce.date(), - updated_at: z.coerce.date().nullable(), - elements: z.array(ElementSchema), - order: OrderSchema, - summary: SummarySchema.nullable(), -}); -export type AnalysisResultDetails = z.infer; diff --git a/packages/features/accounts/src/types/analysis-orders.ts b/packages/features/accounts/src/types/analysis-orders.ts new file mode 100644 index 0000000..4ef4027 --- /dev/null +++ b/packages/features/accounts/src/types/analysis-orders.ts @@ -0,0 +1,3 @@ +import { Tables } from '@kit/supabase/database'; + +export type AnalysisOrder = Tables<{ schema: 'medreport' }, 'analysis_orders'>; diff --git a/packages/features/accounts/src/types/analysis-results.ts b/packages/features/accounts/src/types/analysis-results.ts new file mode 100644 index 0000000..64ddb83 --- /dev/null +++ b/packages/features/accounts/src/types/analysis-results.ts @@ -0,0 +1,138 @@ +import * as z from 'zod'; + +import { Database } from '@kit/supabase/database'; + +export type UserAnalysisElement = + Database['medreport']['Tables']['analysis_response_elements']['Row']; +export type UserAnalysisResponse = + Database['medreport']['Tables']['analysis_responses']['Row'] & { + elements: UserAnalysisElement[]; + }; +export type UserAnalysis = UserAnalysisResponse[]; + +const ElementSchema = z.object({ + unit: z.string(), + norm_lower: z.number(), + norm_upper: z.number(), + norm_status: z.number(), + analysis_name: z.string(), + response_time: z.string(), + response_value: z.number(), + response_value_is_negative: z.boolean(), + norm_lower_included: z.boolean(), + norm_upper_included: z.boolean(), + status: z.string(), + analysis_element_original_id: z.string(), + original_response_element: z.object({ + + }), +}); + +const OrderSchema = z.object({ + status: z.string(), + medusa_order_id: z.string(), + created_at: z.coerce.date(), +}); + +const DoctorAnalysisFeedbackSchema = z.object({ + id: z.number(), + status: z.string(), + user_id: z.string(), + created_at: z.coerce.date(), + created_by: z.string(), +}); + +const SummarySchema = z.object({ + id: z.number(), + value: z.string(), + status: z.string(), + user_id: z.string(), + created_at: z.coerce.date(), + created_by: z.string(), + updated_at: z.coerce.date().nullable(), + updated_by: z.string(), + doctor_user_id: z.string().nullable(), + analysis_order_id: z.number(), + doctor_analysis_feedback: z.array(DoctorAnalysisFeedbackSchema), +}); + +export const AnalysisResultDetailsSchema = z.object({ + id: z.number(), + analysis_order_id: z.number(), + order_number: z.string(), + order_status: z.string(), + user_id: z.string(), + created_at: z.coerce.date(), + updated_at: z.coerce.date().nullable(), + elements: z.array(ElementSchema), + order: OrderSchema, + summary: SummarySchema.nullable(), +}); +export type AnalysisResultDetails = z.infer; + +export type AnalysisResultDetailsElementResults = { + unit: string | null; + normLower: number | null; + normUpper: number | null; + normStatus: number | null; + responseTime: string | null; + responseValue: number | null; + responseValueIsNegative: boolean | null; + normLowerIncluded: boolean; + normUpperIncluded: boolean; + status: string; + analysisElementOriginalId: string; + nestedElements: { + analysisElementOriginalId: string; + normLower?: number | null; + normLowerIncluded: boolean; + normStatus: number; + normUpper?: number | null; + normUpperIncluded: boolean; + responseTime: string; + responseValue: number; + status: number; + unit: string; + }[]; + labComment?: string | null; +}; + +export type AnalysisResultDetailsElement = { + analysisIdOriginal: string; + isWaitingForResults: boolean; + analysisName: string; + results: AnalysisResultDetailsElementResults; +}; + +export type AnalysisResultDetailsMapped = { + id: number; + order: { + status: string; + medusaOrderId: string; + createdAt: Date | string; + }; + elements: { + id: string; + unit: string; + norm_lower: number; + norm_upper: number; + norm_status: number; + analysis_name: string; + response_time: string; + response_value: number; + norm_lower_included: boolean; + norm_upper_included: boolean; + status: string; + analysis_element_original_id: string; + }[]; + orderedAnalysisElementIds: number[]; + orderedAnalysisElements: AnalysisResultDetailsElement[]; + summary: { + id: number; + status: string; + user_id: string; + created_at: Date; + created_by: string; + value?: string; + } | null; +};