Adds bank reconciliation report
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
(ns auto-ap.import.intuit
|
||||
(:require
|
||||
[auto-ap.datomic :refer [conn]]
|
||||
[auto-ap.datomic :refer [conn pull-attr]]
|
||||
[auto-ap.import.common :refer [wrap-integration]]
|
||||
[auto-ap.import.transactions :as t]
|
||||
[auto-ap.intuit.core :as i]
|
||||
@@ -12,14 +12,26 @@
|
||||
[com.unbounce.dogstatsd.core :as statsd]
|
||||
[datomic.api :as dc]))
|
||||
|
||||
(defn get-intuit-bank-accounts [db]
|
||||
(dc/q '[:find ?external-id ?ba ?c
|
||||
:in $
|
||||
:where
|
||||
[?c :client/bank-accounts ?ba]
|
||||
[?ba :bank-account/intuit-bank-account ?iab]
|
||||
[?iab :intuit-bank-account/external-id ?external-id]]
|
||||
db))
|
||||
(defn get-intuit-bank-accounts
|
||||
( [db]
|
||||
(dc/q '[:find ?external-id ?ba ?c
|
||||
:in $
|
||||
:where
|
||||
[?c :client/bank-accounts ?ba]
|
||||
[?ba :bank-account/intuit-bank-account ?iab]
|
||||
[?iab :intuit-bank-account/external-id ?external-id]]
|
||||
db))
|
||||
([db & client-codes]
|
||||
(dc/q '[:find ?external-id ?ba ?c
|
||||
:in $ [?cc ...]
|
||||
:where
|
||||
[?c :client/code ?cc]
|
||||
[?c :client/bank-accounts ?ba]
|
||||
[?ba :bank-account/intuit-bank-account ?iab]
|
||||
[?iab :intuit-bank-account/external-id ?external-id]]
|
||||
db
|
||||
client-codes)))
|
||||
|
||||
|
||||
(defn intuit->transaction [transaction]
|
||||
(let [check-number (when (not (str/blank? (:Num transaction)))
|
||||
|
||||
@@ -10,10 +10,64 @@
|
||||
[clj-time.core :as time]
|
||||
[clojure.string :as str]
|
||||
[com.unbounce.dogstatsd.core :as statsd]
|
||||
[datomic.api :as dc]))
|
||||
[datomic.api :as dc]
|
||||
[clj-http.client :as client]))
|
||||
|
||||
(for [[e] (take 5 (get-intuit-bank-accounts (dc/db conn)))]
|
||||
|
||||
(i/get-transactions "2023-02-01"
|
||||
"2023-02-05"
|
||||
e))
|
||||
(defn get-bank-accounts [token]
|
||||
|
||||
(defn get-bank-accounts [token]
|
||||
(->> (:body (client/get (str i/prod-base-url "/company/" i/prod-company-id "/query")
|
||||
{:headers
|
||||
(i/with-auth i/prod-base-headers token)
|
||||
:as :json
|
||||
:query-params {"query" "SELECT * From Account maxresults 1000"}}))
|
||||
:QueryResponse
|
||||
:Account
|
||||
#_(filter
|
||||
#(#{"Bank" "Credit Card"} (:AccountType %))))))
|
||||
|
||||
|
||||
|
||||
(require 'auto-ap.time_reader)
|
||||
|
||||
(let [start #clj-time/date-time "2024-02-01"
|
||||
end #clj-time/date-time "2024-04-01"]
|
||||
(for [[ib ba c] (seq (get-intuit-bank-accounts (dc/db conn) "BCFM"))
|
||||
:let [raw-transactions (i/get-transactions (atime/unparse-local start atime/iso-date)
|
||||
(atime/unparse-local end atime/iso-date)
|
||||
ib)
|
||||
ideal-transactions (intuits->transactions raw-transactions ba c)
|
||||
|
||||
found-transactions (when (seq ideal-transactions)
|
||||
(into {} (dc/q '[:find ?si (count ?t)
|
||||
:in $ [?eid ...]
|
||||
:where
|
||||
[?t :transaction/id ?eid]
|
||||
[?t :transaction/approval-status ?s]
|
||||
[?s :db/ident ?si]]
|
||||
(dc/db conn)
|
||||
(map :transaction/id ideal-transactions))))
|
||||
|
||||
missing-transaction-ids (when (seq ideal-transactions)
|
||||
(->>
|
||||
(dc/q '[:find ?eid
|
||||
:in $ [?eid ...]
|
||||
:where (not [_ :transaction/id ?eid])]
|
||||
(dc/db conn)
|
||||
(map :transaction/id ideal-transactions))
|
||||
(map first)
|
||||
(into #{})))
|
||||
missing-transactions (filter (comp missing-transaction-ids :transaction/id) ideal-transactions)]]
|
||||
{:bank-account/name (pull-attr (dc/db conn) :bank-account/name ba)
|
||||
:external-transaction-count (count raw-transactions)
|
||||
:integreat-transaction-count (reduce + 0 (vals found-transactions))
|
||||
:approved-count (:transaction-approval-status/approved found-transactions 0)
|
||||
:unapproved-count (:transaction-approval-status/unapproved found-transactions 0)
|
||||
:requires-feedback-count (:transaction-approval-status/requires-feedback found-transactions 0)
|
||||
:missing-transactions missing-transactions}))
|
||||
|
||||
|
||||
@@ -16,16 +16,29 @@
|
||||
[manifold.executor :as ex]
|
||||
[clojure.string :as str]))
|
||||
|
||||
(defn get-plaid-accounts [db]
|
||||
(-> (dc/q '[:find ?ba ?c ?external-id ?t
|
||||
:in $
|
||||
:where
|
||||
[?c :client/bank-accounts ?ba]
|
||||
[?ba :bank-account/plaid-account ?pa]
|
||||
[?pa :plaid-account/external-id ?external-id]
|
||||
[?pi :plaid-item/accounts ?pa]
|
||||
[?pi :plaid-item/access-token ?t]]
|
||||
db )))
|
||||
(defn get-plaid-accounts
|
||||
([db]
|
||||
(-> (dc/q '[:find ?ba ?c ?external-id ?t
|
||||
:in $
|
||||
:where
|
||||
[?c :client/bank-accounts ?ba]
|
||||
[?ba :bank-account/plaid-account ?pa]
|
||||
[?pa :plaid-account/external-id ?external-id]
|
||||
[?pi :plaid-item/accounts ?pa]
|
||||
[?pi :plaid-item/access-token ?t]]
|
||||
db)))
|
||||
([db & client-codes]
|
||||
(-> (dc/q '[:find ?ba ?c ?external-id ?t
|
||||
:in $ [?cc ...]
|
||||
:where
|
||||
[?c :client/code ?cc]
|
||||
[?c :client/bank-accounts ?ba]
|
||||
[?ba :bank-account/plaid-account ?pa]
|
||||
[?pa :plaid-account/external-id ?external-id]
|
||||
[?pi :plaid-item/accounts ?pa]
|
||||
[?pi :plaid-item/access-token ?t]]
|
||||
db
|
||||
client-codes))))
|
||||
|
||||
|
||||
(defn plaid->transaction [t plaid-merchant->vendor-id]
|
||||
|
||||
30
src/clj/auto_ap/import/plaid.fiddle
Normal file
30
src/clj/auto_ap/import/plaid.fiddle
Normal file
@@ -0,0 +1,30 @@
|
||||
(ns auto-ap.import.plaid)
|
||||
|
||||
(let [end (atime/local-now)
|
||||
start (time/plus end (time/days -30))
|
||||
[_ _ external-id access-token] (first (get-plaid-accounts (dc/db conn) "BCFM"))]
|
||||
(p/get-balance access-token))
|
||||
|
||||
(def g *1)
|
||||
|
||||
(take 5 (:transactions g))
|
||||
|
||||
;; => ({:account_id "Dpj0d9yKmXsOxBd0eaL4UONyEJYomNIX7kba3",
|
||||
;; :balances
|
||||
;; {:available nil,
|
||||
;; :current 17764.42,
|
||||
;; :iso_currency_code "USD",
|
||||
;; :limit nil,
|
||||
;; :unofficial_currency_code nil},
|
||||
;; :mask "1006",
|
||||
;; :name "NICHOLAS TAPTELIS -91006",
|
||||
;; :official_name "Business Gold Rewards Card",
|
||||
;; :subtype "credit card",
|
||||
;; :type "credit"})
|
||||
|
||||
|
||||
|
||||
|
||||
(user/init-repl)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user