settings: Records import & export for temetro data

Backend: GET /api/settings/records/export downloads the clinic's full patient
archive as JSON; POST /api/settings/records/import creates new patients (skips
existing file numbers, drops cross-clinic provider links). Both admin-gated.

Frontend: Records settings now has a working Export button and an Import flow
(choose file -> preview count -> apply) wired to the new endpoints.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalid Abdi
2026-06-20 18:44:37 +03:00
parent bbc6869745
commit e656eae362
4 changed files with 307 additions and 7 deletions
+19 -1
View File
@@ -1496,7 +1496,25 @@
"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."
"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",