How to manage factoring

We came upon an unpleasant surprise when venturing to use alternative_payee on invoices.

For reference, the following issued was filed and closed without resolution.

The use case is traditional Factoring

Indicating the alternative_payee party is, in this use case, a contractual obligation (for both suppliers and by the company for the clients ‘subrogated’). In fact,

In my opinion and experience, for corporate and, importantly, fiscal reasons, the invoice and related primary invoice moves to the GL are with the original supplier/client (‘in’: party == supplier, ‘out’: party == client) as usual.

But the problem encountered is that instead of creating the normal invoice move, the alternative payee is indicated in the invoice move, which poses a number of problems.

On the invoice, the most important element is the bank account, plus some legal text concerning the subrogation.

There can be numerous moves made following the accounting life of these invoices, in particular for those on a cash-basis (where payment date by the client is the event determining whether VAT is due).

I came across this site (in French) that gives some examples of the various forms available from one such Factor, including accounting move summaries

Perhaps there needs to be others mechanisms put in place… observations?


A post was split to a new topic: How to manage subcontracting clauses

This is one example of many of the moves involved for a client invoice under subrogation to a Factor.
Other examples, for example subrograting to one or more suppliers/subcontractors are much simpler.

In all cases, the client invoice has the standard moves, the printed invoice needing eventually the mandatory subrogation text obliged by contract with the Factor indicating specifics for payment.

Only upon acceptation of the invoice by the Factor is the transfer made to the Factors account (in the French PCG typically under a special account).

The subsequent moves depend on the contract, and maybe flat fees… in this example, a 20% guarantee reserve is established, with a fixed commission. As the finance charges are typically variable, the example treats them separately from the guarantee reserve, which is established and managed in contract specific manners (either permanent or punctual).

As to specific handling, I believe that if alternative payees are set at invoice time, this permits indicating on the invoice information necessary as to the payments to be made. Draft moves to the special account(s) could also be generated.

It is worth to mention that the analogous supplier invoice with a subrogated payees is very similar to the client side, only using the first two lines of the example.

Naturally, the supplier invoice must have its initial moves on the supplier auxiliary account, but the subrogation indicated (or even notified later) can generate a delegated move to the special account such as above, maintaining maturity dates but now involving the bank information of the surrogate party.

I repeat, in no means should the auxiliary account on the initial invoice (client nor supplier for that matter) be other than the invoiced(invoicing) party, the alternative payee is necessarily a secondary move.

For information, we’ve only been able to get delegation to work correctly with a customer invoice after posting (for that matter, ditto for supplier invoices).

To do so, the easiest manner was to go to the invoices ‘other information’ tab and open the generated move.
Right-clicking on the receivables line (having the ‘party’), it is possible to select ‘Delegate lines’.

Once the Factor or delegated party and journal are selected with the description filled in, we get into a form where the delegation account and accounting date can be corrected.

Saving, and going back to the invoice form, now the alternative payee is indeed indicated, along with the ‘delegation’ move indicated in ‘additional moves’.

IMHO, alternative payee should always use this ‘additional move’, in order to prevent fudging the invoice generated move ‘party’, a serious accounting blunder.

BTW We’ve made read-only the means to add an alternative payee directly in a non-posted invoice until doing so indeed always creates this additional move preserving the invoiced party in the invoice move.

Difficulty with direct payments - wishlist item

There is a case where the client pays directly and not via the alternate payee (the Factor).

There are two approaches:

  1. immediate transfer the payments received to the Factor, and proceed more or less as normal
  2. keep the payment, inform the Factor who will de-finance the invoice, which means cancelling the delegation move.

In this last case, it appears the cancellation move is considered as a ‘payment’.

It would probably be an great improvement to check the origin on it and, being the cancellation of the delegation move, place it in ‘additional moves’ and not in payments.

Additional moves already displays the ‘description’ field, but it would be useful to display the amounts as well.

Difficulty with client payments to the Factor – in particular where ‘cash’ tax basis is used

The general case with delegated (and subrogated) client invoices is that invoices are reconciled at the moment the delegation (or subrogation) action is done.

As noted in the diagram above, any guarantees needed will have the appropriate move made, and the remaining drawing rights will be moved to the appropriate account where the advanced funds can be stated when received from the Factor.

Upon customer payment, the only move remaining might be the cancelling of the guarantees, but not necessarily right away. Therefore, there is currently no action that will correctly mark paid the invoice at the correct date.

So it seems there needs to be a mechanism put in place for Tryton permitting to enter the date and amount of the customer payment made, which is mandatory [in France] for those who are under ‘cash’ tax basis.

Such a mechanism should also be capable of updating the tax line permitting coherent VAT declarations.

Anybody already try to tackle this problem or has already come across a usable mechanism?