SELECT
   count(*)
FROM beneficiari_progetti
JOIN progetti USING(id_progetto)
LEFT JOIN dati_finanziari_beneficiari_mv USING(id_progetto,codice_fiscale)
WHERE COALESCE(codice_fiscale = upper(:cf), :cf IS NULL)
  AND COALESCE(beneficiario_ultimo ILIKE :ben, TRUE)
  AND COALESCE(rs_sign_array(:ben_adv) <@ rs_sign_array(beneficiario_ultimo), TRUE)
  AND COALESCE(titolo_progetto ~* (:titoloprogetto), TRUE)
  AND COALESCE(:comunesl ILIKE comune_sede_legale, :comunesl IS NULL)
  AND COALESCE(:provinciasl ILIKE provincia_sede_legale, :provinciasl IS NULL)
  AND COALESCE(:comuneul ILIKE comune_unita_locale, :comuneul IS NULL)
  AND COALESCE(:provinciaul ILIKE provincia_unita_locale, :provinciaul IS NULL)
  AND (:dattobando, :nattobando)::atto == atto_approvazione_bando
  AND (:dattograd, :nattograd)::atto == ANY(atto_concessione_definitiva)
  AND COALESCE(programma = :programma, :programma IS NULL)
  AND COALESCE(linea = :linea, :linea IS NULL)
  AND COALESCE(tipologia_aiuto = :tipologiaaiuto, :tipologiaaiuto IS NULL)
  AND COALESCE(data_fine_progetto_effettiva <= :finanziatoa::timestamp, :finanziatoa IS NULL)
  AND (:finanziatoil::text IS NULL OR COALESCE(:finanziatoil::integer = ANY(array(SELECT extract(year from (unnest(atto_concessione_definitiva)).data)::integer)), FALSE))
  AND (:finanziatoda::text IS NULL OR COALESCE(:finanziatoda::integer <= ANY(array(SELECT extract(year from (unnest(atto_concessione_definitiva)).data)::integer)), FALSE))
  AND (   (COALESCE(codice_ateco = regexp_replace(:ateco, '[^0-9]', '', 'g'), :ateco IS NULL) AND COALESCE(classificazione_ateco = :classateco, :classateco IS NULL))
       OR (COALESCE(codice_ateco_progetto = regexp_replace(:ateco, '[^0-9]', '', 'g'), :ateco IS NULL) AND COALESCE(classificazione_ateco_progetto = :classateco, :classateco IS NULL)))
  AND CASE WHEN :ricerca::text IS NOT NULL THEN tipo_linea = 'Ricerca' ELSE TRUE END
  AND CASE :deminimis::boolean
       WHEN true THEN (importo_definitivo_deminimis <> 0)
       WHEN false THEN (importo_definitivo_deminimis = 0)
       ELSE TRUE
      END
