diff --git a/docs/financial/financialentities.md b/docs/financial/financialentities.md index cbb2e5812e182cb71ddba23cfa0ea561c7cbb57f..cc948bb83c6644aa83f16ff8be2b3c95b3929cd9 100644 --- a/docs/financial/financialentities.md +++ b/docs/financial/financialentities.md @@ -61,3 +61,25 @@ Negative payments (or refunds) will have the bank or processor account on the ** Financial items exist to track how much has been paid against the various line items within an order / contribution. In an accounting system this might be called credit-matching. + +Each line item will have one or more financial items denoting payments made against it. On creation of the order there +will be a financial item for each line item and an additional item for every fee amount. Where the preferred flow is used +this item will have a status of 'Unpaid'. (Note that for historical reasons this may not always be true but it's the goal - [see](https://github.com/civicrm/civicrm-dev-docs/issues/712)) + +When a payment is made it might either pay off the line items, or a specific line item, in full. In that case the line item +status is updated to Paid and an EntityFinancialTrxn record is created in the civicrm_entity_financial_trxn table linking +the line item to the payment and specifying the amount paid. + +If the line item is paid in part then the status is not updated and the EntityFinancialTrxn table specifies the portion +of the line item that has been paid by that payment. + +If the line items change then the items financial items have to be updated. Generally the rule is to alter the zero out the +old line item, reverse the financial items and then create a new line item with new financial items. However, this is not +always possible as there are some scenarios where the schema does not permit this. The has led to +adjustment line items being created in these cases. The issue is that the civicrm_line_item table has a unique index for +entity_table + entity_id + contribution_id + price_field_value_id + price_field_id. + +This means that if a line item with no price_field_values (ie a text / enter quantity line item) is altered it is not possible +to create a reversal line and a new line within the schema. The same problem occurs when changing a line item with price_field_values +BACK to a price_field_value it previously held. In both these scenarios the work around is to have more than one 'valid' financial_item +against the resulting line item with an 'adjustment' entry - ie an additional financial_item.