feat: QR pairing for wallet import (backend + website)

- Backend: nullable wallet_number on wallet_share_requests (migration 0029);
  createPairingRequest + POST /api/patients/wallet/pair; applyShareResponse
  binds the authenticated wallet on QR (pairing) requests
- Frontend: Import dialog gains a "Show QR" mode rendering a temetro-pair QR
  (react-qr-code) the patient scans; requestWalletPairing helper; i18n keys

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalid Abdi
2026-06-21 21:31:51 +03:00
parent 2d47abcc42
commit 7a359d4911
11 changed files with 4529 additions and 24 deletions
@@ -186,6 +186,11 @@
"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",