2.9 KiB
Phase 09 — Nurse verification badge doesn't reflect reality
Blocker: blockers.md § "Trust — nurse verification." Depends on: nothing to start; do together with 10-search-dedup-and-trust.md — same root cause on two of the four call sites.
Root cause. client/src/services/verification/constants.ts:9 — USE_VERIFICATION_MOCK = true. The real
backend is fully built and shape-matched: GET nurse_verification → NurseVerificationController.cs:32-35;
GET nurses/{id}/trust_badge (anonymous) → NursesController.cs:26-29; all admin queue/decide endpoints
(AdminVerificationsController.cs) match the client's DecideStepInput fields exactly.
Two real gaps that must ship in the same change as flipping the flag, or the admin half 404s
verificationClientApi.approveVerification/.rejectVerification(clientApi.ts:269-278) POST toadmin_verifications/{id}/approve//reject— routes that don't exist. They're wired into the live UI (admin/verification/[nurseId]/page.tsx:81-82), so this is a real break, not theoretical. This is also exactly the gap forgotten-features.md calls out for nurse approval. The real workflow already achieves the same outcome viaDecideon the last pending step (AdminReviewStepCommand.Handler.cs:72→VerificationAggregator.Finalize) — so either add the two explicit endpoints (thin wrappers that resolve "the last pending step" and call the same finalize path), or rewire the two admin buttons to calldecideStepdirectly. Not a business-rule question — pure engineering gap.getDocumentSignedUrl(clientApi.ts:255-256) targetsadmin_verifications/documents/{id}/url— also missing; the case detail already carries a signed URL per document, so a re-open should just refetch the case instead.
Small DTO gap, currently harmless
Server's VerificationStepDto.IsRequired has no client-side
equivalent (verification/types.ts:62-71), and blockingSteps is computed from all non-passed steps, not
just required ones (VerificationRepository.cs:138-141) — fine while every seeded step is required; would
misrepresent "what's blocking" the day an optional step type is added. Worth a note, not urgent.
Fix: flip USE_VERIFICATION_MOCK to false, ship the two missing/rewired admin actions in the same
change.
Same-symptom bugs, actually filed under Search — fix together since they're one root cause
Hardcoded literals, not the mock: search/nurse/[nurseId]/page.tsx:173 and
NurseResultCard.tsx:87 both hardcode state="verified" instead of deriving it from the real
profile.isVerified / index-guarantee data. verification/types.ts:328-330 already has the exact helper
built for this (publicBadgeState) — neither call site uses it. See
10-search-dedup-and-trust.md for the rest of that phase.