   )
 
 ;; cache dei file anagrafe aperti
-(def anagrafe (atom  {}))
+(def anagrafe (atom {}))
 
 (defn apri-csv-xz
   "apri un file singolo compresso con xz, restituisce io/reader"
   [filename]
   (let [chiave (keyword filename)]
 
-    (if (nil? (chiave @anagrafe))
+    (if (contains? @anagrafe chiave)
+      ;; se gia' aperto ritorna cache
+      (chiave @anagrafe)
+
       ;; apri nuovo file non trovato in cache
-      (swap! anagrafe assoc chiave
-             (with-open [in-file (-> filename
-                                     io/file
-                                     io/input-stream
-                                     (XZCompressorInputStream. true)
-                                     io/reader)]
-               (doall (csv/read-csv in-file)))))
-      ;; ritorna cache
-    (chiave @anagrafe)
-    
-  ))
+      (let []
+        (swap! anagrafe assoc chiave
+               (with-open [in-file (-> filename
+                                       io/file
+                                       io/input-stream
+                                       (XZCompressorInputStream. true)
+                                       io/reader)]
+                 (doall (csv/read-csv in-file))))
+        (chiave @anagrafe))
+      )
+
+    ))
 
 (defn dammi-codice-uscita
   "prende una stringa del codice uscita siope e ritorna una stringa che lo descrive"
-  [codice chiave]
+  ([codice] ;; default ritorna :descrizione
+   (dammi-codice-uscita codice :descrizione))
+
+  ([codice chiave]
   (->> (apri-csv-xz "assets/ANAG_CODGEST_USCITE.D160624.H0102.csv.xz")
        (keep #(if (string/includes? (str %) codice) %))
        (into [["codice" "categoria" "descrizione" "creazione" "scadenza"]])

       (keep #(if (= (:codice %) codice) %))
       first
       chiave
       ))

(defn analizza-dati [dati]
  (let [colonne [:2016 :2015 :2014 :siope :desc]

                                   :2014     [#(if (nil? %) 0 (quot (read-string %) 100)) :importo_2014]
                                   :siope    [read-string :codice_siope]
                                ;; :uscita   [#(if (nil? %) 0 (/ (read-string %) 100)) :imp_uscite_att]
                                   :desc     :descrizione_codice
                                   } dati)]
    (huri/select-cols colonne rilievo))
  )
