Makes insights work

This commit is contained in:
Bryce
2023-07-13 20:50:14 -07:00
parent 50df971e9c
commit 184f04681c
6 changed files with 57 additions and 24 deletions

View File

@@ -5,7 +5,7 @@
;; You can also press C-u C-j to evaluate the expression and pretty-print its result.
(ns build-ml
(:require [datomic.client.api :as dc]
(:require [datomic.api :as dc]
[clojure.java.io :as io]
[clojure.data.csv :as csv]
[auto-ap.datomic :refer [conn]]))

View File

@@ -41,7 +41,7 @@
(drop 1)
(map (fn [[a n]]
[(Long/parseLong a) (numeric-code->account (Long/parseLong n))])))
(slurp-csv "/home/notid/dev/transaction-training/input/accounts.csv"))
(slurp-csv "/mnt/data/dev2/ml-test/input/accounts.csv"))
vendor-name->vendor (into {} (dc/q '[:find ?vn ?v
:in $
:where [?v :vendor/name ?vn]]
@@ -51,18 +51,18 @@
(drop 1)
(map (fn [[a n]]
[(Long/parseLong a) (vendor-name->vendor (Long/parseLong n))])))
(slurp-csv "/home/notid/dev/transaction-training/input/vendors.csv"))]
inference-vendor->vendor
#_(with-open [reader (io/reader "/home/notid/dev/transaction-training/inference-outcome.csv")]
(slurp-csv "/mnt/data/dev2/ml-test/input/vendors.csv"))]
#_inference-vendor->vendor
(with-open [reader (io/reader "/mnt/data/dev2/ml-test/inference-outcome.csv")]
(->> (csv/read-csv reader)
(into []
(comp
(drop 1)
(map (fn [[_ transaction best-vendor best-account account-confidence]]
{:db/id (Long/parseLong transaction)
:transaction/recommended-account (Long/parseLong best-account)
:transaction/recommended-account (inference-account->account best-account)
:transaction/account-confidence (Double/parseDouble account-confidence)
:transaction/recommended-vendor (Long/parseLong best-vendor)}))))))))
:transaction/recommended-vendor (inference-vendor->vendor best-vendor)}))))))))
(defn apply-inference [inference]
(doseq [p (->> inference (partition-all 100))]

View File

@@ -13,9 +13,6 @@
[datomic.api :as dc]
[iol-ion.query :refer [can-see-client?]]))
<<<<<<< HEAD
(defn get-1099-companies [user session]
=======
(def vendor-read '[:db/id
:vendor/name
{:vendor/legal-entity-1099-type [:db/ident]}
@@ -48,7 +45,6 @@
vendor-id)))
(defn get-1099-companies [user {:keys [client-id] :as args}]
>>>>>>> 425942581295562d2c57843d7b19d9d4de962eda
(let [clients (->> (dc/q '[:find ?c
:in $ ?user
:where [?c :client/code]

View File

@@ -39,6 +39,7 @@
:transaction-insight-table (wrap-client-redirect-unauthenticated (wrap-admin insights/insight-table))
:transaction-insight-rows (wrap-client-redirect-unauthenticated (wrap-admin insights/transaction-rows))
:transaction-insight-approve (wrap-client-redirect-unauthenticated (wrap-admin insights/approve))
:transaction-insight-disapprove (wrap-client-redirect-unauthenticated (wrap-admin insights/disapprove))
:transaction-insight-explain (wrap-client-redirect-unauthenticated (wrap-admin insights/explain))
:admin-ezcater-xls (wrap-client-redirect-unauthenticated (wrap-admin ezcater-xls/page))
:search (wrap-client-redirect-unauthenticated (wrap-secure search/dialog-contents))})

View File

@@ -1,17 +1,18 @@
(ns auto-ap.ssr.transaction.insights
(:require
[auto-ap.client-routes :as client-routes]
[auto-ap.datomic :refer [conn visible-clients]]
[auto-ap.rule-matching :refer [spread-cents]]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.components :as com]
[auto-ap.ssr.svg :as svg]
[auto-ap.ssr.ui :refer [base-page]]
[auto-ap.ssr.utils :refer [html-response]]
[auto-ap.time :as atime]
[bidi.bidi :as bidi]
[clj-time.coerce :as coerce]
[datomic.api :as dc]
[hiccup2.core :as hiccup]
[auto-ap.ssr.components :as com]
[auto-ap.client-routes :as client-routes]
[auto-ap.ssr.svg :as svg]))
[iol-ion.tx :refer [random-tempid]]))
(def pull-expr [:transaction/description-original
:db/id
@@ -93,9 +94,9 @@
:color :primary-light}
svg/thumbs-up)
(com/icon-button {:hx-delete (bidi/path-for ssr-routes/only-routes
:transaction-insight-approve
:transaction-insight-disapprove
:transaction-id (:db/id r))
:hx-swap "closest tr"
:hx-target "closest tr"
:color :danger-light}
svg/thumbs-down)
(com/icon-button {:hx-get (bidi/path-for ssr-routes/only-routes
@@ -106,13 +107,47 @@
svg/question)]))))
(defn approve [{:keys [identity session] {:keys [transaction-id]} :route-params}]
(let [approval-details (dc/pull (dc/db conn) [{:transaction/recommended-account [:account/location :db/id]}
:transaction/recommended-vendor
:transaction/amount
:db/id
{:transaction/client [:client/locations]} ]
(cond-> transaction-id
string? (Long/parseLong)))
cents-to-distribute (int (Math/round (Math/abs (* (:transaction/amount approval-details) 100))))
valid-locations (or
(some-> approval-details :transaction/recommended-account :account/location vector)
(->> approval-details
:transaction/client
:client/locations))
updated-transaction [:upsert-transaction {:db/id (:db/id approval-details)
:transaction/approval-status :transaction-approval-status/approved
:transaction/vendor (:transaction/recommended-vendor approval-details)
:transaction/accounts (->> valid-locations
(map
(fn [cents location]
{:db/id (random-tempid)
:transaction-account/account (-> approval-details :transaction/recommended-account :db/id)
:transaction-account/amount (* 0.01 cents)
:transaction-account/location location})
(spread-cents cents-to-distribute (count valid-locations))))}]]
@(dc/transact conn [updated-transaction])
(html-response (transaction-row
(dc/pull (dc/db conn)
pull-expr
(Long/parseLong transaction-id))
:auto-remove? true
:hide-actions? true
:class "live-added")))
:class "live-added"))))
(defn disapprove [{:keys [identity session] {:keys [transaction-id]} :route-params}]
(let [transaction-id (cond-> transaction-id string? (Long/parseLong))]
@(dc/transact conn [[:upsert-transaction {:db/id transaction-id :transaction/recommended-account nil :transaction/recommended-vendor nil}]])
(html-response (transaction-row
(dc/pull (dc/db conn) pull-expr transaction-id)
:auto-remove? true
:hide-actions? true
:class "live-removed"))))
(defn explain [{:keys [identity session] {:keys [transaction-id]} :route-params}]
(let [r (dc/pull (dc/db conn)

View File

@@ -11,6 +11,7 @@
"transaction" {"/insights" {"" :transaction-insights
"/table" :transaction-insight-table
["/approve/" [#"\d+" :transaction-id]] {:post :transaction-insight-approve}
["/disapprove/" [#"\d+" :transaction-id]] {:delete :transaction-insight-disapprove}
["/rows/" [#"\d+" :after]] {:get :transaction-insight-rows}
["/explain/" [#"\d+" :transaction-id]] {:get :transaction-insight-explain}}}
"company" {"" :company