    :creator s/Str
    (s/optional-key :description) s/Str
    :source_publisher s/Str
-   :source_date s/Inst
+   :source-date s/Inst
    :language (apply s/enum (conj (vals iso-639-2-to-iso-639-1) "und"))
    (s/optional-key :genre) (apply s/enum (vals genre-raw-to-genre))
    (s/optional-key :subgenre) (apply s/enum (vals genre-raw-to-subgenre))

   50 "BSVÖ, Wien"
   103 "Paderborn"})

(def CatalogItem
  {:record-id s/Str
   :title s/Str

  [record path]
  (some-> (apply xml1-> record path) text))

(defn get-year
  "Grab the date year out of a string. Return nil if `s` cannot be
  parsed."
  [s]
  (when-let [year (and s (re-find #"\d{4}" s))]
    (time.coerce/to-date
     (time.format/parse (time.format/formatters :year) year))))

(defn clean-raw-item
  "Return a proper production based on a raw item, i.e.
  translate the language tag into proper ISO 639-1 codes"
  [{:keys [genre-raw genre-code language format-raw producer-raw
           produced_commercially? source-date general-note
           series-title-raw series-volume-raw braille-grade-raw] :as item
    :or {genre-raw "x01"}}]
  (-> item
      (assoc-some
       :language (iso-639-2-to-iso-639-1 language)
       :genre (or (genre-raw-to-genre (subs genre-raw 0 1))
                  (genre-code-to-genre (subs genre-code 0 2)))
       :sub-genre (genre-raw-to-subgenre (subs genre-raw 0 3))
       :format (format-raw-to-format format-raw)
       :producer_brief (producer-raw-to-producer (Integer/parseInt producer-raw))
       :produced_commercially? (some? produced_commercially?)
       :rucksackbuch-number (when (and series-title-raw
                                       (re-find #"^Rucksackbuch" series-title-raw))
                              (Integer/parseInt series-volume-raw))
       :braille-grade (braille-grade-raw-to-braille-grade braille-grade-raw)
       :source-date (get-year source-date)
       :movie_country (when general-note (second (re-find #"^Originalversion: (.*)$" general-note))))
      (dissoc :genre-raw :genre-code :format-raw :producer-raw
              :series-title-raw :series-volume-raw)))

(defn order-and-group [items]
  (->>
