This repository has been archived on 2026-08-11. You can view files and clone it, but cannot push or open issues or pull requests.
Gishen-B2B/docs/backend/entities/prescription.md
kirukib 3778801ef5 Ship Gishen B2B institutional portal with polished layout and mock-backed flows.
Deliver role-aware shell (sidebar, breadcrumbs, quick search, tables, detail/create layouts), locale-ready pages, shared backend/feature docs, and Vercel project config so HR, finance, and members can demo against typed mocks.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 21:18:23 +03:00

141 lines
3.9 KiB
Markdown

# Entity: Prescription
Member-submitted prescription for pharmacist review and covered medicine fulfillment.
**Workspace:** `/Users/kirukib/Desktop/Yaltopia Project/Gishen-B2B`
## Fields
| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `id` | `string` | ✓ | `rx_*` |
| `member_id` | `string` | ✓ | |
| `org_id` | `string` | ✓ | |
| `customer_id` | `string` | ✓ | Shared identity |
| `status` | `PrescriptionStatus` | ✓ | |
| `pages` | `PrescriptionPage[]` | ✓ | Images/files — **clinical withhold** |
| `medicine_lines` | `MedicineLine[]` | | Pharmacist-entered after review |
| `prescriber_notes` | `string` | | Clinical — withheld from HR/Finance |
| `diagnosis_codes` | `string[]` | | Withheld |
| `days_supply` | `integer` | | For refill reminders |
| `refill_due_at` | `date` | | Computed |
| `submitted_at` | `Timestamp` | | |
| `reviewed_at` | `Timestamp` | | Admin pharmacist |
| `reviewer_id` | `string` | | Admin user |
| `query_message` | `string` | | If status=queried |
| `rejection_reason` | `string` | | If status=rejected |
| `created_at` | `Timestamp` | ✓ | |
| `updated_at` | `Timestamp` | ✓ | |
### PrescriptionStatus
```
draft | submitted | under_review | approved | queried | rejected
```
### PrescriptionPage
| Field | Type | Notes |
|-------|------|-------|
| `id` | `string` | |
| `page_number` | `integer` | |
| `url` | `string` | Signed URL |
| `mime_type` | `string` | |
| `uploaded_at` | `Timestamp` | |
### MedicineLine
| Field | Type | Notes |
|-------|------|-------|
| `name` | `string` | **Clinical** |
| `dosage` | `string` | |
| `quantity` | `integer` | |
| `sku` | `string` | |
| `instructions` | `string` | |
## Status flow
```
draft → submitted → under_review → approved
↘ queried → (member resubmits) → under_review
↘ rejected
```
Review/dispensing queue lives in **Gishen-Admin**. B2B emits `prescription.submitted` and consumes review status updates.
## Validation rules
| Rule | Error code |
|------|------------|
| Member must be `active` | `MEMBER_INACTIVE` |
| At least one page on submit | `VALIDATION_FAILED` |
| Max 10 pages | `VALIDATION_FAILED` |
| Only MEMBER (own) or SUPER_USER may upload | `FORBIDDEN` |
## Clinical withhold
| Role | `pages` | `medicine_lines` | `prescriber_notes` | `diagnosis_codes` | Status/metadata |
|------|---------|------------------|--------------------|--------------------|-----------------|
| MEMBER (own) | ✓ | ✓ when approved | ✓ | ✓ | ✓ |
| SUPER_USER | ✓ | ✓ | ✓ | ✓ | ✓ |
| HR_ADMIN | ✗ | ✗ | ✗ | ✗ | ✓ status + dates only |
| FINANCE | ✗ | ✗ | ✗ | ✗ | ✗ (use spend aggregates) |
HR/Finance listing endpoint returns **403** or redacted stub if clinical fields requested.
## Sample payload (member view)
```json
{
"id": "rx_01H001",
"member_id": "mbr_01HMEM001",
"org_id": "org_01HQXYZ",
"customer_id": "cus_01HSHARED",
"status": "under_review",
"pages": [
{
"id": "rxp_01",
"page_number": 1,
"url": "https://storage.gishen.../rx_01H001_p1.jpg",
"mime_type": "image/jpeg",
"uploaded_at": "2026-03-10T08:00:00Z"
}
],
"medicine_lines": [],
"days_supply": null,
"refill_due_at": null,
"submitted_at": "2026-03-10T08:00:00Z",
"reviewed_at": null,
"created_at": "2026-03-10T07:55:00Z",
"updated_at": "2026-03-10T08:00:00Z"
}
```
## Sample payload (HR redacted)
```json
{
"id": "rx_01H001",
"member_id": "mbr_01HMEM001",
"status": "under_review",
"submitted_at": "2026-03-10T08:00:00Z",
"clinical_withheld": true
}
```
## Events
| Event | When |
|-------|------|
| `prescription.submitted` | Member submits |
| `prescription.review_updated` | Admin review (consumed) |
## Related endpoints
- [`../endpoints/prescriptions.md`](../endpoints/prescriptions.md)
## Platform notes
- Multi-page photo/file upload on web; edge-detection camera is Mobile-only.
- No handwritten OCR.