ServiceProfile


Perfil de un Provider para un tipo de servicio concreto (service_type). Un provider tiene como máximo un perfil por tipo. Guarda los datos del perfil (p. ej. los del vehículo, en delivery/shipping) y su reputación (rating_*).

Ciclo de vida y estados

  • status — pending → approved (con approve, si nunca lo estuvo) o blocked (block / unblock).
  • Revisión de datos (reviewing_data_status): al editar data, los cambios se guardan en reviewing_data y el estado pasa a draft. submit lo pasa a reviewing (ya no se puede editar). approve lo pasa a up_to_date y copia reviewing_data → data. refuse lo pasa a refused (se puede volver a editar). El único estado que impide editar es reviewing.
  • is_enabled — set-enabled (requiere status = approved) / set-disabled. Lo controla el provider.

Datos (data / reviewing_data)

Su forma depende de service_type: para delivery y shipping lleva brand, model, color, plate y year del vehículo; para shopping está vacío. data refleja lo aprobado; reviewing_data, lo pendiente. Ambos se devuelven como null cuando están vacíos.

Preferencias (preferences)

Bitmask oculto: pref_is_enabled (el perfil ya eligió sus preferencias) y las capacidades del repartidor (pref_is_pet_allowed, pref_is_smoker, pref_has_cold_storage, pref_can_transport_liquids, pref_has_fragile_handling_experience, pref_has_large_backpack, pref_has_secure_lockbox, pref_accepts_cash_on_delivery).

Reputación

rating_e2 es la calificación promedio (× 100); rating_sum y rating_count la acumulan. public_rating_e2 es la vista pública.

Notas y gotchas

  • preferences está en $hidden.
  • Los perfiles aprobados y habilitados son los que pueden integrar una Fleet vía FleetMember.

Estructura de Datos

Atributo Tipo Descripción
id int
is_enabled bool Si el perfil está activo (lo controla el provider)
status string Estado del perfil: pending, approved o blocked
reviewing_data array Datos del perfil pendientes de revisión
reviewing_data_status string Estado de la revisión de datos: draft, reviewing, up_to_date o refused
data array Datos del perfil ya aprobados (forma según service_type)
provider_id int {@link \App\Provider} dueño del perfil
service_type int Código de {@link ServiceType} del perfil
vehicle_type int Código de {@link VehicleType} del perfil
created_at datetime\|null
updated_at datetime\|null
rating_e2 int Calificación promedio del perfil (× 100)
rating_sum int Suma de las calificaciones recibidas
rating_count int Cantidad de calificaciones recibidas
preferences int Bitmask de preferencias del repartidor (oculto; ver "Preferencias")
pref_is_enabled bool BitMask (({@link self::preferences} & 0x1) !== 0)
pref_is_pet_allowed bool BitMask (({@link self::preferences} & 0x2) !== 0)
pref_is_smoker bool BitMask (({@link self::preferences} & 0x4) !== 0)
pref_has_cold_storage bool BitMask (({@link self::preferences} & 0x8) !== 0)
pref_can_transport_liquids bool BitMask (({@link self::preferences} & 0x10) !== 0)
pref_has_fragile_handling_experience bool BitMask (({@link self::preferences} & 0x20) !== 0)
pref_has_large_backpack bool BitMask (({@link self::preferences} & 0x40) !== 0)
pref_has_secure_lockbox bool BitMask (({@link self::preferences} & 0x80) !== 0)
pref_accepts_cash_on_delivery bool BitMask (({@link self::preferences} & 0x100) !== 0)
allLogs ApiLog>
error string\|null Mensaje de error del perfil respecto a una flota (contextual, al listar)
fleetMembers FleetMember> Membresías del perfil en flotas ({@link FleetMember})
logs ApiLog>
provider Provider {@link \App\Provider} dueño del perfil
public_rating_e2 int Calificación pública del perfil (× 100)
serviceType ServiceType {@link ServiceType} del perfil
vehicleType VehicleType {@link VehicleType} del perfil
{
    "id": 1,
    "is_enabled": true,
    "status": "approved",
    "reviewing_data": {
        "brand": null,
        "model": null,
        "color": null,
        "plate": null
    },
    "reviewing_data_status": "draft",
    "data": {
        "brand": null,
        "model": null,
        "color": null,
        "plate": null
    },
    "provider_id": 32,
    "service_type": 1,
    "vehicle_type": 2,
    "created_at": "2023-07-07 13:36:35",
    "updated_at": "2023-07-07 13:36:35",
    "rating_e2": 500,
    "rating_sum": 0,
    "rating_count": 0,
    "pref_is_enabled": false,
    "pref_is_pet_allowed": false,
    "pref_is_smoker": false,
    "pref_has_cold_storage": false,
    "pref_can_transport_liquids": false,
    "pref_has_fragile_handling_experience": false,
    "pref_has_large_backpack": false,
    "pref_has_secure_lockbox": false,
    "pref_accepts_cash_on_delivery": false
}

Endpoints

Insertar ServiceProfile

Insertar ServiceProfile de Provider

Crear perfil de servicio

Crea el ServiceProfile de un Provider para un service_type. Nace pending / draft y deshabilitado; los datos enviados van a reviewing_data, validados según el service_type.

