Some calculation logic for Index-linked bond
When you create an Index bond transaction, in the Structure tab, there is a field “Price wIdx”. It determines if the entered Security Price is Including Price Index Value.
For example, with date 2015.12.31, Index value is 1.03592 for the related Index.
If the indicator is not set, then the Price (%) is the clean price without index adjusted. The Payment amount = Nominal amount * Price (%) * Index Value. For this example it is 4,205,835.20 * 81.535659 / 100 * 1.03592 = 3,552,434.31 like below:
If the indicator has been set, then the price is index adjusted price already, and Payment amount = Nominal amount * Price (%) = 4,205,835.20 * 81.535659 / 100 = 3,429,255.45
During valuation (transaction code TPM1), it expects the index clean prices, therefore it always multiplies the market price with index value: new book value = nominal amount * market price * index value. It is necessary to store the index clean prices in the corresponding market price table. If you get the index-adjusted prices, it is necessary to divide the price with the index before storing into the prices tables.
Another option is to use BADI TPM_TRL_MANIPULATE, method MANIPULATE_CALC_BASIS. Something like following code:
calc_basis-index_factor_no_ratio = cl_title_valuation_val=>sec_val_index( im_key_date = im_key_date
im_security_id = calc_basis-security_id ).
if calc_basis-index_factor_no_ratio is not initial.
calc_basis-mav_pc = calc_basis-mav_pc / calc_basis-index_factor_no_ratio.
This is only hint, you most probably need to adjust it.