Skip to content

Asignación Directa de Servicio

Endpoint

POST /api/v2/asignacion-directa

Descripción

Permite crear un servicio completo y asignarlo directamente a una central específica, sin pasar por el proceso de ofertamiento. Esta funcionalidad es útil para servicios pre-acordados o cuando se conoce previamente qué central atenderá el servicio.

Características:

  • Creación instantánea sin proceso de ofertamiento
  • Asignación directa a central específica mediante DNI del prestador
  • Información completa del servicio y cliente en una sola petición
  • 🔢 Generación automática de códigos de servicio y solicitud

Ventajas:

  • Menor tiempo de procesamiento
  • 📅 Ideal para servicios programados
  • Control directo sobre la asignación

Autenticación

Authorization: Basic <credentials>

Parámetros de Entrada

Body (JSON)

Campos del Servicio

CampoTipoRequeridoDescripción
uuidstring (UUID)Identificador único para este servicio
dniPrestadorstringNIT o documento de la central prestadora
dniGeneradorstringNoDocumento del usuario que genera el servicio
tipoServiciostringTipo de servicio (usar IDs de /api/v2/types)
descripcionServiciostringDescripción detallada del servicio requerido

Ubicaciones

CampoTipoRequeridoDescripción
latitudOrigenstringCoordenada de latitud del punto de origen
longitudOrigenstringCoordenada de longitud del punto de origen
puntoReferenciaOrigenstringNoReferencia del lugar de origen
direccionOrigenstringDirección completa del punto de origen
latitudDestinostringNoCoordenada de latitud del punto de destino
longitudDestinostringNoCoordenada de longitud del punto de destino
puntoReferenciaDestinostringNoReferencia del lugar de destino
direccionDestinostringNoDirección completa del punto de destino
ciudadstringCiudad donde se prestará el servicio
departamentostringDepartamento donde se prestará el servicio

Programación

CampoTipoRequeridoDescripción
fechaCitastringNoFecha programada para el servicio
horaCitastringNoHora programada para el servicio
observacionesstringNoObservaciones adicionales sobre el servicio

Códigos y Cliente

CampoTipoRequeridoDescripción
codigoServiciostringNoCódigo único del servicio (se genera automáticamente si no se envía)
codigoSolicitudstringNoCódigo adicional para servicios con múltiples consecutivos
riesgostringNoNúmero de póliza o identificador del riesgo

Datos del Cliente

CampoTipoRequeridoDescripción
primerNombrestringNoPrimer nombre del solicitante
segundoNombrestringNoSegundo nombre del solicitante
primerApellidostringNoPrimer apellido del solicitante
segundoApellidostringNoSegundo apellido del solicitante
telefonoSolicitantestringNoTeléfono principal del solicitante
telefonoSolicitante2stringNoTeléfono alternativo del solicitante

Datos del Vehículo

CampoTipoRequeridoDescripción
claseVehiculostringNoClase o tipo del vehículo
marcaVehiculostringNoMarca del vehículo
tipoTransmisionVehiculostringNoTipo de transmisión del vehículo

Ejemplo de Request

json
{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "dniPrestador": "900123456",
  "dniGenerador": "98765432",
  "tipoServicio": "1",
  "descripcionServicio": "Grúa liviana para vehículo averiado en autopista",
  
  "latitudOrigen": "6.2442",
  "longitudOrigen": "-75.5812",
  "puntoReferenciaOrigen": "Autopista Norte Km 15, frente a estación de servicio",
  "direccionOrigen": "Autopista Norte Km 15",
  "latitudDestino": "6.2518",
  "longitudDestino": "-75.5636",
  "puntoReferenciaDestino": "Taller mecánico Los Ángeles",
  "direccionDestino": "Calle 78B #69-240",
  "ciudad": "Medellín",
  "departamento": "Antioquia",
  
  "fechaCita": "2025-07-03",
  "horaCita": "16:30",
  "observaciones": "Vehículo en carril de emergencia, requiere atención urgente",
  
  "codigoServicio": "GOT00356",
  "codigoSolicitud": "ABO0036",
  "riesgo": "POL-2025-001234",
  
  "primerNombre": "Carlos",
  "segundoNombre": "Andrés",
  "primerApellido": "Rodríguez",
  "segundoApellido": "García",
  "telefonoSolicitante": "+57 300-123-4567",
  "telefonoSolicitante2": "+57 301-234-5678",
  
  "claseVehiculo": "Automóvil",
  "marcaVehiculo": "Toyota",
  "tipoTransmisionVehiculo": "Automática"
}

Respuestas

Éxito (200 Correcto)

json
{
  "status": true,
  "msg": "El servicio 'GOT00356' ha sido asignado exitosamente a la central Prestadora Norte SAS",
  "codigoServicio": "GOT00356",
  "codigoSolicitud": "ABO0036"
}

Error de Restricción (403 Forbidden)

json
{
  "status": false,
  "msg": "No se cumple la condición de cobertura geográfica para la asignación"
}

Restricciones comunes:

  • Central no tiene cobertura en la ubicación
  • Central no está activa o disponible
  • Tipo de servicio no ofrecido por la central
  • Horario fuera del rango de operación

Error de Validación (400 Solicitud Incorrecta)

json
{
  "status": false,
  "msg": "DNI del prestador es requerido"
}

Errores comunes:

  • DNI del prestador faltante o inválido
  • UUID duplicado
  • Coordenadas en formato incorrecto
  • Tipo de servicio no válido

Ejemplos de Código

cURL

