diff --git a/messages/de.json b/messages/de.json index e87d07786..ebae2105b 100644 --- a/messages/de.json +++ b/messages/de.json @@ -5077,7 +5077,8 @@ "error": "Export fehlgeschlagen ({code}).", "labs": "Laborwerte", "allergies": "Allergien & Unverträglichkeiten", - "familyHistory": "Familienanamnese" + "familyHistory": "Familienanamnese", + "documentsLink": "Dokumente zum Zeitraum" }, "globalExcludedInjectionSitesLabel": "Global ausgeschlossene Injektionsstellen", "globalExcludedInjectionSitesHint": "Hier gelistete Stellen werden für keine Medikation angeboten und beim Erfassen einer Dosis abgelehnt — auch wenn eine Medikation sie bevorzugt.", @@ -7338,7 +7339,8 @@ "extractFailed": "Der Befund konnte nicht gelesen werden. Versuche ein schärferes Foto.", "pdfNeedsAnthropic": "PDF-Scannen benötigt einen Claude-Bildanbieter; lade stattdessen ein Foto hoch." }, - "loadMoreReadings": "Weitere Werte laden" + "loadMoreReadings": "Weitere Werte laden", + "documentsLink": "Befund-Dokumente" }, "modules": { "cycle": { diff --git a/messages/en.json b/messages/en.json index b3cc97413..046281f2c 100644 --- a/messages/en.json +++ b/messages/en.json @@ -5077,7 +5077,8 @@ "error": "Export failed ({code}).", "labs": "Lab results", "allergies": "Allergies & intolerances", - "familyHistory": "Family history" + "familyHistory": "Family history", + "documentsLink": "Documents for this period" }, "globalExcludedInjectionSitesLabel": "Globally excluded injection sites", "globalExcludedInjectionSitesHint": "Sites listed here are never offered for any medication and rejected when logging a dose, even if a medication prefers them.", @@ -7338,7 +7339,8 @@ "extractFailed": "Couldn't read the report. Try a clearer photo.", "pdfNeedsAnthropic": "PDF scanning needs a Claude vision provider; upload a photo instead." }, - "loadMoreReadings": "Load more readings" + "loadMoreReadings": "Load more readings", + "documentsLink": "Lab report documents" }, "modules": { "cycle": { diff --git a/messages/es.json b/messages/es.json index d5e963770..e128273ad 100644 --- a/messages/es.json +++ b/messages/es.json @@ -5077,7 +5077,8 @@ "error": "Error en la exportación ({code}).", "labs": "Resultados de análisis", "allergies": "Alergias e intolerancias", - "familyHistory": "Antecedentes familiares" + "familyHistory": "Antecedentes familiares", + "documentsLink": "Documentos del período" }, "globalExcludedInjectionSitesLabel": "Sitios de inyección excluidos globalmente", "globalExcludedInjectionSitesHint": "Los sitios listados aquí no se ofrecen para ningún medicamento y se rechazan al registrar una dosis, aunque un medicamento los prefiera.", @@ -7338,7 +7339,8 @@ "extractFailed": "No se pudo leer el informe. Prueba con una foto más nítida.", "pdfNeedsAnthropic": "El escaneo de PDF necesita un proveedor de visión de Claude; sube una foto en su lugar." }, - "loadMoreReadings": "Cargar más mediciones" + "loadMoreReadings": "Cargar más mediciones", + "documentsLink": "Documentos de resultados" }, "modules": { "cycle": { diff --git a/messages/fr.json b/messages/fr.json index 242e6c17b..3116f08d9 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -5077,7 +5077,8 @@ "error": "Échec de l’export ({code}).", "labs": "Résultats d'analyses", "allergies": "Allergies et intolérances", - "familyHistory": "Antécédents familiaux" + "familyHistory": "Antécédents familiaux", + "documentsLink": "Documents de la période" }, "globalExcludedInjectionSitesLabel": "Sites d'injection exclus globalement", "globalExcludedInjectionSitesHint": "Les sites listés ici ne sont proposés pour aucun médicament et sont refusés lors de l'enregistrement d'une dose, même si un médicament les privilégie.", @@ -7338,7 +7339,8 @@ "extractFailed": "Impossible de lire le compte rendu. Essayez une photo plus nette.", "pdfNeedsAnthropic": "Le scan PDF nécessite un fournisseur de vision Claude ; importez plutôt une photo." }, - "loadMoreReadings": "Charger plus de mesures" + "loadMoreReadings": "Charger plus de mesures", + "documentsLink": "Documents de résultats" }, "modules": { "cycle": { diff --git a/messages/it.json b/messages/it.json index 64ff437ad..4a82c1afd 100644 --- a/messages/it.json +++ b/messages/it.json @@ -5077,7 +5077,8 @@ "error": "Esportazione non riuscita ({code}).", "labs": "Risultati degli esami", "allergies": "Allergie e intolleranze", - "familyHistory": "Anamnesi familiare" + "familyHistory": "Anamnesi familiare", + "documentsLink": "Documenti del periodo" }, "globalExcludedInjectionSitesLabel": "Siti di iniezione esclusi globalmente", "globalExcludedInjectionSitesHint": "I siti elencati qui non vengono proposti per alcun farmaco e vengono rifiutati al momento della registrazione di una dose, anche se un farmaco li preferisce.", @@ -7338,7 +7339,8 @@ "extractFailed": "Impossibile leggere il referto. Prova con una foto più nitida.", "pdfNeedsAnthropic": "La scansione PDF richiede un provider di visione Claude; carica invece una foto." }, - "loadMoreReadings": "Carica altre misurazioni" + "loadMoreReadings": "Carica altre misurazioni", + "documentsLink": "Documenti dei referti" }, "modules": { "cycle": { diff --git a/messages/pl.json b/messages/pl.json index df81b83fc..bee86ea6a 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -5077,7 +5077,8 @@ "error": "Eksport nie powiódł się ({code}).", "labs": "Wyniki badań", "allergies": "Alergie i nietolerancje", - "familyHistory": "Wywiad rodzinny" + "familyHistory": "Wywiad rodzinny", + "documentsLink": "Dokumenty z tego okresu" }, "globalExcludedInjectionSitesLabel": "Globalnie wykluczone miejsca iniekcji", "globalExcludedInjectionSitesHint": "Miejsca wymienione tutaj nie są proponowane dla żadnego leku i są odrzucane przy rejestrowaniu dawki, nawet jeśli lek je preferuje.", @@ -7338,7 +7339,8 @@ "extractFailed": "Nie udało się odczytać wyniku. Spróbuj wyraźniejszego zdjęcia.", "pdfNeedsAnthropic": "Skanowanie PDF wymaga dostawcy wizji Claude; prześlij zamiast tego zdjęcie." }, - "loadMoreReadings": "Wczytaj więcej pomiarów" + "loadMoreReadings": "Wczytaj więcej pomiarów", + "documentsLink": "Dokumenty wyników badań" }, "modules": { "cycle": { diff --git a/src/app/labs/page.tsx b/src/app/labs/page.tsx index 20f64999c..f79dd9363 100644 --- a/src/app/labs/page.tsx +++ b/src/app/labs/page.tsx @@ -4,7 +4,15 @@ import { useCallback, useEffect, useState } from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useQueryClient } from "@tanstack/react-query"; -import { Loader2, Pencil, Plus, ScanLine, Wrench } from "lucide-react"; +import { + ArrowRight, + FolderOpen, + Loader2, + Pencil, + Plus, + ScanLine, + Wrench, +} from "lucide-react"; import { LabForm } from "@/components/labs/lab-form"; import { LabList } from "@/components/labs/lab-list"; @@ -27,7 +35,7 @@ import { useTranslations } from "@/lib/i18n/context"; import { queryKeys } from "@/lib/query-keys"; export default function LabsPage() { - const { isAuthenticated, isLoading } = useAuth(); + const { user, isAuthenticated, isLoading } = useAuth(); const mounted = useMounted(); const router = useRouter(); const queryClient = useQueryClient(); @@ -128,6 +136,20 @@ export default function LabsPage() { } /> + {/* Entry point into the document vault, pre-filtered to lab-result + documents (the original report PDFs behind these values). Only + rendered when the documents module is enabled for this account. */} + {user?.modules?.inboundDocuments ? ( + + + {t("labs.documentsLink")} + + + ) : null} + ("pdf"); const [days, setDays] = useState(90); const [practiceName, setPracticeName] = useState(""); @@ -250,6 +259,20 @@ export function HealthRecordExportPanel() { + {/* Entry point into the document vault for the report period + (navigation only — attaching documents to the PDF is a later + phase). Year granularity is what the vault's URL filters + offer; the current year covers the bulk of any range. Only + rendered when the documents module is enabled. */} + {user?.modules?.inboundDocuments ? ( + + + {t("settings.healthRecord.documentsLink")} + + ) : null}