7 Configuring Write-Offs and Write-Off Reversals

This chapter provides an overview of the Oracle Communications Billing and Revenue Management (BRM) write-offs and the write-off reversal feature. It also tells you how to configure BRM for write-offs and write-off reversals and how to enable automatic write-off reversals for receipt of payment.

For more information on payments and accounts receivable adjustments, see the following topics:

For information on writing off accounts, bills, or bill items, see the Customer Center Help.

For information on reversing payments, see the Payment Tool Help.

For information on customizing write-off reversal rules, see "Writing Off Debts and Reversing Write-Offs with Your Custom Application".

About Write-Offs

A write-off removes an accounts receivable (A/R) amount that your company considers unrecoverable because the customer will never pay. CSRs can write off an A/R account with or without its nonpaying child subordinates, a bill, or a bill item that meets certain conditions.

For write-offs, you always write off the entire account, bill, or bill item.

Important:

  • Before you write off an account or bill unit, ensure that all items have been billed and that no pending or unbilled items for the account or bill unit remain.

  • To ensure that you can reverse a write-off on an account, the account status must be inactive before you write off the account.

About Write-Off Reversals

Write-off reversals enable you to re-allocate payments to accounts and bill units that were written off due to unpaid balances. Unpaid bills and item charges are generally written off as unrecoverable debt, but this feature enables the amount written off to be recovered and allocated to open bills and items of an account.

You reverse the write-off on an account or bill unit by calling the write-off reversal opcodes.

For more information, see "Writing Off Debts and Reversing Write-Offs with Your Custom Application".

About Automatic Write-Off Reversals during Payment Collection

You can configure BRM to automatically reverse a write-off on an account or bill unit when a payment is received for a written-off account or bill unit. BRM verifies that the write-off flag and write-off item are set in the account's /profile/writeoff object. If so, the following occurs:

  1. The write-off flag in the account's /profile/writeoff object is set to 2, which is the reversed state.

  2. All written-off bills and bill items are opened so the funds can be allocated.

  3. The /event/billing/writeoff/billinfo balance amount is transferred to the original bill or bill item and then set to 0.

  4. The paid bills and items are closed.

  5. The write-off flag in the account's /profile/writeoff object is reset to 1, which is the written-off state.

    Important:

    To ensure that you can reverse a write-off on an account, the account status must be inactive before you write off the account.

For information about customizing write-off reversal rules, see "Writing Off Debts and Reversing Write-Offs with Your Custom Application".

About Reversing a Payment Applied to a Written-Off Account or Bill Unit

When a payment that was applied to a written-off account or bill unit is reversed, the previously paid balance is returned to the account balance and then written off again. This enables the original written-off amount to be reestablished as unrecoverable debt.

Table 7-1 shows an example where multiple payments are received for an account with a $100 write-off amount.

Payment 1 is $40 (underpayment), so the $100 write-off amount is reversed and $60 is written off.

Payment 2 is $100 (overpayment); therefore, the $60 write-off amount is reversed, and $40 excess (credit) amount is left unallocated in the account.

Table 7-1 Reversing Payment Applied to a Written-Off Account

Transaction Due Amount Unrecovered Debt Recovered Debt Bank Deposit

Account balance

100

NA

NA

NA

Initial write-off

-100

100

NA

NA

Write-off reversal

100

NA

-100

NA

Payment

-40

NA

NA

40

Re–write-off

-60

NA

60

NA

Write-off reversal

60

NA

-60

NA

Payment Reversal

40

NA

NA

-40

Re–write-off

-100

NA

100

NA

Net Result

0

100

0

0


Important:

If a subsequent payment is received during this operation, or if an A/R action is performed, the account may not be restored to its previous state. This occurs if any open unallocated items are in the account at the time of the reversal.

If Payment 1 is reversed, the write-off is not reversed because there is no longer a written-off amount on the account: instead, a credit in the account balance remains. To avoid this scenario, customize the PCM_OP_BILL_POL_REVERSE_PAYMENT policy opcode to handle the allocation and write-off. Or allocate the credit balance to any open bills or bill items, and then manually write off the account.

