I’ve just started assessing ERPNext to see if it’s a good prospect for us, and I noticed the Payment Terms as one place that could use expanding. I would love to do some development work, but I need to first determine if the core system will work for us and learn how to properly develop with frappe.
I’m not sure if this is useful, but just comparing it to other ERPs (2 in front of me at the moment) and accounting systems I’ve used, this is a quick synopsis of concepts that would probably be useful to a large portion of users.
Currently, terms are just set in the customer/supplier record, and if you choose “Fixed Days” you are allowed to enter the number of days. The only other option is “Last Day of Next Month”.
While betabrain’s scenario is very specific and complicated, it could probably be accommodated with a little more flexibility.
Ultimately, this will probably need to be master table data, instead of just a field or two in the customer or supplier. (But of course I’m not fully familiar with the system yet, so there could be alternate ways to achieve this…)
Basic ideas for a design to structure the terms:
A payment_terms table, with a terms code that’s referenced by the customer/supplier records.
Within the payment terms table, at first glance, there should be something like:
- terms code/name - (referenced by the customer or supplier record)
- sequence - (when needed for complex terms) (this would be the second half of the aggregate primary key)
- terms description
- method of calculation - (moved from customer/supplier)
** fixed days
*** terms days (if fixed days is chosen)
** day of month - (better option than just “Last Day of Next Month”)
*** terms day (1-31)(if day of month is chosen) - percent due - (100% most of the time, as a default, but could be 20% sequence #1, 50% seq #2, etc as user example mentioned…
If “day of month” is chosen, either the system must always presume the following month, or some users may prefer a more flexible way such as including a
- cutoff day of month - To indicate how to evaluate whether to make the due date this month or next.
For example, if the order was made on July 8th, and the “day of month” terms was set to the 31st, instead of that giving them the rest of July and all of August to pay, a cutoff day of the 12th would indicate that if the order was placed before then, to make the due date the 31st of the current month (July).
If ERPNext doesn’t include functionality to accommodate terms discounts, that could also be included in the sequence, with:
- days allowed - # of days within which the customer would receive the terms discount.
- percent discount
- discount calculation method (optional fancy feature)
Betabrain’s request about calculating terms from milestones might require a little more, though.
20% in advance would have to prevent shipment (and most likely production - if necessary) before payment is received.
50% when shipped is easy I think- just 0 day terms, really. Terms should already be based off of ship date.
20% when delivered is easy if using some method of estimating the delivery date, but could be very complicated otherwise.
Just seeing if this helps to spark some thought on a clean way to implement payment terms.
Travis-