More closely matches ben's spreadsheet for cashflows.
This commit is contained in:
@@ -4,13 +4,13 @@
|
||||
[(:require
|
||||
[auto-ap.time :as atime]
|
||||
[auto-ap.time-utils :refer [user-friendly-date]]
|
||||
[auto-ap.utils :refer [dollars-0?]]
|
||||
[auto-ap.utils :refer [dollars-0? dollars=]]
|
||||
[clojure.string :as str]
|
||||
[auto-ap.time-utils :refer [user-friendly-date]]
|
||||
)]
|
||||
:cljs
|
||||
[(:require
|
||||
[auto-ap.utils :refer [dollars-0?]]
|
||||
[auto-ap.utils :refer [dollars-0? dollars=]]
|
||||
[auto-ap.views.utils :as au]
|
||||
[clojure.string :as str]
|
||||
[auto-ap.time-utils :refer [user-friendly-date]])]))
|
||||
@@ -73,14 +73,36 @@
|
||||
["97000 Taxes" 97000 97999]
|
||||
["98000 Other Expenses" 98000 98999]]
|
||||
|
||||
:operating-activities [["12000-14000 Accounts Receivable" 12000 13999]
|
||||
["21000-28000 Accounts Payable" 21000 27999]
|
||||
["96000-97000 Amortization" 96000 96999]]
|
||||
:operating-activities [["Accounts Payable" 21000 27999 :add]
|
||||
["Accounts Receivable" 12200 12899 :subtract]
|
||||
["CCP" 12000 12199 :subtract]
|
||||
["Receipts Split" 12900 12999 :subtract]
|
||||
["Depreciation Expense" 96000 96999 :add]
|
||||
["Inventory" 13000 13999 :subtract]
|
||||
]
|
||||
|
||||
:investment-activities [["14000-18000 Investments" 14000 17999]]
|
||||
:financing-activities [["28000-35000 Financing Activities" 28000 34999]
|
||||
["35000-40000 Other" 35000 39999]]
|
||||
:bottom-line [["11000-12000 Bottom Line" 11000 11999]]})
|
||||
:investment-activities [["14000-18000 Investments" 14000 17999 :subtract]]
|
||||
:financing-activities [["Owner's Distributions" 34000 35999 :subtract]
|
||||
["Owner's Contributions" 33000 33999 :add]
|
||||
["Loans" 28000 28599 :add]]})
|
||||
|
||||
(def cashflow-aggregation
|
||||
(->> (select-keys groupings [:operating-activities :investment-activities :financing-activities])
|
||||
vals
|
||||
(mapcat identity)
|
||||
(map (fn [[_ start end rule]]
|
||||
[start end rule]))
|
||||
(into [])))
|
||||
|
||||
(defn cashflow-account->amount [account-code amount]
|
||||
(let [operation (->> cashflow-aggregation
|
||||
(filter (fn [[start end]]
|
||||
(<= start account-code end)))
|
||||
first
|
||||
last)]
|
||||
(if (= operation :add)
|
||||
amount
|
||||
(- amount))))
|
||||
|
||||
(defn min-numeric-code [category]
|
||||
(->> (groupings category)
|
||||
@@ -136,6 +158,11 @@
|
||||
(defn aggregate-accounts [pnl-data]
|
||||
(reduce (fnil + 0.0) 0.0 (map :amount (:data pnl-data))))
|
||||
|
||||
(defn aggregate-cashflow-accounts [pnl-data]
|
||||
(reduce (fnil + 0.0) 0.0 (map (fn [d]
|
||||
(cashflow-account->amount (:numeric-code d) (:amount d)))
|
||||
(:data pnl-data))))
|
||||
|
||||
(defn aggregate-credits [pnl-data]
|
||||
(reduce (fnil + 0.0) 0.0 (map :credits (:data pnl-data))))
|
||||
|
||||
@@ -250,22 +277,18 @@
|
||||
(fn [p]
|
||||
[
|
||||
(merge
|
||||
{:format :dollar
|
||||
:value (aggregate-credits p)
|
||||
:filters (when (:numeric-code (:filters p)) ;; don't allow filtering when you don't at least filter numeric codes
|
||||
(:filters p))}
|
||||
{:format :text
|
||||
:value nil}
|
||||
(:cell-args p)
|
||||
cell-args)
|
||||
(merge
|
||||
{:format :text
|
||||
:value nil}
|
||||
(:cell-args p)
|
||||
cell-args)
|
||||
(merge
|
||||
{:format :dollar
|
||||
:value (aggregate-debits p)
|
||||
:filters (when (:numeric-code (:filters p)) ;; don't allow filtering when you don't at least filter numeric codes
|
||||
(:filters p))}
|
||||
(:cell-args p)
|
||||
cell-args)
|
||||
(merge
|
||||
{:format :dollar
|
||||
:value (aggregate-accounts p)
|
||||
:value (aggregate-cashflow-accounts p)
|
||||
:filters (when (:numeric-code (:filters p)) ;; don't allow filtering when you don't at least filter numeric codes
|
||||
(:filters p))}
|
||||
(:cell-args p)
|
||||
@@ -513,7 +536,7 @@
|
||||
(let [pnl-datas (map #(filter-categories % [grouping])
|
||||
pnl-datas)
|
||||
individual-accounts
|
||||
(for [[grouping-name from to] (groupings grouping)
|
||||
(for [[grouping-name from to add-or-subtract] (groupings grouping)
|
||||
:let [pnl-datas (map #(filter-numeric-code % from to)
|
||||
pnl-datas)
|
||||
account-codes (used-accounts pnl-datas)]
|
||||
@@ -528,22 +551,41 @@
|
||||
(into [{:value name}]
|
||||
(mapcat
|
||||
(fn [p]
|
||||
(let [pnl-data (-> p (filter-numeric-code numeric-code numeric-code))]
|
||||
[(merge
|
||||
{:format :dollar
|
||||
:filters (:filters pnl-data)
|
||||
:value (aggregate-credits pnl-data)}
|
||||
(:cell-args p))
|
||||
(merge
|
||||
{:format :dollar
|
||||
:filters (:filters pnl-data)
|
||||
:value (aggregate-debits pnl-data)}
|
||||
(:cell-args p))
|
||||
(merge
|
||||
{:format :dollar
|
||||
:filters (:filters pnl-data)
|
||||
:value (aggregate-accounts pnl-data)}
|
||||
(:cell-args p))]))
|
||||
(let [pnl-data (-> p (filter-numeric-code numeric-code numeric-code))
|
||||
aggregated (aggregate-accounts pnl-data)
|
||||
credits (aggregate-credits pnl-data)
|
||||
debits (aggregate-debits pnl-data)]
|
||||
(if (dollars= (- debits credits) aggregated)
|
||||
[(merge
|
||||
{:format :dollar
|
||||
:filters (:filters pnl-data)
|
||||
:value debits}
|
||||
(:cell-args p))
|
||||
(merge
|
||||
{:format :dollar
|
||||
:filters (:filters pnl-data)
|
||||
:value credits}
|
||||
(:cell-args p))
|
||||
(merge
|
||||
{:format :dollar
|
||||
:filters (:filters pnl-data)
|
||||
:value (cashflow-account->amount numeric-code aggregated)}
|
||||
(:cell-args p))]
|
||||
[(merge
|
||||
{:format :dollar
|
||||
:filters (:filters pnl-data)
|
||||
:value credits}
|
||||
(:cell-args p))
|
||||
(merge
|
||||
{:format :dollar
|
||||
:filters (:filters pnl-data)
|
||||
:value debits}
|
||||
(:cell-args p))
|
||||
(merge
|
||||
{:format :dollar
|
||||
:filters (:filters pnl-data)
|
||||
:value (cashflow-account->amount numeric-code aggregated)}
|
||||
(:cell-args p))])))
|
||||
|
||||
pnl-datas))))
|
||||
(conj (cashflow-subtotal-by-column-row pnl-datas "" {:border [:top]})))]
|
||||
@@ -574,9 +616,11 @@
|
||||
:financing-activities
|
||||
(str prefix " Financing Activities")))
|
||||
|
||||
(into (cash-flow-detail-rows pnl-datas
|
||||
:bottom-line
|
||||
(str prefix " Bottom Line"))))]
|
||||
(conj (cashflow-subtotal-by-column-row (map #(-> %
|
||||
(filter-categories [:operating-activities :investment-activities :financing-activities])
|
||||
#_(negate #{:cogs :payroll :controllable :fixed-overhead :ownership-controllable}))
|
||||
pnl-datas)
|
||||
"Change in Cash and Cash Equivalents")))]
|
||||
{:header [[{:value "Account"}
|
||||
{:value "Increases"}
|
||||
{:value "Decreases"}
|
||||
|
||||
Reference in New Issue
Block a user