backend phase 14 & frontend phase 7

This commit is contained in:
hamid
2026-07-09 15:30:03 +03:30
parent de53f9d8a6
commit 93cc5ecb98
101 changed files with 12930 additions and 39 deletions
@@ -0,0 +1,43 @@
/**
* When true, the booking-requests domain is served by the in-memory mock (`apis/mockApi.ts`) behind the
* `BookingRequestsApi` seam.
*
* **Mock is primary this phase.** The b8 endpoints are live server-side, but every *input* to a request
* — the nurse (search, f6), the patient (patients, f2), the address (addresses, f3) — is itself served by
* a **mock-primary** client domain today, so a real `booking_requests/create` would reference ids that
* exist only in those in-memory stores. Running the whole flow end-to-end (create → nurse inbox → accept
* → the customer's C5 flips → expiry) therefore needs a mock that shares the same session state. The mock
* drives exactly that. Additionally the contract DTO omits the variant price the summary card renders
* (REQ-013). Flip to `false` once the upstream domains are live and REQ-013 lands — no hook/component
* change (see `dev/shared-working-context/reports/frontend-phase-7-report.md`).
*/
export const USE_BOOKING_REQUESTS_MOCK = true;
/**
* The customer's C5 and the nurse inbox **poll** while a request is non-terminal so a transition
* (accept / reject / expire) surfaces without a manual refresh; polling **stops** on a terminal/`converted`
* status (see the hooks' `refetchInterval` guard). 15s balances freshness against request volume.
*/
export const BOOKING_REQUEST_POLL_MS = 15 * 1000;
/** A single request is cheap and changes only on the other party's action — a short stale window. */
export const BOOKING_REQUEST_STALE_TIME = 10 * 1000;
export const BOOKING_REQUEST_GC_TIME = 5 * 60 * 1000;
/** api-conventions default/max page sizes (max 100 server-side); an inbox page. */
export const BOOKING_REQUEST_PAGE_SIZE = 20;
/** `customerNotes` limit (contract: ≤ 1000) — enforced client-side before the CTA. */
export const CUSTOMER_NOTES_MAX_LENGTH = 1000;
/** `nurseRejectionReason` limit (contract: ≤ 500) — enforced client-side in the reject dialog. */
export const REJECTION_REASON_MAX_LENGTH = 500;
/**
* Mock-only deadline windows. The **payment** window is contract-accurate (30 min); the **response**
* window is a demo-shortened stand-in for the server's real 24h so a session can observe the
* `expired_no_response` terminal path. Neither is used on the real path — the server freezes the true
* deadlines from `IPlatformConfig`. Documented in the phase report + mocks note.
*/
export const MOCK_RESPONSE_DEADLINE_MINUTES = 30;
export const MOCK_PAYMENT_DEADLINE_MINUTES = 30;