We have the dunning procedure to followup the payments but there is nothing after the last level of the dunning procedure.
In accounting once the dunning procedure ended, the receivable should become a bad debt. It means that the receivable amount is moved to another account (but it is still receivable and reconcilable).
After that on each period, the risk of the debt should be evaluated and deprecated accordingly. This is done by creating a move from bad debt (or specific deprecation account) to an allowance for doubtful accounts.
If the customer finally paid (maybe partially with a credit note), all the deprecation moves must be cancelled and the debt must be reconciled.
If the payment never happens, at one point the debt should be considered as uncollectible. In this case, the deprecation should also be cancelled and a new move based on the invoice move should created. It must cancel the bad debt and create lines for each product line using the uncollectible account and for each tax line replace the account by the credit account of the tax and reverse the amount.
On the accounting configuration, we define a bad debt, deprecation, allowance for doubtful and uncollectible accounts (and corresponding flags on account/template).
When all the receivable lines of an invoice has finish their dunning procedure, the receivable amount is moved to the bad debt account (if it is set). The receivable lines are reconciled and delegated to the bad debt line. The invoice has a litigation flag set (it can also be set manually).
A wizard is added on the litigated invoices which allow to post a deprecation move. Those moves are also stored in a Many2Many field on the invoice. The sum of the amount can not be greater than the amount of the invoice.
The litigation flag can be cancelled which trigger the cancellation of the deprecation moves.
A button allows to record the invoice as uncollectible, it creates the corresponding move and the state is set to uncollected.