For information about customizing write-off reversal rules, see "Writing Off Debts and Reversing Write-Offs with Your Custom Application".

About Overpayment and Underpayment Allocation

After a payment is posted to a written-off account or bill unit, the handling of the bill or bill items is determined by the amount of the payment: exact payment, overpayment, or underpayment. Exact payments are allocated to the appropriate bill and bill items, which are closed after being paid, and the account's write-off flag is not reset to write-off.

Overpayments and underpayments are allocated according to the rules defined in your business policies:

  • In general, if the payment amount is more than the amount written off, the paid bills and bill items are closed and the remaining amount is left unallocated in the account. The account or bill unit is left open and the account's write-off flag is not reset to write-off.

  • If the payment amount is less than the amount written off, the payment is fully allocated, and the open bills and bill items are closed again. The remaining amount is written off and the account's write-off flag is reset to write-off.

  • If an underpayment fails and you reverse it, both the amount that was written off (due to the underpayment) and the amount that was removed by the payment are returned to the account or bill unit. This restores the account balance to its original state so the entire amount can be written off again. This corresponds to the initial write-off amount for the account or bill unit.

    For example, if your company writes off a $50 unpaid balance on an account or bill unit and 6 months later receives a payment of $45 for that account or bill unit, the $50 write-off is returned to the account or bill unit so that the payment can be applied toward the balance. After the payment amount is subtracted, the remaining $5 balance is written off again.

    Later, if the $45 payment fails, the following steps occur when you reverse the payment:

    1. The $5 write-off amount is returned to the account balance.

    2. The $45 balance that was removed by the initial payment is returned to the account balance.

    3. The $50 account balance is written off again.

  • If any open unallocated items are in the account at the time of the reversal, the re–write-off on the account does not occur. You must first allocate and close the open items, or customize the PCM_OP_BILL_POL_REVERSE_PAYMENT policy opcode to allocate and close the open items, before performing the reversal.

    For information on customizing write-off reversal rules, see "Writing Off Debts and Reversing Write-Offs with Your Custom Application".

Overview of the Write-Off Reversal Process

The following steps occur when a payment is made for a written-off amount. It also describes the steps that occur if the original payment must be reversed and the paid amount must be written off again:

  1. An account or bill unit contains an unpaid balance that was written off as unrecoverable, and a payment is received for the written-off amount.

  2. If the write-off reversal feature is enabled, the write-off on the account or bill unit is reversed.

  3. The written-off balance is transferred back to the account or bill unit.

  4. The payment is applied to the account or bill unit and all paid-off bill items are closed.

  5. Any remaining balance on the account or bill unit (for an underpayment) is written off again.

  6. If the payment fails, a reversal of the payment is submitted.

  7. BRM verifies that the original payment was applied to the written-off account or bill unit.

  8. The second write-off on the account or bill unit is reversed, if one exists (when the write-off reversal payment was an underpayment).

  9. Any bill items closed by the original payment are reopened and the amount is transferred back to the account or bill unit.

  10. The original payment is reversed.

  11. After the payment reversal, if the account or bill unit has a balance due, the amount is written off again to restore the account balance to 0, and the account or bill unit status is reset to write-off.

Configuring BRM for Write-Off Reversals

Configuring the write-off reversal functionality involves performing the following tasks:

Defining Reason Codes for Write-Off Reversals

You define additional reason codes in the reasons.locale file for the write-off reversal event and the re–write-off of an account. You use the Credit Reasons domain (version 8) for write-off reversal reasons, and you should map the reason code to the /event/billing/writeoff G/L ID, as shown in the following sample:

DOMAIN = "Reason Codes-Credit Reasons" ;
STR
     ID = 4 ;
     VERSION = 8 ;
     STRING = "Write-off for Auto-writeoff reversal feature" ;
     EVENT-GLID
       "/event/billing/writeoff"     110;
     EVENT-GLID-END
