diff --git a/messages/de.json b/messages/de.json
index d768ca862..9e517ee7c 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -1476,6 +1476,11 @@
"evening": "Abends",
"night": "Nachts"
},
+ "overrideHint": "Optional — für diese Uhrzeit eine abweichende Dosis oder Stückzahl festlegen. Leer lassen, um den Standard des Medikaments zu verwenden.",
+ "doseOverrideLabel": "Dosis für diese Uhrzeit (optional)",
+ "doseOverridePlaceholder": "z. B. eine halbe Tablette",
+ "unitsOverrideLabel": "Verbrauchte Einheiten zu dieser Uhrzeit",
+ "unitsOverrideInherit": "Standard",
"short": "Zeiten"
},
"step8": {
@@ -2061,6 +2066,7 @@
"logInjectionSiteConfirm": "Stelle speichern",
"logInjectionSiteNoneAvailable": "Keine Injektionsstelle verfügbar — alle Stellen sind in deinen Einstellungen ausgeschlossen.",
"logInjectionSiteSaveFailed": "Injektionsstelle konnte nicht gespeichert werden. Bitte versuche es erneut.",
+ "perSlotUnits": "{units} pro Dosis",
"trackInjectionSitesToggle": "Injektionsstellen erfassen",
"trackInjectionSitesHint": "Nach einer eingenommenen Dosis nach der verwendeten Stelle fragen und die nächste Rotation vorschlagen.",
"allowedSitesLabel": "Erlaubte Stellen",
diff --git a/messages/en.json b/messages/en.json
index 856b6bd93..9d5cbbf28 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -1476,6 +1476,11 @@
"evening": "Evening",
"night": "Night"
},
+ "overrideHint": "Optional — set a different dose or unit count just for this time of day. Leave blank to use the medication's default.",
+ "doseOverrideLabel": "Dose for this time (optional)",
+ "doseOverridePlaceholder": "e.g. half a tablet",
+ "unitsOverrideLabel": "Units consumed at this time",
+ "unitsOverrideInherit": "Default",
"short": "Times"
},
"step8": {
@@ -2061,6 +2066,7 @@
"logInjectionSiteConfirm": "Save site",
"logInjectionSiteNoneAvailable": "No injection site is available — every site is excluded in your settings.",
"logInjectionSiteSaveFailed": "Could not save the injection site. Please try again.",
+ "perSlotUnits": "{units} per dose",
"trackInjectionSitesToggle": "Track injection sites",
"trackInjectionSitesHint": "After a dose is taken, ask which site was used and suggest the next rotation.",
"allowedSitesLabel": "Allowed sites",
diff --git a/messages/es.json b/messages/es.json
index 1848d62e2..c82713070 100644
--- a/messages/es.json
+++ b/messages/es.json
@@ -1476,6 +1476,11 @@
"evening": "Tarde",
"night": "Noche"
},
+ "overrideHint": "Opcional: define una dosis o un número de unidades distinto solo para esta hora. Déjalo en blanco para usar el valor predeterminado del medicamento.",
+ "doseOverrideLabel": "Dosis para esta hora (opcional)",
+ "doseOverridePlaceholder": "p. ej. media pastilla",
+ "unitsOverrideLabel": "Unidades consumidas a esta hora",
+ "unitsOverrideInherit": "Predeterminado",
"short": "Horas"
},
"step8": {
@@ -2061,6 +2066,7 @@
"logInjectionSiteConfirm": "Guardar sitio",
"logInjectionSiteNoneAvailable": "No hay ningún sitio de inyección disponible: todos los sitios están excluidos en tu configuración.",
"logInjectionSiteSaveFailed": "No se pudo guardar el sitio de inyección. Inténtalo de nuevo.",
+ "perSlotUnits": "{units} por dosis",
"trackInjectionSitesToggle": "Registrar sitios de inyección",
"trackInjectionSitesHint": "Tras administrar una dosis, pregunta qué sitio se usó y sugiere la siguiente rotación.",
"allowedSitesLabel": "Sitios permitidos",
diff --git a/messages/fr.json b/messages/fr.json
index b11b10ec5..ccd97dac0 100644
--- a/messages/fr.json
+++ b/messages/fr.json
@@ -1476,6 +1476,11 @@
"evening": "Soir",
"night": "Nuit"
},
+ "overrideHint": "Facultatif — définissez une dose ou un nombre d'unités différent pour cet horaire uniquement. Laissez vide pour utiliser la valeur par défaut du médicament.",
+ "doseOverrideLabel": "Dose pour cet horaire (facultatif)",
+ "doseOverridePlaceholder": "ex. un demi-comprimé",
+ "unitsOverrideLabel": "Unités consommées à cet horaire",
+ "unitsOverrideInherit": "Par défaut",
"short": "Heures"
},
"step8": {
@@ -2061,6 +2066,7 @@
"logInjectionSiteConfirm": "Enregistrer le site",
"logInjectionSiteNoneAvailable": "Aucun site d'injection disponible — tous les sites sont exclus dans vos réglages.",
"logInjectionSiteSaveFailed": "Impossible d’enregistrer le site d’injection. Veuillez réessayer.",
+ "perSlotUnits": "{units} par dose",
"trackInjectionSitesToggle": "Suivre les sites d'injection",
"trackInjectionSitesHint": "Après la prise d'une dose, demander quel site a été utilisé et suggérer la prochaine rotation.",
"allowedSitesLabel": "Sites autorisés",
diff --git a/messages/it.json b/messages/it.json
index 25df4a7ab..b0b95afe3 100644
--- a/messages/it.json
+++ b/messages/it.json
@@ -1476,6 +1476,11 @@
"evening": "Sera",
"night": "Notte"
},
+ "overrideHint": "Facoltativo: imposta una dose o un numero di unità diverso solo per questo orario. Lascia vuoto per usare il valore predefinito del farmaco.",
+ "doseOverrideLabel": "Dose per questo orario (facoltativo)",
+ "doseOverridePlaceholder": "es. mezza compressa",
+ "unitsOverrideLabel": "Unità consumate a questo orario",
+ "unitsOverrideInherit": "Predefinito",
"short": "Orari"
},
"step8": {
@@ -2061,6 +2066,7 @@
"logInjectionSiteConfirm": "Salva il sito",
"logInjectionSiteNoneAvailable": "Nessun sito di iniezione disponibile: tutti i siti sono esclusi nelle tue impostazioni.",
"logInjectionSiteSaveFailed": "Impossibile salvare il sito di iniezione. Riprova.",
+ "perSlotUnits": "{units} per dose",
"trackInjectionSitesToggle": "Registra i siti di iniezione",
"trackInjectionSitesHint": "Dopo l'assunzione di una dose, chiedi quale sito è stato usato e suggerisci la rotazione successiva.",
"allowedSitesLabel": "Siti consentiti",
diff --git a/messages/pl.json b/messages/pl.json
index d27c7ecd8..cf7ab2e7d 100644
--- a/messages/pl.json
+++ b/messages/pl.json
@@ -1476,6 +1476,11 @@
"evening": "Wieczór",
"night": "Noc"
},
+ "overrideHint": "Opcjonalnie — ustaw inną dawkę lub liczbę jednostek tylko dla tej pory. Pozostaw puste, aby użyć wartości domyślnej leku.",
+ "doseOverrideLabel": "Dawka dla tej pory (opcjonalnie)",
+ "doseOverridePlaceholder": "np. pół tabletki",
+ "unitsOverrideLabel": "Jednostki zużyte o tej porze",
+ "unitsOverrideInherit": "Domyślnie",
"short": "Godziny"
},
"step8": {
@@ -2061,6 +2066,7 @@
"logInjectionSiteConfirm": "Zapisz miejsce",
"logInjectionSiteNoneAvailable": "Brak dostępnego miejsca iniekcji — wszystkie miejsca są wykluczone w Twoich ustawieniach.",
"logInjectionSiteSaveFailed": "Nie udało się zapisać miejsca iniekcji. Spróbuj ponownie.",
+ "perSlotUnits": "{units} na dawkę",
"trackInjectionSitesToggle": "Rejestruj miejsca iniekcji",
"trackInjectionSitesHint": "Po przyjęciu dawki zapytaj, którego miejsca użyto, i zaproponuj kolejną rotację.",
"allowedSitesLabel": "Dozwolone miejsca",
diff --git a/src/components/medications/wizard/steps/step7-times.tsx b/src/components/medications/wizard/steps/step7-times.tsx
index 696781be9..14109c771 100644
--- a/src/components/medications/wizard/steps/step7-times.tsx
+++ b/src/components/medications/wizard/steps/step7-times.tsx
@@ -5,6 +5,10 @@ import { Moon, Sun, Sunrise, Sunset } from "lucide-react";
import { TimesOfDayChips } from "@/components/medications/scheduling/times-of-day-chips";
import { DoseWindowEditor } from "@/components/medications/scheduling/dose-window-editor";
import type { DoseWindowScale } from "@/components/medications/scheduling/dose-window";
+import { Button } from "@/components/ui/button";
+import { Input } from "@/components/ui/input";
+import { Label } from "@/components/ui/label";
+import { UNITS_PER_DOSE_OPTIONS } from "@/components/medications/units-per-dose";
import { useTranslations } from "@/lib/i18n/context";
import type { StepProps } from "./step1-name";
@@ -105,6 +109,73 @@ export function Step7Times({ payload, applyPartial }: StepProps) {
onChange={(doseWindows) => applyPartial({ doseWindows })}
scale={scaleForCadence(payload)}
/>
+
+ {/* #219 — per-schedule dose + units override. Leaving both blank keeps
+ the medication-level values, so a single-dose plan is unchanged; a
+ split plan (a whole tablet in the morning, a half at noon) sets a
+ different value on each schedule of ONE medication. */}
+