makes ignoring of blank client names.

This commit is contained in:
Bryce
2023-08-03 10:58:26 -07:00
parent 460e2077b9
commit b345051a83
3 changed files with 84 additions and 41 deletions

View File

@@ -77,7 +77,8 @@
location (parse/best-location-match matching-client location-hint location-hint )
vendor (d/pull (d/db conn) '[:vendor/default-account] :vendor/general-produce)]
(when-not (and matching-client
(not (@missing-client-hints location-hint)))
(not (@missing-client-hints location-hint))
(not (str/blank? location-hint)))
(log/warn ::missing-client
:client-hint location-hint)
(swap! missing-client-hints conj location-hint))

View File

@@ -38,25 +38,43 @@
[(get-in sf ["Type" "Text"])
(get-in sf ["LabelDetection" "Text"])]
))))
(defn find-best [field-descriptors]
{:raw field-descriptors
:best
(->> field-descriptors
(sort-by #(* (-> % :type :confidence)
(-> % :value-detection :confidence)))
last
:value-detection
:text)})
(defn stack-rank [valid-values field-descriptors]
(->> field-descriptors
(filter (comp valid-values :text :type))
(sort-by #(* (-> % :type :confidence)
(-> % :value-detection :confidence)))
(reverse)
(map (comp :text :value-detection))
(reduce
(fn [[result seen?] new]
(if (seen? new)
[result seen?]
[(conj result new) (conj seen? new)]))
[[] #{}])
first))
(defn textract->coalesced [tx]
(defn textract->textract-invoice [tx]
(let [lookup (lookup tx)
total-options (stack-rank #{"TOTAL"} lookup)
account-number-options (stack-rank #{"CUSTOMER_NUMBER"} lookup)
customer-identifier-options (stack-rank #{"RECEIVER_NAME"} lookup)
vendor-name-options (stack-rank #{"VENDOR_NAME"} lookup)
date-options (stack-rank #{"ORDER_DATE"} lookup)
invoice-number-options (stack-rank #{"INVOICE_RECEIPT_ID"} lookup)
]
{:total (find-best (filter (fn [node] (= "TOTAL" (:text (:type node)))) lookup))
:account-number (find-best (filter (fn [node] (= "CUSTOMER_NUMBER" (:text (:type node)))) lookup))
:customer-identifier (find-best (filter (fn [node] (= "RECEIVER_NAME" (:text (:type node)))) lookup))
:vendor-name (find-best (filter (fn [node] (= "VENDOR_NAME" (:text (:type node)))) lookup))
:date (find-best (filter (fn [node] (= "ORDER_DATE" (:text (:type node)))) lookup))
:invoice-number (find-best (filter (fn [node] (= "INVOICE_RECEIPT_ID" (:text (:type node)))) lookup))
#:textract-invoice
{:total (first total-options)
:total-options total-options
:account-number (first account-number-options)
:account-number-options account-number-options
:customer-identifier (first customer-identifier-options)
:customer-identifier-options customer-identifier-options
:vendor-name (first vendor-name-options)
:vendor-name-options (rest vendor-name-options)
:date (first date-options)
:date-options date-options
:invoice-number (first invoice-number-options)
:invoice-number-options invoice-number-options
}))
(defn clean-customer [c]
@@ -134,62 +152,73 @@ invoice_dropzone = new Dropzone(\"#invoice\", {
@(dc/transact conn [{:db/id id :textract-invoice/textract-status (:job-status result)}])))
(dc/pull (dc/db conn) '[*] [:textract-invoice/job-id job-id])))
(defn pill-list* [{:keys [selected options class]}]
(let [options (->> options
(filter (complement #{selected}))
(map (fn [x] [:div.shrink (com/pill {:color :secondary} (com/link {:href "#"} x))]) ))]
(when (seq options)
[:div.col-span-6.col-start-1.text-xs
"Alternates: "
[:div.flex.gap-2.flex-wrap {:class class}
options]])))
(defn textract->invoice-form* [job-id]
(let [coalesced (-> (textract/get-expense-analysis {:job-id job-id})
(textract->coalesced))
candidate-invoice (-> coalesced
(coalesced->invoice))]
(let [coalesced (-> (textract/get-expense-analysis {:job-id job-id})
(textract->textract-invoice))
#_#_candidate-invoice (-> coalesced
(coalesced->invoice))]
[:form
[:div.grid.grid-cols-6.gap-4
[:div.col-span-6
(com/field {:label "Client"}
(com/text-input {:name (path->name [:invoice/client])
:value (pull-attr (dc/db conn) :client/name (:invoice/client candidate-invoice))
:value (:textract-invoice/customer-identifier coalesced)
:placeholder "Client"
:disabled true
:autofocus true}))]
(pill-list* {:selected (:textract-invoice/customer-identifier coalesced)
:options (:textract-invoice/customer-identifier-options coalesced)
:class "flex-col"})
[:div.col-span-6
(com/field {:label "Vendor"}
(com/text-input {:name (path->name [:invoice/vendor])
:value (pull-attr (dc/db conn) :vendor/name (:invoice/vendor candidate-invoice))
:value (:textract-invoice/vendor-name coalesced)
:placeholder "Vendor"
:disabled true
:autofocus true}))]
(pill-list* {:selected (:textract-invoice/vendor-name coalesced)
:options (:textract-invoice/vendor-name-options coalesced)
:class "flex-row"})
[:div.col-span-3
(com/field {:label "Date"}
(com/text-input {:name (path->name [:invoice/date])
:value (atime/unparse-local (:invoice/date candidate-invoice)
atime/normal-date)
:value (:textract-invoice/date coalesced)
:placeholder "Date"
:disabled true
:autofocus true}))]
[:div.col-span-3.col-start-1.text-xs
"Alternates: "
(butlast
(interleave
(map (fn [x] (com/link {:href "#"} (pr-str x))) (set (map (comp :text :value-detection) (:raw (:date coalesced)))))
(repeat ", ")))]
(pill-list* {:selected (:textract-invoice/date coalesced)
:options (:textract-invoice/date-options coalesced)})
[:div.col-span-2.col-start-1
(com/field {:label "Total"}
(com/text-input {:name (path->name [:invoice/total])
:value (:invoice/total candidate-invoice)
:value (:textract-invoice/total coalesced)
:placeholder "Total"
:disabled true
:autofocus true}))]
[:div.col-span-3.col-start-1.text-xs
"Alternates: "
(butlast
(interleave
(map (fn [x] (com/link {:href "#"} (pr-str x))) (set (map (comp :text :value-detection) (:raw (:total coalesced)))))
(repeat ", ")))]
(pill-list* {:selected (:textract-invoice/total coalesced)
:options (:textract-invoice/total-options coalesced)})
[:div.col-span-2.col-start-1
(com/field {:label "Invoice Number"}
(com/text-input {:name (path->name [:invoice/invoice-number])
:value (:invoice/invoice-number candidate-invoice)
:value (:textract-invoice/invoice-number coalesced)
:placeholder "Invoice Number"
:disabled true
:autofocus true}))]]]))
:autofocus true}))]
(pill-list* {:selected (:textract-invoice/invoice-number coalesced)
:options (:textract-invoice/invoice-number-options coalesced)})]]))
(defn job-progress* [job-id]
(when (pull-id (dc/db conn) [:textract-invoice/job-id job-id])
@@ -212,7 +241,7 @@ invoice_dropzone = new Dropzone(\"#invoice\", {
[:div.flex.flex-row.space-x-4
[:div {:style {:width "805"}}
(com/card {}
[:iframe.p-4 {:src (:textract-invoice/pdf-url textract-invoice) :width 791 :height 1024}])]
[:iframe.p-4 {:src (:textract-invoice/pdf-url textract-invoice) :width 791 :height 700}])]
[:div {:class "basis-1/4"}
(com/card {}
[:div.p-4