feat: define production diagnosis DTOs

This commit is contained in:
Asep Haryana Saputra
2026-05-22 15:47:25 +00:00
parent 15c6be9e84
commit b347ed4fd1
2 changed files with 114 additions and 19 deletions
+102 -19
View File
@@ -1,4 +1,4 @@
import type { DiseaseCatalogItem, DiseaseSlug, RiskLevel } from './diseases'; import type { DiseaseCatalogItem, DiseaseSlug } from './diseases';
export type ManualClassificationRequest = { export type ManualClassificationRequest = {
diseaseSlug: DiseaseSlug; diseaseSlug: DiseaseSlug;
@@ -6,36 +6,126 @@ export type ManualClassificationRequest = {
location: string; location: string;
}; };
export type ManualClassificationRecord = { export type ManualClassificationRecord = ManualClassificationRequest & {
id: string; id: string;
diseaseSlug: DiseaseSlug;
observation: string;
location: string;
createdAt: string; createdAt: string;
disease: DiseaseCatalogItem; disease: DiseaseCatalogItem;
}; };
export type PredictionProbability = { export type PredictionProbability = {
diseaseSlug: DiseaseSlug; diseaseSlug: DiseaseSlug;
label: DiseaseCatalogItem['label']; label: string;
confidence: number; confidence: number;
}; };
export type UploaderMetadata = { export type UploaderMetadata = {
public_id: string; public_id: string;
telegram_file_id?: string;
telegram_file_unique_id?: string;
file_name: string; file_name: string;
mime_type: string; mime_type: string;
size_bytes: number; size_bytes: number;
file_type: string; file_type: string;
uploader_id?: number;
created_at: string;
telegram_file_id?: string;
telegram_file_unique_id?: string;
storage_chat_id?: number;
storage_message_id?: number;
download_url: string; download_url: string;
}; };
export type DiagnosisStatus =
| 'ai_verified'
| 'needs_review'
| 'expert_verified'
| 'expert_corrected'
| 'failed';
export type UserRole = 'user' | 'expert';
export type AuthUser = {
id: string;
email: string;
name: string;
role: UserRole;
};
export type AuthFeatures = {
googleOAuthEnabled: boolean;
};
export type AuthMeResponse = {
user: AuthUser | null;
features: AuthFeatures;
};
export type AuthRequest = {
email: string;
password: string;
};
export type RegisterRequest = AuthRequest & {
name: string;
};
export type AuthResponse = {
user: AuthUser;
features: AuthFeatures;
};
export type DiagnosisPrediction = {
id: string;
diseaseSlug: DiseaseSlug | null;
modelLabel: string;
confidence: number;
rank: number;
};
export type ExpertReviewRecord = {
id: string;
diagnosisId: string;
expertId: string;
verdict: 'verified' | 'corrected';
correctedDiseaseSlug: DiseaseSlug | null;
notes: string;
createdAt: string;
expert: AuthUser;
};
export type DiagnosisRecord = {
id: string;
userId: string;
predictedDiseaseSlug: DiseaseSlug | null;
confidence: number | null;
status: DiagnosisStatus;
failureReason: string | null;
imageUrl: string;
uploaderPublicId: string;
imageFileName: string;
imageMimeType: string;
imageSizeBytes: number;
createdAt: string;
updatedAt: string;
disease: DiseaseCatalogItem | null;
predictions: DiagnosisPrediction[];
latestReview: ExpertReviewRecord | null;
};
export type ReviewDiagnosisRequest = {
verdict: 'verified' | 'corrected';
correctedDiseaseSlug?: DiseaseSlug;
notes: string;
};
export type DashboardSummary = {
diseaseCount: number;
classificationCount: number;
imageClassificationCount: number;
needsReviewCount: number;
riskDistribution: {
low: number;
medium: number;
high: number;
};
latestClassification: ManualClassificationRecord | null;
latestDiagnosis: DiagnosisRecord | null;
};
export type ImageClassificationRecord = { export type ImageClassificationRecord = {
id: string; id: string;
predictedDiseaseSlug: DiseaseSlug; predictedDiseaseSlug: DiseaseSlug;
@@ -48,10 +138,3 @@ export type ImageClassificationRecord = {
createdAt: string; createdAt: string;
disease: DiseaseCatalogItem; disease: DiseaseCatalogItem;
}; };
export type DashboardSummary = {
diseaseCount: number;
classificationCount: number;
latestClassification: ManualClassificationRecord | null;
riskDistribution: Record<RiskLevel, number>;
};
+12
View File
@@ -23,4 +23,16 @@ export type {
PredictionProbability, PredictionProbability,
UploaderMetadata, UploaderMetadata,
ImageClassificationRecord, ImageClassificationRecord,
DiagnosisStatus,
UserRole,
AuthUser,
AuthFeatures,
AuthMeResponse,
AuthRequest,
RegisterRequest,
AuthResponse,
DiagnosisPrediction,
ExpertReviewRecord,
DiagnosisRecord,
ReviewDiagnosisRequest,
} from './classifications'; } from './classifications';