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/endpoints/packages.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

186 lines
3.4 KiB
Markdown

# Endpoints: Packages
Corporate benefit plan CRUD and member assignment helpers.
**Workspace:** `/Users/kirukib/Desktop/Yaltopia Project/Gishen-B2B`
**Entity:** [`../entities/package.md`](../entities/package.md)
---
## GET /v1/packages
List packages.
| | |
|---|---|
| **Auth** | Required |
| **Roles** | SUPER_USER, HR_ADMIN, FINANCE (read), MEMBER (own assignment via `/v1/me/package`) |
### Query
`?page=1&status=active&q=gold`
### Response 200
Paginated [`Package`](../entities/package.md) list.
---
## POST /v1/packages
Create package.
| | |
|---|---|
| **Auth** | Required |
| **Roles** | SUPER_USER, HR_ADMIN |
### Request
```json
{
"name": "Silver Standard",
"code": "SILVER",
"description": "Standard employee coverage",
"allowance": {
"amount": { "amount": "8000.00", "currency": "ETB" },
"period": "monthly",
"rollover": false
},
"copay_percent": 15,
"categories": [
{ "category_code": "chronic", "coverage_percent": 90, "max_per_order": null }
],
"caps": {
"max_order_amount": { "amount": "5000.00", "currency": "ETB" },
"max_orders_per_month": 8,
"max_rx_fills_per_month": 3
},
"exclusions": [],
"perks": [],
"status": "draft"
}
```
### Response 201
Created package.
### Errors
| Code | HTTP | When |
|------|------|------|
| `DUPLICATE_PACKAGE` | 409 | Code exists |
| `ORG_PENDING` | 422 | Cannot activate until org active |
| `VALIDATION_FAILED` | 400 | |
---
## GET /v1/packages/:id
Package detail.
| | |
|---|---|
| **Auth** | Required |
| **Roles** | SUPER_USER, HR_ADMIN, FINANCE; MEMBER if assigned |
### Response 200
Full package including assigned `member_count`.
---
## PATCH /v1/packages/:id
Update package.
| | |
|---|---|
| **Auth** | Required |
| **Roles** | SUPER_USER, HR_ADMIN |
### Notes
- Setting `status: "active"` requires org `active`.
- Archiving blocked if members assigned without reassignment.
### Errors
| Code | HTTP |
|------|------|
| `PACKAGE_IN_USE` | 422 |
---
## DELETE /v1/packages/:id
Archive package (`status: archived`).
| | |
|---|---|
| **Auth** | Required |
| **Roles** | SUPER_USER, HR_ADMIN |
---
## GET /v1/packages/:id/members
Members assigned to package.
| | |
|---|---|
| **Auth** | Required |
| **Roles** | SUPER_USER, HR_ADMIN |
### Response 200
Paginated member summary (id, name, employee_id, status).
---
## GET /v1/me/package
Member's assigned package + allowance (member portal).
| | |
|---|---|
| **Auth** | Required |
| **Roles** | MEMBER, SUPER_USER (when viewing as member) |
### Response 200
```json
{
"data": {
"package": { "id": "pkg_01HGOLD", "name": "Gold Executive", "code": "GOLD", "...": "..." },
"allowance_summary": {
"allowance_total": { "amount": "15000.00", "currency": "ETB" },
"allowance_used": { "amount": "4200.00", "currency": "ETB" },
"allowance_remaining": { "amount": "10800.00", "currency": "ETB" }
},
"overrides": null
}
}
```
---
## UI routes
| Route | Endpoint(s) |
|-------|-------------|
| `/packages` | GET `/v1/packages` |
| `/packages/new` | POST `/v1/packages` |
| `/packages/[id]` | GET/PATCH + activate/deactivate mock |
| `/me` | GET `/v1/me/package` |
## Clinical withhold
Packages contain coverage rules only — safe for all roles.
## Checkout note
Remaining allowance displayed in B2B member UI; **entitlement split at checkout** is implemented in Gishen-Ecom — see [`../../coordination/gishen-ecom.md`](../../coordination/gishen-ecom.md).