{"openapi":"3.1.0","info":{"title":"SeguroMatch — cotizar para agentes de IA","version":"1.0.0","description":"Cotiza seguros de hogar, coche y moto en España en nombre de un cliente, con todos sus datos de una vez. Flujo: GET /api/agent/requisitos?ramo=… → pregunta al cliente todo en un mensaje → POST /api/agent/cotizaciones. Sin autenticación. No contrata ni cobra: el cliente recibe en su correo los precios y el enlace para contratar, y confirma con un código SMS. También disponible como servidor MCP en POST /api/agent/mcp. Privacidad: https://seguromatch.com/legal/politica-privacidad"},"servers":[{"url":"https://seguromatch.com"}],"paths":{"/api/agent/requisitos":{"get":{"operationId":"requisitos","summary":"Datos que hay que pedir al cliente para cotizar un ramo","parameters":[{"name":"ramo","in":"query","required":false,"schema":{"type":"string","enum":["hogar","coche","moto"]}}],"responses":{"200":{"description":"Requisitos del ramo (o índice sin ramo)"},"400":{"description":"Ramo no válido","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}}}}},"/api/agent/catalogo":{"get":{"operationId":"catalogo","summary":"Valores permitidos de un campo","parameters":[{"name":"tipo","in":"query","required":true,"schema":{"type":"string","enum":["document-types","genders","nationalities","marital-statuses","employment-statuses","home-property-types","home-build-materials","home-occupancies","home-locations","home-build-qualities","home-alarm-types","home-door-types","home-settlement-types","driving-license-types","fuel-types","car-use-types","annual-km-options","car-parking-types","motorcycle-garage-types","motorcycle-driving-experience","motorcycle-driving-license-types","car-insurance-companies","motorcycle-insurance-companies","motorcycle-engine-types","economic-occupations","home-uses","road-types","provinces","towns","vehicle-brands","vehicle-models","vehicle-versions"]}},{"name":"codigo_postal","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{5}$"}},{"name":"ramo","in":"query","required":false,"schema":{"type":"string","enum":["coche","moto"]}},{"name":"marca","in":"query","required":false,"schema":{"type":"string"}},{"name":"modelo","in":"query","required":false,"schema":{"type":"string"}},{"name":"motor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Valores del catálogo"},"400":{"description":"Parámetros no válidos","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}},"429":{"description":"Límite alcanzado","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}}}}},"/api/agent/cotizaciones":{"post":{"operationId":"cotizar","summary":"Cotizar con todos los datos del cliente","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateHomeQuote"},{"$ref":"#/components/schemas/CreateCarQuote"},{"$ref":"#/components/schemas/CreateMotorcycleQuote"}],"discriminator":{"propertyName":"insurance_line","mapping":{"Home":"#/components/schemas/CreateHomeQuote","Car":"#/components/schemas/CreateCarQuote","Motorcycle":"#/components/schemas/CreateMotorcycleQuote"}}}}}},"responses":{"200":{"description":"Precios por aseguradora. El enlace para contratar va al correo del cliente.","content":{"application/json":{"schema":{"type":"object","properties":{"estado":{"type":"string","enum":["cotizado","sin_ofertas"]},"ramo":{"type":"string","enum":["Home","Car","Motorcycle"]},"referencia":{"type":"string"},"ofertas":{"type":"array","items":{"type":"object","properties":{"aseguradora":{"type":["string","null"]},"producto":{"type":["string","null"]},"modalidad":{"type":["string","null"]},"precio":{"type":"number"},"moneda":{"type":"string","enum":["EUR"]},"periodicidad":{"type":["string","null"]},"precio_anual_total":{"type":["number","null"]},"franquicia":{"type":["number","null"]},"es_estimacion":{"type":"boolean"},"oferta_id":{"type":"string","description":"Para ver y personalizar esta oferta en /api/agent/ofertas/{oferta_id}/… (24 h). Nunca sirve para contratar."}}}},"mejor_precio":{"type":["number","null"]},"siguiente_paso":{"type":"string"},"aviso":{"type":"string"},"request_id":{"type":"string"}}}}}},"400":{"description":"Faltan datos o son incorrectos: TODOS los errores juntos","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}},"403":{"description":"No se puede cotizar con estos datos","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}},"429":{"description":"Límite alcanzado (ver Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}},"503":{"description":"Canal apagado o consulta no disponible (ver Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}}}}},"/api/agent/ofertas/{oferta_id}/opciones":{"get":{"operationId":"opcionesDeOferta","summary":"Qué se puede personalizar de una oferta (contrato engine-2 sin datos personales)","parameters":[{"name":"oferta_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{ oferta_id, contrato, siguiente_paso }`: cada campo con tipo, límites, valores y condiciones."},"404":{"description":"Oferta no encontrada","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}},"409":{"description":"La referencia caducó: vuelve a cotizar","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}},"422":{"description":"Esta oferta no se puede personalizar por este canal","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}},"429":{"description":"Límite alcanzado (ver Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}}}}},"/api/agent/ofertas/{oferta_id}/personalizar":{"post":{"operationId":"personalizarOferta","summary":"Cambiar opciones o cadencia; la aseguradora recalcula el precio. NO contrata.","parameters":[{"name":"oferta_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["revision","values"],"properties":{"revision":{"type":"integer","description":"La del contrato que leíste."},"schema_rev":{"type":"integer"},"values":{"type":"object","additionalProperties":true,"description":"SOLO lo que cambias."},"cadence":{"type":"string","enum":["annual","biannual","quarterly","monthly"]}}}}}},"responses":{"200":{"description":"`{ oferta_id, contrato, siguiente_paso }` con el precio nuevo de la aseguradora."},"400":{"description":"Cuerpo mal formado","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}},"409":{"description":"El contrato cambió (se devuelve el nuevo), cambio en curso o sin confirmar","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}},"422":{"description":"Valores no admitidos u opción rechazada por la aseguradora","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}},"429":{"description":"Límite alcanzado (ver Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"mensaje":{"type":"string"},"errores":{"type":"array","items":{"type":"object"}},"request_id":{"type":"string"}}}}}}}}}},"components":{"schemas":{"CreateHomeQuote":{"type":"object","description":"El cuerpo de la petición. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza.","properties":{"insurance_line":{"type":"string","enum":["Home"],"example":"Home","description":"Ramo a cotizar. Se espera: Home, Car o Motorcycle."},"effective_date":{"type":"string","format":"date","example":"2030-01-01","description":"Fecha de inicio del seguro. Obligatoria: ya no se pone \"hoy\", y una fecha pasada se rechaza en vez de corregirse. Se espera: fecha YYYY-MM-DD, hoy o posterior (día natural de España)."},"client_reference":{"type":"string","maxLength":100,"example":"EXP-2026-0042","description":"Tu referencia interna. Se devuelve en la respuesta y en los webhooks. No es una clave de idempotencia. Se espera: texto de hasta 100 caracteres."},"holder":{"$ref":"#/components/schemas/HomeHolder"},"risk":{"$ref":"#/components/schemas/HomeRisk"}},"required":["insurance_line","effective_date","holder","risk"],"additionalProperties":false},"HomeHolder":{"type":"object","description":"El tomador. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `nationality` es obligatorio con `holder.document_type` = Nie o Passport. `address` es obligatorio salvo que envíes `holder.address_same_as_risk: true`. `address` NO se envía con `holder.address_same_as_risk: true` (enviarlo es una contradicción: 400).","properties":{"document_type":{"type":"string","enum":["Dni","Nie","Passport"],"example":"Dni","description":"Tipo de documento de identidad. No se asume DNI. Se espera: Dni, Nie o Passport (empresas con Cif no se cotizan por esta API). Valores: GET /api/v1/catalog?type=document-types."},"document_id":{"type":"string","minLength":5,"maxLength":20,"example":"12345678Z","description":"Número del documento. Su formato debe corresponder al tipo declarado. Se espera: DNI: 8 dígitos + letra · NIE: X/Y/Z + 7 dígitos + letra · Pasaporte: mínimo 5 caracteres."},"name":{"type":"string","minLength":1,"maxLength":60,"example":"Juan","description":"Nombre, tal como figura en el documento. Se espera: texto, solo letras."},"surname":{"type":"string","minLength":1,"maxLength":60,"example":"García","description":"Primer apellido. Se espera: texto, solo letras."},"surname2":{"type":"string","maxLength":60,"example":"López","description":"Segundo apellido. EXCEPCIÓN documentada: en Hogar, con DNI y sin segundo apellido, se duplica el primero. Se espera: texto, solo letras."},"birth_date":{"type":"string","format":"date","example":"1985-03-15","description":"Fecha de nacimiento. Se espera: fecha YYYY-MM-DD, no futura."},"gender":{"type":"string","enum":["Male","Female"],"example":"Female","description":"Sexo. No se asume \"Male\". Se espera: Male o Female. Valores: GET /api/v1/catalog?type=genders."},"marital_status":{"type":"string","enum":["Single","Married","UnmarriedPartner","Divorced","Widowed"],"example":"Married","description":"Estado civil. Determina la prima en varias aseguradoras; no se asume \"Single\". Se espera: un valor del catálogo marital-statuses. Valores: GET /api/v1/catalog?type=marital-statuses."},"nationality":{"type":"string","enum":["ESP","GBR","FRA","DEU","ITA","PRT","ROU","MAR","COL","ECU","ARG","VEN","PER","BOL","BRA","CHN","PAK","UKR","RUS","POL","BGR","NLD","BEL","SWE","NOR","DNK","FIN","IRL","CHE","AUT","USA","CAN","MEX","CHL","URY","PRY","CUB","DOM","HND","SLV","GTM","NIC","PAN","CRI","DZA","SEN","NGA","GHA","PHL","IND","JPN","KOR","AUS","NZL","TUR","ISR","EGY","ZAF"],"example":"ESP","description":"Nacionalidad ISO-3. Obligatoria con NIE o pasaporte. Con DNI es española por definición: si la mandas, tiene que ser ESP. Se espera: código ISO-3 del catálogo nationalities. OBLIGATORIO con `holder.document_type` = Nie o Passport. Valores: GET /api/v1/catalog?type=nationalities."},"employment_status":{"type":"string","enum":["Employee","SelfEmployed","CivilServant","Retired","Student","Unemployed","HomeWorker"],"example":"Employee","description":"Situación laboral. No se asume \"Employee\". Se espera: un valor del catálogo employment-statuses. Valores: GET /api/v1/catalog?type=employment-statuses."},"economic_occupation":{"type":"string","pattern":"^\\d{4}$","example":"2611","description":"Profesión, código CNO-11 de 4 dígitos. No se asume 2612. En Hogar es obligatoria siempre: para una persona inactiva, la última profesión ejercida. Se espera: 4 dígitos, en texto, del catálogo economic-occupations. Valores: GET /api/v1/catalog?type=economic-occupations."},"phone":{"type":"string","example":"+34644182739","description":"Móvil español del tomador. Se espera: 9 dígitos empezando por 6 o 7; se admiten +34 y 0034."},"email":{"type":"string","maxLength":100,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$","example":"cliente@example.com","description":"Correo del tomador. Es el destino de la documentación de la póliza: ahora se valida su formato. Se espera: dirección de correo válida."},"address_same_as_risk":{"type":"boolean","example":true,"description":"true = el tomador vive en la vivienda asegurada: se usa la dirección de `risk.address`. Ya no se copia en silencio. Si lo mandas a true, no envíes `holder.address`. Se espera: true o false."},"address":{"$ref":"#/components/schemas/HolderAddress"}},"required":["document_type","document_id","name","surname","birth_date","gender","marital_status","employment_status","economic_occupation","phone","email"],"additionalProperties":false,"x-required-when":[{"field":"nationality","when":"con `holder.document_type` = Nie o Passport","depends_on":["holder.document_type"]},{"field":"address","when":"salvo que envíes `holder.address_same_as_risk: true`","depends_on":["holder.address_same_as_risk"]}],"x-forbidden-when":[{"field":"address","when":"con `holder.address_same_as_risk: true`","depends_on":["holder.address_same_as_risk"]}]},"HolderAddress":{"type":"object","description":"La dirección del tomador. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza.","properties":{"postal_code":{"type":"string","pattern":"^\\d{5}$","example":"28001","description":"Código postal español. Se espera: 5 dígitos, en texto."},"town_id":{"type":"integer","minimum":1,"example":28079,"description":"Municipio (catálogo towns). Solo se deduce del código postal si este tiene UN único municipio; si tiene varios, es obligatorio. Se espera: entero del catálogo towns. Valores: GET /api/v1/catalog?type=towns."},"road_type":{"type":"string","enum":["Acequia","Atajo","Autovia","Avenida","Barriada","Barrio","Calle","Callejon","Camino","Carretera","Comarcal","Conjunto","Glorieta","GranVia","Grupo","Kilometro","Nacional","Pasaje","Paseo","Pasillo","Paso","Plaza","Poligono","Rambla","Riera","Ronda","Sendero","Torrente","Travesera","Travesia","Urbanizacion","Via","Vial"],"example":"Calle","description":"Tipo de vía. Un valor no reconocido ya no se convierte en \"Calle\". Se espera: un valor del catálogo road-types. Valores: GET /api/v1/catalog?type=road-types."},"road_name":{"type":"string","minLength":1,"maxLength":100,"example":"Gran Vía","description":"Nombre de la vía. No se inventa \"Principal\". Se espera: texto."},"road_number":{"type":"string","minLength":1,"maxLength":10,"example":"12","description":"Número de la vía, en texto. Usa \"S/N\" si la vía no tiene número. No se inventa \"1\". Se espera: texto (p. ej. \"12\", \"12B\", \"S/N\")."}},"required":["postal_code","road_type","road_name","road_number"],"additionalProperties":false},"HomeRisk":{"type":"object","description":"La vivienda. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza.","properties":{"area_m2":{"type":"number","minimum":10,"maximum":2000,"example":85,"description":"Superficie construida en m². No se asume 80. Se espera: número entre 10 y 2000."},"year_built":{"type":"integer","minimum":1700,"maximum":2026,"example":1995,"description":"Año de construcción. No se asume 2000. Se espera: año completo, no futuro."},"last_reform_year":{"type":["integer","null"],"minimum":1900,"maximum":2026,"example":null,"description":"Año de la última reforma, o null para declarar que NO se ha reformado. Omitirlo ya no significa \"no reformada\". Se espera: año entre 1900 y el actual, o null. null = la vivienda no se ha reformado."},"rooms":{"type":"integer","minimum":1,"maximum":50,"example":3,"description":"Número de habitaciones. No se asume 3. Se espera: entero entre 1 y 50."},"use":{"type":"string","enum":["Owner","Rental","Tenant"],"example":"Owner","description":"Régimen: propietario que la habita, propietario que la alquila, o inquilino. No se asume \"Owner\". Se espera: Owner, Rental o Tenant. Valores: GET /api/v1/catalog?type=home-uses."},"occupancy":{"type":"string","enum":["MainResidence","SecondHome"],"example":"MainResidence","description":"Vivienda habitual o segunda residencia. No se asume \"MainResidence\". Se espera: un valor del catálogo home-occupancies. Valores: GET /api/v1/catalog?type=home-occupancies."},"dwelling_type":{"type":"string","enum":["MiddleFloor","TopFloor","GroundFloor","DetachedHouse","TerracedHouse"],"example":"MiddleFloor","description":"Tipo de vivienda. No se asume \"MiddleFloor\". Se espera: un valor del catálogo home-property-types. Valores: GET /api/v1/catalog?type=home-property-types."},"location":{"type":"string","enum":["CityCentre","ResidentialDevelopment","Depopulated"],"example":"CityCentre","description":"Ubicación. No se asume \"CityCentre\". Se espera: un valor del catálogo home-locations. Valores: GET /api/v1/catalog?type=home-locations."},"materials":{"type":"string","enum":["NonCombustible","LessThan25Combustible","MoreThan25Combustible"],"example":"NonCombustible","description":"Materiales de construcción. No se asume \"NonCombustible\". Se espera: un valor del catálogo home-build-materials. Valores: GET /api/v1/catalog?type=home-build-materials."},"build_quality":{"type":"string","enum":["Basic","Normal","High","Luxury"],"example":"Normal","description":"Calidad de construcción. No se asume \"Normal\". Se espera: un valor del catálogo home-build-qualities. Valores: GET /api/v1/catalog?type=home-build-qualities."},"alarm":{"type":"string","enum":["NoAlarm","ConnectedAlarm","NonConnectedAlarm"],"example":"NoAlarm","description":"Alarma. Declara NoAlarm explícitamente si no hay. Se espera: un valor del catálogo home-alarm-types. Valores: GET /api/v1/catalog?type=home-alarm-types."},"owner_is_holder":{"type":"boolean","example":true,"description":"¿El tomador ocupa el papel de propietario en la póliza? Ya no se asume: hay que mandarlo. Con false (un propietario distinto del tomador) el caso NO se puede cotizar por esta API. Inquilinos (`use: \"Tenant\"`) incluidos: mandan true, porque aquí «propietario» es el papel en la póliza, no la propiedad del inmueble. La plataforma declara al tomador en ese papel en los tres regímenes, igual que la web, y el casero de un inquilino no se envía a ninguna aseguradora. Se espera: true, también con use \"Tenant\" (false se rechaza como caso no soportado)."},"buildings_limit":{"type":"number","minimum":0,"maximum":5000000,"example":150000,"description":"Capital de continente en euros. No se asume 125.000. Propietario y arrendador: mayor que 0. Un inquilino puede declarar 0. Se espera: número ≥ 0."},"contents_limit":{"type":"number","minimum":0,"maximum":2000000,"example":25000,"description":"Capital de contenido en euros. No se asume 20.000. 0 es un valor válido y se respeta. Se espera: número ≥ 0."},"settlement_type":{"type":"string","enum":["ReplacementValue","FirstRisk"],"example":"ReplacementValue","description":"Tipo de indemnización. No se asume \"ReplacementValue\". Se espera: un valor del catálogo home-settlement-types. Valores: GET /api/v1/catalog?type=home-settlement-types."},"security_main_door":{"type":"boolean","example":false,"description":"Puerta principal blindada o acorazada. Si no se envía, no se declara la medida (sin descuento). Se espera: true o false."},"security_windows":{"type":"boolean","example":false,"description":"Rejas o protección en ventanas. Si no se envía, no se declara la medida (sin descuento). Se espera: true o false."},"cadastral_reference":{"type":"string","minLength":14,"maxLength":20,"example":"9872023VH5797S0001WX","description":"Referencia catastral. Identifica el inmueble; no mueve la prima. Se espera: texto de 14 a 20 caracteres."},"floor":{"type":"string","minLength":1,"maxLength":10,"example":"3","description":"Planta de la vivienda dentro del edificio, tal como figura en la dirección («3», «Bajo», «Ático»…). Con puerta, bloque y escalera identifica el piso exacto al que se pone precio. Si no se envía, no se declara. Se espera: texto de hasta 10 caracteres."},"door":{"type":"string","minLength":1,"maxLength":10,"example":"B","description":"Puerta o letra de la vivienda («B», «2ª»…). Si no se envía, no se declara. Se espera: texto de hasta 10 caracteres."},"block":{"type":"string","minLength":1,"maxLength":10,"example":"2","description":"Bloque del edificio, si lo tiene. Si no se envía, no se declara. Se espera: texto de hasta 10 caracteres."},"staircase":{"type":"string","minLength":1,"maxLength":10,"example":"A","description":"Escalera, si el edificio tiene varias. Si no se envía, no se declara. Se espera: texto de hasta 10 caracteres."},"gated_community":{"type":"boolean","example":false,"description":"Vivienda en urbanización cerrada o recinto con acceso controlado. Si no se envía, no se declara (sin el ajuste de precio que aplique la aseguradora). Se espera: true o false."},"security_guard":{"type":"boolean","example":false,"description":"Vigilancia de seguridad permanente en el edificio o la urbanización. Si no se envía, no se declara la medida (sin descuento). Se espera: true o false."},"secondary_doors_type":{"type":"string","enum":["NoOtherDoor","NonReinforcedOtherDoor","ReinforcedOtherDoor"],"example":"NonReinforcedOtherDoor","description":"Puertas secundarias de la vivienda: ninguna, no blindadas o blindadas. Si no se envía, las aseguradoras reciben «no blindadas», como hasta ahora. Se espera: un valor del catálogo home-door-types. Valores: GET /api/v1/catalog?type=home-door-types."},"number_of_dangerous_dogs":{"type":"integer","minimum":0,"maximum":20,"example":0,"description":"Perros de raza potencialmente peligrosa que viven en la vivienda (cambia la responsabilidad civil). Si no se envía, las aseguradoras reciben 0, como hasta ahora. Se espera: entero entre 0 y 20."},"high_value_items_limit":{"type":"number","minimum":0,"maximum":2000000,"example":6000,"description":"Capital para objetos de valor especial (arte, colecciones…), en euros. Si no se envía, se declara 0: sin esa cobertura. Se espera: número entre 0 y 2.000.000."},"jewels_in_safe_box_limit":{"type":"number","minimum":0,"maximum":2000000,"example":3000,"description":"Capital para joyas guardadas en caja fuerte, en euros. Si no se envía, se declara 0: sin esa cobertura. Se espera: número entre 0 y 2.000.000."},"jewels_out_safe_box_limit":{"type":"number","minimum":0,"maximum":2000000,"example":1500,"description":"Capital para joyas fuera de caja fuerte, en euros. Si no se envía, se declara 0: sin esa cobertura. Se espera: número entre 0 y 2.000.000."},"address":{"$ref":"#/components/schemas/HolderAddress"}},"required":["area_m2","year_built","last_reform_year","rooms","use","occupancy","dwelling_type","location","materials","build_quality","alarm","owner_is_holder","buildings_limit","contents_limit","settlement_type","address"],"additionalProperties":false},"CreateCarQuote":{"type":"object","description":"El cuerpo de la petición. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `owner` es obligatorio con `owner_same_as_holder: false`. `owner` NO se envía con `owner_same_as_holder: true` (enviarlo es una contradicción: 400).","properties":{"insurance_line":{"type":"string","enum":["Car"],"example":"Car","description":"Ramo a cotizar. Se espera: Home, Car o Motorcycle."},"effective_date":{"type":"string","format":"date","example":"2030-01-01","description":"Fecha de inicio del seguro. Obligatoria: ya no se pone \"hoy\", y una fecha pasada se rechaza en vez de corregirse. Se espera: fecha YYYY-MM-DD, hoy o posterior (día natural de España)."},"client_reference":{"type":"string","maxLength":100,"example":"EXP-2026-0042","description":"Tu referencia interna. Se devuelve en la respuesta y en los webhooks. No es una clave de idempotencia. Se espera: texto de hasta 100 caracteres."},"owner_same_as_holder":{"type":"boolean","example":true,"description":"¿El propietario del vehículo es el tomador? Ya no se asume que sí. Con false hay que enviar `owner`. Se espera: true o false."},"holder":{"$ref":"#/components/schemas/Holder"},"vehicle":{"$ref":"#/components/schemas/CarVehicle"},"driver":{"$ref":"#/components/schemas/CarDriver"},"owner":{"$ref":"#/components/schemas/Owner"},"secondary_driver":{"$ref":"#/components/schemas/CarSecondaryDriver"}},"required":["insurance_line","effective_date","owner_same_as_holder","holder","vehicle","driver"],"additionalProperties":false,"x-required-when":[{"field":"owner","when":"con `owner_same_as_holder: false`","depends_on":["owner_same_as_holder"]}],"x-forbidden-when":[{"field":"owner","when":"con `owner_same_as_holder: true`","depends_on":["owner_same_as_holder"]}]},"Holder":{"type":"object","description":"El tomador. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `surname2` es obligatorio con `holder.document_type: \"Dni\"`. `nationality` es obligatorio con `holder.document_type` = Nie o Passport. `economic_occupation` es obligatorio con `holder.employment_status` en activo (Employee, SelfEmployed o CivilServant).","properties":{"document_type":{"type":"string","enum":["Dni","Nie","Passport"],"example":"Dni","description":"Tipo de documento de identidad. No se asume DNI. Se espera: Dni, Nie o Passport (empresas con Cif no se cotizan por esta API). Valores: GET /api/v1/catalog?type=document-types."},"document_id":{"type":"string","minLength":5,"maxLength":20,"example":"12345678Z","description":"Número del documento. Su formato debe corresponder al tipo declarado. Se espera: DNI: 8 dígitos + letra · NIE: X/Y/Z + 7 dígitos + letra · Pasaporte: mínimo 5 caracteres."},"name":{"type":"string","minLength":1,"maxLength":60,"example":"Juan","description":"Nombre, tal como figura en el documento. Se espera: texto, solo letras."},"surname":{"type":"string","minLength":1,"maxLength":60,"example":"García","description":"Primer apellido. Se espera: texto, solo letras."},"surname2":{"type":"string","maxLength":60,"example":"López","description":"Segundo apellido. Obligatorio con DNI. Se espera: texto, solo letras. OBLIGATORIO con `holder.document_type: \"Dni\"`."},"birth_date":{"type":"string","format":"date","example":"1985-03-15","description":"Fecha de nacimiento. Se espera: fecha YYYY-MM-DD, no futura."},"gender":{"type":"string","enum":["Male","Female"],"example":"Female","description":"Sexo. No se asume \"Male\". Se espera: Male o Female. Valores: GET /api/v1/catalog?type=genders."},"marital_status":{"type":"string","enum":["Single","Married","UnmarriedPartner","Divorced","Widowed"],"example":"Married","description":"Estado civil. Determina la prima en varias aseguradoras; no se asume \"Single\". Se espera: un valor del catálogo marital-statuses. Valores: GET /api/v1/catalog?type=marital-statuses."},"nationality":{"type":"string","enum":["ESP","GBR","FRA","DEU","ITA","PRT","ROU","MAR","COL","ECU","ARG","VEN","PER","BOL","BRA","CHN","PAK","UKR","RUS","POL","BGR","NLD","BEL","SWE","NOR","DNK","FIN","IRL","CHE","AUT","USA","CAN","MEX","CHL","URY","PRY","CUB","DOM","HND","SLV","GTM","NIC","PAN","CRI","DZA","SEN","NGA","GHA","PHL","IND","JPN","KOR","AUS","NZL","TUR","ISR","EGY","ZAF"],"example":"ESP","description":"Nacionalidad ISO-3. Obligatoria con NIE o pasaporte. Con DNI es española por definición: si la mandas, tiene que ser ESP. Se espera: código ISO-3 del catálogo nationalities. OBLIGATORIO con `holder.document_type` = Nie o Passport. Valores: GET /api/v1/catalog?type=nationalities."},"employment_status":{"type":"string","enum":["Employee","SelfEmployed","CivilServant","Retired","Student","Unemployed","HomeWorker"],"example":"Employee","description":"Situación laboral. No se asume \"Employee\". Se espera: un valor del catálogo employment-statuses. Valores: GET /api/v1/catalog?type=employment-statuses."},"economic_occupation":{"type":"string","pattern":"^\\d{4}$","example":"2611","description":"Profesión, código CNO-11 de 4 dígitos. No se asume 2612. Obligatoria para personas en activo; un jubilado, estudiante o parado no la envía. Se espera: 4 dígitos, en texto, del catálogo economic-occupations. OBLIGATORIO con `holder.employment_status` en activo (Employee, SelfEmployed o CivilServant). Valores: GET /api/v1/catalog?type=economic-occupations."},"phone":{"type":"string","example":"+34644182739","description":"Móvil español del tomador. Se espera: 9 dígitos empezando por 6 o 7; se admiten +34 y 0034."},"email":{"type":"string","maxLength":100,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$","example":"cliente@example.com","description":"Correo del tomador. Es el destino de la documentación de la póliza: ahora se valida su formato. Se espera: dirección de correo válida."},"address":{"$ref":"#/components/schemas/HolderAddress"}},"required":["document_type","document_id","name","surname","birth_date","gender","marital_status","employment_status","phone","email","address"],"additionalProperties":false,"x-required-when":[{"field":"surname2","when":"con `holder.document_type: \"Dni\"`","depends_on":["holder.document_type"]},{"field":"nationality","when":"con `holder.document_type` = Nie o Passport","depends_on":["holder.document_type"]},{"field":"economic_occupation","when":"con `holder.employment_status` en activo (Employee, SelfEmployed o CivilServant)","depends_on":["holder.employment_status"]}]},"CarVehicle":{"type":"object","description":"El vehículo. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `purchase_date` es obligatorio salvo con `vehicle.purchase_type: \"planned\"`. `purchase_date` NO se envía con `vehicle.purchase_type: \"planned\"` (aún no comprado) (enviarlo es una contradicción: 400).","properties":{"registration_plate":{"type":"string","minLength":4,"maxLength":10,"example":"1234BCD","description":"Matrícula española. Identifica el vehículo solo si corresponde a UNA versión; si tiene varias, envía `version_id`. Se espera: matrícula española (p. ej. 1234BCD)."},"brand_id":{"type":"string","maxLength":20,"example":"00016","description":"Marca (catálogo vehicle-brands). Se espera: id del catálogo. Valores: GET /api/v1/catalog?type=vehicle-brands."},"model_id":{"type":"string","maxLength":20,"example":"0001600012","description":"Modelo (catálogo vehicle-models). Se espera: id del catálogo. Valores: GET /api/v1/catalog?type=vehicle-models."},"version_id":{"type":"string","maxLength":20,"example":"06310010019","description":"Versión exacta (Base7). Obligatoria si no hay matrícula o si la matrícula tiene varias versiones. Se espera: id del catálogo vehicle-versions. Valores: GET /api/v1/catalog?type=vehicle-versions."},"brand_name":{"type":"string","maxLength":80,"example":"SEAT","description":"Nombre de la marca (solo informativo). Se espera: texto."},"model_name":{"type":"string","maxLength":80,"example":"LEON","description":"Nombre del modelo (solo informativo). Se espera: texto."},"version_name":{"type":"string","maxLength":160,"example":"1.5 TSI 130 CV","description":"Nombre de la versión (solo informativo). Se espera: texto."},"registration_date":{"type":"string","format":"date","example":"2019-06-01","description":"Primera matriculación. Solo se deduce de la matrícula si esta identifica un único vehículo; si no, es obligatoria. Se espera: fecha YYYY-MM-DD, no futura."},"purchase_type":{"type":"string","enum":["already_owned","new","used_dealer","used_private","planned"],"example":"already_owned","description":"Cómo se adquirió. Ya no se deduce de las fechas: algunas aseguradoras tarifican distinto según el caso. Se espera: already_owned, new, used_dealer, used_private o planned."},"purchase_date":{"type":"string","format":"date","example":"2019-06-15","description":"Fecha de compra. Ya no se deduce de la matriculación. No se envía con purchase_type \"planned\". Se espera: fecha YYYY-MM-DD, no futura e igual o posterior a la matriculación. OBLIGATORIO salvo con `vehicle.purchase_type: \"planned\"`. No se envía con `vehicle.purchase_type: \"planned\"` (aún no comprado)."},"use":{"type":"string","enum":["Private","Professional","PublicService"],"example":"Private","description":"Uso del vehículo. No se asume \"Private\": declara el uso real. Se espera: un valor del catálogo car-use-types. Valores: GET /api/v1/catalog?type=car-use-types."},"annual_km":{"type":"string","enum":["UpTo5000km","UpTo10000km","UpTo15000km","UpTo20000km","UpTo25000km","UpTo30000km","MoreThan30000km"],"example":"UpTo10000km","description":"Kilómetros anuales. No se asume \"UpTo15000km\". Se espera: un valor del catálogo annual-km-options. Valores: GET /api/v1/catalog?type=annual-km-options."},"parking_type":{"type":"string","enum":["PrivateGarage","CommunalParking","NoGarage"],"example":"NoGarage","description":"Dónde duerme el coche. Determina la prima; no se asume \"NoGarage\". Se espera: un valor del catálogo car-parking-types. Valores: GET /api/v1/catalog?type=car-parking-types."},"fuel_type":{"type":"string","enum":["Gasoline","Diesel","Electric","Hybrid","PlugInHybrid","Lpg","Cng"],"example":"Gasoline","description":"Combustible. Se toma del catálogo cuando el vehículo queda identificado. Se espera: un valor del catálogo fuel-types. Valores: GET /api/v1/catalog?type=fuel-types."},"retail_price":{"type":"number","minimum":1,"maximum":5000000,"example":24500,"description":"Precio de venta al público, en euros. Se espera: número > 0."}},"required":["purchase_type","use","annual_km","parking_type"],"additionalProperties":false,"x-required-when":[{"field":"purchase_date","when":"salvo con `vehicle.purchase_type: \"planned\"`","depends_on":["vehicle.purchase_type"]}],"x-forbidden-when":[{"field":"purchase_date","when":"con `vehicle.purchase_type: \"planned\"` (aún no comprado)","depends_on":["vehicle.purchase_type"]}]},"CarDriver":{"type":"object","description":"El conductor habitual. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `document_type` es obligatorio con `driver.same_as_holder: false`. `document_id` es obligatorio con `driver.same_as_holder: false`. `name` es obligatorio con `driver.same_as_holder: false`. `surname` es obligatorio con `driver.same_as_holder: false`. `surname2` es obligatorio con `driver.same_as_holder: false` y `driver.document_type: \"Dni\"`. `birth_date` es obligatorio con `driver.same_as_holder: false`. `gender` es obligatorio con `driver.same_as_holder: false`. `marital_status` es obligatorio con `driver.same_as_holder: false`. `nationality` es obligatorio con `driver.same_as_holder: false` y `driver.document_type` = Nie o Passport. `previous_company_code` es obligatorio con `driver.previously_insured: true`. `previous_policy_number` es obligatorio con `driver.previously_insured: true`. `previous_plate` es obligatorio con `driver.previously_insured: true`. `total_years_insured` es obligatorio con `driver.previously_insured: true`. `years_in_previous_company` es obligatorio con `driver.previously_insured: true`. `years_without_accidents` es obligatorio con `driver.previously_insured: true`. `last_five_years_accidents` es obligatorio con `driver.previously_insured: true`. `parking_fine_only` es obligatorio con `driver.penalties: \"1\"`. `document_type` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `document_id` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `name` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `surname` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `surname2` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `birth_date` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `gender` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `marital_status` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `nationality` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `previous_company_code` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `previous_policy_status` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `previous_policy_number` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `previous_plate` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `total_years_insured` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `years_in_previous_company` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `years_without_accidents` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `last_five_years_accidents` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `policyholder_relationship` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `last_at_fault_claim_date` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400).","properties":{"same_as_holder":{"type":"boolean","example":true,"description":"¿El conductor habitual es el tomador? Ya no se asume que sí. Con false, envía su identidad en este mismo bloque. Se espera: true o false."},"document_type":{"type":"string","enum":["Dni","Nie","Passport"],"example":"Dni","description":"Tipo de documento de identidad. No se asume DNI. Se espera: Dni, Nie o Passport (empresas con Cif no se cotizan por esta API). OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`. Valores: GET /api/v1/catalog?type=document-types."},"document_id":{"type":"string","minLength":5,"maxLength":20,"example":"12345678Z","description":"Número del documento. Su formato debe corresponder al tipo declarado. Se espera: DNI: 8 dígitos + letra · NIE: X/Y/Z + 7 dígitos + letra · Pasaporte: mínimo 5 caracteres. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`."},"name":{"type":"string","minLength":1,"maxLength":60,"example":"Juan","description":"Nombre, tal como figura en el documento. Se espera: texto, solo letras. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`."},"surname":{"type":"string","minLength":1,"maxLength":60,"example":"García","description":"Primer apellido. Se espera: texto, solo letras. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`."},"surname2":{"type":"string","maxLength":60,"example":"López","description":"Segundo apellido. Obligatorio con DNI. Se espera: texto, solo letras. OBLIGATORIO con `driver.same_as_holder: false` y `driver.document_type: \"Dni\"`. No se envía con `driver.same_as_holder: true`."},"birth_date":{"type":"string","format":"date","example":"1985-03-15","description":"Fecha de nacimiento. Se espera: fecha YYYY-MM-DD, no futura. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`."},"gender":{"type":"string","enum":["Male","Female"],"example":"Female","description":"Sexo. No se asume \"Male\". Se espera: Male o Female. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`. Valores: GET /api/v1/catalog?type=genders."},"marital_status":{"type":"string","enum":["Single","Married","UnmarriedPartner","Divorced","Widowed"],"example":"Married","description":"Estado civil. Determina la prima en varias aseguradoras; no se asume \"Single\". Se espera: un valor del catálogo marital-statuses. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`. Valores: GET /api/v1/catalog?type=marital-statuses."},"nationality":{"type":"string","enum":["ESP","GBR","FRA","DEU","ITA","PRT","ROU","MAR","COL","ECU","ARG","VEN","PER","BOL","BRA","CHN","PAK","UKR","RUS","POL","BGR","NLD","BEL","SWE","NOR","DNK","FIN","IRL","CHE","AUT","USA","CAN","MEX","CHL","URY","PRY","CUB","DOM","HND","SLV","GTM","NIC","PAN","CRI","DZA","SEN","NGA","GHA","PHL","IND","JPN","KOR","AUS","NZL","TUR","ISR","EGY","ZAF"],"example":"ESP","description":"Nacionalidad ISO-3. Obligatoria con NIE o pasaporte. Con DNI es española por definición: si la mandas, tiene que ser ESP. Se espera: código ISO-3 del catálogo nationalities. OBLIGATORIO con `driver.same_as_holder: false` y `driver.document_type` = Nie o Passport. No se envía con `driver.same_as_holder: true`. Valores: GET /api/v1/catalog?type=nationalities."},"driving_license_type":{"type":"string","enum":["B","C1","C"],"example":"B","description":"Tipo de carnet. No se asume \"B\". Se espera: un valor del catálogo driving-license-types. Valores: GET /api/v1/catalog?type=driving-license-types."},"driving_license_date":{"type":"string","format":"date","example":"2008-04-20","description":"Fecha de expedición del carnet. Ya no se asume \"hace 5 años\". Se espera: fecha YYYY-MM-DD, no futura."},"driving_license_country":{"type":"string","enum":["ESP","GBR","FRA","DEU","ITA","PRT","ROU","MAR","COL","ECU","ARG","VEN","PER","BOL","BRA","CHN","PAK","UKR","RUS","POL","BGR","NLD","BEL","SWE","NOR","DNK","FIN","IRL","CHE","AUT","USA","CAN","MEX","CHL","URY","PRY","CUB","DOM","HND","SLV","GTM","NIC","PAN","CRI","DZA","SEN","NGA","GHA","PHL","IND","JPN","KOR","AUS","NZL","TUR","ISR","EGY","ZAF"],"example":"ESP","description":"País de expedición del carnet (ISO-3). Hoy solo se cotizan carnets españoles: cualquier otro se rechaza como caso no soportado, en vez de declararse español. Se espera: ESP. Valores: GET /api/v1/catalog?type=nationalities."},"previously_insured":{"type":"boolean","example":true,"description":"¿Tiene o ha tenido un seguro de coche a su nombre? Ya no se asume que no. Con true, el historial completo es obligatorio; con false no se envía y se declara 0 años. Se espera: true o false."},"previous_company_code":{"type":"string","minLength":1,"maxLength":20,"example":"C0109","description":"Aseguradora anterior. Los códigos de coche y de moto son catálogos distintos. Se espera: código del catálogo car-insurance-companies. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false`. Valores: GET /api/v1/catalog?type=car-insurance-companies."},"previous_policy_status":{"type":"string","enum":["active","expired_recent","expired_old"],"example":"active","description":"¿La póliza anterior sigue en vigor? active = sí; expired_recent = venció hace menos de 2 meses; expired_old = hace más. Sin él se trata como en vigor. Se espera: active, expired_recent o expired_old. No se envía con `driver.previously_insured: false`."},"previous_policy_number":{"type":"string","minLength":5,"maxLength":40,"example":"POL-123456","description":"Número de la póliza anterior. Se espera: texto de al menos 5 caracteres. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false`."},"previous_plate":{"type":"string","minLength":4,"maxLength":10,"example":"1234BCD","description":"Matrícula del vehículo de la póliza anterior. Ya no se asume que es el mismo vehículo: si lo es, repite su matrícula. Se espera: matrícula española. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false`."},"total_years_insured":{"type":"integer","minimum":0,"maximum":80,"example":5,"description":"Años totales asegurado. Con `previously_insured: false` no se envía, o se envía 0. Se espera: entero ≥ 0. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false` (se admite 0, que dice lo mismo)."},"years_in_previous_company":{"type":"integer","minimum":0,"maximum":80,"example":5,"description":"Años en la aseguradora anterior. No puede superar total_years_insured. Con `previously_insured: false` no se envía, o se envía 0. Se espera: entero ≥ 0. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false` (se admite 0, que dice lo mismo)."},"years_without_accidents":{"type":"integer","minimum":0,"maximum":80,"example":5,"description":"Años sin siniestros con culpa. Con `previously_insured: false` no se envía, o se envía 0. Se espera: entero ≥ 0. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false` (se admite 0, que dice lo mismo)."},"last_five_years_accidents":{"type":"integer","minimum":0,"maximum":20,"example":5,"description":"Siniestros con culpa en los últimos 5 años. Con `previously_insured: false` no se envía, o se envía 0. Se espera: entero ≥ 0. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false` (se admite 0, que dice lo mismo)."},"penalties":{"type":"string","enum":["0","1","2","3","4","5","6"],"example":"0","description":"Multas de tráfico de los últimos 3 años, en texto. \"6\" = más de cinco. Ya no se declara \"ninguna\" en tu nombre. Se espera: \"0\" a \"6\", en texto."},"parking_fine_only":{"type":"boolean","example":false,"description":"Con UNA sola multa: ¿fue solo de aparcamiento? Una aseguradora lo distingue. Se espera: true o false. OBLIGATORIO con `driver.penalties: \"1\"`."},"points_lost":{"type":"boolean","example":false,"description":"¿Perdió puntos del carnet el último año? Es una declaración del conductor: ya no se omite. Se espera: true o false."},"policyholder_relationship":{"type":"string","enum":["Spouse","CivilPartner","Partner","Parent","Child","Sibling","Other"],"example":"Child","description":"Qué es esta persona del tomador: Spouse (cónyuge), CivilPartner (pareja de hecho registrada), Partner (pareja), Parent (su padre o madre), Child (su hijo o hija), Sibling (su hermano o hermana) u Other. Si no se envía, las aseguradoras que la piden reciben «Partner» (pareja), como hasta ahora. Se espera: Spouse, CivilPartner, Partner, Parent, Child, Sibling, Other. No se envía con `driver.same_as_holder: true`."},"last_at_fault_claim_date":{"type":"string","format":"date","example":"2024-05-10","description":"Fecha del último siniestro con culpa. Tiene que cuadrar con `last_five_years_accidents`: dentro de los últimos cinco años si declaras alguno, anterior si declaras 0. Si no se envía, no se declara. Se espera: fecha YYYY-MM-DD, no futura. No se envía con `driver.previously_insured: false`."}},"required":["same_as_holder","driving_license_type","driving_license_date","driving_license_country","previously_insured","penalties","points_lost"],"additionalProperties":false,"x-required-when":[{"field":"document_type","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"document_id","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"name","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"surname","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"surname2","when":"con `driver.same_as_holder: false` y `driver.document_type: \"Dni\"`","depends_on":["driver.same_as_holder","driver.document_type"]},{"field":"birth_date","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"gender","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"marital_status","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"nationality","when":"con `driver.same_as_holder: false` y `driver.document_type` = Nie o Passport","depends_on":["driver.same_as_holder","driver.document_type"]},{"field":"previous_company_code","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"previous_policy_number","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"previous_plate","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"total_years_insured","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"years_in_previous_company","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"years_without_accidents","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"last_five_years_accidents","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"parking_fine_only","when":"con `driver.penalties: \"1\"`","depends_on":["driver.penalties"]}],"x-forbidden-when":[{"field":"document_type","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"document_id","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"name","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"surname","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"surname2","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"birth_date","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"gender","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"marital_status","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"nationality","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"previous_company_code","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"]},{"field":"previous_policy_status","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"]},{"field":"previous_policy_number","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"]},{"field":"previous_plate","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"]},{"field":"total_years_insured","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"],"zero_allowed":true},{"field":"years_in_previous_company","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"],"zero_allowed":true},{"field":"years_without_accidents","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"],"zero_allowed":true},{"field":"last_five_years_accidents","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"],"zero_allowed":true},{"field":"policyholder_relationship","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"last_at_fault_claim_date","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"]}]},"Owner":{"type":"object","description":"El propietario. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `document_type` es obligatorio con `owner_same_as_holder: false`. `document_id` es obligatorio con `owner_same_as_holder: false`. `name` es obligatorio con `owner_same_as_holder: false`. `surname` es obligatorio con `owner_same_as_holder: false`. `surname2` es obligatorio con `owner_same_as_holder: false` y `owner.document_type: \"Dni\"`. `birth_date` es obligatorio con `owner_same_as_holder: false`. `gender` es obligatorio con `owner_same_as_holder: false`. `marital_status` es obligatorio con `owner_same_as_holder: false`. `nationality` es obligatorio con `owner_same_as_holder: false` y `owner.document_type` = Nie o Passport. `economic_occupation` es obligatorio con `owner.employment_status` en activo (Employee, SelfEmployed o CivilServant) y `insurance_line: \"Motorcycle\"`. `policyholder_relationship` NO se envía con `insurance_line: \"Motorcycle\"` (este dato solo lo tarifica Coche) (enviarlo es una contradicción: 400). `employment_status` NO se envía con `insurance_line: \"Car\"` (este dato solo lo tarifica Moto) (enviarlo es una contradicción: 400). `economic_occupation` NO se envía con `insurance_line: \"Car\"` (este dato solo lo tarifica Moto) (enviarlo es una contradicción: 400). `economic_occupation` NO se envía sin `owner.employment_status` (van juntos) (enviarlo es una contradicción: 400). `address` NO se envía con `owner_same_as_holder: true` (enviarlo es una contradicción: 400).","properties":{"document_type":{"type":"string","enum":["Dni","Nie","Passport"],"example":"Dni","description":"Tipo de documento de identidad. No se asume DNI. Se espera: Dni, Nie o Passport (empresas con Cif no se cotizan por esta API). OBLIGATORIO con `owner_same_as_holder: false`. Valores: GET /api/v1/catalog?type=document-types."},"document_id":{"type":"string","minLength":5,"maxLength":20,"example":"12345678Z","description":"Número del documento. Su formato debe corresponder al tipo declarado. Se espera: DNI: 8 dígitos + letra · NIE: X/Y/Z + 7 dígitos + letra · Pasaporte: mínimo 5 caracteres. OBLIGATORIO con `owner_same_as_holder: false`."},"name":{"type":"string","minLength":1,"maxLength":60,"example":"Juan","description":"Nombre, tal como figura en el documento. Se espera: texto, solo letras. OBLIGATORIO con `owner_same_as_holder: false`."},"surname":{"type":"string","minLength":1,"maxLength":60,"example":"García","description":"Primer apellido. Se espera: texto, solo letras. OBLIGATORIO con `owner_same_as_holder: false`."},"surname2":{"type":"string","maxLength":60,"example":"López","description":"Segundo apellido. Obligatorio con DNI. Se espera: texto, solo letras. OBLIGATORIO con `owner_same_as_holder: false` y `owner.document_type: \"Dni\"`."},"birth_date":{"type":"string","format":"date","example":"1985-03-15","description":"Fecha de nacimiento. Se espera: fecha YYYY-MM-DD, no futura. OBLIGATORIO con `owner_same_as_holder: false`."},"gender":{"type":"string","enum":["Male","Female"],"example":"Female","description":"Sexo. No se asume \"Male\". Se espera: Male o Female. OBLIGATORIO con `owner_same_as_holder: false`. Valores: GET /api/v1/catalog?type=genders."},"marital_status":{"type":"string","enum":["Single","Married","UnmarriedPartner","Divorced","Widowed"],"example":"Married","description":"Estado civil. Determina la prima en varias aseguradoras; no se asume \"Single\". Se espera: un valor del catálogo marital-statuses. OBLIGATORIO con `owner_same_as_holder: false`. Valores: GET /api/v1/catalog?type=marital-statuses."},"nationality":{"type":"string","enum":["ESP","GBR","FRA","DEU","ITA","PRT","ROU","MAR","COL","ECU","ARG","VEN","PER","BOL","BRA","CHN","PAK","UKR","RUS","POL","BGR","NLD","BEL","SWE","NOR","DNK","FIN","IRL","CHE","AUT","USA","CAN","MEX","CHL","URY","PRY","CUB","DOM","HND","SLV","GTM","NIC","PAN","CRI","DZA","SEN","NGA","GHA","PHL","IND","JPN","KOR","AUS","NZL","TUR","ISR","EGY","ZAF"],"example":"ESP","description":"Nacionalidad ISO-3. Obligatoria con NIE o pasaporte. Con DNI es española por definición: si la mandas, tiene que ser ESP. Se espera: código ISO-3 del catálogo nationalities. OBLIGATORIO con `owner_same_as_holder: false` y `owner.document_type` = Nie o Passport. Valores: GET /api/v1/catalog?type=nationalities."},"policyholder_relationship":{"type":"string","enum":["Spouse","CivilPartner","Partner","Parent","Child","Sibling","Other"],"example":"Child","description":"Qué es esta persona del tomador: Spouse (cónyuge), CivilPartner (pareja de hecho registrada), Partner (pareja), Parent (su padre o madre), Child (su hijo o hija), Sibling (su hermano o hermana) u Other. Si no se envía, las aseguradoras que la piden reciben «Partner» (pareja), como hasta ahora. Se espera: Spouse, CivilPartner, Partner, Parent, Child, Sibling, Other. No se envía con `insurance_line: \"Motorcycle\"` (este dato solo lo tarifica Coche)."},"employment_status":{"type":"string","enum":["Employee","SelfEmployed","CivilServant","Retired","Student","Unemployed","HomeWorker"],"example":"Employee","description":"Situación laboral de esta persona. Si no se envía, las aseguradoras reciben la del tomador, como hasta ahora. Se espera: un valor del catálogo employment-statuses. No se envía con `insurance_line: \"Car\"` (este dato solo lo tarifica Moto). Valores: GET /api/v1/catalog?type=employment-statuses."},"economic_occupation":{"type":"string","pattern":"^\\d{4}$","example":"2611","description":"Profesión de esta persona, código CNO-11 de 4 dígitos. Obligatoria si está en activo y siempre junto a `employment_status`. Si no se envía ninguna de las dos, las aseguradoras reciben las del tomador, como hasta ahora. Se espera: 4 dígitos, en texto, del catálogo economic-occupations. OBLIGATORIO con `owner.employment_status` en activo (Employee, SelfEmployed o CivilServant) y `insurance_line: \"Motorcycle\"`. No se envía con `insurance_line: \"Car\"` (este dato solo lo tarifica Moto). No se envía sin `owner.employment_status` (van juntos). Valores: GET /api/v1/catalog?type=economic-occupations."},"address":{"$ref":"#/components/schemas/OwnerAddress"}},"required":[],"additionalProperties":false,"x-required-when":[{"field":"document_type","when":"con `owner_same_as_holder: false`","depends_on":["owner_same_as_holder"]},{"field":"document_id","when":"con `owner_same_as_holder: false`","depends_on":["owner_same_as_holder"]},{"field":"name","when":"con `owner_same_as_holder: false`","depends_on":["owner_same_as_holder"]},{"field":"surname","when":"con `owner_same_as_holder: false`","depends_on":["owner_same_as_holder"]},{"field":"surname2","when":"con `owner_same_as_holder: false` y `owner.document_type: \"Dni\"`","depends_on":["owner_same_as_holder","owner.document_type"]},{"field":"birth_date","when":"con `owner_same_as_holder: false`","depends_on":["owner_same_as_holder"]},{"field":"gender","when":"con `owner_same_as_holder: false`","depends_on":["owner_same_as_holder"]},{"field":"marital_status","when":"con `owner_same_as_holder: false`","depends_on":["owner_same_as_holder"]},{"field":"nationality","when":"con `owner_same_as_holder: false` y `owner.document_type` = Nie o Passport","depends_on":["owner_same_as_holder","owner.document_type"]},{"field":"economic_occupation","when":"con `owner.employment_status` en activo (Employee, SelfEmployed o CivilServant) y `insurance_line: \"Motorcycle\"`","depends_on":["owner.employment_status","insurance_line"]}],"x-forbidden-when":[{"field":"policyholder_relationship","when":"con `insurance_line: \"Motorcycle\"` (este dato solo lo tarifica Coche)","depends_on":["insurance_line"]},{"field":"employment_status","when":"con `insurance_line: \"Car\"` (este dato solo lo tarifica Moto)","depends_on":["insurance_line"]},{"field":"economic_occupation","when":"con `insurance_line: \"Car\"` (este dato solo lo tarifica Moto)","depends_on":["insurance_line"]},{"field":"economic_occupation","when":"sin `owner.employment_status` (van juntos)","depends_on":["owner.employment_status"]},{"field":"address","when":"con `owner_same_as_holder: true`","depends_on":["owner_same_as_holder"]}]},"OwnerAddress":{"type":"object","description":"La dirección del propietario (opcional; sin ella, las aseguradoras usan la del tomador). Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `road_type` es obligatorio con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos). `road_name` es obligatorio con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos). `road_number` es obligatorio con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos).","properties":{"postal_code":{"type":"string","pattern":"^\\d{5}$","example":"28001","description":"Código postal español de esta dirección. Se espera: 5 dígitos, en texto. OBLIGATORIO con el bloque `owner.address`."},"town_id":{"type":"integer","minimum":1,"example":28079,"description":"Municipio (catálogo towns). Solo se deduce del código postal si este tiene UN único municipio; si tiene varios, es obligatorio. Un `town_id` que no es de ese código postal se rechaza. Se espera: entero del catálogo towns. Valores: GET /api/v1/catalog?type=towns."},"road_type":{"type":"string","enum":["Acequia","Atajo","Autovia","Avenida","Barriada","Barrio","Calle","Callejon","Camino","Carretera","Comarcal","Conjunto","Glorieta","GranVia","Grupo","Kilometro","Nacional","Pasaje","Paseo","Pasillo","Paso","Plaza","Poligono","Rambla","Riera","Ronda","Sendero","Torrente","Travesera","Travesia","Urbanizacion","Via","Vial"],"example":"Calle","description":"Tipo de vía. Un valor no reconocido ya no se convierte en \"Calle\". Se espera: un valor del catálogo road-types. OBLIGATORIO con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos). Valores: GET /api/v1/catalog?type=road-types."},"road_name":{"type":"string","minLength":1,"maxLength":100,"example":"Gran Vía","description":"Nombre de la vía. No se inventa \"Principal\". Se espera: texto. OBLIGATORIO con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos)."},"road_number":{"type":"string","minLength":1,"maxLength":10,"example":"12","description":"Número de la vía, en texto. Usa \"S/N\" si la vía no tiene número. No se inventa \"1\". Se espera: texto (p. ej. \"12\", \"12B\", \"S/N\"). OBLIGATORIO con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos)."}},"required":["postal_code"],"additionalProperties":false,"x-required-when":[{"field":"road_type","when":"con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos)","depends_on":["owner.address.road_name","owner.address.road_number"]},{"field":"road_name","when":"con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos)","depends_on":["owner.address.road_type","owner.address.road_number"]},{"field":"road_number","when":"con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos)","depends_on":["owner.address.road_type","owner.address.road_name"]}]},"CarSecondaryDriver":{"type":"object","description":"El conductor adicional. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `surname2` es obligatorio con el bloque `secondary_driver` y `secondary_driver.document_type: \"Dni\"`. `nationality` es obligatorio con el bloque `secondary_driver` y `secondary_driver.document_type` = Nie o Passport.","properties":{"document_type":{"type":"string","enum":["Dni","Nie","Passport"],"example":"Dni","description":"Tipo de documento de identidad. No se asume DNI. Se espera: Dni, Nie o Passport (empresas con Cif no se cotizan por esta API). OBLIGATORIO con el bloque `secondary_driver`. Valores: GET /api/v1/catalog?type=document-types."},"document_id":{"type":"string","minLength":5,"maxLength":20,"example":"87654321X","description":"Número del documento. Su formato debe corresponder al tipo declarado. Se espera: DNI: 8 dígitos + letra · NIE: X/Y/Z + 7 dígitos + letra · Pasaporte: mínimo 5 caracteres. OBLIGATORIO con el bloque `secondary_driver`."},"name":{"type":"string","minLength":1,"maxLength":60,"example":"Lucía","description":"Nombre, tal como figura en el documento. Se espera: texto, solo letras. OBLIGATORIO con el bloque `secondary_driver`."},"surname":{"type":"string","minLength":1,"maxLength":60,"example":"Martín","description":"Primer apellido. Se espera: texto, solo letras. OBLIGATORIO con el bloque `secondary_driver`."},"surname2":{"type":"string","maxLength":60,"example":"Ruiz","description":"Segundo apellido. Obligatorio con DNI. Se espera: texto, solo letras. OBLIGATORIO con el bloque `secondary_driver` y `secondary_driver.document_type: \"Dni\"`."},"birth_date":{"type":"string","format":"date","example":"2003-02-11","description":"Fecha de nacimiento. Se espera: fecha YYYY-MM-DD, no futura. OBLIGATORIO con el bloque `secondary_driver`."},"gender":{"type":"string","enum":["Male","Female"],"example":"Female","description":"Sexo. No se asume \"Male\". Se espera: Male o Female. OBLIGATORIO con el bloque `secondary_driver`. Valores: GET /api/v1/catalog?type=genders."},"marital_status":{"type":"string","enum":["Single","Married","UnmarriedPartner","Divorced","Widowed"],"example":"Single","description":"Estado civil. Determina la prima en varias aseguradoras; no se asume \"Single\". Se espera: un valor del catálogo marital-statuses. OBLIGATORIO con el bloque `secondary_driver`. Valores: GET /api/v1/catalog?type=marital-statuses."},"nationality":{"type":"string","enum":["ESP","GBR","FRA","DEU","ITA","PRT","ROU","MAR","COL","ECU","ARG","VEN","PER","BOL","BRA","CHN","PAK","UKR","RUS","POL","BGR","NLD","BEL","SWE","NOR","DNK","FIN","IRL","CHE","AUT","USA","CAN","MEX","CHL","URY","PRY","CUB","DOM","HND","SLV","GTM","NIC","PAN","CRI","DZA","SEN","NGA","GHA","PHL","IND","JPN","KOR","AUS","NZL","TUR","ISR","EGY","ZAF"],"example":"ESP","description":"Nacionalidad ISO-3. Obligatoria con NIE o pasaporte. Con DNI es española por definición: si la mandas, tiene que ser ESP. Se espera: código ISO-3 del catálogo nationalities. OBLIGATORIO con el bloque `secondary_driver` y `secondary_driver.document_type` = Nie o Passport. Valores: GET /api/v1/catalog?type=nationalities."},"driving_license_type":{"type":"string","enum":["B","C1","C"],"example":"B","description":"Tipo de carnet del conductor adicional. Se espera: un valor del catálogo driving-license-types. OBLIGATORIO con el bloque `secondary_driver`. Valores: GET /api/v1/catalog?type=driving-license-types."},"driving_license_date":{"type":"string","format":"date","example":"2022-05-20","description":"Fecha de expedición del carnet del conductor adicional. Su antigüedad cambia el precio. Se espera: fecha YYYY-MM-DD, no futura. OBLIGATORIO con el bloque `secondary_driver`."},"driving_license_country":{"type":"string","enum":["ESP","GBR","FRA","DEU","ITA","PRT","ROU","MAR","COL","ECU","ARG","VEN","PER","BOL","BRA","CHN","PAK","UKR","RUS","POL","BGR","NLD","BEL","SWE","NOR","DNK","FIN","IRL","CHE","AUT","USA","CAN","MEX","CHL","URY","PRY","CUB","DOM","HND","SLV","GTM","NIC","PAN","CRI","DZA","SEN","NGA","GHA","PHL","IND","JPN","KOR","AUS","NZL","TUR","ISR","EGY","ZAF"],"example":"ESP","description":"País de expedición del carnet (ISO-3). Como para el conductor habitual, hoy solo se cotizan carnets españoles: cualquier otro se rechaza como caso no soportado, en vez de declararse español. Se espera: ESP. OBLIGATORIO con el bloque `secondary_driver`. Valores: GET /api/v1/catalog?type=nationalities."},"policyholder_relationship":{"type":"string","enum":["Spouse","CivilPartner","Partner","Parent","Child","Sibling","Other"],"example":"Child","description":"Qué es esta persona del tomador: Spouse (cónyuge), CivilPartner (pareja de hecho registrada), Partner (pareja), Parent (su padre o madre), Child (su hijo o hija), Sibling (su hermano o hermana) u Other. Si no se envía, las aseguradoras que la piden reciben «Other» (otra relación), como hasta ahora. Se espera: Spouse, CivilPartner, Partner, Parent, Child, Sibling, Other."},"address":{"$ref":"#/components/schemas/SecondaryDriverAddress"}},"required":["document_type","document_id","name","surname","birth_date","gender","marital_status","driving_license_type","driving_license_date","driving_license_country"],"additionalProperties":false,"x-required-when":[{"field":"surname2","when":"con el bloque `secondary_driver` y `secondary_driver.document_type: \"Dni\"`","depends_on":["secondary_driver","secondary_driver.document_type"]},{"field":"nationality","when":"con el bloque `secondary_driver` y `secondary_driver.document_type` = Nie o Passport","depends_on":["secondary_driver","secondary_driver.document_type"]}]},"SecondaryDriverAddress":{"type":"object","description":"La dirección del conductor adicional (opcional; sin ella, las aseguradoras usan la del tomador). Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `road_type` es obligatorio con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos). `road_name` es obligatorio con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos). `road_number` es obligatorio con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos).","properties":{"postal_code":{"type":"string","pattern":"^\\d{5}$","example":"28001","description":"Código postal español de esta dirección. Se espera: 5 dígitos, en texto. OBLIGATORIO con el bloque `secondary_driver.address`."},"town_id":{"type":"integer","minimum":1,"example":28079,"description":"Municipio (catálogo towns). Solo se deduce del código postal si este tiene UN único municipio; si tiene varios, es obligatorio. Un `town_id` que no es de ese código postal se rechaza. Se espera: entero del catálogo towns. Valores: GET /api/v1/catalog?type=towns."},"road_type":{"type":"string","enum":["Acequia","Atajo","Autovia","Avenida","Barriada","Barrio","Calle","Callejon","Camino","Carretera","Comarcal","Conjunto","Glorieta","GranVia","Grupo","Kilometro","Nacional","Pasaje","Paseo","Pasillo","Paso","Plaza","Poligono","Rambla","Riera","Ronda","Sendero","Torrente","Travesera","Travesia","Urbanizacion","Via","Vial"],"example":"Calle","description":"Tipo de vía. Un valor no reconocido ya no se convierte en \"Calle\". Se espera: un valor del catálogo road-types. OBLIGATORIO con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos). Valores: GET /api/v1/catalog?type=road-types."},"road_name":{"type":"string","minLength":1,"maxLength":100,"example":"Gran Vía","description":"Nombre de la vía. No se inventa \"Principal\". Se espera: texto. OBLIGATORIO con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos)."},"road_number":{"type":"string","minLength":1,"maxLength":10,"example":"12","description":"Número de la vía, en texto. Usa \"S/N\" si la vía no tiene número. No se inventa \"1\". Se espera: texto (p. ej. \"12\", \"12B\", \"S/N\"). OBLIGATORIO con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos)."}},"required":["postal_code"],"additionalProperties":false,"x-required-when":[{"field":"road_type","when":"con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos)","depends_on":["secondary_driver.address.road_name","secondary_driver.address.road_number"]},{"field":"road_name","when":"con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos)","depends_on":["secondary_driver.address.road_type","secondary_driver.address.road_number"]},{"field":"road_number","when":"con otro dato de la calle (`road_type`, `road_name` y `road_number` van juntos)","depends_on":["secondary_driver.address.road_type","secondary_driver.address.road_name"]}]},"CreateMotorcycleQuote":{"type":"object","description":"El cuerpo de la petición. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `owner` es obligatorio con `owner_same_as_holder: false`. `owner` NO se envía con `owner_same_as_holder: true` (enviarlo es una contradicción: 400).","properties":{"insurance_line":{"type":"string","enum":["Motorcycle"],"example":"Motorcycle","description":"Ramo a cotizar. Se espera: Home, Car o Motorcycle."},"effective_date":{"type":"string","format":"date","example":"2030-01-01","description":"Fecha de inicio del seguro. Obligatoria: ya no se pone \"hoy\", y una fecha pasada se rechaza en vez de corregirse. Se espera: fecha YYYY-MM-DD, hoy o posterior (día natural de España)."},"client_reference":{"type":"string","maxLength":100,"example":"EXP-2026-0042","description":"Tu referencia interna. Se devuelve en la respuesta y en los webhooks. No es una clave de idempotencia. Se espera: texto de hasta 100 caracteres."},"owner_same_as_holder":{"type":"boolean","example":true,"description":"¿El propietario del vehículo es el tomador? Ya no se asume que sí. Con false hay que enviar `owner`. Se espera: true o false."},"holder":{"$ref":"#/components/schemas/Holder"},"vehicle":{"$ref":"#/components/schemas/MotoVehicle"},"driver":{"$ref":"#/components/schemas/MotoDriver"},"owner":{"$ref":"#/components/schemas/Owner"}},"required":["insurance_line","effective_date","owner_same_as_holder","holder","vehicle","driver"],"additionalProperties":false,"x-required-when":[{"field":"owner","when":"con `owner_same_as_holder: false`","depends_on":["owner_same_as_holder"]}],"x-forbidden-when":[{"field":"owner","when":"con `owner_same_as_holder: true`","depends_on":["owner_same_as_holder"]}]},"MotoVehicle":{"type":"object","description":"La moto. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `purchase_date` es obligatorio salvo con `vehicle.purchase_type: \"planned\"`. `purchase_date` NO se envía con `vehicle.purchase_type: \"planned\"` (aún no comprada) (enviarlo es una contradicción: 400).","properties":{"code":{"type":"string","maxLength":20,"example":"02360100002","description":"Versión exacta (Base7, catálogo vehicle-versions con line=Motorcycle). Obligatoria si no hay matrícula o si la matrícula tiene varias versiones. Se espera: id del catálogo vehicle-versions. Valores: GET /api/v1/catalog?type=vehicle-versions."},"registration_plate":{"type":"string","minLength":4,"maxLength":10,"example":"5678BCD","description":"Matrícula española. Se valida siempre que se envía. Se espera: matrícula española."},"registration_date":{"type":"string","format":"date","example":"2020-01-01","description":"Primera matriculación. Solo se deduce de la matrícula; si no se puede, es obligatoria. Se espera: fecha YYYY-MM-DD, no futura."},"purchase_type":{"type":"string","enum":["already_owned","new","used_dealer","used_private","planned"],"example":"already_owned","description":"Cómo se adquirió (opcional). Sin él se deduce de las fechas; con él, algunas aseguradoras tarifican según el caso. Se espera: already_owned, new, used_dealer, used_private o planned."},"purchase_date":{"type":"string","format":"date","example":"2020-02-01","description":"Fecha de compra. Ya no se deduce de la matriculación. No se envía con purchase_type \"planned\". Se espera: fecha YYYY-MM-DD, no futura e igual o posterior a la matriculación. OBLIGATORIO salvo con `vehicle.purchase_type: \"planned\"`. No se envía con `vehicle.purchase_type: \"planned\"` (aún no comprada)."},"circulation_postal_code":{"type":"string","pattern":"^\\d{5}$","example":"28001","description":"Código postal por donde circula habitualmente. Ya no se asume el del tomador: si es el mismo, repítelo. Se espera: 5 dígitos, en texto."},"circulation_town_id":{"type":"integer","minimum":1,"example":28079,"description":"Municipio de circulación. Solo se deduce si el código postal tiene un único municipio. Se espera: entero del catálogo towns. Valores: GET /api/v1/catalog?type=towns."},"garage_type_id":{"type":"string","enum":["PrivateGarage","CommunalParking","NoGarage"],"example":"NoGarage","description":"Dónde duerme la moto. Determina la prima. Se espera: un valor del catálogo motorcycle-garage-types. Valores: GET /api/v1/catalog?type=motorcycle-garage-types."},"kilometers_per_year":{"type":"integer","minimum":1,"maximum":200000,"example":5000,"description":"Kilómetros al año. Se espera: entero > 0."}},"required":["circulation_postal_code","garage_type_id","kilometers_per_year"],"additionalProperties":false,"x-required-when":[{"field":"purchase_date","when":"salvo con `vehicle.purchase_type: \"planned\"`","depends_on":["vehicle.purchase_type"]}],"x-forbidden-when":[{"field":"purchase_date","when":"con `vehicle.purchase_type: \"planned\"` (aún no comprada)","depends_on":["vehicle.purchase_type"]}]},"MotoDriver":{"type":"object","description":"El conductor habitual. Solo snake_case. Ningún campo obligatorio se rellena por defecto; una clave no documentada se rechaza. `document_type` es obligatorio con `driver.same_as_holder: false`. `document_id` es obligatorio con `driver.same_as_holder: false`. `name` es obligatorio con `driver.same_as_holder: false`. `surname` es obligatorio con `driver.same_as_holder: false`. `surname2` es obligatorio con `driver.same_as_holder: false` y `driver.document_type: \"Dni\"`. `birth_date` es obligatorio con `driver.same_as_holder: false`. `gender` es obligatorio con `driver.same_as_holder: false`. `marital_status` es obligatorio con `driver.same_as_holder: false`. `nationality` es obligatorio con `driver.same_as_holder: false` y `driver.document_type` = Nie o Passport. `previous_motorcycle_code` es obligatorio con `driver.driving_experience_id: \"OtherMotorcycle\"`. `car_license_date` es obligatorio con `driver.has_car_license: true`. `previous_company_code` es obligatorio con `driver.previously_insured: true`. `previous_policy_number` es obligatorio con `driver.previously_insured: true`. `previous_plate` es obligatorio con `driver.previously_insured: true`. `total_years_insured` es obligatorio con `driver.previously_insured: true`. `years_in_previous_company` es obligatorio con `driver.previously_insured: true`. `years_without_accidents` es obligatorio con `driver.previously_insured: true`. `last_five_years_accidents` es obligatorio con `driver.previously_insured: true`. `economic_occupation` es obligatorio con `driver.employment_status` en activo (Employee, SelfEmployed o CivilServant) y `driver.same_as_holder: false`. `document_type` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `document_id` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `name` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `surname` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `surname2` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `birth_date` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `gender` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `marital_status` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `nationality` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `previous_company_code` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `previous_policy_status` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `previous_policy_number` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `previous_plate` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `total_years_insured` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `years_in_previous_company` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `years_without_accidents` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `last_five_years_accidents` NO se envía con `driver.previously_insured: false` (enviarlo es una contradicción: 400). `employment_status` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `economic_occupation` NO se envía con `driver.same_as_holder: true` (enviarlo es una contradicción: 400). `economic_occupation` NO se envía sin `driver.employment_status` (van juntos) (enviarlo es una contradicción: 400).","properties":{"same_as_holder":{"type":"boolean","example":true,"description":"¿El conductor habitual es el tomador? Ya no se asume que sí. Se espera: true o false."},"document_type":{"type":"string","enum":["Dni","Nie","Passport"],"example":"Dni","description":"Tipo de documento de identidad. No se asume DNI. Se espera: Dni, Nie o Passport (empresas con Cif no se cotizan por esta API). OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`. Valores: GET /api/v1/catalog?type=document-types."},"document_id":{"type":"string","minLength":5,"maxLength":20,"example":"12345678Z","description":"Número del documento. Su formato debe corresponder al tipo declarado. Se espera: DNI: 8 dígitos + letra · NIE: X/Y/Z + 7 dígitos + letra · Pasaporte: mínimo 5 caracteres. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`."},"name":{"type":"string","minLength":1,"maxLength":60,"example":"Juan","description":"Nombre, tal como figura en el documento. Se espera: texto, solo letras. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`."},"surname":{"type":"string","minLength":1,"maxLength":60,"example":"García","description":"Primer apellido. Se espera: texto, solo letras. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`."},"surname2":{"type":"string","maxLength":60,"example":"López","description":"Segundo apellido. Obligatorio con DNI. Se espera: texto, solo letras. OBLIGATORIO con `driver.same_as_holder: false` y `driver.document_type: \"Dni\"`. No se envía con `driver.same_as_holder: true`."},"birth_date":{"type":"string","format":"date","example":"1985-03-15","description":"Fecha de nacimiento. Se espera: fecha YYYY-MM-DD, no futura. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`."},"gender":{"type":"string","enum":["Male","Female"],"example":"Female","description":"Sexo. No se asume \"Male\". Se espera: Male o Female. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`. Valores: GET /api/v1/catalog?type=genders."},"marital_status":{"type":"string","enum":["Single","Married","UnmarriedPartner","Divorced","Widowed"],"example":"Married","description":"Estado civil. Determina la prima en varias aseguradoras; no se asume \"Single\". Se espera: un valor del catálogo marital-statuses. OBLIGATORIO con `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`. Valores: GET /api/v1/catalog?type=marital-statuses."},"nationality":{"type":"string","enum":["ESP","GBR","FRA","DEU","ITA","PRT","ROU","MAR","COL","ECU","ARG","VEN","PER","BOL","BRA","CHN","PAK","UKR","RUS","POL","BGR","NLD","BEL","SWE","NOR","DNK","FIN","IRL","CHE","AUT","USA","CAN","MEX","CHL","URY","PRY","CUB","DOM","HND","SLV","GTM","NIC","PAN","CRI","DZA","SEN","NGA","GHA","PHL","IND","JPN","KOR","AUS","NZL","TUR","ISR","EGY","ZAF"],"example":"ESP","description":"Nacionalidad ISO-3. Obligatoria con NIE o pasaporte. Con DNI es española por definición: si la mandas, tiene que ser ESP. Se espera: código ISO-3 del catálogo nationalities. OBLIGATORIO con `driver.same_as_holder: false` y `driver.document_type` = Nie o Passport. No se envía con `driver.same_as_holder: true`. Valores: GET /api/v1/catalog?type=nationalities."},"driving_license_type":{"type":"string","enum":["AM","A1","A2","A","B","LCM"],"example":"A2","description":"Tipo de carnet de moto. Se espera: un valor del catálogo motorcycle-driving-license-types. Valores: GET /api/v1/catalog?type=motorcycle-driving-license-types."},"driving_license_date":{"type":"string","format":"date","example":"2015-06-01","description":"Fecha de expedición del carnet de moto. Se espera: fecha YYYY-MM-DD, no futura."},"driving_license_issuing_zone_id":{"type":"string","enum":["Spain","RestEU","RestWorld"],"example":"Spain","description":"Zona de expedición del carnet. Ya no se asume España. Se espera: Spain, RestEU o RestWorld."},"driving_experience_id":{"type":"string","enum":["NoExperience","ThisMotorcycle","OtherMotorcycle"],"example":"ThisMotorcycle","description":"Experiencia conduciendo motos. Se espera: un valor del catálogo motorcycle-driving-experience. Valores: GET /api/v1/catalog?type=motorcycle-driving-experience."},"previous_motorcycle_code":{"type":"string","maxLength":20,"example":"02360100001","description":"Versión de la moto anterior. Se espera: id del catálogo vehicle-versions. OBLIGATORIO con `driver.driving_experience_id: \"OtherMotorcycle\"`. Valores: GET /api/v1/catalog?type=vehicle-versions."},"has_car_license":{"type":"boolean","example":true,"description":"¿Tiene además carnet de coche? No se asume. Se espera: true o false."},"car_license_date":{"type":"string","format":"date","example":"2010-03-01","description":"Fecha del carnet de coche. Se espera: fecha YYYY-MM-DD, no futura. OBLIGATORIO con `driver.has_car_license: true`."},"previously_insured":{"type":"boolean","example":false,"description":"¿Tiene o ha tenido un seguro de moto a su nombre? Ya no se asume que no. Se espera: true o false."},"previous_company_code":{"type":"string","minLength":1,"maxLength":20,"example":"C0109","description":"Aseguradora anterior. Los códigos de coche y de moto son catálogos distintos. Se espera: código del catálogo motorcycle-insurance-companies. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false`. Valores: GET /api/v1/catalog?type=motorcycle-insurance-companies."},"previous_policy_status":{"type":"string","enum":["active","expired_recent","expired_old"],"example":"active","description":"¿La póliza anterior sigue en vigor? active = sí; expired_recent = venció hace menos de 2 meses; expired_old = hace más. Sin él se trata como en vigor. Se espera: active, expired_recent o expired_old. No se envía con `driver.previously_insured: false`."},"previous_policy_number":{"type":"string","minLength":5,"maxLength":40,"example":"POL-123456","description":"Número de la póliza anterior. Se espera: texto de al menos 5 caracteres. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false`."},"previous_plate":{"type":"string","minLength":4,"maxLength":10,"example":"1234BCD","description":"Matrícula del vehículo de la póliza anterior. Ya no se asume que es el mismo vehículo: si lo es, repite su matrícula. Se espera: matrícula española. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false`."},"total_years_insured":{"type":"integer","minimum":0,"maximum":80,"example":5,"description":"Años totales asegurado. Con `previously_insured: false` no se envía, o se envía 0. Se espera: entero ≥ 0. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false` (se admite 0, que dice lo mismo)."},"years_in_previous_company":{"type":"integer","minimum":0,"maximum":80,"example":5,"description":"Años en la aseguradora anterior. No puede superar total_years_insured. Con `previously_insured: false` no se envía, o se envía 0. Se espera: entero ≥ 0. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false` (se admite 0, que dice lo mismo)."},"years_without_accidents":{"type":"integer","minimum":0,"maximum":80,"example":5,"description":"Años sin siniestros con culpa. Con `previously_insured: false` no se envía, o se envía 0. Se espera: entero ≥ 0. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false` (se admite 0, que dice lo mismo)."},"last_five_years_accidents":{"type":"integer","minimum":0,"maximum":20,"example":5,"description":"Siniestros con culpa en los últimos 5 años. Con `previously_insured: false` no se envía, o se envía 0. Se espera: entero ≥ 0. OBLIGATORIO con `driver.previously_insured: true`. No se envía con `driver.previously_insured: false` (se admite 0, que dice lo mismo)."},"penalties":{"type":"string","enum":["0","1","2","3","4","5","6"],"example":"0","description":"Multas de los últimos 3 años. Hoy ninguna aseguradora de moto lo consume: se guarda con la cotización. Se espera: \"0\" a \"6\", en texto."},"points_lost":{"type":"boolean","example":false,"description":"¿Perdió puntos el último año? Hoy no lo consume ninguna aseguradora de moto. Se espera: true o false."},"employment_status":{"type":"string","enum":["Employee","SelfEmployed","CivilServant","Retired","Student","Unemployed","HomeWorker"],"example":"Employee","description":"Situación laboral de esta persona. Si no se envía, las aseguradoras reciben la del tomador, como hasta ahora. Se espera: un valor del catálogo employment-statuses. No se envía con `driver.same_as_holder: true`. Valores: GET /api/v1/catalog?type=employment-statuses."},"economic_occupation":{"type":"string","pattern":"^\\d{4}$","example":"2611","description":"Profesión de esta persona, código CNO-11 de 4 dígitos. Obligatoria si está en activo y siempre junto a `employment_status`. Si no se envía ninguna de las dos, las aseguradoras reciben las del tomador, como hasta ahora. Se espera: 4 dígitos, en texto, del catálogo economic-occupations. OBLIGATORIO con `driver.employment_status` en activo (Employee, SelfEmployed o CivilServant) y `driver.same_as_holder: false`. No se envía con `driver.same_as_holder: true`. No se envía sin `driver.employment_status` (van juntos). Valores: GET /api/v1/catalog?type=economic-occupations."}},"required":["same_as_holder","driving_license_type","driving_license_date","driving_license_issuing_zone_id","driving_experience_id","previously_insured"],"additionalProperties":false,"x-required-when":[{"field":"document_type","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"document_id","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"name","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"surname","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"surname2","when":"con `driver.same_as_holder: false` y `driver.document_type: \"Dni\"`","depends_on":["driver.same_as_holder","driver.document_type"]},{"field":"birth_date","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"gender","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"marital_status","when":"con `driver.same_as_holder: false`","depends_on":["driver.same_as_holder"]},{"field":"nationality","when":"con `driver.same_as_holder: false` y `driver.document_type` = Nie o Passport","depends_on":["driver.same_as_holder","driver.document_type"]},{"field":"previous_motorcycle_code","when":"con `driver.driving_experience_id: \"OtherMotorcycle\"`","depends_on":["driver.driving_experience_id"]},{"field":"car_license_date","when":"con `driver.has_car_license: true`","depends_on":["driver.has_car_license"]},{"field":"previous_company_code","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"previous_policy_number","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"previous_plate","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"total_years_insured","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"years_in_previous_company","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"years_without_accidents","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"last_five_years_accidents","when":"con `driver.previously_insured: true`","depends_on":["driver.previously_insured"]},{"field":"economic_occupation","when":"con `driver.employment_status` en activo (Employee, SelfEmployed o CivilServant) y `driver.same_as_holder: false`","depends_on":["driver.employment_status","driver.same_as_holder"]}],"x-forbidden-when":[{"field":"document_type","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"document_id","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"name","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"surname","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"surname2","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"birth_date","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"gender","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"marital_status","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"nationality","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"previous_company_code","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"]},{"field":"previous_policy_status","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"]},{"field":"previous_policy_number","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"]},{"field":"previous_plate","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"]},{"field":"total_years_insured","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"],"zero_allowed":true},{"field":"years_in_previous_company","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"],"zero_allowed":true},{"field":"years_without_accidents","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"],"zero_allowed":true},{"field":"last_five_years_accidents","when":"con `driver.previously_insured: false`","depends_on":["driver.previously_insured"],"zero_allowed":true},{"field":"employment_status","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"economic_occupation","when":"con `driver.same_as_holder: true`","depends_on":["driver.same_as_holder"]},{"field":"economic_occupation","when":"sin `driver.employment_status` (van juntos)","depends_on":["driver.employment_status"]}]}}}}