From 486c42891739851e75936ea04b1c2d90322558f9 Mon Sep 17 00:00:00 2001 From: Bryce Date: Sat, 19 Aug 2023 13:52:44 -0700 Subject: [PATCH] Pregenerates recommendatios --- resources/public/output.css | 83 +- resources/schema.edn | 1276 ++++++----------- scratch-sessions/investigate.repl | 93 ++ .../jobs/insight_outcome_recommendation.clj | 97 ++ src/clj/auto_ap/server.clj | 93 +- src/clj/auto_ap/ssr/components.clj | 1 + src/clj/auto_ap/ssr/components/tags.clj | 3 + src/clj/auto_ap/ssr/core.clj | 2 +- src/clj/auto_ap/ssr/transaction/insights.clj | 192 +-- src/cljc/auto_ap/ssr_routes.cljc | 9 +- terraform/deploy.tf | 13 + 11 files changed, 820 insertions(+), 1042 deletions(-) create mode 100644 scratch-sessions/investigate.repl create mode 100644 src/clj/auto_ap/jobs/insight_outcome_recommendation.clj diff --git a/resources/public/output.css b/resources/public/output.css index 18cd16cb..9a28ad90 100644 --- a/resources/public/output.css +++ b/resources/public/output.css @@ -1196,6 +1196,10 @@ input:checked + .toggle-bg { margin-left: 0.75rem; } +.ml-auto { + margin-left: auto; +} + .mr-10 { margin-right: 2.5rem; } @@ -1236,10 +1240,6 @@ input:checked + .toggle-bg { margin-top: 1.25rem; } -.ml-auto { - margin-left: auto; -} - .block { display: block; } @@ -1376,6 +1376,10 @@ input:checked + .toggle-bg { max-width: 32rem; } +.max-w-md { + max-width: 28rem; +} + .max-w-screen-2xl { max-width: 1536px; } @@ -1384,18 +1388,6 @@ input:checked + .toggle-bg { max-width: 1024px; } -.max-w-sm { - max-width: 24rem; -} - -.max-w-md { - max-width: 28rem; -} - -.max-w-xl { - max-width: 36rem; -} - .flex-1 { flex: 1 1 0%; } @@ -1412,18 +1404,10 @@ input:checked + .toggle-bg { flex-shrink: 1; } -.basis-1\/2 { - flex-basis: 50%; -} - .basis-1\/4 { flex-basis: 25%; } -.basis-1\/3 { - flex-basis: 33.333333%; -} - .-translate-x-full { --tw-translate-x: -100%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); @@ -1524,10 +1508,6 @@ input:checked + .toggle-bg { flex-wrap: wrap; } -.content-center { - align-content: center; -} - .items-start { align-items: flex-start; } @@ -1576,11 +1556,6 @@ input:checked + .toggle-bg { gap: 2rem; } -.gap-x-2 { - -moz-column-gap: 0.5rem; - column-gap: 0.5rem; -} - .gap-x-4 { -moz-column-gap: 1rem; column-gap: 1rem; @@ -1645,10 +1620,6 @@ input:checked + .toggle-bg { border-color: rgb(243 244 246 / var(--tw-divide-opacity)); } -.justify-self-end { - justify-self: end; -} - .overflow-auto { overflow: auto; } @@ -1718,10 +1689,6 @@ input:checked + .toggle-bg { border-width: 2px; } -.border-4 { - border-width: 4px; -} - .border-b { border-bottom-width: 1px; } @@ -1793,9 +1760,9 @@ input:checked + .toggle-bg { background-color: rgb(153 215 247 / var(--tw-bg-opacity)); } -.bg-blue-300 { +.bg-blue-50 { --tw-bg-opacity: 1; - background-color: rgb(102 196 242 / var(--tw-bg-opacity)); + background-color: rgb(230 245 253 / var(--tw-bg-opacity)); } .bg-blue-500 { @@ -1873,6 +1840,11 @@ input:checked + .toggle-bg { background-color: rgb(255 230 230 / var(--tw-bg-opacity)); } +.bg-red-500 { + --tw-bg-opacity: 1; + background-color: rgb(255 3 3 / var(--tw-bg-opacity)); +} + .bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity)); @@ -1887,11 +1859,6 @@ input:checked + .toggle-bg { background-color: rgb(253 246 178 / var(--tw-bg-opacity)); } -.bg-blue-50 { - --tw-bg-opacity: 1; - background-color: rgb(230 245 253 / var(--tw-bg-opacity)); -} - .bg-opacity-50 { --tw-bg-opacity: 0.5; } @@ -2106,6 +2073,11 @@ input:checked + .toggle-bg { line-height: 1.25; } +.text-blue-400 { + --tw-text-opacity: 1; + color: rgb(51 176 238 / var(--tw-text-opacity)); +} + .text-blue-600 { --tw-text-opacity: 1; color: rgb(0 125 187 / var(--tw-text-opacity)); @@ -2176,11 +2148,6 @@ input:checked + .toggle-bg { color: rgb(114 59 19 / var(--tw-text-opacity)); } -.text-blue-400 { - --tw-text-opacity: 1; - color: rgb(51 176 238 / var(--tw-text-opacity)); -} - .underline { text-decoration-line: underline; } @@ -2707,6 +2674,11 @@ input:checked + .toggle-bg { color: rgb(102 196 242 / var(--tw-text-opacity)); } +:is(.dark .dark\:text-blue-400) { + --tw-text-opacity: 1; + color: rgb(51 176 238 / var(--tw-text-opacity)); +} + :is(.dark .dark\:text-blue-500) { --tw-text-opacity: 1; color: rgb(0 156 234 / var(--tw-text-opacity)); @@ -2767,11 +2739,6 @@ input:checked + .toggle-bg { color: rgb(250 202 21 / var(--tw-text-opacity)); } -:is(.dark .dark\:text-blue-400) { - --tw-text-opacity: 1; - color: rgb(51 176 238 / var(--tw-text-opacity)); -} - :is(.dark .dark\:placeholder-gray-400)::-moz-placeholder { --tw-placeholder-opacity: 1; color: rgb(156 163 175 / var(--tw-placeholder-opacity)); diff --git a/resources/schema.edn b/resources/schema.edn index 89664350..90ff4027 100644 --- a/resources/schema.edn +++ b/resources/schema.edn @@ -1,1631 +1,1299 @@ [{:db/doc "Data function that increments value of attribute a by amount.", - :db/ident :pay, - } + :db/ident :pay} {:db/doc "Data function that increments value of attribute a by amount.", - :db/ident :inc, - } + :db/ident :inc} {:db/doc "Deletes the general ledger entries for an entity", - :db/ident :replace-general-ledger, - } + :db/ident :replace-general-ledger} {:db/doc "Adds an invoice if it's not found", - :db/ident :propose-invoice, - } + :db/ident :propose-invoice} {:db/doc "Resets a relationship to the values specified ", - :db/ident :reset, - } - + :db/ident :reset} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The code for the expense account (e.g., A1123)", - :db/ident :account/code, - } + :db/ident :account/code} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The numeric-only for the expense account (e.g., 5150)", - :db/ident :account/numeric-code, - } + :db/ident :account/numeric-code} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The name of the code (e.g., \"Telephone - HQ\")", - :db/ident :account/name, - } + :db/ident :account/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A forced location for this code, e.g., HQ.", - :db/ident :account/location, - } + :db/ident :account/location} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The set of accounts this entry belongs to. Allows customization.", - :db/ident :account/account-set, - } + :db/ident :account/account-set} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The type of account, (e.g., :account-type/expense :account-type/liability)", - :db/ident :account/type, - } + :db/ident :account/type} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc ":global, :optional :customized", - :db/ident :account/applicability, - } + :db/ident :account/applicability} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Customizations per customer", - :db/ident :account/client-overrides, - } - {:db/ident :account/accounts-payable, - } + :db/ident :account/client-overrides} + {:db/ident :account/accounts-payable} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "a name search for accounts", - :db/ident :account/search-terms, - } + :db/ident :account/search-terms} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Whether this account can be used for invoices", - :db/ident :account/invoice-allowance, - } + :db/ident :account/invoice-allowance} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Whether this account can be used for vendors", - :db/ident :account/vendor-allowance, - } + :db/ident :account/vendor-allowance} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Whether this account can be used generally", - :db/ident :account/default-allowance, - } - {:db/ident :account/ccp, } - {:db/ident :account/receipts-split, - } + :db/ident :account/default-allowance} + {:db/ident :account/ccp} + {:db/ident :account/receipts-split} {:db/doc "This account is optional", - :db/ident :account-applicability/optional, - } + :db/ident :account-applicability/optional} {:db/doc "The account applies to all cutsomers", - :db/ident :account-applicability/global, - } + :db/ident :account-applicability/global} {:db/doc "This account is customized per-customer", - :db/ident :account-applicability/customized, - } + :db/ident :account-applicability/customized} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client for the override", - :db/ident :account-client-override/client, - } + :db/ident :account-client-override/client} {:db/valueType #:db{:ident :db.type/boolean}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Does this apply?", - :db/ident :account-client-override/enabled, - } + :db/ident :account-client-override/enabled} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "client override", - :db/ident :account-client-override/name, - } + :db/ident :account-client-override/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "a name search for accounts", - :db/ident :account-client-override/search-terms, - } + :db/ident :account-client-override/search-terms} - {:db/ident :account-type/dividend, - } - {:db/ident :account-type/asset, } - {:db/ident :account-type/equity, } - {:db/ident :account-type/expense, - } - {:db/ident :account-type/liability, - } - {:db/ident :account-type/revenue, - } + {:db/ident :account-type/dividend} + {:db/ident :account-type/asset} + {:db/ident :account-type/equity} + {:db/ident :account-type/expense} + {:db/ident :account-type/liability} + {:db/ident :account-type/revenue} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "123 main st", - :db/ident :address/street1, - } + :db/ident :address/street1} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Apt A", - :db/ident :address/street2, - } + :db/ident :address/street2} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Campbell", - :db/ident :address/city, - } + :db/ident :address/city} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "CA", - :db/ident :address/state, - } + :db/ident :address/state} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "95014", - :db/ident :address/zip, - } + :db/ident :address/zip} {:db/doc "Only admins can use it", - :db/ident :allowance/admin-only, - } + :db/ident :allowance/admin-only} {:db/doc "Allowed to be used", - :db/ident :allowance/allowed, - } + :db/ident :allowance/allowed} {:db/doc "Warn on usage", - :db/ident :allowance/warn, - } + :db/ident :allowance/warn} {:db/doc "Denied usage", - :db/ident :allowance/denied, - } + :db/ident :allowance/denied} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which user commited this transaction", - :db/ident :audit/user, - } + :db/ident :audit/user} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which batch was this part of", - :db/ident :audit/batch, - } + :db/ident :audit/batch} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Identifier for bank account", - :db/ident :bank-account/external-id, - } + :db/ident :bank-account/external-id} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "matching the orignal tuple of [company,bank]", - :db/ident :bank-account/original-id, - } + :db/ident :bank-account/original-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A1127 Chase Card", - :db/ident :bank-account/name, - } + :db/ident :bank-account/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "e.g. Bank of America", - :db/ident :bank-account/bank-name, - } + :db/ident :bank-account/bank-name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The code to list under the bank's name", - :db/ident :bank-account/bank-code, - } + :db/ident :bank-account/bank-code} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The bank's routing number", - :db/ident :bank-account/routing, - } + :db/ident :bank-account/routing} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The account number", - :db/ident :bank-account/number, - } + :db/ident :bank-account/number} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent false, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The type of account number, either :bank-account-type/check or :bank-account-type/cash", - :db/ident :bank-account/type, - } + :db/ident :bank-account/type} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "yodlee's account identifier", - :db/ident :bank-account/yodlee-account-id, - } + :db/ident :bank-account/yodlee-account-id} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Current check number", - :db/ident :bank-account/check-number, - } + :db/ident :bank-account/check-number} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A bank account's computer-friendly name", - :db/ident :bank-account/code, - } + :db/ident :bank-account/code} {:db/valueType #:db{:ident :db.type/boolean}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Whether this bank account is visible", - :db/ident :bank-account/visible, - } + :db/ident :bank-account/visible} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The sort order of the bank account", - :db/ident :bank-account/sort-order, - } + :db/ident :bank-account/sort-order} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Which bank accounts this bank account is valid for", - :db/ident :bank-account/locations, - } + :db/ident :bank-account/locations} {:db/valueType #:db{:ident :db.type/boolean}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Whether to include this bank account in balance sheet, etc.", - :db/ident :bank-account/include-in-reports, - } + :db/ident :bank-account/include-in-reports} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Setting this date prevents older transactions from being imported", - :db/ident :bank-account/start-date, - } + :db/ident :bank-account/start-date} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Yodlee account for the bank account", - :db/ident :bank-account/yodlee-account, - } + :db/ident :bank-account/yodlee-account} {:db/valueType #:db{:ident :db.type/double}, :db/noHistory true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A precomputed balance for the account", - :db/ident :bank-account/current-balance, - } + :db/ident :bank-account/current-balance} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The numeric code for the balance sheet", - :db/ident :bank-account/numeric-code, - } + :db/ident :bank-account/numeric-code} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "intuit external bank account", - :db/ident :bank-account/intuit-bank-account, - } + :db/ident :bank-account/intuit-bank-account} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Yodlee account for the bank account", - :db/ident :bank-account/plaid-account, - } + :db/ident :bank-account/plaid-account} {:db/valueType #:db{:ident :db.type/boolean}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Yodlee amex works weird", - :db/ident :bank-account/use-date-instead-of-post-date?, - } + :db/ident :bank-account/use-date-instead-of-post-date?} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A status for integration for the bank account", - :db/ident :bank-account/integration-status, - } + :db/ident :bank-account/integration-status} - {:db/ident :bank-account-type/check, - } - {:db/ident :bank-account-type/cash, - } - {:db/ident :bank-account-type/credit, - } + {:db/ident :bank-account-type/check} + {:db/ident :bank-account-type/cash} + {:db/ident :bank-account-type/credit} {:db/doc "square processor", - :db/ident :ccp-processor/square, - } + :db/ident :ccp-processor/square} {:db/doc "ezcater processor", - :db/ident :ccp-processor/ezcater, - } + :db/ident :ccp-processor/ezcater} {:db/doc "koala processor", - :db/ident :ccp-processor/koala, - } + :db/ident :ccp-processor/koala} {:db/doc "Doordash identifier", - :db/ident :ccp-processor/doordash, - } + :db/ident :ccp-processor/doordash} {:db/doc "Grubhub identifier", - :db/ident :ccp-processor/grubhub, - } + :db/ident :ccp-processor/grubhub} {:db/doc "Uber eats processor", - :db/ident :ccp-processor/uber-eats, - } + :db/ident :ccp-processor/uber-eats} {:db/doc "No specific ccp processor", - :db/ident :ccp-processor/na, - } + :db/ident :ccp-processor/na} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The type of the charge", - :db/ident :charge/type-name, - } + :db/ident :charge/type-name} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total amount on the charge", - :db/ident :charge/total, - } + :db/ident :charge/total} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The tax on the charge", - :db/ident :charge/tax, - } + :db/ident :charge/tax} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The tip on the charge", - :db/ident :charge/tip, - } + :db/ident :charge/tip} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which food app processed this order", - :db/ident :charge/processor, - } + :db/ident :charge/processor} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client for the sale", - :db/ident :charge/external-id, - } + :db/ident :charge/external-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A custom note", - :db/ident :charge/note, - } + :db/ident :charge/note} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The date for the payment", - :db/ident :charge/date, - } + :db/ident :charge/date} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client for the sale", - :db/ident :charge/client, - } + :db/ident :charge/client} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The location of the sale", - :db/ident :charge/location, - } + :db/ident :charge/location} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A link someone can go to to look at the charge", - :db/ident :charge/reference-link, - } + :db/ident :charge/reference-link} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Original id from the old system", - :db/ident :client/original-id, - } + :db/ident :client/original-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A client's human-friendly name", - :db/ident :client/name, - } + :db/ident :client/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "hello@example.com", - :db/ident :client/email, - } + :db/ident :client/email} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A client's computer-friendly name", - :db/ident :client/code, - } + :db/ident :client/code} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A check signature image", - :db/ident :client/signature-file, - } + :db/ident :client/signature-file} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "A client's locations", - :db/ident :client/locations, - } + :db/ident :client/locations} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Address of the client", - :db/ident :client/address, - } + :db/ident :client/address} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Bank accounts for the client", - :db/ident :client/bank-accounts, - } + :db/ident :client/bank-accounts} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "The strings that match the client", - :db/ident :client/matches, - } + :db/ident :client/matches} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "The mapping from string to location", - :db/ident :client/location-matches, - } + :db/ident :client/location-matches} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The default location if one can't be found", - :db/ident :client/default-location, - } + :db/ident :client/default-location} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How much money gets debited each week", - :db/ident :client/weekly-debits, - } + :db/ident :client/weekly-debits} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How much money gets credited each week", - :db/ident :client/weekly-credits, - } + :db/ident :client/weekly-credits} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Regular, planned transactions", - :db/ident :client/forecasted-transactions, - } + :db/ident :client/forecasted-transactions} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How much money gets debited each week", - :db/ident :client/week-a-debits, - } + :db/ident :client/week-a-debits} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How much money gets credited each week", - :db/ident :client/week-a-credits, - } + :db/ident :client/week-a-credits} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How much money gets debited each week", - :db/ident :client/week-b-debits, - } + :db/ident :client/week-b-debits} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How much money gets credited each week", - :db/ident :client/week-b-credits, - } + :db/ident :client/week-b-credits} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "No new data before this date can be added/changed", - :db/ident :client/locked-until, - } + :db/ident :client/locked-until} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "collection of email contacts", - :db/ident :client/emails, - } + :db/ident :client/emails} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A token that can be used to authenticate with square", - :db/ident :client/square-auth-token, - } + :db/ident :client/square-auth-token} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Locations in square", - :db/ident :client/square-locations, - } + :db/ident :client/square-locations} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Square's integration status", - :db/ident :client/square-integration-status, - } + :db/ident :client/square-integration-status} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, - :db/ident :client/ezcater-locations, - } + :db/ident :client/ezcater-locations} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/many}, - :db/ident :client/feature-flags, - } + :db/ident :client/feature-flags} {:db/doc "Ensures each norm tx is executed exactly once", - :db/ident :conformity/ensure-norm-tx, - } + :db/ident :conformity/ensure-norm-tx} {:db/valueType #:db{:ident :db.type/keyword}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Name of this transaction's norm", - :db/ident :conformity/conformed-norms, - } + :db/ident :conformity/conformed-norms} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Index of this transaction within its norm", - :db/ident :conformity/conformed-norms-index, - } + :db/ident :conformity/conformed-norms-index} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "John Smith", - :db/ident :contact/name, - } + :db/ident :contact/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "4255773578", - :db/ident :contact/phone, - } + :db/ident :contact/phone} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "hello@example.com", - :db/ident :contact/email, - } + :db/ident :contact/email} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Email contact's email", - :db/ident :email-contact/email, - } + :db/ident :email-contact/email} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Manager, Owner, etc", - :db/ident :email-contact/description, - } + :db/ident :email-contact/description} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The external id for the deposit", - :db/ident :expected-deposit/external-id, - } + :db/ident :expected-deposit/external-id} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client for the deposit", - :db/ident :expected-deposit/client, - } + :db/ident :expected-deposit/client} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The location of the sale", - :db/ident :expected-deposit/location, - } + :db/ident :expected-deposit/location} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The date the deposit was initiated", - :db/ident :expected-deposit/date, - } + :db/ident :expected-deposit/date} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total amount on the deposit", - :db/ident :expected-deposit/total, - } + :db/ident :expected-deposit/total} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total fee on the deposit", - :db/ident :expected-deposit/fee, - } + :db/ident :expected-deposit/fee} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The date of sales the deposit was for", - :db/ident :expected-deposit/sales-date, - } + :db/ident :expected-deposit/sales-date} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Whether the deposit has been cleared", - :db/ident :expected-deposit/status, - } + :db/ident :expected-deposit/status} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which vendor is this deposit for? CCP Square?", - :db/ident :expected-deposit/vendor, - } + :db/ident :expected-deposit/vendor} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "charges for the deposit", - :db/ident :expected-deposit/charges, - } + :db/ident :expected-deposit/charges} - {:db/ident :expected-deposit-status/pending, - } - {:db/ident :expected-deposit-status/cleared, - } + {:db/ident :expected-deposit-status/pending} + {:db/ident :expected-deposit-status/cleared} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Id of the caterer", - :db/ident :ezcater-caterer/uuid, - } + :db/ident :ezcater-caterer/uuid} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Name of the caterer", - :db/ident :ezcater-caterer/name, - } + :db/ident :ezcater-caterer/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "a name search for caterer", - :db/ident :ezcater-caterer/search-terms, - } + :db/ident :ezcater-caterer/search-terms} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The subscriber uuid", - :db/ident :ezcater-integration/subscriber-uuid, - } + :db/ident :ezcater-integration/subscriber-uuid} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The API key that can be used for requests", - :db/ident :ezcater-integration/api-key, - } + :db/ident :ezcater-integration/api-key} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Used to validate events", - :db/ident :ezcater-integration/subscriber-secret, - } + :db/ident :ezcater-integration/subscriber-secret} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The status for this integration", - :db/ident :ezcater-integration/integration-status, - } + :db/ident :ezcater-integration/integration-status} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "All caterers for this integration", - :db/ident :ezcater-integration/caterers, - } + :db/ident :ezcater-integration/caterers} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, - :db/ident :ezcater-location/location, - } + :db/ident :ezcater-location/location} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, - :db/ident :ezcater-location/caterer, - } + :db/ident :ezcater-location/caterer} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Amount of a forcested transaction", - :db/ident :forecasted-transaction/amount, - } + :db/ident :forecasted-transaction/amount} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which day the transaction occurs", - :db/ident :forecasted-transaction/day-of-month, - } + :db/ident :forecasted-transaction/day-of-month} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "An identifier for this forcasted transaction, e.g., 'RENT'", - :db/ident :forecasted-transaction/identifier, - } + :db/ident :forecasted-transaction/identifier} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "An identifier for the import batch", - :db/ident :import-batch/external-id, - } + :db/ident :import-batch/external-id} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Links to everything that was imported", - :db/ident :import-batch/entry, - } + :db/ident :import-batch/entry} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How many entries were imported", - :db/ident :import-batch/imported, - } + :db/ident :import-batch/imported} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How many entries were already present", - :db/ident :import-batch/extant, - } + :db/ident :import-batch/extant} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How many entries were explicitly ignored", - :db/ident :import-batch/suppressed, - } + :db/ident :import-batch/suppressed} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The date the import occurred", - :db/ident :import-batch/date, - } + :db/ident :import-batch/date} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "What system triggered the import", - :db/ident :import-batch/source, - } + :db/ident :import-batch/source} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "What system triggered the import", - :db/ident :import-batch/status, - } + :db/ident :import-batch/status} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Who triggred this import", - :db/ident :import-batch/user-name, - } + :db/ident :import-batch/user-name} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How many entries were an error ", - :db/ident :import-batch/error, - } + :db/ident :import-batch/error} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How many entries were before a start date ", - :db/ident :import-batch/not-ready, - } + :db/ident :import-batch/not-ready} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "error message for a failed job", - :db/ident :import-batch/error-message, - } + :db/ident :import-batch/error-message} - {:db/ident :import-source/plaid, } - {:db/ident :import-source/yodlee2, - } - {:db/ident :import-source/yodlee, - } - {:db/ident :import-source/manual, - } - {:db/ident :import-source/intuit, - } + {:db/ident :import-source/plaid} + {:db/ident :import-source/yodlee2} + {:db/ident :import-source/yodlee} + {:db/ident :import-source/manual} + {:db/ident :import-source/intuit} - {:db/ident :import-status/pending, - } - {:db/ident :import-status/imported, - } - {:db/ident :import-status/completed, - } - {:db/ident :import-status/started, - } + {:db/ident :import-status/pending} + {:db/ident :import-status/imported} + {:db/ident :import-status/completed} + {:db/ident :import-status/started} - {:db/ident :integration-state/failed, - } - {:db/ident :integration-state/success, - } - {:db/ident :integration-state/unauthorized, - } + {:db/ident :integration-state/failed} + {:db/ident :integration-state/success} + {:db/ident :integration-state/unauthorized} {:db/valueType #:db{:ident :db.type/instant}, :db/noHistory true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "When was this integration updated", - :db/ident :integration-status/last-updated, - } + :db/ident :integration-status/last-updated} {:db/valueType #:db{:ident :db.type/instant}, :db/noHistory true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "When was this integration attempted.", - :db/ident :integration-status/last-attempt, - } + :db/ident :integration-status/last-attempt} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A status for the integration", - :db/ident :integration-status/state, - } + :db/ident :integration-status/state} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A message from the last attempt", - :db/ident :integration-status/message, - } + :db/ident :integration-status/message} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Id of the intui bank", - :db/ident :intuit-bank-account/external-id, - } + :db/ident :intuit-bank-account/external-id} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Name of intuit bank", - :db/ident :intuit-bank-account/name, - } + :db/ident :intuit-bank-account/name} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Original id in old system", - :db/ident :invoice/original-id, - } + :db/ident :invoice/original-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A vendor-specified number for the invoice", - :db/ident :invoice/invoice-number, - } + :db/ident :invoice/invoice-number} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "An identifier found to suggest the customer", - :db/ident :invoice/customer-identifier, - } + :db/ident :invoice/customer-identifier} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Status of payment/import of the invoice [:paid, :unpaid]", - :db/ident :invoice/status, - } + :db/ident :invoice/status} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which client this invoice is for", - :db/ident :invoice/client, - } + :db/ident :invoice/client} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which vendor this invoice is for", - :db/ident :invoice/vendor, - } + :db/ident :invoice/vendor} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Date for this invoice", - :db/ident :invoice/date, - } + :db/ident :invoice/date} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Total $ for this invoice", - :db/ident :invoice/total, - } + :db/ident :invoice/total} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The unpaid balance of this invoice", - :db/ident :invoice/outstanding-balance, - } + :db/ident :invoice/outstanding-balance} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The default location that expense-accounts will be created with for this invoice", - :db/ident :invoice/default-location, - } + :db/ident :invoice/default-location} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The default expense account for this invoice", - :db/ident :invoice/default-expense-account, - } + :db/ident :invoice/default-expense-account} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "The expense account categories for this invoice", - :db/ident :invoice/expense-accounts, - } + :db/ident :invoice/expense-accounts} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The status of importing the transaction", - :db/ident :invoice/import-status, - } + :db/ident :invoice/import-status} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "An identifier found in an uploaded invoice", - :db/ident :invoice/client-identifier, - } + :db/ident :invoice/client-identifier} {:db/valueType #:db{:ident :db.type/boolean}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Whether to exclude from the ledger", - :db/ident :invoice/exclude-from-ledger, - } + :db/ident :invoice/exclude-from-ledger} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "When you gotta pay", - :db/ident :invoice/due, - } + :db/ident :invoice/due} {:db/valueType #:db{:ident :db.type/boolean}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Whether this invoice should be marked as paid when it's due", - :db/ident :invoice/automatically-paid-when-due, - } + :db/ident :invoice/automatically-paid-when-due} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "When an invoice gets marked as paid", - :db/ident :invoice/scheduled-payment, - } + :db/ident :invoice/scheduled-payment} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "An s3 location for the invoice", - :db/ident :invoice/source-url, - } + :db/ident :invoice/source-url} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The location to code the invoice as", - :db/ident :invoice/location, - } + :db/ident :invoice/location} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How close an invoice matches its import", - :db/ident :invoice/similarity, - } + :db/ident :invoice/similarity} {:db/valueType #:db{:ident :db.type/boolean}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Can only admins see this invoice?", - :db/ident :invoice/source-url-admin-only, - } + :db/ident :invoice/source-url-admin-only} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Original id in old system", - :db/ident :invoice-expense-account/original-id, - } + :db/ident :invoice-expense-account/original-id} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The code for the expense account", - :db/ident :invoice-expense-account/expense-account-id, - } + :db/ident :invoice-expense-account/expense-account-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Location for this expense account", - :db/ident :invoice-expense-account/location, - } + :db/ident :invoice-expense-account/location} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The amount that this contributes to", - :db/ident :invoice-expense-account/amount, - } + :db/ident :invoice-expense-account/amount} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The account entity that this expense is for", - :db/ident :invoice-expense-account/account, - } + :db/ident :invoice-expense-account/account} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The id in the old system", - :db/ident :invoice-payment/original-id, - } + :db/ident :invoice-payment/original-id} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The amount that was paid to this invoice", - :db/ident :invoice-payment/amount, - } + :db/ident :invoice-payment/amount} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The invoice for this payment", - :db/ident :invoice-payment/invoice, - } + :db/ident :invoice-payment/invoice} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total payment for this payment", - :db/ident :invoice-payment/payment, - } + :db/ident :invoice-payment/payment} - {:db/ident :invoice-status/paid, } - {:db/ident :invoice-status/unpaid, - } - {:db/ident :invoice-status/voided, - } + {:db/ident :invoice-status/paid} + {:db/ident :invoice-status/unpaid} + {:db/ident :invoice-status/voided} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The type of entity that created this entry", - :db/ident :journal-entry/source, - } + :db/ident :journal-entry/source} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client for the ledger", - :db/ident :journal-entry/client, - } + :db/ident :journal-entry/client} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The time for this entry", - :db/ident :journal-entry/date, - } + :db/ident :journal-entry/date} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The thing that created this entry", - :db/ident :journal-entry/original-entity, - } + :db/ident :journal-entry/original-entity} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The vendor for the ledger entry", - :db/ident :journal-entry/vendor, - } + :db/ident :journal-entry/vendor} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The amount for the entry", - :db/ident :journal-entry/amount, - } + :db/ident :journal-entry/amount} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Each of the line items in the general ledger", - :db/ident :journal-entry/line-items, - } + :db/ident :journal-entry/line-items} {:db/valueType #:db{:ident :db.type/boolean}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Has this cleared?", - :db/ident :journal-entry/cleared, - } + :db/ident :journal-entry/cleared} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Cleared against", - :db/ident :journal-entry/cleared-against, - } + :db/ident :journal-entry/cleared-against} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "notes about this journal-entry", - :db/ident :journal-entry/note, - } + :db/ident :journal-entry/note} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "For externally imported id", - :db/ident :journal-entry/external-id, - } + :db/ident :journal-entry/external-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The description if there is no vendor", - :db/ident :journal-entry/alternate-description, - } + :db/ident :journal-entry/alternate-description} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The expense account being changed", - :db/ident :journal-entry-line/expense-account, - } + :db/ident :journal-entry-line/expense-account} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The other type of account being changed", - :db/ident :journal-entry-line/account, - } + :db/ident :journal-entry-line/account} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The amount to debit", - :db/ident :journal-entry-line/debit, - } + :db/ident :journal-entry-line/debit} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The amount to credit", - :db/ident :journal-entry-line/credit, - } + :db/ident :journal-entry-line/credit} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Location of the entry", - :db/ident :journal-entry-line/location, - } + :db/ident :journal-entry-line/location} - {:db/ident :legal-entity-1099-type/none, - } - {:db/ident :legal-entity-1099-type/landlord, - } - {:db/ident :legal-entity-1099-type/misc, - } + {:db/ident :legal-entity-1099-type/none} + {:db/ident :legal-entity-1099-type/landlord} + {:db/ident :legal-entity-1099-type/misc} - {:db/ident :legal-entity-tin-type/ssn, - } - {:db/ident :legal-entity-tin-type/ein, - } + {:db/ident :legal-entity-tin-type/ssn} + {:db/ident :legal-entity-tin-type/ein} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "The strings that match the location", - :db/ident :location-match/matches, - } + :db/ident :location-match/matches} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The location of the location match", - :db/ident :location-match/location, - } + :db/ident :location-match/location} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The type of the item", - :db/ident :order-line-item/item-name, - } + :db/ident :order-line-item/item-name} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total cost on the item", - :db/ident :order-line-item/total, - } + :db/ident :order-line-item/total} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The tax on the item", - :db/ident :order-line-item/tax, - } + :db/ident :order-line-item/tax} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The tip on the item", - :db/ident :order-line-item/tip, - } + :db/ident :order-line-item/tip} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The item category", - :db/ident :order-line-item/category, - } + :db/ident :order-line-item/category} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total cost on the item", - :db/ident :order-line-item/discount, - } + :db/ident :order-line-item/discount} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "An Id that links to square etc", - :db/ident :order-line-item/external-id, - } + :db/ident :order-line-item/external-id} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The id in the old system", - :db/ident :payment/original-id, - } + :db/ident :payment/original-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The uuid that matches the key for this check", - :db/ident :payment/s3-uuid, - } + :db/ident :payment/s3-uuid} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The s3 key with pdf of this check", - :db/ident :payment/s3-key, - } + :db/ident :payment/s3-key} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The s3 url with pdf of this check", - :db/ident :payment/s3-url, - } + :db/ident :payment/s3-url} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The check number", - :db/ident :payment/check-number, - } + :db/ident :payment/check-number} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The check's memo line", - :db/ident :payment/memo, - } + :db/ident :payment/memo} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The date the payment was made", - :db/ident :payment/date, - } + :db/ident :payment/date} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The amount that was paid to the vendor", - :db/ident :payment/amount, - } + :db/ident :payment/amount} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Who the paid was made out to", - :db/ident :payment/paid-to, - } + :db/ident :payment/paid-to} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The status of the payment [:pending :cleared :voided]", - :db/ident :payment/status, - } + :db/ident :payment/status} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The type of the payment [:cash :check :debit]", - :db/ident :payment/type, - } + :db/ident :payment/type} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "raw data used to generate check pdf", - :db/ident :payment/pdf-data, - } + :db/ident :payment/pdf-data} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The vendor for which this payment was for", - :db/ident :payment/vendor, - } + :db/ident :payment/vendor} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client for which this payment", - :db/ident :payment/client, - } + :db/ident :payment/client} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The bank account that was used to pay", - :db/ident :payment/bank-account, - } + :db/ident :payment/bank-account} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Any invoices this payment is related to", - :db/ident :payment/invoices, - } + :db/ident :payment/invoices} - {:db/ident :payment-status/pending, - } - {:db/ident :payment-status/voided, - } - {:db/ident :payment-status/cleared, - } + {:db/ident :payment-status/pending} + {:db/ident :payment-status/voided} + {:db/ident :payment-status/cleared} - {:db/ident :payment-type/cash, } - {:db/ident :payment-type/check, } - {:db/ident :payment-type/debit, } + {:db/ident :payment-type/cash} + {:db/ident :payment-type/check} + {:db/ident :payment-type/debit} {:db/doc "Used for paying invoices from statement credits.", - :db/ident :payment-type/balance-credit, - } + :db/ident :payment-type/balance-credit} {:db/doc "Credit for negative invoices", - :db/ident :payment-type/credit, - } + :db/ident :payment-type/credit} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "plaid account id", - :db/ident :plaid-account/external-id, - } + :db/ident :plaid-account/external-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "account name", - :db/ident :plaid-account/name, - } + :db/ident :plaid-account/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "account number", - :db/ident :plaid-account/number, - } + :db/ident :plaid-account/number} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Available Balance", - :db/ident :plaid-account/balance, - } + :db/ident :plaid-account/balance} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Plaid Item ID", - :db/ident :plaid-item/external-id, - } + :db/ident :plaid-item/external-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Used to authenticate to plaid", - :db/ident :plaid-item/access-token, - } + :db/ident :plaid-item/access-token} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which client the plaid item is for", - :db/ident :plaid-item/client, - } + :db/ident :plaid-item/client} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Individual bank accounts", - :db/ident :plaid-item/accounts, - } + :db/ident :plaid-item/accounts} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Current status", - :db/ident :plaid-item/status, - } + :db/ident :plaid-item/status} {:db/valueType #:db{:ident :db.type/instant}, :db/noHistory true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Last updated date", - :db/ident :plaid-item/last-updated, - } + :db/ident :plaid-item/last-updated} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Which client(s) this is for", - :db/ident :report/client, - } + :db/ident :report/client} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A description for the report", - :db/ident :report/name, - } + :db/ident :report/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The s3 key for the report", - :db/ident :report/key, - } + :db/ident :report/key} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "When this report was created", - :db/ident :report/created, - } + :db/ident :report/created} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Where to download the report", - :db/ident :report/url, - } + :db/ident :report/url} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Creator of the report's name", - :db/ident :report/creator, - } + :db/ident :report/creator} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client for the sale", - :db/ident :sales-order/external-id, - } + :db/ident :sales-order/external-id} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client for the sale", - :db/ident :sales-order/client, - } + :db/ident :sales-order/client} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The location of the sale", - :db/ident :sales-order/location, - } + :db/ident :sales-order/location} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The date the order was placed", - :db/ident :sales-order/date, - } + :db/ident :sales-order/date} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total amount on the sale", - :db/ident :sales-order/total, - } + :db/ident :sales-order/total} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The tax on the sale", - :db/ident :sales-order/tax, - } + :db/ident :sales-order/tax} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The tip on the sale", - :db/ident :sales-order/tip, - } + :db/ident :sales-order/tip} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "How the sale was paid", - :db/ident :sales-order/charges, - } + :db/ident :sales-order/charges} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "What the person ordered", - :db/ident :sales-order/line-items, - } + :db/ident :sales-order/line-items} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total amount on the sale", - :db/ident :sales-order/discount, - } + :db/ident :sales-order/discount} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The returned amount on the sale", - :db/ident :sales-order/returns, - } + :db/ident :sales-order/returns} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total cost on the item", - :db/ident :sales-order/service-charge, - } + :db/ident :sales-order/service-charge} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which vendor is this sales-order for? CCP Square?", - :db/ident :sales-order/vendor, - } + :db/ident :sales-order/vendor} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Where the POS says the order is from", - :db/ident :sales-order/source, - } + :db/ident :sales-order/source} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A link someone can go to to look at the order", - :db/ident :sales-order/reference-link, - } + :db/ident :sales-order/reference-link} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The external id for the refund", - :db/ident :sales-refund/external-id, - } + :db/ident :sales-refund/external-id} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client for the refund", - :db/ident :sales-refund/client, - } + :db/ident :sales-refund/client} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The location of the refund", - :db/ident :sales-refund/location, - } + :db/ident :sales-refund/location} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The date the refund was initiated", - :db/ident :sales-refund/date, - } + :db/ident :sales-refund/date} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total amount on the deposit", - :db/ident :sales-refund/total, - } + :db/ident :sales-refund/total} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The total fee on the refund", - :db/ident :sales-refund/fee, - } + :db/ident :sales-refund/fee} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The type of refund (CASH CARD etc)", - :db/ident :sales-refund/type, - } + :db/ident :sales-refund/type} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which vendor is this refund for? CCP Square?", - :db/ident :sales-refund/vendor, - } + :db/ident :sales-refund/vendor} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The ID that is used for fetching data", - :db/ident :saved-query/guid, - } + :db/ident :saved-query/guid} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client for the saved query", - :db/ident :saved-query/client, - } + :db/ident :saved-query/client} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The key for the query text in s3", - :db/ident :saved-query/key, - } + :db/ident :saved-query/key} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A descriptor for the query for the user interface", - :db/ident :saved-query/description, - } + :db/ident :saved-query/description} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A unique key for looking up queries", - :db/ident :saved-query/lookup-key, - } + :db/ident :saved-query/lookup-key} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "An id for a location in square", - :db/ident :square-location/square-id, - } + :db/ident :square-location/square-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Name of the location in square e.g. Woodland Hills", - :db/ident :square-location/name, - } + :db/ident :square-location/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The client location that this location should match to. e.g. WH", - :db/ident :square-location/client-location, - } + :db/ident :square-location/client-location} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The id in the old system", - :db/ident :transaction/original-id, - } + :db/ident :transaction/original-id} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The amount of the transaction", - :db/ident :transaction/amount, - } + :db/ident :transaction/amount} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "full description of the transaction", - :db/ident :transaction/description-original, - } + :db/ident :transaction/description-original} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "short description of the transaction", - :db/ident :transaction/description-simple, - } + :db/ident :transaction/description-simple} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "a yodlee id for the merchant", - :db/ident :transaction/merchant-id, - } + :db/ident :transaction/merchant-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "a name for the merchant", - :db/ident :transaction/merchant-name, - } + :db/ident :transaction/merchant-name} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A key to match against", - :db/ident :transaction/id, - } + :db/ident :transaction/id} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Date that the transaction showed up", - :db/ident :transaction/date, - } + :db/ident :transaction/date} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Date that the transaction posted", - :db/ident :transaction/post-date, - } + :db/ident :transaction/post-date} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Yodlee description of the transaction", - :db/ident :transaction/type, - } + :db/ident :transaction/type} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Yodlee status of the transaction", - :db/ident :transaction/status, - } + :db/ident :transaction/status} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Yodlee account id", - :db/ident :transaction/account-id, - } + :db/ident :transaction/account-id} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The check number that was parsed from the description", - :db/ident :transaction/check-number, - } + :db/ident :transaction/check-number} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Vendor for who we think this transaction is from", - :db/ident :transaction/vendor, - } + :db/ident :transaction/vendor} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Client for who we think this transaction is for", - :db/ident :transaction/client, - } + :db/ident :transaction/client} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The bank accout used for this transaction", - :db/ident :transaction/bank-account, - } + :db/ident :transaction/bank-account} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The payment that this transaction matched to", - :db/ident :transaction/payment, - } + :db/ident :transaction/payment} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "The debit(s)/credit(s) for this transaction", - :db/ident :transaction/accounts, - } + :db/ident :transaction/accounts} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Location of the transaction's target", - :db/ident :transaction/location, - } + :db/ident :transaction/location} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The yodlee merchant", - :db/ident :transaction/yodlee-merchant, - } + :db/ident :transaction/yodlee-merchant} {:db/valueType #:db{:ident :db.type/boolean}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Whether to exclude from the ledger", - :db/ident :transaction/exclude-from-ledger, - } + :db/ident :transaction/exclude-from-ledger} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Status of a transaction", - :db/ident :transaction/approval-status, - } + :db/ident :transaction/approval-status} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The rule that this transaction matched", - :db/ident :transaction/matched-rule, - } + :db/ident :transaction/matched-rule} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "which entitiy it was cleared against", - :db/ident :transaction/cleared-against, - } + :db/ident :transaction/cleared-against} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which forecast this transaction matches, for cashflow", - :db/ident :transaction/forecast-match, - } + :db/ident :transaction/forecast-match} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "If this transaction is a deposit, the deposit that we anticipated", - :db/ident :transaction/expected-deposit, - } + :db/ident :transaction/expected-deposit} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "An unhashed version of the id", - :db/ident :transaction/raw-id, - } + :db/ident :transaction/raw-id} {:db/valueType :db.type/ref :db/cardinality :db.cardinality/one :db/ident :transaction/plaid-merchant} @@ -1633,432 +1301,350 @@ {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which account to debit/credit for this transaction", - :db/ident :transaction-account/account, - } + :db/ident :transaction-account/account} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Location for this expense account", - :db/ident :transaction-account/location, - } + :db/ident :transaction-account/location} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How much to debit/credit - must be positive", - :db/ident :transaction-account/amount, - } + :db/ident :transaction-account/amount} - {:db/ident :transaction-approval-status/approved, - } - {:db/ident :transaction-approval-status/unapproved, - } - {:db/ident :transaction-approval-status/requires-feedback, - } - {:db/ident :transaction-approval-status/excluded, - } - {:db/ident :transaction-approval-status/suppressed, - } + {:db/ident :transaction-approval-status/approved} + {:db/ident :transaction-approval-status/unapproved} + {:db/ident :transaction-approval-status/requires-feedback} + {:db/ident :transaction-approval-status/excluded} + {:db/ident :transaction-approval-status/suppressed} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The specific client this rule is for", - :db/ident :transaction-rule/client, - } + :db/ident :transaction-rule/client} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The specific bank account this rule is for", - :db/ident :transaction-rule/bank-account, - } + :db/ident :transaction-rule/bank-account} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Apply this rule if the yodlee merchant matches", - :db/ident :transaction-rule/yodlee-merchant, - } + :db/ident :transaction-rule/yodlee-merchant} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A description to match this rule against", - :db/ident :transaction-rule/description, - } + :db/ident :transaction-rule/description} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A friendly description for this rule (internal)", - :db/ident :transaction-rule/note, - } + :db/ident :transaction-rule/note} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Amount has to be less than or equal to this", - :db/ident :transaction-rule/amount-lte, - } + :db/ident :transaction-rule/amount-lte} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Amount has to be greater than or equal to this", - :db/ident :transaction-rule/amount-gte, - } + :db/ident :transaction-rule/amount-gte} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Day of month has to be less than or equal to this", - :db/ident :transaction-rule/dom-lte, - } + :db/ident :transaction-rule/dom-lte} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Day of month has to be greater than or equal to this", - :db/ident :transaction-rule/dom-gte, - } + :db/ident :transaction-rule/dom-gte} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The vendor to assign", - :db/ident :transaction-rule/vendor, - } + :db/ident :transaction-rule/vendor} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "The outcome split", - :db/ident :transaction-rule/accounts, - } + :db/ident :transaction-rule/accounts} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Status of a transaction", - :db/ident :transaction-rule/transaction-approval-status, - } + :db/ident :transaction-rule/transaction-approval-status} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How much should go to this account", - :db/ident :transaction-rule-account/percentage, - } + :db/ident :transaction-rule-account/percentage} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The location this split is for", - :db/ident :transaction-rule-account/location, - } + :db/ident :transaction-rule-account/location} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The account of this split", - :db/ident :transaction-rule-account/account, - } + :db/ident :transaction-rule-account/account} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The id in the old system", - :db/ident :user/original-id, - } + :db/ident :user/original-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Provider for oauth for the user", - :db/ident :user/provider, - } + :db/ident :user/provider} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "the id from the provider", - :db/ident :user/provider-id, - } + :db/ident :user/provider-id} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The role [:user :admin :none]", - :db/ident :user/role, - } + :db/ident :user/role} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "name of the user", - :db/ident :user/name, - } + :db/ident :user/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "email address of the user", - :db/ident :user/email, - } + :db/ident :user/email} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "profile image of user", - :db/ident :user/profile-image-url, - } + :db/ident :user/profile-image-url} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "The clients this user can view", - :db/ident :user/clients, - } + :db/ident :user/clients} - {:db/ident :user-role/manager, } - {:db/ident :user-role/admin, } - {:db/ident :user-role/user, } - {:db/ident :user-role/none, } - {:db/ident :user-role/power-user, - } + {:db/ident :user-role/manager} + {:db/ident :user-role/admin} + {:db/ident :user-role/user} + {:db/ident :user-role/none} + {:db/ident :user-role/power-user} - {:db/ident :vendor/ccp-square, } + {:db/ident :vendor/ccp-square} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Original id from the old system", - :db/ident :vendor/original-id, - } + :db/ident :vendor/original-id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A vendor's human-friendly name", - :db/ident :vendor/name, - } + :db/ident :vendor/name} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A vendor's computer-friendly name", - :db/ident :vendor/code, - } + :db/ident :vendor/code} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Set if you want to override how this vendor's name is printed on checks", - :db/ident :vendor/print-as, - } + :db/ident :vendor/print-as} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A vendor's email address", - :db/ident :vendor/email, - } + :db/ident :vendor/email} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A vendor's phone number", - :db/ident :vendor/phone, - } + :db/ident :vendor/phone} {:db/valueType #:db{:ident :db.type/keyword}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How often to email this vendor about invoices", - :db/ident :vendor/invoice-reminder-schedule, - } + :db/ident :vendor/invoice-reminder-schedule} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The vendor's default expense account", - :db/ident :vendor/default-expense-account, - } + :db/ident :vendor/default-expense-account} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The vendor's primary contact", - :db/ident :vendor/primary-contact, - } + :db/ident :vendor/primary-contact} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The vendor's secondary contact", - :db/ident :vendor/secondary-contact, - } + :db/ident :vendor/secondary-contact} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The vendor's address", - :db/ident :vendor/address, - } + :db/ident :vendor/address} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The account will be used when a bill is created.", - :db/ident :vendor/default-account, - } + :db/ident :vendor/default-account} {:db/valueType #:db{:ident :db.type/boolean}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Whether or not to exclude the vendor", - :db/ident :vendor/hidden, - } + :db/ident :vendor/hidden} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Overrides per-client", - :db/ident :vendor/terms-overrides, - } + :db/ident :vendor/terms-overrides} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Overrides per-client", - :db/ident :vendor/account-overrides, - } + :db/ident :vendor/account-overrides} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How many days till you pay", - :db/ident :vendor/terms, - } + :db/ident :vendor/terms} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "The clients for which invoices will automatically be paid.", - :db/ident :vendor/automatically-paid-when-due, - } + :db/ident :vendor/automatically-paid-when-due} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "When an invoice gets marked as paid", - :db/ident :vendor/schedule-payment-dom, - } + :db/ident :vendor/schedule-payment-dom} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The first name for the legal entity", - :db/ident :vendor/legal-entity-first-name, - } + :db/ident :vendor/legal-entity-first-name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The first name for the legal entity", - :db/ident :vendor/legal-entity-middle-name, - } + :db/ident :vendor/legal-entity-middle-name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The first name for the legal entity", - :db/ident :vendor/legal-entity-last-name, - } + :db/ident :vendor/legal-entity-last-name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The ssn or ein for the legal entity", - :db/ident :vendor/legal-entity-tin, - } + :db/ident :vendor/legal-entity-tin} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The ssn or ein for the legal entity", - :db/ident :vendor/legal-entity-tin-type, - } + :db/ident :vendor/legal-entity-tin-type} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The ssn or ein for the legal entity", - :db/ident :vendor/legal-entity-1099-type, - } + :db/ident :vendor/legal-entity-1099-type} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "a name search for vendors", - :db/ident :vendor/search-terms, - } - {:db/ident :vendor/ccp-ezcater, } + :db/ident :vendor/search-terms} + {:db/ident :vendor/ccp-ezcater} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "If not a person, the legal entity naame", - :db/ident :vendor/legal-entity-name, - } + :db/ident :vendor/legal-entity-name} {:db/valueType db.type/ref, :db/cardinality :db.cardinality/one, :db/doc "A link to the plaid merchant for this vendor", - :db/ident :vendor/plaid-merchant, - } + :db/ident :vendor/plaid-merchant} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "the account for invoices", - :db/ident :vendor-account-override/account, - } + :db/ident :vendor-account-override/account} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How many days till you pay", - :db/ident :vendor-account-override/client, - } + :db/ident :vendor-account-override/client} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which client the override is for", - :db/ident :vendor-schedule-payment-dom/client, - } + :db/ident :vendor-schedule-payment-dom/client} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "What day of the month", - :db/ident :vendor-schedule-payment-dom/dom, - } + :db/ident :vendor-schedule-payment-dom/dom} {:db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How many days till you pay", - :db/ident :vendor-terms-override/terms, - } + :db/ident :vendor-terms-override/terms} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How many days till you pay", - :db/ident :vendor-terms-override/client, - } + :db/ident :vendor-terms-override/client} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "A key to find this by, normally vendor (db:/id)-client(:db/id)", - :db/ident :vendor-usage/key, - } + :db/ident :vendor-usage/key} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which vendor this usage is for", - :db/ident :vendor-usage/vendor, - } + :db/ident :vendor-usage/vendor} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which client this usage is for", - :db/ident :vendor-usage/client, - } + :db/ident :vendor-usage/client} {:db/valueType #:db{:ident :db.type/long}, :db/noHistory true, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "How many times does this client use this vendor", - :db/ident :vendor-usage/count, - } + :db/ident :vendor-usage/count} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Yodlee account id", - :db/ident :yodlee-account/id, - } + :db/ident :yodlee-account/id} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "account name", - :db/ident :yodlee-account/name, - } + :db/ident :yodlee-account/name} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "account number", - :db/ident :yodlee-account/number, - } + :db/ident :yodlee-account/number} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Current status", - :db/ident :yodlee-account/status, - } + :db/ident :yodlee-account/status} {:db/valueType #:db{:ident :db.type/double}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Available Balance", - :db/ident :yodlee-account/available-balance, - } + :db/ident :yodlee-account/available-balance} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The yodlee merchant name", - :db/ident :yodlee-merchant/name, - } + :db/ident :yodlee-merchant/name} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "The yodlee merchant id", - :db/ident :yodlee-merchant/yodlee-id, - } + :db/ident :yodlee-merchant/yodlee-id} {:db/unique #:db{:ident :db.unique/identity}, :db/valueType #:db{:ident :db.type/long}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Yodlee Provider ACcount Id", - :db/ident :yodlee-provider-account/id, - } + :db/ident :yodlee-provider-account/id} {:db/valueType #:db{:ident :db.type/ref}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Which client the provider account is for", - :db/ident :yodlee-provider-account/client, - } + :db/ident :yodlee-provider-account/client} {:db/valueType #:db{:ident :db.type/ref}, :db/isComponent true, :db/cardinality #:db{:ident :db.cardinality/many}, :db/doc "Individual bank accounts", - :db/ident :yodlee-provider-account/accounts, - } + :db/ident :yodlee-provider-account/accounts} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Current status", - :db/ident :yodlee-provider-account/status, - } + :db/ident :yodlee-provider-account/status} {:db/valueType #:db{:ident :db.type/string}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Current status (detail)", - :db/ident :yodlee-provider-account/detailed-status, - } + :db/ident :yodlee-provider-account/detailed-status} {:db/valueType #:db{:ident :db.type/instant}, :db/cardinality #:db{:ident :db.cardinality/one}, :db/doc "Last updated date", - :db/ident :yodlee-provider-account/last-updated, - } + :db/ident :yodlee-provider-account/last-updated} {:db/ident :cash-drawer-shift/external-id :db/doc "The client for the sale" @@ -2190,4 +1776,10 @@ {:db/ident :textract-invoice/invoice :db/valueType :db.type/ref - :db/cardinality :db.cardinality/one}] + :db/cardinality :db.cardinality/one} + + {:db/ident :transaction/outcome-recommendation + :db/valueType :db.type/tuple + :db/doc "The recommended vendor, account, and transaction count, and whether seen by the client," + :db/tupleTypes [:db.type/ref :db.type/ref :db.type/long :db.type/boolean] + :db/cardinality :db.cardinality/many}] diff --git a/scratch-sessions/investigate.repl b/scratch-sessions/investigate.repl new file mode 100644 index 00000000..80eafca8 --- /dev/null +++ b/scratch-sessions/investigate.repl @@ -0,0 +1,93 @@ +;; This buffer is for Clojure experiments and evaluation. + +;; Press C-j to evaluate the last expression. + +;; You can also press C-u C-j to evaluate the expression and pretty-print its result. + +(def is-set (set (map first (dc/q '[:find ?ext + :where + [?so :sales-order/client [:client/code "N-30001"]] + [?so :sales-order/date ?d] + [(>= ?d #inst "2023-06-03T00:00:00-08:00")] + [(<= ?d #inst "2023-06-06T00:00:00-08:00")] + [(iol-ion.query/excel-date ?d) ?d4] + [(= ?d4 "06/04/2023")] + [?so :sales-order/external-id ?ext] + ] + (dc/db conn))))) + +(def sales + (first (for [n (get-square-clients "N-30001") + l (:client/square-locations n) + :when (:square-location/client-location l)] + + (->> @(daily-results n l (coerce/to-date-time #inst "2023-06-03T00:00:00-08:00") (coerce/to-date-time #inst "2023-06-06T00:00:00-08:00")) + (filter #(= "06/04/2023" (some->> % + :sales-order/date + iol-ion.query/excel-date))) + + )))) + +(->> sales + + (filter (fn [o] + (seq (filter (comp #{"Desserts"} :order-line-item/category ) + (:sales-order/line-items o))))) + ) + +(->> sales + (mapcat :sales-order/line-items) + (filter (comp #{"Loukoumades"} :order-line-item/item-name )) + count + + + ) + +(->> sales + + (filter (fn [o] + (seq (filter (comp #{"Loukoumades"} :order-line-item/item-name ) + (:sales-order/line-items o))))) + (map :sales-order/date) + ) +(->> sales + (map :sales-order/date)) + +(def should-be-set *1) + +(count should-be-set) + +(def should-not-be (set/difference is-set should-be-set)) + +(first should-not-be) + +(first (for [n (get-square-clients "N-30001") + l (:client/square-locations n) + :when (:square-location/client-location l)] + + (get-order n l "qfAWtK0NJJ8679nx6dVuy0UzbNHZY") + #_(get-payment n "5EIEhiyv8c7ivU7sDQckAcREmURZY"))) + + +(count should-be-set) + +(get-payment ) + +(seq (dc/q '[:find ?d4 (sum ?total) (sum ?tax) (sum ?tip) (sum ?service-charge) (sum ?discount) (sum ?returns) + :with ?s + :in $ + :where + [(ground (iol-ion.query/recent-date)) ?min-d] + [(ground #inst "2040-01-01") ?max-d] + [?c :client/code "N-30001"] + [(iol-ion.query/sales-orders-in-range $ ?c ?min-d ?max-d) [?s ...]] + [?s :sales-order/date ?d] + [?s :sales-order/total ?total] + [?s :sales-order/tax ?tax] + [?s :sales-order/tip ?tip] + [?s :sales-order/service-charge ?service-charge] + [?s :sales-order/returns ?returns] + [?s :sales-order/discount ?discount] + [(iol-ion.query/excel-date ?d) ?d4] + ] + (dc/db conn))) diff --git a/src/clj/auto_ap/jobs/insight_outcome_recommendation.clj b/src/clj/auto_ap/jobs/insight_outcome_recommendation.clj new file mode 100644 index 00000000..88a4b5eb --- /dev/null +++ b/src/clj/auto_ap/jobs/insight_outcome_recommendation.clj @@ -0,0 +1,97 @@ +(ns auto-ap.jobs.insght-outcome-recommendation + (:require + [auto-ap.datomic :refer [audit-transact-batch conn]] + [auto-ap.jobs.core :refer [execute]] + [cemerick.url :as url] + [clj-http.client :as http2] + [datomic.api :as dc])) + +(defn get-recent-transactions [] + (->> conn + dc/db + (dc/q '[:find ?t ?c + :where + [(iol-ion.query/recent-date 90) ?start] + [?t :transaction/date ?d] + [(>= ?d ?start)] + [?t :transaction/approval-status :transaction-approval-status/unapproved] + (not [?t :transaction/outcome-recommendation]) + [?t :transaction/description-original ?do] + (not [(clojure.string/includes? ?do "CHECK")]) + (not [(clojure.string/includes? ?do "Check")]) + [?t :transaction/client ?c]]))) + +(defn get-pinecone [transaction-id] + (-> + (http2/get (-> "https://transactions-a8257ba.svc.us-west4-gcp-free.pinecone.io/vectors/fetch" + url/url + (assoc :query {:ids transaction-id}) + str) + {:headers {"Api-Key" "f2d3a78e-bcea-4fcd-88b6-2527b8423607"} + :as :json + :keywordize? false}) + :body + :vectors + ((keyword (str transaction-id))) + :values)) + +(defn get-pinecone-similarities [transaction-id] + (filter + (fn [{:keys [score]}] + (> score 0.95) + ) + (-> + (http2/post (-> "https://transactions-a8257ba.svc.us-west4-gcp-free.pinecone.io/query" + url/url + str) + {:headers {"Api-Key" "f2d3a78e-bcea-4fcd-88b6-2527b8423607"} + :form-params {"vector" (get-pinecone transaction-id) + "topK" 200, + "includeMetadata" true + "namespace" ""} + :content-type :json + :as :json}) + :body + :matches))) + +(defn pinecone-similarity-list [transaction-id] + (for [{{:keys [amount date description vendor]} :metadata score :score id :id} (get-pinecone-similarities transaction-id) + :let [similar-transaction (dc/pull (dc/db conn) [{:transaction/vendor [:vendor/name :db/id] + :transaction/accounts [{:transaction-account/account [:account/numeric-code :db/id]}] + :transaction/client [:db/id]}] (Long/parseLong id))] + :when (or (:transaction/vendor similar-transaction) (seq (:transaction/accounts similar-transaction)))] + + (assoc similar-transaction :score score))) + +(defn similar->recommendation [txs client] + (->> txs + (reduce (fn [acc t] + (-> acc + (update-in [[(:db/id (:transaction/vendor t)) + (:db/id (:transaction-account/account (first (:transaction/accounts t))))] + :count] + (fnil inc 0)) + (update-in [[(:db/id (:transaction/vendor t)) + (:db/id (:transaction-account/account (first (:transaction/accounts t))))] + :seen-by-client?] + (fn [seen-by-client?] (or seen-by-client? (= (:db/id (:transaction/client t)) + client)))))) + {}) + (map (fn [[k v]] + (-> k + (conj (:count v)) + (conj (:seen-by-client? v))))))) + +(defn get-outcome-recommendations [] + (for [[transaction client] (get-recent-transactions) + :let [similarity (pinecone-similarity-list transaction)] + :when (seq similarity)] + {:db/id transaction + :transaction/outcome-recommendation + (similar->recommendation similarity client)})) + +(defn make-outcome-recommendations [] + (audit-transact-batch (get-outcome-recommendations) {:user/name "Outcome recommendations from pinecone"})) + +(defn -main [& _] + (execute "insight-outcome-recommendation" make-outcome-recommendations)) diff --git a/src/clj/auto_ap/server.clj b/src/clj/auto_ap/server.clj index 726bf055..b86e26e3 100644 --- a/src/clj/auto_ap/server.clj +++ b/src/clj/auto_ap/server.clj @@ -26,7 +26,8 @@ [mount.core :as mount] [nrepl.server :refer [start-server]] [ring.adapter.jetty :refer [run-jetty]] - [yang.scheduler :as scheduler]) + [yang.scheduler :as scheduler] + [auto-ap.jobs.insight-outcome-recommendation :as insight-outcome-recommendation]) (:import (org.eclipse.jetty.server.handler StatisticsHandler) (org.eclipse.jetty.server.handler.gzip GzipHandler))) @@ -89,70 +90,72 @@ (mount/stop)) (defn -main [& _] - (let [job (System/getenv "INTEGREAT_JOB")] - (println "JOB is" job) - (cond (= job "square-import-job") - (job-square/-main) + (let [job (System/getenv "INTEGREAT_JOB")] + (println "JOB is" job) + (cond (= job "square-import-job") + (job-square/-main) - (= job "square2-import-job") - (job-square2/-main) + (= job "square2-import-job") + (job-square2/-main) - (= job "reconcile-ledger") - (job-reconcile-ledger/-main) + (= job "reconcile-ledger") + (job-reconcile-ledger/-main) - (= job "current-balance-cache") - (job-current-balance-cache/-main) + (= job "current-balance-cache") + (job-current-balance-cache/-main) - (= job "yodlee2") - (job-yodlee2/-main) + (= job "yodlee2") + (job-yodlee2/-main) - (= job "yodlee2-accounts") - (job-yodlee2/accounts-only) + (= job "yodlee2-accounts") + (job-yodlee2/accounts-only) - (= job "plaid") - (job-plaid/-main) + (= job "plaid") + (job-plaid/-main) - (= job "intuit") - (job-intuit/-main) + (= job "intuit") + (job-intuit/-main) - (= job "vendor-usages") - (job-vendor-usages/-main) + (= job "vendor-usages") + (job-vendor-usages/-main) - (= job "import-uploaded-invoices") - (job-import-uploaded-invoices/-main) + (= job "import-uploaded-invoices") + (job-import-uploaded-invoices/-main) - (= job "sysco") - (job-sysco/-main) + (= job "sysco") + (job-sysco/-main) - (= job "close-auto-invoices") - (job-close-auto-invoices/-main) + (= job "close-auto-invoices") + (job-close-auto-invoices/-main) - (= job "ezcater-upsert") - (job-ezcater-upsert/-main) + (= job "ezcater-upsert") + (job-ezcater-upsert/-main) + (= job "register-invoice-import") + (job-register-invoice-import/-main) - (= job "register-invoice-import") - (job-register-invoice-import/-main) + (= job "load-historical-sales") + (job-load-historical-sales/-main) - (= job "load-historical-sales") - (job-load-historical-sales/-main) + (= job "bulk-journal-import") + (job-bulk-journal-import/-main) - (= job "bulk-journal-import") - (job-bulk-journal-import/-main) + (= job "restore-from-backup") + (job-restore-from-backup/-main) - (= job "restore-from-backup") - (job-restore-from-backup/-main) + (= job "insight-outcome-recommendation") + (insight-outcome-recommendation/-main) ;; (= job "export-backup") ;; (backup/-main) - (= job "ntg") - (job-ntg/-main) + (= job "ntg") + (job-ntg/-main) - :else - (do - (add-shutdown-hook! shutdown-mount) - (start-server :port 9000 :bind "0.0.0.0" #_#_:handler (cider-nrepl-handler)) - (mount/start) - #_(alter-var-root #'nrepl.middleware.print/*print-fn* (constantly clojure.pprint/pprint)))))) + :else + (do + (add-shutdown-hook! shutdown-mount) + (start-server :port 9000 :bind "0.0.0.0" #_#_:handler (cider-nrepl-handler)) + (mount/start) + #_(alter-var-root #'nrepl.middleware.print/*print-fn* (constantly clojure.pprint/pprint)))))) diff --git a/src/clj/auto_ap/ssr/components.clj b/src/clj/auto_ap/ssr/components.clj index fe967446..5df4f447 100644 --- a/src/clj/auto_ap/ssr/components.clj +++ b/src/clj/auto_ap/ssr/components.clj @@ -38,6 +38,7 @@ (def page page/page-) (def pill tags/pill-) +(def badge tags/badge-) (def data-grid data-grid/data-grid-) (def data-grid-header data-grid/header-) diff --git a/src/clj/auto_ap/ssr/components/tags.clj b/src/clj/auto_ap/ssr/components/tags.clj index 0a2ab9d5..edf4b59f 100644 --- a/src/clj/auto_ap/ssr/components/tags.clj +++ b/src/clj/auto_ap/ssr/components/tags.clj @@ -18,3 +18,6 @@ (= :red (:color params)) (update :class str " bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300"))] children)) + +(defn badge- [params & children] + [:div {:class "absolute inline-flex items-center justify-center w-6 h-6 text-xs font-bold text-white bg-red-500 border-2 border-white rounded-full -top-2 -right-2 dark:border-gray-900"} children]) diff --git a/src/clj/auto_ap/ssr/core.clj b/src/clj/auto_ap/ssr/core.clj index 7ebad6bd..54371fac 100644 --- a/src/clj/auto_ap/ssr/core.clj +++ b/src/clj/auto_ap/ssr/core.clj @@ -49,7 +49,7 @@ :transaction-insights (wrap-client-redirect-unauthenticated (wrap-admin insights/page)) :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-code (wrap-client-redirect-unauthenticated (wrap-admin insights/code)) :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)) diff --git a/src/clj/auto_ap/ssr/transaction/insights.clj b/src/clj/auto_ap/ssr/transaction/insights.clj index 6bc8c868..68c47892 100644 --- a/src/clj/auto_ap/ssr/transaction/insights.clj +++ b/src/clj/auto_ap/ssr/transaction/insights.clj @@ -14,18 +14,18 @@ [clj-http.client :as http] [clj-time.coerce :as coerce] [datomic.api :as dc] - [iol-ion.tx :refer [random-tempid]])) + [iol-ion.tx :refer [random-tempid]] + [hiccup2.core :as hiccup])) (def pull-expr [:transaction/description-original :db/id + + :transaction/outcome-recommendation :transaction/amount {:transaction/client [:client/code] - :transaction/bank-account [:bank-account/code] - :transaction/recommended-vendor [:vendor/name :db/id] - :transaction/recommended-account [:account/name :account/numeric-code :db/id]} + :transaction/bank-account [:bank-account/code]} :transaction/account-confidence - :transaction/date - ]) + :transaction/date]) (defn transaction-recommendations [identity selected-client & {:keys [after]}] (let [visible-clients (visible-clients identity)] @@ -33,13 +33,13 @@ (dc/qseq {:query '[:find (pull ?t pull-expr) :in $ ?starting [?c ...] pull-expr :where - + [?t :transaction/outcome-recommendation] [?t :transaction/client ?c] [?t :transaction/approval-status :transaction-approval-status/unapproved] ;; [?t :transaction/vendor] ;; should be not [?t :transaction/date ?d] - [(>= ?d ?starting)] - ] + [(>= ?d ?starting)]] + :args [(dc/db conn) (iol-ion.query/recent-date 120) (if selected-client @@ -54,6 +54,20 @@ (#(if after (drop 1 %) %)) + (map (fn [tx] + (update tx :transaction/outcome-recommendation + (fn [ors] + (map + (fn [[v a c s]] + {:vendor (dc/pull (dc/db conn) + [:vendor/name :db/id] + v) + :account (dc/pull (dc/db conn) + [:account/name :db/id] + a) + :count c + :seen-by-client? s}) + ors))))) (take 50) (into [])))) @@ -108,97 +122,94 @@ :score score})) -(defn transaction-row [r & {:keys [hide-actions? class last?]}] - (let [simality-list (try (pinecone-similarity-list (:db/id r)) (catch Exception e - []))] - (when (seq simality-list) - (com/data-grid-row - (cond-> {:class class} - last? (assoc :hx-get (bidi/path-for ssr-routes/only-routes - :transaction-insight-rows - :after (:db/id r)) - :hx-trigger "intersect once" - :hx-indicator "#insight-table" - :hx-swap "afterend")) - (com/data-grid-cell {} (:client/code (:transaction/client r))) - (com/data-grid-cell {} (:bank-account/code (:transaction/bank-account r))) - (com/data-grid-cell {} (some-> (:transaction/date r) coerce/to-date-time (atime/unparse-local atime/normal-date))) +(defn transaction-row [r & {:keys [hide-actions? class last?] hs "_"}] + (com/data-grid-row + (cond-> {:class class} + hs (assoc "_" hs) - (com/data-grid-cell {} (str (:transaction/description-original r))) - (com/data-grid-cell {} - (if (> (:transaction/amount r) 0.0) - [:div.tag.is-success.is-light (str "$" (Math/round (:transaction/amount r)))] - [:div.tag.is-danger.is-light (str "$" (Math/round (:transaction/amount r)))])) - (com/data-grid-cell {:style {:width "12em"}} - [:div.flex.gap-2.flex-wrap {:style {:width "12em"}} - (when-let [vendor-name (:vendor-name (first simality-list))] - (com/pill {:color :primary} vendor-name)) - (when-let [numeric-code (:numeric-code (first simality-list))] - (com/pill {:color :secondary} numeric-code)) - #_(com/pill {:class (cond - (> (:transaction/account-confidence r) 0.90) - "is-success is-light" - (> (:transaction/account-confidence r) 0.80) - "is-info is-light" + last? (assoc :hx-get (bidi/path-for ssr-routes/only-routes + :transaction-insight-rows + :after (:db/id r)) + :hx-trigger "intersect once" + :hx-indicator "#insight-table" + :hx-swap "afterend")) + (com/data-grid-cell {} (:client/code (:transaction/client r))) + (com/data-grid-cell {} (:bank-account/code (:transaction/bank-account r))) + (com/data-grid-cell {} (some-> (:transaction/date r) coerce/to-date-time (atime/unparse-local atime/normal-date))) - :else - "is-warning is-light")} (str "%" (Math/round (* 100.0 (:transaction/account-confidence r)))))]) - (com/data-grid-right-stack-cell {} - (when-not hide-actions? - [:form.flex.gap-2 - [:input {:type :hidden :name "id" :value (:db/id r)}] - (com/icon-button {:hx-post (bidi/path-for ssr-routes/only-routes - :transaction-insight-approve - :transaction-id (:db/id r)) - :hx-target "closest tr" - :color :primary-light} - svg/thumbs-up) - (com/icon-button {:hx-delete (bidi/path-for ssr-routes/only-routes - :transaction-insight-disapprove - :transaction-id (:db/id r)) - :hx-target "closest tr" - :color :danger-light} - svg/thumbs-down) - (com/icon-button {:hx-get (bidi/path-for ssr-routes/only-routes - :transaction-insight-explain - :transaction-id (:db/id r)) - :hx-target "#modal-holder" - :hx-swap "outerHTML"} - svg/question)])))))) + (com/data-grid-cell {} (str (:transaction/description-original r))) + (com/data-grid-cell {} + (if (> (:transaction/amount r) 0.0) + [:div.tag.is-success.is-light (str "$" (Math/round (:transaction/amount r)))] + [:div.tag.is-danger.is-light (str "$" (Math/round (:transaction/amount r)))])) -(defn approve [{:keys [identity session] {:keys [transaction-id]} :route-params}] + (com/data-grid-right-stack-cell {} + (when-not hide-actions? + [:div.flex.gap-2.flex-col {:style {:width "25em"}} + (for [or (sort-by (comp - :count) + (:transaction/outcome-recommendation r))] + [:form {:hx-post (bidi/path-for ssr-routes/only-routes + :transaction-insight-code + :transaction-id (:db/id r)) + :hx-target "closest tr"} + (when-let [vendor-id (:db/id (:vendor or))] + [:input {:type :hidden :value vendor-id :name "vendor"}]) + (when-let [account-id (:db/id (:account or))] + [:input {:type :hidden :value account-id :name "account"}]) + + (com/button {:color (if (:seen-by-client? or) + :primary + :secondary) + :style {:position "relative"}} + (:vendor/name (:vendor or)) + (when (:vendor/name (:vendor or)) + " | ") + (:account/name (:account or)) + (com/badge {:color :secondary} + (:count or)))]) + (com/icon-button {:hx-get (bidi/path-for ssr-routes/only-routes + :transaction-insight-explain + :transaction-id (:db/id r)) + :hx-target "#modal-holder" + :hx-swap "outerHTML"} + svg/question)])))) + +(defn code [{:keys [identity session] {:keys [transaction-id]} :route-params {:strs [vendor account]} :form-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]} ] + {:transaction/client [:client/locations]}] (cond-> transaction-id string? (Long/parseLong))) + account (dc/pull (dc/db conn) [:account/location :db/id] + (cond-> account + 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)) + (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/vendor (some-> vendor not-empty (Long/parseLong)) :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))))}]] + (map + (fn [cents location] + {:db/id (random-tempid) + :transaction-account/account (-> 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")))) + (dc/pull (dc/db conn) + pull-expr + (Long/parseLong transaction-id)) + :auto-remove? true + :hide-actions? true + :class "live-added")))) (defn disapprove [{:keys [identity session] {:keys [transaction-id]} :route-params}] (let [transaction-id (cond-> transaction-id string? (Long/parseLong))] @@ -207,7 +218,8 @@ (dc/pull (dc/db conn) pull-expr transaction-id) :auto-remove? true :hide-actions? true - :class "live-removed")))) + :class "live-removed" + "_" (hiccup/raw "init transition opacity to 0 then remove me"))))) (defn explain [{:keys [identity session] {:keys [transaction-id]} :route-params}] (let [r (dc/pull (dc/db conn) pull-expr @@ -272,13 +284,11 @@ :rows (for [r recommendations :let [last? (= r (last recommendations))]] (transaction-row r :last? last?)) - :headers [(com/data-grid-header {} "Client") - (com/data-grid-header {} "Account") - (com/data-grid-header {} "Date") + :headers [(com/data-grid-header {:style {:width "10em"}} "Client") + (com/data-grid-header {:style {:width "15em"}} "Account") + (com/data-grid-header {:style {:width "8em"}} "Date") (com/data-grid-header {} "Description") - (com/data-grid-header {} "Amount") - (com/data-grid-header {:style {:width "4em"}} "Vendor / Account") - (com/data-grid-header {})]}))) + (com/data-grid-header {:style {:width "8em"}} "Amount")]}))) (defn insight-table [{:keys [session identity]}] (html-response (insight-table* {:selected-client diff --git a/src/cljc/auto_ap/ssr_routes.cljc b/src/cljc/auto_ap/ssr_routes.cljc index 2a272611..5a3e7565 100644 --- a/src/cljc/auto_ap/ssr_routes.cljc +++ b/src/cljc/auto_ap/ssr_routes.cljc @@ -15,7 +15,7 @@ "/ezcater-xls" :admin-ezcater-xls} "transaction" {"/insights" {"" :transaction-insights "/table" :transaction-insight-table - ["/approve/" [#"\d+" :transaction-id]] {:post :transaction-insight-approve} + ["/code/" [#"\d+" :transaction-id]] {:post :transaction-insight-code} ["/disapprove/" [#"\d+" :transaction-id]] {:delete :transaction-insight-disapprove} ["/rows/" [#"\d+" :after]] {:get :transaction-insight-rows} ["/explain/" [#"\d+" :transaction-id]] {:get :transaction-insight-explain}}} @@ -36,11 +36,10 @@ "/reauthenticate" {:put :company-yodlee-provider-account-reauthenticate}} "/plaid" {"" {:get :company-plaid} - "/table" {:get :company-plaid-table} + "/table" {:get :company-plaid-table} "/link" {:post :company-plaid-link} - #_#_"/fastlink" {:get :company-yodlee-fastlink-dialog} - #_#_"/refresh" {:put :company-yodlee-provider-account-refresh}} - }}) + #_#_"/fastlink" {:get :company-yodlee-fastlink-dialog} + #_#_"/refresh" {:put :company-yodlee-provider-account-refresh}}}}) (def only-routes ["/" routes]) diff --git a/terraform/deploy.tf b/terraform/deploy.tf index 94a29391..61e8d318 100644 --- a/terraform/deploy.tf +++ b/terraform/deploy.tf @@ -458,3 +458,16 @@ module "ntg_job" { memory = 4096 cpu = 1024 } + +module "insight_outcome_recommendation_job" { + schedule = "rate(6 hours)" + source = "./background-job/" + ecs_cluster = var.ecs_cluster + task_role_arn = var.task_role_arn + stage = var.stage + job_name = "insight-outcome-recommendation" + execution_role_arn = var.execution_role_arn + use_schedule = true + memory = 4096 + cpu = 2048 +} \ No newline at end of file