{ "scribe": { "recordVisit": "Record visit", "title": "Visit scribe", "subtitle": "Record or paste a visit for {{name}}, then review the drafted note before saving.", "tabs": { "record": "Record", "paste": "Paste transcript" }, "record": { "start": "Start recording", "stop": "Stop", "ready": "Recording ready ({{duration}})", "discard": "Discard" }, "paste": { "placeholder": "Paste the visit transcript here…" }, "visitType": { "label": "Visit type (optional)", "placeholder": "e.g. Follow-up" }, "consent": "The audio is stored on the patient's chart. When you use an external AI provider, the recording leaves the clinic to be transcribed — Veil cannot redact speech, so only the drafted note is de-identified.", "generate": "Draft note", "processing": "Working…", "cancel": "Cancel", "review": { "type": "Visit type", "date": "Date", "summary": "Note", "provider": "Provider: {{provider}}", "veil": "De-identified through Veil before {{provider}}.", "back": "Back", "save": "Save to record" }, "saved": { "title": "Visit note saved" }, "errors": { "mic": "Couldn't access the microphone. Check browser permissions or paste a transcript instead.", "noRecording": "Record the visit first, or switch to the paste tab.", "empty": "The transcript is empty.", "generic": "Something went wrong. Please try again." } }, "walletUpdatesList": { "title": "Updates sent to wallets", "description": "Record updates you've pushed to patient wallets, and whether the patient has approved them.", "none": "You haven't pushed any wallet updates yet." }, "walletPush": { "action": "Push to wallet", "title": "Push update to wallet", "subtitle": "Send {{name}}'s updated record to their wallet app. They must approve it on their phone before it replaces the copy on their device.", "sectionsLabel": "What changed", "sections": { "demographics": "Demographics", "problems": "Problems", "medications": "Medications", "allergies": "Allergies", "labs": "Labs", "vitals": "Vitals", "visits": "Visits" }, "noteLabel": "Note (optional)", "notePlaceholder": "A short note about this update…", "notice": "This sends the full current record, signed with your clinic key. It replaces the patient's on-device copy only after they approve it.", "cancel": "Cancel", "send": "Send update", "done": "Done", "errors": { "generic": "Couldn't send the update. Please try again." }, "status": { "pending": { "title": "Waiting for the patient", "body": "The update was sent. It will arrive on the patient's phone now, or the next time they open the app." }, "delivered": { "title": "Delivered to the phone", "body": "The patient has received the update and needs to approve it on their device." }, "approved": { "title": "Approved by the patient", "body": "The patient approved the update and their on-device record is now up to date." }, "denied": { "title": "Declined by the patient", "body": "The patient declined this update, so their on-device record is unchanged." } } }, "common": { "appName": "temetro", "email": "Email", "password": "Password", "signIn": "Sign in", "signUp": "Sign up", "backToSignIn": "Back to sign in", "addedByAi": "Added by AI", "pagination": { "label": "Pages", "previous": "Previous", "next": "Next", "page": "Page {{page}}", "summary": "Showing {{from}}–{{to}} of {{total}}" } }, "auth": { "login": { "title": "Welcome back", "subtitle": "Sign in to your clinician account", "tabEmail": "Email", "tabUsername": "Username", "emailLabel": "Email", "emailPlaceholder": "you@clinic.org", "usernameLabel": "Username", "usernamePlaceholder": "jdoe", "passwordLabel": "Password", "forgotPassword": "Forgot your password?", "submit": "Sign in", "submitting": "Signing in…", "noAccount": "Don't have an account?", "signUpLink": "Sign up", "error": "Could not sign in. Check your email and password and try again.", "errorTitle": "Sign in failed", "welcomeBack": "Welcome back" }, "signup": { "title": "Create your account", "subtitle": "Start using temetro in your clinic", "nameLabel": "Full name", "namePlaceholder": "Dr. Jane Okafor", "emailLabel": "Email", "emailPlaceholder": "you@clinic.org", "passwordLabel": "Password", "confirmPasswordLabel": "Confirm password", "passwordHint": "Must be at least {{count}} characters long.", "passwordTooShort": "Password must be at least {{count}} characters.", "passwordMismatch": "Passwords do not match.", "submit": "Create account", "submitting": "Creating account…", "haveAccount": "Already have an account?", "signInLink": "Sign in", "error": "Could not create your account.", "errorTitle": "Sign up failed", "created": "Account created", "createdHint": "Set up your clinic to get started." }, "verifyEmail": { "title": "Check your inbox", "subtitle": "We sent a verification link to {{email}}. Open it to activate your account.", "subtitleNoEmail": "Open the verification link we emailed you to activate your account.", "continue": "I've verified — continue", "resend": "Resend email", "resending": "Sending…", "resent": "Verification email sent. Check your inbox.", "resendError": "Could not resend the verification email." }, "forgotPassword": { "title": "Reset your password", "subtitle": "We'll send a link to reset your password", "modeEmail": "Email", "modeUsername": "Username", "emailLabel": "Email", "emailPlaceholder": "you@clinic.org", "usernameLabel": "Username", "usernamePlaceholder": "your username", "submit": "Send reset link", "submitting": "Sending…", "sent": "If an account exists for {{email}}, a reset link is on its way. Check your inbox.", "sentUsername": "If that username exists, a reset link is on its way. If you don't have an inbox, your clinic admin has been notified to set a new password for you.", "error": "Could not send the reset email.", "failedToastTitle": "Couldn't send reset link", "sentToastTitle": "Reset link sent", "sentToastBody": "Check your inbox for the link." }, "resetPassword": { "title": "Set a new password", "subtitle": "Choose a new password for your account", "passwordLabel": "New password", "confirmLabel": "Confirm new password", "passwordHint": "At least {{count}} characters.", "submit": "Reset password", "submitting": "Saving…", "done": "Your password has been reset. Redirecting you to sign in…", "invalidToken": "This reset link is invalid or has expired.", "tooShort": "Password must be at least {{count}} characters.", "mismatch": "Passwords do not match.", "error": "Could not reset your password.", "failedToastTitle": "Couldn't reset password", "successToastTitle": "Password updated", "successToastBody": "Redirecting you to sign in…" }, "acceptInvite": { "notFoundTitle": "Invitation not found", "notFoundBody": "This invitation link is missing or invalid.", "invitedTitle": "You've been invited", "invitedSubtitle": "Sign in with the email this invitation was sent to, then return to this link to accept.", "signIn": "Sign in", "createAccount": "Create an account", "reopenPrefix": "After signing in, reopen", "reopenLink": "this invitation link", "acceptTitle": "Accept your invitation", "acceptSubtitle": "Join the clinic you were invited to on temetro.", "accept": "Accept invitation", "accepting": "Joining…", "error": "This invitation is invalid or has expired." }, "onboarding": { "title": "Set up your clinic", "subtitle": "Create your clinic to start organizing patient records" } }, "nav": { "newChat": "Ask temetro", "patients": "Patients", "appointments": "Appointments", "invoices": "Invoices", "prescriptions": "Prescriptions", "analysis": "Analysis", "pharmacy": "Pharmacy", "inventory": "Inventory", "lab": "Lab", "notes": "Notes", "messages": "Messages", "inbox": "Inbox", "meetings": "Meetings", "tasks": "Tasks", "activity": "Activity", "settings": "Settings", "openSidebar": "Open menu", "notifications": "Notifications", "notificationsEmpty": "You're all caught up.", "quickNav": "Quick nav", "commandGroup": "Go to", "commandPlaceholder": "Search pages…", "commandEmpty": "No results.", "commandNavigate": "Navigate", "commandOpen": "Open", "commandClose": "Close" }, "userMenu": { "defaultName": "Clinician", "selectClinic": "Select clinic", "settings": "Settings", "docs": "Docs & GitHub", "theme": "Theme", "dark": "Dark", "light": "Light", "search": "Search", "noClinic": "No clinic selected", "clinicCount_one": "{{count}} clinic", "clinicCount_other": "{{count}} clinics", "switchClinic": "Switch clinic", "createClinic": "Create clinic", "logout": "Log out", "createDialogTitle": "Create clinic", "createDialogDescription": "Add a new clinic and switch to it.", "signOutFailed": "Sign out failed", "tryAgain": "Please try again.", "signedOut": "Signed out", "language": "Language" }, "clinic": { "create": "Create clinic", "creating": "Creating clinic…", "nameLabel": "Clinic name", "namePlaceholder": "North Side Family Practice", "slugLabel": "Clinic URL slug", "slugPlaceholder": "north-side-family-practice", "slugHint": "Used in links and invitations. Lowercase letters, numbers and dashes.", "createError": "Could not create the clinic.", "createFailedTitle": "Couldn't create clinic", "createdTitle": "Clinic created", "createdBody": "{{name}} is ready." }, "patients": { "title": "Patients", "searchPlaceholder": "Search name or MRN", "add": "Add patient", "newPatient": "New patient", "importFromApp": "Import from a patient app", "tempBadge": "Temporary", "importApp": { "title": "Import from a patient app", "description": "Enter the patient's wallet number. They'll get a request on their phone to approve sharing their record with this clinic.", "tabNumber": "By number", "tabQr": "Show QR", "qrHint": "Generate a QR code, then have the patient scan it in their wallet app to share their record.", "qrCaption": "Scan this in the patient app", "generateQr": "Show QR code", "walletLabel": "Patient wallet number", "walletPlaceholder": "tmw_…", "tempLabel": "Share temporarily", "tempHint": "The record is automatically deleted from this clinic when the share window ends.", "durationLabel": "Share for", "hours": "{{count}} hour", "hours_other": "{{count}} hours", "days": "{{count}} day", "days_other": "{{count}} days", "request": "Send request", "requesting": "Sending…", "waitingTitle": "Waiting for the patient", "waitingBody": "We've sent a request to the wallet. Approve it on the patient's device to continue.", "approvedTitle": "Patient approved", "approvedBody": "Review the shared record, then save it to this clinic.", "review": "Review record", "deniedTitle": "Request declined", "deniedBody": "The patient declined to share their record.", "expiredTitle": "Request expired", "expiredBody": "The request timed out before the patient responded.", "invalidWallet": "That doesn't look like a valid wallet number.", "networkOff": "Join the Temetro Network first (Settings → Signing) to share with patient apps.", "errorTitle": "Couldn't reach the wallet", "error": "Please check the wallet number and try again.", "savedTitle": "Patient imported", "savedBody": "{{name}} was added to this clinic.", "cancel": "Cancel", "close": "Close" }, "loading": "Loading patients…", "empty": "No patients found.", "loadError": "Failed to load patients.", "columns": { "name": "Name", "mrn": "MRN", "ageSex": "Age · Sex", "status": "Status", "lastSeen": "Last seen", "allergies": "Allergies" }, "status": { "active": "Active", "inpatient": "Inpatient", "discharged": "Discharged" }, "detail": { "notFound": "Patient not found", "loading": "Loading patient…", "noPatientForFile": "No patient found for file #{{number}}." }, "transfer": { "action": "Transfer", "title": "Transfer patient", "description": "Reassign {{name}} to another clinician. They become this patient's primary provider.", "providerLabel": "New primary provider", "choose": "Choose a provider…", "cancel": "Cancel", "confirm": "Transfer patient", "transferring": "Transferring…", "successTitle": "Patient transferred", "successBody": "{{name}} is now with {{provider}}.", "errorTitle": "Couldn't transfer patient", "error": "Please try again." }, "delete": { "action": "Delete patient", "title": "Delete patient?", "body": "Permanently delete {{name}}'s chart and all of its records. This cannot be undone.", "confirm": "Delete patient", "cancel": "Cancel", "doneTitle": "Patient deleted", "failedTitle": "Couldn't delete patient", "failedBody": "Please try again." }, "filterStatus": "Filter by status", "allStatuses": "All statuses" }, "appointments": { "title": "Appointments & Schedule", "subtitle": "Today's clinic schedule and what's coming up.", "searchPlaceholder": "Search patient, type, provider", "calendar": "Calendar", "add": "Add", "noMatches": "No matching appointments.", "today": "Today", "nothingToday": "Nothing scheduled today.", "addFailedTitle": "Couldn't add appointment", "addFailedBody": "Please try again.", "kpi": { "today": "Today", "thisWeek": "This week", "checkedIn": "Checked in", "completed": "Completed" }, "status": { "confirmed": "Confirmed", "checked-in": "Checked in", "completed": "Completed", "cancelled": "Cancelled" }, "dialog": { "title": "New appointment", "description": "Search for a patient by name or file number, then set the slot.", "patient": "Patient", "fileNumber": "File #{{number}}", "change": "Change", "searchPlaceholder": "Search name or file number", "noPatients": "No patients found.", "noProviders": "No doctors found.", "date": "Date", "time": "Time", "type": "Type", "provider": "Provider", "providerPlaceholder": "e.g. Dr. Okafor", "cancel": "Cancel", "submit": "Add appointment", "pickPatientTitle": "Pick a patient", "pickPatientBody": "Search and select a patient first.", "addedTitle": "Appointment added" }, "sheet": { "title": "Appointment", "editHint": "Click any appointment to edit — this is enabled.", "date": "Date", "time": "Time", "type": "Type", "provider": "Provider", "status": "Status", "save": "Save changes", "saving": "Saving…", "delete": "Delete", "savedTitle": "Appointment updated", "savedBody": "Your changes were saved.", "saveFailedTitle": "Couldn't save", "saveFailedBody": "Please try again.", "deletedTitle": "Appointment deleted", "deleteFailedTitle": "Couldn't delete", "deleteFailedBody": "Please try again." }, "calendarDialog": { "today": "Today", "appointmentCount_one": "{{count}} appointment", "appointmentCount_other": "{{count}} appointments", "none": "No appointments on this day." } }, "invoices": { "title": "Invoices", "subtitle": "Patient billing — create, split, and export invoices.", "searchPlaceholder": "Search patient, number, status", "new": "New invoice", "empty": "No invoices yet.", "noMatches": "No invoices match your search.", "loadError": "Couldn't load invoices.", "recent": "Invoices", "recentDescription": "Most recent first", "addFailedTitle": "Couldn't save invoice", "addFailedBody": "Please try again.", "kpi": { "outstanding": "Outstanding", "paid": "Paid", "drafts": "Drafts" }, "status": { "draft": "Draft", "sent": "Sent", "paid": "Paid", "void": "Void" }, "dialog": { "createTitle": "New invoice", "editTitle": "Edit invoice", "description": "Pick a patient and add line items.", "patient": "Patient", "searchPlaceholder": "Search name or file number", "noPatients": "No patients found.", "fileNumber": "File #{{number}}", "change": "Change", "issued": "Issued", "backdate": "Back-date", "due": "Due date", "status": "Status", "notes": "Notes", "notesPlaceholder": "Optional notes…", "lineItems": "Line items", "lineDescription": "Description", "lineDescriptionPlaceholder": "e.g. Consultation", "qty": "Qty", "unitPrice": "Unit price", "addLine": "Add line", "total": "Total", "cancel": "Cancel", "create": "Create invoice", "save": "Save changes", "saving": "Saving…", "pickPatientTitle": "Pick a patient", "pickPatientBody": "Search and select a patient first." }, "sheet": { "fallbackTitle": "Invoice", "issued": "Issued", "due": "Due", "status": "Status", "total": "Total", "lineItems": "Line items", "installments": "Installments", "noInstallments": "Not split into installments.", "split": "Split into installments", "splitTitle": "Split invoice", "splitBody": "Divide the total into equal monthly installments.", "splitCount": "Installments", "splitConfirm": "Split", "download": "Download PDF", "edit": "Edit", "delete": "Delete", "deletedTitle": "Invoice deleted", "splitFailedTitle": "Couldn't split invoice", "splitFailedBody": "Please try again.", "deleteFailedTitle": "Couldn't delete invoice", "deleteFailedBody": "Please try again.", "paid": "Paid", "unpaid": "Unpaid", "markPaid": "Mark paid", "paidTitle": "Invoice marked paid", "payFailedTitle": "Couldn't record payment", "payFailedBody": "Please try again.", "payInstallment": "Pay", "installmentPaid": "Paid", "installmentPaidTitle": "Installment paid", "overdue": "Overdue", "timeframe": "{{count}} payments · due through {{date}}" } }, "prescriptions": { "title": "Prescriptions", "subtitle": "Medications prescribed across the clinic.", "new": "New prescription", "recent": "Recent prescriptions", "recentDescription": "Most recent first", "searchPlaceholder": "Search patient, medication, prescriber", "noMatches": "No prescriptions match your search.", "emptyList": "No prescriptions yet.", "addFailedTitle": "Couldn't add prescription", "addFailedBody": "Please try again.", "kpi": { "active": "Active", "completed": "Completed", "expired": "Expired" }, "status": { "active": "Active", "completed": "Completed", "expired": "Expired" }, "detail": { "fallbackTitle": "Prescription", "fileNumber": "File #{{number}}", "medication": "Medication", "dose": "Dose", "frequency": "Frequency", "duration": "Duration", "prescriber": "Prescriber", "date": "Date", "status": "Status", "notes": "Notes", "courseDates": "Course", "delete": "Delete prescription" }, "delete": { "title": "Delete prescription?", "body": "Permanently delete the {{medication}} prescription for {{name}}. This cannot be undone.", "confirm": "Delete", "cancel": "Cancel", "doneTitle": "Prescription deleted", "failedTitle": "Couldn't delete prescription", "failedBody": "Please try again." }, "dialog": { "title": "New prescription", "description": "Search for a patient by name or file number, then set the medication.", "patient": "Patient", "fileNumber": "File #{{number}}", "change": "Change", "searchPlaceholder": "Search name or file number", "noPatients": "No patients found.", "medication": "Medication", "medicationPlaceholder": "e.g. Amoxicillin", "dose": "Dose", "dosePlaceholder": "e.g. 500 mg", "frequency": "Frequency", "duration": "Duration", "durationOtherPlaceholder": "e.g. 21 days", "notes": "Notes", "notesPlaceholder": "Instructions, e.g. take with food in the morning", "interactionTitle": "Possible interaction", "cancel": "Cancel", "submit": "Add prescription", "pickPatientTitle": "Pick a patient", "pickPatientBody": "Search and select a patient first.", "needMedTitle": "Add a medication", "needMedBody": "Enter the medication name.", "needDurationTitle": "Add a duration", "needDurationBody": "Enter the custom duration.", "addedTitle": "Prescription added", "badDatesTitle": "Check the dates", "badDatesBody": "The end date can't be before the start date.", "outOfStock": "Out of stock", "inStock": "{{count}} in stock", "courseDates": "Course dates", "removeDates": "Remove", "startDate": "Start date", "endDate": "End date", "addDates": "Add start/end dates", "selectDate": "Select date" } }, "pharmacy": { "title": "Pharmacy", "subtitle": "Dispensing queue for the clinic's prescriptions.", "searchPlaceholder": "Search prescriptions", "kpi": { "active": "Active prescriptions", "expiring": "Expiring soon", "patients": "Patients on medication" }, "queue": { "title": "Dispensing queue", "description": "Active prescriptions, oldest first. Mark a course completed once dispensed.", "empty": "No active prescriptions.", "noMatches": "No prescriptions match your search." }, "expiringBadge": "Expiring", "markCompleted": "Mark completed", "completedTitle": "Prescription completed", "completedBody": "{{medication}} for {{name}} marked as completed.", "completeFailedTitle": "Couldn't update prescription", "completeFailedBody": "Please try again.", "dispense": "Dispense", "dispensedTitle": "Dispensed", "dispensedBody": "{{medication}} dispensed to {{name}}.", "dispensed": { "title": "Recently dispensed", "description": "Medications handed to patients at the pharmacy.", "empty": "Nothing dispensed yet.", "delete": "Delete record", "deleteTitle": "Delete dispense record?", "deleteBody": "Remove the {{medication}} dispense record for {{name}}. This only corrects the ledger.", "deleteConfirm": "Delete", "deleteCancel": "Cancel", "deletedTitle": "Dispense record deleted", "deleteFailedTitle": "Couldn't delete record", "deleteFailedBody": "Please try again." } }, "inventory": { "title": "Inventory", "subtitle": "Search the pharmacy's medication stock and check availability.", "searchPlaceholder": "Search medications", "kpi": { "total": "Medications in stock", "low": "Low stock", "out": "Out of stock" }, "list": { "title": "Medications", "description": "Current stock levels across the pharmacy. Items at or below their reorder point are flagged.", "empty": "No medications in inventory yet.", "noMatches": "No medications match your search." }, "stock": "{{count}} {{unit}}", "reorderAt": "Reorder at {{count}}", "location": "Shelf {{location}}", "availability": { "in-stock": "In stock", "low": "Low stock", "out": "Out of stock" }, "addItem": "Add item", "dialog": { "title": "Add inventory item", "description": "Add a medication to the pharmacy's stock. Only the name is required.", "name": "Medication", "namePlaceholder": "e.g. Amoxicillin", "form": "Form", "formPlaceholder": "e.g. Tablet", "strength": "Strength", "strengthPlaceholder": "e.g. 500mg", "stock": "In stock", "unit": "Unit", "unitPlaceholder": "e.g. tablets", "reorder": "Reorder at", "location": "Location", "locationPlaceholder": "e.g. A3", "expires": "Expires", "cancel": "Cancel", "submit": "Add item", "nameRequiredTitle": "Medication name required", "nameRequiredBody": "Enter a medication name before adding the item.", "addedTitle": "Item added", "failedTitle": "Could not add item", "failedBody": "Something went wrong. Please try again." }, "detail": { "description": "Stock item", "notes": "Notes", "close": "Close", "delete": "Delete item" }, "delete": { "title": "Delete inventory item?", "body": "Permanently delete {{name}} from inventory. This cannot be undone.", "confirm": "Delete", "cancel": "Cancel", "doneTitle": "Item deleted", "failedTitle": "Couldn't delete item", "failedBody": "Please try again." } }, "lab": { "title": "Lab", "subtitle": "The lab's work queue and analysis results.", "queue": { "title": "Work queue", "description": "Tasks assigned to the Lab department.", "empty": "No lab tasks right now.", "noNotes": "No details provided.", "meta": { "status": "Status", "patient": "Patient", "assignee": "Assignee", "createdBy": "Created by" } }, "addResult": { "button": "Add result", "title": "Add analysis result", "description": "Record an analysis performed in the lab on a patient's record.", "patient": "Patient", "patientPlaceholder": "Search by name or file number", "noPatients": "No patients match your search.", "changePatient": "Change", "test": "Test", "testPlaceholder": "e.g. Hemoglobin", "value": "Value", "valuePlaceholder": "e.g. 14.2 g/dL", "valueUnitPlaceholder": "e.g. value in {{unit}}", "flag": "Flag", "takenAt": "Date", "advanced": "Advanced", "advancedHint": "Record a custom analysis with a reference range.", "refRange": "Reference range", "refRangePlaceholder": "e.g. 13.0–17.0 g/dL", "files": "Analysis files", "cancel": "Cancel", "submit": "Add result", "needPatientTitle": "Pick a patient", "needPatientBody": "Search and select a patient first.", "needFieldsTitle": "Missing details", "needFieldsBody": "Enter the test name and its value.", "addedTitle": "Result added", "addedBody": "{{test}} added to {{name}}'s record.", "failedTitle": "Couldn't add the result", "failedBody": "Please try again." }, "recent": { "title": "Recent results", "description": "Analyses recorded on patient records, newest first.", "empty": "No results recorded yet.", "delete": "Delete result", "deleteTitle": "Delete lab result?", "deleteBody": "Remove the {{test}} result from {{name}}'s record. This cannot be undone.", "deleteConfirm": "Delete", "deleteCancel": "Cancel", "deletedTitle": "Result deleted", "deletedBody": "Removed {{test}} from {{name}}'s record.", "deleteFailedTitle": "Couldn't delete result", "deleteFailedBody": "Please try again." }, "toast": { "updateFailedTitle": "Couldn't update the task", "updateFailedBody": "Please try again." } }, "tasks": { "title": "Tasks", "subtitle": "Care-team to-dos. Click a task to see its details.", "new": "New task", "empty": "No tasks here.", "markDone": "Mark as done", "markNotDone": "Mark as not done", "status": { "todo": "To Do", "in_progress": "In Progress", "done": "Done" }, "board": { "addTask": "Add task", "moveTo": "Move to", "emptyColumn": "No tasks.", "newTask": "New task" }, "filters": { "all": "All", "open": "Open", "done": "Done" }, "priority": { "high": "High", "medium": "Medium", "low": "Low" }, "dialog": { "title": "New task", "description": "Assign a follow-up to the care team.", "subject": "Subject", "subjectPlaceholder": "e.g. Review lab results", "details": "Details — what needs to be done", "detailsPlaceholder": "Describe what needs to happen, any context, links…", "assignee": "Assignee", "assigneeSelf": "Myself", "assigneeOther": "Other", "department": "Department", "due": "Due", "duePlaceholder": "e.g. Today", "priorityLabel": "Priority", "statusLabel": "Status", "cancel": "Cancel", "add": "Add task", "assigneeDepartment": "Department", "assigneePerson": "Person", "person": "Team member", "personEmpty": "No clinicians available to assign." }, "list": { "forDept": "For {{dept}}", "personal": "Personal", "byCreator": "by {{name}}", "forPerson": "For {{name}}" }, "detail": { "fallbackTitle": "Task", "priorityBadge": "{{priority}} priority", "status": "Status", "completed": "Completed", "open": "Open", "assignedTo": "Assigned to", "createdBy": "Created by", "deptTeam": "{{dept}} team", "personal": "Personal task", "due": "Due", "patient": "Patient", "details": "Details", "reopen": "Reopen task", "complete": "Mark complete", "moveTo": "Move to", "delete": "Delete task" }, "delete": { "title": "Delete task?", "body": "Permanently delete \"{{title}}\". This cannot be undone.", "confirm": "Delete", "cancel": "Cancel", "doneTitle": "Task deleted", "failedTitle": "Couldn't delete task", "failedBody": "Please try again." }, "toast": { "needSubjectTitle": "Add a subject", "needSubjectBody": "Describe the task first.", "addedTitle": "Task added", "addFailedTitle": "Couldn't add task", "addFailedBody": "Please try again.", "updateFailedTitle": "Couldn't update task", "updateFailedBody": "Please try again.", "needPersonTitle": "Pick a team member", "needPersonBody": "Choose who this task is for." } }, "meetings": { "rooms": "Rooms", "newRoom": "New room", "newRoomDescription": "Create a voice/video room your team can join.", "roomNameLabel": "Room name", "roomNamePlaceholder": "e.g. Morning huddle", "noRooms": "No rooms yet. Create one to start a call.", "create": "Create", "creating": "Creating…", "cancel": "Cancel", "createFailedTitle": "Couldn't create room", "createFailedBody": "Please try again.", "deleteRoom": "Delete room", "deleting": "Deleting…", "deleteRoomConfirmTitle": "Delete this room?", "deleteRoomConfirmBody": "“{{name}}” will be removed for everyone. Anyone currently in the call will be disconnected.", "deleteFailedTitle": "Couldn't delete room", "deleteFailedBody": "Please try again.", "emptyTitle": "No room selected", "emptyDescription": "Pick a room to join the call, or create a new one.", "you": "You", "guest": "Guest", "inCall": "{{count}} in call", "connecting": "Connecting…", "roomFull": "Room is full (max {{max}}).", "callError": "Couldn't start the call. Check camera/mic permissions.", "muteMic": "Mute microphone", "unmuteMic": "Unmute microphone", "startVideo": "Start video", "stopVideo": "Stop video", "shareScreen": "Share screen", "leave": "Leave call", "calendar": "Calendar", "calendarEmpty": "No meetings on this day.", "invite": { "add": "Add people", "title": "Invite to call", "description": "Ring a team member into {{room}}.", "search": "Search team…", "noMembers": "No other members.", "ring": "Ring", "invited": "Invited", "join": "Join", "toastTitle": "{{name}} invited you to a call", "accept": "Accept", "decline": "Decline" }, "schedule": { "cta": "Schedule meeting", "title": "Schedule a meeting", "description": "Plan a meeting and invite your team.", "titleLabel": "Title", "titlePlaceholder": "e.g. Weekly sync", "date": "Date", "time": "Time", "participants": "Participants", "save": "Schedule", "saving": "Scheduling…", "failedTitle": "Couldn't schedule meeting", "failedBody": "Please try again." }, "calendarEmptyHint": "Schedule a meeting to see it on this day.", "upcoming": { "title": "Upcoming", "empty": "No upcoming meetings." } }, "messages": { "inbox": "Inbox", "unread": "Unread · {{count}}", "newMessage": "New message", "searchPlaceholder": "Search conversations", "noMatches": "No conversations match your search.", "noUnread": "No unread messages.", "noConversations": "No conversations yet.", "you": "You: ", "directMessage": "Direct message", "peopleCount": "{{count}} people", "messagePlaceholder": "Message {{name}}…", "send": "Send", "emptyTitle": "No conversation selected", "emptyDescription": "Choose a conversation from the inbox, or start a new one.", "startConversation": "Start a conversation", "today": "Today", "yesterday": "Yesterday", "compose": { "title": "New message", "description": "Start a conversation with a member of your clinic.", "searchPlaceholder": "Search people", "noMatches": "No people match your search.", "noMembers": "No other clinic members yet. Invite colleagues from Settings → Care team." }, "startFailedTitle": "Couldn't start conversation", "startFailedBody": "Please try again.", "attach": { "menu": "Attach", "file": "Files", "appointment": "Appointments", "remove": "Remove", "uploading": "Uploading…", "uploadFailedTitle": "Couldn't attach file", "uploadFailedBody": "The file may be too large (max 10MB). Please try again.", "tooLargeTitle": "File too large", "tooLargeBody": "Attachments are limited to 10MB.", "download": "Download", "apptDialogTitle": "Share an appointment", "apptDialogDescription": "Search by patient name, then pick an appointment to attach.", "apptSearchPlaceholder": "Patient name…", "apptNoMatches": "No appointments match.", "apptEmpty": "No appointments yet.", "apptCardLabel": "Appointment", "apptDetailTitle": "Appointment details", "apptWhen": "When", "apptType": "Type", "apptProvider": "Provider", "apptPatient": "Patient", "apptStatus": "Status" }, "startCall": "Start a call with {{name}}", "system": { "label": "System message", "tag": "System", "readOnly": "This is an automated system notice — you can't reply here.", "passwordResetTitle": "Password reset requested", "passwordResetBody": "{{name}} forgot their password. Tap to open their settings and set a new one." } }, "analysis": { "title": "Overview", "subtitle": "Clinic performance at a glance, computed from your clinic's data.", "customize": "Customize", "customizeTitle": "Show sections", "range": { "all": "All Time", "12m": "12m", "3m": "3m", "30d": "30d", "today": "Today" }, "section": { "visits": "Patient visits", "patients": "Patient volume", "trends": "Trends", "earnings": "Earnings", "appointments": "Appointments", "prescriptions": "Prescriptions" }, "area": { "title": "Patient visits", "subtitle": "Visit volume over the last six months.", "label": "Total visits" }, "patientVolume": { "title": "Patient volume", "description": "New, active and total patients", "total": "Total patients", "newThisMonth": "New this month", "active": "Active patients" }, "earnings": { "title": "Earnings", "description": "Billed, paid and outstanding — from invoices", "billed": "Total billed", "paid": "Total paid", "outstanding": "Outstanding", "byMonth": "Billed vs paid, by month" }, "appointments": { "title": "Appointments & schedule", "description": "Bookings, attendance and what's coming up", "thisWeek": "This week", "upcoming": "Upcoming", "completed": "Completed", "cancelled": "Cancelled" }, "prescriptions": { "title": "Prescriptions", "description": "Medications prescribed", "total": "Total issued", "active": "Active" }, "tasks": { "title": "Tasks", "description": "Care-team workload", "open": "Open", "completed": "Completed" }, "charts": { "title": "Trends", "subtitle": "Patient growth and weekly appointment volume.", "viewDetails": "Tap for details", "patientGrowthTitle": "New patients", "patientGrowthDescription": "New patients per month over the last 6 months", "weeklyAppointmentsTitle": "Appointments this week", "weeklyAppointmentsDescription": "Bookings per day for the current week", "empty": "No data yet" } }, "activity": { "title": "Activity", "subtitle": "An audit log of record changes across the clinic.", "changesToday": "Changes today", "thisWeek": "This week", "totalRecorded": "Total recorded", "empty": "No activity yet. Changes to patients, notes, appointments, prescriptions and tasks will appear here.", "detail": { "title": "Activity detail", "person": "Performed by", "record": "Record type", "patient": "Patient", "reference": "Reference", "time": "Time", "close": "Close", "entityTypes": { "patient": "Patient", "note": "Note", "appointment": "Appointment", "prescription": "Prescription", "task": "Task" } } }, "notes": { "title": "Notes", "subtitle": "Clinical notes. Click a note to open it.", "new": "New note", "editNote": "Edit note", "loading": "Loading…", "emptyTitle": "No notes yet", "emptyDescription": "Create a note to start writing.", "untitled": "Untitled note", "updated": "Updated {{date}}", "tryAgain": "Please try again.", "loadFailed": "Couldn't load notes", "saved": "Note saved", "saveFailed": "Couldn't save note", "deleted": "Note deleted", "deleteFailed": "Couldn't delete note", "editor": { "placeholder": "Write your note…", "titlePlaceholder": "Note title", "delete": "Delete note", "save": "Save", "saving": "Saving…", "bold": "Bold", "italic": "Italic", "underline": "Underline", "heading1": "Heading 1", "heading2": "Heading 2", "bulletList": "Bullet list", "numberedList": "Numbered list", "undo": "Undo", "redo": "Redo", "confirmTitle": "Delete this note?", "confirmDescription": "\"{{name}}\" will be permanently deleted. This can't be undone.", "confirmLabel": "Delete note" } }, "chat": { "heading": "Which patient would you like to look up?", "setupNotice": { "title": "Connect an AI model to get started", "body": "No AI provider is set up yet. Add an API key or point temetro at a local Ollama model so the assistant can answer.", "action": "Open AI settings", "dismiss": "Dismiss" }, "input": { "placeholder": "Ask anything, or type /patient 10293", "message": "Message", "addPatient": "Add patient", "attachFile": "Attach file", "attachFiles": "Attach files", "removeFile": "Remove {{name}}", "dictate": "Dictate", "dictateStop": "Stop dictation", "dictateUnsupported": "Voice dictation isn't supported in this browser", "send": "Send", "stop": "Stop", "model": "Model", "mode": "Mode", "modes": { "chat": { "label": "Chat", "description": "Ask and retrieve patient information." }, "analysis": { "label": "Analysis", "description": "Interpret patterns across a patient's history." }, "graph": { "label": "Graph", "description": "See how problems and visits connect." } }, "moreModels": "More models", "effort": "Effort", "effortOptions": { "low": "Low", "medium": "Medium", "high": "High" }, "models": { "opus48": "For complex clinical reasoning", "sonnet46": "Balanced for everyday tasks", "haiku45": "Fastest for quick answers", "gemini25Pro": "Google’s most capable model", "gemini25Flash": "Fast Google model", "gemini20Flash": "Lightweight Google model", "gpt4o": "OpenAI multimodal flagship", "gpt4oMini": "Fast, low-cost OpenAI model", "ollama": "Runs locally on your infrastructure" } }, "patientNotFound": "I couldn't find a patient with file number {{fileNumber}}.", "thinking": "Thinking…", "steps": "Steps", "reasoning": "Reasoning", "sources": { "title": "Sources", "kind": { "patient": "Patient record", "lab": "Lab results", "appointments": "Schedule", "tasks": "Tasks", "prescriptions": "Prescriptions", "clinic": "Clinic", "analytics": "Analytics", "inventory": "Inventory" } }, "graphCard": { "label": "Record graph" }, "history": { "title": "Chats", "untitled": "New chat", "empty": "No saved chats yet.", "delete": "Delete chat", "open": "Chat history", "search": "Search chats", "startNew": "Start new chat" }, "suggestions": { "schedule": "Show today's schedule", "tasks": "List open tasks", "prescriptions": "Show recent prescriptions", "import": "Import a patient database" }, "queue": { "label": "Queued · {{count}}", "remove": "Remove from queue", "attachmentsOnly": "{{count}} attachment(s)" }, "veil": { "title": "Veil", "body": "This message will be processed by {{provider}}, an external provider. Veil de-identifies patient information (names, MRNs, providers) before it leaves your infrastructure, and restores it in the answer.", "cancel": "Cancel", "useLocal": "Use local model", "confirm": "De-identify & send", "activeChip": "Veil active · {{provider}}" }, "actionCard": { "title": { "appointment": "Proposed appointment", "task": "Proposed task", "prescription": "Proposed prescription", "invoice": "Proposed invoice", "inventory": "Proposed inventory" }, "kind": { "appointment": "Appointment added.", "task": "Task added.", "prescription": "Prescription added.", "invoice": "Invoice added.", "inventory": "Inventory updated." }, "inventoryItems": "{{count}} item(s)", "itemCount": "{{count}} item(s)", "total": "Total", "editButton": "Edit", "edit": { "title": "Edit proposed record", "save": "Save changes", "cancel": "Cancel", "addRow": "Add", "removeRow": "Remove row" }, "fields": { "name": "Patient name", "date": "Date", "time": "Time", "type": "Type", "provider": "Provider", "title": "Title", "assignee": "Assignee", "due": "Due", "priority": "Priority", "patient": "Patient", "medication": "Medication", "dose": "Dose", "frequency": "Frequency", "duration": "Duration", "lineItems": "Line items", "description": "Description", "quantity": "Qty", "unitPrice": "Unit price", "items": "Items", "itemName": "Name", "strength": "Strength", "stockQuantity": "Quantity" }, "approve": "Add", "adding": "Adding…", "discard": "Discard", "added": "Added.", "discarded": "Discarded — nothing was saved.", "addedTitle": "Added", "failedTitle": "Could not add", "failedBody": "Something went wrong, or you don't have permission. Please try again.", "batch": { "title": "{{count}} records proposed", "review": "Review & add", "dialogTitle": "Review proposed records", "dialogDescription": "Add them all at once, or remove any you don't want.", "addAll": "Add all", "adding": "Adding…", "discardAll": "Discard all", "newPatient": "New patient will be created", "edited": "Edited", "remove": "Remove", "done": "Added {{added}} of {{total}}.", "alreadyAdded": "Added.", "failedCount": "{{count}} failed", "discarded": "Discarded — nothing was saved." } }, "lists": { "appointments": "Appointments", "tasks": "Tasks", "prescriptions": "Prescriptions", "done": "Done", "noAppointments": "No appointments.", "noTasks": "No tasks.", "noPrescriptions": "No prescriptions.", "inventory": "Inventory", "noInventory": "No inventory items.", "moreAppointments": "+{{count}} more", "viewInCalendar": "View in calendar" }, "clinicCard": { "title": "Clinic", "since": "Since {{date}}" }, "analyticsCard": { "title": "Clinic analytics", "patients": "Patients", "appointmentsThisWeek": "Appts this week", "activePrescriptions": "Active Rx", "openTasks": "Open tasks", "billed": "Billed", "paid": "Paid", "outstanding": "Outstanding", "byMonth": "Billed vs paid, by month" }, "labCard": { "flags": { "low": "Low", "high": "High", "critical": "Critical", "normal": "Normal" } }, "importCard": { "title": "Import patient records", "ready": "Ready to import", "skipped": "Skipped", "total": "Parsed", "row": "Row {{index}}", "more": "+{{count}} more", "approve": "Import {{count}} record(s)", "approve_one": "Import 1 record", "reject": "Discard", "reviewEdit": "Review & edit", "reviewTitle": "Review records", "reviewDescription": "Open any record to edit it before importing. Fix the skipped ones to include them.", "reviewClose": "Close", "fixHint": "Open Review & edit to fix the skipped rows, or import the ready ones.", "rowReady": "Ready to import", "needsFix": "Needs fixing", "unnamed": "Unnamed record", "importing": "Importing…", "rejectedNote": "Import discarded. Nothing was written.", "importedTitle": "Records imported", "importedBody": "Imported {{count}} patient record(s).", "alreadyImported": "Imported.", "failedCount": "{{count}} failed", "failedTitle": "Import failed", "failedBody": "The records could not be imported. Please try again." }, "error": { "title": "AI request failed", "body": "Something went wrong reaching the AI. Check your provider and API key in Settings → AI.", "dismiss": "Dismiss" } }, "patientFiles": { "title": "Files", "add": "Add files", "empty": "No files uploaded.", "remove": "Remove", "open": "Open", "close": "Close", "noPreview": "No preview available for this file type.", "deletedTitle": "File removed", "deleteFailedTitle": "Couldn't remove file", "deleteFailedBody": "Something went wrong, or you don't have permission. Please try again.", "uploadFailedTitle": "Some files didn't upload", "uploadFailedBody": "The record was saved, but one or more files failed to upload. Try adding them again from the record." }, "integrations": { "fhir": { "cardTitle": "Lab system (HL7/FHIR)", "disabledHint": "Not enabled. An owner or admin can connect a lab system in Settings → Integrations.", "searchPlaceholder": "Search a patient to pull results…", "change": "Change", "sync": "Sync results", "syncing": "Syncing…", "syncedTitle": "Results synced", "syncedBody": "Imported {{count}} result(s) for {{name}}.", "failedTitle": "Sync failed", "failedBody": "Couldn't reach the lab system. Please try again." }, "eRx": { "send": "Send to pharmacy", "sending": "Sending…", "sentTitle": "Prescription sent", "sentBody": "Transmitted to the pharmacy as an NCPDP SCRIPT NewRx.", "failedTitle": "Couldn't send", "failedBody": "The pharmacy gateway rejected the message or is unreachable." }, "claims": { "submit": "Submit claim", "submitting": "Submitting…", "submittedTitle": "Claim submitted", "submittedBody": "Clearinghouse status: {{status}}.", "failedTitle": "Couldn't submit claim", "failedBody": "The clearinghouse rejected the claim or is unreachable." } }, "patientCard": { "notFound": "No patient found for file #{{number}}.", "overview": "Overview", "edit": "Edit", "exportPdf": "Download summary", "clickForMore": "Click for more", "pdf": { "title": "Clinical summary", "mrn": "MRN", "generated": "Generated {{date}}" }, "history": { "title": "Record history", "empty": "No recorded changes yet.", "loadError": "Couldn't load the record history." }, "sex": { "F": "Female", "M": "Male" }, "summary": { "fullName": "Full name", "mrn": "MRN", "age": "Age", "sex": "Sex", "primaryCare": "Primary care", "status": "Status", "lastSeen": "Last seen", "allergies": "Allergies", "activeMeds": "Active meds", "openProblems": "Open problems", "bloodType": "Blood type", "phone": "Phone", "none": "None", "editRecord": "Edit record" }, "vitals": { "title": "Vitals", "taken": "Taken {{at}}", "bp": "BP", "hr": "HR", "temp": "Temp", "spo2": "SpO₂" }, "labs": { "title": "Labs", "asOf": "As of {{at}}", "empty": "No labs on file." }, "medications": { "title": "Medications", "active": "{{count}} active", "empty": "No active medications." }, "problems": { "title": "Problems", "active": "{{count}} active", "empty": "No active problems.", "since": "since {{date}}" }, "allergies": { "title": "Allergies & alerts", "sectionLabel": "Allergies", "none": "No known allergies.", "count": "{{count}} recorded" }, "visits": { "title": "Recent visits", "recent": "{{count}} recent", "empty": "No visits yet." }, "graph": { "title": "Record graph", "hint": "Hover a node to focus its connections. Scroll to pan, pinch to zoom.", "empty": "Not enough record data to graph yet.", "open": "Open graph", "close": "Close", "kind": { "problem": "Problem", "visit": "Visit" }, "fields": { "since": "Since", "date": "Date", "provider": "Provider", "summary": "Summary" } }, "appointments": { "title": "Appointments", "empty": "No appointments on file." }, "prescriptions": { "title": "Prescriptions", "empty": "No prescriptions on file." }, "invoices": { "title": "Invoices", "empty": "No invoices on file." }, "trend": { "empty": "No trend data yet.", "last": "{{label}} · last {{count}}", "lastReadings": "{{label}} · last {{count}} readings", "latest": "Latest", "min": "Min", "max": "Max" }, "labFlag": { "normal": "Normal", "low": "Low", "high": "High", "critical": "Critical" }, "severity": { "mild": "Mild", "moderate": "Moderate", "severe": "Severe" } }, "patientForm": { "editTitle": "Edit record", "createTitle": "Add patient", "editDescription": "Update {{name}}'s chart and add new data.", "createDescription": "Create a new chart. A file number has been generated for you.", "fileNumber": "File number", "regenerate": "Regenerate file number", "fullName": "Full name", "fullNamePlaceholder": "e.g. Jordan Pierce", "age": "Age", "sex": "Sex", "status": "Status", "primaryCare": "Primary care", "primaryCarePlaceholder": "e.g. Dr. Lena Ortiz", "primaryCareUnassigned": "Unassigned", "phone": "Phone", "phonePlaceholder": "e.g. +1 555 010 2938", "bloodType": "Blood type", "bloodTypeUnknown": "Unknown", "currentVitals": "Current vitals", "bp": "Blood pressure", "hr": "Heart rate", "temp": "Temperature", "spo2": "Oxygen saturation", "allergies": "Allergies", "medications": "Medications", "problems": "Problems", "labs": "Labs", "visits": "Visits", "add": "Add", "removeRow": "Remove {{label}} row", "pickDate": "Pick a date", "substance": "Substance", "reaction": "Reaction", "severityAria": "Severity", "medNameAria": "Medication name", "medName": "Name", "dose": "Dose", "frequency": "Frequency", "problemAria": "Problem", "diagnosis": "Diagnosis", "sinceAria": "Since", "labNameAria": "Lab name", "test": "Test", "valueAria": "Value", "value": "Value", "flagAria": "Flag", "visitTypeAria": "Visit type", "visitType": "Type", "visitDateAria": "Visit date", "visitDate": "Date", "providerAria": "Provider", "provider": "Provider", "summaryAria": "Summary", "summary": "Summary", "cancel": "Cancel", "saving": "Saving…", "saveChanges": "Save changes", "savePatient": "Save patient", "saveDraft": "Save changes", "reviewTitle": "Review record before import", "reviewDescription": "Edit any field, then save to update this record in the import. Nothing is written until you import.", "saveError": "Could not save the patient.", "updatedTitle": "Record updated", "updatedBody": "{{name}}'s chart was saved.", "addedTitle": "Patient added", "addedBody": "{{name}} ({{fileNumber}}).", "saveFailedTitle": "Couldn't save patient" }, "settings": { "tabs": { "profile": "Profile", "ai": "AI", "records": "Records", "signing": "Signing", "careTeam": "Care team", "integrations": "Integrations", "developers": "Developers", "version": "About & updates" }, "version": { "title": "Version", "description": "The temetro version running on this server, and whether a newer release is available.", "current": "Current version", "latest": "Latest release", "checking": "Checking for updates…", "checkNow": "Check for updates", "upToDate": "Up to date", "updateAvailable": "Update available", "offline": "Couldn't reach the update server", "updateTitle": "How to update", "updateDescription": "temetro is self-hosted with Docker. To update, pull the new images and restart on the server machine.", "updateCommandLabel": "Update command", "viewRelease": "View release notes", "networkTitle": "Network access", "networkDescription": "Let other departments open temetro from their own computers on the hospital network using this address.", "networkUrlLabel": "Network address", "networkLocalHint": "You're viewing temetro locally. To share it, open the app on the server machine using its network IP address (e.g. from ipconfig / ifconfig), then share that URL.", "networkFirewallHint": "The server's firewall must allow the port for other devices to connect.", "banner": "A new version of temetro ({{version}}) is available.", "bannerUpdate": "See how to update", "bannerDismiss": "Later" }, "integrations": { "loading": "Loading integrations…", "intro": "Connect temetro to external healthcare systems. Point each integration at your vendor's sandbox or production endpoint and supply its credentials.", "endpoint": "Endpoint URL", "credentials": "Credentials", "credentialsSet": "•••••••• (stored — type to replace)", "enable": "Enable integration", "enableHint": "When on, its actions appear on the relevant pages.", "save": "Save", "saving": "Saving…", "test": "Test connection", "testing": "Testing…", "savedTitle": "Integration saved", "saveFailedTitle": "Couldn't save", "saveFailedBody": "Something went wrong, or you don't have permission. Please try again.", "testOk": "Connection succeeded", "testFailed": "Connection failed", "testError": "Couldn't reach the endpoint.", "lastSync": "Last activity {{when}}", "status": { "connected": "Connected", "error": "Error", "unconfigured": "Not configured" }, "fhir": { "title": "Lab system (HL7/FHIR)", "description": "Read lab results from a FHIR R4 server or HL7 v2 feed (e.g. a HAPI FHIR / SMART Health IT sandbox, or your lab's gateway).", "endpointPlaceholder": "https://hapi.fhir.org/baseR4", "credentialsPlaceholder": "Bearer token (optional for open sandboxes)", "credentialsHint": "Sent as a Bearer token, or JSON {\"token\":\"…\"}. Leave blank for public sandboxes." }, "eprescribe": { "title": "e-Prescribing (NCPDP SCRIPT)", "description": "Transmit prescriptions to pharmacies as NCPDP SCRIPT NewRx messages. Production routing requires your Surescripts (or sandbox) account.", "endpointPlaceholder": "https://your-pharmacy-gateway.example/script", "credentialsPlaceholder": "JSON: {\"token\":\"…\",\"senderId\":\"…\"}", "credentialsHint": "JSON with your gateway token and sender id." }, "claims": { "title": "Insurance claims (X12 837/835)", "description": "Submit professional claims (837P) to a clearinghouse and read remittances (835). Production requires your clearinghouse account.", "endpointPlaceholder": "https://your-clearinghouse.example/claims", "credentialsPlaceholder": "JSON: {\"token\":\"…\",\"submitterId\":\"…\",\"receiverId\":\"…\"}", "credentialsHint": "JSON with your clearinghouse token and submitter/receiver ids." }, "fhirServer": { "title": "FHIR server (share your records)", "description": "Expose this clinic's records to external systems as a read-only FHIR R4 server, authenticated with per-clinic API keys.", "baseUrl": "Base URL", "baseUrlHint": "Point a FHIR client at this URL. It serves Patient, Observation, Condition, AllergyIntolerance, MedicationRequest, Encounter and Appointment.", "copiedUrl": "Base URL copied", "newKey": "Create an API key", "newKeyPlaceholder": "Key name (e.g. Research warehouse)", "create": "Create", "creating": "Creating…", "createFailed": "Couldn't create the key", "createFailedBody": "Please try again.", "secretTitle": "Copy your API key now", "secretHint": "This is the only time the secret is shown. Store it somewhere safe — it can't be retrieved later.", "copiedSecret": "API key copied", "dismissSecret": "Done", "noKeys": "No API keys yet. Create one to let a FHIR client connect.", "lastUsed": "Last used {{when}}", "neverUsed": "Never used", "revoke": "Revoke", "confirmRevoke": "Revoke key", "revoked": "Revoked", "revokeFailed": "Couldn't revoke the key", "revokeFailedBody": "Please try again.", "cancel": "Cancel" } }, "empty": "Nothing here yet.", "copy": "Copy", "copied": "Copied", "records": { "description": "How patient records are sourced, stored, and displayed", "comingSoon": "Coming soon", "connected": "Connected", "sourcesTitle": "Data sources", "sourcesDescription": "Where the patient records shown in temetro come from", "clinicDb": "Clinic database", "clinicDbDesc": "Patient records are stored in your clinic's own database and scoped to this clinic.", "patientStorage": "Patient-owned storage", "patientStorageDesc": "Read and write records directly on the patient's device once the companion app ships.", "importExportTitle": "Import & export", "importExportDescription": "Move records in and out of temetro", "export": "Export records", "exportDesc": "Download every patient record in this clinic as a single archive.", "import": "Import an existing database", "importDesc": "Connect an existing patient database and browse it in the same card UI.", "retentionTitle": "Retention", "retentionDescription": "How long records are kept", "retentionBody": "Records are kept for as long as your clinic exists. Deleting a patient permanently removes their chart from the clinic database, and the activity log keeps an audit trail of every change — who made it and when.", "exporting": "Exporting…", "exportDoneTitle": "Records exported", "exportDoneBody": "Downloaded {{count}} patient record(s).", "exportFailedTitle": "Export failed", "exportFailedBody": "Couldn't export records. Please try again.", "importTemetro": "Import a temetro archive", "importTemetroDesc": "Load patients from a temetro export file. Existing file numbers are skipped.", "importChoose": "Choose file", "importPreview": "{{count}} patient record(s) ready to import.", "importCancel": "Cancel", "importApply": "Import", "importing": "Importing…", "importInvalidTitle": "Invalid file", "importInvalidBody": "That doesn't look like a temetro export.", "importDoneTitle": "Import complete", "importDoneBody": "Created {{created}}, skipped {{skipped}}.", "importFailedTitle": "Import failed", "importFailedBody": "Couldn't import records. Please try again." }, "developers": { "description": "Access tokens for the temetro API", "comingSoon": "Coming soon", "apiTitle": "API access", "apiDescription": "Build on the same REST API the temetro app uses", "baseUrlLabel": "API base URL", "baseUrlDescription": "All endpoints live under this origin (e.g. /api/patients)", "authLabel": "Authentication", "authDescription": "Requests authenticate with your temetro session cookie. Scoped personal access tokens for server-to-server use are planned.", "tokensTitle": "Personal access tokens", "tokensDescription": "Long-lived tokens for scripts and integrations", "noTokens": "No tokens yet.", "generateToken": "Generate token", "resourcesTitle": "Resources", "resourcesDescription": "Where to learn more", "resourcesBody": "The API reference — covering patients, appointments, prescriptions, tasks, messaging, activity and analytics — lives in the project documentation under docs/api. temetro is open source, so the route handlers in backend/src/routes are the authoritative spec.", "email": { "title": "Email provider", "description": "How temetro sends verification, password-reset and invitation emails. This is a deployment-wide setting.", "provider": "Provider", "providers": { "none": "Not configured", "smtp": "SMTP", "resend": "Resend", "postmark": "Postmark", "sendgrid": "SendGrid" }, "from": "From address", "apiKey": "API key", "apiKeySet": "•••••••• (saved — leave blank to keep)", "apiKeyPlaceholder": "Paste your provider API key", "smtpHint": "SMTP uses the SMTP_HOST/PORT/USER/PASS environment variables on the server.", "save": "Save", "saving": "Saving…", "savedTitle": "Email settings saved", "savedFailed": "Couldn't save email settings.", "test": "Send test", "testing": "Sending…", "testSentTitle": "Test email sent", "testSentBody": "Sent a test email to {{to}}.", "testFailed": "Couldn't send the test email." } }, "profile": { "sectionTitle": "Clinician profile", "clinicianIdLabel": "Clinician ID", "clinicianIdDescription": "Your unique clinician identifier, used when signing records", "handleLabel": "Handle", "handleDescription": "Used in your public profile and the patient portal", "avatar": "Avatar", "displayName": "Display name", "specialty": "Specialty", "selectSpecialty": "Select specialty", "clinic": "Clinic / practice", "clinicPlaceholder": "e.g. Main Hospital", "contactEmail": "Contact email", "contactEmailPlaceholder": "clinician@example.org", "professionalLinks": "Professional links", "professionalLinksHint": "Registry or institutional profiles used to verify your identity. They are never shown to patients.", "addLink": "Add link", "language": { "title": "Language", "description": "The language temetro's interface is shown in on this device.", "label": "Display language", "en": "English", "fr": "Français", "so": "Soomaali", "ar": "العربية", "de": "Deutsch", "confirmTitle": "Change display language?", "confirmBody": "Switch the interface to {{language}}? The app will reload its text in the new language.", "confirmCta": "Change language", "cancel": "Cancel" }, "patientNotifications": "Patient notifications", "patientNotificationsDescription": "Emails sent to patients about their records, results, and pending approvals", "accountNotifications": "Account notifications", "accountNotificationsDescription": "Notifications sent to you about your patients and the care team", "dangerZone": "Danger Zone", "dangerZoneDescription": "Irreversible actions for your account", "deleteAccount": "Delete account", "deleteAccountDescription": "Permanently delete your temetro account and any locally stored signing keys. This action cannot be undone.", "delete": "Delete", "unsavedChanges": "You have unsaved changes", "saveChanges": "Save changes", "saving": "Saving…", "savedTitle": "Settings saved", "savedBody": "Your preferences are up to date.", "saveFailedTitle": "Couldn't save settings", "saveFailedBody": "Please try again.", "deleteDialog": { "title": "Delete your account?", "description": "This permanently deletes your account, removes you from your clinics, and cannot be undone.", "passwordLabel": "Confirm your password", "passwordPlaceholder": "Your password", "cancel": "Cancel", "confirm": "Delete account", "deleting": "Deleting…", "failed": "Couldn't delete the account. Check your password and try again." }, "notif": { "newLab": "New lab result", "newLabDesc": "Sent when a new lab result is available on a patient's chart", "recordUpdated": "Record updated", "recordUpdatedDesc": "Sent when a patient's record is updated by a member of the care team", "approvalRequested": "Approval requested", "approvalRequestedDesc": "Sent when a signed change is awaiting the patient's approval", "changeApproved": "Change approved", "changeApprovedDesc": "Sent when a patient approves a pending change to their record", "newMessage": "New message", "newMessageDesc": "Sent when a patient or another clinician sends a message", "visitScheduled": "Visit scheduled", "visitScheduledDesc": "Sent when an upcoming visit is added to a patient's record", "pendingApprovals": "Pending approvals", "pendingApprovalsDesc": "Notify me when a patient approves or rejects a pending change", "recordsShared": "Records shared with me", "recordsSharedDesc": "Notify me when a patient shares a record with me" }, "linkPlaceholder": "https://example.com", "removeLink": "Remove link" }, "careTeam": { "title": "Care team", "description": "Staff with access to this clinic", "loadError": "Could not load the care team.", "loading": "Loading care team…", "you": "(you)", "clickHint": "Tip: click a team member to see their permissions and manage their role.", "addMember": "Add team member", "removeMember": "Remove member", "specialties": { "general": "General practitioner", "orthopedics": "Orthopedist", "dentistry": "Dentist", "cardiology": "Cardiologist", "pediatrics": "Pediatrician", "dermatology": "Dermatologist", "neurology": "Neurologist", "obgyn": "OB-GYN", "ophthalmology": "Ophthalmologist", "ent": "ENT specialist", "psychiatry": "Psychiatrist", "radiology": "Radiologist", "anesthesiology": "Anesthesiologist", "surgery": "Surgeon" }, "employee": { "title": "Team member", "description": "View this member's access, change their role, or remove them.", "permissions": "Permissions", "noAccess": "No access", "changeRole": "Change role", "save": "Save", "saving": "Saving…", "remove": "Remove employee", "close": "Close", "roleUpdatedTitle": "Role updated", "roleUpdatedBody": "{{name}} is now {{role}}.", "roleFailedTitle": "Couldn't update role", "roleFailedBody": "Please try again.", "specialty": "Specialty", "noSpecialty": "No specialty", "specialtyUpdatedTitle": "Specialty updated", "specialtyUpdatedBody": "Updated {{name}}'s specialty.", "specialtyFailedTitle": "Couldn't update specialty", "specialtyFailedBody": "Please try again.", "resources": { "patient": "Patients", "appointment": "Appointments", "prescription": "Prescriptions", "task": "Tasks", "lab": "Lab results" }, "actions": { "read": "View", "write": "Edit", "delete": "Delete" }, "resetPassword": "Reset password", "resetPasswordHint": "Set a new password for this employee (e.g. they forgot theirs and no email provider is configured).", "newPassword": "New password (min 12 chars)", "confirmPassword": "Confirm password", "setPassword": "Set password", "pwTooShortTitle": "Password too short", "pwTooShortBody": "Use at least 12 characters.", "pwMismatchTitle": "Passwords don't match", "pwMismatchBody": "Re-enter the same password in both fields.", "pwUpdatedTitle": "Password updated", "pwUpdatedBody": "{{name}} can now sign in with the new password.", "pwFailedTitle": "Couldn't set password", "pwFailedBody": "Please try again." }, "remove": { "title": "Remove team member?", "description": "{{name}} will lose access to this clinic. This can't be undone.", "thisMember": "This member", "cancel": "Cancel", "confirm": "Remove", "removing": "Removing…", "removedTitle": "Member removed", "removedBody": "{{name}} no longer has access.", "failedTitle": "Couldn't remove member", "failedBody": "Please try again." }, "add": { "title": "Add team member", "step1Description": "Who are you adding, and what can they do?", "step2Description": "Set the username and password they'll sign in with.", "nameLabel": "Full name", "namePlaceholder": "Jane Okafor", "nameRequired": "Enter the person's name.", "roleLabel": "Role", "usernameLabel": "Username", "usernamePlaceholder": "jokafor", "usernameHint": "Letters, numbers, dots and underscores — no spaces.", "usernameTooShort": "Username must be at least {{count}} characters.", "usernameInvalid": "Username can't contain spaces. Use letters, numbers, dots or underscores.", "passwordLabel": "Password", "passwordHint": "Must be at least {{count}} characters long.", "passwordTooShort": "Password must be at least {{count}} characters.", "back": "Back", "cancel": "Cancel", "next": "Next", "create": "Create account", "creating": "Creating…", "createdTitle": "Account created", "createdBody": "{{name}} can now sign in with the username {{username}}.", "error": "Could not create the account.", "errorTitle": "Could not add member" } }, "network": { "title": "Temetro Network", "description": "The Temetro Network relay lets patients' wallet apps connect to your clinic to share and approve records — end-to-end encrypted, with your clinic identified by its signing key.", "toggleLabel": "Join Temetro Network", "toggleDesc": "When on, this clinic connects to the relay so you can import records from patient apps and push updates to their wallets.", "statusConnected": "Connected", "statusOff": "Off", "joinedTitle": "Joined the Temetro Network", "joinedBody": "Patient wallet apps can now connect to this clinic.", "leftTitle": "Left the Temetro Network", "leftBody": "This clinic is no longer connected to the relay.", "errorTitle": "Couldn't update network access", "error": "Please try again." }, "location": { "title": "Clinic location", "description": "Your clinic's address and map coordinates. Shown to patients in the wallet app.", "address": "Address", "addressPlaceholder": "Street address", "city": "City", "country": "Country", "latitude": "Latitude", "longitude": "Longitude", "coordinatesHint": "Coordinates are optional — used to show your clinic on a map.", "save": "Save location", "saving": "Saving…", "savedTitle": "Location saved", "savedBody": "Your clinic location has been updated.", "invalidCoords": "Latitude and longitude must be numbers.", "errorTitle": "Couldn't save location", "error": "Please try again.", "useMyLocation": "Use my current location", "locating": "Locating…", "geoUnsupported": "Location isn't available on this device.", "geoError": "Couldn't get your location. Check permissions and try again.", "geoPartial": "Filled the coordinates — please add the address details manually." }, "signing": { "keyTitle": "Signing key", "active": "Active", "keyDescription": "Every change you make to a patient record is signed with this key, so patients can verify it came from you before approving it.", "rotateKey": "Rotate key", "rotating": "Rotating…", "rotateSuccessTitle": "Signing key rotated", "rotateSuccessBody": "A new Ed25519 key is now active for this clinic.", "rotateErrorTitle": "Couldn't rotate the key", "rotateError": "Please try again.", "loadError": "Couldn't load the signing key.", "loading": "Loading signing key…", "createdAt": "Created May 28, 2026", "createdAtLabel": "Created {{date}}", "rotatedAtLabel": "Rotated {{date}}", "records": { "permanent": "Permanent", "temporary": "Temporary", "expires": "Expires {{date}}", "statusPending": "Awaiting approval", "statusApproved": "Shared", "statusDenied": "Declined", "statusExpired": "Expired" }, "identityTitle": "Signing identity", "identityDescription": "The public key patients use to verify your signatures", "fingerprintLabel": "Public key fingerprint", "fingerprintDescription": "Share or publish this fingerprint so patients can trust your changes", "signedRecordsTitle": "Signed records", "signedRecordsDescription": "Changes you've signed that are waiting on the patient's approval", "noPending": "No pending signatures", "comingSoon": "Coming soon", "howItWorksTitle": "How signing works", "howItWorksDescription": "The flow behind patient-approved records", "steps": { "sign": "You sign every change", "signDesc": "Each edit you make to a patient record is signed with your private key before it's written.", "approve": "The patient approves it", "approveDesc": "Signed changes stay pending until the patient accepts them in the companion app.", "verify": "Anyone can verify", "verifyDesc": "Your public key fingerprint lets patients and other clinics verify a change really came from you." }, "backupTitle": "Backup key", "backupDescription": "Recover your signing identity if you lose this device", "backupLabel": "Recovery phrase", "backupDesc": "Export an encrypted backup of your signing key to restore it on a new device." }, "ai": { "availability": { "title": "Availability", "description": "Control who in your clinic can use the AI assistant. When disabled, every AI surface — New chat, Analysis, and the chat history — is hidden and cannot be reached.", "enabled": "Enable AI assistant", "enabledHint": "Master switch. Turning this off disables and hides the AI for everyone in the clinic — including owners and admins.", "employeesOnly": "Disable for employees only", "employeesOnlyHint": "Keep the AI for owners and admins, but hide it from all other staff.", "savedTitle": "AI availability updated", "savedBody": "The change applies across your clinic.", "readonlyEnabled": "The AI assistant is enabled for your clinic.", "readonlyEmployeesOnly": "The AI assistant is restricted to owners and admins.", "readonlyDisabled": "The AI assistant is disabled for your clinic." }, "modeTitle": "Inference mode", "modeDescription": "Choose how temetro runs the AI. A cloud API key sends data off your infrastructure; a local model keeps everything on your machine.", "mode": "Mode", "modeApi": "Cloud API key", "modeLocal": "Local model (Ollama)", "modeApiHint": "Requests go to your chosen provider. Patient identifiers are de-identified by Veil before they leave.", "modeLocalHint": "Requests run against a model on your own infrastructure. No patient data leaves the clinic.", "providerTitle": "Provider & API key", "providerDescription": "Your key is encrypted at rest and never shown again. You can store a key per provider and switch between them.", "provider": "Provider", "providers": { "openai": "OpenAI", "anthropic": "Anthropic", "gemini": "Google Gemini" }, "apiKey": "API key", "apiKeyPlaceholder": "Paste your API key", "apiKeySet": "•••••••••• (key set)", "apiKeyHint": "The key is encrypted before storage and used only to call the provider.", "apiKeyStored": "A key is stored for {{provider}}.", "defaultModel": "Default model", "selectModel": "Select a model", "defaultEffort": "Default effort", "localTitle": "Local model (Ollama)", "localDescription": "Point temetro at your Ollama server. The model runs on your infrastructure, so patient data never leaves the clinic.", "ollamaBaseUrl": "Ollama base URL", "ollamaModel": "Model name", "testConnection": "Test connection", "testing": "Testing…", "testOk": "Connection succeeded", "testFailed": "Connection failed", "testError": "Could not run the test.", "veilTitle": "Veil — PHI safeguards", "veilDescription": "Veil de-identifies patient information before it is sent to an external model, then restores it in the response.", "veilLevel": "De-identification level", "veilLevels": { "full": "Full — names, MRNs, providers & free-text", "names": "Names only — direct identifiers", "off": "Off — send data as-is (not recommended)" }, "veilApiNote": "Veil applies to every external request. Identifiers are replaced with tokens the model never sees, and re-inserted before you read the answer.", "veilLocalNote": "You are in local mode, so patient data never leaves your infrastructure and Veil is not needed.", "unsavedChanges": "You have unsaved AI settings.", "saveChanges": "Save changes", "saving": "Saving…", "savedTitle": "AI settings saved", "savedBody": "Your AI configuration has been updated.", "saveFailedTitle": "Could not save", "saveFailedBody": "Saving your AI settings failed. Please try again." }, "portal": { "title": "Patient Portal", "description": "Share your clinic's public booking portal with patients — they can view your doctors and book appointments.", "linkLabel": "Portal link", "linkDescription": "The public page patients open to book with your clinic.", "open": "Open portal", "showQr": "Show QR code", "qrTitle": "Patient Portal QR", "qrDescription": "Patients scan this to open your clinic's portal — or scan it in the Temetro wallet app to book." } }, "portal": { "kicker": "Patient Portal", "back": "Back", "done": "Done", "notFoundTitle": "Clinic not found", "notFoundBody": "This portal link isn't valid. Please ask the front desk for help.", "choose": { "bookTitle": "Book an appointment", "bookDesc": "Schedule a visit with your care team.", "resultsTitle": "View my results", "resultsDesc": "Check upcoming visits and whether results are ready.", "walletTitle": "Link my wallet", "walletDesc": "Use the temetro app to book and view results yourself." }, "wallet": { "title": "Link your wallet", "subtitle": "Scan this code with the temetro wallet app to connect it to this clinic.", "error": "Couldn't load the pairing code. Please ask the front desk.", "hint": "After linking, you can book appointments and view results from your phone." }, "field": { "name": "Full name", "fileNumber": "File number", "date": "Date", "time": "Time", "reason": "Reason for visit (optional)", "reasonPlaceholder": "e.g. Follow-up, check-up", "sex": "Sex", "sexMale": "Male", "sexFemale": "Female", "age": "Age" }, "book": { "title": "Book an appointment", "submit": "Request appointment", "successTitle": "You're booked", "successBody": "Your appointment is set for {{date}} at {{time}}. Please check in at the front desk.", "errorGeneric": "Couldn't book the appointment. Please try again or ask the front desk.", "mode": { "returning": "Returning patient", "new": "New patient" }, "newFileNote": "Your new file number is {{file}} — keep it for next time.", "slotTaken": "That time is already taken. Please choose another." }, "results": { "title": "View my results", "subtitle": "Enter your name and file number to continue.", "submit": "Look up", "greeting": "Hi {{name}}", "upcoming": "Upcoming appointments", "noUpcoming": "No upcoming appointments.", "resultsLabel": "Results", "ready": "{{count}} result(s) are on file.", "none": "No results are on file yet.", "askStaff": "Please ask a staff member to review your results with you.", "lookupAnother": "Look up another", "errorGeneric": "Couldn't find your record. Please check your details or ask the front desk." } }, "walletSync": { "step1": "Details", "step2": "Sync to wallet", "prompt": "Send to {{name}}'s wallet?", "promptBody": "This patient uses the wallet app. Send this change so it syncs to their phone — they approve it on their device.", "changesLabel": "What changed", "skip": "Not now", "send": "Send to wallet", "done": "Done", "errors": { "generic": "Couldn't send the update. Please try again." }, "summary": { "invoiceCreated": "New invoice {{number}}", "invoiceUpdated": "Updated invoice {{number}}", "appointment": "New appointment on {{date}} at {{time}}", "prescription": "New prescription: {{drug}}", "demographics": "Demographics updated", "note": "New clinical note" } } }