END

Note:

If you add your own reason codes to the reasons.locale file, you should use IDs above 100,000.

To define reason codes for write-off reversals, you edit the reasons.en_US sample file in the BRM_Home/sys/msgs/reasoncodes directory. You then use the load_localized_strings utility (see "load_localized_strings" in BRM Developer's Guide) to load the contents of the file into the /strings objects.

When you run the load_localized_strings utility, use the following command:

load_localized_strings reasons.locale

Note:

If you are loading a localized version of this file, use the correct file extension for your locale. For a list of file extensions, see "Locale Names" in BRM Developer's Guide.

Caution:

The load_localized_strings utility overwrites the existing /config/map_glid object. If you are updating this object, you cannot load new G/L ID maps and reason code scopes only. You must load complete sets of data each time you run the load_localized_strings utility. This is also true when using the /strings object, but only if you specify the -f parameter. Otherwise, the load_localized_strings utility appends the new data to the object.

For information on loading the reasons.locale file, see "Loading Localized or Customized Strings" in BRM Developer's Guide. For information on creating new strings for this file, see "Creating New Strings and Customizing Existing Strings" in BRM Developer's Guide.

Mapping G/L IDs to Write-Off Reversal Events

You can track funds you recover from write-off reversals in your general ledger (G/L) system. In addition, you can track the following events that occur if the payment fails and must be reversed:

  • If the payment was an underpayment, the write-off reversal event that occurred for the second write-off, which was required to write off the unpaid balance on the account

  • The reversal of the original payment that failed

  • The re–write-off of the debt on the account

Depending on your G/L configuration, you can create single or separate G/L entries to track the reversed written-off amount and associated tax amount in respective G/L accounts.

You map custom G/L IDs for write-off reversal events by editing and loading the reasons.locale file. This file contains the reason code definition that is assigned to the G/L ID of the /event/billing/writeoff event.

To load a customized reasons.locale file into the BRM database, use the load_localized_strings utility. This utility loads the event-to-G/L ID mapping into a /config/map_glid object in BRM. The G/L ID -to-event mapping is defined in the pin_glid file.

You map custom G/L IDs when you define your reason codes for the write-off reversal event. See "Defining Reason Codes for Write-Off Reversals".

For more information about general ledger data, see "About Collecting General Ledger Data" in BRM Collecting General Ledger Data.

Enabling Automatic Write-Off Reversals during Payment Collection

You can configure BRM to reverse write-offs on accounts and bill units automatically when payments are received for written-off amounts. This enables the payment to be posted to the accounts and bill units and the written-off amount to be recovered immediately during payment processing.

You enable this feature by modifying a field in the ar instance of the /config/business_params object created during BRM installation. As part of payment allocation and billing, BRM reads this object to determine whether write-off reversals can occur automatically when payments are received.

You modify the /config/business_params object by using the pin_bus_params utility. See "pin_bus_params" in BRM Developer's Guide.

To enable automatic write-off reversals during payment collection:

  1. Run the following command, which creates an editable XML file for the BusParamsAR parameter class:

    pin_bus_params -r BusParamsAR bus_params_AR.xml 
      
    

    This command creates the XML file named bus_params_AR.xml.out in your working directory. If you do not want this file in your working directory, specify the full path as part of the file name.

  2. Search the XML file for the following line:

    <AutoWriteOffReversal>disabled</AutoWriteOffReversal>
      
    
  3. Change disabled to enabled.

    Caution:

    BRM uses the XML in this file to overwrite the existing /config/business_params object for the ar instance. If you delete or modify any other parameters in the file, these changes affect the associated aspects of the BRM billing configuration.
  4. Run the following command, which loads the change into the /config/business_params object:

    pin_bus_params bus_params_AR.xml 
      
    

    Run this command from the BRM_Home/sys/data/config directory, which includes support files used by the utility. To run it from a different directory, see "pin_bus_params" in BRM Developer's Guide.

  5. Read the object with the testnap utility or Object Browser to verify that all fields are correct.

    For general instructions on using testnap, see "Using testnap" in BRM Developer's Guide. For information on how to use Object Browser, see "Reading Objects by Using Object Browser" in BRM Developer's Guide.

  6. Stop and restart the Connection Manager (CM). For more information, see "Starting and Stopping the BRM System" in BRM System Administrator's Guide.

  7. (Multischema systems only) Run the pin_multidb script with the -R CONFIG parameter. For more information, see "pin_multidb" in BRM System Administrator's Guide.

For information on how to customize the write-off level to search for and to be available for reversal during payment processing, see "Writing Off Debts and Reversing Write-Offs with Your Custom Application".

Specifying the Level of Write-Offs for Reversals

By default, BRM is configured to perform write-off reversals at the account level when payments are received.

You can configure BRM to perform write-off reversals at the bill-unit level when payments are received for a written-off bill unit. When you configure BRM to perform write-off reversals at the bill-unit level, BRM reverses write-offs at both the bill-unit level and the account level.

You enable this feature by modifying a field in the ar instance of the /config/business_params object created during BRM installation. As part of payment allocation and billing, BRM reads this object to determine whether write-off reversals can occur on an account or bill unit when payments are received.

You modify the /config/business_params object by using the pin_bus_params utility. For more information on this utility, see "pin_bus_params" in BRM Developer's Guide.

To specify the level of write-offs for reversals:

  1. Go to the BRM_Home/sys/data/config directory.

  2. Run the following command, which creates an editable XML file from the ar instance of the /config/business_params object:

    pin_bus_params -r BusParamsAR bus_params_AR.xml
    

    This command creates the XML file named bus_params_AR.xml.out in your working directory. To place this file in a different directory, specify the path as part of the file name.

  3. Open the bus_params_AR.xml.out file.

  4. Search for the following line:

    <WriteOffLevel>account</WriteOffLevel>
      
    
  5. To specify the level of write-offs for reversals to occur at the bill-unit level, change account to billinfo.

  6. Save the file as bus_params_AR.xml.

  7. Go to the BRM_Home/sys/data/config directory, which includes support files used by the pin_bus_params utility.

  8. Run the following command, which loads this change into the /config/business_params object:

    pin_bus_params PathToWorkingDirectory/bus_params_AR.xml
      
    

    where PathToWorkingDirectory is the directory in which bus_params_AR.xml resides.

    Caution:

    BRM uses the XML in this file to overwrite the existing ar instance of the /config/business_params object. If you delete or modify any other parameters in the file, these changes affect the associated aspects of the BRM A/R configuration.

    Note:

    To run this command from a different directory, see "pin_bus_params" in BRM Developer's Guide.
  9. Read the object with the testnap utility or Object Browser to verify that all fields are correct.

    See "Using testnap" in BRM Developer's Guide for general instructions on using the testnap utility. See "Reading Objects by Using Object Browser" in BRM Developer's Guide for information on how to use Object Browser.

  10. Stop and restart the CM. For more information, see "Starting and Stopping the BRM System" in BRM System Administrator's Guide.

  11. (Multischema systems only) Run the pin_multidb script with the -R CONFIG parameter. For more information, see "pin_multidb" in BRM System Administrator's Guide.

Writing Off Debts and Reversing Write-Offs with Your Custom Application

For background information, see "About Writing Off Bad Debt".

Write-offs remove A/R amounts that your company determines will never be paid. Write-off reversals allocate payments to accounts, bills, bill units, and items that have been previously written off. Write-offs are a standard feature of your BRM system. The ability to reverse a write-off is an optional feature that you must enable and configure. For information on enabling and configuring write-off reversals, see "Enabling Automatic Write-Off Reversals during Payment Collection" and "Configuring Write-Offs and Write-Off Reversals".

About Initiating Write-Offs

Use the following opcodes to perform write-offs:

  • PCM_OP_AR_ACCOUNT_WRITEOFF. Writes off all A/R bill units for an account and each bill unit's subordinate nonpaying children. To have your client application initiate an A/R account write-off, it should call this opcode and the input flist should specify the account POID.

  • PCM_OP_AR_BILLINFO_WRITEOFF. Writes off an A/R bill unit for an account. To have your client application perform an A/R bill unit write-off, it should call this opcode with the bill unit specified in the input flist.

  • PCM_OP_AR_BILL_WRITEOFF. Writes off a bill. To have your client application perform a bill write-off, it should call this opcode with the bill specified in the input flist.

  • PCM_OP_AR_ITEM_WRITEOFF. Writes off a bill item. To have your client application perform an item write-off, it should call this opcode with one or more items specified in the input flist.

    Important:

    • Before you write off an account or bill unit, ensure that all items have been billed and that there are no pending items for the account or bill unit.

    • To ensure that you can reverse a write-off on an account, the account status must be inactive before you write off the account.

How BRM Performs Write-Offs

Though you can initiate a write-off using opcodes for the account, bill unit, bill, or item level, most of any write-off is actually performed through the PCM_OP_AR_ITEM_WRITEOFF opcode. This opcode is either:

  • Called by the PCM_OP_AR_BILLINFO_WRITEOFF and PCM_OP_AR_BILL_WRITEOFF opcodes when you perform an account-level, bill-unit level, or bill-level write-off

    Note:

    PCM_OP_AR_ACCOUNT_WRITEOFF, PCM_OP_AR_BILLINFO_WRITEOFF, and PCM_OP_AR_BILL_WRITEOFF perform several initial steps before calling PCM_OP_AR_ITEM_WRITEOFF. For more information, see "About Account Write-Offs", "About Bill Unit Write-Offs", and "About Bill Write-Offs".
  • Called independently when you perform an item-level write-off

    Note:

    PCM_OP_AR_ITEM_WRITEOFF performs write-offs on pending items with nonzero balances only.

PCM_OP_AR_ITEM_WRITEOFF does the following:

  1. Prepares the charges for the /item object (for example, /item/misc).

  2. Calls the PCM_OP_BILL_POL_ITEM_VALID_WRITEOFF policy opcode to validate the changes.

    For information on how to customize write-off validation, see "Customizing Write-Off Validation".

  3. Creates the new write-off item (/item/writeoff).

    For an account or bill write-off, the item total is the sum of all item charges in the account or bill.

  4. Creates the /event/billing/writeoff/item object.

    The balance impact of the write-off event is the sum of all amounts due for all open items in the bill unit.

    • If an account is written off, an /event/billing/writeoff/account object is created for the account and an /event/billing/writeoff/billinfo object is created for each bill unit.

    • If a bill is written off, an /event/billing/writeoff/bill object is created.

  5. If you have specified to store the tax amount of the write-off in a separate event, PCM_OP_AR_ITEM_WRITEOFF creates one of the following event objects:

    • /event/billing/writeoff/tax_billinfo

    • /event/billing/writeoff/tax_bill

    • /event/billing/writeoff/tax_item

    For information on tax treatments for write-offs, see "About Taxes for Write-Offs".

  6. Calls the PCM_OP_BILL_TRANSFER opcode to transfer funds to the A/R bill.

    Multiple transfer events (/event/billing/item/transfer) are created to move the credit from the write-off item to all the open items for the bill unit.

  7. If the item has no due or disputed amount, PCM_OP_AR_ITEM_WRITEOFF closes the item.

  8. Writes the modified /item object.

When this process is complete, all the open items, including the write-off item, are closed. The G/L ID for the account-level write-off is assigned by calling the PCM_OP_ACT_POL_SPEC_GLID policy opcode, which assigns the G/L ID for the write-off event (/event/billing/item/writeoff).

If write-off reversal is enabled, it stores the write-off item in the write-off profile object of the account.

Important:

  • Before you write off an account or bill unit, ensure that all items have been billed and that no pending or unbilled items for the account or bill unit remain.

  • To ensure that you can reverse a write-off on an account, the account status must be inactive before you write off the account.

About Account Write-Offs

To write off an account, the PCM_OP_AR_ACCOUNT_WRITEOFF opcode writes off all the bill units associated with the account.

This opcode performs the following error checks before performing the item-level write-offs for the account:

  • Ensures the due amount is not zero. Bill units with zero due are fully paid and do not need to be written off.

  • Ensures that there are no partially allocated items (for example, a refund must be allocated before the write-off is performed).

PCM_OP_AR_ACCOUNT_WRITEOFF then calls PCM_OP_AR_BILLINFO_WRITEOFF to write off all the open items for each bill unit of the account.

The /event/billing/writeoff/account event is created to record the account write-off. The /event/billing/writeoff/billinfo event is created to record each bill unit write-off, and /event/billing/writeoff/tax_billinfo is created for each bill if a separate event for tax is required. A separate tax event can be generated by passing the PIN_FLD_FLAG as PIN_BILL_WRITEOFF_TAX in the input flist.

Your custom application should call PCM_OP_AR_ACCOUNT_WRITEOFF, not PCM_OP_AR_BILLINFO_WRITEOFF, to write off all bill units in an account.

About Bill Unit Write-Offs

To write off a bill unit, PCM_OP_AR_BILLINFO_WRITEOFF performs the following error checks before performing the item-level write-offs for the bill unit:

  • Ensures the due amount is not zero. Bill units with zero due are fully paid and do not need to be written off.

  • Ensures that there are no partially allocated items (for example, a refund must be allocated before the write-off is performed).

PCM_OP_AR_BILLINFO_WRITEOFF then calls PCM_OP_AR_ITEM_WRITEOFF to write off each of the bill items in the bill unit.

When a bill unit is written off, a write-off item (/item/writeoff) is created. The total for this item is the sum of the balance due from all the open items for the A/R bill units and its nonpaying child subordinate bill units. This is the balance impact of the write-off. The write-off decreases the account balances and the transfer event moves the credit from the write-off item to the items being written off.

The /event/billing/writeoff/billinfo event is created to record a bill unit write-off, and the /event/billing/writeoff/tax_billinfo event is created for the bill unit if a separate event for tax is required. A separate tax event can be generated by passing the PIN_FLD_FLAG as PIN_BILL_WRITEOFF_TAX in the input flist.

About Bill Write-Offs

To write off a bill, PCM_OP_AR_BILL_WRITEOFF performs the following error checks before performing the item-level write-offs for the bill:

  • Ensures the due amount is not zero. Bills with a zero due are fully paid and do not need to be written off.

PCM_OP_AR_BILL_WRITEOFF then calls PCM_OP_AR_ITEM_WRITEOFF to write off each of the bill items in the bill.

When a bill is written off, a write-off item (/item/writeoff) is created. The write-off decreases the account balances associated with the specified bill, and the transfer event moves the credit from the write-off item to the item being written off.

The /event/billing/writeoff/bill event is created to record a bill write-off, and /event/billing/writeoff/tax_bill is created for the bill if a separate event for tax is required. A separate tax event can be generated by passing the PIN_FLD_FLAG as 1 in the input flist.

Flags You Should Use for Write-Offs

Set flags in the PIN_FLD_FLAGS field for the input flist when creating write-offs. You can include these flags in any of the write-off opcodes.

If the PIN_BILL_WRITEOFF_TAX flag is set, BRM creates a separate write-off event for taxes.

About Taxes for Write-Offs

To write off tax, BRM selects all the open items. For all open items, PCM_OP_AR_ITEM_WRITEOFF selects all events that point to these items, except for the tax events. After the events are selected, it calculates the sum of the total initial net and tax amount and groups the events based on tax rate. The write-off process starts with the lowest tax rate first and continues with the next lowest rate until it reaches the total write-off amount. The total write-off amount (VAT included) is the total due amount of the bill.

The following types of events are created for a write-off with tax:

  • A write-off event holding the total net amount of the write-off with a G/L ID for the net amount

  • A tax write-off event holding the VAT amount of the write-off with a G/L ID for tax amount

  • Transfer events to close all the remaining open items of the bill

You can use a CM pin.conf entry to select the distribution algorithm for taxes.

Customizing Write-Off Validation

You use the PCM_OP_BILL_POL_VALID_WRITEOFF policy opcode to customize how the item is validated for a write-off. By default:

  • The item must be open.

  • The write-off amount must be less than or equal to the amount due.

The PCM_OP_BILL_POL_VALID_WRITEOFF policy opcode is called by PCM_OP_AR_ITEM_WRITEOFF. It checks the validity of field values before processing. Field values either pass or fail. If one field fails, the entire operation fails.

You can customize the validation criteria for the PCM_OP_BILL_POL_VALID_WRITEOFF policy opcode by modifying the policy source file. Changing a result from PIN_BOOLEAN_FALSE to PIN_BOOLEAN_TRUE enables the specified field value to pass. Changing a result from PIN_BOOLEAN_TRUE to PIN_BOOLEAN_FALSE causes the specified field value to fail.

About Initiating Write-Off Reversals

Write-off reversals are initiated when PCM_OP_PYMT_COLLECT encounters a payment for an account or bill unit that has been written off. PCM_OP_PYMT_COLLECT runs automatically as part of the payment collection process or can be called manually. PCM_OP_PYMT_COLLECT calls the write-off reversal opcode to perform the write-off reversal.

Note:

Automatic write-off reversals are an optional feature of BRM and must be enabled. For information on enabling automatic write-off reversals, see "Enabling Automatic Write-Off Reversals during Payment Collection".

The following opcodes perform the actual reversal:

  • PCM_OP_AR_REVERSE_WRITEOFF: This opcode reverses the write-off and opens the original bill items so that the payment can be allocated.

    Note:

    Write-off reversals should only be performed automatically; you should not call PCM_OP_AR_REVERSE_WRITEOFF directly.
  • PCM_OP_BILL_POL_REVERSE_PAYMENT: This policy opcode writes off an account that was previously written off, but which then received a payment that reversed the original write-off. For example, if a payment that reversed the write-off of an account is determined to be fraudulent, the account will again be written off.

How BRM Reverses Write-Offs

Write-off reversals are performed by PCM_OP_AR_REVERSE_WRITEOFF. This opcode is called by PCM_OP_PYMT_COLLECT.

Important:

If you want a separate event to record the tax amount, set the PIN_BILL_WRITEOFF_TAX flag in the input flist.

Note:

Write-off reversals should only be performed automatically; you should not call PCM_OP_AR_REVERSE_WRITEOFF directly.

PCM_OP_AR_REVERSE_WRITEOFF performs the following tasks:

  1. Validates that the item in the input flist is a written-off item.

    If there are no written-off items in the input flist, PCM_OP_AR_REVERSE_WRITEOFF calls the PCM_OP_AR_POL_REVERSE_WRITEOFF policy opcode to retrieve the items that must be reversed.

  2. Opens the originally written-off items so that funds can be allocated.

  3. Creates a write-off reversal item (/item/writeoff_reversal).

  4. Creates a write-off reversal event (/event/billing/writeoff_reversal) that points to the write-off reversal item.

  5. Updates the account's balance.

  6. (Account-level write-off reversal only) Sets the value of the /profile/writeoff object's PIN_FLD_ITEM_OBJ field to NULL.

    PCM_OP_AR_REVERSE_WRITEOFF also sets the PIN_FLD_WRITEOFF_INFO flag in this object to the reversed state (2). If the payment is not equal to or greater than the sum of the written-off items, this flag is reset to the write-off state (1).

How BRM Reverses a Write-Off Reversal

When BRM receives a payment for a written-off account or bill unit, it reverses the account or bill unit write-off and then allocates the payment. If that payment must later be reversed (for example, if it fails financially), BRM must then write off the account or bill unit a second time.

This activity is performed by the PCM_OP_BILL_POL_REVERSE_PAYMENT policy opcode. This policy opcode is called by PCM_OP_BILL_REVERSE_PAYMENT, and the input flist for the policy opcode includes any flags passed by the standard opcode.

Important:

If any open unallocated items are present in the account or bill unit at the time of the reversal, the second write-off on the account does not occur. You can either allocate and close the open items before performing the reversal or customize this policy opcode to perform the task.

The PCM_OP_BILL_POL_REVERSE_PAYMENT policy opcode performs the following operations if the PIN_FLD_STATUS value on the input flist is PIN_PYMT_WRITEOFF_SUCCESS and if the transaction ID of the payment to be reversed is valid and applied to a written-off amount.

  1. Write off the account or bill unit again (if the original payment was an underpayment).

  2. Assign a reason code for the second write-off.

  3. Set the value of the PIN_FLD_FLAGS field to PIN_BILL_WRITEOFF_TAX to generate a separate tax event (if necessary), and assign a reason code for the tax event.

The PIN_FLD_INHERITED_INFO substruct in the output flist passes additional information to the calling opcode. If necessary, PCM_OP_BILL_REVERSE_PAYMENT returns any information in this substruct to the calling opcode.

Customizing Write-Off Reversals

You can customize two aspects of write-off reversals:

Customizing the Rules for Performing Write-Off Reversals

You can customize the PCM_OP_AR_POL_REVERSE_WRITEOFF policy opcode to implement additional rules for performing write-off reversals and allocating funds to written-off accounts and bill units. For example, you can perform the write-off reversal only for accounts that were written off during a specified time period or for a minimum amount.

The PCM_OP_AR_POL_REVERSE_WRITEOFF policy opcode is called by PCM_OP_AR_REVERSE_WRITEOFF during the write-off reversal process. This policy opcode supplies a list of write-off items that require reversal if that list is not provided by any other means. The input flist for the policy opcode includes any flags passed by the standard opcode. The PCM_OP_AR_POL_REVERSE_WRITEOFF policy opcode retrieves the write-off reversal items from the /profile/writeoff object.

Important:

If any open unallocated items are present in the account or bill unit at the time of the reversal, the second write-off on the account does not occur. You can either allocate and close the open items before performing the reversal, or customize this policy opcode to perform the task.

To enable automatic write-off reversal, see "Enabling Automatic Write-Off Reversals during Payment Collection".

Customizing Reversal of Payments Allocated to Written-Off Accounts

You can implement special processing for reversing payments that were applied to written-off accounts. To implement this processing, you customize the PCM_OP_BILL_POL_REVERSE_PAYMENT policy opcode to perform the following functions:

  • Assign custom reason codes.

  • Generate a tax event based on custom business policies.

  • Not reverse write-offs when a payment is applied.

  • Allocate any open items in the account before performing the reversal, before the reversal can occur. This is required if multiple payments are received, and a subsequent payment results in an overpayment.

    For example, if a $100 write-off amount is present for an account and a $40 payment is received, followed by a $90 payment, a $30 credit is left unallocated on the account.

    Because write-offs are valid only for debit items, if you reverse the $40 payment, BRM creates a $40 debit open item and a $30 credit open item, and the result would be a $10 unallocated balance. This is not possible; therefore, the unallocated credit of $30 must be allocated before the re–write-off can be performed.

    To enable automatic allocation, customize the PCM_OP_BILL_POL_REVERSE_PAYMENT policy opcode to call PCM_OP_BILL_ITEM_TRANSFER, and allocate the open credit amount to the available debit items before performing the re–write-off.