I've supported several commercial billing systems (now semi-retired). Here is what I've seen: Transactions are permanent. Once created a transaction's data can't be modified Data may be added (ie closed date). Transactions include: invoices. payments refunds credits debits An invoice documents a sale. It does not contain balance or payments or previous due amt. An invoice contains line items (qty, desc, unit cost, ext cost, date)
A statement is a report containing period to date transaction data, (invoice, payment, credit). Since a statement is a report, typically a pdf, it can be created anytime. It is not the source record for anything. It is convenient to keep, particularly if it was sent to a client.
It is common to save the invoice as a pdf along with a record of to who and when it was sent. The systems I worked on were not required to be able to recreate an invoice pdf from data and have it match the original pdf.
The point is, the financial integrity is not dependent on statements So a modified statement can be sent in place of an invoice, That's what blesta does, it is a combination statement/Invoice, which is fine. Very typical.
I see over on Core 923 there is concern about associating contact info with an invoice and then having the contact info change. The few bits of data, like VAT and country that have to be "remembered" for an invoice are stored as part of the invoice record. (that or a versioning sysem for the contact info which adds complexity, Last system I worked on did that)
Lar