Pin_recover Not Working For -Recover_payment Option (Doc ID 973450.1)

Last updated on SEPTEMBER 26, 2016

Applies to:

Oracle Communications Billing and Revenue Management - Version 7.3.1.0.0 to 7.3.1.0.0 [Release 7.3.1]
Information in this document applies to any platform.
Checked for relevance on 10-Feb-2012.
Checked for relevance on 26-Dec-2014.

Symptoms

Problem Description:

Executing "pin_recover -recover_payment" is unable to recover the payments for failed credit card and direct debit transactions.


Steps to Reproduce

To simulate the payment failure, the following steps are taken:

0a.  Execute the command: "(cd $PIN_HOME/apps/pin_billd && pin_collect -active -pay_type 10003 -vendor fusa -verbose)" to ensure that no conditional deposits are pending (to allow us to focus only on the test data herein).

0b.  In sqlplus, execute "select count(0), result, command from event_billing_charge_t group by result, command;" to see how many un-recovered payments already exist (counts of result = 1000 in this case). These will be included in the recovery below, but the conditions may not cause a failure, so we will create 2 more: one auth and one conditional deposit.

0c.  Configure event notification and the payloadconfig.xml to generate business events to 0.0.9.1 (dm_eai with plugin_http) for /event/billing/item/transfer. Content of event may be simple, as that is not germane to the current test.

1.  Create an account (A) w/o pricing and adjust its balance to $85.

2.  Create an account (B) w/o pricing and adjust its balance to $11.50.

3.  Go to opt/sys/eai_js, and edit the payloadconfig.xml file (the actual name referenced by Infranet.properties there) to change "0.0.9.1" to "0.0.999.1". Execute "stop_eai_js; sleep 2; start_eai_js" to cause reload of the file.

4. Use PCM_OP_PYMT_TOPUP to authorize $5.35 credit card payment for account A. Opcode output should show something like "service unavailable" and result 1000. Note that the authorization actually went through, but the payment must be recovered.

5. Adjust account B balance by $-3 (credit) then by $20 (debit).

6. Execute the command: "(cd $PIN_HOME/apps/pin_billd && pin_collect -active -pay_type 10003 -vendor fusa -verbose)". At least two (2) accounts (A & B) should be processed, but the conditional deposit for account A is not executed because of the unrecovered payment from step 4 above.

7. In sqlplus, execute "select count(0), result, command from event_billing_charge_t group by result, command;". The count for result 1000 & command 2 should be +1 from step 0b, as should the count for result 1000 & command 4.

8. Go to opt/sys/eai_js again and change "0.0.999.1" to "0.0.9.1". Execute "stop_eai_js; sleep 2; start_eai_js" to cause reload of the file.

9. Execute the command: "(cd $PIN_HOME/apps/pin_billd && pin_recover -recover_payment -pay_type 10003 -vendor fusa -verbose)". Neither payment will be recovered. If set to loglevel 3, cm.pinlog will show first error as "no poid to lock".


A look at what is being sent to PCM_OP_PYMT_COLLECT shows that the charge events contain PIN_FLD_BILL_OBJ "0.0.0.0 0 0" also a valid PIN_FLD_BILLINFO_OBJ reference, but pin_recover ignores the latter and tries to use the former.

 

cm.pinlog:

fm_utils_trans_prep_lock_obj entering
# number of field entries allocated 20, used 2
0 PIN_FLD_POID POID [0] 0.0.0.0 0 0
0 PIN_FLD_BALANCES ARRAY [840] allocated 20, used 1
1    PIN_FLD_SUB_BALANCES ARRAY [0] allocated 20, used 1
2        PIN_FLD_CURRENT_BAL DECIMAL [0] 23.15
E Thu Oct 8 09:10:37 2009 xxx cm:3010 fm_bill_utils_bal_grp_lock.c:1179 1:sbkcomwad01:pin_recover:3008:-150107936:113:1255007444:3
     no poid to lock
     <location=PIN_ERRLOC_FM:5 class=PIN_ERRCLASS_SYSTEM_DETERMINATE:1 errno=PIN_ERR_NONEXISTANT_POID:21>
     <field num=0:0,0 recid=0 reserved=0 reserved2=0 time(sec:usec)=0:0>
     <facility=0 msg_id=0 version=0>
D Thu Oct 8 09:10:37 2009 xxx cm:3010 fm_bill_utils_bal_grp_lock.c:1211 1:sbkcomwad01:pin_recover:3008:-150107936:113:1255007444:3
     fm_utils_trans_prep_lock_obj returning
D Thu Oct 8 09:10:37 2009 xxx cm:3010 fm_bill_utils_config.c:87 1:sbkcomwad01:pin_recover:3008:-150107936:113:1255007444:3
##### op_bill_utils_prep_lock_obj(): output flist
NULL flist ptr
W Thu Oct 8 09:10:37 2009 xxx cm:3010 cm_utils.c(118):1625 1:sbkcomwad01:pin_recover:3008:-150107936:113:1255007444:3
     DDD CM cm_pre_pcm_op: PCM_OP_CM_PRE_LOCK_OBJ returned err=21(PIN_ERR_NONEXISTANT_POID)
E Thu Oct 8 09:10:37 2009 xxx cm:3010 cm_utils.c(118):4608 1:sbkcomwad01:pin_recover:3008:-150107936:113:1255007444:3
     Error, calling pre lock obj policy
     <location=PIN_ERRLOC_FM:5 class=PIN_ERRCLASS_SYSTEM_DETERMINATE:1 errno=PIN_ERR_NONEXISTANT_POID:21>
     <field num=0:0,0 recid=0 reserved=0 reserved2=0 time(sec:usec)=0:0>
     <facility=0 msg_id=0 version=0>
E Thu Oct 8 09:10:37 2009 xxx cm:3010 cm_utils.c(118):707 1:sbkcomwad01:pin_recover:3008:-150107936:113:1255007444:3
     cm_pre_lock_obj() failed. opcode=PCM_OP_WRITE_FLDS, err=21(PIN_ERR_NONEXISTANT_POID)
E Thu Oct 8 09:10:37 2009 xxx cm:3010 fm_bill_utils_bal_utils.cpp:1547 1:sbkcomwad01:pin_recover:3008:-150107936:113:1255007444:3
     fm_bill_utils_apply_balances error
     <location=PIN_ERRLOC_FM:5 class=PIN_ERRCLASS_SYSTEM_DETERMINATE:1 errno=PIN_ERR_NONEXISTANT_POID:21>
     <field num=0:0,0 recid=0 reserved=0 reserved2=0 time(sec:usec)=0:0>
     <facility=0 msg_id=0 version=0>

Cause

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms