WITH matched AS MATERIALIZED (
  SELECT
    source_dataset_key,
    source_uid,
    source_dataset_id,
    source_dataset_name,
    categoria_linea,
    categoria_canonica,
    categoria_slug,
    expediente,
    registro_sanitario,
    producto,
    titular,
    estado_registro,
    fecha_expedicion,
    fecha_vencimiento,
    modalidad,
    grupo,
    marca,
    principio_activo,
    forma_farmaceutica,
    presentacion_comercial,
    atc,
    rol_nombre,
    rol_tipo,
    ciudad_titular,
    pais_titular,
    fabricante,
    importador,
    vigencia
  FROM invima_api_catalog
  WHERE (
    to_tsvector('spanish', COALESCE(search_text, '')) @@ websearch_to_tsquery('spanish', 'marcapasos')
    OR COALESCE(registro_sanitario, '') ILIKE '%marcapasos%'
    OR COALESCE(expediente, '') ILIKE '%marcapasos%'
    OR COALESCE(producto, '') ILIKE '%marcapasos%'
    OR COALESCE(categoria_canonica, '') ILIKE '%marcapasos%'
    OR COALESCE(categoria_linea, '') ILIKE '%marcapasos%'
  )
)
SELECT
  source_dataset_key,
  source_dataset_id,
  source_dataset_name,
  categoria_linea,
  categoria_canonica,
  categoria_slug,
  expediente,
  registro_sanitario,
  producto,
  titular,
  estado_registro,
  fecha_expedicion,
  fecha_vencimiento,
  modalidad,
  grupo,
  marca,
  principio_activo,
  forma_farmaceutica,
  presentacion_comercial,
  atc,
  rol_nombre,
  rol_tipo,
  ciudad_titular,
  pais_titular,
  fabricante,
  importador,
  vigencia
FROM matched
ORDER BY fecha_vencimiento DESC NULLS LAST, producto ASC NULLS LAST, source_dataset_key ASC, source_uid ASC
LIMIT 25 OFFSET 0;
