@startuml uml-sequence-prestador-acepta-job !include _style.iuml title 2. Prestador acepta y avanza un job ' Fuente: apps/web/src/app/api/v1/mobile/provider/jobs/[id]/status/route.ts:1-52 ' Fuente: apps/web/src/lib/api/handler.ts:35-110 (defineEndpoint) ' Fuente: 00.sql (historial_estatus_orden + estatus_orden enum) autoactivate on actor "Prestador" as Prov box "Mobile Provider (Expo)" #F0F0F0 participant "App\nmobile-provider" as App end box box "API REST Next.js" #F5F5F5 boundary "PATCH /provider/jobs/[id]/status" as Route control "defineEndpoint\nauth.role=['prestador']" as Handler control "requireRole + Zod" as Guard end box box "Persistencia Postgres (Neon)" #EAEAEA database "ordenes_servicio" as DBOrd database "historial_estatus_orden" as DBHist end box participant "Push notifier\n(cliente)" as Push == Verificación de tier == Prov -> App ++ : Pulsa "Aceptar" en job asignado App ->> Route ++ : PATCH .../status {estatus:'en_camino'} Route -> Handler ++ : delegar Handler -> Guard ++ : requireRole('prestador')\nZod parse params+body note right of Guard handler.ts:53-67 403 si rol != prestador end note Guard --> Handler -- : SessionPayload (sub, rol) Handler -> DBOrd ++ : SELECT id, estatus\nWHERE id=$1 AND prestador_id=$2 DBOrd --> Handler -- : {estatus: 'asignada'} == Validación de transición == Handler -> Handler : ALLOWED_TRANSITIONS\n[asignada] = [en_camino, cancelada] note right of Handler status/route.ts:7-11 422 si transición no válida end note alt transición permitida Handler -> DBOrd ++ : UPDATE ordenes_servicio\nSET estatus = 'en_camino' DBOrd --> Handler -- : orden actualizada Handler -> DBHist ++ : INSERT historial_estatus_orden\n(estatus_anterior, estatus_nuevo, cambiado_por) DBHist --> Handler -- Handler ->> Push : notificar cliente\n"Tu prestador va en camino" Handler --> Route -- : 200 {orden} Route --> App -- : 200 OK App --> Prov -- : Pantalla "En ruta" else transición inválida Handler --> Route : UnprocessableError\n"No se puede cambiar de X a Y" Route --> App : 422 App --> Prov : Toast de error end footer Fuente: apps/web/src/app/api/v1/mobile/provider/jobs/[id]/status/route.ts | apps/web/src/lib/api/handler.ts | 00.sql historial_estatus_orden @enduml