31
Brotherton Accounting
steffeydev edited this page 2025-02-26 20:58:45 +00:00

Current State

How they handle AR (for SNW/Lowe/NUCO):

  • Estimate: "standard employees" create estimates in QBO and send to customer
  • Invoices: "standard employees" create invoice in QBO and send to customer
  • Payments
    • Customer can pay through QBO-generated page, which applies directly to invoice.
    • SNW customers can also pay through woocommerce (via stripe) or square (for phone payments), and Lowe can also pay through square. Square and woo payments are exported as CSV and manually entered into QBO
    • Customers can pay through check
  • Weekly they transfer from QBO to QBD (Courtney for SNW, Kayla for NUCO, and Candy for Lowe)
    • Filters QBO interface to invoices for last week. Missing invoice number in series means there is a credit memo (refund invoice)
    • Enters invoices and credits into QBD manually, but does not apply credit yet. Invoice is entered with only general numbers, less detailed than QBO.
    • Reconciles total sales number for week
    • Filter QBO interface for payments for last week, and enter them into QBD. Also apply credit memos
  • Checks and credit cards are handled at different times, but eventually are entered as payments into both QBO and QBD. They may be batched and recorded into QBD as lump sums.

Company Structure:

  • All companies are accrued, but they report the sales tax on a cash basis

ERPNext Design

  • Custom report for transferring journal entries from ERPNext to QB at the end of each month. To start will just be shown in the UI, in the future we may add a custom CSV export that formats the entries in a way that is easy to import into QB Desktop.
    • DocType: QB Export, fields for start and end date which default to the start and end of the last month, the company (default based on user?), and a table field for QB Export Entry. Server script that runs after save that loads the GL Entries in the date range and adds QB Export Entry items to the table
    • DocType: QB Export Entry, fields for account name, credits, and debits
  • A "locking" mechanism to prevent modifying entries in the past month, which will be a server script on the before save action of Sales Invoice and Payment Entry that throws an error if the posting date of the entity is in a previous month and the current user does not have a custom override permission
  • A custom Sales Tax Liability report
    • Look at all payment entries for period, find out how much is tax by referencing the attached invoice, then calculating that final number per tax template

ERPNext Setup

  • We need to create accounts for each company
    • "Customer Deposit" under "Current Liabilities" of type "Receivable"
    • "Undeposited Funds" under "Current Assets" of type "Cash"
  • They can specify the default income account on an item, or by editing the item on the invoice to specify the income account for that item. If they do neither, the income account will be "Sales" by default (or whatever is set as the "Default Income Account" in the company settings).
  • For each company, the "Default Cash Account" should be changed from "Cash" to "Undeposited Funds"
  • For each company, go to the company settings > Accounting and check "Book Advance Payments in Separate Party Account", then select "Customer Deposit" as the "Default Advance Received Account". This will change the "Account Paid From" field on a payment linked to a sales invoice when a payment entry is first created/saved.
  • Under "Mode of Payment" doctype, select each type and set the default account to "Undeposited Funds" for each company. That way, nomatter what mode of payment is selected for the payment entry, the "Account Paid To" will be set to "Undeposited Funds". Customize the mode of payment list to only the modes that are actually accepted for each company.

ERPNext Flow

  • Staff creates sales order and specifies "Sales Taxes and Charges Template" based on customer address.
  • Customer may make pre-payment. When the payment comes in, the sales order list can be filtered to find the correct sales order, then the payment can be created from the sales order.
    • Ledger: Credited to "Customer Deposit" and debited to "Undeposited Funds"
  • Staff creates sales invoice from existing sales order or from scratch. They will specify the income account for each item, if it is not already set on the item. They should click "Get Advances Received" if there could have been or they know there was an advanced payment, to link that payment to this new invoice.
    • Ledger: Credited to income accounts and debited to "Debtors". If there is prepayment linked, then also credit "Debtors" for the pre-payment amount and credit "Customer Deposits".
  • When payment comes in
    • They want to be able to lookup invoices by customer name, invoice number, invoice date, or invoice amount. If they start on the invoice list, they can find invoices by those criteria using the quick filters, and then once they pull up the invoice they can create the payment off of that.
      • This could also be done by starting on the invoice and fetching outstanding orders and invoices, but that only links by customer, and doesn't allow searching by amount.
    • Once they find the invoice, they should create a payment off the invoice
    • Ledger: Credit "Debtors" and debit "Undeposited Fund"
    • Candy deals with stacks of checks at at time, so the process for entry needs to be streamlined. In the future, I could add a "Check Entry" doctype that looks up the invoice based on various fields and then creates the check payment entry directly, with less clicks.
  • At end of month, accounting staff need:
    • Trial balance report, so that journal entries can be added to QB
    • Sales Tax Liability report, see spreadsheet for example of QB report equivalent. Should be done on cash basis. Data comes from the addresses of the customers on the invoices.
    • To move funds from undeposited funds to correct bank accounts, using the new Deposit Payments report
      • This requires the custom Create Deposit report, the Create Deposit API endpoint, and a new "custom_journal_entry" field on Bank Transaction doctype
      • After they group all the payment entries into bank transactions, they can click a button on the Deposit Payments report to review the bank transactions and associated journal entries. Then they will submit each bank transaction, which should auto-submit the journal entry. Canceling a bank transaction should cancel the associated journal entry.
      • They may want to print out a bank transaction. The print view should have a table with the check ref number and mode.

ERPNext Permissions

  • Only Kayla, Candy, and Courtney should have permission to create payment entry not using a payment request
  • All users should be able to create sales orders, sales invoices, and payment requests

Pending questions / unknowns

  • How does the current ERPNext flow for entering cash/checks work for them when the customer pays more than they owe, thus resulting in a credit on the account?
  • For Deposit Payments process:
    • What should the Posting Date be for new journal entry?
    • Should the bank transaction and journal entry be made in draft mode, or submitted?
    • Do they want a reference number or remarks field in the popup so that we can include that on the bank transaction and journal entry?

TODO

  • Add check ref number & mode to bank transaction print view