 ; default commodity. For most transactions, this will be the same
 ; as the quantity. For transactions involving foreign currencies
 ; and commodity purchases (like stock trades) it will be different.
-(s/def ::value validation/positive-big-dec?)
-(s/def ::description validation/non-empty-string?)
+(s/def ::value v/positive-big-dec?)
+(s/def ::description v/non-empty-string?)
 (s/def ::memo #(or (nil? %) (string? %)))
 (s/def ::transaction-date (partial instance? LocalDate))
 (s/def ::id uuid?)

                    (filter #(= action (:action %)))
                    (map :value))))

(defn- ^{:clj-money.validation/message "The total debits does not match the total credits"
         :clj-money.validation/path [:items]}
  sum-of-credits-must-equal-sum-of-debits
  [transaction]
  (->> [:debit :credit]
       (map #(item-value-sum transaction %))
       (apply =)))

(defn- ^{:clj-money.validation/message "Each item must have the same transaction-date as the transaction"
         :clj-money.validation/path [:items]}
  transaction-dates-must-match
  [{:keys [transaction-date items]}]
  (->> items

            [environ.core :refer [env]]
            [stowaway.core :refer [tag]]
            [stowaway.implicit :as storage :refer [with-storage with-transacted-storage]]
            [clj-money.validation :as v]
            [clj-money.models :as models]
            [clj-money.models.settings :as settings]
            [clj-money.models.accounts :as accounts]
