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}