From 8f1308c8af4b513803376c358c22e4e78f73a8fc Mon Sep 17 00:00:00 2001 From: seriouselly Date: Mon, 15 Jun 2026 20:38:26 +0700 Subject: [PATCH 1/2] fix(diagnosis): correct risk level mapping and dynamic confidence UI - Fix `getRiskLevelKey` to properly recognize English risk level values ("low", "high"), preventing "Healthy Leaf" from incorrectly defaulting to medium risk. - Update confidence bar text and colors to dynamically show warning alerts when AI confidence falls below the 75% threshold. --- .../src/components/diagnose-result-view.tsx | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/apps/web/src/components/diagnose-result-view.tsx b/apps/web/src/components/diagnose-result-view.tsx index a120b5b..4691505 100644 --- a/apps/web/src/components/diagnose-result-view.tsx +++ b/apps/web/src/components/diagnose-result-view.tsx @@ -15,7 +15,7 @@ import { RiskBadge } from "@/components/risk-badge"; type Props = { imageUrl: string; - confidence: number; // contoh: 0.95 + confidence: number; diseaseName: string; scientificName: string; riskLevel: string; @@ -42,8 +42,8 @@ export function DiagnosisResultView({ const getRiskLevelKey = (level: string): "low" | "medium" | "high" => { const normalized = level.toLowerCase(); - if (normalized.includes("rendah")) return "low"; - if (normalized.includes("tinggi")) return "high"; + if (normalized.includes("rendah") || normalized === "low") return "low"; + if (normalized.includes("tinggi") || normalized === "high") return "high"; return "medium"; }; @@ -85,18 +85,35 @@ export function DiagnosisResultView({
Tingkat Keyakinan AI - {confidencePercent}% + = 75 + ? "text-emerald-600" + : "text-amber-500" + } + > + {confidencePercent}% +
= 75 ? "bg-emerald-500" : "bg-amber-500" + }`} style={{ width: `${confidencePercent}%` }} >
-

- Di atas ambang batas minimum - (75%) -

+ {confidencePercent >= 75 ? ( +

+ Di atas ambang batas + minimum (75%) +

+ ) : ( +

+ Di bawah ambang batas + minimum (75%) +

+ )}
From b18b98e1a79328f9f1e8db40db514e32f322f5f3 Mon Sep 17 00:00:00 2001 From: seriouselly Date: Mon, 15 Jun 2026 20:54:44 +0700 Subject: [PATCH 2/2] fix(scan): resolve empty medicine data and clean up linter warning - Add local fallback using `diseaseCatalogSeed` to populate medicine recommendations in the diagnosis preview modal when API data is missing. - Remove unused `diagnosesQuery` assignment to resolve SonarLint warning while preserving the background prefetching logic. --- apps/web/src/pages/scan-page.tsx | 66 ++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/apps/web/src/pages/scan-page.tsx b/apps/web/src/pages/scan-page.tsx index 28938ac..24bb9dd 100644 --- a/apps/web/src/pages/scan-page.tsx +++ b/apps/web/src/pages/scan-page.tsx @@ -16,6 +16,7 @@ import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { Modal } from "@/components/ui/modal"; import type { DiagnosisRecord } from "@zeavis/shared"; +import { diseaseCatalogSeed } from "@zeavis/shared"; // Import data seed lokal ditambahkan import { apiClient } from "@/lib/api-client"; import { trackScan, trackDiagnosisResult } from "@/lib/telemetry"; import { DiagnosisResultView } from "../components/diagnose-result-view"; @@ -76,7 +77,7 @@ export function ScanPage() { const [diagnosisPreview, setDiagnosisPreview] = useState(null); - const diagnosesQuery = useQuery({ + useQuery({ queryKey: ["diagnoses"], queryFn: () => apiClient.getDiagnoses(), enabled: previewOpen, @@ -373,29 +374,46 @@ export function ScanPage() {
)} - + {/* Render DiagnosisResultView dengan Fallback Obat */} + {(() => { + // Fallback logic for scientific name and medicine recommendations + const seedData = diagnosisPreview.disease + ? diseaseCatalogSeed.find( + (seed) => + seed.commonName === diagnosisPreview.disease?.commonName, + ) + : null; + + // If the API doesn't return medicine recommendations, use the seed data as a fallback + const finalMedicines = + (diagnosisPreview.disease as any)?.medicineRecommendations || + seedData?.medicineRecommendations || + []; + + return ( + + ); + })()} {/* All Model Predictions */} {diagnosisPreview.predictions &&