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_*).
status — pending → approved (con approve, si nunca lo estuvo) o blocked
(block / unblock).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.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.
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).
rating_e2 es la calificación promedio (× 100); rating_sum y rating_count la acumulan.
public_rating_e2 es la vista pública.
preferences está en $hidden.| 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
}
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"
}
{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 |
{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 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"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
ES050 |
400 | No se pueden modificar los datos mientras están en revisión. |
Eliminar perfil de servicio
Borra el ServiceProfile.
| Método | URI | Cabeceras |
|---|---|---|
| DELETE | /service-profiles/{serviceProfileId} |
Authorization |
{info} Soporta: Paginación Filters Carga dinámica
ServiceProfile de un Provider concreto.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /providers/{providerId}/service-profiles |
Authorization |
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 |
| 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. |
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 |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
ES051 |
400 | Los datos del perfil no han sido enviados a revisión. |
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 |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
ES051 |
400 | Los datos del perfil no han sido enviados a revisión. |
Pone status = blocked en el ServiceProfile.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /service-profiles/{serviceProfileId}/block |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
ES059 |
400 | El perfil ya está bloqueado. |
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 |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
ES058 |
400 | El perfil no está bloqueado. |
Pone is_enabled = true en el ServiceProfile. Requiere status = approved.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /service-profiles/{serviceProfileId}/set-enabled |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
ES055 |
400 | El perfil ya está habilitado. |
ES056 |
400 | El perfil no está aprobado. |
Pone is_enabled = false en el ServiceProfile.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /service-profiles/{serviceProfileId}/set-disabled |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
ES054 |
400 | El perfil no está habilitado. |
allLogs HasMany ApiLogfleetMembers HasMany FleetMemberlogs HasMany ApiLogprovider BelongsTo ProviderserviceType BelongsTo ServiceTypevehicleType BelongsTo VehicleType