bash
curl -X POST "[URL_API]/api/v2/asignacion-directa" \
  --user "tu_usuario:tu_password" \
  -H "Content-Type: application/json" \
  -d '{
    "uuid": "123e4567-e89b-12d3-a456-426614174000",
    "dniPrestador": "900123456",
    "tipoServicio": "1",
    "descripcionServicio": "Grúa liviana urgente",
    "latitudOrigen": "6.2442",
    "longitudOrigen": "-75.5812",
    "direccionOrigen": "Autopista Norte Km 15",
    "ciudad": "Medellín",
    "departamento": "Antioquia"
  }'

JavaScript

javascript
const crearAsignacionDirecta = async (datosServicio) => {
  const response = await fetch('[URL_API]/api/v2/asignacion-directa', {
    method: 'POST',
    headers: {
      'Authorization': `Basic ${btoa('usuario:password')}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(datosServicio)
  });

  const result = await response.json();
  
  if (!result.status) {
    throw new Error(result.msg);
  }
  
  return result;
};

// Uso
try {
  const resultado = await crearAsignacionDirecta({
    uuid: '123e4567-e89b-12d3-a456-426614174000',
    dniPrestador: '900123456',
    tipoServicio: '1',
    descripcionServicio: 'Grúa liviana para automóvil',
    latitudOrigen: '6.2442',
    longitudOrigen: '-75.5812',
    direccionOrigen: 'Autopista Norte Km 15',
    ciudad: 'Medellín',
    departamento: 'Antioquia',
    primerNombre: 'Carlos',
    primerApellido: 'Rodríguez',
    telefonoSolicitante: '+57 300-123-4567'
  });
  
  console.log('Servicio asignado:', resultado.codigoServicio);
} catch (error) {
  console.error('Error:', error.message);
}

Python

python
import requests
from requests.auth import HTTPBasicAuth

def crear_asignacion_directa(datos_servicio):
    response = requests.post(
        '[URL_API]/api/v2/asignacion-directa',
        auth=HTTPBasicAuth('usuario', 'password'),
        json=datos_servicio
    )
    
    result = response.json()
    
    if not result['status']:
        raise Exception(result['msg'])
    
    return result

# Uso
try:
    datos = {
        'uuid': '123e4567-e89b-12d3-a456-426614174000',
        'dniPrestador': '900123456',
        'tipoServicio': '1',
        'descripcionServicio': 'Grúa liviana urgente',
        'latitudOrigen': '6.2442',
        'longitudOrigen': '-75.5812',
        'direccionOrigen': 'Autopista Norte Km 15',
        'ciudad': 'Medellín',
        'departamento': 'Antioquia'
    }
    
    resultado = crear_asignacion_directa(datos)
    print(f"Servicio creado: {resultado['codigoServicio']}")
    
except Exception as e:
    print(f"Error: {e}")

Cuándo Usar Asignación Directa

Casos Recomendados

  • Servicios programados: Citas médicas, traslados planificados
  • Acuerdos preestablecidos: Central específica para ciertos clientes
  • Emergencias dirigidas: Cuando se conoce la central más cercana
  • Servicios corporativos: Contratos con prestadores específicos

No Recomendado Para

  • Servicios urgentes sin central definida: Mejor usar ofertamiento
  • Cobertura incierta: Cuando no sabes si la central atiende la zona
  • Comparación de precios: El ofertamiento permite mejores tarifas

Flujo de Asignación Directa

mermaid
sequenceDiagram
    participant Cliente
    participant API as TSALVA API
    participant Central as Central Específica
    participant Webhook as Cliente Webhook

    Cliente->>API: POST /api/v2/asignacion-directa
    Note over Cliente,API: Todos los datos en una petición
    
    API->>Central: Asignar servicio directamente
    API-->>Cliente: Confirmación con códigos
    
    Central->>API: Aceptar/rechazar servicio
    
    opt Si central acepta
        API->>Webhook: Webhook de aceptación
        Central->>API: Cambios de estado
        API->>Webhook: Webhooks de progreso
    end
    
    opt Si central rechaza
        API->>Webhook: Webhook de rechazo
        Note over Cliente,Central: Servicio no se ejecuta
    end

Validaciones y Restricciones

Validación de DNI Prestador

javascript
async function validarPrestador(dniPrestador, ubicacion) {
  // Verificar que el prestador existe
  const prestador = await obtenerPrestador(dniPrestador);
  if (!prestador) {
    throw new Error('Prestador no encontrado');
  }
  
  // Verificar cobertura geográfica
  const tieneCobertura = await verificarCobertura(
    prestador.id, 
    ubicacion.ciudad, 
    ubicacion.departamento
  );
  
  if (!tieneCobertura) {
    throw new Error('Prestador no tiene cobertura en la ubicación');
  }
  
  return prestador;
}

Generación Automática de Códigos

Si no proporcionas codigoServicio, el sistema genera uno automáticamente:

Formato: [PREFIJO][FECHA][CONSECUTIVO]
Ejemplo: TSV20250703001

Comparación: Asignación Directa vs Ofertamiento

AspectoAsignación DirectaOfertamiento
VelocidadInmediataEspera aceptación
ControlCentral específicaDistribución automática
TarifasTarifa del prestadorCompetencia de precios
DisponibilidadDepende del prestadorMúltiples opciones
ComplejidadUna sola peticiónMúltiples pasos

Recomendación

Usa asignación directa cuando tengas acuerdos preestablecidos con centrales específicas o para servicios programados donde conoces previamente qué prestador debe atender.

Importante

La central puede rechazar la asignación directa si no tiene capacidad o cobertura. Siempre maneja el caso de rechazo en tu lógica de negocio.

Tsalva API - Documentación desarrollada por RobPixels