Método URI Cabeceras
POST /providers/{providerId}/service-profiles Authorization
{
    "data": "array",
    "service_type": "required|integer|exists:service_types,code",
    "vehicle_type": "required|integer|exists:vehicle_types,code",
    "pref_is_enabled": "nullable|boolean",
    "pref_is_pet_allowed": "nullable|boolean",
    "pref_is_smoker": "nullable|boolean",
    "pref_has_cold_storage": "nullable|boolean",
    "pref_can_transport_liquids": "nullable|boolean",
    "pref_has_fragile_handling_experience": "nullable|boolean",
    "pref_has_large_backpack": "nullable|boolean",
    "pref_has_secure_lockbox": "nullable|boolean",
    "pref_accepts_cash_on_delivery": "nullable|boolean"
}

Listar ServiceProfile

{info} Soporta: Paginación Filters Carga dinámica

Listar perfiles de servicio

Listado paginado de ServiceProfile, ordenado por estado (aprobado / pendiente / bloqueado) y por estado de revisión. Con fleet_id adjunta a cada perfil el motivo por el que no puede unirse a esa flota.

Método URI Cabeceras
GET /service-profiles N/A

Mostrar ServiceProfile

{info} Soporta: Carga dinámica

Mostrar perfil de servicio

Devuelve el ServiceProfile por su id.

Método URI Cabeceras
GET /service-profiles/{serviceProfileId} N/A

Actualizar ServiceProfile

Actualizar perfil de servicio

Modifica is_enabled, service_type, vehicle_type y los datos del ServiceProfile. Los datos van a reviewing_data (validados según service_type) y el estado de revisión vuelve a draft.

Método URI Cabeceras
PATCH /service-profiles/{serviceProfileId} Authorization
{
    "is_enabled": "boolean",
    "data": "array",
    "vehicle_type": "integer|exists:vehicle_types,code",
    "pref_is_enabled": "nullable|boolean",
    "pref_is_pet_allowed": "nullable|boolean",
    "pref_is_smoker": "nullable|boolean",
    "pref_has_cold_storage": "nullable|boolean",
    "pref_can_transport_liquids": "nullable|boolean",
    "pref_has_fragile_handling_experience": "nullable|boolean",
    "pref_has_large_backpack": "nullable|boolean",
    "pref_has_secure_lockbox": "nullable|boolean",
    "pref_accepts_cash_on_delivery": "nullable|boolean"
}

Errores de negocio

Código HTTP Cuándo ocurre
ES050 400 No se pueden modificar los datos mientras están en revisión.

Eliminar ServiceProfile

Eliminar perfil de servicio

Borra el ServiceProfile.

Método URI Cabeceras
DELETE /service-profiles/{serviceProfileId} Authorization

Acciones de ServiceProfile

Listar perfiles de servicio de un repartidor

{info} Soporta: Paginación Filters Carga dinámica

ServiceProfile de un Provider concreto.

Método URI Cabeceras
GET /providers/{providerId}/service-profiles Authorization

Enviar datos del perfil a revisión

Pasa reviewing_data_status a reviewing; a partir de ahí no se pueden editar los datos hasta que se aprueben o rechacen.

Método URI Cabeceras
POST /service-profiles/{serviceProfileId}/submit Authorization

Errores de negocio

Código HTTP Cuándo ocurre
ES053 400 No hay cambios pendientes (los datos no están en draft).
ES052 400 Los datos ya fueron enviados a revisión.

Aprobar datos del perfil

Pasa reviewing_data_status a up_to_date, copia reviewing_data → data y, si el ServiceProfile estaba pending, lo deja approved.

Método URI Cabeceras
POST /service-profiles/{serviceProfileId}/approve Authorization

Errores de negocio

Código HTTP Cuándo ocurre
ES051 400 Los datos del perfil no han sido enviados a revisión.

Rechazar datos del perfil

Pasa reviewing_data_status a refused; el provider puede volver a editar los datos y reenviarlos.

Método URI Cabeceras
POST /service-profiles/{serviceProfileId}/refuse Authorization

Errores de negocio

Código HTTP Cuándo ocurre
ES051 400 Los datos del perfil no han sido enviados a revisión.

Bloquear perfil de servicio

Pone status = blocked en el ServiceProfile.

Método URI Cabeceras
POST /service-profiles/{serviceProfileId}/block Authorization

Errores de negocio

Código HTTP Cuándo ocurre
ES059 400 El perfil ya está bloqueado.

Desbloquear perfil de servicio

Quita el bloqueo del ServiceProfile: deja status = approved si los datos están al día (up_to_date), o pending en caso contrario.

Método URI Cabeceras
POST /service-profiles/{serviceProfileId}/unblock Authorization

Errores de negocio

Código HTTP Cuándo ocurre
ES058 400 El perfil no está bloqueado.

Habilitar perfil de servicio

Pone is_enabled = true en el ServiceProfile. Requiere status = approved.

Método URI Cabeceras
POST /service-profiles/{serviceProfileId}/set-enabled Authorization

Errores de negocio

Código HTTP Cuándo ocurre
ES055 400 El perfil ya está habilitado.
ES056 400 El perfil no está aprobado.

Deshabilitar perfil de servicio

Pone is_enabled = false en el ServiceProfile.

Método URI Cabeceras
POST /service-profiles/{serviceProfileId}/set-disabled Authorization

Errores de negocio

Código HTTP Cuándo ocurre
ES054 400 El perfil no está habilitado.

Relaciones