# Phase 14 — Partner / business-center accounts

**Blocker:** blockers.md § "Partner / business-center accounts." Largest single phase in this folder — mostly
new server surface.
**Depends on:** nothing structurally, but exercising it end-to-end benefits from
[01-admin-rbac.md](01-admin-rbac.md) for the staff-authorized paths.

---

Two distinct sub-issues.

## 14a. No real "which center am I" resolution

`client/src/services/partnerCenter/constants.ts:10,13` —
`USE_PARTNER_MOCK = true`, `MOCK_MY_CENTER_ID = 1` — every signed-in caller gets center #1. The "real" path
(`clientApi.ts:105`, `GET centers/me`) targets a route that **doesn't exist anywhere server-side.** The only
partner portal route is `GET centers/{id}/dashboard` (`CentersController.cs:16-26`), which requires already
knowing the id — it authorizes, but never resolves one. `IPartnerCenterRepository` has no reverse
`userId → centerId` lookup at all.

**Fix:** add a reverse lookup to `IPartnerCenterRepository` (the join shape already exists in
`GetDashboardAsync`, `PartnerCenterRepository.cs:114-144`), a `GetMyPartnerCenterQuery` keyed off
`ICurrentUser.UserId`, and `GET api/v1/centers/me` on `CentersController`.

**Flag:** should this same signal also close the separately-tracked REQ-038 (surfacing "you administer a
center" on `/me` so nav/routing can auto-detect the role)? Product call, not required for the fix itself.

## 14b. Booking list and settlement report have zero server endpoint

Confirmed by exhaustive search — no
query/command exists anywhere for "list a center's sponsored bookings" or "list a center's settlement
invoices." The only thing that exists is bare counts on `CenterDashboardDto`. There's no invoice *list*
capability anywhere in the codebase (only a single-by-booking-id read), and even that single read
(`GetInvoiceQuery.Handler.cs:25-27`) authorizes only `Admin` or the booking's own customer — a center owner
reading its own issued invoice currently 404s. The client is fully built against these phantom routes
(`partner/bookings/page.tsx`, `partner/settlement/page.tsx` — real, complete UIs with nothing to call).

**Fix:** new `ListSponsoredBookingsQuery` (join `Booking` → `NurseProfile.PartnerCenterId`) and
`ListCenterInvoicesQuery` (`Invoice.PartnerCenterId == centerId`), each authorized like
`GetCenterDashboardQuery` (owning admin or staff), routed under `centers/me/bookings` and
`centers/me/settlement` to match what the client already expects.

**Flag, don't guess:** should a non-merchant-of-record center (settlement runs through Balinyaar) get read
access to platform-issued invoices for its sponsored bookings? The client already UI-special-cases this
(`settlement_not_mor` state) but the data question isn't answered anywhere in `mvp/`/`archive/product/`.
