diff --git a/src/import.clj b/src/import.clj index d760f8a..4170090 100644 --- a/src/import.clj +++ b/src/import.clj @@ -101,11 +101,11 @@ (for [[k v] meta] (format " %s: \"%s\"\n" (name k) v)) ;; Postings and posting metadata - (for [{:keys [amount account currency meta]} postings] - (when-not (zero? amount) - (format " %-40s %10.2f %s\n%s" account amount currency - (str/join (for [[k v] meta] - (format " %s: \"%s\"\n" (name k) v))))))))) + (for [{:keys [amount account currency meta]} postings + :when (not (zero? amount))] + (format " %-40s %10.2f %s\n%s" account amount currency + (str/join (for [[k v] meta] + (format " %s: \"%s\"\n" (name k) v)))))))) ;; Each of the below functions returns one of the five payroll ;; transaction "sections" (one or more Beancount transaction entry): @@ -144,29 +144,29 @@ :payroll-type "US:General"} :postings []} postings (flatten - (for [[name employee-records] (group-by :name records)] - (let [total-net-pay (total-by-type "Net Pay" employee-records) + (for [[name employee-records] (group-by :name records) + :let [total-net-pay (total-by-type "Net Pay" employee-records) total-reimbursement (total-by-type "Reimbursement" employee-records) - actual-total-net-pay (- total-net-pay total-reimbursement)] - [{:account "Expenses:Payroll:Salary" - :amount actual-total-net-pay :currency "USD" - :meta (assoc-project projects name {:entity name})} - {:account "Liabilities:Payable:Accounts" - :amount (- actual-total-net-pay) :currency "USD" - :meta {:entity name}} - {:account "Expenses:Hosting" - :amount total-reimbursement :currency "USD" - :meta (assoc-project projects name {:entity name :payroll-type "US:Reimbursement"})} - {:account "Liabilities:Payable:Accounts" - :amount (- total-reimbursement) :currency "USD" - :meta (assoc-project projects name {:entity name :tax-implication "Reimbursement"})}])))] + actual-total-net-pay (- total-net-pay total-reimbursement)]] + [{:account "Expenses:Payroll:Salary" + :amount actual-total-net-pay :currency "USD" + :meta (assoc-project projects name {:entity name})} + {:account "Liabilities:Payable:Accounts" + :amount (- actual-total-net-pay) :currency "USD" + :meta {:entity name}} + {:account "Expenses:Hosting" + :amount total-reimbursement :currency "USD" + :meta (assoc-project projects name {:entity name :payroll-type "US:Reimbursement"})} + {:account "Liabilities:Payable:Accounts" + :amount (- total-reimbursement) :currency "USD" + :meta (assoc-project projects name {:entity name :tax-implication "Reimbursement"})}]))] [(assoc template :postings postings)])) (defn individual-taxes "Return a transaction of expenses/witholding for each employee." [date period pay-invoice-no retirement-invoice-no projects records] - (for [[name employee-records] (group-by :name records)] - (let [template {:date date :desc (format "Monthly Payroll - %s - TAXES - %s" period name) + (for [[name employee-records] (group-by :name records) + :let [template {:date date :desc (format "Monthly Payroll - %s - TAXES - %s" period name) :meta (assoc-project projects name {:project "Conservancy" @@ -215,8 +215,8 @@ withholding-postings withholding-asset-postings insurance-postings - insurance-asset-postings)] - (assoc template :postings all-postings)))) + insurance-asset-postings)]] + (assoc template :postings all-postings))) (defn employer-taxes "Return an employer taxes transaction." @@ -295,11 +295,11 @@ :tax-implication "Retirement-Pretax" :invoice invoice-no} :postings []} - liability-postings (for [[name employee-records] (group-by :name records)] - (let [total-retirement (total-by-type "Retirement" employee-records)] - {:account "Liabilities:Payable:Accounts" - :amount total-retirement :currency "USD" - :meta {:entity name}})) + liability-postings (for [[name employee-records] (group-by :name records) + :let [total-retirement (total-by-type "Retirement" employee-records)]] + {:account "Liabilities:Payable:Accounts" + :amount total-retirement :currency "USD" + :meta {:entity name}}) total-liabilities (total liability-postings) asset-postings [{:account "Assets:Citizens:Check1273" :amount (- total-liabilities) :currency "USD"}] @@ -319,15 +319,15 @@ :payroll-type "US:General"} :postings []} employee-postings (flatten - (for [[name employee-records] (group-by :name records)] - (let [net-pay (total-by-type "Net Pay" employee-records) - reimbursements (total-by-type "Reimbursement" employee-records)] - [{:account "Liabilities:Payable:Accounts" - :amount (- net-pay reimbursements) :currency "USD" - :meta (assoc-project projects name {:entity name})} - {:account "Liabilities:Payable:Accounts" - :amount reimbursements :currency "USD" - :meta (assoc-project projects name {:entity name})}]))) + (for [[name employee-records] (group-by :name records) + :let [net-pay (total-by-type "Net Pay" employee-records) + reimbursements (total-by-type "Reimbursement" employee-records)]] + [{:account "Liabilities:Payable:Accounts" + :amount (- net-pay reimbursements) :currency "USD" + :meta (assoc-project projects name {:entity name})} + {:account "Liabilities:Payable:Accounts" + :amount reimbursements :currency "USD" + :meta (assoc-project projects name {:entity name})}])) total-net-pay (total-by-type "Net Pay" records) total-reimbursements (total-by-type "Reimbursement" records) total-net-pay-posting {:account "Assets:Citizens:Check1273" @@ -361,18 +361,18 @@ :amount (+ total-liabilities total-unemploy) :currency "USD" :meta {:entity "Paychex"}}] withholding-liability-postings (flatten - (for [[name employee-records] (group-by :name records)] - (let [witholding-records (filter #(= (:type %) "Withholding") employee-records) + (for [[name employee-records] (group-by :name records) + :let [witholding-records (filter #(= (:type %) "Withholding") employee-records) insurance-records (filter (fn [{:keys [category type]}] (and (= type "Withholding") (str/starts-with? category "NY Disability"))) - employee-records)] - [{:account "Liabilities:Payable:Accounts" - :amount (total witholding-records) :currency "USD" - :meta (assoc-project projects name {:entity name})} - {:account "Liabilities:Payable:Accounts" - :amount (- (total insurance-records)) :currency "USD" - :meta (assoc-project projects name {:entity name})}]))) + employee-records)]] + [{:account "Liabilities:Payable:Accounts" + :amount (total witholding-records) :currency "USD" + :meta (assoc-project projects name {:entity name})} + {:account "Liabilities:Payable:Accounts" + :amount (- (total insurance-records)) :currency "USD" + :meta (assoc-project projects name {:entity name})}])) asset-postings [{:account "Assets:Citizens:Check1273" :amount (- (+ total-liabilities total-unemploy (total withholding-liability-postings))) :currency "USD" :meta {:entity "Paychex" :tax-implication "Tax-Payment"}}]