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