[Home] [Help]
PACKAGE BODY: APPS.QRM_PA_CALCULATION_P
Source
1 PACKAGE BODY QRM_PA_CALCULATION_P AS
2 /* $Header: qrmpacab.pls 120.39 2006/02/07 07:39:02 csutaria ship $ */
3
4
5 PROCEDURE run_analysis_cp (errbuf OUT NOCOPY VARCHAR2,
6 retcode OUT NOCOPY VARCHAR2,
7 p_source IN VARCHAR2,
8 p_analysis_name IN VARCHAR2,
9 p_date IN VARCHAR2)
10 IS
11
12 p_ref_datetime DATE := NVL(TO_DATE(p_date, 'YYYY/MM/DD HH24:MI:SS'), SYSDATE);
13
14 BEGIN
15 -- XTR_RISK_DEBUG_PKG.start_debug('/sqlcom/out/findv115', 'fhpatest.dbg');
16 -- XTR_RISK_DEBUG_PKG.start_debug;
17 XTR_RISK_DEBUG_PKG.start_conc_prog;
18 IF (g_proc_level>=g_debug_level) THEN
19 XTR_RISK_DEBUG_PKG.dpush(null,'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS_CP');
20 XTR_RISK_DEBUG_PKG.dlog('run_analysis_cp: ' || 'source is', p_source);
21 XTR_RISK_DEBUG_PKG.dlog('run_analysis_cp: ' || 'analysis name', p_analysis_name);
22 XTR_RISK_DEBUG_PKG.dlog('run_analysis_cp: ' || 'ref date', p_ref_datetime);
23 END IF;
24 run_analysis(retcode, p_source, p_analysis_name, p_ref_datetime);
25 IF (g_proc_level>=g_debug_level) THEN
26 XTR_RISK_DEBUG_PKG.dpop(null,'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS_CP');
27 END IF;
28 XTR_RISK_DEBUG_PKG.stop_conc_debug;
29 END run_analysis_cp;
30
31
32
33 PROCEDURE run_analysis_am (p_analysis_names IN SYSTEM.QRM_VARCHAR_TABLE,
34 p_ref_datetime IN DATE)
35
36 IS
37
38 CURSOR check_analysis (p_name VARCHAR2) IS
39 SELECT analysis_name, status, process_id
40 FROM qrm_analysis_settings
41 WHERE analysis_name=p_name and history_flag='C';
42
43 p_request_id NUMBER;
44 p_source VARCHAR2(2) := 'AM';
45 p_msg VARCHAR2(50);
46 p_settings check_analysis%ROWTYPE;
47
48
49 p_go_calculate BOOLEAN := TRUE;
50 -- for FND_CONCURRENT.get_request_status
51 rphase VARCHAR2(80);
52 rstatus VARCHAR2(80);
53 dphase VARCHAR2(30);
54 dstatus VARCHAR2(30);
55 message VARCHAR2(240);
56 call_status BOOLEAN;
57
58 BEGIN
59
60 -- XTR_RISK_DEBUG_PKG.start_debug('/sqlcom/out/findv115','fhpatest.dbg');
61 -- XTR_RISK_DEBUG_PKG.start_debug;
62 IF (g_proc_level>=g_debug_level) THEN --bug 3236479
63 XTR_RISK_DEBUG_PKG.dpush(null,'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS_AM');
64 END IF;
65
66 IF FND_MSG_PUB.count_msg > 0 THEN
67 FND_MSG_PUB.initialize;
68 END IF;
69
70 FOR i IN 1..p_analysis_names.COUNT LOOP
71 IF (g_proc_level>=g_debug_level) THEN
72 xtr_risk_debug_pkg.dlog('run_analysis_am: ' || 'analysis name: '||p_analysis_names(i));
73 END IF;
74 OPEN check_analysis(p_analysis_names(i));
75 FETCH check_analysis INTO p_settings;
76 IF (check_analysis%NOTFOUND) THEN
77 FND_MESSAGE.set_name('QRM', 'QRM_ANA_NO_SETTING');
78 FND_MESSAGE.set_token('ANALYSIS_NAME', p_settings.analysis_name);
79 FND_MSG_PUB.add;
80 IF (g_proc_level>=g_debug_level) THEN
81 xtr_risk_debug_pkg.dlog('run_analysis_am: ' || 'analysis not found');
82 END IF;
83 ELSIF (p_settings.status = '3') THEN
84 call_status := FND_CONCURRENT.get_request_status(
85 p_settings.process_id,'','', rphase, rstatus, dphase,
86 dstatus, message);
87 IF (g_proc_level>=g_debug_level) THEN
88 XTR_RISK_DEBUG_PKG.dlog('run_analysis_am: ' || 'dphase is', dphase);
89 END IF;
90 IF (dphase IN ('PENDING', 'RUNNING', 'INACTIVE')) THEN
91 FND_MESSAGE.set_name('QRM', 'QRM_ANA_RUN_IN_PROGRESS');
92 FND_MESSAGE.set_token('ANALYSIS', p_settings.analysis_name);
93 FND_MSG_PUB.add;
94 IF (g_proc_level>=g_debug_level) THEN
95 xtr_risk_debug_pkg.dlog('run_analysis_am: ' || 'status is 3');
96 END IF;
97 p_go_calculate := FALSE;
98 ELSE
99 p_go_calculate := TRUE;
100 END IF;
101 ELSIF (p_go_calculate = TRUE) THEN
102 p_request_id := FND_REQUEST.submit_request('QRM', 'QRMPACAL',
103 NULL, NULL, FALSE,
104 -- concurrent program args
105 p_source,
106 p_analysis_names(i),
107 to_char(p_ref_datetime,'YYYY/MM/DD HH24:MI:SS'));
108 IF (g_proc_level>=g_debug_level) THEN
109 XTR_RISK_DEBUG_PKG.dlog('run_analysis_am: ' || 'request id: '||p_request_id);
110 END IF;
111 IF (p_request_id = 0) THEN
112 FND_MESSAGE.RETRIEVE(p_msg);
113 -- FND_MESSAGE.ERROR;
114 IF (g_proc_level>=g_debug_level) THEN
115 XTR_RISK_DEBUG_PKG.dlog('run_analysis_am: ' || 'error msg: '||p_msg);
116 END IF;
117 FND_MESSAGE.set_name('QRM', 'QRM_ANA_SUBMIT_ERROR');
118 FND_MESSAGE.set_token('ANALYSIS', p_analysis_names(i));
119 FND_MSG_PUB.add;
120 IF (g_proc_level>=g_debug_level) THEN
121 xtr_risk_debug_pkg.dlog('run_analysis_am: ' || 'request not submitted');
122 END IF;
123 ELSE
124 IF (g_proc_level>=g_debug_level) THEN
125 xtr_risk_debug_pkg.dlog('run_analysis_am: ' || 'request submitted: '||p_request_id);
126 END IF;
127 -- this updates the history_flag='C' row only!
128 UPDATE qrm_analysis_settings
129 SET status='3',
130 process_id=p_request_id,
131 last_run_date=p_ref_datetime,
132 dirty = 'N'
133 WHERE analysis_name=p_analysis_names(i);
134 COMMIT;
135 END IF;
136 END IF;
137 CLOSE check_analysis;
138 END LOOP;
139
140 IF (g_proc_level>=g_debug_level) THEN --bug 3236479
141 XTR_RISK_DEBUG_PKG.dpop(null,'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS_AM');
142 END IF;
143
144 XTR_RISK_DEBUG_PKG.stop_debug;
145 END run_analysis_am;
146
147
148
149 PROCEDURE run_analysis (retcode OUT NOCOPY VARCHAR2,
150 p_source IN VARCHAR2,
151 p_analysis_name IN VARCHAR2,
152 p_ref_datetime IN DATE)
153 IS
154
155 -- TRUNC p_ref_date b.c. in most cases will only need date
156 p_ref_date DATE := TRUNC(p_ref_datetime);
157
158 CURSOR get_settings(p_a_name VARCHAR2) IS
159 SELECT *
160 FROM qrm_analysis_settings
161 WHERE analysis_name = p_a_name and history_flag='C';
162
163 CURSOR get_attributes (p_a_name VARCHAR2) IS
164 SELECT *
165 FROM qrm_analysis_atts
166 WHERE analysis_name= p_a_name and history_flag='C';
167
168 CURSOR get_filter_where_clause(p_filter_name VARCHAR2) IS
169 SELECT where_clause
170 FROM qrm_filters
171 WHERE filter_name = p_filter_name;
172
173 -- BUG 2945198 - sql bind
174 CURSOR get_filter_bindings(p_filter_name VARCHAR2) IS
175 SELECT row_number,value
176 FROM qrm_filter_conditions
177 WHERE filter_name = p_filter_name;
178
179 CURSOR get_company_mds (p_company_code VARCHAR2) IS
180 SELECT parameter_value_code
181 FROM xtr_company_parameters_v
182 WHERE company_code=p_company_code AND parameter_code='REVAL_DFMDS';
183
184 CURSOR get_sob_ccy (p_company_code VARCHAR2) IS
185 SELECT sob.currency_code
186 FROM gl_sets_of_books sob, xtr_party_info pinfo
187 WHERE pinfo.party_code = p_company_code AND
188 pinfo.set_of_books_id = sob.set_of_books_id;
189
190 CURSOR get_ig_day_count_basis(p_ccy VARCHAR2) IS
191 SELECT NVL(ig_year_basis, 'ACTUAL/ACTUAL')
192 FROM xtr_master_currencies_v
193 WHERE currency = p_ccy;
194
195 CURSOR deal_threshold_ok(p_deal_no NUMBER,p_trans_no NUMBER,mds VARCHAR2,
196 p_threshold_date DATE) IS
197 SELECT deal_calc_id
198 FROM qrm_deal_calculations
199 WHERE deal_no = p_deal_no AND transaction_no = p_trans_no AND
200 market_data_set = mds AND
201 last_md_calc_date >= p_threshold_date;
202
203 CURSOR deal_calculated(p_deal_no NUMBER, p_trans_no NUMBER,
204 mds VARCHAR2) IS
205 SELECT *
206 FROM qrm_deal_calculations
207 WHERE deal_no = p_deal_no AND transaction_no = p_trans_no AND
208 market_data_set = mds;
209
210 CURSOR get_sequence_no IS
211 SELECT qrm_deals_s.NEXTVAL
212 FROM dual;
213
214
215 CURSOR get_bond_coupon_start_date(p_bond_issue_code VARCHAR2,
216 p_ref_date DATE) IS
217 SELECT max(coupon_date)
218 FROM xtr_bond_coupon_dates
219 WHERE coupon_date <= p_ref_date AND bond_issue_code = p_bond_issue_code;
220
221 /*---------------------------------------------------------------------
222 Cursors that access xtr_rollover_transactions_v, xtr_deals_v
223 access valid deals because those deals numbers are first derived
224 from qrm_current_deals_v.
225 ----------------------------------------------------------------------*/
226
227 -- gets current transaction
228 CURSOR get_tmm_irs_rtmm_curr_trans(p_deal_no NUMBER,
229 p_deal_type VARCHAR2, p_ref_date DATE) IS
230 SELECT *
231 FROM xtr_rollover_transactions_v
232 WHERE deal_number=p_deal_no AND deal_type=p_deal_type AND
233 start_date<=p_ref_date AND p_ref_date<maturity_date AND
234 status_code<>'CANCELLED' AND status_code<>'CLOSED'
235 ORDER BY start_date, maturity_date;
236
237 -- for all current/future transactions of TMM/IRS/RTMM
238 CURSOR get_tmm_irs_rtmm_trans(p_deal_no NUMBER, p_ref_date DATE) IS
239 SELECT *
240 FROM xtr_rollover_transactions_v
241 WHERE deal_number=p_deal_no
242 AND ((p_ref_date<start_date) OR
243 (p_ref_date>=start_date AND p_ref_date<maturity_date)) AND
244 status_code<>'CANCELLED' AND status_code<>'CLOSED'
245 ORDER BY start_date, maturity_date;
246 -- only look at future adjustments
247
248 CURSOR get_bond_code(p_bond_issue VARCHAR2) IS
249 SELECT ric_code, calc_type, year_calc_type, commence_date
250 FROM xtr_bond_issues
251 WHERE bond_issue_code = p_bond_issue AND ric_code IS NOT NULL;
252
253
254 -- all current and future cashflows
255 CURSOR get_bond_cashflows(p_deal_no NUMBER, p_ref_date DATE) IS
256 SELECT rt.interest, d.interest_rate, rt.start_date, rt.maturity_date
257 FROM xtr_rollover_transactions_v rt, xtr_deals_v d
258 WHERE rt.deal_number=d.deal_no AND rt.deal_number=p_deal_no AND
259 ((p_ref_date<=rt.start_date) OR (p_ref_date>=rt.start_date AND
260 p_ref_date<rt.maturity_date)) AND
261 rt.status_code<>'CANCELLED' AND rt.status_code<>'CLOSED'
262 -- only look at future coupons
263 ORDER BY rt.maturity_date; --bug 2804548
264
265 /* CURSOR get_last_trans_no(p_deal_no NUMBER) IS
266 SELECT max(transaction_number)
267 FROM xtr_rollover_transactions_v
268 GROUP BY deal_number
269 HAVING deal_number=p_deal_no; Bug 4965436 */
270
271 CURSOR get_last_trans_no(p_deal_no NUMBER) IS
272 SELECT max(transaction_number)
273 FROM xtr_rollover_transactions_v
274 WHERE deal_number=p_deal_no;
275
276 e_duplicate_tb_rows EXCEPTION; --bug 2875633
277
278 p_select_clause VARCHAR2(1000) := 'SELECT deal_no, transaction_no, market_data_set, company_code, call_or_put, pricing_model, deal_ccy, buy_ccy, sell_ccy, ';
279
280 -- IG deals: deal numbers recycled, ie. reused by using new trans numbers
281 -- max trans number is the current one
282 -- max trans number has balance=0 and interest is settled, deal is closed
283 -- ONC: if principal adjust (mapped to start date)=0, exclude trans
284 p_from_where_clause VARCHAR2(3000) := ' FROM qrm_current_deals_v'||' WHERE ((deal_type<>''IG'' and (deal_type<>''BOND'' or (deal_type=''BOND'' and face_value<>0)) and (end_date is null or end_date >= '''||p_ref_date||''')) ';
285
286 --start bug 2804548
287 p_next_coupon_reset DATE;
288 p_discount_factors_add1bp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
289 p_annual_basis_frb_dur NUMBER;
290 p_days_frb_dur NUMBER;
291 p_1bp NUMBER := 0.01; --in terms of percentage
292 p_yield_rate_add1bp NUMBER;
293 p_tot_cf_add1bp NUMBER;
294 p_actual_ytm NUMBER;
295 p_sign_temp NUMBER;
296 --end bug 2804548
297
298 p_select_stmt VARCHAR2(4000);
299 p_appended_where VARCHAR2(300);
300 p_where_measure VARCHAR2(100);
301 p_from_date DATE;
302 p_to_date DATE;
303 p_threshold_date DATE;
304 p_gap_req_ok BOOLEAN := TRUE;
305 p_gap_deal_exists BOOLEAN := FALSE;
306 p_ok_trans BOOLEAN := FALSE;
307 p_ccy_reversed BOOLEAN;
308 p_current_deal_no NUMBER := -1;
309 p_insert_or_update VARCHAR2(1);
310 p_dirty_price NUMBER;
311
312 -- BUG 2945198 - sql binding
313 v_cursor INTEGER;
314 n_num_rows_fetched INTEGER;
315 p_batch_fetch_size NUMBER;
316 p_batch_start_index NUMBER := 1;
317
318 -- Bug 3236479
319 v_log VARCHAR2(4096);
320
321 -- boolean returned by aggregation function
322 p_agg_ok VARCHAR2(1) := 'T';
323
324 -- determines whether to recalculate values for qrm_tb_calculations
325 p_recalc_val_tb BOOLEAN := TRUE;
326
327 p_side VARCHAR2(5);
328 p_int_rate_a NUMBER;
329 p_int_rate_a_ask NUMBER;
330 p_int_rate_a_bid NUMBER;
331 p_int_rate_b NUMBER;
332 p_int_rate_b_ask NUMBER;
333 p_int_rate_b_bid NUMBER;
334 p_int_rate_c_bid NUMBER;
335 p_int_rate_c_ask NUMBER;
336 p_spot_rate_a_bid NUMBER;
337 p_spot_rate_a_ask NUMBER;
338 p_spot_rate_b_bid NUMBER;
339 p_spot_rate_b_ask NUMBER;
340 p_df_a_bid NUMBER;
341 p_df_a_ask NUMBER;
342 p_df_b_bid NUMBER;
343 p_df_b_ask NUMBER;
344 p_df_c_bid NUMBER;
345 p_df_c_ask NUMBER;
346 p_day_count NUMBER;
347 p_annual_basis NUMBER;
348 -- for use with interest rates
349 p_mm_day_count_basis VARCHAR2(15) := 'ACTUAL365';
350 p_fxo_day_count_basis VARCHAR2(15) := '30/';
351 -- actual/actual for rho calculation consistency
352 p_fx_day_count_basis VARCHAR2(15) := 'ACTUAL/ACTUAL';
353 p_interpolation_method VARCHAR2(20) := 'DEFAULT';
354 p_md_in XTR_MARKET_DATA_P.md_from_set_in_rec_type;
355 p_md_out XTR_MARKET_DATA_P.md_from_set_out_rec_type;
356 p_df_in XTR_RATE_CONVERSION.df_in_rec_type;
357 p_df_out XTR_RATE_CONVERSION.df_out_rec_type;
358 p_rc_in XTR_RATE_CONVERSION.rate_conv_in_rec_type;
359 p_rc_out XTR_RATE_CONVERSION.rate_conv_out_rec_type;
360 p_pv_in XTR_MM_COVERS.presentvalue_in_rec_type;
361 p_pv_out XTR_MM_COVERS.presentvalue_out_rec_type;
362 p_gk_in QRM_FX_FORMULAS.gk_option_sens_in_rec_type;
363 p_gk_out QRM_FX_FORMULAS.gk_option_sens_out_rec_type;
364 p_bo_in QRM_MM_FORMULAS.black_opt_sens_in_rec_type;
365 p_bo_out QRM_MM_FORMULAS.black_opt_sens_out_rec_type;
366
367
368 p_settings get_settings%ROWTYPE;
369 p_deal_calculations deal_calculated%ROWTYPE;
370 -- for saving a copy of attributes
371 p_att_counter NUMBER := 0;
372 p_att_name SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
373 p_att_type SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
374 p_att_order XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
375 p_att_average SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
376 p_att_ind SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
377 p_att_percentage SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
378 p_att_created_by XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
379 p_att_creation_date SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
380 p_att_updated_by XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
381 p_att_update_date SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
382 p_att_update_login XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
383
384 p_filter_where_clause VARCHAR2(3500);
385
386 p_bpv NUMBER;
387 -- FXO --
388 p_delta_call NUMBER;
389 p_delta_put NUMBER;
390 p_theta_call NUMBER;
391 p_theta_put NUMBER;
392 p_rho_dom_call NUMBER;
393 p_rho_dom_put NUMBER;
394 p_rho_for_call NUMBER;
395 p_rho_for_put NUMBER;
396 -- FX --
397 p_deltas_rhos XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE(2);
398 -- BOND --
399 p_bond_code VARCHAR2(20);
400 p_bond_calc_type VARCHAR2(15);
401 p_bond_coupon_start DATE;
402 p_bond_coupon_end DATE;
403 p_bond_issue_start DATE;
404 p_bond_ai NUMBER;
405 p_bond_ytm NUMBER;
406 p_shares_remaining NUMBER;
407 p_days XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
408 p_cashflows XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
409 p_discount_factors XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
410 p_cashflows_100 XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
411 p_counter NUMBER;
412 p_total_deals_counter NUMBER := 0; -- BUG 2945198 - SQL BINDING
413 p_temp_counter NUMBER := 0;
414 p_threshold_counter NUMBER := 0;
415 p_insert_counter NUMBER := 0;
416 p_update_counter NUMBER := 0;
417 p_yield_rate NUMBER;
418 p_signed_face_value NUMBER;
419 -- TMM/IRS --
420 p_dummy_num1 NUMBER;
421 p_dummy_num2 NUMBER;
422 p_dummy_cf XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
423 p_dummy_days XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
424 p_trans_row get_tmm_irs_rtmm_curr_trans%ROWTYPE;
425 p_trans_start_date DATE;
426 p_trans_end_date DATE;
427 p_trans_day_count_basis VARCHAR2(15);
428 p_last_trans_no NUMBER;
429 p_trans_trans_nos XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
430 p_trans_yield_rates XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
431 p_trans_disc_rates XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
432 p_trans_start_dates SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
433 p_trans_maturity_dates SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
434 p_trans_settle_dates SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
435 p_trans_due_on_dates SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
436 p_trans_interest_refunds XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
437 p_trans_prin_actions SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
438 p_trans_interest_settled XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
439 p_trans_prin_adjusts XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
440 p_trans_accum_interests XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
441 p_trans_accum_interests_bf XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
442 p_trans_balance_outs XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
443 p_trans_settle_term_interest SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
444 -- IRO --
445 p_spot_rate NUMBER;
446 p_days_start NUMBER;
447 p_days_mature NUMBER;
448 -- FRA--
449 p_fair_value_bp NUMBER;
450 p_fra_price NUMBER;
451
452 p_num_of_cols NUMBER := 51; -- number of columns in select clause
453
454
455 /*
456 p_deal_nos XTR_MD_NUM_TABLE;
457 p_transaction_nos XTR_MD_NUM_TABLE;
458 p_market_data_sets SYSTEM.QRM_VARCHAR_TABLE;
459 p_company_codes SYSTEM.QRM_VARCHAR_TABLE;
460 p_calls_or_puts SYSTEM.QRM_VARCHAR_TABLE;
461 p_pricing_models SYSTEM.QRM_VARCHAR_TABLE;
462 p_deal_ccys SYSTEM.QRM_VARCHAR_TABLE;
463 p_buy_ccys SYSTEM.QRM_VARCHAR_TABLE;
464 p_sell_ccys SYSTEM.QRM_VARCHAR_TABLE;
465 p_foreign_ccys SYSTEM.QRM_VARCHAR_TABLE;
466 p_domestic_ccys SYSTEM.QRM_VARCHAR_TABLE;
467 p_base_ccys SYSTEM.QRM_VARCHAR_TABLE;
468 p_contra_ccys SYSTEM.QRM_VARCHAR_TABLE;
469 p_premium_ccys SYSTEM.QRM_VARCHAR_TABLE;
470 p_buy_amounts XTR_MD_NUM_TABLE;
471 p_sell_amounts XTR_MD_NUM_TABLE;
472 p_foreign_amounts XTR_MD_NUM_TABLE;
473 p_domestic_amounts XTR_MD_NUM_TABLE;
474 p_base_amounts XTR_MD_NUM_TABLE;
475 p_contra_amounts XTR_MD_NUM_TABLE;
476 p_start_amounts XTR_MD_NUM_TABLE;
477 p_face_values XTR_MD_NUM_TABLE;
478 p_interests XTR_MD_NUM_TABLE;
479 p_accum_int_bfs XTR_MD_NUM_TABLE;
480 p_accum_int_actions SYSTEM.QRM_VARCHAR_TABLE;
481 p_accrued_interests XTR_MD_NUM_TABLE;
482 p_interests_settled XTR_MD_NUM_TABLE;
483 p_deal_dates SYSTEM.QRM_DATE_TABLE;
484 p_end_dates SYSTEM.QRM_DATE_TABLE;
485 p_gap_dates SYSTEM.QRM_DATE_TABLE;
486 p_deal_subtypes SYSTEM.QRM_VARCHAR_TABLE;
487 p_deal_types SYSTEM.QRM_VARCHAR_TABLE;
488 p_discount_yields SYSTEM.QRM_VARCHAR_TABLE;
489 p_maturity_dates SYSTEM.QRM_DATE_TABLE;
490 p_no_of_days XTR_MD_NUM_TABLE;
491 p_settle_dates SYSTEM.QRM_DATE_TABLE;
492 p_premium_amounts XTR_MD_NUM_TABLE;
493 p_start_dates SYSTEM.QRM_DATE_TABLE;
494 p_initial_bases SYSTEM.QRM_VARCHAR_TABLE;
495 p_bond_issues SYSTEM.QRM_VARCHAR_TABLE;
496 p_coupon_actions SYSTEM.QRM_VARCHAR_TABLE;
497 p_coupon_rates XTR_MD_NUM_TABLE;
498 p_margins XTR_MD_NUM_TABLE;
499 p_transaction_rates XTR_MD_NUM_TABLE;
500 p_coupon_freqs XTR_MD_NUM_TABLE;
501 p_next_coupon_dates SYSTEM.QRM_DATE_TABLE;
502 p_day_count_bases SYSTEM.QRM_VARCHAR_TABLE;
503 -- QUANTITY OUTSTANDING
504 p_quantity_out XTR_MD_NUM_TABLE;
505 p_rounding_type SYSTEM.QRM_VARCHAR_TABLE;
506 p_day_count_type SYSTEM.QRM_VARCHAR_TABLE;
507 p_prepaid_interests SYSTEM.QRM_VARCHAR_TABLE;
508 */
509
510
511 p_deal_nos DBMS_SQL.NUMBER_TABLE;
512 p_transaction_nos DBMS_SQL.NUMBER_TABLE;
513 p_market_data_sets DBMS_SQL.VARCHAR2_TABLE;
514 p_company_codes DBMS_SQL.VARCHAR2_TABLE;
515 p_calls_or_puts DBMS_SQL.VARCHAR2_TABLE;
516 p_pricing_models DBMS_SQL.VARCHAR2_TABLE;
517 p_deal_ccys DBMS_SQL.VARCHAR2_TABLE;
518 p_buy_ccys DBMS_SQL.VARCHAR2_TABLE;
519 p_sell_ccys DBMS_SQL.VARCHAR2_TABLE;
520 p_foreign_ccys DBMS_SQL.VARCHAR2_TABLE;
521 p_domestic_ccys DBMS_SQL.VARCHAR2_TABLE;
522 p_base_ccys DBMS_SQL.VARCHAR2_TABLE;
523 p_contra_ccys DBMS_SQL.VARCHAR2_TABLE;
524 p_premium_ccys DBMS_SQL.VARCHAR2_TABLE;
525 p_buy_amounts DBMS_SQL.NUMBER_TABLE;
526 p_sell_amounts DBMS_SQL.NUMBER_TABLE;
527 p_foreign_amounts DBMS_SQL.NUMBER_TABLE;
528 p_domestic_amounts DBMS_SQL.NUMBER_TABLE;
529 p_base_amounts DBMS_SQL.NUMBER_TABLE;
530 p_contra_amounts DBMS_SQL.NUMBER_TABLE;
531 p_start_amounts DBMS_SQL.NUMBER_TABLE;
532 p_face_values DBMS_SQL.NUMBER_TABLE;
533 p_interests DBMS_SQL.NUMBER_TABLE;
534 p_accum_int_bfs DBMS_SQL.NUMBER_TABLE;
535 p_accum_int_actions DBMS_SQL.VARCHAR2_TABLE;
536 p_accrued_interests DBMS_SQL.NUMBER_TABLE;
537 p_interests_settled DBMS_SQL.NUMBER_TABLE;
538 p_deal_dates DBMS_SQL.DATE_TABLE;
539 p_end_dates DBMS_SQL.DATE_TABLE;
540 p_gap_dates DBMS_SQL.DATE_TABLE;
541 p_deal_subtypes DBMS_SQL.VARCHAR2_TABLE;
542 p_deal_types DBMS_SQL.VARCHAR2_TABLE;
543 p_discount_yields DBMS_SQL.VARCHAR2_TABLE;
544 p_maturity_dates DBMS_SQL.DATE_TABLE;
545 p_no_of_days DBMS_SQL.NUMBER_TABLE;
546 p_settle_dates DBMS_SQL.DATE_TABLE;
547 p_premium_amounts DBMS_SQL.NUMBER_TABLE;
548 p_start_dates DBMS_SQL.DATE_TABLE;
549 p_initial_bases DBMS_SQL.VARCHAR2_TABLE;
550 p_bond_issues DBMS_SQL.VARCHAR2_TABLE;
551 p_coupon_actions DBMS_SQL.VARCHAR2_TABLE;
552 p_coupon_rates DBMS_SQL.NUMBER_TABLE;
553 p_margins DBMS_SQL.NUMBER_TABLE;
554 p_transaction_rates DBMS_SQL.NUMBER_TABLE;
555 p_coupon_freqs DBMS_SQL.NUMBER_TABLE;
556 p_next_coupon_dates DBMS_SQL.DATE_TABLE;
557 p_day_count_bases DBMS_SQL.VARCHAR2_TABLE;
558 -- QUANTITY OUTSTANDING
559 p_quantity_out DBMS_SQL.NUMBER_TABLE;
560 p_rounding_type DBMS_SQL.VARCHAR2_TABLE;
561 p_day_count_type DBMS_SQL.VARCHAR2_TABLE;
562 p_prepaid_interests DBMS_SQL.VARCHAR2_TABLE;
563
564
565
566 -- storage for later insert/update
567 p_deal_calc_id NUMBER;
568 -- for updating the correct row
569 p_deal_calc_id_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
570 -- for inserting with correct sequence no (deal calc id)
571 p_seq_nos XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
572 p_deal_no_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
573 p_deal_no_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
574 p_deal_no_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
575 p_company_code_insert SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
576 p_company_code_update SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
577 p_company_code_temp SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
578 p_transaction_no_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
579 p_transaction_no_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
580 p_transaction_no_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
581 p_market_data_set_insert SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
582 p_market_data_set_update SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
583 p_market_data_set_temp SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
584 p_deal_ccy_insert SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
585 p_deal_ccy_update SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
586 p_deal_ccy_temp SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
587 p_sob_ccy_insert SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
588 p_sob_ccy_update SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
589 p_sob_ccy_temp SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
590 p_base_ccy_amount_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
591 p_base_ccy_amount_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
592 p_base_ccy_amount_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
593 p_base_ccy_amount_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
594 p_base_ccy_amount_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
595 p_base_ccy_amount_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
596 p_contra_ccy_amount_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
597 p_contra_ccy_amount_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
598 p_contra_ccy_amount_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
599 p_contra_ccy_amount_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
600 p_contra_ccy_amount_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
601 p_contra_ccy_amount_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
602 p_foreign_amount_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
603 p_foreign_amount_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
604 p_foreign_amount_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
605 p_foreign_amount_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
606 p_foreign_amount_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
607 p_foreign_amount_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
608 p_domestic_amount_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
609 p_domestic_amount_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
610 p_domestic_amount_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
611 p_domestic_amount_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
612 p_domestic_amount_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
613 p_domestic_amount_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
614 p_buy_amount_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
615 p_buy_amount_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
616 p_buy_amount_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
617 p_buy_amount_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
618 p_buy_amount_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
619 p_buy_amount_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
620 p_sell_amount_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
621 p_sell_amount_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
622 p_sell_amount_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
623 p_sell_amount_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
624 p_sell_amount_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
625 p_sell_amount_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
626 p_days_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
627 p_days_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
628 p_days_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
629 p_fx_reval_rate_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
630 p_fx_reval_rate_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
631 p_fx_reval_rate_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
632 p_mm_reval_rate_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
633 p_mm_reval_rate_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
634 p_mm_reval_rate_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
635 p_fx_trans_rate_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
636 p_fx_trans_rate_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
637 p_fx_trans_rate_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
638 p_trans_price_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
639 p_trans_price_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
640 p_trans_price_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
641 p_trans_price_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
642 p_trans_price_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
643 p_trans_price_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
644 p_trans_price_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
645 p_trans_price_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
646 p_trans_price_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
647 p_reval_price_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
648 p_reval_price_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
649 p_reval_price_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
650 p_reval_price_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
651 p_reval_price_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
652 p_reval_price_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
653 p_reval_price_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
654 p_reval_price_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
655 p_reval_price_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
656 p_mm_trans_rate_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
657 p_mm_trans_rate_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
658 p_mm_trans_rate_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
659 p_fair_value_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
660 p_fair_value_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
661 p_fair_value_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
662 p_fair_value_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
663 p_fair_value_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
664 p_fair_value_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
665 p_fair_value_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
666 p_fair_value_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
667 p_fair_value_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
668 p_gap_amount_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
669 p_gap_amount_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
670 p_gap_amount_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
671 p_gap_amount_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
672 p_gap_amount_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
673 p_gap_amount_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
674 p_gap_amount_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
675 p_gap_amount_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
676 p_gap_amount_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
677 p_maturity_amount_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
678 p_maturity_amount_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
679 p_maturity_amount_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
680 p_maturity_amount_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
681 p_maturity_amount_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
682 p_maturity_amount_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
683 p_maturity_amount_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
684 p_maturity_amount_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
685 p_maturity_amount_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
686 p_premium_amount_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
687 p_premium_amount_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
688 p_premium_amount_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
689 p_premium_amount_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
690 p_premium_amount_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
691 p_premium_amount_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
692 p_accrued_interest_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
693 p_accrued_interest_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
694 p_accrued_interest_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
695 p_accrued_interest_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
696 p_accrued_interest_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
697 p_accrued_interest_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
698 p_accrued_interest_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
699 p_accrued_interest_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
700 p_accrued_interest_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
701 p_duration_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
702 p_duration_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
703 p_duration_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
704 p_mod_duration_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
705 p_mod_duration_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
706 p_mod_duration_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
707 p_convexity_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
708 p_convexity_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
709 p_convexity_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
710 p_delta_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
711 p_delta_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
712 p_delta_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
713 p_gamma_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
714 p_gamma_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
715 p_gamma_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
716 p_theta_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
717 p_theta_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
718 p_theta_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
719 p_rho_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
720 p_rho_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
721 p_rho_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
722 p_rho_base_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
723 p_rho_base_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
724 p_rho_base_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
725 p_rho_contra_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
726 p_rho_contra_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
727 p_rho_contra_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
728 p_rho_for_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
729 p_rho_for_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
730 p_rho_for_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
731 p_rho_dom_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
732 p_rho_dom_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
733 p_rho_dom_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
734 p_vega_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
735 p_vega_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
736 p_vega_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
737 p_pos_bpv_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
738 p_pos_bpv_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
739 p_pos_bpv_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
740 p_pos_bpv_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
741 p_pos_bpv_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
742 p_pos_bpv_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
743 p_pos_bpv_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
744 p_pos_bpv_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
745 p_pos_bpv_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
746 p_pos_delta_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
747 p_pos_delta_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
748 p_pos_delta_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
749 p_pos_delta_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
750 p_pos_delta_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
751 p_pos_delta_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
752 p_pos_delta_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
753 p_pos_delta_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
754 p_pos_delta_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
755 p_pos_gamma_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
756 p_pos_gamma_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
757 p_pos_gamma_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
758 p_pos_gamma_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
759 p_pos_gamma_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
760 p_pos_gamma_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
761 p_pos_gamma_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
762 p_pos_gamma_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
763 p_pos_gamma_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
764 p_pos_theta_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
765 p_pos_theta_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
766 p_pos_theta_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
767 p_pos_theta_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
768 p_pos_theta_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
769 p_pos_theta_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
770 p_pos_theta_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
771 p_pos_theta_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
772 p_pos_theta_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
773 p_pos_rho_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
774 p_pos_rho_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
775 p_pos_rho_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
776 p_pos_rho_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
777 p_pos_rho_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
778 p_pos_rho_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
779 p_pos_rho_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
780 p_pos_rho_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
781 p_pos_rho_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
782 p_pos_rho_base_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
783 p_pos_rho_base_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
784 p_pos_rho_base_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
785 p_pos_rho_base_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
786 p_pos_rho_base_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
787 p_pos_rho_base_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
788 p_pos_rho_base_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
789 p_pos_rho_base_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
790 p_pos_rho_base_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
791 p_pos_rho_contra_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
792 p_pos_rho_contra_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
793 p_pos_rho_contra_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
794 p_pos_rho_contra_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
795 p_pos_rho_contra_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
796 p_pos_rho_contra_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
797 p_pos_rho_contra_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
798 p_pos_rho_contra_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
799 p_pos_rho_contra_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
800 p_pos_rho_for_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
801 p_pos_rho_for_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
802 p_pos_rho_for_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
803 p_pos_rho_for_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
804 p_pos_rho_for_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
805 p_pos_rho_for_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
806 p_pos_rho_for_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
807 p_pos_rho_for_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
808 p_pos_rho_for_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
809 p_pos_rho_dom_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
810 p_pos_rho_dom_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
811 p_pos_rho_dom_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
812 p_pos_rho_dom_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
813 p_pos_rho_dom_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
814 p_pos_rho_dom_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
815 p_pos_rho_dom_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
816 p_pos_rho_dom_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
817 p_pos_rho_dom_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
818 p_pos_vega_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
819 p_pos_vega_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
820 p_pos_vega_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
821 p_pos_vega_usd_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
822 p_pos_vega_usd_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
823 p_pos_vega_usd_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
824 p_pos_vega_sob_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
825 p_pos_vega_sob_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
826 p_pos_vega_sob_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
827 p_volatility_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
828 p_volatility_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
829 p_volatility_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
830 p_ytm_temp XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
831 p_ytm_insert XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
832 p_ytm_update XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
833 p_gap_date_insert SYSTEM.QRM_DATE_TABLE :=
834 SYSTEM.QRM_DATE_TABLE();
835 p_gap_date_update SYSTEM.QRM_DATE_TABLE :=
836 SYSTEM.QRM_DATE_TABLE();
837 p_gap_date_temp SYSTEM.QRM_DATE_TABLE :=
838 SYSTEM.QRM_DATE_TABLE();
839 p_upd_md_calc_date_temp SYSTEM.QRM_DATE_TABLE :=
840 SYSTEM.QRM_DATE_TABLE();
841 p_upd_md_calc_date_update SYSTEM.QRM_DATE_TABLE :=
842 SYSTEM.QRM_DATE_TABLE();
843
844 -- tb calculations
845 p_tb_counter NUMBER := 0;
846 p_tb_curr_deal_no NUMBER := -4; -- dummy
847 p_tb_deal_no XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
848 p_tb_transaction_no XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
849 p_tb_market_data_set SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
850 p_tb_pos_start_date SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
851 p_tb_pos_end_date SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
852 p_tb_start_date SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
853 p_tb_end_date SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
854 p_tb_interest_basis SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
855 p_tb_outst_amount XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
856 p_tb_outst_amount_usd XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
857 p_tb_outst_amount_sob XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
858 p_tb_amt_qty_out XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
859 p_tb_amt_qty_out_usd XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
860 p_tb_amt_qty_out_sob XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
861 p_tb_coupon_rate XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
862 p_tb_next_coupon_date SYSTEM.QRM_DATE_TABLE := SYSTEM.QRM_DATE_TABLE();
863
864 -- exceptions
865 p_error_type VARCHAR2(1) := 'W'; -- default to warning
866 p_except_counter NUMBER := 0;
867 p_except_deal_no XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
868 p_except_transaction_no XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
869 p_except_market_data_set SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
870 p_except_error_type SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
871 p_except_error_code SYSTEM.QRM_VARCHAR240_TABLE := SYSTEM.QRM_VARCHAR240_TABLE();
872 p_except_token_name SYSTEM.QRM_VARCHAR_TABLE := SYSTEM.QRM_VARCHAR_TABLE();
873 p_except_token_value SYSTEM.QRM_VARCHAR240_TABLE := SYSTEM.QRM_VARCHAR240_TABLE();
874
875
876 p_request_id NUMBER;
877 -- for FND_CONCURRENT.get_request_status
878 rphase VARCHAR2(80);
879 rstatus VARCHAR2(80);
880 dphase VARCHAR2(30);
881 dstatus VARCHAR2(30);
882 message VARCHAR2(240);
883 call_status BOOLEAN;
884
885 FUNCTION within_one_year(p_start_date DATE, p_end_date DATE)
886 RETURN BOOLEAN IS
887
888 BEGIN
889 IF (ADD_MONTHS(p_start_date, 12) >= p_end_date) THEN
890 RETURN true;
891 ELSE
892 RETURN false;
893 END IF;
894 END within_one_year;
895
896 /*
897 bug 2560111 - fixes bad dates causing unhandled exception
898 calc_days_run_c and rate_conversion are wrapper functions that
899 check for bad dates before passing the buck.
900 */
901 PROCEDURE DAYS_RUN_HELPER(start_date IN DATE,
902 end_date IN DATE,
903 method IN VARCHAR2,
904 frequency IN NUMBER,
905 num_days IN OUT NOCOPY NUMBER,
906 year_basis IN OUT NOCOPY NUMBER) IS
907 BEGIN
908 IF start_date is not null and end_date is not null and method is not null THEN
909
910 IF end_date < start_date THEN
911 raise e_invalid_date;
912 END IF;
913 END IF;
914
915 XTR_CALC_P.calc_days_run_c(start_date,
916 end_date,
917 method,
918 frequency,
919 num_days,
920 year_basis);
921
922 END;
923
924
925 PROCEDURE rate_conversion (p_in_rec IN XTR_RATE_CONVERSION.rate_conv_in_rec_type,
926 p_out_rec IN OUT NOCOPY XTR_RATE_CONVERSION.rate_conv_out_rec_type) is
927 BEGIN
928 IF p_in_rec.p_start_date IS NOT NULL AND p_in_rec.p_end_date IS NOT NULL AND p_in_rec.p_day_count_basis_in IS NOT NULL THEN
929 IF p_in_rec.p_end_date < p_in_rec.p_start_date THEN
930 raise e_invalid_date;
931 END IF;
932 END IF;
933
934 XTR_RATE_CONVERSION.rate_conversion(p_in_rec,
935 p_out_rec);
936 END;
937
938
939 BEGIN
940
941 IF (g_proc_level>=g_debug_level) THEN
942 XTR_RISK_DEBUG_PKG.dpush(null,'QRM_CALCULATION_P.RUN_ANALYSIS'); --bug3236479
943 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'source is', p_source);
944 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'analysis name', p_analysis_name);
945 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'ref date', p_ref_datetime);
946 END IF;
947
948 p_select_clause := p_select_clause||'foreign_ccy, domestic_ccy, base_ccy, contra_ccy, premium_ccy, buy_amount, sell_amount, foreign_amount, domestic_amount, ';
949 p_select_clause := p_select_clause||'base_ccy_amount, contra_ccy_amount, start_amount, face_value, interest, accum_interest_bf, accum_int_action, ';
950 p_select_clause := p_select_clause||'accrued_interest, interest_settled, deal_date, end_date, gap_date, deal_subtype, deal_type, discount_yield, ';
951 p_select_clause := p_select_clause||'maturity_date, no_of_days, settle_date, premium_amount, phy_start_date, initial_basis, bond_issue_code, ';
952 p_select_clause := p_select_clause||'coupon_action, coupon_rate, margin, transaction_rate, coupon_frequency, next_coupon_date, day_count_basis, ';
953 -- BUG 2945198 - sql binding
954 -- p_select_clause := p_select_clause||'quantity_remaining, rounding_type, day_count_type, prepaid_interest BULK COLLECT INTO';
955 p_select_clause := p_select_clause||'quantity_remaining, rounding_type, day_count_type, prepaid_interest ';
956
957 /* RVALLAMS Bug 3007749
958 p_from_where_clause := p_from_where_clause||'OR (deal_type=''IG'' and (deal_no, transaction_no)
959 IN (select deal_no, max(transaction_no) from qrm_current_deals_v where NOT(accrued_interest=interest_settled
960 and face_value=0) group by deal_no)))';
961 */
962
963 -- RVALLAMS Bug 3805685 added group by deal_no clause
964
965 p_from_where_clause := p_from_where_clause||' OR (deal_type=''IG'' and (deal_no, transaction_no) IN (select deal_no, max(transaction_no) from qrm_current_deals_v b where ';
966 p_from_where_clause := p_from_where_clause||' (deal_no,deal_date) = (select deal_no,max(deal_date) from qrm_current_deals_v c where b.deal_no = c.deal_no group by deal_no) group by b.deal_no) ';
967 p_from_where_clause := p_from_where_clause||' AND NOT(NVL(accrued_interest,0)=NVL(interest_settled,0) and face_value=0)))';
968
969 -- '0' : completed successfully --|
970 -- '1' : completed with warnings |--->corresponds to CM codes
971 -- '2' : error --|
972 -- '3' : in progress: saved in settings, never returned to CM
973 -- '4' : never run --- set by analysis settings
974 -- '5' : no deals returned: updated to '1' for settings table and CM
975 retcode := '0'; -- assume success, may turn out NOCOPY otherwise later
976
977 BEGIN
978 -- get analysis settings
979 OPEN get_settings(p_analysis_name);
980 FETCH get_settings INTO p_settings;
981 -- if analysis settings does not exist, raise exception
982 IF (get_settings%NOTFOUND) THEN
983 raise e_no_setting_found;
984 -- if called by Concurrent Manager and in progress, raise exception
985 ELSIF (p_settings.status = '3' AND p_source <> 'AM') THEN
986 p_request_id := FND_GLOBAL.conc_request_id;
987 call_status := FND_CONCURRENT.get_request_status(
988 p_request_id,'','', rphase, rstatus,
989 dphase, dstatus, message);
990 IF (g_proc_level>=g_debug_level) THEN
991 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'dphase is', dphase);
992 END IF;
993 IF (dphase IN ('PENDING', 'RUNNING', 'INACTIVE')) THEN
994 raise e_analysis_in_progress;
995 END IF;
996 END IF;
997 CLOSE get_settings;
998
999 -- get the from and to dates
1000 IF (g_proc_level>=g_debug_level) THEN
1001 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'ref date: '||p_ref_date);
1002 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'date type: '||p_settings.date_type);
1003 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'start date: '||p_settings.start_date);
1004 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'end date: '||p_settings.end_date);
1005 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'start date ref: '||p_settings.start_date_ref);
1006 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'start date offset: '||p_settings.start_date_offset);
1007 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'start offset type: '||p_settings.start_offset_type);
1008 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'gl calendar id: '||p_settings.gl_calendar_id);
1009 END IF;
1010
1011
1012 -- get appropriate from/to dates
1013 IF (p_settings.date_type = 'F') THEN
1014 IF (p_settings.style = 'X') THEN
1015 p_from_date := p_settings.start_date;
1016 p_to_date := p_settings.end_date;
1017 QRM_PA_AGGREGATION_P.calc_tb_start_end_dates (
1018 p_settings.analysis_name, p_ref_date, p_settings.tb_name,
1019 p_settings.tb_label, p_to_date,
1020 p_settings.end_date_ref, p_settings.end_date_offset,
1021 p_settings.end_offset_type, p_settings.date_type,
1022 p_settings.gl_calendar_id, p_settings.business_week,
1023 p_from_date, p_settings.start_date_ref,
1024 p_settings.start_date_offset, p_settings.start_offset_type,
1025 p_settings.analysis_type);
1026 ELSE
1027 p_from_date := p_settings.start_date;
1028 p_to_date := p_settings.end_date;
1029 END IF;
1030 ELSIF (p_settings.date_type = 'R') THEN
1031 IF (p_settings.style = 'X') THEN
1032 p_from_date := p_settings.start_date;
1033 p_to_date := p_settings.end_date;
1034 QRM_PA_AGGREGATION_P.calc_tb_start_end_dates (
1035 p_settings.analysis_name, p_ref_date, p_settings.tb_name,
1036 p_settings.tb_label, p_to_date,
1037 p_settings.end_date_ref, p_settings.end_date_offset,
1038 p_settings.end_offset_type, p_settings.date_type,
1039 p_settings.gl_calendar_id, p_settings.business_week,
1040 p_from_date, p_settings.start_date_ref,
1041 p_settings.start_date_offset, p_settings.start_offset_type,
1042 p_settings.analysis_type);
1043 ELSE
1044 p_from_date :=QRM_PA_AGGREGATION_P.calculate_relative_date(
1045 p_ref_date, p_settings.date_type, p_settings.start_date,
1046 p_settings.start_date_ref, p_settings.start_date_offset,
1047 p_settings.start_offset_type, p_settings.gl_calendar_id,
1048 p_settings.business_week);
1049
1050 p_to_date := QRM_PA_AGGREGATION_P.calculate_relative_date(
1051 p_ref_date, p_settings.date_type, p_settings.end_date,
1052 p_settings.end_date_ref, p_settings.end_date_offset,
1053 p_settings.end_offset_type, p_settings.gl_calendar_id,
1054 p_settings.business_week);
1055 END IF;
1056 END IF;
1057
1058 IF (g_proc_level>=g_debug_level) THEN
1059 XTR_RISK_DEBUG_PKG.dlog('run_analysis: from date is:', p_from_date);
1060 XTR_RISK_DEBUG_PKG.dlog('run_analysis: to date is:', p_to_date);
1061 END IF;
1062
1063 -- if not called by Analysis Manager
1064
1065 -- delete analysis row with history_flag='S';
1066 DELETE
1067 FROM qrm_analysis_settings
1068 WHERE analysis_name = p_analysis_name and history_flag='S';
1069
1070 IF (g_event_level>=g_debug_level) THEN --bug 3236479
1071 XTR_RISK_DEBUG_PKG.dlog('DML','Deleted analysis row with history_flag=S',
1072 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_event_level);
1073 END IF;
1074
1075 -- delete attributes rows with history_flag='S'
1076 DELETE
1077 FROM qrm_analysis_atts
1078 WHERE analysis_name = p_analysis_name and history_flag='S';
1079
1080 IF (g_event_level>=g_debug_level) THEN --bug 3236479
1081 XTR_RISK_DEBUG_PKG.dlog('DML','Deleted attributes rows with history_flag=S',
1082 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_event_level);
1083 END IF;
1084
1085 IF (g_state_level>=g_debug_level) THEN --bug 3236479
1086 v_log := p_settings.analysis_name||','||p_settings.description||','||
1087 p_settings.analysis_type||','||p_settings.style||','||p_settings.filter_name
1088 ||','||p_settings.md_set_code||','||p_settings.threshold_num||','||
1089 p_settings.threshold_type||','||p_settings.tb_label||','||p_settings.tb_name
1090 ||','||p_settings.date_type||','||p_from_date||','||p_to_date||','||
1091 p_settings.start_date_ref||','||p_settings.end_date_ref||','||
1092 p_settings.start_date_offset||','||p_settings.end_date_offset||','||
1093 p_settings.start_offset_type||','||p_settings.end_offset_type||','||
1094 p_settings.show_totals||','||p_settings.currency_source||','||
1095 p_settings.curr_reporting||','||p_settings.currency_used||','||
1096 p_settings.units||','||p_settings.dec_places||','||'3'||','||
1097 p_settings.process_id||','||p_settings.last_run_date||','||
1098 p_settings.dirty||','||p_settings.business_week||','||
1099 p_settings.gl_calendar_id||','||'S'||','||
1100 p_settings.created_by||','||p_settings.creation_date||','||
1101 p_settings.last_updated_by||','||p_settings.last_update_date||','||
1102 p_settings.last_update_login;
1103 XTR_RISK_DEBUG_PKG.dlog('INSERT QRM_ANALYSIS_SETTINGS',v_log,
1104 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
1105 END IF;
1106
1107 -- make copy of row and set history flag to 'S';
1108 INSERT
1109 INTO qrm_analysis_settings(analysis_name, description, analysis_type,
1110 style, filter_name, md_set_code, threshold_num, threshold_type,
1111 tb_label, tb_name, date_type, start_date, end_date,
1112 start_date_ref, end_date_ref, start_date_offset, end_date_offset,
1113 start_offset_type, end_offset_type, show_totals, currency_source,
1114 curr_reporting, currency_used, units, dec_places, status, process_id,
1115 last_run_date, dirty, business_week, gl_calendar_id, history_flag,
1116 created_by, creation_date, last_updated_by, last_update_date,
1117 last_update_login)
1118 VALUES (p_settings.analysis_name, p_settings.description,
1119 p_settings.analysis_type, p_settings.style, p_settings.filter_name,
1120 p_settings.md_set_code, p_settings.threshold_num,
1121 p_settings.threshold_type, p_settings.tb_label, p_settings.tb_name,
1122 p_settings.date_type, p_from_date, p_to_date,
1123 p_settings.start_date_ref, p_settings.end_date_ref,
1124 p_settings.start_date_offset, p_settings.end_date_offset,
1125 p_settings.start_offset_type, p_settings.end_offset_type,
1126 p_settings.show_totals, p_settings.currency_source,
1127 p_settings.curr_reporting, p_settings.currency_used, p_settings.units,
1128 p_settings.dec_places, '3', p_settings.process_id,
1129 p_settings.last_run_date, p_settings.dirty, p_settings.business_week,
1130 p_settings.gl_calendar_id, 'S',
1131 p_settings.created_by, p_settings.creation_date,
1132 p_settings.last_updated_by, p_settings.last_update_date,
1133 p_settings.last_update_login);
1134
1135 IF (g_event_level>=g_debug_level) THEN --bug 3236479
1136 XTR_RISK_DEBUG_PKG.dlog('DML','Inserted into QRM_ANALYSIS_SETTINGS attributes with history_flag=S',
1137 'QRM_CALCULATION_P.RUN_ANALYSIS',g_event_level);
1138 END IF;
1139
1140 -- store attributes rows for bulk copy
1141 FOR atts_rec IN get_attributes(p_analysis_name) LOOP
1142 p_att_counter := p_att_counter + 1;
1143 p_att_name.EXTEND;
1144 p_att_name(p_att_counter) := atts_rec.attribute_name;
1145 p_att_type.EXTEND;
1146 p_att_type(p_att_counter) := atts_rec.type;
1147 p_att_order.EXTEND;
1148 p_att_order(p_att_counter) := atts_rec.att_order;
1149 p_att_average.EXTEND;
1150 p_att_average(p_att_counter) := atts_rec.total_average;
1151 p_att_ind.EXTEND;
1152 p_att_ind(p_att_counter) := atts_rec.total_ind;
1153 p_att_percentage.EXTEND;
1154 p_att_percentage(p_att_counter) := atts_rec.percentage;
1155 p_att_created_by.EXTEND;
1156 p_att_created_by(p_att_counter) := atts_rec.created_by;
1157 p_att_creation_date.EXTEND;
1158 p_att_creation_date(p_att_counter) := atts_rec.creation_date;
1159 p_att_updated_by.EXTEND;
1160 p_att_updated_by(p_att_counter) := atts_rec.last_updated_by;
1161 p_att_update_date.EXTEND;
1162 p_att_update_date(p_att_counter) := atts_rec.last_update_date;
1163 p_att_update_login.EXTEND;
1164 p_att_update_login(p_att_counter) := atts_rec.last_update_login;
1165 END LOOP;
1166
1167 IF (g_state_level>=g_debug_level) THEN --bug 3236479
1168 for i in 1..p_att_counter loop
1169 v_log := p_att_name(i)||','||p_analysis_name||','||'S'||','||
1170 p_att_type(i)||','||p_att_order(i)||','||p_att_average(i)||','||
1171 p_att_ind(i)||','|| p_att_percentage(i);
1172 XTR_RISK_DEBUG_PKG.dlog('INSERT QRM_ANALYSIS_ATTS',v_log,
1173 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
1174 end loop;
1175 END IF;
1176
1177 -- bulk copy of attributes with history_flag='S'
1178 FORALL i IN 1..p_att_counter
1179 INSERT
1180 INTO qrm_analysis_atts (attribute_name, analysis_name, history_flag,
1181 type, att_order, total_average, total_ind, percentage, created_by,
1182 creation_date, last_updated_by, last_update_date, last_update_login)
1183 VALUES (p_att_name(i), p_analysis_name, 'S', p_att_type(i),
1184 p_att_order(i), p_att_average(i), p_att_ind(i), p_att_percentage(i),
1185 p_att_created_by(i), p_att_creation_date(i), p_att_updated_by(i),
1186 p_att_update_date(i), p_att_update_login(i));
1187
1188 IF (g_event_level>=g_debug_level) THEN --bug 3236479
1189 XTR_RISK_DEBUG_PKG.dlog('DML','Inserted into QRM_ANALYSIS_ATTS attributes with history_flag=S',
1190 'QRM_CALCULATION_P.RUN_ANALYSIS',g_event_level);
1191 END IF;
1192
1193 -- update status column to "In Progress"
1194 -- updates both history_flag='C' and 'S' rows in analysis settings
1195 UPDATE qrm_analysis_settings
1196 SET status = '3',
1197 process_id = FND_GLOBAL.conc_request_id,
1198 last_run_date = p_ref_datetime,
1199 dirty = 'N'
1200 WHERE analysis_name = p_analysis_name;
1201
1202 IF (g_event_level>=g_debug_level) THEN --bug 3236479
1203 XTR_RISK_DEBUG_PKG.dlog('DML','Updated status column to 3 (In Progress)',
1204 'QRM_CALCULATION_P.RUN_ANALYSIS',g_event_level);
1205 END IF;
1206
1207 COMMIT;
1208
1209 -- retrieved analysis settings, now get where clause from filters
1210 -- if no filter defined for analysis, leave filter where clause to null
1211 IF (p_settings.filter_name IS NOT NULL) THEN
1212 OPEN get_filter_where_clause(p_settings.filter_name);
1213 FETCH get_filter_where_clause INTO p_filter_where_clause;
1214 IF (get_filter_where_clause%NOTFOUND) THEN
1215 RAISE_APPLICATION_ERROR(-20001,'filter '||p_settings.filter_name||
1216 ' does not exist');
1217 END IF;
1218 CLOSE get_filter_where_clause;
1219 p_filter_where_clause := ' AND '||p_filter_where_clause;
1220 END IF;
1221
1222 IF (g_proc_level>=g_debug_level) THEN
1223 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'creating select stmt...');
1224 END IF;
1225 -- construct select statement to exclude closed deals
1226
1227 /* BUG 2945198 - sql binding
1228 FOR i IN 1..p_num_of_cols LOOP
1229 p_select_clause := p_select_clause||' :'||i;
1230 IF (i <> p_num_of_cols) THEN
1231 p_select_clause := p_select_clause||',';
1232 END IF;
1233 END LOOP;
1234 */
1235
1236 p_select_stmt := p_select_clause || p_from_where_clause;
1237
1238 -- filter out NOCOPY deals according to measure
1239 p_where_measure := filter_measure(p_settings.style, p_analysis_name, null);
1240 IF (p_where_measure IS NOT NULL) THEN
1241 p_appended_where := ' AND '||p_where_measure;
1242 End If;
1243
1244 -- BUG 2945198 - sql bind
1245 BEGIN
1246 DELETE
1247 FROM qrm_deals_analyses
1248 WHERE analysis_name=p_analysis_name;
1249
1250 IF (g_event_level>=g_debug_level) THEN --bug 3236479
1251 XTR_RISK_DEBUG_PKG.dlog('DML','DELETED QRM_DEALS_ANALYSES',
1252 'QRM_CALCULATION_P.RUN_ANALYSIS',g_event_level);
1253 END IF;
1254
1255 v_cursor := dbms_sql.open_cursor;
1256
1257 p_batch_fetch_size := fnd_profile.value('QRM_ANA_CALC_BATCH_SIZE');
1258
1259 if (p_batch_fetch_size is null or p_batch_fetch_size < 1) then
1260 p_batch_fetch_size := 1000;
1261 end if;
1262
1263 IF (g_proc_level>=g_debug_level) THEN
1264 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'processing batch size: '||p_batch_fetch_size);
1265 END IF;
1266
1267 -- filter out NOCOPY deals according to dates in settings
1268 -- Maturity: from_date <= end_date <= to_date
1269 -- Position: deal_date <= to_date <= end_date
1270 -- Gap: from_date <= gap_date <= to date cannot filter: gap date not known yet
1271 IF (p_settings.analysis_type = 'M') THEN -- maturity analysis
1272 IF (g_proc_level>=g_debug_level) THEN
1273 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'Maturity Analysis');
1274 END IF;
1275 p_appended_where := p_appended_where ||' AND :from_date <= NVL(end_date, :p_ref_date+1) AND NVL(end_date, :p_ref_date+1) <= :to_date AND DEAL_TYPE <> ''STOCK''';
1276
1277 p_select_stmt := p_select_stmt||p_appended_where||p_filter_where_clause;
1278
1279 -- BUG 2945198 - sql bind
1280 dbms_sql.parse(v_cursor,p_select_stmt,dbms_sql.native);
1281 dbms_sql.bind_variable(v_cursor,':from_date',p_from_date);
1282 dbms_sql.bind_variable(v_cursor,':p_ref_date',p_ref_date);
1283 dbms_sql.bind_variable(v_cursor,':to_date',p_to_date);
1284 /*
1285 p_select_stmt := 'BEGIN '||p_select_stmt||';END;';
1286
1287 IF (g_proc_level>=g_debug_level) THEN
1288 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'select stmt: ', p_select_stmt);
1289 END IF;
1290
1291 EXECUTE IMMEDIATE p_select_stmt USING OUT p_deal_nos,
1292 OUT p_transaction_nos, OUT p_market_data_sets, OUT p_company_codes,
1293 OUT p_calls_or_puts, OUT p_pricing_models, OUT p_deal_ccys,
1294 OUT p_buy_ccys, OUT p_sell_ccys, OUT p_foreign_ccys,
1295 OUT p_domestic_ccys, OUT p_base_ccys, OUT p_contra_ccys,
1296 OUT p_premium_ccys,
1297 OUT p_buy_amounts, OUT p_sell_amounts, OUT p_foreign_amounts,
1298 OUT p_domestic_amounts, OUT p_base_amounts,OUT p_contra_amounts,
1299 OUT p_start_amounts, OUT p_face_values, OUT p_interests,
1300 OUT p_accum_int_bfs, OUT p_accum_int_actions, OUT p_accrued_interests,
1301 OUT p_interests_settled, OUT p_deal_dates, OUT p_end_dates,
1302 OUT p_gap_dates, OUT p_deal_subtypes, OUT p_deal_types,
1303 OUT p_discount_yields, OUT p_maturity_dates, OUT p_no_of_days,
1304 OUT p_settle_dates, OUT p_premium_amounts, OUT p_start_dates,
1305 OUT p_initial_bases, OUT p_bond_issues,
1306 OUT p_coupon_actions, OUT p_coupon_rates, OUT p_margins,
1307 OUT p_transaction_rates, OUT p_coupon_freqs,
1308 OUT p_next_coupon_dates, OUT p_day_count_bases, OUT p_quantity_out,
1309 OUT p_rounding_type, OUT p_day_count_type, OUT p_prepaid_interests,
1310 IN p_from_date,
1311 IN p_ref_date, IN p_to_date;
1312
1313 IF (g_proc_level>=g_debug_level) THEN
1314 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NO OF ROWS RETRIEVED: '||p_deal_nos.count);
1315 END IF;
1316 FOR i IN 1..p_deal_nos.count LOOP
1317 IF (g_proc_level>=g_debug_level) THEN
1318 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'd_no: '||p_deal_nos(i)||'; t_no: '||p_transaction_nos(i)||'; type: '||p_deal_types(i)||'; end date: '||p_end_dates(i));
1319 END IF;
1320 END LOOP;
1321 */
1322 ELSIF (p_settings.analysis_type = 'P') THEN -- position analysis
1323 IF (g_proc_level>=g_debug_level) THEN
1324 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'Position Analysis');
1325 END IF;
1326 p_appended_where := p_appended_where || ' AND ((deal_type<>''FXO'') OR (deal_type=''FXO'' AND (knock_type=''O'' OR knock_type IS NULL OR (knock_type=''I'' and knock_execute_date IS NOT NULL))))';
1327
1328 IF (p_settings.style = 'X') THEN
1329 p_appended_where := p_appended_where ||
1330 ' AND deal_date <= :to_date AND (end_date >= :from_date
1331 OR end_date IS NULL)';
1332 p_select_stmt := p_select_stmt||p_appended_where
1333 ||p_filter_where_clause;
1334 -- BUG 2945198 - sql bind
1335 dbms_sql.parse(v_cursor,p_select_stmt,dbms_sql.native);
1336 dbms_sql.bind_variable(v_cursor,':to_date',p_to_date);
1337 dbms_sql.bind_variable(v_cursor,':from_date',p_from_date);
1338 /*
1339 p_select_stmt := 'BEGIN '||p_select_stmt||';END;';
1340
1341 IF (g_proc_level>=g_debug_level) THEN
1342 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'select stmt: ', p_select_stmt);
1343 END IF;
1344
1345 EXECUTE IMMEDIATE p_select_stmt USING OUT p_deal_nos,
1346 OUT p_transaction_nos, OUT p_market_data_sets,
1347 OUT p_company_codes, OUT p_calls_or_puts, OUT p_pricing_models,
1348 OUT p_deal_ccys, OUT p_buy_ccys, OUT p_sell_ccys,
1349 OUT p_foreign_ccys, OUT p_domestic_ccys, OUT p_base_ccys,
1350 OUT p_contra_ccys, OUT p_premium_ccys, OUT p_buy_amounts,
1351 OUT p_sell_amounts, OUT p_foreign_amounts, OUT p_domestic_amounts,
1352 OUT p_base_amounts,OUT p_contra_amounts, OUT p_start_amounts,
1353 OUT p_face_values, OUT p_interests, OUT p_accum_int_bfs,
1354 OUT p_accum_int_actions, OUT p_accrued_interests,
1355 OUT p_interests_settled, OUT p_deal_dates, OUT p_end_dates,
1356 OUT p_gap_dates, OUT p_deal_subtypes, OUT p_deal_types,
1357 OUT p_discount_yields, OUT p_maturity_dates, OUT p_no_of_days,
1358 OUT p_settle_dates, OUT p_premium_amounts, OUT p_start_dates,
1359 OUT p_initial_bases, OUT p_bond_issues, OUT p_coupon_actions,
1360 OUT p_coupon_rates, OUT p_margins, OUT p_transaction_rates,
1361 OUT p_coupon_freqs, OUT p_next_coupon_dates,
1362 OUT p_day_count_bases, OUT p_quantity_out,
1363 OUT p_rounding_type, OUT p_day_count_type, OUT p_prepaid_interests,
1364 IN p_to_date, IN p_from_date;
1365 */
1366 ELSE
1367 p_appended_where := p_appended_where ||
1368 ' AND deal_date <= :to_date AND (:to_date < end_date
1369 OR end_date IS NULL)';
1370 p_select_stmt := p_select_stmt||p_appended_where
1371 ||p_filter_where_clause;
1372 -- BUG 2945198 - sql bind
1373 dbms_sql.parse(v_cursor,p_select_stmt,dbms_sql.native);
1374 dbms_sql.bind_variable(v_cursor,':to_date',p_to_date);
1375 /*
1376 p_select_stmt := 'BEGIN '||p_select_stmt||';END;';
1377
1378 IF (g_proc_level>=g_debug_level) THEN
1379 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'select stmt: ', p_select_stmt);
1380 END IF;
1381
1382 EXECUTE IMMEDIATE p_select_stmt USING OUT p_deal_nos,
1383 OUT p_transaction_nos, OUT p_market_data_sets,
1384 OUT p_company_codes, OUT p_calls_or_puts, OUT p_pricing_models,
1385 OUT p_deal_ccys, OUT p_buy_ccys, OUT p_sell_ccys,
1386 OUT p_foreign_ccys, OUT p_domestic_ccys, OUT p_base_ccys,
1387 OUT p_contra_ccys, OUT p_premium_ccys, OUT p_buy_amounts,
1388 OUT p_sell_amounts, OUT p_foreign_amounts, OUT p_domestic_amounts,
1389 OUT p_base_amounts,OUT p_contra_amounts, OUT p_start_amounts,
1390 OUT p_face_values, OUT p_interests, OUT p_accum_int_bfs,
1391 OUT p_accum_int_actions, OUT p_accrued_interests,
1392 OUT p_interests_settled, OUT p_deal_dates, OUT p_end_dates,
1393 OUT p_gap_dates, OUT p_deal_subtypes, OUT p_deal_types,
1394 OUT p_discount_yields, OUT p_maturity_dates, OUT p_no_of_days,
1395 OUT p_settle_dates, OUT p_premium_amounts, OUT p_start_dates,
1396 OUT p_initial_bases, OUT p_bond_issues, OUT p_coupon_actions,
1397 OUT p_coupon_rates, OUT p_margins, OUT p_transaction_rates,
1398 OUT p_coupon_freqs, OUT p_next_coupon_dates,
1399 OUT p_day_count_bases, OUT p_quantity_out,
1400 OUT p_rounding_type, OUT p_day_count_type,
1401 OUT p_prepaid_interests, IN p_to_date;
1402 */
1403
1404 END IF;
1405 /*
1406 IF (g_proc_level>=g_debug_level) THEN
1407 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NUMBER OF DEALS: ' || p_deal_nos.count);
1408 END IF;
1409
1410 FOR i IN 1..p_deal_nos.count LOOP
1411 IF (g_proc_level>=g_debug_level) THEN
1412 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'd_no: '||p_deal_nos(i)||'; t_no: '||p_transaction_nos(i)||'; type: '||p_deal_types(i)||'; end date: '||p_end_dates(i));
1413 END IF;
1414 END LOOP;
1415 */
1416
1417 ELSIF (p_settings.analysis_type ='G') THEN -- gap analysis
1418 IF (g_proc_level>=g_debug_level) THEN
1419 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'Gap Analysis');
1420 END IF;
1421 -- cannot filter based on gap date, since haven't calculated yet
1422 p_appended_where := p_appended_where ||' AND DEAL_TYPE <> ''STOCK''';
1423 p_select_stmt := p_select_stmt||p_appended_where||p_filter_where_clause;
1424 -- BUG 2945198 - sql bind
1425 dbms_sql.parse(v_cursor,p_select_stmt,dbms_sql.native);
1426 /*
1427 p_select_stmt := 'BEGIN '||p_select_stmt||';END;';
1428
1429 IF (g_proc_level>=g_debug_level) THEN
1430 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'select stmt: ', p_select_stmt);
1431 END IF;
1432
1433 EXECUTE IMMEDIATE p_select_stmt USING OUT p_deal_nos,
1434 OUT p_transaction_nos, OUT p_market_data_sets,
1435 OUT p_company_codes, OUT p_calls_or_puts,
1436 OUT p_pricing_models, OUT p_deal_ccys, OUT p_buy_ccys,
1437 OUT p_sell_ccys, OUT p_foreign_ccys, OUT p_domestic_ccys,
1438 OUT p_base_ccys, OUT p_contra_ccys, OUT p_premium_ccys,
1439 OUT p_buy_amounts,
1440 OUT p_sell_amounts, OUT p_foreign_amounts, OUT p_domestic_amounts,
1441 OUT p_base_amounts, OUT p_contra_amounts, OUT p_start_amounts,
1442 OUT p_face_values, OUT p_interests, OUT p_accum_int_bfs,
1443 OUT p_accum_int_actions, OUT p_accrued_interests,
1444 OUT p_interests_settled, OUT p_deal_dates, OUT p_end_dates,
1445 OUT p_gap_dates, OUT p_deal_subtypes, OUT p_deal_types,
1446 OUT p_discount_yields, OUT p_maturity_dates, OUT p_no_of_days,
1447 OUT p_settle_dates, OUT p_premium_amounts, OUT p_start_dates,
1448 OUT p_initial_bases, OUT p_bond_issues,
1449 OUT p_coupon_actions, OUT p_coupon_rates, OUT p_margins,
1450 OUT p_transaction_rates, OUT p_coupon_freqs,
1451 OUT p_next_coupon_dates, OUT p_day_count_bases, OUT p_quantity_out,
1452 OUT p_rounding_type, OUT p_day_count_type, OUT p_prepaid_interests;
1453
1454 FOR i IN 1..p_deal_nos.count LOOP
1455 IF (g_proc_level>=g_debug_level) THEN
1456 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'd_no: '||p_deal_nos(i)||'; t_no: '||p_transaction_nos(i)||'; type: '||p_deal_types(i)||'; end date: '||p_end_dates(i));
1457 END IF;
1458 END LOOP;
1459 */
1460 END IF;
1461
1462
1463 -- BUG 2945198 - sql bind
1464 IF (g_proc_level>=g_debug_level) THEN
1465 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'select stmt: ', p_select_stmt);
1466 END IF;
1467
1468 for p_filter_bindings in get_filter_bindings(p_settings.filter_name) loop
1469 dbms_sql.bind_variable(v_cursor,':'||to_char(p_filter_bindings.row_number),p_filter_bindings.value);
1470 end loop;
1471
1472 n_num_rows_fetched := dbms_sql.execute(v_cursor);
1473
1474 loop
1475
1476 dbms_sql.define_array(v_cursor, 1, p_deal_nos, p_batch_fetch_size, p_batch_start_index);
1477 dbms_sql.define_array(v_cursor, 2, p_transaction_nos, p_batch_fetch_size, p_batch_start_index);
1478 dbms_sql.define_array(v_cursor, 3, p_market_data_sets, p_batch_fetch_size, p_batch_start_index);
1479 dbms_sql.define_array(v_cursor, 4, p_company_codes, p_batch_fetch_size, p_batch_start_index);
1480 dbms_sql.define_array(v_cursor, 5, p_calls_or_puts, p_batch_fetch_size, p_batch_start_index);
1481 dbms_sql.define_array(v_cursor, 6, p_pricing_models, p_batch_fetch_size, p_batch_start_index);
1482 dbms_sql.define_array(v_cursor, 7, p_deal_ccys, p_batch_fetch_size, p_batch_start_index);
1483 dbms_sql.define_array(v_cursor, 8, p_buy_ccys, p_batch_fetch_size, p_batch_start_index);
1484 dbms_sql.define_array(v_cursor, 9, p_sell_ccys, p_batch_fetch_size, p_batch_start_index);
1485 dbms_sql.define_array(v_cursor, 10, p_foreign_ccys, p_batch_fetch_size, p_batch_start_index);
1486 dbms_sql.define_array(v_cursor, 11, p_domestic_ccys, p_batch_fetch_size, p_batch_start_index);
1487 dbms_sql.define_array(v_cursor, 12, p_base_ccys, p_batch_fetch_size, p_batch_start_index);
1488 dbms_sql.define_array(v_cursor, 13, p_contra_ccys, p_batch_fetch_size, p_batch_start_index);
1489 dbms_sql.define_array(v_cursor, 14, p_premium_ccys, p_batch_fetch_size, p_batch_start_index);
1490 dbms_sql.define_array(v_cursor, 15, p_buy_amounts, p_batch_fetch_size, p_batch_start_index);
1491 dbms_sql.define_array(v_cursor, 16, p_sell_amounts, p_batch_fetch_size, p_batch_start_index);
1492 dbms_sql.define_array(v_cursor, 17, p_foreign_amounts, p_batch_fetch_size, p_batch_start_index);
1493 dbms_sql.define_array(v_cursor, 18, p_domestic_amounts, p_batch_fetch_size, p_batch_start_index);
1494 dbms_sql.define_array(v_cursor, 19, p_base_amounts, p_batch_fetch_size, p_batch_start_index);
1495 dbms_sql.define_array(v_cursor, 20, p_contra_amounts, p_batch_fetch_size, p_batch_start_index);
1496 dbms_sql.define_array(v_cursor, 21, p_start_amounts, p_batch_fetch_size, p_batch_start_index);
1497 dbms_sql.define_array(v_cursor, 22, p_face_values, p_batch_fetch_size, p_batch_start_index);
1498 dbms_sql.define_array(v_cursor, 23, p_interests, p_batch_fetch_size, p_batch_start_index);
1499 dbms_sql.define_array(v_cursor, 24, p_accum_int_bfs, p_batch_fetch_size, p_batch_start_index);
1500 dbms_sql.define_array(v_cursor, 25, p_accum_int_actions, p_batch_fetch_size, p_batch_start_index);
1501 dbms_sql.define_array(v_cursor, 26, p_accrued_interests, p_batch_fetch_size, p_batch_start_index);
1502 dbms_sql.define_array(v_cursor, 27, p_interests_settled, p_batch_fetch_size, p_batch_start_index);
1503 dbms_sql.define_array(v_cursor, 28, p_deal_dates, p_batch_fetch_size, p_batch_start_index);
1504 dbms_sql.define_array(v_cursor, 29, p_end_dates, p_batch_fetch_size, p_batch_start_index);
1505 dbms_sql.define_array(v_cursor, 30, p_gap_dates, p_batch_fetch_size, p_batch_start_index);
1506 dbms_sql.define_array(v_cursor, 31, p_deal_subtypes, p_batch_fetch_size, p_batch_start_index);
1507 dbms_sql.define_array(v_cursor, 32, p_deal_types, p_batch_fetch_size, p_batch_start_index);
1508 dbms_sql.define_array(v_cursor, 33, p_discount_yields, p_batch_fetch_size, p_batch_start_index);
1509 dbms_sql.define_array(v_cursor, 34, p_maturity_dates, p_batch_fetch_size, p_batch_start_index);
1510 dbms_sql.define_array(v_cursor, 35, p_no_of_days, p_batch_fetch_size, p_batch_start_index);
1511 dbms_sql.define_array(v_cursor, 36, p_settle_dates, p_batch_fetch_size, p_batch_start_index);
1512 dbms_sql.define_array(v_cursor, 37, p_premium_amounts, p_batch_fetch_size, p_batch_start_index);
1513 dbms_sql.define_array(v_cursor, 38, p_start_dates, p_batch_fetch_size, p_batch_start_index);
1514 dbms_sql.define_array(v_cursor, 39, p_initial_bases, p_batch_fetch_size, p_batch_start_index);
1515 dbms_sql.define_array(v_cursor, 40, p_bond_issues, p_batch_fetch_size, p_batch_start_index);
1516 dbms_sql.define_array(v_cursor, 41, p_coupon_actions, p_batch_fetch_size, p_batch_start_index);
1517 dbms_sql.define_array(v_cursor, 42, p_coupon_rates, p_batch_fetch_size, p_batch_start_index);
1518 dbms_sql.define_array(v_cursor, 43, p_margins, p_batch_fetch_size, p_batch_start_index);
1519 dbms_sql.define_array(v_cursor, 44, p_transaction_rates, p_batch_fetch_size, p_batch_start_index);
1520 dbms_sql.define_array(v_cursor, 45, p_coupon_freqs, p_batch_fetch_size, p_batch_start_index);
1521 dbms_sql.define_array(v_cursor, 46, p_next_coupon_dates, p_batch_fetch_size, p_batch_start_index);
1522 dbms_sql.define_array(v_cursor, 47, p_day_count_bases, p_batch_fetch_size, p_batch_start_index);
1523 dbms_sql.define_array(v_cursor, 48, p_quantity_out, p_batch_fetch_size, p_batch_start_index);
1524 dbms_sql.define_array(v_cursor, 49, p_rounding_type, p_batch_fetch_size, p_batch_start_index);
1525 dbms_sql.define_array(v_cursor, 50, p_day_count_type, p_batch_fetch_size, p_batch_start_index);
1526 dbms_sql.define_array(v_cursor, 51, p_prepaid_interests, p_batch_fetch_size, p_batch_start_index);
1527
1528 n_num_rows_fetched := dbms_sql.fetch_rows(v_cursor);
1529
1530 dbms_sql.column_value(v_cursor, 1, p_deal_nos);
1531 dbms_sql.column_value(v_cursor, 2, p_transaction_nos);
1532 dbms_sql.column_value(v_cursor, 3, p_market_data_sets);
1533 dbms_sql.column_value(v_cursor, 4, p_company_codes);
1534 dbms_sql.column_value(v_cursor, 5, p_calls_or_puts);
1535 dbms_sql.column_value(v_cursor, 6, p_pricing_models);
1536 dbms_sql.column_value(v_cursor, 7, p_deal_ccys);
1537 dbms_sql.column_value(v_cursor, 8, p_buy_ccys);
1538 dbms_sql.column_value(v_cursor, 9, p_sell_ccys);
1539 dbms_sql.column_value(v_cursor, 10, p_foreign_ccys);
1540 dbms_sql.column_value(v_cursor, 11, p_domestic_ccys);
1541 dbms_sql.column_value(v_cursor, 12, p_base_ccys);
1542 dbms_sql.column_value(v_cursor, 13, p_contra_ccys);
1543 dbms_sql.column_value(v_cursor, 14, p_premium_ccys);
1544 dbms_sql.column_value(v_cursor, 15, p_buy_amounts);
1545 dbms_sql.column_value(v_cursor, 16, p_sell_amounts);
1546 dbms_sql.column_value(v_cursor, 17, p_foreign_amounts);
1547 dbms_sql.column_value(v_cursor, 18, p_domestic_amounts);
1548 dbms_sql.column_value(v_cursor, 19, p_base_amounts);
1549 dbms_sql.column_value(v_cursor, 20, p_contra_amounts);
1550 dbms_sql.column_value(v_cursor, 21, p_start_amounts);
1551 dbms_sql.column_value(v_cursor, 22, p_face_values);
1552 dbms_sql.column_value(v_cursor, 23, p_interests);
1553 dbms_sql.column_value(v_cursor, 24, p_accum_int_bfs);
1554 dbms_sql.column_value(v_cursor, 25, p_accum_int_actions);
1555 dbms_sql.column_value(v_cursor, 26, p_accrued_interests);
1556 dbms_sql.column_value(v_cursor, 27, p_interests_settled);
1557 dbms_sql.column_value(v_cursor, 28, p_deal_dates);
1558 dbms_sql.column_value(v_cursor, 29, p_end_dates);
1559 dbms_sql.column_value(v_cursor, 30, p_gap_dates);
1560 dbms_sql.column_value(v_cursor, 31, p_deal_subtypes);
1561 dbms_sql.column_value(v_cursor, 32, p_deal_types);
1562 dbms_sql.column_value(v_cursor, 33, p_discount_yields);
1563 dbms_sql.column_value(v_cursor, 34, p_maturity_dates);
1564 dbms_sql.column_value(v_cursor, 35, p_no_of_days);
1565 dbms_sql.column_value(v_cursor, 36, p_settle_dates);
1566 dbms_sql.column_value(v_cursor, 37, p_premium_amounts);
1567 dbms_sql.column_value(v_cursor, 38, p_start_dates);
1568 dbms_sql.column_value(v_cursor, 39, p_initial_bases);
1569 dbms_sql.column_value(v_cursor, 40, p_bond_issues);
1570 dbms_sql.column_value(v_cursor, 41, p_coupon_actions);
1571 dbms_sql.column_value(v_cursor, 42, p_coupon_rates);
1572 dbms_sql.column_value(v_cursor, 43, p_margins);
1573 dbms_sql.column_value(v_cursor, 44, p_transaction_rates);
1574 dbms_sql.column_value(v_cursor, 45, p_coupon_freqs);
1575 dbms_sql.column_value(v_cursor, 46, p_next_coupon_dates);
1576 dbms_sql.column_value(v_cursor, 47, p_day_count_bases);
1577 dbms_sql.column_value(v_cursor, 48, p_quantity_out);
1578 dbms_sql.column_value(v_cursor, 49, p_rounding_type);
1579 dbms_sql.column_value(v_cursor, 50, p_day_count_type);
1580 dbms_sql.column_value(v_cursor, 51, p_prepaid_interests);
1581
1582
1583 /*
1584 IF (g_proc_level>=g_debug_level) THEN
1585 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'made it past select statement');
1586 END IF;
1587 IF (p_deal_nos.COUNT = 0) THEN
1588 retcode := '5';
1589 END IF;
1590
1591 FOR i IN 1..p_deal_nos.count LOOP -- extend the temp tables
1592 */
1593 IF (g_proc_level>=g_debug_level) THEN
1594 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NO OF ROWS RETRIEVED: '||p_deal_nos.count);
1595 FOR i IN 1..n_num_rows_fetched LOOP
1596 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'd_no: '||p_deal_nos(i)||'; t_no: '||p_transaction_nos(i)||'; type: '||p_deal_types(i)||'; end date: '||p_end_dates(i));
1597 END LOOP;
1598 END IF;
1599
1600
1601 p_total_deals_counter := p_total_deals_counter + n_num_rows_fetched;
1602 if (p_total_deals_counter = 0) then
1603 retcode := '5';
1604 end if;
1605
1606 -- Reset counting variables
1607 p_insert_counter := 0;
1608 p_update_counter := 0;
1609 p_tb_counter := 0;
1610
1611 -- Reset holding tables
1612 p_seq_nos.DELETE;
1613 p_deal_no_insert.DELETE;
1614 p_company_code_insert.DELETE;
1615 p_transaction_no_insert.DELETE;
1616 p_market_data_set_insert.DELETE;
1617 p_deal_ccy_insert.DELETE;
1618 p_sob_ccy_insert.DELETE;
1619 p_base_ccy_amount_usd_insert.DELETE;
1620 p_base_ccy_amount_sob_insert.DELETE;
1621 p_contra_ccy_amount_usd_insert.DELETE;
1622 p_contra_ccy_amount_sob_insert.DELETE;
1623 p_foreign_amount_usd_insert.DELETE;
1624 p_foreign_amount_sob_insert.DELETE;
1625 p_domestic_amount_usd_insert.DELETE;
1626 p_domestic_amount_sob_insert.DELETE;
1627 p_buy_amount_usd_insert.DELETE;
1628 p_buy_amount_sob_insert.DELETE;
1629 p_sell_amount_usd_insert.DELETE;
1630 p_sell_amount_sob_insert.DELETE;
1631 p_days_insert.DELETE;
1632 p_fx_reval_rate_insert.DELETE;
1633 p_reval_price_insert.DELETE;
1634 p_reval_price_usd_insert.DELETE;
1635 p_reval_price_sob_insert.DELETE;
1636 p_mm_reval_rate_insert.DELETE;
1637 p_fx_trans_rate_insert.DELETE;
1638 p_trans_price_insert.DELETE;
1639 p_trans_price_usd_insert.DELETE;
1640 p_trans_price_sob_insert.DELETE;
1641 p_mm_trans_rate_insert.DELETE;
1642 p_fair_value_insert.DELETE;
1643 p_fair_value_usd_insert.DELETE;
1644 p_fair_value_sob_insert.DELETE;
1645 p_gap_amount_insert.DELETE;
1646 p_gap_amount_usd_insert.DELETE;
1647 p_gap_amount_sob_insert.DELETE;
1648 p_maturity_amount_insert.DELETE;
1649 p_maturity_amount_usd_insert.DELETE;
1650 p_maturity_amount_sob_insert.DELETE;
1651 p_premium_amount_usd_insert.DELETE;
1652 p_premium_amount_sob_insert.DELETE;
1653 p_accrued_interest_insert.DELETE;
1654 p_accrued_interest_usd_insert.DELETE;
1655 p_accrued_interest_sob_insert.DELETE;
1656 p_duration_insert.DELETE;
1657 p_mod_duration_insert.DELETE;
1658 p_convexity_insert.DELETE;
1659 p_delta_insert.DELETE;
1660 p_gamma_insert.DELETE;
1661 p_theta_insert.DELETE;
1662 p_rho_insert.DELETE;
1663 p_rho_base_insert.DELETE;
1664 p_rho_contra_insert.DELETE;
1665 p_rho_for_insert.DELETE;
1666 p_rho_dom_insert.DELETE;
1667 p_vega_insert.DELETE;
1668 p_pos_bpv_insert.DELETE;
1669 p_pos_bpv_usd_insert.DELETE;
1670 p_pos_bpv_sob_insert.DELETE;
1671 p_pos_delta_insert.DELETE;
1672 p_pos_delta_usd_insert.DELETE;
1673 p_pos_delta_sob_insert.DELETE;
1674 p_pos_gamma_insert.DELETE;
1675 p_pos_gamma_usd_insert.DELETE;
1676 p_pos_gamma_sob_insert.DELETE;
1677 p_pos_theta_insert.DELETE;
1678 p_pos_theta_usd_insert.DELETE;
1679 p_pos_theta_sob_insert.DELETE;
1680 p_pos_rho_insert.DELETE;
1681 p_pos_rho_usd_insert.DELETE;
1682 p_pos_rho_sob_insert.DELETE;
1683 p_pos_rho_base_insert.DELETE;
1684 p_pos_rho_base_usd_insert.DELETE;
1685 p_pos_rho_base_sob_insert.DELETE;
1686 p_pos_rho_contra_insert.DELETE;
1687 p_pos_rho_contra_usd_insert.DELETE;
1688 p_pos_rho_contra_sob_insert.DELETE;
1689 p_pos_rho_for_insert.DELETE;
1690 p_pos_rho_for_usd_insert.DELETE;
1691 p_pos_rho_for_sob_insert.DELETE;
1692 p_pos_rho_dom_insert.DELETE;
1693 p_pos_rho_dom_usd_insert.DELETE;
1694 p_pos_rho_dom_sob_insert.DELETE;
1695 p_pos_vega_insert.DELETE;
1696 p_pos_vega_usd_insert.DELETE;
1697 p_pos_vega_sob_insert.DELETE;
1698 p_volatility_insert.DELETE;
1699 p_ytm_insert.DELETE;
1700 p_gap_date_insert.DELETE;
1701
1702 p_deal_calc_id_update.DELETE;
1703 p_deal_no_update.DELETE;
1704 p_company_code_update.DELETE;
1705 p_transaction_no_update.DELETE;
1706 p_market_data_set_update.DELETE;
1707 p_deal_ccy_update.DELETE;
1708 p_sob_ccy_update.DELETE;
1709 p_base_ccy_amount_usd_update.DELETE;
1710 p_base_ccy_amount_sob_update.DELETE;
1711 p_contra_ccy_amount_usd_update.DELETE;
1712 p_contra_ccy_amount_sob_update.DELETE;
1713 p_foreign_amount_usd_update.DELETE;
1714 p_foreign_amount_sob_update.DELETE;
1715 p_domestic_amount_usd_update.DELETE;
1716 p_domestic_amount_sob_update.DELETE;
1717 p_buy_amount_usd_update.DELETE;
1718 p_buy_amount_sob_update.DELETE;
1719 p_sell_amount_usd_update.DELETE;
1720 p_sell_amount_sob_update.DELETE;
1721 p_days_update.DELETE;
1722 p_fx_reval_rate_update.DELETE;
1723 p_reval_price_update.DELETE;
1724 p_reval_price_usd_update.DELETE;
1725 p_reval_price_sob_update.DELETE;
1726 p_mm_reval_rate_update.DELETE;
1727 p_fx_trans_rate_update.DELETE;
1728 p_trans_price_update.DELETE;
1729 p_trans_price_usd_update.DELETE;
1730 p_trans_price_sob_update.DELETE;
1731 p_mm_trans_rate_update.DELETE;
1732 p_fair_value_update.DELETE;
1733 p_fair_value_usd_update.DELETE;
1734 p_fair_value_sob_update.DELETE;
1735 p_gap_amount_update.DELETE;
1736 p_gap_amount_usd_update.DELETE;
1737 p_gap_amount_sob_update.DELETE;
1738 p_maturity_amount_update.DELETE;
1739 p_maturity_amount_usd_update.DELETE;
1740 p_maturity_amount_sob_update.DELETE;
1741 p_premium_amount_usd_update.DELETE;
1742 p_premium_amount_sob_update.DELETE;
1743 p_accrued_interest_update.DELETE;
1744 p_accrued_interest_usd_update.DELETE;
1745 p_accrued_interest_sob_update.DELETE;
1746 p_duration_update.DELETE;
1747 p_mod_duration_update.DELETE;
1748 p_convexity_update.DELETE;
1749 p_delta_update.DELETE;
1750 p_gamma_update.DELETE;
1751 p_theta_update.DELETE;
1752 p_rho_update.DELETE;
1753 p_rho_base_update.DELETE;
1754 p_rho_contra_update.DELETE;
1755 p_rho_for_update.DELETE;
1756 p_rho_dom_update.DELETE;
1757 p_vega_update.DELETE;
1758 p_pos_bpv_update.DELETE;
1759 p_pos_bpv_usd_update.DELETE;
1760 p_pos_bpv_sob_update.DELETE;
1761 p_pos_delta_update.DELETE;
1762 p_pos_delta_usd_update.DELETE;
1763 p_pos_delta_sob_update.DELETE;
1764 p_pos_gamma_update.DELETE;
1765 p_pos_gamma_usd_update.DELETE;
1766 p_pos_gamma_sob_update.DELETE;
1767 p_pos_theta_update.DELETE;
1768 p_pos_theta_usd_update.DELETE;
1769 p_pos_theta_sob_update.DELETE;
1770 p_pos_rho_update.DELETE;
1771 p_pos_rho_usd_update.DELETE;
1772 p_pos_rho_sob_update.DELETE;
1773 p_pos_rho_base_update.DELETE;
1774 p_pos_rho_base_usd_update.DELETE;
1775 p_pos_rho_base_sob_update.DELETE;
1776 p_pos_rho_contra_update.DELETE;
1777 p_pos_rho_contra_usd_update.DELETE;
1778 p_pos_rho_contra_sob_update.DELETE;
1779 p_pos_rho_for_update.DELETE;
1780 p_pos_rho_for_usd_update.DELETE;
1781 p_pos_rho_for_sob_update.DELETE;
1782 p_pos_rho_dom_update.DELETE;
1783 p_pos_rho_dom_usd_update.DELETE;
1784 p_pos_rho_dom_sob_update.DELETE;
1785 p_pos_vega_update.DELETE;
1786 p_pos_vega_usd_update.DELETE;
1787 p_pos_vega_sob_update.DELETE;
1788 p_volatility_update.DELETE;
1789 p_ytm_update.DELETE;
1790 p_gap_date_update.DELETE;
1791 p_upd_md_calc_date_update.DELETE;
1792
1793 p_tb_deal_no.DELETE;
1794 p_tb_transaction_no.DELETE;
1795 p_tb_market_data_set.DELETE;
1796 p_tb_pos_start_date.DELETE;
1797 p_tb_pos_end_date.DELETE;
1798 p_tb_start_date.DELETE;
1799 p_tb_end_date.DELETE;
1800 p_tb_outst_amount.DELETE;
1801 p_tb_outst_amount_usd.DELETE;
1802 p_tb_outst_amount_sob.DELETE;
1803 p_tb_amt_qty_out.DELETE;
1804 p_tb_amt_qty_out_usd.DELETE;
1805 p_tb_amt_qty_out_sob.DELETE;
1806 p_tb_interest_basis.DELETE;
1807 p_tb_coupon_rate.DELETE;
1808 p_tb_next_coupon_date.DELETE;
1809
1810
1811 FOR i IN p_deal_no_temp.count ..n_num_rows_fetched LOOP -- extend the temp tables
1812 -- END BUG 2945198 - sql binding
1813
1814 -- for qrm_deal_calculations table only
1815 p_deal_no_temp.EXTEND;
1816 p_company_code_temp.EXTEND;
1817 p_transaction_no_temp.EXTEND;
1818 p_market_data_set_temp.EXTEND;
1819 p_deal_ccy_temp.EXTEND;
1820 p_sob_ccy_temp.EXTEND;
1821 p_base_ccy_amount_usd_temp.EXTEND;
1822 p_base_ccy_amount_sob_temp.EXTEND;
1823 p_contra_ccy_amount_usd_temp.EXTEND;
1824 p_contra_ccy_amount_sob_temp.EXTEND;
1825 p_foreign_amount_usd_temp.EXTEND;
1826 p_foreign_amount_sob_temp.EXTEND;
1827 p_domestic_amount_usd_temp.EXTEND;
1828 p_domestic_amount_sob_temp.EXTEND;
1829 p_buy_amount_usd_temp.EXTEND;
1830 p_buy_amount_sob_temp.EXTEND;
1831 p_sell_amount_usd_temp.EXTEND;
1832 p_sell_amount_sob_temp.EXTEND;
1833 p_days_temp.EXTEND;
1834 p_fx_reval_rate_temp.EXTEND;
1835 p_mm_reval_rate_temp.EXTEND;
1836 p_fx_trans_rate_temp.EXTEND;
1837 p_mm_trans_rate_temp.EXTEND;
1838 p_trans_price_temp.EXTEND;
1839 p_trans_price_usd_temp.EXTEND;
1840 p_trans_price_sob_temp.EXTEND;
1841 p_reval_price_temp.EXTEND;
1842 p_reval_price_usd_temp.EXTEND;
1843 p_reval_price_sob_temp.EXTEND;
1844 p_fair_value_temp.EXTEND;
1845 p_fair_value_usd_temp.EXTEND;
1846 p_fair_value_sob_temp.EXTEND;
1847 p_gap_amount_temp.EXTEND;
1848 p_gap_amount_usd_temp.EXTEND;
1849 p_gap_amount_sob_temp.EXTEND;
1850 p_maturity_amount_temp.EXTEND;
1851 p_maturity_amount_usd_temp.EXTEND;
1852 p_maturity_amount_sob_temp.EXTEND;
1853 p_premium_amount_usd_temp.EXTEND;
1854 p_premium_amount_sob_temp.EXTEND;
1855 p_accrued_interest_temp.EXTEND;
1856 p_accrued_interest_usd_temp.EXTEND;
1857 p_accrued_interest_sob_temp.EXTEND;
1858 p_duration_temp.EXTEND;
1859 p_mod_duration_temp.EXTEND;
1860 p_convexity_temp.EXTEND;
1861 p_delta_temp.EXTEND;
1862 p_gamma_temp.EXTEND;
1863 p_theta_temp.EXTEND;
1864 p_rho_temp.EXTEND;
1865 p_rho_base_temp.EXTEND;
1866 p_rho_contra_temp.EXTEND;
1867 p_rho_for_temp.EXTEND;
1868 p_rho_dom_temp.EXTEND;
1869 p_vega_temp.EXTEND;
1870 p_pos_bpv_temp.EXTEND;
1871 p_pos_bpv_usd_temp.EXTEND;
1872 p_pos_bpv_sob_temp.EXTEND;
1873 p_pos_delta_temp.EXTEND;
1874 p_pos_delta_usd_temp.EXTEND;
1875 p_pos_delta_sob_temp.EXTEND;
1876 p_pos_gamma_temp.EXTEND;
1877 p_pos_gamma_usd_temp.EXTEND;
1878 p_pos_gamma_sob_temp.EXTEND;
1879 p_pos_theta_temp.EXTEND;
1880 p_pos_theta_usd_temp.EXTEND;
1881 p_pos_theta_sob_temp.EXTEND;
1882 p_pos_rho_temp.EXTEND;
1883 p_pos_rho_usd_temp.EXTEND;
1884 p_pos_rho_sob_temp.EXTEND;
1885 p_pos_rho_base_temp.EXTEND;
1886 p_pos_rho_base_usd_temp.EXTEND;
1887 p_pos_rho_base_sob_temp.EXTEND;
1888 p_pos_rho_contra_temp.EXTEND;
1889 p_pos_rho_contra_usd_temp.EXTEND;
1890 p_pos_rho_contra_sob_temp.EXTEND;
1891 p_pos_rho_for_temp.EXTEND;
1892 p_pos_rho_for_usd_temp.EXTEND;
1893 p_pos_rho_for_sob_temp.EXTEND;
1894 p_pos_rho_dom_temp.EXTEND;
1895 p_pos_rho_dom_usd_temp.EXTEND;
1896 p_pos_rho_dom_sob_temp.EXTEND;
1897 p_pos_vega_temp.EXTEND;
1898 p_pos_vega_usd_temp.EXTEND;
1899 p_pos_vega_sob_temp.EXTEND;
1900 p_ytm_temp.EXTEND;
1901 p_gap_date_temp.EXTEND;
1902 p_upd_md_calc_date_temp.EXTEND;
1903 p_volatility_temp.EXTEND;
1904 END LOOP;
1905
1906 -- FOR i IN 1..p_deal_nos.count LOOP -- loop through each selected deal
1907 FOR i IN 1..n_num_rows_fetched LOOP -- loop through each selected deal
1908 BEGIN
1909 -- logic for determing market data set:
1910 -- if mds specified in settings, use it for all deals
1911 -- else, if mds defined on deal level, use it
1912 -- else, use mds defined on company level (is always defined there)
1913 IF (p_settings.md_set_code IS NOT NULL) THEN
1914 p_market_data_set_temp(i) := p_settings.md_set_code;
1915 ELSIF (p_market_data_sets(i) IS NOT NULL) THEN
1916 p_market_data_set_temp(i) := p_market_data_sets(i);
1917 ELSE
1918 OPEN get_company_mds(p_company_codes(i));
1919 FETCH get_company_mds INTO p_market_data_set_temp(i);
1920 CLOSE get_company_mds;
1921 END IF;
1922
1923 -- get threshold date for analysis
1924 -- threshold only affects recalculation of fair values,sensitivities,
1925 -- reval rate, and volatility
1926 p_threshold_date := get_threshold_date(p_ref_datetime,
1927 p_settings.threshold_num, p_settings.threshold_type);
1928 IF (g_proc_level>=g_debug_level) THEN
1929 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'ref datetime', p_ref_datetime);
1930 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'threshold date', p_threshold_date);
1931 END IF;
1932 -- check to see if deal has been calculated previously
1933 OPEN deal_calculated(p_deal_nos(i), p_transaction_nos(i),
1934 p_market_data_set_temp(i));
1935 FETCH deal_calculated INTO p_deal_calculations;
1936 IF (deal_calculated%FOUND) THEN -- deal previously calculated
1937 IF (g_proc_level>=g_debug_level) THEN
1938 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'previously calculated: '||p_deal_nos(i));
1939 END IF;
1940 OPEN deal_threshold_ok(p_deal_nos(i), p_transaction_nos(i),
1941 p_market_data_set_temp(i), p_threshold_date);
1942 FETCH deal_threshold_ok INTO p_deal_calc_id;
1943 IF (deal_threshold_ok%NOTFOUND) THEN -- but doesn't meet threshold
1944 IF (g_proc_level>=g_debug_level) THEN
1945 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'doesnt meet threshold, need to update');
1946 END IF;
1947 p_insert_or_update := 'U'; -- update calculations
1948 ELSE
1949 IF (g_proc_level>=g_debug_level) THEN
1950 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'threshold met');
1951 END IF;
1952 p_insert_or_update := 'N'; -- threshold met, do nothing
1953 p_threshold_counter := p_threshold_counter + 1;
1954 END IF;
1955 CLOSE deal_threshold_ok;
1956 ELSE -- deal not previously calculated
1957 IF (g_proc_level>=g_debug_level) THEN
1958 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'never calculated before: '||p_deal_nos(i));
1959 END IF;
1960 p_insert_or_update := 'I'; -- insert deal calculations
1961 END IF;
1962 CLOSE deal_calculated;
1963
1964
1965 -- calculate Gap Date
1966 IF (p_deal_types(i) IN ('FX', 'FXO', 'STOCK')) THEN
1967 null; -- do nothing, no gap dates for FX/FXO
1968 ELSE
1969 IF (p_deal_types(i) IN ('TMM', 'IRS', 'RTMM')) THEN
1970 p_gap_date_temp(i) := get_gap_date(p_deal_nos(i),
1971 p_deal_types(i), p_initial_bases(i), p_ref_date);
1972 ELSIF (p_deal_types(i)='ONC') THEN
1973 --bug 2637950
1974 IF (p_start_dates(i)>p_ref_date) THEN
1975 p_gap_date_temp(i) := p_start_dates(i)+1;
1976 ELSE
1977 p_gap_date_temp(i) := NVL(p_maturity_dates(i), p_ref_date+1);
1978 END IF;
1979 ELSIF (p_deal_types(i)='IG') THEN
1980 p_gap_date_temp(i) := p_ref_date+1;
1981 ELSE -- other deals: gap date already mapped in qrm_current_deals_v
1982 p_gap_date_temp(i) := p_gap_dates(i);
1983 END IF;
1984 END IF;
1985 IF (g_proc_level>=g_debug_level) THEN
1986 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'deal no: '||p_deal_nos(i));
1987 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'calculated Gap Date', p_gap_date_temp(i));
1988 END IF;
1989
1990 p_gap_req_ok := TRUE; -- assume deal passes gap analysis requirements
1991 -- If Gap Analysis, use calculated gap date to further filter
1992 -- If other analysis, then automatically passes gap analysis requirements
1993 IF (p_settings.analysis_type='G') THEN
1994 IF (NOT((p_from_date<=p_gap_date_temp(i)) AND
1995 (p_gap_date_temp(i)<=p_to_date))) THEN
1996 -- deal does not match Gap Analysis requirements
1997 p_gap_req_ok := FALSE;
1998 END IF;
1999 ELSE
2000 p_gap_req_ok := TRUE;
2001 END IF;
2002
2003 IF (p_gap_req_ok) THEN -- passed gap date test
2004 IF (g_proc_level>=g_debug_level) THEN
2005 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'passed gap date test');
2006 END IF;
2007
2008 p_gap_deal_exists := TRUE;
2009 p_temp_counter := p_temp_counter + 1;
2010 -- deal no
2011 p_deal_no_temp(i) := p_deal_nos(i);
2012 -- company code
2013 p_company_code_temp(i) := p_company_codes(i);
2014 -- trans no
2015 p_transaction_no_temp(i) := p_transaction_nos(i);
2016
2017 -- deal currencies: ok for MM deals, null for FX/FXO
2018 p_deal_ccy_temp(i) := p_deal_ccys(i);
2019
2020 -- get SOB ccy -- SOB ccy is *always* defined
2021 OPEN get_sob_ccy(p_company_codes(i));
2022 FETCH get_sob_ccy INTO p_sob_ccy_temp(i);
2023 CLOSE get_sob_ccy;
2024 IF (g_proc_level>=g_debug_level) THEN
2025 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'sob ccy: ' || p_sob_ccy_temp(i));
2026 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'STARTING CALCULATION FOR deal no: '||p_deal_nos(i)||', trans no: '||p_transaction_nos(i));
2027 END IF;
2028 -- get day count and annual basis set up first
2029 days_run_helper(p_ref_date, p_end_dates(i),
2030 p_day_count_bases(i), NULL, p_day_count, p_annual_basis);
2031
2032 -- calculate days from ref date to end date, days to maturity
2033 p_days_temp(i) := NVL(p_end_dates(i), p_ref_date+1) - p_ref_date;
2034 IF (g_proc_level>=g_debug_level) THEN
2035 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'end date: '||p_end_dates(i)||',ref_date: '||p_ref_date||', days: '||p_days_temp(i));
2036 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'market data set is: '||p_market_data_set_temp(i));
2037 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'pricing model is: '||p_pricing_models(i));
2038 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'deal type still: '||p_deal_types(i));
2039 END IF;
2040
2041 IF (p_deal_types(i) IN ('FX', 'FXO')) THEN
2042 -- transaction rates
2043 p_fx_trans_rate_temp(i) := p_transaction_rates(i);
2044
2045 -- convert currency amounts for buy/sell ccy
2046 IF (p_buy_ccys(i)<>'USD') THEN
2047 -- convert amount to USD
2048 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2049 p_buy_ccys(i), 'USD', p_buy_amounts(i),
2050 p_buy_amount_usd_temp(i));
2051 ELSE
2052 p_buy_amount_usd_temp(i) := p_buy_amounts(i);
2053 END IF;
2054 -- calculate buy amount in sob ccy
2055 IF (p_sob_ccy_temp(i)=p_buy_ccys(i)) THEN
2056 p_buy_amount_sob_temp(i) := p_buy_amounts(i);
2057 ELSIF (p_sob_ccy_temp(i)='USD') THEN
2058 p_buy_amount_sob_temp(i) := p_buy_amount_usd_temp(i);
2059 ELSE
2060 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2061 p_buy_ccys(i), p_sob_ccy_temp(i), p_buy_amounts(i),
2062 p_buy_amount_sob_temp(i));
2063 END IF;
2064 -- do SELL ccy now
2065 IF (p_sell_ccys(i)<>'USD') THEN
2066 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2067 p_sell_ccys(i), 'USD', p_sell_amounts(i),
2068 p_sell_amount_usd_temp(i));
2069 ELSE
2070 p_sell_amount_usd_temp(i) := p_sell_amounts(i);
2071 END IF;
2072 -- calculate sell amount in sob ccy
2073 IF (p_sob_ccy_temp(i)=p_sell_ccys(i)) THEN
2074 p_sell_amount_sob_temp(i) := p_sell_amounts(i);
2075 ELSIF (p_sob_ccy_temp(i)='USD') THEN
2076 p_sell_amount_sob_temp(i) := p_sell_amount_usd_temp(i);
2077 ELSE
2078 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2079 p_sell_ccys(i), p_sob_ccy_temp(i), p_sell_amounts(i),
2080 p_sell_amount_sob_temp(i));
2081 END IF;
2082
2083 -- convert base/contra amounts to other currencies
2084 IF (p_base_ccys(i)=p_sell_ccys(i)) THEN
2085 p_base_ccy_amount_usd_temp(i) := p_sell_amount_usd_temp(i);
2086 p_contra_ccy_amount_usd_temp(i) := p_buy_amount_usd_temp(i);
2087 p_base_ccy_amount_sob_temp(i) := p_sell_amount_sob_temp(i);
2088 p_contra_ccy_amount_sob_temp(i) := p_buy_amount_sob_temp(i);
2089 ELSE
2090 p_base_ccy_amount_usd_temp(i) := p_buy_amount_usd_temp(i);
2091 p_contra_ccy_amount_usd_temp(i) := p_sell_amount_usd_temp(i);
2092 p_base_ccy_amount_sob_temp(i) := p_buy_amount_sob_temp(i);
2093 p_contra_ccy_amount_sob_temp(i) := p_sell_amount_sob_temp(i);
2094 END IF;
2095
2096
2097 -- FXO DEALS
2098 IF (p_deal_types(i)='FXO') THEN
2099 -- deal ccy is premium ccy
2100 p_deal_ccy_temp(i) := p_premium_ccys(i);
2101 IF (p_foreign_ccys(i)=p_buy_ccys(i)) THEN
2102 p_foreign_amount_usd_temp(i) := p_buy_amount_usd_temp(i);
2103 p_domestic_amount_usd_temp(i) := p_sell_amount_usd_temp(i);
2104 p_foreign_amount_sob_temp(i) := p_buy_amount_sob_temp(i);
2105 p_domestic_amount_sob_temp(i) := p_sell_amount_sob_temp(i);
2106 ELSE
2107 p_foreign_amount_usd_temp(i) := p_sell_amount_usd_temp(i);
2108 p_domestic_amount_usd_temp(i) := p_buy_amount_usd_temp(i);
2109 p_foreign_amount_sob_temp(i) := p_sell_amount_sob_temp(i);
2110 p_domestic_amount_sob_temp(i) := p_buy_amount_sob_temp(i);
2111 END IF;
2112
2113 -- fair value for FXO in premium ccy
2114 -- deal ccy is premium ccy
2115 IF (p_insert_or_update <> 'N') THEN
2116 QRM_FX_FORMULAS.fv_fxo(p_pricing_models(i),
2117 p_deal_subtypes(i), p_calls_or_puts(i),
2118 p_market_data_set_temp(i), p_foreign_ccys(i),
2119 p_premium_ccys(i), p_buy_ccys(i),
2120 p_sell_ccys(i),p_interpolation_method,p_ref_date,
2121 p_end_dates(i),p_transaction_rates(i),
2122 p_foreign_amounts(i), p_side,
2123 p_fx_reval_rate_temp(i), p_fair_value_temp(i));
2124 -- fair value is in premium ccy
2125 -- convert to other ccys
2126 -- convert fair value into USD ccy
2127 IF (p_premium_ccys(i)='USD') THEN
2128 p_fair_value_usd_temp(i) := p_fair_value_temp(i);
2129 ELSE
2130 convert_amounts(p_market_data_set_temp(i),
2131 p_ref_date, p_premium_ccys(i), 'USD',
2132 p_fair_value_temp(i),p_fair_value_usd_temp(i));
2133 END IF;
2134 -- convert fair value into SOB ccy
2135 IF (p_premium_ccys(i)=p_sob_ccy_temp(i)) THEN
2136 p_fair_value_sob_temp(i) := p_fair_value_temp(i);
2137 ELSIF ('USD'=p_sob_ccy_temp(i)) THEN
2138 p_fair_value_sob_temp(i) := p_fair_value_usd_temp(i);
2139 ELSE
2140 convert_amounts(p_market_data_set_temp(i),
2141 p_ref_date, p_premium_ccys(i),
2142 p_sob_ccy_temp(i), p_fair_value_temp(i),
2143 p_fair_value_sob_temp(i));
2144 END IF;
2145
2146 -- **** sensitivities for FXO **** ---
2147 p_gk_in.p_spot_date := p_ref_date;
2148 p_gk_in.p_maturity_date := p_end_dates(i);
2149 p_gk_in.p_ccy_for := p_foreign_ccys(i);
2150 p_gk_in.p_ccy_dom := p_domestic_ccys(i);
2151 -- get foreign ccy int rate
2152 p_md_in.p_md_set_code := p_market_data_set_temp(i);
2153 p_md_in.p_source := 'C';
2154 p_md_in.p_indicator := 'Y';
2155 p_md_in.p_spot_date := p_ref_date;
2156 p_md_in.p_future_date := p_end_dates(i);
2157 p_md_in.p_ccy := p_foreign_ccys(i);
2158 p_md_in.p_day_count_basis_out := p_fxo_day_count_basis;
2159 p_md_in.p_interpolation_method := p_interpolation_method;
2160 p_md_in.p_side := p_side;
2161 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
2162 p_gk_in.p_rate_for := p_md_out.p_md_out;
2163 IF (within_one_year(p_ref_date, p_end_dates(i))) THEN
2164 p_gk_in.p_rate_type_for := 'S';
2165 ELSE
2166 p_gk_in.p_rate_type_for := 'P';
2167 p_gk_in.p_compound_freq_for := 1;
2168 END IF;
2169 p_gk_in.p_day_count_basis_for := p_fxo_day_count_basis;
2170 IF (g_proc_level>=g_debug_level) THEN
2171 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'base int rate is:' ||p_gk_in.p_rate_for);
2172 END IF;
2173 -- get domestic ccy int rate
2174 -- XTR_RISK_DEBUG_PKG.dlog('calculating fxo domestic int rate');
2175 p_md_in.p_ccy := p_domestic_ccys(i);
2176 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
2177 p_gk_in.p_rate_dom := p_md_out.p_md_out;
2178 IF (within_one_year(p_ref_date, p_end_dates(i))) THEN
2179 p_gk_in.p_rate_type_dom := 'S';
2180 ELSE
2181 p_gk_in.p_rate_type_dom := 'P';
2182 p_gk_in.p_compound_freq_dom := 1;
2183 END IF;
2184 p_gk_in.p_day_count_basis_dom := p_fxo_day_count_basis;
2185 IF (g_proc_level>=g_debug_level) THEN
2186 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'contra int rate:' ||p_gk_in.p_rate_dom);
2187 END IF;
2188 -- get spot rate
2189 -- XTR_RISK_DEBUG_PKG.dlog('calculating fxo spot rate');
2190 p_md_in.p_indicator := 'S';
2191 p_md_in.p_ccy := p_foreign_ccys(i);
2192 p_md_in.p_contra_ccy := p_domestic_ccys(i);
2193 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
2194 p_gk_in.p_spot_rate := p_md_out.p_md_out;
2195 IF (g_proc_level>=g_debug_level) THEN
2196 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'fxo spot rate:'||p_gk_in.p_spot_rate);
2197 END IF;
2198 -- get volatility
2199 -- XTR_RISK_DEBUG_PKG.dlog('calculating fxo volatility');
2200 p_md_in.p_indicator := 'V';
2201 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
2202 p_volatility_temp(i) := p_md_out.p_md_out;
2203
2204 p_gk_in.p_volatility := p_md_out.p_md_out;
2205 p_gk_in.p_strike_rate := p_transaction_rates(i);
2206 IF (g_proc_level>=g_debug_level) THEN
2207 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'fxo volatility:'||p_gk_in.p_volatility);
2208 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'fxo strike rate:'||p_gk_in.p_strike_rate);
2209 END IF;
2210 QRM_FX_FORMULAS.fx_gk_option_sens_cv(p_gk_in, p_gk_out);
2211 IF (p_calls_or_puts(i)='C') THEN
2212 p_delta_temp(i) := p_gk_out.p_delta_call;
2213 p_theta_temp(i) := p_gk_out.p_theta_call;
2214 p_rho_for_temp(i) := p_gk_out.p_rho_f_call;
2215 p_rho_dom_temp(i) := p_gk_out.p_rho_call;
2216 ELSE
2217 p_delta_temp(i) := p_gk_out.p_delta_put;
2218 p_theta_temp(i) := p_gk_out.p_theta_put;
2219 p_rho_for_temp(i) := p_gk_out.p_rho_f_put;
2220 p_rho_dom_temp(i) := p_gk_out.p_rho_put;
2221 END IF;
2222 p_gamma_temp(i) := p_gk_out.p_gamma;
2223 p_vega_temp(i) := p_gk_out.p_vega;
2224 IF (g_proc_level>=g_debug_level) THEN
2225 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'deal no: '||p_deal_nos(i));
2226 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'reval rate: '||p_fx_reval_rate_temp(i));
2227 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'fxo fair value: '||p_fair_value_temp(i));
2228 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'delta: '||p_delta_temp(i));
2229 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'theta: '||p_theta_temp(i));
2230 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'rho for: '||p_rho_for_temp(i));
2231 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'rho dom: '||p_rho_dom_temp(i));
2232 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'gamma: '||p_gamma_temp(i));
2233 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'vega: '||p_vega_temp(i));
2234 END IF;
2235
2236 -- position delta in domestic ccy (default)
2237 p_pos_delta_temp(i) := p_delta_temp(i)*
2238 ABS(p_foreign_amounts(i));
2239 -- position delta in usd ccy
2240 IF (p_domestic_ccys(i)='USD') THEN
2241 p_pos_delta_usd_temp(i) := p_pos_delta_temp(i);
2242 ELSE
2243 convert_amounts(p_market_data_set_temp(i),
2244 p_ref_date, p_domestic_ccys(i), 'USD',
2245 p_pos_delta_temp(i), p_pos_delta_usd_temp(i));
2246 END IF;
2247 -- position delta in sob ccy
2248 IF (p_domestic_ccys(i) = p_sob_ccy_temp(i)) THEN
2249 p_pos_delta_sob_temp(i) := p_pos_delta_temp(i);
2250 ELSE
2251 convert_amounts(p_market_data_set_temp(i),
2252 p_ref_date, p_domestic_ccys(i),
2253 p_sob_ccy_temp(i), p_pos_delta_temp(i),
2254 p_pos_delta_sob_temp(i));
2255 END IF;
2256
2257 -- position gamma in domestic ccy (default)
2258 p_pos_gamma_temp(i) := p_gamma_temp(i)*
2259 ABS(p_foreign_amounts(i));
2260 -- position gamma in usd ccy
2261 IF (p_domestic_ccys(i)='USD') THEN
2262 p_pos_gamma_usd_temp(i) := p_pos_gamma_temp(i);
2263 ELSE
2264 convert_amounts(p_market_data_set_temp(i),
2265 p_ref_date, p_domestic_ccys(i), 'USD',
2266 p_pos_gamma_temp(i), p_pos_gamma_usd_temp(i));
2267 END IF;
2268 -- position gamma in sob ccy
2269 IF (p_domestic_ccys(i) = p_sob_ccy_temp(i)) THEN
2270 p_pos_gamma_sob_temp(i) := p_pos_gamma_temp(i);
2271 ELSE
2272 convert_amounts(p_market_data_set_temp(i),
2273 p_ref_date, p_domestic_ccys(i),
2274 p_sob_ccy_temp(i), p_pos_gamma_temp(i),
2275 p_pos_gamma_sob_temp(i));
2276 END IF;
2277
2278 -- position theta in domestic ccy (default)
2279 p_pos_theta_temp(i) := p_theta_temp(i)*
2280 ABS(p_foreign_amounts(i));
2281 -- position theta in usd ccy
2282 IF (p_domestic_ccys(i)='USD') THEN
2283 p_pos_theta_usd_temp(i) := p_pos_theta_temp(i);
2284 ELSE
2285 convert_amounts(p_market_data_set_temp(i),
2286 p_ref_date, p_domestic_ccys(i), 'USD',
2287 p_pos_theta_temp(i), p_pos_theta_usd_temp(i));
2288 END IF;
2289 -- position theta in sob ccy
2290 IF (p_domestic_ccys(i) = p_sob_ccy_temp(i)) THEN
2291 p_pos_theta_sob_temp(i) := p_pos_theta_temp(i);
2292 ELSE
2293 convert_amounts(p_market_data_set_temp(i),
2294 p_ref_date, p_domestic_ccys(i),
2295 p_sob_ccy_temp(i), p_pos_theta_temp(i),
2296 p_pos_theta_sob_temp(i));
2297 END IF;
2298
2299 -- position Rho Foreign in domestic ccy (default)
2300 p_pos_rho_for_temp(i) := p_rho_for_temp(i)*
2301 ABS(p_foreign_amounts(i));
2302 -- position rho foreign in usd ccy
2303 IF (p_domestic_ccys(i)='USD') THEN
2304 p_pos_rho_for_usd_temp(i) := p_pos_rho_for_temp(i);
2305 ELSE
2306 convert_amounts(p_market_data_set_temp(i),
2307 p_ref_date, p_domestic_ccys(i), 'USD',
2308 p_pos_rho_for_temp(i),
2309 p_pos_rho_for_usd_temp(i));
2310 END IF;
2311 -- position rho foreign in sob ccy
2312 IF (p_domestic_ccys(i) = p_sob_ccy_temp(i)) THEN
2313 p_pos_rho_for_sob_temp(i) := p_pos_rho_for_temp(i);
2314 ELSE
2315 convert_amounts(p_market_data_set_temp(i),
2316 p_ref_date, p_domestic_ccys(i),
2317 p_sob_ccy_temp(i), p_pos_rho_for_temp(i),
2318 p_pos_rho_for_sob_temp(i));
2319 END IF;
2320
2321 -- position Rho Domestic in domestic ccy (default)
2322 p_pos_rho_dom_temp(i) := p_rho_dom_temp(i)*
2323 ABS(p_foreign_amounts(i));
2324 -- position rho domestic in usd ccy
2325 IF (p_domestic_ccys(i)='USD') THEN
2326 p_pos_rho_dom_usd_temp(i) := p_pos_rho_dom_temp(i);
2327 ELSE
2328 convert_amounts(p_market_data_set_temp(i),
2329 p_ref_date, p_domestic_ccys(i), 'USD',
2330 p_pos_rho_dom_temp(i),
2331 p_pos_rho_dom_usd_temp(i));
2332 END IF;
2333 -- position rho domestic in sob ccy
2334 IF (p_domestic_ccys(i) = p_sob_ccy_temp(i)) THEN
2335 p_pos_rho_dom_sob_temp(i) := p_pos_rho_dom_temp(i);
2336 ELSE
2337 convert_amounts(p_market_data_set_temp(i),
2338 p_ref_date, p_domestic_ccys(i),
2339 p_sob_ccy_temp(i), p_pos_rho_dom_temp(i),
2340 p_pos_rho_dom_sob_temp(i));
2341 END IF;
2342
2343 -- position Vega (in domestic ccy)
2344 p_pos_vega_temp(i) := p_vega_temp(i)*
2345 ABS(p_foreign_amounts(i));
2346 -- position vega in usd ccy
2347 IF (p_domestic_ccys(i)='USD') THEN
2348 p_pos_vega_usd_temp(i) := p_pos_vega_temp(i);
2349 ELSE
2350 convert_amounts(p_market_data_set_temp(i),
2351 p_ref_date, p_domestic_ccys(i), 'USD',
2352 p_pos_vega_temp(i), p_pos_vega_usd_temp(i));
2353 END IF;
2354 -- position rho domestic in sob ccy
2355 IF (p_domestic_ccys(i) = p_sob_ccy_temp(i)) THEN
2356 p_pos_vega_sob_temp(i) := p_pos_vega_temp(i);
2357 ELSE
2358 convert_amounts(p_market_data_set_temp(i),
2359 p_ref_date, p_domestic_ccys(i),
2360 p_sob_ccy_temp(i), p_pos_vega_temp(i),
2361 p_pos_vega_sob_temp(i));
2362 END IF;
2363 p_upd_md_calc_date_temp(i) := p_ref_datetime;
2364 ELSE
2365 p_insert_or_update := 'U';
2366 p_upd_md_calc_date_temp(i) := p_deal_calculations.last_md_calc_date;
2367 p_fair_value_temp(i) := p_deal_calculations.fair_value;
2368 p_fair_value_usd_temp(i) := p_deal_calculations.fair_value_usd;
2369 p_fair_value_sob_temp(i) := p_deal_calculations.fair_value_sob;
2370 p_fx_reval_rate_temp(i) := p_deal_calculations.fx_reval_rate;
2371 p_volatility_temp(i) := p_deal_calculations.volatility;
2372 p_delta_temp(i) := p_deal_calculations.delta;
2373 p_theta_temp(i) := p_deal_calculations.theta;
2374 p_rho_for_temp(i) := p_deal_calculations.rho_foreign;
2375 p_rho_dom_temp(i) := p_deal_calculations.rho_domestic;
2376 p_gamma_temp(i) := p_deal_calculations.gamma;
2377 p_vega_temp(i) := p_deal_calculations.vega;
2378 p_pos_delta_temp(i) := p_deal_calculations.pos_delta;
2379 p_pos_delta_usd_temp(i) := p_deal_calculations.pos_delta_usd;
2380 p_pos_delta_sob_temp(i) := p_deal_calculations.pos_delta_sob;
2381 p_pos_theta_temp(i) := p_deal_calculations.pos_theta;
2382 p_pos_theta_usd_temp(i) := p_deal_calculations.pos_theta_usd;
2383 p_pos_theta_sob_temp(i) := p_deal_calculations.pos_theta_sob;
2384 p_pos_rho_for_temp(i) := p_deal_calculations.pos_rho_foreign;
2385 p_pos_rho_for_usd_temp(i) := p_deal_calculations.pos_rho_foreign_usd;
2386 p_pos_rho_for_sob_temp(i) := p_deal_calculations.pos_rho_foreign_sob;
2387 p_pos_rho_dom_temp(i) := p_deal_calculations.pos_rho_domestic;
2388 p_pos_rho_dom_usd_temp(i) := p_deal_calculations.pos_rho_domestic_usd;
2389 p_pos_rho_dom_sob_temp(i) := p_deal_calculations.pos_rho_domestic_sob;
2390 p_pos_gamma_temp(i) := p_deal_calculations.pos_gamma;
2391 p_pos_gamma_usd_temp(i) := p_deal_calculations.pos_gamma_usd;
2392 p_pos_gamma_sob_temp(i) := p_deal_calculations.pos_gamma_sob;
2393 p_pos_vega_temp(i) := p_deal_calculations.pos_vega;
2394 p_pos_vega_usd_temp(i) := p_deal_calculations.pos_vega_usd;
2395 p_pos_vega_sob_temp(i) := p_deal_calculations.pos_vega_sob;
2396
2397 END IF; -- end threshold fv/sens calculations
2398
2399 -- convert premium amount to USD
2400 IF (p_premium_ccys(i)='USD') THEN
2401 p_premium_amount_usd_temp(i) := p_premium_amounts(i);
2402 ELSE
2403 convert_amounts(p_market_data_set_temp(i),p_ref_date,
2404 p_premium_ccys(i), 'USD', p_premium_amounts(i),
2405 p_premium_amount_usd_temp(i));
2406 END IF;
2407 -- convert premium amount into SOB ccy
2408 IF (p_premium_ccys(i)=p_sob_ccy_temp(i)) THEN
2409 p_premium_amount_sob_temp(i) := p_premium_amounts(i);
2410 ELSIF ('USD'=p_sob_ccy_temp(i)) THEN
2411 p_premium_amount_sob_temp(i) := p_premium_amount_usd_temp(i);
2412 ELSE
2413 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2414 p_premium_ccys(i), p_sob_ccy_temp(i),
2415 p_premium_amounts(i), p_premium_amount_sob_temp(i));
2416 END IF;
2417
2418
2419 ELSE -- FX DEALS
2420 -- reset deal ccy to SOB currency
2421 p_deal_ccy_temp(i) := p_sob_ccy_temp(i);
2422
2423 days_run_helper(p_ref_date, p_end_dates(i),
2424 p_fx_day_count_basis, null, p_day_count,
2425 p_annual_basis);
2426
2427 -- domestic ccy int rate bid
2428 p_md_in.p_md_set_code := p_market_data_set_temp(i);
2429 p_md_in.p_source := 'C';
2430 p_md_in.p_indicator := 'Y';
2431 p_md_in.p_spot_date := p_ref_date;
2432 p_md_in.p_future_date := p_end_dates(i);
2433 p_md_in.p_ccy := p_contra_ccys(i);
2434 p_md_in.p_day_count_basis_out := p_fx_day_count_basis;
2435 p_md_in.p_interpolation_method := p_interpolation_method;
2436 p_md_in.p_side := 'B';
2437 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
2438 p_int_rate_b_bid := p_md_out.p_md_out;
2439 -- contra ccy int rate ask
2440 p_md_in.p_side := 'A';
2441 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
2442 p_int_rate_b_ask := p_md_out.p_md_out;
2443 -- base ccy int rate bid
2444 p_md_in.p_side := 'B';
2445 p_md_in.p_ccy := p_base_ccys(i);
2446 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
2447 p_int_rate_a_bid := p_md_out.p_md_out;
2448 -- base ccy int rate ask
2449 p_md_in.p_side := 'A';
2450 p_md_in.p_ccy := p_base_ccys(i);
2451 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
2452 p_int_rate_a_ask := p_md_out.p_md_out;
2453 -- usd int rate bid
2454 p_md_in.p_side := 'B';
2455 p_md_in.p_ccy := p_base_ccys(i);
2456 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
2457 p_int_rate_c_bid := p_md_out.p_md_out;
2458 p_md_in.p_side := 'A';
2459 p_md_in.p_ccy := p_base_ccys(i);
2460 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
2461 p_int_rate_c_ask := p_md_out.p_md_out;
2462
2463 -- base ccy discount factor bid
2464 p_df_in.p_indicator := 'T';
2465 p_df_in.p_rate := p_int_rate_a_bid;
2466 p_df_in.p_spot_date := p_ref_date;
2467 p_df_in.p_future_date := p_end_dates(i);
2468 p_df_in.p_day_count_basis := p_fx_day_count_basis;
2469 XTR_RATE_CONVERSION.discount_factor_conv(p_df_in,p_df_out);
2470 p_df_a_bid := p_df_out.p_result;
2471 -- base ccy discount factor ask
2472 p_df_in.p_indicator := 'T';
2473 p_df_in.p_rate := p_int_rate_a_ask;
2474 p_df_in.p_spot_date := p_ref_date;
2475 p_df_in.p_future_date := p_end_dates(i);
2476 p_df_in.p_day_count_basis := p_fx_day_count_basis;
2477 XTR_RATE_CONVERSION.discount_factor_conv(p_df_in,p_df_out);
2478 p_df_a_ask := p_df_out.p_result;
2479 -- contra ccy discount factor bid
2480 p_df_in.p_rate := p_int_rate_b_bid;
2481 XTR_RATE_CONVERSION.discount_factor_conv(p_df_in,p_df_out);
2482 p_df_b_bid := p_df_out.p_result;
2483 -- base ccy discount factor ask
2484 p_df_in.p_rate := p_int_rate_b_ask;
2485 XTR_RATE_CONVERSION.discount_factor_conv(p_df_in,p_df_out);
2486 p_df_b_ask := p_df_out.p_result;
2487 -- usd ccy discount factor bid
2488 p_df_in.p_rate := p_int_rate_c_bid;
2489 XTR_RATE_CONVERSION.discount_factor_conv(p_df_in,p_df_out);
2490 p_df_c_bid := p_df_out.p_result;
2491 -- usd ccy discount factor ask
2492 p_df_in.p_rate := p_int_rate_c_ask;
2493 XTR_RATE_CONVERSION.discount_factor_conv(p_df_in,p_df_out);
2494 p_df_c_ask := p_df_out.p_result;
2495
2496 -- spot rate: base ccy vs. usd
2497 IF (p_base_ccys(i) = 'USD') THEN
2498 p_spot_rate_a_bid := 1;
2499 p_spot_rate_a_ask := 1;
2500 ELSE
2501 p_md_in.p_md_set_code := p_market_data_set_temp(i);
2502 p_md_in.p_source := 'C';
2503 p_md_in.p_indicator := 'S';
2504 p_md_in.p_spot_date := p_ref_date;
2505 p_md_in.p_future_date := p_end_dates(i);
2506 p_md_in.p_ccy := p_base_ccys(i);
2507 p_md_in.p_contra_ccy := 'USD';
2508 p_md_in.p_day_count_basis_out := p_fx_day_count_basis;
2509 p_md_in.p_interpolation_method := p_interpolation_method;
2510 p_md_in.p_side := 'B';
2511 XTR_MARKET_DATA_P.get_md_from_set(p_md_in,p_md_out);
2512 p_spot_rate_a_bid := p_md_out.p_md_out;
2513 p_side := 'A';
2514 XTR_MARKET_DATA_P.get_md_from_set(p_md_in,p_md_out);
2515 p_spot_rate_a_ask := p_md_out.p_md_out;
2516 END IF;
2517
2518 IF (g_proc_level>=g_debug_level) THEN
2519 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'base spot rate bid: '||p_spot_rate_a_bid);
2520 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'base spot rate ask: '||p_spot_rate_a_ask);
2521 END IF;
2522 -- spot rate: contra ccy vs.usd
2523 IF (p_contra_ccys(i) = 'USD') THEN
2524 p_spot_rate_b_bid := 1;
2525 p_spot_rate_b_ask := 1;
2526 ELSE
2527 p_md_in.p_indicator := 'S';
2528 p_md_in.p_ccy := p_contra_ccys(i);
2529 p_md_in.p_contra_ccy := 'USD';
2530 p_md_in.p_side := 'B';
2531 XTR_MARKET_DATA_P.get_md_from_set(p_md_in,p_md_out);
2532 p_spot_rate_b_bid := p_md_out.p_md_out;
2533 p_md_in.p_side := 'A';
2534 XTR_MARKET_DATA_P.get_md_from_set(p_md_in,p_md_out);
2535 p_spot_rate_b_ask := p_md_out.p_md_out;
2536 END IF;
2537
2538 IF (g_proc_level>=g_debug_level) THEN
2539 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'contra spot rate bid: '||p_spot_rate_b_bid);
2540 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'contra spot rate ask: '||p_spot_rate_b_ask);
2541 END IF;
2542
2543 IF (p_insert_or_update <> 'N') THEN
2544 -- FAIR VALUE of FX deal
2545 -- fair value of FX is always in SOB ccy
2546 QRM_FX_FORMULAS.fv_fx(p_pricing_models(i),
2547 p_market_data_set_temp(i), p_buy_ccys(i),
2548 p_sell_ccys(i), p_sob_ccy_temp(i),
2549 p_interpolation_method,
2550 p_ref_date, p_end_dates(i), p_buy_amounts(i),
2551 p_sell_amounts(i), p_side, p_fx_reval_rate_temp(i),
2552 p_fair_value_temp(i));
2553 -- convert fair value amounts
2554 p_fair_value_sob_temp(i) := p_fair_value_temp(i);
2555 -- convert to USD
2556 IF (p_sob_ccy_temp(i)='USD') THEN
2557 p_fair_value_usd_temp(i) := p_fair_value_sob_temp(i);
2558 ELSE
2559 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2560 p_sob_ccy_temp(i), 'USD', p_fair_value_temp(i),
2561 p_fair_value_usd_temp(i));
2562 END IF;
2563 IF (g_proc_level>=g_debug_level) THEN
2564 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FX deal no: '||p_deal_nos(i));
2565 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FX reval rate: '||p_fx_reval_rate_temp(i));
2566 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FX fair value is: '||p_fair_value_temp(i));
2567 END IF;
2568
2569 -- ** FX SENSITIVITIES ** --
2570 -- delta spot
2571 p_deltas_rhos := QRM_FX_FORMULAS.fx_forward_delta_spot(
2572 p_contra_ccys(i), p_base_ccys(i), p_df_b_bid,
2573 p_df_b_ask, p_df_a_bid, p_df_a_ask, p_df_c_bid,
2574 p_df_c_ask);
2575 -- p_side determined by fair value calculation
2576 IF (p_side = 'B') THEN -- bid side of delta spot
2577 p_delta_temp(i) := p_deltas_rhos(1);
2578 ELSE
2579 p_delta_temp(i) := p_deltas_rhos(2);
2580 END IF;
2581 -- Rho Base/Contra
2582 -- Rho Contra bid/ask
2583 IF (g_proc_level>=g_debug_level) THEN
2584 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'base int rate bid: '||p_int_rate_a_bid);
2585 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'base int rate ask: '||p_int_rate_a_ask);
2586 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'contra int rate bid: '||p_int_rate_b_bid);
2587 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'contra int rate ask: '||p_int_rate_b_ask);
2588 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'usd int rate bid: '||p_int_rate_c_bid);
2589 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'usd int rate ask: '||p_int_rate_c_ask);
2590 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'day count: '||p_day_count);
2591 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'annual basis: '||p_annual_basis);
2592 END IF;
2593
2594 p_deltas_rhos := QRM_FX_FORMULAS.fx_forward_rho('D',
2595 p_spot_rate_a_bid, p_spot_rate_a_ask,
2596 p_spot_rate_b_bid, p_spot_rate_b_ask,
2597 p_int_rate_a_bid, p_int_rate_a_ask,
2598 p_int_rate_b_bid, p_int_rate_b_ask,
2599 p_int_rate_c_bid, p_int_rate_c_ask,
2600 p_day_count, p_day_count, p_day_count,
2601 p_annual_basis, p_annual_basis, p_annual_basis,
2602 p_base_ccys(i), p_contra_ccys(i),'B','B');
2603 IF (p_side = 'B') THEN -- bid side of rho contra
2604 p_rho_base_temp(i) := p_deltas_rhos(1);
2605 p_rho_contra_temp(i) := p_deltas_rhos(3);
2606 ELSE -- ask side of rho contra
2607 p_rho_base_temp(i) := p_deltas_rhos(2);
2608 p_rho_contra_temp(i) := p_deltas_rhos(4);
2609 END IF;
2610
2611 -- Position Delta in contra ccy
2612 p_pos_delta_temp(i) := p_delta_temp(i)*
2613 ABS(p_base_amounts(i));
2614 -- convert Position Delta into USD ccy
2615 IF (p_contra_ccys(i)='USD') THEN
2616 p_pos_delta_usd_temp(i) := p_pos_delta_temp(i);
2617 ELSE
2618 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2619 p_contra_ccys(i), 'USD', p_pos_delta_temp(i),
2620 p_pos_delta_usd_temp(i));
2621 END IF;
2622 -- convert Position Delta into SOB ccy
2623 IF (p_contra_ccys(i)=p_sob_ccy_temp(i)) THEN
2624 p_pos_delta_sob_temp(i) := p_pos_delta_temp(i);
2625 ELSE
2626 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2627 p_contra_ccys(i), p_sob_ccy_temp(i),
2628 p_pos_delta_temp(i), p_pos_delta_sob_temp(i));
2629 END IF;
2630
2631 -- Position Rho Base
2632 p_pos_rho_base_temp(i) := p_rho_base_temp(i)*
2633 ABS(p_base_amounts(i));
2634 -- convert Rho Base into USD ccy
2635 IF (p_contra_ccys(i)='USD') THEN
2636 p_pos_rho_base_usd_temp(i) := p_pos_rho_base_temp(i);
2637 ELSE
2638 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2639 p_contra_ccys(i), 'USD', p_pos_rho_base_temp(i),
2640 p_pos_rho_base_usd_temp(i));
2641 END IF;
2642 -- convert Rho Base into SOB ccy
2643 IF (p_contra_ccys(i)=p_sob_ccy_temp(i)) THEN
2644 p_pos_rho_base_sob_temp(i) := p_pos_rho_base_temp(i);
2645 ELSE
2646 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2647 p_contra_ccys(i), p_sob_ccy_temp(i),
2648 p_pos_rho_base_temp(i), p_pos_rho_base_sob_temp(i));
2649 END IF;
2650
2651 -- Position Rho Contra
2652 p_pos_rho_contra_temp(i) := p_rho_contra_temp(i)*
2653 ABS(p_base_amounts(i));
2654
2655 -- convert Rho Contra into USD ccy
2656 IF (p_contra_ccys(i)='USD') THEN
2657 p_pos_rho_contra_usd_temp(i) := p_pos_rho_contra_temp(i);
2658 ELSE
2659 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2660 p_contra_ccys(i), 'USD', p_pos_rho_contra_temp(i),
2661 p_pos_rho_contra_usd_temp(i));
2662 END IF;
2663 -- convert Rho Contra into SOB ccy
2664 IF (p_contra_ccys(i)=p_sob_ccy_temp(i)) THEN
2665 p_pos_rho_contra_sob_temp(i) := p_pos_rho_contra_temp(i);
2666 ELSE
2667 convert_amounts(p_market_data_set_temp(i), p_ref_date,
2668 p_contra_ccys(i), p_sob_ccy_temp(i),
2669 p_pos_rho_contra_temp(i),p_pos_rho_contra_sob_temp(i));
2670 END IF;
2671 p_upd_md_calc_date_temp(i) := p_ref_datetime;
2672 ELSE
2673 p_insert_or_update := 'U';
2674 p_upd_md_calc_date_temp(i) := p_deal_calculations.last_md_calc_date;
2675 p_fx_reval_rate_temp(i) := p_deal_calculations.fx_reval_rate;
2676 p_fair_value_temp(i) := p_deal_calculations.fair_value;
2677 p_fair_value_usd_temp(i) := p_deal_calculations.fair_value_usd;
2678 p_fair_value_sob_temp(i) := p_deal_calculations.fair_value_sob;
2679 p_delta_temp(i) := p_deal_calculations.delta;
2680 p_rho_base_temp(i) := p_deal_calculations.rho_base;
2681 p_rho_contra_temp(i) := p_deal_calculations.rho_contra;
2682 p_pos_delta_temp(i) := p_deal_calculations.pos_delta;
2683 p_pos_delta_usd_temp(i) := p_deal_calculations.pos_delta_usd;
2684 p_pos_delta_sob_temp(i) := p_deal_calculations.pos_delta_sob;
2685 p_pos_rho_base_temp(i) := p_deal_calculations.pos_rho_base;
2686 p_pos_rho_base_usd_temp(i) := p_deal_calculations.pos_rho_base_usd;
2687 p_pos_rho_base_sob_temp(i) := p_deal_calculations.pos_rho_base_sob;
2688 p_pos_rho_contra_temp(i) := p_deal_calculations.pos_rho_contra;
2689 p_pos_rho_contra_usd_temp(i) := p_deal_calculations.pos_rho_contra_usd;
2690 p_pos_rho_contra_sob_temp(i) := p_deal_calculations.pos_rho_contra_sob;
2691 END IF; -- end threshold check for fv/sens calculations
2692
2693 END IF; -- end if fxo
2694
2695 ELSIF (p_deal_types(i)='BOND') THEN -- BOND
2696 IF (g_proc_level>=g_debug_level) THEN
2697 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'calculating bond!');
2698 END IF;
2699 p_maturity_amount_temp(i):=get_signed_amount(p_face_values(i),
2700 p_deal_types(i), p_deal_subtypes(i), null);
2701 p_gap_amount_temp(i) := p_maturity_amount_temp(i);
2702
2703 -- convert amounts to USD
2704 IF (p_deal_ccys(i)='USD') THEN
2705 p_maturity_amount_usd_temp(i) := p_maturity_amount_temp(i);
2706 p_gap_amount_usd_temp(i) := p_gap_amount_temp(i);
2707 ELSE
2708 convert_amounts(p_market_data_set_temp(i),p_ref_date,
2709 p_deal_ccys(i), 'USD', p_maturity_amount_temp(i),
2710 p_maturity_amount_usd_temp(i));
2711 convert_amounts(p_market_data_set_temp(i),p_ref_date,
2712 p_deal_ccys(i), 'USD', p_gap_amount_temp(i),
2713 p_gap_amount_usd_temp(i));
2714 END IF;
2715 -- convert amounts to sob ccy
2716 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
2717 p_maturity_amount_sob_temp(i) := p_maturity_amount_temp(i);
2718 p_gap_amount_sob_temp(i) := p_gap_amount_temp(i);
2719 ELSE
2720 convert_amounts(p_market_data_set_temp(i),p_ref_date,
2721 p_deal_ccys(i), p_sob_ccy_temp(i),
2722 p_maturity_amount_temp(i),
2723 p_maturity_amount_sob_temp(i));
2724 convert_amounts(p_market_data_set_temp(i),p_ref_date,
2725 p_deal_ccys(i), p_sob_ccy_temp(i),
2726 p_gap_amount_temp(i), p_gap_amount_sob_temp(i));
2727 END IF;
2728
2729
2730 p_mm_trans_rate_temp(i) := NULL;
2731
2732 -- trans price: clean price of original buy/sell deal
2733 p_trans_price_temp(i):= p_transaction_rates(i);
2734
2735 -- figure out start date of current coupon period
2736
2737 /*WDK: don't need this code!
2738 OPEN get_bond_coupon_start_date(p_bond_issues(i), p_ref_date);
2739 FETCH get_bond_coupon_start_date INTO
2740 p_bond_coupon_start;
2741 CLOSE get_bond_coupon_start_date;
2742 */
2743
2744 --bug2408825
2745 --p_bond_coupon_start := NVL(p_bond_coupon_start,
2746 -- p_start_dates(i));
2747
2748 -- get bond code and day count basis
2749 OPEN get_bond_code(p_bond_issues(i));
2750 FETCH get_bond_code INTO p_bond_code, p_bond_calc_type,
2751 p_day_count_bases(i), p_bond_issue_start;
2752 IF (get_bond_code%NOTFOUND) THEN
2753 -- settings bond code to null will cause
2754 -- cause api's to throw no data found exception
2755 IF (g_proc_level>=g_debug_level) THEN
2756 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'ric code does not exist');
2757 END IF;
2758 p_bond_code := null;
2759 END IF;
2760 CLOSE get_bond_code;
2761
2762 --bug2408825
2763 /*WDK: don't need this code!
2764 p_bond_coupon_start := NVL(p_bond_coupon_start,
2765 NVL(p_bond_issue_start,
2766 p_start_dates(i)
2767 )
2768 );
2769 */
2770
2771 -- avoids mistakes entered by user in bond issues form
2772 -- if select ZERO COUPON type, coupon rate must be 0
2773 IF (p_bond_calc_type = 'ZERO COUPON') THEN
2774 p_coupon_rates(i) := 0;
2775 END IF;
2776
2777 IF (g_proc_level>=g_debug_level) THEN
2778 xtr_risk_debug_pkg.dlog('run_analysis: ' || 'insert/update val: '||p_insert_or_update);
2779 END IF;
2780 IF (p_insert_or_update <> 'N') THEN
2781 p_mm_reval_rate_temp(i):= null;
2782 -- calculates fair value, data side, reval rate
2783 QRM_MM_FORMULAS.fv_bond(p_pricing_models(i),
2784 p_market_data_set_temp(i), p_deal_subtypes(i),
2785 p_bond_code, p_bond_issues(i), p_deal_ccys(i),
2786 p_interpolation_method, p_coupon_actions(i),
2787 p_day_count_bases(i), p_ref_date,
2788 /* WDK: don't need this!
2789 p_bond_coupon_start,
2790 */
2791 p_maturity_dates(i), p_coupon_rates(i), p_face_values(i),
2792 p_margins(i), p_rounding_type(i),
2793 p_day_count_type(i), p_side, p_reval_price_temp(i),
2794 p_dirty_price, p_bond_ytm, p_accrued_interest_temp(i),
2795 p_fair_value_temp(i),
2796 p_actual_ytm); --bug 2804548
2797
2798 -- get correct sign for accrued interests
2799 p_accrued_interest_temp(i) := get_signed_amount(
2800 p_accrued_interest_temp(i), p_deal_types(i),
2801 p_deal_subtypes(i), null);
2802
2803 -- convert amounts to USD
2804 IF (p_deal_ccys(i)='USD') THEN
2805 p_fair_value_usd_temp(i) := p_fair_value_temp(i);
2806 p_accrued_interest_usd_temp(i) := p_accrued_interest_temp(i);
2807 ELSE
2808 convert_amounts(p_market_data_set_temp(i),p_ref_date,
2809 p_deal_ccys(i), 'USD', p_fair_value_temp(i),
2810 p_fair_value_usd_temp(i));
2811 convert_amounts(p_market_data_set_temp(i),p_ref_date,
2812 p_deal_ccys(i), 'USD', p_accrued_interest_temp(i),
2813 p_accrued_interest_usd_temp(i));
2814
2815 END IF;
2816
2817 -- convert amounts to sob ccy
2818 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
2819 p_fair_value_sob_temp(i) := p_fair_value_temp(i);
2820 p_accrued_interest_sob_temp(i) := p_accrued_interest_temp(i);
2821 ELSE
2822 convert_amounts(p_market_data_set_temp(i),p_ref_date,
2823 p_deal_ccys(i), p_sob_ccy_temp(i),
2824 p_fair_value_temp(i), p_fair_value_sob_temp(i));
2825 convert_amounts(p_market_data_set_temp(i),p_ref_date,
2826 p_deal_ccys(i), p_sob_ccy_temp(i),
2827 p_accrued_interest_temp(i),
2828 p_accrued_interest_sob_temp(i));
2829 END IF;
2830
2831 -- clear tables of previous values before reuse
2832 p_cashflows.DELETE;
2833 p_days.DELETE;
2834
2835 -- get cashflows for sensitivities
2836 p_counter := 1;
2837 FOR coupon_rec IN get_bond_cashflows(p_deal_nos(i),
2838 p_ref_date) LOOP
2839 p_cashflows.EXTEND;
2840
2841 --bug 2427997
2842 p_cashflows(p_counter) := get_signed_amount(coupon_rec.interest,
2843 p_deal_types(i), p_deal_subtypes(i), null);
2844 /*
2845 IF (p_deal_subtypes(i)='BUY') THEN
2846 p_cashflows(p_counter) := coupon_rec.interest;
2847 ELSIF (p_deal_subtypes(i)='ISSUE') THEN
2848 p_cashflows(p_counter) := (-1)*coupon_rec.interest;
2849 END IF;
2850 */
2851
2852 IF (g_proc_level>=g_debug_level) THEN
2853 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'start date: '||coupon_rec.start_date);
2854 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'maturity date: '||coupon_rec.maturity_date);
2855 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'coupon amt: '||p_cashflows(p_counter));
2856 END IF;
2857 p_days.EXTEND;
2858 -- calculate number of days until next cashflow
2859 days_run_helper(p_ref_date,
2860 coupon_rec.maturity_date, p_day_count_bases(i),
2861 null, p_days(p_counter), p_annual_basis);
2862
2863
2864 IF (g_proc_level>=g_debug_level) THEN
2865 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'day count basis: '||p_day_count_bases(i));
2866 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'days to cashflow: '||p_days(p_counter));
2867 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'annual basis: '||p_annual_basis);
2868 END IF;
2869 XTR_RISK_DEBUG_PKG.dlog('year fraction: '||p_days(p_counter)/p_annual_basis);
2870 p_bond_coupon_start := coupon_rec.start_date;
2871 p_bond_coupon_end := coupon_rec.maturity_date;
2872
2873 -- convert YTM to annual compounded formula
2874 IF (g_proc_level>=g_debug_level) THEN
2875 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'ytm: '||p_bond_ytm);
2876 END IF;
2877 IF (p_coupon_freqs(i) <> 1) THEN
2878 p_rc_in.p_start_date := p_bond_coupon_start;
2879 p_rc_in.p_end_date := p_bond_coupon_end;
2880 p_rc_in.p_day_count_basis_in := p_day_count_bases(i);
2881 p_rc_in.p_day_count_basis_out := p_day_count_bases(i);
2882 p_rc_in.p_rate_type_in := 'P';
2883 p_rc_in.p_rate_type_out := 'P';
2884 p_rc_in.p_compound_freq_in := p_coupon_freqs(i);
2885 p_rc_in.p_compound_freq_out := 1;
2886 p_rc_in.p_rate_in := p_bond_ytm;
2887 rate_conversion(p_rc_in, p_rc_out);
2888 p_yield_rate := p_rc_out.p_rate_out;
2889 ELSE
2890 p_yield_rate := p_bond_ytm;
2891 END IF;
2892
2893 IF (g_proc_level>=g_debug_level) THEN
2894 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'effective yield rate: '||p_yield_rate);
2895 END IF;
2896 -- convert YTM to a long discount factor
2897 p_discount_factors.EXTEND;
2898 XTR_RATE_CONVERSION.yield_to_discount_factor_long(
2899 p_yield_rate, p_days(p_counter), p_annual_basis,
2900 p_discount_factors(p_counter));
2901
2902 IF (g_proc_level>=g_debug_level) THEN
2903 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'discount factor: '||p_discount_factors(p_counter));
2904 END IF;
2905
2906 --start bug 2804548
2907 IF nvl(p_initial_bases(i),'FIXED')='FLOAT' THEN
2908 -- convert YTM+1BP to annual compounded formula
2909 IF (p_coupon_freqs(i) <> 1) THEN
2910 p_rc_in.p_start_date := p_bond_coupon_start;
2911 p_rc_in.p_end_date := p_bond_coupon_end;
2912 p_rc_in.p_day_count_basis_in := p_day_count_bases(i);
2913 p_rc_in.p_day_count_basis_out := p_day_count_bases(i);
2914 p_rc_in.p_rate_type_in := 'P';
2915 p_rc_in.p_rate_type_out := 'P';
2916 p_rc_in.p_compound_freq_in := p_coupon_freqs(i);
2917 p_rc_in.p_compound_freq_out := 1;
2918 p_rc_in.p_rate_in := p_actual_ytm+p_1bp;
2919 rate_conversion(p_rc_in, p_rc_out);
2920 p_yield_rate_add1bp := p_rc_out.p_rate_out;
2921 ELSE
2922 p_yield_rate_add1bp := p_bond_ytm+p_1bp;
2923 END IF;
2924 -- convert YTM+1BP to a long discount factor
2925 p_discount_factors_add1bp.EXTEND;
2926 XTR_RATE_CONVERSION.yield_to_discount_factor_long(
2927 p_yield_rate_add1bp, p_days(p_counter), p_annual_basis,
2928 p_discount_factors_add1bp(p_counter));
2929
2930 --find Next Coupon Reset Date
2931 IF p_counter=1 THEN
2932 p_next_coupon_reset := coupon_rec.maturity_date;
2933 END IF;
2934 END IF;
2935 --end bug 2804548
2936
2937 p_counter := p_counter + 1;
2938 END LOOP;
2939
2940 -- yield to maturity
2941 p_ytm_temp(i) := p_bond_ytm;
2942
2943 -- Add last cashflow, which is principal repayment
2944 -- at deal maturity date
2945 p_cashflows.EXTEND;
2946 p_days.EXTEND;
2947 -- p_counter already incremented in previous loop
2948
2949
2950 --bug 2427997
2951 p_signed_face_value := get_signed_amount(p_face_values(i),
2952 p_deal_types(i), p_deal_subtypes(i), null);
2953 p_cashflows(p_counter) := p_signed_face_value;
2954 /*
2955 IF (p_deal_subtypes(i)='BUY') THEN
2956 p_cashflows(p_counter) := p_face_values(i);
2957 ELSIF (p_deal_subtypes(i)='ISSUE') THEN
2958 p_cashflows(p_counter) := (-1)*p_face_values(i);
2959 END IF;
2960 */
2961
2962 IF (g_proc_level>=g_debug_level) THEN
2963 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'last cashflow: '||p_cashflows(p_counter));
2964 END IF;
2965 days_run_helper(p_ref_date, p_end_dates(i),
2966 p_day_count_bases(i), null, p_days(p_counter),
2967 p_annual_basis);
2968 IF (g_proc_level>=g_debug_level) THEN
2969 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'last days: '||p_days(p_counter));
2970 END IF;
2971
2972 p_discount_factors.EXTEND;
2973 XTR_RATE_CONVERSION.yield_to_discount_factor_long(
2974 p_yield_rate, p_days(p_counter), p_annual_basis,
2975 p_discount_factors(p_counter));
2976
2977 --bug 2804548 calc discount factor for Prn Payment
2978 IF nvl(p_initial_bases(i),'FIXED')='FLOAT' THEN
2979 p_discount_factors_add1bp.EXTEND;
2980 XTR_RATE_CONVERSION.yield_to_discount_factor_long(
2981 p_yield_rate_add1bp, p_days(p_counter), p_annual_basis,
2982 p_discount_factors_add1bp(p_counter));
2983 END IF;
2984
2985 IF (g_proc_level>=g_debug_level) THEN
2986 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'discount factor: '||p_discount_factors(p_counter));
2987 END IF;
2988
2989
2990 IF (p_ref_date <> p_end_dates(i)) THEN
2991
2992 --bug 2427997
2993 --use p_signed_face_value
2994 /*
2995 IF (p_deal_subtypes(i) = 'ISSUE') THEN
2996 p_face_values(i) := (-1)*p_face_values(i);
2997 END IF;
2998 */
2999
3000 --start bug 2804548
3001 IF nvl(p_initial_bases(i),'FIXED')='FLOAT' THEN
3002 --convexity
3003 p_convexity_temp(i) := NULL;
3004
3005 --duration
3006 days_run_helper(p_ref_date,p_next_coupon_reset,
3007 p_day_count_bases(i),null,p_days_frb_dur,
3008 p_annual_basis_frb_dur);
3009 p_duration_temp(i) := p_days_frb_dur/p_annual_basis_frb_dur;
3010
3011 --Modified DUration
3012 p_mod_duration_temp(i) := NULL;
3013
3014 --BPV
3015 p_tot_cf_add1bp := 0;
3016 FOR j IN 1..p_cashflows.COUNT LOOP
3017 p_pv_in.p_indicator := 'D';
3018 p_pv_in.p_future_val := p_cashflows(j);
3019 p_pv_in.p_rate := p_discount_factors_add1bp(j);
3020 p_pv_in.p_pv_date := p_ref_date;
3021 p_pv_in.p_fv_date := p_end_dates(i);
3022 p_pv_in.p_day_count_basis := p_day_count_bases(i);
3023 IF within_one_year(p_ref_date, p_end_dates(i)) THEN
3024 p_pv_in.p_rate_type := 'S';
3025 ELSE
3026 p_pv_in.p_rate_type := 'P';
3027 p_pv_in.p_compound_freq := 1;
3028 END IF;
3029 XTR_MM_COVERS.present_value(p_pv_in, p_pv_out);
3030 p_cashflows(j) := p_pv_out.p_present_val;
3031 p_tot_cf_add1bp := p_tot_cf_add1bp + p_cashflows(j);
3032 IF (g_proc_level>=g_debug_level) THEN
3033 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'pv cashflow add1bp: '||p_cashflows(j));
3034 END IF;
3035 END LOOP;
3036
3037 p_bpv := (p_tot_cf_add1bp*100/p_face_values(i))-p_dirty_price;
3038
3039 ELSE
3040 --end bug 2804548
3041
3042 -- convexity
3043 IF (g_proc_level>=g_debug_level) THEN
3044 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'dirty price: '||p_dirty_price);
3045 END IF;
3046 p_convexity_temp(i) := QRM_MM_FORMULAS.bond_convexity(
3047 p_cashflows, p_days, p_coupon_freqs(i),
3048 p_bond_ytm, p_annual_basis, p_dirty_price);
3049 -- convert convexity to per 100
3050 p_convexity_temp(i) := p_convexity_temp(i)/
3051 p_signed_face_value*100;
3052
3053 IF (g_proc_level>=g_debug_level) THEN
3054 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'total cashflows: '||p_cashflows.COUNT);
3055 END IF;
3056 -- convert cashflows to present values for duration
3057 -- convert cashflows to per 100 for convexity
3058
3059 FOR j IN 1..p_cashflows.COUNT LOOP
3060 p_pv_in.p_indicator := 'D';
3061 p_pv_in.p_future_val := p_cashflows(j);
3062 p_pv_in.p_rate := p_discount_factors(j);
3063 p_pv_in.p_pv_date := p_ref_date;
3064 p_pv_in.p_fv_date := p_end_dates(i);
3065 p_pv_in.p_day_count_basis := p_day_count_bases(i);
3066 IF within_one_year(p_ref_date, p_end_dates(i)) THEN
3067 p_pv_in.p_rate_type := 'S';
3068 ELSE
3069 p_pv_in.p_rate_type := 'P';
3070 p_pv_in.p_compound_freq := 1;
3071 END IF;
3072 XTR_MM_COVERS.present_value(p_pv_in, p_pv_out);
3073 p_cashflows(j) := p_pv_out.p_present_val;
3074 IF (g_proc_level>=g_debug_level) THEN
3075 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'pv cashflow: '||p_cashflows(j));
3076 END IF;
3077 END LOOP;
3078
3079 -- duration
3080 -- calculate number of days until maturity
3081 p_duration_temp(i) := QRM_MM_FORMULAS.duration(p_cashflows,
3082 p_days, p_annual_basis);
3083
3084 -- modified duration
3085 p_mod_duration_temp(i) := QRM_MM_FORMULAS.mod_duration(
3086 p_duration_temp(i), p_bond_ytm, p_coupon_freqs(i));
3087
3088 -- bpv
3089 p_bpv := QRM_MM_FORMULAS.bpv_yr(p_dirty_price,
3090 p_mod_duration_temp(i));
3091
3092 END IF; --Sens for Floating vs Fixed
3093
3094 -- position bpv in deal ccy
3095 -- + for ISSUE, - for BUY
3096 -- p_signed_face_value is already signed
3097 -- For Non Floating Rate Bond, multiply p_bpv by (-1)
3098 -- since calculating from Modified Duration.
3099 IF nvl(p_initial_bases(i),'FIXED')='FLOAT' THEN
3100 p_sign_temp:=1;
3101 ELSE
3102 p_sign_temp:=-1;
3103 END IF;
3104 p_pos_bpv_temp(i) := p_sign_temp * p_bpv * p_signed_face_value/100;
3105
3106 -- position bpv in usd ccy
3107 IF (p_deal_ccys(i)= 'USD') THEN
3108 p_pos_bpv_usd_temp(i) := p_pos_bpv_temp(i);
3109 ELSE
3110 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3111 p_deal_ccys(i), 'USD', p_pos_bpv_temp(i),
3112 p_pos_bpv_usd_temp(i));
3113 END IF;
3114 -- position bpv in sob ccy
3115 IF (p_deal_ccys(i)= p_sob_ccy_temp(i)) THEN
3116 p_pos_bpv_sob_temp(i) := p_pos_bpv_temp(i);
3117 ELSE
3118 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3119 p_deal_ccys(i), p_sob_ccy_temp(i), p_pos_bpv_temp(i),
3120 p_pos_bpv_sob_temp(i));
3121 END IF;
3122
3123 ELSE -- if matures today, sensitivites are 0
3124 p_convexity_temp(i) := 0;
3125 p_duration_temp(i) := 0;
3126 p_mod_duration_temp(i) := 0;
3127 p_pos_bpv_temp(i) := 0;
3128 p_pos_bpv_sob_temp(i) := 0;
3129 p_pos_bpv_usd_temp(i) := 0;
3130 END IF;
3131 p_upd_md_calc_date_temp(i) := p_ref_datetime;
3132 ELSE
3133 p_insert_or_update := 'U';
3134 p_upd_md_calc_date_temp(i) := p_deal_calculations.last_md_calc_date;
3135 p_fair_value_temp(i) := p_deal_calculations.fair_value;
3136 p_fair_value_usd_temp(i) := p_deal_calculations.fair_value_usd;
3137 p_fair_value_sob_temp(i) := p_deal_calculations.fair_value_sob;
3138 p_accrued_interest_temp(i) := p_deal_calculations.accrued_interest;
3139 p_accrued_interest_usd_temp(i) := p_deal_calculations.accrued_interest_usd;
3140 p_accrued_interest_sob_temp(i) := p_deal_calculations.accrued_interest_sob;
3141 p_ytm_temp(i) := p_deal_calculations.yield_to_maturity;
3142 p_mm_reval_rate_temp(i) := p_deal_calculations.mm_reval_rate;
3143 p_reval_price_temp(i):= p_deal_calculations.revaluation_price;
3144 p_convexity_temp(i) := p_deal_calculations.convexity;
3145 p_duration_temp(i) := p_deal_calculations.duration;
3146 p_mod_duration_temp(i) := p_deal_calculations.modified_duration;
3147 p_pos_bpv_temp(i) := p_deal_calculations.pos_bpv;
3148 p_pos_bpv_usd_temp(i) := p_deal_calculations.pos_bpv_usd;
3149 p_pos_bpv_sob_temp(i) := p_deal_calculations.pos_bpv_sob;
3150 END IF; -- end threshold check for fv/sens calculations
3151 -- convert prices to USD
3152 IF (p_deal_ccys(i)='USD') THEN
3153 p_reval_price_usd_temp(i) := p_reval_price_temp(i);
3154 p_trans_price_usd_temp(i) := p_trans_price_temp(i);
3155 ELSE
3156 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3157 p_deal_ccys(i), 'USD', p_reval_price_temp(i),
3158 p_reval_price_usd_temp(i));
3159 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3160 p_deal_ccys(i), 'USD', p_trans_price_temp(i),
3161 p_trans_price_usd_temp(i));
3162
3163 END IF;
3164 -- convert prices to sob ccy
3165 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
3166 p_reval_price_sob_temp(i) := p_reval_price_temp(i);
3167 p_trans_price_sob_temp(i) := p_trans_price_temp(i);
3168 ELSE
3169 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3170 p_deal_ccys(i), p_sob_ccy_temp(i),
3171 p_reval_price_temp(i), p_reval_price_sob_temp(i));
3172 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3173 p_deal_ccys(i), p_sob_ccy_temp(i),
3174 p_trans_price_temp(i),
3175 p_trans_price_sob_temp(i));
3176 END IF;
3177
3178 ELSIF (p_deal_types(i)='STOCK') THEN -- STOCK
3179 IF (g_proc_level>=g_debug_level) THEN
3180 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'calculating stock');
3181 END IF;
3182 p_maturity_amount_temp(i):=TO_NUMBER(NULL);
3183 p_gap_amount_temp(i) := TO_NUMBER(NULL);
3184
3185 -- set to 0
3186 p_maturity_amount_usd_temp(i) := TO_NUMBER(NULL);
3187 p_gap_amount_usd_temp(i) := TO_NUMBER(NULL);
3188
3189 -- convert amounts to sob ccy
3190 p_maturity_amount_sob_temp(i) := TO_NUMBER(NULL);
3191 p_gap_amount_sob_temp(i) := TO_NUMBER(NULL);
3192
3193 -- trans price: price per share from deal
3194 p_trans_price_temp(i) := p_transaction_rates(i);
3195
3196
3197 IF (g_proc_level>=g_debug_level) THEN
3198 xtr_risk_debug_pkg.dlog('run_analysis: ' || 'insert/update val: '||p_insert_or_update);
3199 END IF;
3200 IF (p_insert_or_update <> 'N') THEN
3201 QRM_EQ_FORMULAS.fv_stock(p_pricing_models(i), p_deal_ccys(i),
3202 p_bond_issues(i), p_market_data_set_temp(i),
3203 p_mm_trans_rate_temp(i), p_quantity_out(i),
3204 p_ref_date, p_fair_value_temp(i),
3205 p_reval_price_temp(i));
3206
3207 -- convert amounts to USD
3208 IF (p_deal_ccys(i)='USD') THEN
3209 p_fair_value_usd_temp(i) := p_fair_value_temp(i);
3210 ELSE
3211 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3212 p_deal_ccys(i), 'USD', p_fair_value_temp(i),
3213 p_fair_value_usd_temp(i));
3214 END IF;
3215 -- convert amounts to sob ccy
3216 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
3217 p_fair_value_sob_temp(i) := p_fair_value_temp(i);
3218 ELSE
3219 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3220 p_deal_ccys(i), p_sob_ccy_temp(i),
3221 p_fair_value_temp(i), p_fair_value_sob_temp(i));
3222 END IF;
3223
3224
3225 p_upd_md_calc_date_temp(i) := p_ref_datetime;
3226 ELSE
3227 p_insert_or_update := 'U';
3228 p_upd_md_calc_date_temp(i) := p_deal_calculations.last_md_calc_date;
3229 p_fair_value_temp(i) := p_deal_calculations.fair_value;
3230 p_fair_value_usd_temp(i) := p_deal_calculations.fair_value_usd;
3231 p_fair_value_sob_temp(i) := p_deal_calculations.fair_value_sob;
3232
3233 p_reval_price_temp(i) := p_deal_calculations.revaluation_price;
3234
3235 END IF; -- end threshold check for fv/sens calculations
3236 -- convert prices to USD
3237 IF (p_deal_ccys(i)='USD') THEN
3238 p_reval_price_usd_temp(i) := p_reval_price_temp(i);
3239 p_trans_price_usd_temp(i) := p_trans_price_temp(i);
3240 ELSE
3241 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3242 p_deal_ccys(i), 'USD', p_reval_price_temp(i),
3243 p_reval_price_usd_temp(i));
3244 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3245 p_deal_ccys(i), 'USD', p_trans_price_temp(i),
3246 p_trans_price_usd_temp(i));
3247
3248 END IF;
3249 -- convert prices to sob ccy
3250 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
3251 p_reval_price_sob_temp(i) := p_reval_price_temp(i);
3252 p_trans_price_sob_temp(i) := p_trans_price_temp(i);
3253 ELSE
3254 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3255 p_deal_ccys(i), p_sob_ccy_temp(i),
3256 p_reval_price_temp(i), p_reval_price_sob_temp(i));
3257 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3258 p_deal_ccys(i), p_sob_ccy_temp(i),
3259 p_trans_price_temp(i),
3260 p_trans_price_sob_temp(i));
3261 END IF;
3262
3263
3264
3265
3266 ELSIF (p_deal_types(i)='NI') THEN -- NI
3267 p_maturity_amount_temp(i) := get_signed_amount(p_face_values(i),p_deal_types(i), p_deal_subtypes(i), null);
3268 p_gap_amount_temp(i) := p_maturity_amount_temp(i);
3269
3270 -- convert amounts to USD
3271 IF (p_deal_ccys(i)='USD') THEN
3272 p_maturity_amount_usd_temp(i) := p_maturity_amount_temp(i);
3273 p_gap_amount_usd_temp(i) := p_gap_amount_temp(i);
3274 ELSE
3275 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3276 p_deal_ccys(i), 'USD', p_maturity_amount_temp(i),
3277 p_maturity_amount_usd_temp(i));
3278 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3279 p_deal_ccys(i), 'USD', p_gap_amount_temp(i),
3280 p_gap_amount_usd_temp(i));
3281 END IF;
3282 -- convert amounts to sob ccy
3283 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
3284 p_maturity_amount_sob_temp(i) := p_maturity_amount_temp(i);
3285 p_gap_amount_sob_temp(i) := p_gap_amount_temp(i);
3286 ELSE
3287 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3288 p_deal_ccys(i), p_sob_ccy_temp(i),
3289 p_maturity_amount_temp(i),
3290 p_maturity_amount_sob_temp(i));
3291 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3292 p_deal_ccys(i), p_sob_ccy_temp(i),
3293 p_gap_amount_temp(i), p_gap_amount_sob_temp(i));
3294 END IF;
3295
3296 -- if transaction rate is a discount rate, convert to yield
3297 IF (p_discount_yields(i) = 'Y') THEN -- discount basis
3298 days_run_helper(p_start_dates(i),
3299 p_maturity_dates(i), p_day_count_bases(i), null,
3300 p_days_mature, p_annual_basis);
3301 XTR_RATE_CONVERSION.discount_to_yield_rate(
3302 p_transaction_rates(i), p_days_mature,
3303 p_annual_basis, p_transaction_rates(i));
3304 END IF;
3305 -- transaction rate, converted to Act/365
3306 IF (p_day_count_bases(i) <> p_mm_day_count_basis) THEN
3307 IF (g_proc_level>=g_debug_level) THEN
3308 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI deal no: '||p_deal_nos(i));
3309 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI start date: '||p_start_dates(i));
3310 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI mat date: '||p_maturity_dates(i));
3311 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'DCB in: '||p_day_count_bases(i));
3312 END IF;
3313 p_rc_in.p_start_date := p_start_dates(i);
3314 p_rc_in.p_end_date := p_end_dates(i);
3315 p_rc_in.p_day_count_basis_in := p_day_count_bases(i);
3316 p_rc_in.p_day_count_basis_out := p_mm_day_count_basis;
3317 IF (within_one_year(p_start_dates(i), p_end_dates(i))) THEN
3318 p_rc_in.p_rate_type_in := 'S';
3319 p_rc_in.p_rate_type_out := 'S';
3320 ELSE
3321 p_rc_in.p_rate_type_in := 'P';
3322 p_rc_in.p_rate_type_out := 'P';
3323 p_rc_in.p_compound_freq_in := 1;
3324 p_rc_in.p_compound_freq_out := 1;
3325 END IF;
3326 IF (g_proc_level>=g_debug_level) THEN
3327 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'trans rate in: '||p_transaction_rates(i));
3328 END IF;
3329 p_rc_in.p_rate_in := p_transaction_rates(i);
3330 rate_conversion(p_rc_in, p_rc_out);
3331 p_mm_trans_rate_temp(i) := p_rc_out.p_rate_out;
3332 ELSE
3333 p_mm_trans_rate_temp(i) := p_transaction_rates(i);
3334 END IF;
3335
3336
3337 IF (p_insert_or_update <> 'N') THEN
3338 -- fair value, data side, reval rate (in ACT/365)
3339 QRM_MM_FORMULAS.fv_ni(p_pricing_models(i),
3340 p_market_data_set_temp(i), p_deal_subtypes(i),
3341 p_discount_yields(i), p_deal_ccys(i),
3342 p_interpolation_method, p_day_count_bases(i),
3343 p_ref_date, p_start_dates(i), p_maturity_dates(i),
3344 p_face_values(i), p_margins(i), p_side,
3345 p_mm_reval_rate_temp(i), p_fair_value_temp(i));
3346
3347 -- accrued interest (should be 0)
3348 p_accrued_interest_temp(i) := 0;
3349 p_accrued_interest_usd_temp(i) := 0;
3350 p_accrued_interest_sob_temp(i) := 0;
3351
3352 -- convert amounts to USD
3353 IF (p_deal_ccys(i)='USD') THEN
3354 p_fair_value_usd_temp(i) := p_fair_value_temp(i);
3355 ELSE
3356 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3357 p_deal_ccys(i), 'USD', p_fair_value_temp(i),
3358 p_fair_value_usd_temp(i));
3359 END IF;
3360 -- convert amounts to sob ccy
3361 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
3362 p_fair_value_sob_temp(i) := p_fair_value_temp(i);
3363 ELSE
3364 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3365 p_deal_ccys(i), p_sob_ccy_temp(i),
3366 p_fair_value_temp(i), p_fair_value_sob_temp(i));
3367 END IF;
3368
3369 -- sensitivities
3370 IF (p_ref_date <> p_end_dates(i)) THEN
3371 -- duration
3372 p_days.DELETE;
3373 p_days.EXTEND;
3374 -- calculate days to maturity
3375 days_run_helper(p_ref_date, p_maturity_dates(i),
3376 p_day_count_bases(i), null, p_days(1), p_annual_basis);
3377 IF (g_proc_level>=g_debug_level) THEN
3378 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'days to maturity: '||p_days(1));
3379 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'days in year: '||p_annual_basis);
3380 END IF;
3381 p_duration_temp(i) := QRM_MM_FORMULAS.duration(NULL,
3382 p_days, p_annual_basis);
3383
3384 -- yield rate is reval rate in deal day count basis
3385 IF (p_day_count_bases(i) <> p_mm_day_count_basis) THEN
3386 p_rc_in.p_start_date := p_ref_date;
3387 p_rc_in.p_end_date := p_end_dates(i);
3388 p_rc_in.p_day_count_basis_in := p_mm_day_count_basis;
3389 p_rc_in.p_day_count_basis_out := p_day_count_bases(i);
3390 IF (within_one_year(p_ref_date, p_end_dates(i))) THEN
3391 p_rc_in.p_rate_type_in := 'S';
3392 p_rc_in.p_rate_type_out := 'S';
3393 ELSE
3394 p_rc_in.p_rate_type_in := 'P';
3395 p_rc_in.p_rate_type_out := 'P';
3396 p_rc_in.p_compound_freq_in := 1;
3397 p_rc_in.p_compound_freq_out := 1;
3398 END IF;
3399 p_rc_in.p_rate_in := p_mm_reval_rate_temp(i);
3400 rate_conversion(p_rc_in, p_rc_out);
3401 p_yield_rate := p_rc_out.p_rate_out;
3402 ELSE
3403 p_yield_rate := p_mm_reval_rate_temp(i);
3404 END IF;
3405 IF (g_proc_level>=g_debug_level) THEN
3406 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'ytm in DCB: '|| p_yield_rate);
3407 END IF;
3408
3409 -- yield to maturity is reval rate in deal DCB
3410 p_ytm_temp(i) := p_yield_rate;
3411
3412 -- modified duration
3413 p_mod_duration_temp(i) := QRM_MM_FORMULAS.mod_duration(
3414 p_duration_temp(i), p_yield_rate, 1);
3415
3416 -- bpv
3417 -- signed because fair value is signed
3418 p_bpv := QRM_MM_FORMULAS.bpv_yr(p_fair_value_temp(i)/
3419 p_face_values(i), p_mod_duration_temp(i));
3420
3421 -- convexity
3422 p_convexity_temp(i) := QRM_MM_FORMULAS.ni_fra_convexity(
3423 p_days(1), p_yield_rate, p_annual_basis);
3424
3425 -- position bpv
3426 -- + for ISSUE, - for BUY
3427 -- p_face_values(i) not signed, but bpv is signed
3428 p_pos_bpv_temp(i) := (-1)*p_bpv*p_face_values(i);
3429
3430 -- position bpv in usd ccy
3431 IF (p_deal_ccys(i)= 'USD') THEN
3432 p_pos_bpv_usd_temp(i) := p_pos_bpv_temp(i);
3433 ELSE
3434 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3435 p_deal_ccys(i), 'USD', p_pos_bpv_temp(i),
3436 p_pos_bpv_usd_temp(i));
3437 END IF;
3438 -- position bpv in sob ccy
3439 IF (p_deal_ccys(i)= p_sob_ccy_temp(i)) THEN
3440 p_pos_bpv_sob_temp(i) := p_pos_bpv_temp(i);
3441 ELSE
3442 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3443 p_deal_ccys(i), p_sob_ccy_temp(i), p_pos_bpv_temp(i),
3444 p_pos_bpv_sob_temp(i));
3445 END IF;
3446 ELSE
3447 p_duration_temp(i) := 0;
3448 p_mod_duration_temp(i) := 0;
3449 p_convexity_temp(i) := 0;
3450 p_pos_bpv_temp(i) := 0;
3451 p_pos_bpv_usd_temp(i) := 0;
3452 p_pos_bpv_sob_temp(i) := 0;
3453 END IF;
3454 p_upd_md_calc_date_temp(i) := p_ref_datetime;
3455 ELSE
3456 p_insert_or_update := 'U';
3457 p_upd_md_calc_date_temp(i) := p_deal_calculations.last_md_calc_date;
3458 p_fair_value_temp(i) := p_deal_calculations.fair_value;
3459 p_fair_value_usd_temp(i) := p_deal_calculations.fair_value_usd;
3460 p_fair_value_sob_temp(i) := p_deal_calculations.fair_value_sob;
3461 p_accrued_interest_temp(i) := p_deal_calculations.accrued_interest;
3462 p_accrued_interest_usd_temp(i) := p_deal_calculations.accrued_interest_usd;
3463 p_accrued_interest_sob_temp(i) := p_deal_calculations.accrued_interest_sob;
3464 p_ytm_temp(i) := p_deal_calculations.yield_to_maturity;
3465 p_mm_reval_rate_temp(i) := p_deal_calculations.mm_reval_rate;
3466 p_duration_temp(i) := p_deal_calculations.duration;
3467 p_mod_duration_temp(i) := p_deal_calculations.modified_duration;
3468 p_convexity_temp(i) := p_deal_calculations.convexity;
3469 p_pos_bpv_temp(i) := p_deal_calculations.pos_bpv;
3470 p_pos_bpv_usd_temp(i) := p_deal_calculations.pos_bpv_usd;
3471 p_pos_bpv_sob_temp(i) := p_deal_calculations.pos_bpv_sob;
3472 END IF; -- end threshold check for fv/sens calculations;
3473
3474 IF (g_proc_level>=g_debug_level) THEN
3475 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI deal no: '||p_deal_nos(i));
3476 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI yield rate: '||p_yield_rate);
3477 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI fair value: '||p_fair_value_temp(i));
3478 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI duration: '||p_duration_temp(i));
3479 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI mod duration: '||p_mod_duration_temp(i));
3480 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI bpv: '||p_bpv);
3481 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI convexity: '||p_convexity_temp(i));
3482 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI reval rate: '||p_mm_reval_rate_temp(i));
3483 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI trans rate: '||p_mm_trans_rate_temp(i));
3484 END IF;
3485
3486 ELSIF (p_deal_types(i) IN ('TMM', 'IRS', 'RTMM')) THEN
3487
3488 -- clear all tables of previous values before reuse
3489 p_cashflows.DELETE;
3490 p_days.DELETE;
3491 p_trans_trans_nos.DELETE;
3492 p_trans_start_dates.DELETE;
3493 p_trans_maturity_dates.DELETE;
3494 p_trans_settle_dates.DELETE;
3495 p_trans_due_on_dates.DELETE; -- prepaid interest
3496 p_trans_interest_refunds.DELETE; -- prepaid interest
3497 p_trans_prin_actions.DELETE;
3498 p_trans_yield_rates.DELETE;
3499 p_trans_disc_rates.DELETE;
3500 p_trans_interest_settled.DELETE;
3501 p_trans_prin_adjusts.DELETE;
3502 p_trans_accum_interests.DELETE;
3503 p_trans_accum_interests_bf.DELETE;
3504 p_trans_balance_outs.DELETE;
3505 p_trans_settle_term_interest.DELETE;
3506
3507 -- get cashflows and transactions
3508 p_counter := 0;
3509 -- just b/c deal level is current, doesn't mean transactions
3510 -- are still current: could be closed or expired
3511 -- want to get current and future transactions for deal
3512 p_ok_trans := FALSE;
3513 FOR cursor_rec IN get_tmm_irs_rtmm_trans(p_deal_nos(i),
3514 p_ref_date) LOOP
3515 p_counter := p_counter+1;
3516 p_ok_trans := TRUE;
3517
3518 -- calculate maturity amount, gap amount
3519 IF ((p_end_dates(i) = cursor_rec.maturity_date) AND
3520 (cursor_rec.start_date = cursor_rec.maturity_date) AND NVL(p_maturity_amount_temp(i),0)=0)
3521 THEN
3522 p_maturity_amount_temp(i) :=
3523 nvl(cursor_rec.principal_adjust, 0);
3524 END IF;
3525
3526 -- if gap date = deal maturity date, gap amt = mat amt
3527 IF (p_gap_date_temp(i) = p_end_dates(i)) THEN
3528 p_gap_amount_temp(i) := p_maturity_amount_temp(i);
3529 -- else
3530 ELSIF (p_gap_date_temp(i)>=cursor_rec.start_date) THEN
3531 IF (NOT (p_deal_types(i)='IRS' AND
3532 p_initial_bases(i)='FIXED')) THEN
3533 IF (cursor_rec.principal_action='INCRSE') THEN
3534 p_gap_amount_temp(i) :=
3535 nvl(cursor_rec.balance_out_bf,0) +
3536 nvl(cursor_rec.principal_adjust, 0);
3537 ELSE
3538 p_gap_amount_temp(i) :=
3539 nvl(cursor_rec.balance_out_bf,0) -
3540 nvl(cursor_rec.principal_adjust, 0);
3541 END IF;
3542 END IF;
3543 END IF;
3544 -- end maturity/gap amount calculation
3545
3546 p_cashflows.EXTEND;
3547 -- here cursor_rec.cf is sum of principal repayment and
3548 -- interest settled
3549 IF (p_deal_subtypes(i)='FUND') THEN
3550 -- if RTMM, cashflows are principal and amount due
3551 IF (p_deal_types(i)='RTMM') THEN
3552 p_cashflows(p_counter) :=(-1) *
3553 (NVL(cursor_rec.principal_adjust, 0)+
3554 NVL(cursor_rec.pi_amount_due, 0));
3555 END IF;
3556 ELSIF (p_deal_subtypes(i)='INVEST') THEN
3557 -- if RTMM, cashflows are principal and amount due
3558 IF (p_deal_types(i)='RTMM') THEN
3559 p_cashflows(p_counter):=
3560 NVL(cursor_rec.principal_adjust,0) +
3561 NVL(cursor_rec.pi_amount_due, 0);
3562 END IF;
3563 END IF;
3564 p_days.EXTEND;
3565
3566 -- get number of days until cashflow
3567 days_run_helper(p_ref_date,
3568 cursor_rec.maturity_date, p_day_count_bases(i), NULL,
3569 p_days(p_counter), p_annual_basis);
3570 IF (g_proc_level>=g_debug_level) THEN
3571 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'days until cashflow: '||p_days(p_counter));
3572 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'annual basis: '||p_annual_basis);
3573 END IF;
3574 p_trans_trans_nos.EXTEND;
3575 p_trans_trans_nos(p_counter) := cursor_rec.transaction_number;
3576 p_trans_start_dates.EXTEND;
3577 p_trans_start_dates(p_counter) := cursor_rec.start_date;
3578 p_trans_maturity_dates.EXTEND;
3579 p_trans_maturity_dates(p_counter) := cursor_rec.maturity_date;
3580 /* prepaid interest */
3581 p_trans_due_on_dates.EXTEND;
3582 p_trans_settle_dates.EXTEND;
3583 p_trans_settle_dates(p_counter) := cursor_rec.settle_date;
3584 if (nvl(cursor_rec.prepaid_interest,'N')='Y') then
3585 p_trans_due_on_dates(p_counter):=p_trans_start_dates(p_counter);
3586 else
3587 p_trans_due_on_dates(p_counter):=p_trans_maturity_dates(p_counter);
3588 end if;
3589 p_trans_interest_refunds.EXTEND;
3590 p_trans_interest_refunds(p_counter):=cursor_rec.interest_refund;
3591 /* end prepaid interest */
3592 p_trans_prin_actions.EXTEND;
3593 p_trans_prin_actions(p_counter) := cursor_rec.principal_action;
3594 p_trans_yield_rates.EXTEND;
3595 p_trans_yield_rates(p_counter) := cursor_rec.interest_rate;
3596 p_trans_disc_rates.EXTEND;
3597 -- get interpolation rate for coupon period
3598 p_md_in.p_md_set_code := p_market_data_set_temp(i);
3599 p_md_in.p_source := 'C';
3600 p_md_in.p_indicator := 'Y';
3601 p_md_in.p_spot_date := p_ref_date;
3602 p_md_in.p_future_date := cursor_rec.maturity_date;
3603 p_md_in.p_ccy := p_deal_ccys(i);
3604 p_md_in.p_day_count_basis_out := p_day_count_bases(i);
3605 p_md_in.p_interpolation_method := p_interpolation_method;
3606 p_md_in.p_side := 'M';
3607 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
3608 p_trans_disc_rates(p_counter) := p_md_out.p_md_out;
3609 p_trans_interest_settled.EXTEND;
3610 -- if RTMM, get amount due instead of interest settled
3611 IF (p_deal_types(i) = 'RTMM') THEN
3612 p_trans_interest_settled(p_counter) := cursor_rec.pi_amount_due;
3613 ELSE
3614 p_trans_interest_settled(p_counter) := cursor_rec.interest_settled;
3615 END IF;
3616 p_trans_prin_adjusts.EXTEND;
3617 p_trans_prin_adjusts(p_counter) := cursor_rec.principal_adjust;
3618 p_trans_accum_interests.EXTEND;
3619 p_trans_accum_interests(p_counter) := cursor_rec.accum_interest;
3620 p_trans_accum_interests_bf.EXTEND;
3621 p_trans_accum_interests_bf(p_counter) := cursor_rec.accum_interest_bf;
3622 p_trans_balance_outs.EXTEND;
3623 p_trans_balance_outs(p_counter) := cursor_rec.balance_out;
3624 p_trans_settle_term_interest.EXTEND;
3625 p_trans_settle_term_interest(p_counter) := cursor_rec.settle_term_interest;
3626 END LOOP;
3627
3628 -- get correct signs for maturity, gap amounts
3629 p_maturity_amount_temp(i) := get_signed_amount(
3630 p_maturity_amount_temp(i), p_deal_types(i),
3631 p_deal_subtypes(i), null);
3632 p_gap_amount_temp(i) := get_signed_amount(
3633 p_gap_amount_temp(i), p_deal_types(i),
3634 p_deal_subtypes(i), null);
3635
3636 -- convert maturity, gap amounts to USD
3637 IF (p_deal_ccys(i)='USD') THEN
3638 p_maturity_amount_usd_temp(i) := p_maturity_amount_temp(i);
3639 p_gap_amount_usd_temp(i) := p_gap_amount_temp(i);
3640 ELSE
3641 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3642 p_deal_ccys(i), 'USD', p_maturity_amount_temp(i),
3643 p_maturity_amount_usd_temp(i));
3644 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3645 p_deal_ccys(i), 'USD', p_gap_amount_temp(i),
3646 p_gap_amount_usd_temp(i));
3647 END IF;
3648 -- convert maturity, gap amounts to sob ccy
3649 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
3650 p_maturity_amount_sob_temp(i) := p_maturity_amount_temp(i);
3651 p_gap_amount_sob_temp(i) := p_gap_amount_temp(i);
3652 ELSE
3653 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3654 p_deal_ccys(i), p_sob_ccy_temp(i),
3655 p_maturity_amount_temp(i),
3656 p_maturity_amount_sob_temp(i));
3657 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3658 p_deal_ccys(i), p_sob_ccy_temp(i),
3659 p_gap_amount_temp(i), p_gap_amount_sob_temp(i));
3660 END IF;
3661
3662 -- if deal is good, ie. transactions are not expired, usable
3663 -- calculate fv/sensitivities
3664 IF (p_insert_or_update <> 'N') THEN
3665 IF (p_ok_trans) THEN
3666
3667 -- get last transaction number
3668 OPEN get_last_trans_no(p_deal_nos(i));
3669 FETCH get_last_trans_no INTO p_last_trans_no;
3670 CLOSE get_last_trans_no;
3671
3672 -- fair values for TMM/IRS/RTMM
3673 QRM_MM_FORMULAS.fv_tmm_irs_rtmm(p_pricing_models(i),
3674 p_deal_types(i), p_market_data_set_temp(i), 'N',
3675 p_deal_subtypes(i), p_interpolation_method,
3676 p_deal_ccys(i), p_discount_yields(i),
3677 p_initial_bases(i), p_ref_date, p_settle_dates(i),
3678 p_margins(i), p_last_trans_no,
3679 p_day_count_bases(i), p_trans_trans_nos,
3680 p_trans_start_dates, p_trans_maturity_dates, p_trans_settle_dates,
3681 p_trans_due_on_dates, p_trans_interest_refunds, -- prepaid interest
3682 p_trans_prin_actions, p_trans_yield_rates,
3683 p_trans_interest_settled, p_trans_prin_adjusts,
3684 p_trans_accum_interests, p_trans_accum_interests_bf, -- bug 2807340
3685 p_trans_balance_outs,
3686 p_trans_settle_term_interest, p_side, p_cashflows,
3687 p_days, p_annual_basis,
3688 /* TMM,IRS,RTMM has no reval rate */
3689 p_mm_trans_rate_temp(i), p_accrued_interest_temp(i),
3690 p_fair_value_temp(i));
3691 IF (g_proc_level>=g_debug_level) THEN
3692 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'TMM/IRS/RTMM fair value is: '||p_fair_value_temp(i));
3693 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'TMM/IRS/RTMM accrued interest is: '||p_accrued_interest_temp(i));
3694 END IF;
3695
3696
3697 -- convert fair value, accrued interest
3698 -- convert fair value amounts to USD
3699 IF (p_deal_ccys(i)='USD') THEN
3700 p_fair_value_usd_temp(i) := p_fair_value_temp(i);
3701 p_accrued_interest_usd_temp(i) := p_accrued_interest_temp(i);
3702 ELSE
3703 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3704 p_deal_ccys(i), 'USD', p_fair_value_temp(i),
3705 p_fair_value_usd_temp(i));
3706 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3707 p_deal_ccys(i), 'USD', p_accrued_interest_temp(i),
3708 p_accrued_interest_usd_temp(i));
3709 END IF;
3710 -- convert fair value amounts to sob ccy
3711 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
3712 p_fair_value_sob_temp(i) := p_fair_value_temp(i);
3713 p_accrued_interest_sob_temp(i) := p_accrued_interest_temp(i);
3714 ELSE
3715 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3716 p_deal_ccys(i), p_sob_ccy_temp(i),
3717 p_fair_value_temp(i), p_fair_value_sob_temp(i));
3718 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3719 p_deal_ccys(i), p_sob_ccy_temp(i),
3720 p_accrued_interest_temp(i),
3721 p_accrued_interest_sob_temp(i));
3722 END IF;
3723
3724 IF (g_proc_level>=g_debug_level) THEN
3725 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'before ref date check');
3726 END IF;
3727 IF (p_ref_date <> p_end_dates(i)) THEN
3728 -- duration
3729 IF (g_proc_level>=g_debug_level) THEN
3730 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'inside ref date check');
3731 END IF;
3732 p_duration_temp(i) := QRM_MM_FORMULAS.duration(
3733 p_cashflows, p_days, p_annual_basis);
3734 IF (g_proc_level>=g_debug_level) THEN
3735 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'duration is: '|| p_duration_temp(i));
3736 END IF;
3737 -- Position BPV in deal ccy
3738 -- calculate fair value with yield curve + 1bp
3739 QRM_MM_FORMULAS.fv_tmm_irs_rtmm(p_pricing_models(i),
3740 p_deal_types(i), p_market_data_set_temp(i), 'Y',
3741 p_deal_subtypes(i), p_interpolation_method,
3742 p_deal_ccys(i), p_discount_yields(i),
3743 p_initial_bases(i), p_ref_date, p_settle_dates(i),
3744 p_margins(i), p_last_trans_no,
3745 p_day_count_bases(i), p_trans_trans_nos,
3746 p_trans_start_dates, p_trans_maturity_dates, p_trans_settle_dates,
3747 p_trans_due_on_dates, p_trans_interest_refunds, -- prepaid interest
3748 p_trans_prin_actions, p_trans_yield_rates,
3749 p_trans_interest_settled, p_trans_prin_adjusts,
3750 p_trans_accum_interests, p_trans_accum_interests_bf, -- bug 2807340
3751 p_trans_balance_outs,
3752 p_trans_settle_term_interest, p_side, p_dummy_cf,
3753 p_dummy_days, p_dummy_num1,
3754 p_dummy_num1, p_dummy_num2, p_fair_value_bp);
3755
3756 IF (g_proc_level>=g_debug_level) THEN
3757 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'bp accrued int: '||p_dummy_num2);
3758 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'fair value bp: '||p_fair_value_bp);
3759 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'fair value: '||p_fair_value_temp(i));
3760 END IF;
3761
3762 -- position bpv in deal ccy
3763 p_pos_bpv_temp(i) := p_fair_value_bp -
3764 p_fair_value_temp(i);
3765
3766 -- position bpv in usd ccy
3767 IF (p_deal_ccys(i)= 'USD') THEN
3768 p_pos_bpv_usd_temp(i) := p_pos_bpv_temp(i);
3769 ELSE
3770 convert_amounts(p_market_data_set_temp(i),
3771 p_ref_date, p_deal_ccys(i), 'USD',
3772 p_pos_bpv_temp(i), p_pos_bpv_usd_temp(i));
3773 END IF;
3774 -- position bpv in sob ccy
3775 IF (p_deal_ccys(i)= p_sob_ccy_temp(i)) THEN
3776 p_pos_bpv_sob_temp(i) := p_pos_bpv_temp(i);
3777 ELSE
3778 convert_amounts(p_market_data_set_temp(i),
3779 p_ref_date, p_deal_ccys(i), p_sob_ccy_temp(i),
3780 p_pos_bpv_temp(i), p_pos_bpv_sob_temp(i));
3781 END IF;
3782 ELSE
3783 p_duration_temp(i) := 0;
3784 p_pos_bpv_temp(i) := 0;
3785 p_pos_bpv_usd_temp(i) := 0;
3786 p_pos_bpv_sob_temp(i) := 0;
3787 END IF;
3788 END IF; -- end ok trans
3789 p_upd_md_calc_date_temp(i) := p_ref_datetime;
3790 ELSE
3791 p_insert_or_update := 'U';
3792 p_upd_md_calc_date_temp(i) := p_deal_calculations.last_md_calc_date;
3793 p_fair_value_temp(i) := p_deal_calculations.fair_value;
3794 p_fair_value_usd_temp(i) := p_deal_calculations.fair_value_usd;
3795 p_fair_value_sob_temp(i) := p_deal_calculations.fair_value_sob;
3796 p_accrued_interest_temp(i) := p_deal_calculations.accrued_interest;
3797 p_accrued_interest_usd_temp(i) := p_deal_calculations.accrued_interest_usd;
3798 p_accrued_interest_sob_temp(i) := p_deal_calculations.accrued_interest_sob;
3799 p_mm_trans_rate_temp(i) := p_deal_calculations.mm_trans_rate;
3800 p_duration_temp(i) := p_deal_calculations.duration;
3801 p_pos_bpv_temp(i) := p_deal_calculations.pos_bpv;
3802 p_pos_bpv_usd_temp(i) := p_deal_calculations.pos_bpv_usd;
3803 p_pos_bpv_sob_temp(i) := p_deal_calculations.pos_bpv_sob;
3804 END IF; -- end threshold check for fv/sens calculations
3805
3806 ELSIF (p_deal_types(i)='FRA') THEN
3807 p_maturity_amount_temp(i) := p_face_values(i);
3808 p_gap_amount_temp(i) := get_signed_amount(p_face_values(i),
3809 p_deal_types(i), p_deal_subtypes(i), null);
3810
3811 -- convert amounts to USD
3812 IF (p_deal_ccys(i)='USD') THEN
3813 p_maturity_amount_usd_temp(i) := p_maturity_amount_temp(i);
3814 p_gap_amount_usd_temp(i) := p_gap_amount_temp(i);
3815 ELSE
3816 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3817 p_deal_ccys(i), 'USD', p_maturity_amount_temp(i),
3818 p_maturity_amount_usd_temp(i));
3819 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3820 p_deal_ccys(i), 'USD', p_gap_amount_temp(i),
3821 p_gap_amount_usd_temp(i));
3822 END IF;
3823 -- convert amounts to sob ccy
3824 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
3825 p_maturity_amount_sob_temp(i) := p_maturity_amount_temp(i);
3826 p_gap_amount_sob_temp(i) := p_gap_amount_temp(i);
3827 ELSE
3828 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3829 p_deal_ccys(i), p_sob_ccy_temp(i),
3830 p_maturity_amount_temp(i),
3831 p_maturity_amount_sob_temp(i));
3832 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3833 p_deal_ccys(i), p_sob_ccy_temp(i),
3834 p_gap_amount_temp(i), p_gap_amount_sob_temp(i));
3835 END IF;
3836
3837 -- transaction rate: int rate converted to Act/365
3838 IF (p_day_count_bases(i) <> p_mm_day_count_basis) THEN
3839 p_rc_in.p_start_date := p_start_dates(i);
3840 p_rc_in.p_end_date := p_maturity_dates(i);
3841 p_rc_in.p_day_count_basis_in := p_day_count_bases(i);
3842 p_rc_in.p_day_count_basis_out := p_mm_day_count_basis;
3843 IF (within_one_year(p_start_dates(i),
3844 p_maturity_dates(i))) THEN
3845 p_rc_in.p_rate_type_in := 'S';
3846 p_rc_in.p_rate_type_out := 'S';
3847 ELSE
3848 p_rc_in.p_rate_type_in := 'P';
3849 p_rc_in.p_rate_type_out := 'P';
3850 p_rc_in.p_compound_freq_in := 1;
3851 p_rc_in.p_compound_freq_out := 1;
3852 END IF;
3853 p_rc_in.p_rate_in := p_transaction_rates(i);
3854 rate_conversion(p_rc_in, p_rc_out);
3855 p_mm_trans_rate_temp(i) := p_rc_out.p_rate_out;
3856 ELSE
3857 p_mm_trans_rate_temp(i) := p_transaction_rates(i);
3858 END IF;
3859
3860 IF (p_insert_or_update <> 'N') THEN
3861 -- fair value (reval rate=fra price=contract rate, in Act/365)
3862 QRM_MM_FORMULAS.fv_fra(p_pricing_models(i),
3863 p_market_data_set_temp(i), 'N', p_deal_subtypes(i),
3864 p_deal_ccys(i), p_interpolation_method, p_ref_date,
3865 p_start_dates(i), p_maturity_dates(i),
3866 p_face_values(i), p_transaction_rates(i),
3867 p_day_count_bases(i), p_side,
3868 p_mm_reval_rate_temp(i), p_fair_value_temp(i));
3869
3870 -- accrued interest
3871 p_accrued_interest_temp(i) := 0;
3872 p_accrued_interest_usd_temp(i) := 0;
3873 p_accrued_interest_sob_temp(i) := 0;
3874
3875 -- convert amounts to USD
3876 IF (p_deal_ccys(i)='USD') THEN
3877 p_fair_value_usd_temp(i) := p_fair_value_temp(i);
3878 ELSE
3879 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3880 p_deal_ccys(i), 'USD', p_fair_value_temp(i),
3881 p_fair_value_usd_temp(i));
3882 END IF;
3883 -- convert amounts to sob ccy
3884 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
3885 p_fair_value_sob_temp(i) := p_fair_value_temp(i);
3886 ELSE
3887 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3888 p_deal_ccys(i), p_sob_ccy_temp(i),
3889 p_fair_value_temp(i), p_fair_value_sob_temp(i));
3890 END IF;
3891
3892 -- clear table of previous value before reuse
3893 p_days.DELETE;
3894
3895 IF (p_ref_date <> p_end_dates(i)) THEN
3896 -- duration
3897 p_days.EXTEND;
3898 -- days to settle (start date)
3899 days_run_helper(p_ref_date, p_start_dates(i),
3900 p_day_count_bases(i), null, p_days(1), p_annual_basis);
3901 IF (g_proc_level>=g_debug_level) THEN
3902 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FRA days to start: '||p_days(1));
3903 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FRA annual basis: '||p_annual_basis);
3904 END IF;
3905 p_duration_temp(i) := QRM_MM_FORMULAS.duration(null,
3906 p_days, p_annual_basis);
3907
3908 -- convexity
3909 -- use fra price (reval rate) in deal day count basis
3910 IF (p_day_count_bases(i) <> p_mm_day_count_basis) THEN
3911 p_rc_in.p_start_date := p_start_dates(i);
3912 p_rc_in.p_end_date := p_maturity_dates(i);
3913 p_rc_in.p_day_count_basis_in := p_mm_day_count_basis;
3914 p_rc_in.p_day_count_basis_out := p_day_count_bases(i);
3915 IF (within_one_year(p_start_dates(i), p_maturity_dates(i))) THEN
3916 p_rc_in.p_rate_type_in := 'S';
3917 p_rc_in.p_rate_type_out := 'S';
3918 ELSE
3919 p_rc_in.p_rate_type_in := 'P';
3920 p_rc_in.p_rate_type_out := 'P';
3921 p_rc_in.p_compound_freq_in := 1;
3922 p_rc_in.p_compound_freq_out := 1;
3923 END IF;
3924 p_rc_in.p_rate_in := p_mm_reval_rate_temp(i);
3925 rate_conversion(p_rc_in, p_rc_out);
3926 p_fra_price := p_rc_out.p_rate_out;
3927 ELSE
3928 p_fra_price := p_mm_reval_rate_temp(i);
3929 END IF;
3930
3931 IF (g_proc_level>=g_debug_level) THEN
3932 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FRA price in deal DCB',p_fra_price);
3933 END IF;
3934 p_convexity_temp(i) := QRM_MM_FORMULAS.ni_fra_convexity(
3935 p_days(1), p_fra_price, p_annual_basis);
3936
3937 -- position bpv
3938 -- calculate fair value with fwd-fwd rate + 1bp
3939 QRM_MM_FORMULAS.fv_fra(p_pricing_models(i),
3940 p_market_data_set_temp(i), 'Y', p_deal_subtypes(i),
3941 p_deal_ccys(i), p_interpolation_method, p_ref_date,
3942 p_start_dates(i), p_maturity_dates(i),
3943 p_face_values(i), p_transaction_rates(i),
3944 p_day_count_bases(i), p_side, p_fra_price,
3945 p_fair_value_bp);
3946 IF (g_proc_level>=g_debug_level) THEN
3947 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FRA fv bpv: '||p_fair_value_bp);
3948 END IF;
3949 p_pos_bpv_temp(i) := p_fair_value_bp - p_fair_value_temp(i);
3950
3951 -- position bpv in usd ccy
3952 IF (p_deal_ccys(i)= 'USD') THEN
3953 p_pos_bpv_usd_temp(i) := p_pos_bpv_temp(i);
3954 ELSE
3955 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3956 p_deal_ccys(i), 'USD', p_pos_bpv_temp(i),
3957 p_pos_bpv_usd_temp(i));
3958 END IF;
3959 -- position bpv in sob ccy
3960 IF (p_deal_ccys(i)= p_sob_ccy_temp(i)) THEN
3961 p_pos_bpv_sob_temp(i) := p_pos_bpv_temp(i);
3962 ELSE
3963 convert_amounts(p_market_data_set_temp(i),p_ref_date,
3964 p_deal_ccys(i), p_sob_ccy_temp(i), p_pos_bpv_temp(i),
3965 p_pos_bpv_sob_temp(i));
3966 END IF;
3967 ELSE
3968 p_duration_temp(i) := 0;
3969 p_convexity_temp(i) := 0;
3970 p_pos_bpv_temp(i) := 0;
3971 p_pos_bpv_usd_temp(i) := 0;
3972 p_pos_bpv_sob_temp(i) := 0;
3973 END IF;
3974 p_upd_md_calc_date_temp(i) := p_ref_datetime;
3975 ELSE
3976 p_insert_or_update := 'U';
3977 p_upd_md_calc_date_temp(i) := p_deal_calculations.last_md_calc_date;
3978 p_fair_value_temp(i) := p_deal_calculations.fair_value;
3979 p_fair_value_usd_temp(i) := p_deal_calculations.fair_value_usd;
3980 p_fair_value_sob_temp(i) := p_deal_calculations.fair_value_sob;
3981 p_mm_reval_rate_temp(i) := p_deal_calculations.mm_reval_rate;
3982 p_accrued_interest_temp(i) := p_deal_calculations.accrued_interest;
3983 p_accrued_interest_usd_temp(i) := p_deal_calculations.accrued_interest_usd;
3984 p_accrued_interest_sob_temp(i) := p_deal_calculations.accrued_interest_sob;
3985 p_duration_temp(i) := p_deal_calculations.duration;
3986 p_convexity_temp(i) := p_deal_calculations.convexity;
3987 p_pos_bpv_temp(i) := p_deal_calculations.pos_bpv;
3988 p_pos_bpv_usd_temp(i) := p_deal_calculations.pos_bpv_usd;
3989 p_pos_bpv_sob_temp(i) := p_deal_calculations.pos_bpv_sob;
3990 END IF; -- end threshold check for fv/sens calculations
3991
3992 IF (g_proc_level>=g_debug_level) THEN
3993 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FRA deal no is: '||p_deal_nos(i));
3994 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FRA fair value is: '||p_fair_value_temp(i));
3995 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FRA reval rate ACT365 is: '||p_mm_reval_rate_temp(i));
3996 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'FRA trans rate ACT365 is: '||p_mm_trans_rate_temp(i));
3997 END IF;
3998
3999 ELSIF (p_deal_types(i)='IRO') THEN
4000 p_maturity_amount_temp(i) := p_face_values(i);
4001 p_gap_amount_temp(i) := get_signed_amount(p_face_values(i),
4002 p_deal_types(i), p_deal_subtypes(i), null);
4003
4004 -- convert amounts to USD
4005 IF (p_deal_ccys(i)='USD') THEN
4006 p_maturity_amount_usd_temp(i) := p_maturity_amount_temp(i);
4007 p_gap_amount_usd_temp(i) := p_gap_amount_temp(i);
4008 ELSE
4009 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4010 p_deal_ccys(i), 'USD', p_maturity_amount_temp(i),
4011 p_maturity_amount_usd_temp(i));
4012 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4013 p_deal_ccys(i), 'USD', p_gap_amount_temp(i),
4014 p_gap_amount_usd_temp(i));
4015 END IF;
4016 -- convert amounts to sob ccy
4017 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
4018 p_maturity_amount_sob_temp(i) := p_maturity_amount_temp(i);
4019 p_gap_amount_sob_temp(i) := p_gap_amount_temp(i);
4020 ELSE
4021 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4022 p_deal_ccys(i), p_sob_ccy_temp(i),
4023 p_maturity_amount_temp(i),
4024 p_maturity_amount_sob_temp(i));
4025 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4026 p_deal_ccys(i), p_sob_ccy_temp(i),
4027 p_gap_amount_temp(i), p_gap_amount_sob_temp(i));
4028 END IF;
4029
4030 -- transaction rate, converted to ACTUAL365
4031 IF (p_day_count_bases(i) <> p_mm_day_count_basis) THEN
4032 p_rc_in.p_start_date := p_start_dates(i);
4033 p_rc_in.p_end_date := p_maturity_dates(i);
4034 p_rc_in.p_day_count_basis_in := p_day_count_bases(i);
4035 p_rc_in.p_day_count_basis_out := p_mm_day_count_basis;
4036 IF (within_one_year(p_start_dates(i), p_maturity_dates(i)))
4037 THEN
4038 p_rc_in.p_rate_type_in := 'S';
4039 p_rc_in.p_rate_type_out := 'S';
4040 ELSE
4041 p_rc_in.p_rate_type_in := 'P';
4042 p_rc_in.p_rate_type_out := 'P';
4043 p_rc_in.p_compound_freq_in := 1;
4044 p_rc_in.p_compound_freq_out := 1;
4045 END IF;
4046 p_rc_in.p_rate_in := p_transaction_rates(i);
4047 IF (g_proc_level>=g_debug_level) THEN
4048 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO trans rate in: '||p_transaction_rates(i));
4049 END IF;
4050 rate_conversion(p_rc_in, p_rc_out);
4051 p_mm_trans_rate_temp(i) := p_rc_out.p_rate_out;
4052 ELSE
4053 p_mm_trans_rate_temp(i) := p_transaction_rates(i);
4054 END IF;
4055
4056 -- convert premium amount to USD
4057 IF (p_premium_ccys(i)='USD') THEN
4058 p_premium_amount_usd_temp(i) := p_premium_amounts(i);
4059 ELSE
4060 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4061 p_premium_ccys(i), 'USD', p_premium_amounts(i),
4062 p_premium_amount_usd_temp(i));
4063 END IF;
4064 -- convert premium amount into SOB ccy
4065 IF (p_premium_ccys(i)=p_sob_ccy_temp(i)) THEN
4066 p_premium_amount_sob_temp(i) := p_premium_amounts(i);
4067 ELSIF ('USD'=p_sob_ccy_temp(i)) THEN
4068 p_premium_amount_sob_temp(i) := p_premium_amount_usd_temp(i);
4069 ELSE
4070 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4071 p_premium_ccys(i), p_sob_ccy_temp(i),
4072 p_premium_amounts(i), p_premium_amount_sob_temp(i));
4073 END IF;
4074
4075 IF (p_insert_or_update <> 'N') THEN
4076 -- fair value, reval rate (= fwd fwd rate in Act/365)
4077 IF (g_proc_level>=g_debug_level) THEN
4078 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO deal ccy is: '||p_deal_ccys(i));
4079 END IF;
4080 QRM_MM_FORMULAS.fv_iro(p_pricing_models(i),
4081 p_market_data_set_temp(i), p_deal_subtypes(i),
4082 p_deal_ccys(i), p_interpolation_method, p_ref_date,
4083 p_start_dates(i), p_maturity_dates(i),
4084 p_transaction_rates(i), p_day_count_bases(i),
4085 p_face_values(i), p_side, p_mm_reval_rate_temp(i),
4086 p_fair_value_temp(i));
4087
4088 -- accrued interest
4089 p_accrued_interest_temp(i) := 0;
4090 p_accrued_interest_usd_temp(i) := 0;
4091 p_accrued_interest_sob_temp(i) := 0;
4092
4093 -- convert amounts to USD
4094 IF (p_deal_ccys(i)='USD') THEN
4095 p_fair_value_usd_temp(i) := p_fair_value_temp(i);
4096 ELSE
4097 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4098 p_deal_ccys(i), 'USD', p_fair_value_temp(i),
4099 p_fair_value_usd_temp(i));
4100 END IF;
4101 -- convert amounts to sob ccy
4102 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
4103 p_fair_value_sob_temp(i) := p_fair_value_temp(i);
4104 ELSE
4105 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4106 p_deal_ccys(i), p_sob_ccy_temp(i),
4107 p_fair_value_temp(i), p_fair_value_sob_temp(i));
4108 END IF;
4109
4110 -- SENSITIVITIES CALCULATIONS
4111 p_bo_in.p_principal := p_face_values(i);
4112 p_bo_in.p_strike_rate := p_transaction_rates(i);
4113 IF (within_one_year(p_start_dates(i),
4114 p_maturity_dates(i))) THEN
4115 p_bo_in.p_rate_type_strike := 'S';
4116 ELSE
4117 p_bo_in.p_rate_type_strike := 'P';
4118 p_bo_in.p_compound_freq_strike := 1;
4119 END IF;
4120 p_bo_in.p_day_count_basis_strike := p_day_count_bases(i);
4121 -- get spot rate from ref date to phy start date
4122 p_md_in.p_md_set_code := p_market_data_set_temp(i);
4123 p_md_in.p_source := 'C';
4124 p_md_in.p_indicator := 'Y';
4125 p_md_in.p_spot_date := p_ref_date;
4126 p_md_in.p_future_date := p_start_dates(i);
4127 p_md_in.p_ccy := p_deal_ccys(i);
4128 p_md_in.p_day_count_basis_out := p_day_count_bases(i);
4129 p_md_in.p_interpolation_method := p_interpolation_method;
4130 p_md_in.p_side := p_side;
4131 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
4132 p_bo_in.p_ir_short := p_md_out.p_md_out;
4133 IF (within_one_year(p_ref_date, p_start_dates(i))) THEN
4134 p_bo_in.p_rate_type_short := 'S';
4135 ELSE
4136 p_bo_in.p_rate_type_short := 'P';
4137 p_bo_in.p_compound_freq_short := 1;
4138 END IF;
4139 p_bo_in.p_day_count_basis_short := p_day_count_bases(i);
4140 -- get interest rate until maturity date
4141 p_md_in.p_future_date := p_maturity_dates(i);
4142 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
4143 p_bo_in.p_ir_long := p_md_out.p_md_out;
4144 IF (within_one_year(p_ref_date, p_maturity_dates(i))) THEN
4145 p_bo_in.p_rate_type_long := 'S';
4146 ELSE
4147 p_bo_in.p_rate_type_long := 'P';
4148 p_bo_in.p_compound_freq_long := 1;
4149 END IF;
4150 p_bo_in.p_day_count_basis_long := p_day_count_bases(i);
4151 p_bo_in.p_spot_date := p_ref_date;
4152 p_bo_in.p_start_date := p_start_dates(i);
4153 p_bo_in.p_maturity_date := p_maturity_dates(i);
4154 -- get volatility
4155 p_md_in.p_indicator := 'V';
4156 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
4157 p_volatility_temp(i) := p_md_out.p_md_out;
4158 IF (g_proc_level>=g_debug_level) THEN
4159 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO volatility is: '||p_volatility_temp(i));
4160 END IF;
4161
4162 p_bo_in.p_volatility := p_md_out.p_md_out;
4163 QRM_MM_FORMULAS.black_option_sens(p_bo_in, p_bo_out);
4164 IF (p_deal_subtypes(i) IN ('BCAP', 'SCAP')) THEN
4165 p_delta_temp(i) := p_bo_out.p_delta_cap;
4166 p_theta_temp(i) := p_bo_out.p_theta_cap;
4167 p_rho_temp(i) := p_bo_out.p_rho_cap;
4168 ELSE
4169 p_delta_temp(i) := p_bo_out.p_delta_floor;
4170 p_theta_temp(i) := p_bo_out.p_theta_floor;
4171 p_rho_temp(i) := p_bo_out.p_rho_floor;
4172 END IF;
4173 p_gamma_temp(i) := p_bo_out.p_gamma;
4174 p_vega_temp(i) := p_bo_out.p_vega;
4175
4176 -- position delta in deal ccy
4177 p_pos_delta_temp(i) := p_delta_temp(i) * p_face_values(i);
4178 -- position delta in usd ccy
4179 IF (p_deal_ccys(i)='USD') THEN
4180 p_pos_delta_usd_temp(i) := p_pos_delta_temp(i);
4181 ELSE
4182 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4183 p_deal_ccys(i), 'USD', p_pos_delta_temp(i),
4184 p_pos_delta_usd_temp(i));
4185 END IF;
4186 -- position delta in sob ccy
4187 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
4188 p_pos_delta_sob_temp(i) := p_pos_delta_temp(i);
4189 ELSE
4190 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4191 p_deal_ccys(i), p_sob_ccy_temp(i),
4192 p_pos_delta_temp(i), p_pos_delta_sob_temp(i));
4193 END IF;
4194
4195 -- position rho in deal ccy
4196 p_pos_rho_temp(i) := p_rho_temp(i) * p_face_values(i);
4197 -- position rho in usd ccy
4198 IF (p_deal_ccys(i)='USD') THEN
4199 p_pos_rho_usd_temp(i) := p_pos_rho_temp(i);
4200 ELSE
4201 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4202 p_deal_ccys(i), 'USD', p_pos_rho_temp(i),
4203 p_pos_rho_usd_temp(i));
4204 END IF;
4205 -- position rho in sob ccy
4206 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
4207 p_pos_rho_sob_temp(i) := p_pos_rho_temp(i);
4208 ELSE
4209 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4210 p_deal_ccys(i), p_sob_ccy_temp(i),
4211 p_pos_rho_temp(i), p_pos_rho_sob_temp(i));
4212 END IF;
4213
4214 -- position gamma in deal ccy
4215 p_pos_gamma_temp(i) := p_gamma_temp(i) * p_face_values(i);
4216 -- position gamma in usd ccy
4217 IF (p_deal_ccys(i)='USD') THEN
4218 p_pos_gamma_usd_temp(i) := p_pos_gamma_temp(i);
4219 ELSE
4220 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4221 p_deal_ccys(i), 'USD', p_pos_gamma_temp(i),
4222 p_pos_gamma_usd_temp(i));
4223 END IF;
4224 -- position gamma in sob ccy
4225 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
4226 p_pos_gamma_sob_temp(i) := p_pos_gamma_temp(i);
4227 ELSE
4228 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4229 p_deal_ccys(i), p_sob_ccy_temp(i),
4230 p_pos_gamma_temp(i), p_pos_gamma_sob_temp(i));
4231 END IF;
4232
4233 -- position theta in deal ccy
4234 p_pos_theta_temp(i) := p_theta_temp(i) * p_face_values(i);
4235 -- position theta in usd ccy
4236 IF (p_deal_ccys(i)='USD') THEN
4237 p_pos_theta_usd_temp(i) := p_pos_theta_temp(i);
4238 ELSE
4239 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4240 p_deal_ccys(i), 'USD', p_pos_theta_temp(i),
4241 p_pos_theta_usd_temp(i));
4242 END IF;
4243 -- position theta in sob ccy
4244 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
4245 p_pos_theta_sob_temp(i) := p_pos_theta_temp(i);
4246 ELSE
4247 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4248 p_deal_ccys(i), p_sob_ccy_temp(i),
4249 p_pos_theta_temp(i), p_pos_theta_sob_temp(i));
4250 END IF;
4251
4252 -- position vega in deal ccy
4253 p_pos_vega_temp(i) := p_vega_temp(i) * p_face_values(i);
4254 -- position vega in usd ccy
4255 IF (p_deal_ccys(i)='USD') THEN
4256 p_pos_vega_usd_temp(i) := p_pos_vega_temp(i);
4257 ELSE
4258 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4259 p_deal_ccys(i), 'USD', p_pos_vega_temp(i),
4260 p_pos_vega_usd_temp(i));
4261 END IF;
4262 -- position vega in sob ccy
4263 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
4264 p_pos_vega_sob_temp(i) := p_pos_vega_temp(i);
4265 ELSE
4266 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4267 p_deal_ccys(i), p_sob_ccy_temp(i),
4268 p_pos_vega_temp(i), p_pos_vega_sob_temp(i));
4269 END IF;
4270 p_upd_md_calc_date_temp(i) := p_ref_datetime;
4271 ELSE
4272 p_insert_or_update := 'U';
4273 p_upd_md_calc_date_temp(i) := p_deal_calculations.last_md_calc_date;
4274 p_mm_reval_rate_temp(i) := p_deal_calculations.mm_reval_rate;
4275 p_fair_value_temp(i) := p_deal_calculations.fair_value;
4276 p_fair_value_usd_temp(i) := p_deal_calculations.fair_value_usd;
4277 p_fair_value_sob_temp(i) := p_deal_calculations.fair_value_sob;
4278 p_accrued_interest_temp(i) := p_deal_calculations.accrued_interest;
4279 p_accrued_interest_usd_temp(i) := p_deal_calculations.accrued_interest_usd;
4280 p_accrued_interest_sob_temp(i) := p_deal_calculations.accrued_interest_sob;
4281 p_volatility_temp(i) := p_deal_calculations.volatility;
4282 p_delta_temp(i) := p_deal_calculations.delta;
4283 p_theta_temp(i) := p_deal_calculations.theta;
4284 p_rho_temp(i) := p_deal_calculations.rho;
4285 p_gamma_temp(i) := p_deal_calculations.gamma;
4286 p_vega_temp(i) := p_deal_calculations.vega;
4287 p_pos_delta_temp(i) := p_deal_calculations.pos_delta;
4288 p_pos_delta_usd_temp(i) := p_deal_calculations.pos_delta_usd;
4289 p_pos_delta_sob_temp(i) := p_deal_calculations.pos_delta_sob;
4290 p_pos_theta_temp(i) := p_deal_calculations.pos_theta;
4291 p_pos_theta_usd_temp(i) := p_deal_calculations.pos_theta_usd;
4292 p_pos_theta_sob_temp(i) := p_deal_calculations.pos_theta_sob;
4293 p_pos_rho_temp(i) := p_deal_calculations.pos_rho;
4294 p_pos_rho_usd_temp(i) := p_deal_calculations.pos_rho_usd;
4295 p_pos_rho_sob_temp(i) := p_deal_calculations.pos_rho_sob;
4296 p_pos_gamma_temp(i) := p_deal_calculations.pos_gamma;
4297 p_pos_gamma_usd_temp(i) := p_deal_calculations.pos_gamma_usd;
4298 p_pos_gamma_sob_temp(i) := p_deal_calculations.pos_gamma_sob;
4299 p_pos_vega_temp(i) := p_deal_calculations.pos_vega;
4300 p_pos_vega_usd_temp(i) := p_deal_calculations.pos_vega_usd;
4301 p_pos_vega_sob_temp(i) := p_deal_calculations.pos_vega_sob;
4302 END IF; -- check threshold check for fv/sens calculations
4303
4304 IF (g_proc_level>=g_debug_level) THEN
4305 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO deal no: '||p_deal_nos(i));
4306 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO mm reval rate: '||p_mm_reval_rate_temp(i));
4307 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO fair value is: '||p_fair_value_temp(i));
4308 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO delta is: '||p_delta_temp(i));
4309 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO theta is: '||p_theta_temp(i));
4310 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO rho is: '||p_rho_for_temp(i));
4311 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO gamma is: '||p_gamma_temp(i));
4312 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IRO vega is: '||p_vega_temp(i));
4313 END IF;
4314
4315 ELSIF (p_deal_types(i)='BDO') THEN
4316 p_maturity_amount_temp(i) := p_face_values(i);
4317 -- gap amount
4318 p_gap_amount_temp(i) := p_face_values(i)*p_transaction_rates(i)/100;
4319 p_gap_amount_temp(i) := get_signed_amount(p_gap_amount_temp(i),
4320 p_deal_types(i), p_deal_subtypes(i), null);
4321
4322 -- convert amounts to USD
4323 IF (p_deal_ccys(i)='USD') THEN
4324 p_maturity_amount_usd_temp(i) := p_maturity_amount_temp(i);
4325 p_gap_amount_usd_temp(i) := p_gap_amount_temp(i);
4326 ELSE
4327 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4328 p_deal_ccys(i), 'USD', p_maturity_amount_temp(i),
4329 p_maturity_amount_usd_temp(i));
4330 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4331 p_deal_ccys(i), 'USD', p_gap_amount_temp(i),
4332 p_gap_amount_usd_temp(i));
4333 END IF;
4334 -- convert amounts to sob ccy
4335 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
4336 p_maturity_amount_sob_temp(i) := p_maturity_amount_temp(i);
4337 p_gap_amount_sob_temp(i) := p_gap_amount_temp(i);
4338 ELSE
4339 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4340 p_deal_ccys(i), p_sob_ccy_temp(i),
4341 p_maturity_amount_temp(i),
4342 p_maturity_amount_sob_temp(i));
4343 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4344 p_deal_ccys(i), p_sob_ccy_temp(i),
4345 p_gap_amount_temp(i), p_gap_amount_sob_temp(i));
4346 END IF;
4347
4348 p_accrued_interest_temp(i) := 0;
4349 p_accrued_interest_usd_temp(i) := 0;
4350 p_accrued_interest_sob_temp(i) := 0;
4351
4352 -- convert premium amount to USD
4353 IF (p_premium_ccys(i)='USD') THEN
4354 p_premium_amount_usd_temp(i) := p_premium_amounts(i);
4355 ELSE
4356 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4357 p_premium_ccys(i), 'USD', p_premium_amounts(i),
4358 p_premium_amount_usd_temp(i));
4359 END IF;
4360 -- convert premium amount into SOB ccy
4361 IF (p_premium_ccys(i)=p_sob_ccy_temp(i)) THEN
4362 p_premium_amount_sob_temp(i) := p_premium_amounts(i);
4363 ELSIF ('USD'=p_sob_ccy_temp(i)) THEN
4364 p_premium_amount_sob_temp(i) := p_premium_amount_usd_temp(i);
4365 ELSE
4366 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4367 p_premium_ccys(i), p_sob_ccy_temp(i),
4368 p_premium_amounts(i), p_premium_amount_sob_temp(i));
4369 END IF;
4370
4371
4372 OPEN get_bond_code(p_bond_issues(i));
4373 FETCH get_bond_code INTO p_bond_code, p_bond_calc_type,
4374 p_day_count_bases(i), p_bond_issue_start;
4375 IF (get_bond_code%NOTFOUND) THEN
4376 -- settings bond code to null will cause
4377 -- cause api's to throw no data found exception
4378 IF (g_proc_level>=g_debug_level) THEN
4379 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'ric code does not exist');
4380 END IF;
4381 p_bond_code := null;
4382 END IF;
4383 CLOSE get_bond_code;
4384
4385 -- reval rate: bond clean price on ref date(no margin for BDO)
4386 p_md_in.p_md_set_code :=p_market_data_set_temp(i);
4387 p_md_in.p_source := 'C';
4388 p_md_in.p_indicator := 'B';
4389 p_md_in.p_spot_date := p_ref_date;
4390 p_md_in.p_future_date := NULL;
4391 p_md_in.p_ccy := p_deal_ccys(i);
4392 p_md_in.p_day_count_basis_out := p_mm_day_count_basis;
4393 p_md_in.p_interpolation_method := 'DEFAULT';
4394 IF (p_deal_subtypes(i) IN ('BCAP', 'BFLOOR')) THEN
4395 p_md_in.p_side := 'B';
4396 ELSE
4397 p_md_in.p_side := 'A';
4398 END IF;
4399 p_md_in.p_batch_id := NULL;
4400 p_md_in.p_bond_code := p_bond_code;
4401 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
4402 p_mm_reval_rate_temp(i) := p_md_out.p_md_out;
4403
4404 -- transaction rate = strike price
4405 -- not interest rate, no need to convert TO ACTUAL365
4406 p_mm_trans_rate_temp(i) := p_transaction_rates(i);
4407
4408 ELSIF (p_deal_types(i)='SWPTN') THEN
4409 p_maturity_amount_temp(i) := p_face_values(i);
4410
4411 -- gap amount
4412 p_gap_amount_temp(i) := get_signed_amount(p_face_values(i),
4413 p_deal_types(i), p_deal_subtypes(i), p_coupon_actions(i));
4414
4415 -- convert amounts to USD
4416 IF (p_deal_ccys(i)='USD') THEN
4417 p_maturity_amount_usd_temp(i) := p_maturity_amount_temp(i);
4418 p_gap_amount_usd_temp(i) := p_gap_amount_temp(i);
4419 ELSE
4420 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4421 p_deal_ccys(i), 'USD', p_maturity_amount_temp(i),
4422 p_maturity_amount_usd_temp(i));
4423 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4424 p_deal_ccys(i), 'USD', p_gap_amount_temp(i),
4425 p_gap_amount_usd_temp(i));
4426 END IF;
4427 -- convert amounts to sob ccy
4428 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
4429 p_maturity_amount_sob_temp(i) := p_maturity_amount_temp(i);
4430 p_gap_amount_sob_temp(i) := p_gap_amount_temp(i);
4431 ELSE
4432 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4433 p_deal_ccys(i), p_sob_ccy_temp(i),
4434 p_maturity_amount_temp(i),
4435 p_maturity_amount_sob_temp(i));
4436 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4437 p_deal_ccys(i), p_sob_ccy_temp(i),
4438 p_gap_amount_temp(i), p_gap_amount_sob_temp(i));
4439 END IF;
4440
4441 p_accrued_interest_temp(i) := 0;
4442 p_accrued_interest_usd_temp(i) := 0;
4443 p_accrued_interest_sob_temp(i) := 0;
4444
4445 -- convert premium amount to USD
4446 IF (p_premium_ccys(i)='USD') THEN
4447 p_premium_amount_usd_temp(i) := p_premium_amounts(i);
4448 ELSE
4449 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4450 p_premium_ccys(i), 'USD', p_premium_amounts(i),
4451 p_premium_amount_usd_temp(i));
4452 END IF;
4453 -- convert premium amount into SOB ccy
4454 IF (p_premium_ccys(i)=p_sob_ccy_temp(i)) THEN
4455 p_premium_amount_sob_temp(i) := p_premium_amounts(i);
4456 ELSIF ('USD'=p_sob_ccy_temp(i)) THEN
4457 p_premium_amount_sob_temp(i) := p_premium_amount_usd_temp(i);
4458 ELSE
4459 convert_amounts(p_market_data_set_temp(i), p_ref_date,
4460 p_premium_ccys(i), p_sob_ccy_temp(i),
4461 p_premium_amounts(i), p_premium_amount_sob_temp(i));
4462 END IF;
4463
4464 IF (p_day_count_bases(i) <> p_mm_day_count_basis) THEN
4465 -- transaction rate, converted to Act/365
4466 p_rc_in.p_start_date := p_start_dates(i);
4467 p_rc_in.p_end_date := p_maturity_dates(i);
4468 p_rc_in.p_day_count_basis_in := p_day_count_bases(i);
4469 p_rc_in.p_day_count_basis_out := p_mm_day_count_basis;
4470 IF (within_one_year(p_start_dates(i),
4471 p_maturity_dates(i))) THEN
4472 p_rc_in.p_rate_type_in := 'S';
4473 p_rc_in.p_rate_type_out := 'S';
4474 ELSE
4475 p_rc_in.p_rate_type_in := 'P';
4476 p_rc_in.p_rate_type_out := 'P';
4477 p_rc_in.p_compound_freq_in := 1;
4478 p_rc_in.p_compound_freq_out := 1;
4479 END IF;
4480 p_rc_in.p_rate_in := p_transaction_rates(i);
4481 rate_conversion(p_rc_in, p_rc_out);
4482 p_mm_trans_rate_temp(i) := p_rc_out.p_rate_out;
4483 ELSE
4484 p_mm_trans_rate_temp(i) := p_transaction_rates(i);
4485 END IF;
4486
4487 ELSIF (p_deal_types(i)='ONC') THEN
4488 p_maturity_amount_temp(i) := get_signed_amount(
4489 p_start_amounts(i), p_deal_types(i),
4490 p_deal_subtypes(i), null);
4491 p_gap_amount_temp(i) := p_maturity_amount_temp(i);
4492
4493 -- convert amounts to USD
4494 IF (p_deal_ccys(i)='USD') THEN
4495 p_maturity_amount_usd_temp(i) := p_maturity_amount_temp(i);
4496 p_gap_amount_usd_temp(i) := p_gap_amount_temp(i);
4497 ELSE
4498 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4499 p_deal_ccys(i), 'USD', p_maturity_amount_temp(i),
4500 p_maturity_amount_usd_temp(i));
4501 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4502 p_deal_ccys(i), 'USD', p_gap_amount_temp(i),
4503 p_gap_amount_usd_temp(i));
4504 END IF;
4505 -- convert amounts to sob ccy
4506 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
4507 p_maturity_amount_sob_temp(i) := p_maturity_amount_temp(i);
4508 p_gap_amount_sob_temp(i) := p_gap_amount_temp(i);
4509 ELSE
4510 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4511 p_deal_ccys(i), p_sob_ccy_temp(i),
4512 p_maturity_amount_temp(i),
4513 p_maturity_amount_sob_temp(i));
4514 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4515 p_deal_ccys(i), p_sob_ccy_temp(i),
4516 p_gap_amount_temp(i), p_gap_amount_sob_temp(i));
4517 END IF;
4518
4519 -- get trans rate
4520 IF (p_day_count_bases(i) <> p_mm_day_count_basis) THEN
4521 -- transaction rate, converted to Act/365
4522 -- calculated from settlement date to today
4523 p_rc_in.p_start_date := p_start_dates(i);
4524 --bug 2385017
4525 IF (p_start_dates(i)>p_ref_date) THEN
4526 p_rc_in.p_end_date := p_start_dates(i)+1;
4527 ELSE
4528 p_rc_in.p_end_date := p_ref_date;
4529 END IF;
4530 p_rc_in.p_day_count_basis_in := p_day_count_bases(i);
4531 p_rc_in.p_day_count_basis_out := p_mm_day_count_basis;
4532 IF (within_one_year(p_start_dates(i),
4533 p_end_dates(i))) THEN
4534 p_rc_in.p_rate_type_in := 'S';
4535 p_rc_in.p_rate_type_out := 'S';
4536 ELSE
4537 p_rc_in.p_rate_type_in := 'P';
4538 p_rc_in.p_rate_type_out := 'P';
4539 p_rc_in.p_compound_freq_in := 1;
4540 p_rc_in.p_compound_freq_out := 1;
4541 END IF;
4542 p_rc_in.p_rate_in := p_transaction_rates(i);
4543 rate_conversion(p_rc_in, p_rc_out);
4544 p_mm_trans_rate_temp(i) := p_rc_out.p_rate_out;
4545 ELSE
4546 p_mm_trans_rate_temp(i) := p_transaction_rates(i);
4547 END IF;
4548
4549 IF (p_insert_or_update <> 'N') THEN
4550 -- accrued interest
4551 p_accrued_interest_temp(i) :=
4552 QRM_MM_FORMULAS.calculate_accrued_interest('R',
4553 p_ref_date, p_start_dates(i),
4554 p_maturity_dates(i), p_transaction_rates(i),
4555 p_interests(i), p_accum_int_bfs(i),
4556 p_face_values(i), p_no_of_days(i),
4557 p_day_count_bases(i), p_accum_int_actions(i));
4558 IF (g_proc_level>=g_debug_level) THEN
4559 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'onc accrued int: '||p_accrued_interest_temp(i));
4560 END IF;
4561 if (nvl(p_prepaid_interests(i),'N')='Y' and p_ref_date >= p_start_dates(i)) then
4562 p_accrued_interest_temp(i) := p_accrued_interest_temp(i) - nvl(p_interests(i),0);
4563 end if;
4564 p_accrued_interest_temp(i) := get_signed_amount(
4565 p_accrued_interest_temp(i), p_deal_types(i),
4566 p_deal_subtypes(i), null);
4567
4568 -- bug 2914370: for prepaid ONC fair value = maturity amount only;
4569 if (nvl(p_prepaid_interests(i),'N')='Y') then
4570 p_fair_value_temp(i) := p_maturity_amount_temp(i);
4571 else
4572 -- fair value: principal amt + accrued interest
4573 p_fair_value_temp(i) := p_maturity_amount_temp(i) +
4574 p_accrued_interest_temp(i);
4575 end if;
4576
4577 -- convert fair value amounts to USD
4578 IF (p_deal_ccys(i)='USD') THEN
4579 p_fair_value_usd_temp(i) := p_fair_value_temp(i);
4580 p_accrued_interest_usd_temp(i) := p_accrued_interest_temp(i);
4581 ELSE
4582 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4583 p_deal_ccys(i), 'USD', p_fair_value_temp(i),
4584 p_fair_value_usd_temp(i));
4585 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4586 p_deal_ccys(i), 'USD', p_accrued_interest_temp(i),
4587 p_accrued_interest_usd_temp(i));
4588 END IF;
4589 -- convert fair value amounts to sob ccy
4590 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
4591 p_fair_value_sob_temp(i) := p_fair_value_temp(i);
4592 p_accrued_interest_sob_temp(i) := p_accrued_interest_temp(i);
4593 ELSE
4594 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4595 p_deal_ccys(i), p_sob_ccy_temp(i),
4596 p_fair_value_temp(i), p_fair_value_sob_temp(i));
4597 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4598 p_deal_ccys(i), p_sob_ccy_temp(i),
4599 p_accrued_interest_temp(i),
4600 p_accrued_interest_sob_temp(i));
4601 END IF;
4602 p_upd_md_calc_date_temp(i) := p_ref_datetime;
4603 ELSE
4604 p_insert_or_update := 'U';
4605 p_upd_md_calc_date_temp(i) := p_deal_calculations.last_md_calc_date;
4606 p_fair_value_temp(i) := p_deal_calculations.fair_value;
4607 p_fair_value_usd_temp(i) := p_deal_calculations.fair_value_usd;
4608 p_fair_value_sob_temp(i) := p_deal_calculations.fair_value_sob;
4609 p_accrued_interest_temp(i) := p_deal_calculations.accrued_interest;
4610 p_accrued_interest_usd_temp(i) := p_deal_calculations.accrued_interest_usd;
4611 p_accrued_interest_sob_temp(i) := p_deal_calculations.accrued_interest_sob;
4612 END IF; -- end threshold check for fv/sens calculations
4613
4614 ELSIF (p_deal_types(i)='IG') THEN
4615 -- get day count basis
4616 OPEN get_ig_day_count_basis(p_deal_ccys(i));
4617 FETCH get_ig_day_count_basis INTO p_day_count_bases(i);
4618 CLOSE get_ig_day_count_basis;
4619
4620 p_maturity_amount_temp(i) := p_face_values(i);
4621 p_gap_amount_temp(i) := p_face_values(i);
4622
4623 -- convert amounts to USD
4624 IF (p_deal_ccys(i)='USD') THEN
4625 p_maturity_amount_usd_temp(i) := p_maturity_amount_temp(i);
4626 p_gap_amount_usd_temp(i) := p_gap_amount_temp(i);
4627 ELSE
4628 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4629 p_deal_ccys(i), 'USD', p_maturity_amount_temp(i),
4630 p_maturity_amount_usd_temp(i));
4631 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4632 p_deal_ccys(i), 'USD', p_gap_amount_temp(i),
4633 p_gap_amount_usd_temp(i));
4634 END IF;
4635 -- convert amounts to sob ccy
4636 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
4637 p_maturity_amount_sob_temp(i) := p_maturity_amount_temp(i);
4638 p_gap_amount_sob_temp(i) := p_gap_amount_temp(i);
4639 ELSE
4640 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4641 p_deal_ccys(i), p_sob_ccy_temp(i),
4642 p_maturity_amount_temp(i),
4643 p_maturity_amount_sob_temp(i));
4644 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4645 p_deal_ccys(i), p_sob_ccy_temp(i),
4646 p_gap_amount_temp(i), p_gap_amount_sob_temp(i));
4647 END IF;
4648
4649 -- for IG, 'current' transaction is max(transaction_no)
4650 IF (p_day_count_bases(i) <> p_mm_day_count_basis) THEN
4651 -- transaction rate, converted to Act/365
4652 p_rc_in.p_start_date := p_start_dates(i);
4653 p_rc_in.p_end_date := p_end_dates(i);
4654 p_rc_in.p_day_count_basis_in := p_day_count_bases(i);
4655 p_rc_in.p_day_count_basis_out := p_mm_day_count_basis;
4656 IF (within_one_year(p_start_dates(i),
4657 p_maturity_dates(i))) THEN
4658 p_rc_in.p_rate_type_in := 'S';
4659 p_rc_in.p_rate_type_out := 'S';
4660 ELSE
4661 p_rc_in.p_rate_type_in := 'P';
4662 p_rc_in.p_rate_type_out := 'P';
4663 p_rc_in.p_compound_freq_in := 1;
4664 p_rc_in.p_compound_freq_out := 1;
4665 END IF;
4666 p_rc_in.p_rate_in := p_transaction_rates(i);
4667 rate_conversion(p_rc_in, p_rc_out);
4668 p_mm_trans_rate_temp(i) := p_rc_out.p_rate_out;
4669 ELSE
4670 p_mm_trans_rate_temp(i) := p_transaction_rates(i);
4671 END IF;
4672
4673 IF (p_insert_or_update <> 'N') THEN
4674 -- accrued interest
4675 IF (g_proc_level>=g_debug_level) THEN
4676 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IG DCB: '||p_day_count_bases(i));
4677 END IF;
4678 days_run_helper(p_start_dates(i), p_ref_date,
4679 p_day_count_bases(i), NULL, p_day_count, p_annual_basis);
4680
4681 -- sum of accrued interest from previous transaction
4682 -- and accrual of this transaction
4683 -- no need to modify sign of accrued int/ fair value
4684 -- because balance saved in db already carries sign
4685 IF (g_proc_level>=g_debug_level) THEN
4686 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'prev accrued int: '||p_accrued_interests(i));
4687 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'balance: '||p_face_values(i));
4688 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'int rate: '||p_transaction_rates(i));
4689 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'days accrued: '||p_day_count);
4690 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'annual basis: '||p_annual_basis);
4691 END IF;
4692 p_accrued_interest_temp(i) := p_accrued_interests(i) +
4693 p_face_values(i)*p_transaction_rates(i)*p_day_count/
4694 (100*p_annual_basis);
4695 -- fair value
4696 p_fair_value_temp(i) := p_face_values(i) + p_accrued_interest_temp(i);
4697 -- convert amounts to USD
4698 IF (p_deal_ccys(i)='USD') THEN
4699 p_fair_value_usd_temp(i) := p_fair_value_temp(i);
4700 p_accrued_interest_usd_temp(i) := p_accrued_interest_temp(i);
4701 ELSE
4702 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4703 p_deal_ccys(i), 'USD', p_fair_value_temp(i),
4704 p_fair_value_usd_temp(i));
4705 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4706 p_deal_ccys(i), 'USD', p_accrued_interest_temp(i),
4707 p_accrued_interest_usd_temp(i));
4708 END IF;
4709 -- convert amounts to sob ccy
4710 IF (p_deal_ccys(i)=p_sob_ccy_temp(i)) THEN
4711 p_fair_value_sob_temp(i) := p_fair_value_temp(i);
4712 p_accrued_interest_sob_temp(i) := p_accrued_interest_temp(i);
4713 ELSE
4714 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4715 p_deal_ccys(i), p_sob_ccy_temp(i),
4716 p_fair_value_temp(i), p_fair_value_sob_temp(i));
4717 convert_amounts(p_market_data_set_temp(i),p_ref_date,
4718 p_deal_ccys(i), p_sob_ccy_temp(i),
4719 p_accrued_interest_temp(i),
4720 p_accrued_interest_sob_temp(i));
4721 END IF;
4722 p_upd_md_calc_date_temp(i) := p_ref_datetime;
4723 ELSE
4724 p_insert_or_update := 'U';
4725 p_upd_md_calc_date_temp(i) := p_deal_calculations.last_md_calc_date;
4726 p_fair_value_temp(i) := p_deal_calculations.fair_value;
4727 p_fair_value_usd_temp(i) := p_deal_calculations.fair_value_usd;
4728 p_fair_value_sob_temp(i) := p_deal_calculations.fair_value_sob;
4729 p_accrued_interest_temp(i) := p_deal_calculations.accrued_interest;
4730 p_accrued_interest_usd_temp(i) := p_deal_calculations.accrued_interest_usd;
4731 p_accrued_interest_sob_temp(i) := p_deal_calculations.accrued_interest_sob;
4732 END IF; -- end threshold check for fv/sens calculations
4733
4734 END IF; -- end if fxo or fx
4735 IF (g_proc_level>=g_debug_level) THEN
4736 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'PAST DEAL SWITCH LOOP');
4737 END IF;
4738
4739
4740
4741 ----- Place attributes in insert/update array ----------------
4742 IF(p_insert_or_update='I') THEN -- insert deal
4743 p_insert_counter := p_insert_counter + 1;
4744 p_seq_nos.EXTEND;
4745 OPEN get_sequence_no;
4746 FETCH get_sequence_no INTO p_seq_nos(p_insert_counter);
4747 CLOSE get_sequence_no;
4748 p_deal_no_insert.EXTEND;
4749 p_deal_no_insert(p_insert_counter):=p_deal_nos(i);
4750 p_company_code_insert.EXTEND;
4751 p_company_code_insert(p_insert_counter):=p_company_code_temp(i);
4752 p_transaction_no_insert.EXTEND;
4753 p_transaction_no_insert(p_insert_counter):=p_transaction_nos(i);
4754 p_market_data_set_insert.EXTEND;
4755 p_market_data_set_insert(p_insert_counter):=p_market_data_set_temp(i);
4756 p_deal_ccy_insert.EXTEND;
4757 p_deal_ccy_insert(p_insert_counter):=p_deal_ccy_temp(i);
4758 p_sob_ccy_insert.EXTEND;
4759 p_sob_ccy_insert(p_insert_counter):=p_sob_ccy_temp(i);
4760 p_base_ccy_amount_usd_insert.EXTEND;
4761 p_base_ccy_amount_usd_insert(p_insert_counter):=p_base_ccy_amount_usd_temp(i);
4762 p_base_ccy_amount_sob_insert.EXTEND;
4763 p_base_ccy_amount_sob_insert(p_insert_counter):=p_base_ccy_amount_sob_temp(i);
4764 p_contra_ccy_amount_usd_insert.EXTEND;
4765 p_contra_ccy_amount_usd_insert(p_insert_counter):=p_contra_ccy_amount_usd_temp(i);
4766 p_contra_ccy_amount_sob_insert.EXTEND;
4767 p_contra_ccy_amount_sob_insert(p_insert_counter):=p_contra_ccy_amount_sob_temp(i);
4768 p_foreign_amount_usd_insert.EXTEND;
4769 p_foreign_amount_usd_insert(p_insert_counter):=p_foreign_amount_usd_temp(i);
4770 p_foreign_amount_sob_insert.EXTEND;
4771 p_foreign_amount_sob_insert(p_insert_counter):=p_foreign_amount_sob_temp(i);
4772 p_domestic_amount_usd_insert.EXTEND;
4773 p_domestic_amount_usd_insert(p_insert_counter):=p_domestic_amount_usd_temp(i);
4774 p_domestic_amount_sob_insert.EXTEND;
4775 p_domestic_amount_sob_insert(p_insert_counter):=p_domestic_amount_sob_temp(i);
4776 p_buy_amount_usd_insert.EXTEND;
4777 p_buy_amount_usd_insert(p_insert_counter):=p_buy_amount_usd_temp(i);
4778 p_buy_amount_sob_insert.EXTEND;
4779 p_buy_amount_sob_insert(p_insert_counter):=p_buy_amount_sob_temp(i);
4780 p_sell_amount_usd_insert.EXTEND;
4781 p_sell_amount_usd_insert(p_insert_counter):=p_sell_amount_usd_temp(i);
4782 p_sell_amount_sob_insert.EXTEND;
4783 p_sell_amount_sob_insert(p_insert_counter):=p_sell_amount_sob_temp(i);
4784 p_days_insert.EXTEND;
4785 p_days_insert(p_insert_counter):=p_days_temp(i);
4786 p_fx_reval_rate_insert.EXTEND;
4787 p_fx_reval_rate_insert(p_insert_counter):=p_fx_reval_rate_temp(i);
4788 p_reval_price_insert.EXTEND;
4789 p_reval_price_insert(p_insert_counter):=p_reval_price_temp(i);
4790
4791 p_reval_price_usd_insert.EXTEND;
4792 p_reval_price_usd_insert(p_insert_counter):=p_reval_price_usd_temp(i);
4793
4794 p_reval_price_sob_insert.EXTEND;
4795 p_reval_price_sob_insert(p_insert_counter):=p_reval_price_sob_temp(i);
4796
4797 p_mm_reval_rate_insert.EXTEND;
4798 p_mm_reval_rate_insert(p_insert_counter):=p_mm_reval_rate_temp(i);
4799 p_fx_trans_rate_insert.EXTEND;
4800 p_fx_trans_rate_insert(p_insert_counter):=p_fx_trans_rate_temp(i);
4801 p_trans_price_insert.EXTEND;
4802 p_trans_price_insert(p_insert_counter):=p_trans_price_temp(i);
4803
4804 p_trans_price_usd_insert.EXTEND;
4805 p_trans_price_usd_insert(p_insert_counter):=p_trans_price_usd_temp(i);
4806
4807 p_trans_price_sob_insert.EXTEND;
4808 p_trans_price_sob_insert(p_insert_counter):=p_trans_price_sob_temp(i);
4809
4810 p_mm_trans_rate_insert.EXTEND;
4811 p_mm_trans_rate_insert(p_insert_counter):=p_mm_trans_rate_temp(i);
4812 p_fair_value_insert.EXTEND;
4813 p_fair_value_insert(p_insert_counter):=p_fair_value_temp(i);
4814 p_fair_value_usd_insert.EXTEND;
4815 p_fair_value_usd_insert(p_insert_counter):=p_fair_value_usd_temp(i);
4816 p_fair_value_sob_insert.EXTEND;
4817 p_fair_value_sob_insert(p_insert_counter):=p_fair_value_sob_temp(i);
4818 p_gap_amount_insert.EXTEND;
4819 p_gap_amount_insert(p_insert_counter):=p_gap_amount_temp(i);
4820 p_gap_amount_usd_insert.EXTEND;
4821 p_gap_amount_usd_insert(p_insert_counter):=p_gap_amount_usd_temp(i);
4822 p_gap_amount_sob_insert.EXTEND;
4823 p_gap_amount_sob_insert(p_insert_counter):=p_gap_amount_sob_temp(i);
4824 p_maturity_amount_insert.EXTEND;
4825 p_maturity_amount_insert(p_insert_counter):=p_maturity_amount_temp(i);
4826 p_maturity_amount_usd_insert.EXTEND;
4827 p_maturity_amount_usd_insert(p_insert_counter):=p_maturity_amount_usd_temp(i);
4828 p_maturity_amount_sob_insert.EXTEND;
4829 p_maturity_amount_sob_insert(p_insert_counter):=p_maturity_amount_sob_temp(i);
4830 p_premium_amount_usd_insert.EXTEND;
4831 p_premium_amount_usd_insert(p_insert_counter):=p_premium_amount_usd_temp(i);
4832 p_premium_amount_sob_insert.EXTEND;
4833 p_premium_amount_sob_insert(p_insert_counter):=p_premium_amount_sob_temp(i);
4834 p_accrued_interest_insert.EXTEND;
4835 p_accrued_interest_insert(p_insert_counter):=p_accrued_interest_temp(i);
4836 p_accrued_interest_usd_insert.EXTEND;
4837 p_accrued_interest_usd_insert(p_insert_counter):=p_accrued_interest_usd_temp(i);
4838 p_accrued_interest_sob_insert.EXTEND;
4839 p_accrued_interest_sob_insert(p_insert_counter):=p_accrued_interest_sob_temp(i);
4840 p_duration_insert.EXTEND;
4841 p_duration_insert(p_insert_counter):=p_duration_temp(i);
4842 p_mod_duration_insert.EXTEND;
4843 p_mod_duration_insert(p_insert_counter):=p_mod_duration_temp(i);
4844 p_convexity_insert.EXTEND;
4845 p_convexity_insert(p_insert_counter):=p_convexity_temp(i);
4846 p_delta_insert.EXTEND;
4847 p_delta_insert(p_insert_counter):=p_delta_temp(i);
4848 p_gamma_insert.EXTEND;
4849 p_gamma_insert(p_insert_counter):=p_gamma_temp(i);
4850 p_theta_insert.EXTEND;
4851 p_theta_insert(p_insert_counter):=p_theta_temp(i);
4852 p_rho_insert.EXTEND;
4853 p_rho_insert(p_insert_counter) := p_rho_temp(i);
4854 p_rho_base_insert.EXTEND;
4855 p_rho_base_insert(p_insert_counter) := p_rho_base_temp(i);
4856 p_rho_contra_insert.EXTEND;
4857 p_rho_contra_insert(p_insert_counter) := p_rho_contra_temp(i);
4858 p_rho_for_insert.EXTEND;
4859 p_rho_for_insert(p_insert_counter):=p_rho_for_temp(i);
4860 p_rho_dom_insert.EXTEND;
4861 p_rho_dom_insert(p_insert_counter):=p_rho_dom_temp(i);
4862 p_vega_insert.EXTEND;
4863 p_vega_insert(p_insert_counter):=p_vega_temp(i);
4864 p_pos_bpv_insert.EXTEND;
4865 p_pos_bpv_insert(p_insert_counter):=p_pos_bpv_temp(i);
4866 p_pos_bpv_usd_insert.EXTEND;
4867 p_pos_bpv_usd_insert(p_insert_counter) := p_pos_bpv_usd_temp(i);
4868 p_pos_bpv_sob_insert.EXTEND;
4869 p_pos_bpv_sob_insert(p_insert_counter) := p_pos_bpv_sob_temp(i);
4870 p_pos_delta_insert.EXTEND;
4871 p_pos_delta_insert(p_insert_counter):=p_pos_delta_temp(i);
4872 p_pos_delta_usd_insert.EXTEND;
4873 p_pos_delta_usd_insert(p_insert_counter) := p_pos_delta_usd_temp(i);
4874 p_pos_delta_sob_insert.EXTEND;
4875 p_pos_delta_sob_insert(p_insert_counter) := p_pos_delta_sob_temp(i);
4876 p_pos_gamma_insert.EXTEND;
4877 p_pos_gamma_insert(p_insert_counter):=p_pos_gamma_temp(i);
4878 p_pos_gamma_usd_insert.EXTEND;
4879 p_pos_gamma_usd_insert(p_insert_counter) := p_pos_gamma_usd_temp(i);
4880 p_pos_gamma_sob_insert.EXTEND;
4881 p_pos_gamma_sob_insert(p_insert_counter) := p_pos_gamma_sob_temp(i);
4882 p_pos_theta_insert.EXTEND;
4883 p_pos_theta_insert(p_insert_counter):=p_pos_theta_temp(i);
4884 p_pos_theta_usd_insert.EXTEND;
4885 p_pos_theta_usd_insert(p_insert_counter) := p_pos_theta_usd_temp(i);
4886 p_pos_theta_sob_insert.EXTEND;
4887 p_pos_theta_sob_insert(p_insert_counter) := p_pos_theta_sob_temp(i);
4888 p_pos_rho_insert.EXTEND;
4889 p_pos_rho_insert(p_insert_counter) := p_pos_rho_temp(i);
4890 p_pos_rho_usd_insert.EXTEND;
4891 p_pos_rho_usd_insert(p_insert_counter) := p_pos_rho_usd_temp(i);
4892 p_pos_rho_sob_insert.EXTEND;
4893 p_pos_rho_sob_insert(p_insert_counter) := p_pos_rho_sob_temp(i);
4894 p_pos_rho_base_insert.EXTEND;
4895 p_pos_rho_base_insert(p_insert_counter) := p_pos_rho_base_temp(i);
4896 p_pos_rho_base_usd_insert.EXTEND;
4897 p_pos_rho_base_usd_insert(p_insert_counter) := p_pos_rho_base_usd_temp(i);
4898 p_pos_rho_base_sob_insert.EXTEND;
4899 p_pos_rho_base_sob_insert(p_insert_counter) := p_pos_rho_base_sob_temp(i);
4900 p_pos_rho_contra_insert.EXTEND;
4901 p_pos_rho_contra_insert(p_insert_counter) := p_pos_rho_contra_temp(i);
4902 p_pos_rho_contra_usd_insert.EXTEND;
4903 p_pos_rho_contra_usd_insert(p_insert_counter) := p_pos_rho_contra_usd_temp(i);
4904 p_pos_rho_contra_sob_insert.EXTEND;
4905 p_pos_rho_contra_sob_insert(p_insert_counter) := p_pos_rho_contra_sob_temp(i);
4906 p_pos_rho_for_insert.EXTEND;
4907 p_pos_rho_for_insert(p_insert_counter):=p_pos_rho_for_temp(i);
4908 p_pos_rho_for_usd_insert.EXTEND;
4909 p_pos_rho_for_usd_insert(p_insert_counter) := p_pos_rho_for_usd_temp(i);
4910 p_pos_rho_for_sob_insert.EXTEND;
4911 p_pos_rho_for_sob_insert(p_insert_counter) := p_pos_rho_for_sob_temp(i);
4912 p_pos_rho_dom_insert.EXTEND;
4913 p_pos_rho_dom_insert(p_insert_counter):=p_pos_rho_dom_temp(i);
4914 p_pos_rho_dom_usd_insert.EXTEND;
4915 p_pos_rho_dom_usd_insert(p_insert_counter) := p_pos_rho_dom_usd_temp(i);
4916 p_pos_rho_dom_sob_insert.EXTEND;
4917 p_pos_rho_dom_sob_insert(p_insert_counter) := p_pos_rho_dom_sob_temp(i);
4918 p_pos_vega_insert.EXTEND;
4919 p_pos_vega_insert(p_insert_counter):=p_pos_vega_temp(i);
4920 p_pos_vega_usd_insert.EXTEND;
4921 p_pos_vega_usd_insert(p_insert_counter) := p_pos_vega_usd_temp(i);
4922 p_pos_vega_sob_insert.EXTEND;
4923 p_pos_vega_sob_insert(p_insert_counter) := p_pos_vega_sob_temp(i);
4924 p_volatility_insert.EXTEND;
4925 p_volatility_insert(p_insert_counter):=p_volatility_temp(i);
4926 p_ytm_insert.EXTEND;
4927 p_ytm_insert(p_insert_counter):=p_ytm_temp(i);
4928 p_gap_date_insert.EXTEND;
4929 p_gap_date_insert(p_insert_counter):=p_gap_date_temp(i);
4930 ELSE -- update deal
4931 p_update_counter := p_update_counter + 1;
4932 p_deal_calc_id_update.EXTEND;
4933 p_deal_calc_id_update(p_update_counter) := p_deal_calculations.deal_calc_id;
4934 p_deal_no_update.EXTEND;
4935 p_deal_no_update(p_update_counter):=p_deal_nos(i);
4936 p_company_code_update.EXTEND;
4937 p_company_code_update(p_update_counter):=p_company_code_temp(i);
4938 p_transaction_no_update.EXTEND;
4939 p_transaction_no_update(p_update_counter):=p_transaction_nos(i);
4940 p_market_data_set_update.EXTEND;
4941 p_market_data_set_update(p_update_counter):=p_market_data_set_temp(i);
4942 p_deal_ccy_update.EXTEND;
4943 p_deal_ccy_update(p_update_counter):=p_deal_ccy_temp(i);
4944 p_sob_ccy_update.EXTEND;
4945 p_sob_ccy_update(p_update_counter):=p_sob_ccy_temp(i);
4946 p_base_ccy_amount_usd_update.EXTEND;
4947 p_base_ccy_amount_usd_update(p_update_counter):=p_base_ccy_amount_usd_temp(i);
4948 p_base_ccy_amount_sob_update.EXTEND;
4949 p_base_ccy_amount_sob_update(p_update_counter):=p_base_ccy_amount_sob_temp(i);
4950 p_contra_ccy_amount_usd_update.EXTEND;
4951 p_contra_ccy_amount_usd_update(p_update_counter):=p_contra_ccy_amount_usd_temp(i);
4952 p_contra_ccy_amount_sob_update.EXTEND;
4953 p_contra_ccy_amount_sob_update(p_update_counter):=p_contra_ccy_amount_sob_temp(i);
4954 p_foreign_amount_usd_update.EXTEND;
4955 p_foreign_amount_usd_update(p_update_counter):=p_foreign_amount_usd_temp(i);
4956 p_foreign_amount_sob_update.EXTEND;
4957 p_foreign_amount_sob_update(p_update_counter):=p_foreign_amount_sob_temp(i);
4958 p_domestic_amount_usd_update.EXTEND;
4959 p_domestic_amount_usd_update(p_update_counter):=p_domestic_amount_usd_temp(i);
4960 p_domestic_amount_sob_update.EXTEND;
4961 p_domestic_amount_sob_update(p_update_counter):=p_domestic_amount_sob_temp(i);
4962 p_buy_amount_usd_update.EXTEND;
4963 p_buy_amount_usd_update(p_update_counter):=p_buy_amount_usd_temp(i);
4964 p_buy_amount_sob_update.EXTEND;
4965 p_buy_amount_sob_update(p_update_counter):=p_buy_amount_sob_temp(i);
4966 p_sell_amount_usd_update.EXTEND;
4967 p_sell_amount_usd_update(p_update_counter):=p_sell_amount_usd_temp(i);
4968 p_sell_amount_sob_update.EXTEND;
4969 p_sell_amount_sob_update(p_update_counter):=p_sell_amount_sob_temp(i);
4970 p_days_update.EXTEND;
4971 p_days_update(p_update_counter):=p_days_temp(i);
4972 p_fx_reval_rate_update.EXTEND;
4973 p_fx_reval_rate_update(p_update_counter):=p_fx_reval_rate_temp(i);
4974 p_reval_price_update.EXTEND;
4975 p_reval_price_update(p_update_counter):=p_reval_price_temp(i);
4976
4977 p_reval_price_usd_update.EXTEND;
4978 p_reval_price_usd_update(p_update_counter):=p_reval_price_usd_temp(i);
4979
4980 p_reval_price_sob_update.EXTEND;
4981 p_reval_price_sob_update(p_update_counter):=p_reval_price_sob_temp(i);
4982
4983 p_mm_reval_rate_update.EXTEND;
4984 p_mm_reval_rate_update(p_update_counter):=p_mm_reval_rate_temp(i);
4985 p_fx_trans_rate_update.EXTEND;
4986 p_fx_trans_rate_update(p_update_counter):=p_fx_trans_rate_temp(i);
4987 p_trans_price_update.EXTEND;
4988 p_trans_price_update(p_update_counter):=p_trans_price_temp(i);
4989
4990 p_trans_price_usd_update.EXTEND;
4991 p_trans_price_usd_update(p_update_counter):=p_trans_price_usd_temp(i);
4992
4993 p_trans_price_sob_update.EXTEND;
4994 p_trans_price_sob_update(p_update_counter):=p_trans_price_sob_temp(i);
4995
4996 p_mm_trans_rate_update.EXTEND;
4997 p_mm_trans_rate_update(p_update_counter):=p_mm_trans_rate_temp(i);
4998 p_fair_value_update.EXTEND;
4999 p_fair_value_update(p_update_counter):=p_fair_value_temp(i);
5000 p_fair_value_usd_update.EXTEND;
5001 p_fair_value_usd_update(p_update_counter):=p_fair_value_usd_temp(i);
5002 p_fair_value_sob_update.EXTEND;
5003 p_fair_value_sob_update(p_update_counter):=p_fair_value_sob_temp(i);
5004 p_gap_amount_update.EXTEND;
5005 p_gap_amount_update(p_update_counter):=p_gap_amount_temp(i);
5006 p_gap_amount_usd_update.EXTEND;
5007 p_gap_amount_usd_update(p_update_counter):=p_gap_amount_usd_temp(i);
5008 p_gap_amount_sob_update.EXTEND;
5009 p_gap_amount_sob_update(p_update_counter):=p_gap_amount_sob_temp(i);
5010 p_maturity_amount_update.EXTEND;
5011 p_maturity_amount_update(p_update_counter):=p_maturity_amount_temp(i);
5012 p_maturity_amount_usd_update.EXTEND;
5013 p_maturity_amount_usd_update(p_update_counter):=p_maturity_amount_usd_temp(i);
5014 p_maturity_amount_sob_update.EXTEND;
5015 p_maturity_amount_sob_update(p_update_counter):=p_maturity_amount_sob_temp(i);
5016 p_premium_amount_usd_update.EXTEND;
5017 p_premium_amount_usd_update(p_update_counter):=p_premium_amount_usd_temp(i);
5018 p_premium_amount_sob_update.EXTEND;
5019 p_premium_amount_sob_update(p_update_counter):=p_premium_amount_sob_temp(i);
5020 p_accrued_interest_update.EXTEND;
5021 p_accrued_interest_update(p_update_counter):=p_accrued_interest_temp(i);
5022 p_accrued_interest_usd_update.EXTEND;
5023 p_accrued_interest_usd_update(p_update_counter):=p_accrued_interest_usd_temp(i);
5024 p_accrued_interest_sob_update.EXTEND;
5025 p_accrued_interest_sob_update(p_update_counter):=p_accrued_interest_sob_temp(i);
5026 p_duration_update.EXTEND;
5027 p_duration_update(p_update_counter):=p_duration_temp(i);
5028 p_mod_duration_update.EXTEND;
5029 p_mod_duration_update(p_update_counter):=p_mod_duration_temp(i);
5030 p_convexity_update.EXTEND;
5031 p_convexity_update(p_update_counter):=p_convexity_temp(i);
5032 p_delta_update.EXTEND;
5033 p_delta_update(p_update_counter):=p_delta_temp(i);
5034 p_gamma_update.EXTEND;
5035 p_gamma_update(p_update_counter):=p_gamma_temp(i);
5036 p_theta_update.EXTEND;
5037 p_theta_update(p_update_counter):=p_theta_temp(i);
5038 p_rho_update.EXTEND;
5039 p_rho_update(p_update_counter) := p_rho_temp(i);
5040 p_rho_base_update.EXTEND;
5041 p_rho_base_update(p_update_counter) := p_rho_base_temp(i);
5042 p_rho_contra_update.EXTEND;
5043 p_rho_contra_update(p_update_counter) := p_rho_contra_temp(i);
5044 p_rho_for_update.EXTEND;
5045 p_rho_for_update(p_update_counter):=p_rho_for_temp(i);
5046 p_rho_dom_update.EXTEND;
5047 p_rho_dom_update(p_update_counter):=p_rho_dom_temp(i);
5048 p_vega_update.EXTEND;
5049 p_vega_update(p_update_counter):=p_vega_temp(i);
5050 p_pos_bpv_update.EXTEND;
5051 p_pos_bpv_update(p_update_counter):=p_pos_bpv_temp(i);
5052 p_pos_bpv_usd_update.EXTEND;
5053 p_pos_bpv_usd_update(p_update_counter) := p_pos_bpv_usd_temp(i);
5054 p_pos_bpv_sob_update.EXTEND;
5055 p_pos_bpv_sob_update(p_update_counter) := p_pos_bpv_sob_temp(i);
5056 p_pos_delta_update.EXTEND;
5057 p_pos_delta_update(p_update_counter):=p_pos_delta_temp(i);
5058 p_pos_delta_usd_update.EXTEND;
5059 p_pos_delta_usd_update(p_update_counter) := p_pos_delta_usd_temp(i);
5060 p_pos_delta_sob_update.EXTEND;
5061 p_pos_delta_sob_update(p_update_counter) := p_pos_delta_sob_temp(i);
5062 p_pos_gamma_update.EXTEND;
5063 p_pos_gamma_update(p_update_counter):=p_pos_gamma_temp(i);
5064 p_pos_gamma_usd_update.EXTEND;
5065 p_pos_gamma_usd_update(p_update_counter) := p_pos_gamma_usd_temp(i);
5066 p_pos_gamma_sob_update.EXTEND;
5067 p_pos_gamma_sob_update(p_update_counter) := p_pos_gamma_sob_temp(i);
5068 p_pos_theta_update.EXTEND;
5069 p_pos_theta_update(p_update_counter):=p_pos_theta_temp(i);
5070 p_pos_theta_usd_update.EXTEND;
5071 p_pos_theta_usd_update(p_update_counter) := p_pos_theta_usd_temp(i);
5072 p_pos_theta_sob_update.EXTEND;
5073 p_pos_theta_sob_update(p_update_counter) := p_pos_theta_sob_temp(i);
5074 p_pos_rho_update.EXTEND;
5075 p_pos_rho_update(p_update_counter) := p_pos_rho_temp(i);
5076 p_pos_rho_usd_update.EXTEND;
5077 p_pos_rho_usd_update(p_update_counter) := p_pos_rho_usd_temp(i);
5078 p_pos_rho_sob_update.EXTEND;
5079 p_pos_rho_sob_update(p_update_counter) := p_pos_rho_sob_temp(i);
5080 p_pos_rho_base_update.EXTEND;
5081 p_pos_rho_base_update(p_update_counter) := p_pos_rho_base_temp(i);
5082 p_pos_rho_base_usd_update.EXTEND;
5083 p_pos_rho_base_usd_update(p_update_counter) := p_pos_rho_base_usd_temp(i);
5084 p_pos_rho_base_sob_update.EXTEND;
5085 p_pos_rho_base_sob_update(p_update_counter) := p_pos_rho_base_sob_temp(i);
5086 p_pos_rho_contra_update.EXTEND;
5087 p_pos_rho_contra_update(p_update_counter) := p_pos_rho_contra_temp(i);
5088 p_pos_rho_contra_usd_update.EXTEND;
5089 p_pos_rho_contra_usd_update(p_update_counter) := p_pos_rho_contra_usd_temp(i);
5090 p_pos_rho_contra_sob_update.EXTEND;
5091 p_pos_rho_contra_sob_update(p_update_counter) := p_pos_rho_contra_sob_temp(i);
5092 p_pos_rho_for_update.EXTEND;
5093 p_pos_rho_for_update(p_update_counter):=p_pos_rho_for_temp(i);
5094 p_pos_rho_for_usd_update.EXTEND;
5095 p_pos_rho_for_usd_update(p_update_counter) := p_pos_rho_for_usd_temp(i);
5096 p_pos_rho_for_sob_update.EXTEND;
5097 p_pos_rho_for_sob_update(p_update_counter) := p_pos_rho_for_sob_temp(i);
5098 p_pos_rho_dom_update.EXTEND;
5099 p_pos_rho_dom_update(p_update_counter):=p_pos_rho_dom_temp(i);
5100 p_pos_rho_dom_usd_update.EXTEND;
5101 p_pos_rho_dom_usd_update(p_update_counter) := p_pos_rho_dom_usd_temp(i);
5102 p_pos_rho_dom_sob_update.EXTEND;
5103 p_pos_rho_dom_sob_update(p_update_counter) := p_pos_rho_dom_sob_temp(i);
5104 p_pos_vega_update.EXTEND;
5105 p_pos_vega_update(p_update_counter):=p_pos_vega_temp(i);
5106 p_pos_vega_usd_update.EXTEND;
5107 p_pos_vega_usd_update(p_update_counter) := p_pos_vega_usd_temp(i);
5108 p_pos_vega_sob_update.EXTEND;
5109 p_pos_vega_sob_update(p_update_counter) := p_pos_vega_sob_temp(i);
5110 p_volatility_update.EXTEND;
5111 p_volatility_update(p_update_counter):=p_volatility_temp(i);
5112 p_ytm_update.EXTEND;
5113 p_ytm_update(p_update_counter) := p_ytm_temp(i);
5114 p_gap_date_update.EXTEND;
5115 p_gap_date_update(p_update_counter):=p_gap_date_temp(i);
5116 p_upd_md_calc_date_update.EXTEND;
5117 p_upd_md_calc_date_update(p_update_counter) := p_upd_md_calc_date_temp(i);
5118 END IF;
5119 ----------- End: placing attributes into insert/update arrays -----
5120
5121
5122 ----- >>> ALWAYS RECALCULATE <<< -------
5123 -- for QRM_TB_CALCULATIONS: calculate everytime for MM deals
5124 -- for FX/FXO deals, simply save to table
5125 IF (g_proc_level>=g_debug_level) THEN
5126 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'deal type is: '||p_deal_types(i));
5127 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'deal no is : '||p_deal_nos(i));
5128 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'trans no is: '||p_transaction_nos(i));
5129 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'mds is: '||p_market_data_set_temp(i));
5130 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'tb counter is: '||p_tb_counter);
5131 END IF;
5132
5133 IF (p_deal_types(i) NOT IN ('FX', 'FXO')) THEN
5134 IF (g_proc_level>=g_debug_level) THEN
5135 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'TB not fx/fxo! deal no: '||p_deal_nos(i));
5136 END IF;
5137 IF (p_deal_types(i)='BOND') THEN
5138 p_tb_deal_no.EXTEND;
5139 p_tb_transaction_no.EXTEND;
5140 p_tb_market_data_set.EXTEND;
5141 p_tb_pos_start_date.EXTEND;
5142 p_tb_pos_end_date.EXTEND;
5143 p_tb_start_date.EXTEND;
5144 p_tb_end_date.EXTEND;
5145 p_tb_outst_amount.EXTEND;
5146 p_tb_outst_amount_usd.EXTEND;
5147 p_tb_outst_amount_sob.EXTEND;
5148 p_tb_amt_qty_out.EXTEND;
5149 p_tb_amt_qty_out_usd.EXTEND;
5150 p_tb_amt_qty_out_sob.EXTEND;
5151 p_tb_interest_basis.EXTEND;
5152 p_tb_coupon_rate.EXTEND;
5153 p_tb_next_coupon_date.EXTEND;
5154 p_tb_counter := p_tb_counter + 1;
5155
5156 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5157 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5158 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5159 IF (p_tb_curr_deal_no <> p_deal_nos(i)) THEN
5160 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5161 p_tb_curr_deal_no := p_deal_nos(i);
5162 ELSE
5163 p_tb_pos_start_date(p_tb_counter) := p_start_dates(i);
5164 END IF;
5165 p_tb_pos_end_date(p_tb_counter) := p_maturity_dates(i);
5166 p_tb_start_date(p_tb_counter) := p_start_dates(i);
5167 p_tb_end_date(p_tb_counter) := p_maturity_dates(i);
5168 p_tb_outst_amount(p_tb_counter) := get_signed_amount(p_face_values(i), p_deal_types(i), p_deal_subtypes(i), null);
5169 --bug 2804548: if Interest Basis is null then it's Fixed.
5170 --bug 2918579: fix bug 2804584
5171 IF (p_initial_bases(i) = 'FLOAT') THEN
5172 p_tb_interest_basis(p_tb_counter) := 'L';
5173 ELSE
5174 p_tb_interest_basis(p_tb_counter) := 'F';
5175 END IF;
5176
5177 p_tb_coupon_rate(p_tb_counter) := p_coupon_rates(i);
5178 p_tb_next_coupon_date(p_tb_counter) := p_next_coupon_dates(i);
5179 -- convert outstanding amounts
5180 IF (p_deal_ccys(i) = 'USD') THEN
5181 p_tb_outst_amount_usd(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5182 ELSE
5183 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5184 p_deal_ccys(i), 'USD', p_tb_outst_amount(p_tb_counter), p_tb_outst_amount_usd(p_tb_counter));
5185 END IF;
5186 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
5187 p_tb_outst_amount_sob(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5188 ELSE
5189 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5190 p_deal_ccys(i), p_sob_ccy_temp(i),
5191 p_tb_outst_amount(p_tb_counter),
5192 p_tb_outst_amount_sob(p_tb_counter));
5193 END IF;
5194 p_tb_amt_qty_out(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5195 p_tb_amt_qty_out_sob(p_tb_counter) := p_tb_outst_amount_sob(p_tb_counter);
5196 p_tb_amt_qty_out_usd(p_tb_counter) := p_tb_outst_amount_usd(p_tb_counter);
5197 ELSIF (p_deal_types(i)='STOCK') THEN
5198 p_tb_deal_no.EXTEND;
5199 p_tb_transaction_no.EXTEND;
5200 p_tb_market_data_set.EXTEND;
5201 p_tb_pos_start_date.EXTEND;
5202 p_tb_pos_end_date.EXTEND;
5203 p_tb_start_date.EXTEND;
5204 p_tb_end_date.EXTEND;
5205 p_tb_outst_amount.EXTEND;
5206 p_tb_outst_amount_usd.EXTEND;
5207 p_tb_outst_amount_sob.EXTEND;
5208 p_tb_amt_qty_out.EXTEND;
5209 p_tb_amt_qty_out_usd.EXTEND;
5210 p_tb_amt_qty_out_sob.EXTEND;
5211 p_tb_interest_basis.EXTEND;
5212 p_tb_coupon_rate.EXTEND;
5213 p_tb_next_coupon_date.EXTEND;
5214 p_tb_counter := p_tb_counter + 1;
5215
5216 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5217 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5218 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5219
5220
5221 IF (p_tb_curr_deal_no <> p_deal_nos(i)) THEN
5222 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5223 p_tb_curr_deal_no := p_deal_nos(i);
5224 ELSE
5225 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5226 END IF;
5227 p_tb_pos_end_date(p_tb_counter) := p_maturity_dates(i);
5228 p_tb_start_date(p_tb_counter) := p_deal_dates(i);
5229 p_tb_end_date(p_tb_counter) := p_ref_date+1;
5230 p_tb_outst_amount(p_tb_counter) := p_trans_price_temp(i)*
5231 p_quantity_out(i);
5232 -- convert outstanding amounts
5233 IF (p_deal_ccys(i) = 'USD') THEN
5234 p_tb_outst_amount_usd(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5235 ELSE
5236 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5237 p_deal_ccys(i), 'USD', p_tb_outst_amount(p_tb_counter), p_tb_outst_amount_usd(p_tb_counter));
5238 END IF;
5239 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
5240 p_tb_outst_amount_sob(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5241 ELSE
5242 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5243 p_deal_ccys(i), p_sob_ccy_temp(i),
5244 p_tb_outst_amount(p_tb_counter),
5245 p_tb_outst_amount_sob(p_tb_counter));
5246 END IF;
5247
5248 p_tb_interest_basis(p_tb_counter) := NULL;
5249 p_tb_coupon_rate(p_tb_counter) := NULL;
5250 p_tb_next_coupon_date(p_tb_counter) := NULL;
5251
5252 p_tb_amt_qty_out(p_tb_counter) := p_quantity_out(i);
5253 p_tb_amt_qty_out_sob(p_tb_counter) := p_quantity_out(i);
5254 p_tb_amt_qty_out_usd(p_tb_counter) := p_quantity_out(i);
5255 IF (g_proc_level>=g_debug_level) THEN
5256 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'Past stock tb calculations');
5257 END IF;
5258 ELSIF (p_deal_types(i)='NI') THEN
5259 p_tb_deal_no.EXTEND;
5260 p_tb_transaction_no.EXTEND;
5261 p_tb_market_data_set.EXTEND;
5262 p_tb_pos_start_date.EXTEND;
5263 p_tb_pos_end_date.EXTEND;
5264 p_tb_start_date.EXTEND;
5265 p_tb_end_date.EXTEND;
5266 p_tb_outst_amount.EXTEND;
5267 p_tb_outst_amount_usd.EXTEND;
5268 p_tb_outst_amount_sob.EXTEND;
5269 p_tb_amt_qty_out.EXTEND;
5270 p_tb_amt_qty_out_usd.EXTEND;
5271 p_tb_amt_qty_out_sob.EXTEND;
5272 p_tb_interest_basis.EXTEND;
5273 p_tb_coupon_rate.EXTEND;
5274 p_tb_next_coupon_date.EXTEND;
5275 p_tb_counter := p_tb_counter + 1;
5276
5277 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5278 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5279 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5280 IF (p_tb_curr_deal_no <> p_deal_nos(i)) THEN
5281 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5282 p_tb_curr_deal_no := p_deal_nos(i);
5283 ELSE
5284 p_tb_pos_start_date(p_tb_counter) := p_start_dates(i);
5285 END IF;
5286 p_tb_pos_end_date(p_tb_counter) := p_maturity_dates(i);
5287 p_tb_start_date(p_tb_counter) := p_start_dates(i);
5288 p_tb_end_date(p_tb_counter) := p_maturity_dates(i);
5289 p_tb_outst_amount(p_tb_counter) := get_signed_amount(p_face_values(i), p_deal_types(i), p_deal_subtypes(i), null);
5290 p_tb_interest_basis(p_tb_counter) := 'F';
5291 IF (g_proc_level>=g_debug_level) THEN
5292 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI deal no', p_deal_nos(i));
5293 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI trans rate', p_transaction_rates(i));
5294 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NI coupon rate', p_coupon_rates(i));
5295 END IF;
5296 p_tb_coupon_rate(p_tb_counter) := p_coupon_rates(i);
5297 p_tb_next_coupon_date(p_tb_counter) := TO_DATE(NULL);
5298 -- convert outstanding amounts
5299 IF (p_deal_ccys(i) = 'USD') THEN
5300 p_tb_outst_amount_usd(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5301 ELSE
5302 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5303 p_deal_ccys(i), 'USD', p_tb_outst_amount(p_tb_counter),
5304 p_tb_outst_amount_usd(p_tb_counter));
5305 END IF;
5306 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
5307 p_tb_outst_amount_sob(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5308 ELSE
5309 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5310 p_deal_ccys(i), p_sob_ccy_temp(i),
5311 p_tb_outst_amount(p_tb_counter),
5312 p_tb_outst_amount_sob(p_tb_counter));
5313 END IF;
5314 p_tb_amt_qty_out(p_tb_counter) := NULL;
5315 p_tb_amt_qty_out_sob(p_tb_counter) := NULL;
5316 p_tb_amt_qty_out_usd(p_tb_counter) := NULL;
5317 IF (g_proc_level>=g_debug_level) THEN
5318 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'Past stock tb calculations');
5319 END IF;
5320
5321 ELSIF (p_deal_types(i) IN ('TMM', 'IRS', 'RTMM')) THEN
5322 p_maturity_amount_temp(i) := 0;
5323 p_gap_amount_temp(i) := 0;
5324 -- get current/future transactions
5325 FOR cursor_rec IN get_tmm_irs_rtmm_trans(p_deal_nos(i),
5326 p_ref_date) LOOP
5327 p_tb_counter := p_tb_counter + 1;
5328 p_tb_deal_no.EXTEND;
5329 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5330 p_tb_transaction_no.EXTEND;
5331 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5332 p_tb_market_data_set.EXTEND;
5333 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5334 p_tb_pos_start_date.EXTEND;
5335 IF (p_tb_curr_deal_no <> p_deal_nos(i)) THEN
5336 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5337 p_tb_curr_deal_no := p_deal_nos(i);
5338 ELSE
5339 p_tb_pos_start_date(p_tb_counter) := cursor_rec.start_date;
5340 END IF;
5341 p_tb_pos_end_date.EXTEND;
5342 p_tb_pos_end_date(p_tb_counter) := cursor_rec.maturity_date;
5343 p_tb_start_date.EXTEND;
5344 p_tb_start_date(p_tb_counter) := cursor_rec.start_date;
5345 p_tb_end_date.EXTEND;
5346 p_tb_end_date(p_tb_counter) := cursor_rec.maturity_date-1;--bug 2638277
5347 p_tb_outst_amount.EXTEND;
5348 p_tb_outst_amount_usd.EXTEND;
5349 p_tb_outst_amount_sob.EXTEND;
5350 p_tb_amt_qty_out.EXTEND;
5351 p_tb_amt_qty_out_usd.EXTEND;
5352 p_tb_amt_qty_out_sob.EXTEND;
5353
5354 p_tb_amt_qty_out(p_tb_counter) := NULL;
5355 p_tb_amt_qty_out_sob(p_tb_counter) := NULL;
5356 p_tb_amt_qty_out_usd(p_tb_counter) := NULL;
5357 -- outstanding amount
5358 IF (cursor_rec.principal_action='INCRSE') THEN
5359 p_tb_outst_amount(p_tb_counter) :=
5360 NVL(cursor_rec.balance_out_bf, 0) +
5361 NVL(cursor_rec.principal_adjust, 0);
5362 ELSE
5363 p_tb_outst_amount(p_tb_counter) :=
5364 NVL(cursor_rec.balance_out_bf, 0) -
5365 NVL(cursor_rec.principal_adjust, 0);
5366 END IF;
5367
5368 -- get correct signs
5369 p_tb_outst_amount(p_tb_counter) := get_signed_amount(p_tb_outst_amount(p_tb_counter), p_deal_types(i), p_deal_subtypes(i), null);
5370
5371 -- convert outstanding amounts
5372 IF (p_deal_ccys(i) = 'USD') THEN
5373 p_tb_outst_amount_usd(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5374 ELSE
5375 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5376 p_deal_ccys(i), 'USD', p_tb_outst_amount(p_tb_counter), p_tb_outst_amount_usd(p_tb_counter));
5377 END IF;
5378 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
5379 p_tb_outst_amount_sob(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5380 ELSE
5381 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5382 p_deal_ccys(i), p_sob_ccy_temp(i),
5383 p_tb_outst_amount(p_tb_counter),
5384 p_tb_outst_amount_sob(p_tb_counter));
5385 END IF;
5386
5387 -- interest basis
5388 -- settle date is fixed until date
5389 p_tb_interest_basis.EXTEND;
5390 IF (p_initial_bases(i) = 'FLOAT') THEN
5391 p_tb_interest_basis(p_tb_counter) := 'L';
5392 ELSIF (p_settle_dates(i) IS NULL OR
5393 p_settle_dates(i) = p_maturity_dates(i)) THEN
5394 p_tb_interest_basis(p_tb_counter) := 'F';
5395 -- if start date of transaction >= fixed until date
5396 -- then interest basis is floating
5397 ELSIF (cursor_rec.start_date >= p_settle_dates(i)) THEN
5398 p_tb_interest_basis(p_tb_counter) := 'L';
5399 ELSE
5400 p_tb_interest_basis(p_tb_counter) := 'F';
5401 END IF;
5402
5403 p_tb_coupon_rate.EXTEND;
5404 p_tb_coupon_rate(p_tb_counter) := cursor_rec.interest_rate;
5405 p_tb_next_coupon_date.EXTEND;
5406 p_tb_next_coupon_date(p_tb_counter) := cursor_rec.maturity_date;
5407 END LOOP;
5408 p_tb_end_date(p_tb_counter):=p_tb_end_date(p_tb_counter)+1; --bug 2638277
5409
5410 ELSIF (p_deal_types(i)='FRA') THEN
5411 p_tb_deal_no.EXTEND;
5412 p_tb_transaction_no.EXTEND;
5413 p_tb_market_data_set.EXTEND;
5414 p_tb_pos_start_date.EXTEND;
5415 p_tb_pos_end_date.EXTEND;
5416 p_tb_start_date.EXTEND;
5417 p_tb_end_date.EXTEND;
5418 p_tb_outst_amount.EXTEND;
5419 p_tb_outst_amount_usd.EXTEND;
5420 p_tb_outst_amount_sob.EXTEND;
5421 p_tb_amt_qty_out.EXTEND;
5422 p_tb_amt_qty_out_usd.EXTEND;
5423 p_tb_amt_qty_out_sob.EXTEND;
5424 p_tb_interest_basis.EXTEND;
5425 p_tb_coupon_rate.EXTEND;
5426 p_tb_next_coupon_date.EXTEND;
5427 p_tb_counter := p_tb_counter + 1;
5428
5429 p_tb_amt_qty_out(p_tb_counter) := NULL;
5430 p_tb_amt_qty_out_sob(p_tb_counter) := NULL;
5431 p_tb_amt_qty_out_usd(p_tb_counter) := NULL;
5432
5433 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5434 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5435 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5436 IF (p_tb_curr_deal_no <> p_deal_nos(i)) THEN
5437 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5438 p_tb_curr_deal_no := p_deal_nos(i);
5439 ELSE
5440 p_tb_pos_start_date(p_tb_counter) := p_start_dates(i);
5441 END IF;
5442 p_tb_pos_end_date(p_tb_counter) := p_maturity_dates(i);
5443 p_tb_start_date(p_tb_counter) := p_start_dates(i);
5444 p_tb_end_date(p_tb_counter) := p_maturity_dates(i);
5445 p_tb_outst_amount(p_tb_counter) := p_face_values(i);
5446 IF (p_deal_subtypes(i)='FUND') THEN
5447 p_tb_interest_basis(p_tb_counter) := 'F';
5448 ELSE
5449 p_tb_interest_basis(p_tb_counter) := 'L';
5450 END IF;
5451 p_tb_coupon_rate(p_tb_counter) := p_transaction_rates(i);
5452 p_tb_next_coupon_date(p_tb_counter) := TO_DATE(NULL);
5453 -- convert outstanding amounts
5454 IF (p_deal_ccys(i) = 'USD') THEN
5455 p_tb_outst_amount_usd(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5456 ELSE
5457 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5458 p_deal_ccys(i), 'USD', p_tb_outst_amount(p_tb_counter),
5459 p_tb_outst_amount_usd(p_tb_counter));
5460 END IF;
5461 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
5462 p_tb_outst_amount_sob(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5463 ELSE
5464 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5465 p_deal_ccys(i), p_sob_ccy_temp(i),
5466 p_tb_outst_amount(p_tb_counter),
5467 p_tb_outst_amount_sob(p_tb_counter));
5468 END IF;
5469
5470 ELSIF (p_deal_types(i) = 'IRO') THEN
5471 p_tb_deal_no.EXTEND;
5472 p_tb_transaction_no.EXTEND;
5473 p_tb_market_data_set.EXTEND;
5474 p_tb_pos_start_date.EXTEND;
5475 p_tb_pos_end_date.EXTEND;
5476 p_tb_start_date.EXTEND;
5477 p_tb_end_date.EXTEND;
5478 p_tb_outst_amount.EXTEND;
5479 p_tb_outst_amount_usd.EXTEND;
5480 p_tb_outst_amount_sob.EXTEND;
5481 p_tb_amt_qty_out.EXTEND;
5482 p_tb_amt_qty_out_usd.EXTEND;
5483 p_tb_amt_qty_out_sob.EXTEND;
5484 p_tb_interest_basis.EXTEND;
5485 p_tb_coupon_rate.EXTEND;
5486 p_tb_next_coupon_date.EXTEND;
5487 p_tb_counter := p_tb_counter + 1;
5488
5489 p_tb_amt_qty_out(p_tb_counter) := NULL;
5490 p_tb_amt_qty_out_sob(p_tb_counter) := NULL;
5491 p_tb_amt_qty_out_usd(p_tb_counter) := NULL;
5492
5493 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5494 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5495 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5496 IF (p_tb_curr_deal_no <> p_deal_nos(i)) THEN
5497 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5498 p_tb_curr_deal_no := p_deal_nos(i);
5499 ELSE
5500 p_tb_pos_start_date(p_tb_counter) := p_start_dates(i);
5501 END IF;
5502 p_tb_pos_end_date(p_tb_counter) := p_maturity_dates(i);
5503 p_tb_start_date(p_tb_counter) := p_start_dates(i);
5504 p_tb_end_date(p_tb_counter) := p_maturity_dates(i);
5505 p_tb_outst_amount(p_tb_counter) := p_face_values(i);
5506 IF (p_deal_subtypes(i) IN ('BCAP', 'SFLOOR')) THEN
5507 p_tb_interest_basis(p_tb_counter) := 'F';
5508 ELSE
5509 p_tb_interest_basis(p_tb_counter) := 'L';
5510 END IF;
5511 p_tb_coupon_rate(p_tb_counter) := p_transaction_rates(i);
5512 p_tb_next_coupon_date(p_tb_counter) := TO_DATE(NULL);
5513 -- convert outstanding amounts
5514 IF (p_deal_ccys(i) = 'USD') THEN
5515 p_tb_outst_amount_usd(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5516 ELSE
5517 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5518 p_deal_ccys(i), 'USD', p_tb_outst_amount(p_tb_counter),
5519 p_tb_outst_amount_usd(p_tb_counter));
5520 END IF;
5521 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
5522 p_tb_outst_amount_sob(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5523 ELSE
5524 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5525 p_deal_ccys(i), p_sob_ccy_temp(i),
5526 p_tb_outst_amount(p_tb_counter),
5527 p_tb_outst_amount_sob(p_tb_counter));
5528 END IF;
5529
5530 ELSIF (p_deal_types(i)='BDO') THEN
5531 p_tb_deal_no.EXTEND;
5532 p_tb_transaction_no.EXTEND;
5533 p_tb_market_data_set.EXTEND;
5534 p_tb_pos_start_date.EXTEND;
5535 p_tb_pos_end_date.EXTEND;
5536 p_tb_start_date.EXTEND;
5537 p_tb_end_date.EXTEND;
5538 p_tb_outst_amount.EXTEND;
5539 p_tb_outst_amount_usd.EXTEND;
5540 p_tb_outst_amount_sob.EXTEND;
5541 p_tb_amt_qty_out.EXTEND;
5542 p_tb_amt_qty_out_usd.EXTEND;
5543 p_tb_amt_qty_out_sob.EXTEND;
5544 p_tb_interest_basis.EXTEND;
5545 p_tb_coupon_rate.EXTEND;
5546 p_tb_next_coupon_date.EXTEND;
5547 p_tb_counter := p_tb_counter + 1;
5548
5549 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5550 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5551 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5552 IF (p_tb_curr_deal_no <> p_deal_nos(i)) THEN
5553 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5554 p_tb_curr_deal_no := p_deal_nos(i);
5555 ELSE
5556 p_tb_pos_start_date(p_tb_counter) := p_start_dates(i);
5557 END IF;
5558 p_tb_pos_end_date(p_tb_counter) := p_maturity_dates(i);
5559 p_tb_start_date(p_tb_counter) := p_start_dates(i);
5560 p_tb_end_date(p_tb_counter) := p_maturity_dates(i);
5561 p_tb_outst_amount(p_tb_counter) := p_face_values(i)*p_transaction_rates(i)/100;
5562 p_tb_interest_basis(p_tb_counter) := 'F';
5563 p_tb_coupon_rate(p_tb_counter) := p_coupon_rates(i);
5564 p_tb_next_coupon_date(p_tb_counter) := p_next_coupon_dates(i);
5565 -- convert outstanding amounts
5566 IF (p_deal_ccys(i) = 'USD') THEN
5567 p_tb_outst_amount_usd(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5568 ELSE
5569 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5570 p_deal_ccys(i), 'USD', p_tb_outst_amount(p_tb_counter),
5571 p_tb_outst_amount_usd(p_tb_counter));
5572 END IF;
5573 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
5574 p_tb_outst_amount_sob(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5575 ELSE
5576 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5577 p_deal_ccys(i), p_sob_ccy_temp(i),
5578 p_tb_outst_amount(p_tb_counter),
5579 p_tb_outst_amount_sob(p_tb_counter));
5580 END IF;
5581 p_tb_amt_qty_out(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5582 p_tb_amt_qty_out_sob(p_tb_counter) := p_tb_outst_amount_sob(p_tb_counter);
5583 p_tb_amt_qty_out_usd(p_tb_counter) := p_tb_outst_amount_usd(p_tb_counter);
5584 ELSIF (p_deal_types(i)='SWPTN') THEN
5585 p_tb_deal_no.EXTEND;
5586 p_tb_transaction_no.EXTEND;
5587 p_tb_market_data_set.EXTEND;
5588 p_tb_pos_start_date.EXTEND;
5589 p_tb_pos_end_date.EXTEND;
5590 p_tb_start_date.EXTEND;
5591 p_tb_end_date.EXTEND;
5592 p_tb_outst_amount.EXTEND;
5593 p_tb_outst_amount_usd.EXTEND;
5594 p_tb_outst_amount_sob.EXTEND;
5595 p_tb_amt_qty_out.EXTEND;
5596 p_tb_amt_qty_out_usd.EXTEND;
5597 p_tb_amt_qty_out_sob.EXTEND;
5598 p_tb_interest_basis.EXTEND;
5599 p_tb_coupon_rate.EXTEND;
5600 p_tb_next_coupon_date.EXTEND;
5601 p_tb_counter := p_tb_counter + 1;
5602
5603 p_tb_amt_qty_out(p_tb_counter) := NULL;
5604 p_tb_amt_qty_out_sob(p_tb_counter) := NULL;
5605 p_tb_amt_qty_out_usd(p_tb_counter) := NULL;
5606
5607 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5608 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5609 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5610 IF (p_tb_curr_deal_no <> p_deal_nos(i)) THEN
5611 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5612 p_tb_curr_deal_no := p_deal_nos(i);
5613 ELSE
5614 p_tb_pos_start_date(p_tb_counter) := p_start_dates(i);
5615 END IF;
5616 p_tb_pos_end_date(p_tb_counter) := p_maturity_dates(i);
5617 p_tb_start_date(p_tb_counter) := p_start_dates(i);
5618 p_tb_end_date(p_tb_counter) := p_maturity_dates(i);
5619 p_tb_outst_amount(p_tb_counter) := p_face_values(i);
5620 IF ((p_deal_subtypes(i)='BUY' and p_coupon_actions(i)='PAY') OR
5621 (p_deal_subtypes(i)='SELL' and p_coupon_actions(i)='REC')) THEN
5622 p_tb_interest_basis(p_tb_counter) := 'F';
5623 ELSE
5624 p_tb_interest_basis(p_tb_counter) := 'L';
5625 END IF;
5626 p_tb_coupon_rate(p_tb_counter) := p_transaction_rates(i);
5627 -- coupon freq is no of coupons per year, so need to convert
5628 -- to months to calculate next coupon date
5629 p_tb_next_coupon_date(p_tb_counter) := ADD_MONTHS(p_start_dates(i),
5630 12/p_coupon_freqs(i));
5631 -- convert outstanding amounts
5632 IF (p_deal_ccys(i) = 'USD') THEN
5633 p_tb_outst_amount_usd(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5634 ELSE
5635 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5636 p_deal_ccys(i), 'USD', p_tb_outst_amount(p_tb_counter),
5637 p_tb_outst_amount_usd(p_tb_counter));
5638 END IF;
5639 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
5640 p_tb_outst_amount_sob(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5641 ELSE
5642 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5643 p_deal_ccys(i), p_sob_ccy_temp(i),
5644 p_tb_outst_amount(p_tb_counter),
5645 p_tb_outst_amount_sob(p_tb_counter));
5646 END IF;
5647
5648 ELSIF (p_deal_types(i)='ONC') THEN
5649 p_tb_deal_no.EXTEND;
5650 p_tb_transaction_no.EXTEND;
5651 p_tb_market_data_set.EXTEND;
5652 p_tb_pos_start_date.EXTEND;
5653 p_tb_pos_end_date.EXTEND;
5654 p_tb_start_date.EXTEND;
5655 p_tb_end_date.EXTEND;
5656 p_tb_outst_amount.EXTEND;
5657 p_tb_outst_amount_usd.EXTEND;
5658 p_tb_outst_amount_sob.EXTEND;
5659 p_tb_amt_qty_out.EXTEND;
5660 p_tb_amt_qty_out_usd.EXTEND;
5661 p_tb_amt_qty_out_sob.EXTEND;
5662 p_tb_interest_basis.EXTEND;
5663 p_tb_coupon_rate.EXTEND;
5664 p_tb_next_coupon_date.EXTEND;
5665 p_tb_counter := p_tb_counter + 1;
5666
5667 p_tb_amt_qty_out(p_tb_counter) := NULL;
5668 p_tb_amt_qty_out_sob(p_tb_counter) := NULL;
5669 p_tb_amt_qty_out_usd(p_tb_counter) := NULL;
5670
5671 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5672 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5673 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5674 IF (p_tb_curr_deal_no <> p_deal_nos(i)) THEN
5675 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5676 p_tb_curr_deal_no := p_deal_nos(i);
5677 ELSE
5678 p_tb_pos_start_date(p_tb_counter) := p_start_dates(i);
5679 END IF;
5680 -- leave end date null for position analysis
5681 p_tb_pos_end_date(p_tb_counter) := p_end_dates(i);
5682 p_tb_start_date(p_tb_counter) := p_start_dates(i);
5683 --BUG 2637950
5684 IF (p_start_dates(i)>p_ref_date) THEN
5685 p_tb_end_date(p_tb_counter) := NVL(p_end_dates(i), p_start_dates(i)+1);
5686 ELSE
5687 p_tb_end_date(p_tb_counter) := NVL(p_end_dates(i), p_ref_date+1);
5688 END IF;
5689 --principal adjust
5690 p_tb_outst_amount(p_tb_counter) := get_signed_amount(p_start_amounts(i), p_deal_types(i), p_deal_subtypes(i), null);
5691 p_tb_interest_basis(p_tb_counter) := 'F';
5692 p_tb_coupon_rate(p_tb_counter) := p_coupon_rates(i);
5693 p_tb_next_coupon_date(p_tb_counter) := TO_DATE(NULL);
5694 -- convert outstanding amounts
5695 IF (p_deal_ccys(i) = 'USD') THEN
5696 p_tb_outst_amount_usd(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5697 ELSE
5698 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5699 p_deal_ccys(i), 'USD', p_tb_outst_amount(p_tb_counter),
5700 p_tb_outst_amount_usd(p_tb_counter));
5701 END IF;
5702 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
5703 p_tb_outst_amount_sob(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5704 ELSE
5705 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5706 p_deal_ccys(i), p_sob_ccy_temp(i),
5707 p_tb_outst_amount(p_tb_counter),
5708 p_tb_outst_amount_sob(p_tb_counter));
5709 END IF;
5710
5711 ELSIF (p_deal_types(i)='IG') THEN
5712 p_tb_deal_no.EXTEND;
5713 p_tb_transaction_no.EXTEND;
5714 p_tb_market_data_set.EXTEND;
5715 p_tb_pos_start_date.EXTEND;
5716 p_tb_pos_end_date.EXTEND;
5717 p_tb_start_date.EXTEND;
5718 p_tb_end_date.EXTEND;
5719 p_tb_outst_amount.EXTEND;
5720 p_tb_outst_amount_usd.EXTEND;
5721 p_tb_outst_amount_sob.EXTEND;
5722 p_tb_amt_qty_out.EXTEND;
5723 p_tb_amt_qty_out_usd.EXTEND;
5724 p_tb_amt_qty_out_sob.EXTEND;
5725 p_tb_interest_basis.EXTEND;
5726 p_tb_coupon_rate.EXTEND;
5727 p_tb_next_coupon_date.EXTEND;
5728 p_tb_counter := p_tb_counter + 1;
5729
5730 p_tb_amt_qty_out(p_tb_counter) := NULL;
5731 p_tb_amt_qty_out_sob(p_tb_counter) := NULL;
5732 p_tb_amt_qty_out_usd(p_tb_counter) := NULL;
5733
5734 IF (g_proc_level>=g_debug_level) THEN
5735 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IG 1');
5736 END IF;
5737 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5738 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5739 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5740 IF (p_tb_curr_deal_no <> p_deal_nos(i)) THEN
5741 p_tb_pos_start_date(p_tb_counter) := p_deal_dates(i);
5742 p_tb_curr_deal_no := p_deal_nos(i);
5743 ELSE
5744 p_tb_pos_start_date(p_tb_counter) := p_start_dates(i);
5745 END IF;
5746 p_tb_pos_end_date(p_tb_counter) := p_end_dates(i);
5747 p_tb_start_date(p_tb_counter) := p_start_dates(i);
5748 p_tb_end_date(p_tb_counter) := NVL(p_end_dates(i), p_ref_date+1);
5749 p_tb_outst_amount(p_tb_counter) := p_face_values(i); -- balance
5750 p_tb_interest_basis(p_tb_counter) := 'F';
5751 p_tb_coupon_rate(p_tb_counter) := p_coupon_rates(i);
5752 p_tb_next_coupon_date(p_tb_counter) := TO_DATE(NULL);
5753 IF (g_proc_level>=g_debug_level) THEN
5754 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IG 2');
5755 END IF;
5756 -- convert outstanding amounts
5757 IF (p_deal_ccys(i) = 'USD') THEN
5758 p_tb_outst_amount_usd(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5759 ELSE
5760 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5761 p_deal_ccys(i),'USD', p_tb_outst_amount(p_tb_counter),
5762 p_tb_outst_amount_usd(p_tb_counter));
5763 END IF;
5764 IF (g_proc_level>=g_debug_level) THEN
5765 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'IG 3');
5766 END IF;
5767 IF (p_deal_ccys(i) = p_sob_ccy_temp(i)) THEN
5768 p_tb_outst_amount_sob(p_tb_counter) := p_tb_outst_amount(p_tb_counter);
5769 ELSE
5770 convert_amounts(p_market_data_set_temp(i), p_ref_date,
5771 p_deal_ccys(i), p_sob_ccy_temp(i),
5772 p_tb_outst_amount(p_tb_counter),
5773 p_tb_outst_amount_sob(p_tb_counter));
5774 END IF;
5775 END IF;
5776
5777 ELSE -- 'FX' or 'FXO'
5778 p_tb_deal_no.EXTEND;
5779 p_tb_transaction_no.EXTEND;
5780 p_tb_market_data_set.EXTEND;
5781 p_tb_pos_start_date.EXTEND;
5782 p_tb_pos_end_date.EXTEND;
5783 p_tb_start_date.EXTEND;
5784 p_tb_end_date.EXTEND;
5785 p_tb_outst_amount.EXTEND;
5786 p_tb_outst_amount_usd.EXTEND;
5787 p_tb_outst_amount_sob.EXTEND;
5788 p_tb_amt_qty_out.EXTEND;
5789 p_tb_amt_qty_out_usd.EXTEND;
5790 p_tb_amt_qty_out_sob.EXTEND;
5791 p_tb_interest_basis.EXTEND;
5792 p_tb_coupon_rate.EXTEND;
5793 p_tb_next_coupon_date.EXTEND;
5794 p_tb_counter := p_tb_counter + 1;
5795
5796 p_tb_amt_qty_out(p_tb_counter) := NULL;
5797 p_tb_amt_qty_out_sob(p_tb_counter) := NULL;
5798 p_tb_amt_qty_out_usd(p_tb_counter) := NULL;
5799
5800 p_tb_deal_no(p_tb_counter) := p_deal_nos(i);
5801 p_tb_transaction_no(p_tb_counter) := p_transaction_nos(i);
5802 p_tb_market_data_set(p_tb_counter) := p_market_data_set_temp(i);
5803 -- start dates are null for FX/FXO
5804 -- so always map start date to deal date
5805 p_tb_pos_start_date(p_tb_counter) := NVL(p_start_dates(i),
5806 p_deal_dates(i));
5807 p_tb_start_date(p_tb_counter) := NVL(p_start_dates(i),
5808 p_deal_dates(i));
5809 p_tb_pos_end_date(p_tb_counter) := p_end_dates(i);
5810 p_tb_end_date(p_tb_counter) := p_end_dates(i);
5811 p_tb_outst_amount(p_tb_counter) := NULL;
5812 p_tb_outst_amount_usd(p_tb_counter) := NULL;
5813 p_tb_outst_amount_sob(p_tb_counter) := NULL;
5814 p_tb_interest_basis(p_tb_counter) := NULL;
5815 p_tb_coupon_rate(p_tb_counter) := NULL;
5816 p_tb_next_coupon_date(p_tb_counter) := NULL;
5817
5818 END IF; -- end of tb calculations
5819
5820 -- bug 2875633
5821 if (p_tb_counter>1) then
5822 if ((p_tb_end_date(p_tb_counter) = p_tb_end_date(p_tb_counter-1)) and
5823 (p_tb_start_date(p_tb_counter) = p_tb_start_date(p_tb_counter-1)) and
5824 (p_tb_market_data_set(p_tb_counter) = p_tb_market_data_set(p_tb_counter-1)) and
5825 (p_tb_transaction_no(p_tb_counter) = p_tb_transaction_no(p_tb_counter-1)) and
5826 (p_tb_deal_no(p_tb_counter) = p_tb_deal_no(p_tb_counter-1))) then
5827 if (nvl(p_tb_outst_amount(p_tb_counter-1),0)=0 and nvl(p_tb_outst_amount(p_tb_counter),0)<>0) then
5828 p_tb_deal_no(p_tb_counter-1) := p_tb_deal_no(p_tb_counter);
5829 p_tb_transaction_no(p_tb_counter-1) := p_tb_transaction_no(p_tb_counter);
5830 p_tb_market_data_set(p_tb_counter-1) := p_tb_market_data_set(p_tb_counter);
5831 p_tb_pos_start_date(p_tb_counter-1) := p_tb_pos_start_date(p_tb_counter);
5832 p_tb_pos_end_date(p_tb_counter-1) := p_tb_pos_end_date(p_tb_counter);
5833 p_tb_start_date(p_tb_counter-1) := p_tb_start_date(p_tb_counter);
5834 p_tb_end_date(p_tb_counter-1) := p_tb_end_date(p_tb_counter);
5835 p_tb_outst_amount(p_tb_counter-1) := p_tb_outst_amount(p_tb_counter);
5836 p_tb_outst_amount_usd(p_tb_counter-1) := p_tb_outst_amount_usd(p_tb_counter);
5837 p_tb_outst_amount_sob(p_tb_counter-1) := p_tb_outst_amount_sob(p_tb_counter);
5838 p_tb_amt_qty_out(p_tb_counter-1) := p_tb_amt_qty_out(p_tb_counter);
5839 p_tb_amt_qty_out_usd(p_tb_counter-1) := p_tb_amt_qty_out_usd(p_tb_counter);
5840 p_tb_amt_qty_out_sob(p_tb_counter-1) := p_tb_amt_qty_out_sob(p_tb_counter);
5841 p_tb_interest_basis(p_tb_counter-1) := p_tb_interest_basis(p_tb_counter);
5842 p_tb_coupon_rate(p_tb_counter-1) := p_tb_coupon_rate(p_tb_counter);
5843 p_tb_next_coupon_date(p_tb_counter-1) := p_tb_next_coupon_date(p_tb_counter);
5844 end if;
5845 p_tb_counter:=p_tb_counter-1;
5846 raise e_duplicate_tb_rows;
5847 end if;
5848 end if;
5849
5850 IF (g_proc_level>=g_debug_level) THEN
5851 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'end of tb calculations');
5852 END IF;
5853 END IF; -- end deal ok : passed gap date test
5854
5855
5856 EXCEPTION
5857 WHEN XTR_MARKET_DATA_P.e_mdcs_no_curve_found THEN
5858 retcode := '1'; -- success with warnings
5859 p_except_counter := p_except_counter + 1;
5860 p_except_deal_no.EXTEND;
5861 p_except_transaction_no.EXTEND;
5862 p_except_market_data_set.EXTEND;
5863 p_except_error_type.EXTEND;
5864 p_except_error_code.EXTEND;
5865 p_except_token_name.EXTEND;
5866 p_except_token_value.EXTEND;
5867 p_except_deal_no(p_except_counter):=p_deal_nos(i);
5868 p_except_transaction_no(p_except_counter):=p_transaction_nos(i);
5869 p_except_market_data_set(p_except_counter):=p_market_data_set_temp(i);
5870 p_except_error_type(p_except_counter) := 'W';
5871 p_except_error_code(p_except_counter):='QRM_ANA_NO_CURVE_FOUND';
5872 --bug 3236479
5873 IF (g_proc_level>=g_ERROR_level) THEN
5874 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_ANA_NO_CURVE_FOUND',
5875 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
5876 g_error_level);
5877 END IF;
5878 WHEN XTR_MARKET_DATA_P.e_mdcs_no_data_found THEN
5879 retcode := '1'; -- success with warnings
5880 p_except_counter := p_except_counter + 1;
5881 p_except_deal_no.EXTEND;
5882 p_except_transaction_no.EXTEND;
5883 p_except_market_data_set.EXTEND;
5884 p_except_error_type.EXTEND;
5885 p_except_error_code.EXTEND;
5886 p_except_token_name.EXTEND;
5887 p_except_token_value.EXTEND;
5888 p_except_deal_no(p_except_counter):=p_deal_nos(i);
5889 p_except_transaction_no(p_except_counter):=p_transaction_nos(i);
5890 p_except_market_data_set(p_except_counter):=p_market_data_set_temp(i);
5891 p_except_error_type(p_except_counter):='W';
5892 p_except_error_code(p_except_counter):='QRM_ANA_NO_DATA_FOUND';
5893 --bug 3236479
5894 IF (g_proc_level>=g_ERROR_level) THEN
5895 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_ANA_NO_DATA_FOUND',
5896 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
5897 g_error_level);
5898 END IF;
5899 WHEN QRM_MM_FORMULAS.e_option_vol_zero THEN
5900 retcode := '1'; -- success with warnings
5901 p_except_counter := p_except_counter + 1;
5902 p_except_deal_no.EXTEND;
5903 p_except_transaction_no.EXTEND;
5904 p_except_market_data_set.EXTEND;
5905 p_except_error_type.EXTEND;
5906 p_except_error_code.EXTEND;
5907 p_except_token_name.EXTEND;
5908 p_except_token_value.EXTEND;
5909 p_except_deal_no(p_except_counter):=p_deal_nos(i);
5910 p_except_transaction_no(p_except_counter):=p_transaction_nos(i);
5911 p_except_market_data_set(p_except_counter):=p_market_data_set_temp(i);
5912 p_except_error_type(p_except_counter):='W';
5913 p_except_error_code(p_except_counter):='QRM_ANA_OPTION_VOL_ZERO';
5914 --bug 3236479
5915 IF (g_proc_level>=g_ERROR_level) THEN
5916 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_ANA_OPTION_VOL_ZERO',
5917 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
5918 g_error_level);
5919 END IF;
5920 WHEN no_data_found THEN -- market data set api returned no rows
5921 retcode := '1'; -- success with warnings
5922 p_except_counter := p_except_counter + 1;
5923 p_except_deal_no.EXTEND;
5924 p_except_transaction_no.EXTEND;
5925 p_except_market_data_set.EXTEND;
5926 p_except_error_type.EXTEND;
5927 p_except_error_code.EXTEND;
5928 p_except_token_name.EXTEND;
5929 p_except_token_value.EXTEND;
5930 p_except_deal_no(p_except_counter):=p_deal_nos(i);
5931 p_except_transaction_no(p_except_counter):=p_transaction_nos(i);
5932 p_except_market_data_set(p_except_counter):=p_market_data_set_temp(i);
5933 p_except_error_type(p_except_counter):='W';
5934 p_except_error_code(p_except_counter):='QRM_ANA_NO_DATA_FOUND';
5935 --bug 3236479
5936 IF (g_proc_level>=g_ERROR_level) THEN
5937 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_ANA_NO_DATA_FOUND',
5938 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
5939 g_error_level);
5940 END IF;
5941 --bug 2560111
5942 WHEN e_invalid_date THEN -- invalid date on deal
5943 retcode := '1'; -- success with warnings
5944 p_except_counter := p_except_counter + 1;
5945 p_except_deal_no.EXTEND;
5946 p_except_transaction_no.EXTEND;
5947 p_except_market_data_set.EXTEND;
5948 p_except_error_type.EXTEND;
5949 p_except_error_code.EXTEND;
5950 p_except_token_name.EXTEND;
5951 p_except_token_value.EXTEND;
5952 p_except_deal_no(p_except_counter):=p_deal_nos(i);
5953 p_except_transaction_no(p_except_counter):=p_transaction_nos(i);
5954 p_except_market_data_set(p_except_counter):=p_market_data_set_temp(i);
5955 p_except_error_type(p_except_counter):='W';
5956 p_except_error_code(p_except_counter):='QRM_ANA_DATE_RANGE_ERR';
5957 --bug 3236479
5958 IF (g_proc_level>=g_ERROR_level) THEN
5959 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_ANA_DATE_RANGE_ERR',
5960 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
5961 g_error_level);
5962 END IF;
5963 --bug 2558279
5964 WHEN ZERO_DIVIDE THEN -- invalid deal information
5965 retcode := '1'; -- success with warnings
5966 p_except_counter := p_except_counter + 1;
5967 p_except_deal_no.EXTEND;
5968 p_except_transaction_no.EXTEND;
5969 p_except_market_data_set.EXTEND;
5970 p_except_error_type.EXTEND;
5971 p_except_error_code.EXTEND;
5972 p_except_token_name.EXTEND;
5973 p_except_token_value.EXTEND;
5974 p_except_deal_no(p_except_counter):=p_deal_nos(i);
5975 p_except_transaction_no(p_except_counter):=p_transaction_nos(i);
5976 p_except_market_data_set(p_except_counter):=p_market_data_set_temp(i);
5977 p_except_error_type(p_except_counter):='W';
5978 p_except_error_code(p_except_counter):='QRM_DIV_BY_ZERO_ERR';
5979 --bug 3236479
5980 IF (g_proc_level>=g_ERROR_level) THEN
5981 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_DIV_BY_ZERO_ERR',
5982 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
5983 g_error_level);
5984 END IF;
5985 --bug 2875633
5986 WHEN e_duplicate_tb_rows THEN -- invalid deal information
5987 IF xtr_risk_debug_pkg.g_Debug THEN
5988 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'duplicate tb rows');
5989 END IF;
5990 retcode := '1'; -- success with warnings
5991 p_except_counter := p_except_counter + 1;
5992 p_except_deal_no.EXTEND;
5993 p_except_transaction_no.EXTEND;
5994 p_except_market_data_set.EXTEND;
5995 p_except_error_type.EXTEND;
5996 p_except_error_code.EXTEND;
5997 p_except_token_name.EXTEND;
5998 p_except_token_value.EXTEND;
5999 p_except_deal_no(p_except_counter):=p_deal_nos(i);
6000 p_except_transaction_no(p_except_counter):=p_transaction_nos(i);
6001 p_except_market_data_set(p_except_counter):=p_market_data_set_temp(i);
6002 p_except_error_type(p_except_counter):='W';
6003 p_except_error_code(p_except_counter):='QRM_ANA_UNEXPECTED_ERROR';
6004 -- bug 2602235, deal level errors
6005 WHEN OTHERS THEN
6006 retcode := '1'; -- success with warnings
6007 p_except_counter := p_except_counter + 1;
6008 p_except_deal_no.EXTEND;
6009 p_except_transaction_no.EXTEND;
6010 p_except_market_data_set.EXTEND;
6011 p_except_error_type.EXTEND;
6012 p_except_error_code.EXTEND;
6013 p_except_token_name.EXTEND;
6014 p_except_token_value.EXTEND;
6015 p_except_deal_no(p_except_counter):=p_deal_nos(i);
6016 p_except_transaction_no(p_except_counter):=p_transaction_nos(i);
6017 p_except_market_data_set(p_except_counter):=p_market_data_set_temp(i);
6018 p_except_error_type(p_except_counter):='W';
6019 p_except_error_code(p_except_counter):='QRM_ANA_UNEXPECTED_ERROR';
6020 --bug 3236479
6021 IF (g_proc_level>=g_ERROR_level) THEN
6022 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_ANA_UNEXPECTED_ERROR inner loop',
6023 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
6024 g_error_level);
6025 END IF;
6026 /* commented out for bug 2602235
6027 WHEN OTHERS THEN
6028 IF (g_proc_level>=g_debug_level) THEN
6029 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'unhandled exp at deal level');
6030 END IF;
6031 -- unhandled exception, clear previous warnings
6032 p_except_counter := 0;
6033 p_except_deal_no.DELETE;
6034 p_except_transaction_no.DELETE;
6035 p_except_market_data_set.DELETE;
6036 p_except_error_type.DELETE;
6037 p_except_error_code.DELETE;
6038 p_except_token_name.DELETE;
6039 p_except_token_value.DELETE;
6040 retcode := '2'; -- unhandled exception occurred, program fail
6041 p_except_counter := p_except_counter + 1;
6042 p_except_deal_no.EXTEND;
6043 p_except_transaction_no.EXTEND;
6044 p_except_market_data_set.EXTEND;
6045 p_except_error_type.EXTEND;
6046 p_except_error_code.EXTEND;
6047 p_except_token_name.EXTEND;
6048 p_except_token_value.EXTEND;
6049 p_except_deal_no(p_except_counter):=p_deal_nos(i);
6050 p_except_transaction_no(p_except_counter):=p_transaction_nos(i);
6051 p_except_market_data_set(p_except_counter):=p_market_data_set_temp(i);
6052 p_except_error_type(p_except_counter):='E';
6053 p_except_error_code(p_except_counter):='QRM_ANA_UNEXPECTED_ERROR';
6054
6055 exit; -- exit loop
6056 */
6057 END;
6058 IF (g_proc_level>=g_debug_level) THEN
6059 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'about to restart loop');
6060 END IF;
6061 END LOOP;
6062
6063
6064 -- hit db iff no unhandled exceptions
6065 IF (retcode <> '2') THEN
6066 -- perform database DML
6067 --- INSERT into QRM_DEAL_CALCULATIONS
6068 IF (g_state_level>=g_debug_level) THEN --bug 3236479
6069 --XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'about to insert');
6070 for j in 1..p_insert_counter loop
6071 v_log := p_seq_nos(j)||';'||
6072 p_deal_no_insert(j)||';'|| p_transaction_no_insert(j)||';'||
6073 p_market_data_set_insert(j)||';'|| p_deal_ccy_insert(j)||';'||
6074 p_sob_ccy_insert(j)||';'|| p_base_ccy_amount_usd_insert(j)||';'||
6075 p_base_ccy_amount_sob_insert(j)||';'|| p_contra_ccy_amount_usd_insert(j)||';'||
6076 p_contra_ccy_amount_sob_insert(j)||';'|| p_foreign_amount_usd_insert(j)||';'||
6077 p_foreign_amount_sob_insert(j)||';'|| p_domestic_amount_usd_insert(j)||';'||
6078 p_domestic_amount_sob_insert(j)||';'|| p_buy_amount_usd_insert(j)||';'||
6079 p_buy_amount_sob_insert(j)||';'|| p_sell_amount_usd_insert(j)||';'||
6080 p_sell_amount_sob_insert(j)||';'|| p_days_insert(j);
6081 XTR_RISK_DEBUG_PKG.dlog('INSERT QRM_DEAL_CALCULATIONS Line 1',v_log,
6082 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6083 v_log := p_fx_reval_rate_insert(j)||';'||p_mm_reval_rate_insert(j)||';'||
6084 p_fx_trans_rate_insert(j)||';'|| p_mm_trans_rate_insert(j)||';'||
6085 p_fair_value_insert(j)||';'|| p_fair_value_usd_insert(j)||';'||
6086 p_fair_value_sob_insert(j)||';'|| p_gap_amount_insert(j)||';'||
6087 p_gap_amount_usd_insert(j)||';'|| p_gap_amount_sob_insert(j)||';'||
6088 p_maturity_amount_insert(j)||';'|| p_maturity_amount_usd_insert(j)||';'||
6089 p_maturity_amount_sob_insert(j)||';'|| p_premium_amount_usd_insert(j)||';'||
6090 p_premium_amount_sob_insert(j)||';'|| p_accrued_interest_insert(j)||';'||
6091 p_accrued_interest_usd_insert(j)||';'|| p_accrued_interest_sob_insert(j);
6092 XTR_RISK_DEBUG_PKG.dlog('INSERT QRM_DEAL_CALCULATIONS Line 2',v_log,
6093 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6094 v_log := p_duration_insert(j)||';'|| p_mod_duration_insert(j)||';'||
6095 p_convexity_insert(j)||';'|| p_delta_insert(j)||';'|| p_gamma_insert(j)||';'||
6096 p_theta_insert(j)||';'|| p_rho_insert(j)||';'|| p_rho_base_insert(j)||';'||
6097 p_rho_contra_insert(j)||';'|| p_rho_for_insert(j)||';'|| p_rho_dom_insert(j)||';'||
6098 p_vega_insert(j)||';'|| p_pos_bpv_insert(j)||';'|| p_pos_bpv_usd_insert(j)||';'||
6099 p_pos_bpv_sob_insert(j)||';'|| p_pos_delta_insert(j)||';'||
6100 p_pos_delta_usd_insert(j)||';'|| p_pos_delta_sob_insert(j)||';'||
6101 p_pos_gamma_insert(j)||';'|| p_pos_gamma_usd_insert(j)||';'||
6102 p_pos_gamma_sob_insert(j)||';'|| p_pos_theta_insert(j)||';'||
6103 p_pos_theta_usd_insert(j)||';'|| p_pos_theta_sob_insert(j)||';'||
6104 p_pos_rho_insert(j)||';'|| p_pos_rho_usd_insert(j)||';'||
6105 p_pos_rho_sob_insert(j)||';'|| p_pos_rho_base_insert(j)||';'||
6106 p_pos_rho_base_usd_insert(j)||';'|| p_pos_rho_base_sob_insert(j)||';'||
6107 p_pos_rho_contra_insert(j)||';'|| p_pos_rho_contra_usd_insert(j);
6108 XTR_RISK_DEBUG_PKG.dlog('INSERT QRM_DEAL_CALCULATIONS Line 3',v_log,
6109 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6110 v_log := p_pos_rho_contra_sob_insert(j)||';'|| p_pos_rho_for_insert(j)||';'||
6111 p_pos_rho_for_usd_insert(j)||';'|| p_pos_rho_for_sob_insert(j)||';'||
6112 p_pos_rho_dom_insert(j)||';'|| p_pos_rho_dom_usd_insert(j)||';'||
6113 p_pos_rho_dom_sob_insert(j)||';'|| p_pos_vega_insert(j)||';'||
6114 p_pos_vega_usd_insert(j)||';'|| p_pos_vega_sob_insert(j)||';'||
6115 p_volatility_insert(j)||';'|| p_ytm_insert(j)||';'||
6116 p_gap_date_insert(j)||';'|| p_reval_price_insert(j)||';'||
6117 p_reval_price_usd_insert(j)||';'|| p_reval_price_sob_insert(j)||';'||
6118 p_trans_price_insert(j)||';'|| p_trans_price_usd_insert(j)||';'||
6119 p_trans_price_sob_insert(j)||';'|| p_ref_datetime;
6120 XTR_RISK_DEBUG_PKG.dlog('INSERT QRM_DEAL_CALCULATIONS Line 4',v_log,
6121 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6122 end loop;
6123 END IF;
6124
6125 FORALL j IN 1..p_insert_counter
6126 INSERT INTO qrm_deal_calculations (deal_calc_id, deal_no,
6127 transaction_no, market_data_set, deal_ccy, sob_ccy,
6128 base_ccy_amount_usd, base_ccy_amount_sob, contra_ccy_amount_usd,
6129 contra_ccy_amount_sob, foreign_amount_usd, foreign_amount_sob,
6130 domestic_amount_usd, domestic_amount_sob, buy_amount_usd,
6131 buy_amount_sob, sell_amount_usd, sell_amount_sob, days,
6132 fx_reval_rate, mm_reval_rate, fx_trans_rate, mm_trans_rate,
6133 fair_value, fair_value_usd, fair_value_sob, gap_amount,
6134 gap_amount_usd, gap_amount_sob, maturity_amount,
6135 maturity_amount_usd, maturity_amount_sob, premium_amount_usd,
6136 premium_amount_sob, accrued_interest, accrued_interest_usd,
6137 accrued_interest_sob, duration, modified_duration,
6138 convexity, delta, gamma, theta, rho, rho_base, rho_contra,
6139 rho_foreign, rho_domestic, vega, pos_bpv, pos_bpv_usd,
6140 pos_bpv_sob, pos_delta, pos_delta_usd, pos_delta_sob,
6141 pos_gamma, pos_gamma_usd, pos_gamma_sob,
6142 pos_theta, pos_theta_usd, pos_theta_sob, pos_rho,
6143 pos_rho_usd, pos_rho_sob, pos_rho_base, pos_rho_base_usd,
6144 pos_rho_base_sob, pos_rho_contra, pos_rho_contra_usd,
6145 pos_rho_contra_sob, pos_rho_foreign, pos_rho_foreign_usd,
6146 pos_rho_foreign_sob, pos_rho_domestic, pos_rho_domestic_usd,
6147 pos_rho_domestic_sob, pos_vega, pos_vega_usd, pos_vega_sob,
6148 volatility, yield_to_maturity, gap_date, revaluation_price,
6149 revaluation_price_usd, revaluation_price_sob,
6150 transaction_price, transaction_price_usd,
6151 transaction_price_sob, last_md_calc_date,
6152 created_by, creation_date, last_updated_by,
6153 last_update_date, last_update_login, request_id,
6154 program_application_id, program_id, program_update_date)
6155 VALUES(p_seq_nos(j),-- stored earlier
6156 p_deal_no_insert(j), p_transaction_no_insert(j),
6157 p_market_data_set_insert(j), p_deal_ccy_insert(j),
6158 p_sob_ccy_insert(j), p_base_ccy_amount_usd_insert(j),
6159 p_base_ccy_amount_sob_insert(j), p_contra_ccy_amount_usd_insert(j),
6160 p_contra_ccy_amount_sob_insert(j), p_foreign_amount_usd_insert(j),
6161 p_foreign_amount_sob_insert(j), p_domestic_amount_usd_insert(j),
6162 p_domestic_amount_sob_insert(j), p_buy_amount_usd_insert(j),
6163 p_buy_amount_sob_insert(j), p_sell_amount_usd_insert(j),
6164 p_sell_amount_sob_insert(j), p_days_insert(j),
6165 p_fx_reval_rate_insert(j),p_mm_reval_rate_insert(j),
6166 p_fx_trans_rate_insert(j), p_mm_trans_rate_insert(j),
6167 p_fair_value_insert(j), p_fair_value_usd_insert(j),
6168 p_fair_value_sob_insert(j), p_gap_amount_insert(j),
6169 p_gap_amount_usd_insert(j), p_gap_amount_sob_insert(j),
6170 p_maturity_amount_insert(j), p_maturity_amount_usd_insert(j),
6171 p_maturity_amount_sob_insert(j), p_premium_amount_usd_insert(j),
6172 p_premium_amount_sob_insert(j), p_accrued_interest_insert(j),
6173 p_accrued_interest_usd_insert(j), p_accrued_interest_sob_insert(j),
6174 p_duration_insert(j), p_mod_duration_insert(j),
6175 p_convexity_insert(j), p_delta_insert(j), p_gamma_insert(j),
6176 p_theta_insert(j), p_rho_insert(j), p_rho_base_insert(j),
6177 p_rho_contra_insert(j), p_rho_for_insert(j), p_rho_dom_insert(j),
6178 p_vega_insert(j), p_pos_bpv_insert(j), p_pos_bpv_usd_insert(j),
6179 p_pos_bpv_sob_insert(j), p_pos_delta_insert(j),
6180 p_pos_delta_usd_insert(j), p_pos_delta_sob_insert(j),
6181 p_pos_gamma_insert(j), p_pos_gamma_usd_insert(j),
6182 p_pos_gamma_sob_insert(j), p_pos_theta_insert(j),
6183 p_pos_theta_usd_insert(j), p_pos_theta_sob_insert(j),
6184 p_pos_rho_insert(j), p_pos_rho_usd_insert(j),
6185 p_pos_rho_sob_insert(j), p_pos_rho_base_insert(j),
6186 p_pos_rho_base_usd_insert(j), p_pos_rho_base_sob_insert(j),
6187 p_pos_rho_contra_insert(j), p_pos_rho_contra_usd_insert(j),
6188 p_pos_rho_contra_sob_insert(j), p_pos_rho_for_insert(j),
6189 p_pos_rho_for_usd_insert(j), p_pos_rho_for_sob_insert(j),
6190 p_pos_rho_dom_insert(j), p_pos_rho_dom_usd_insert(j),
6191 p_pos_rho_dom_sob_insert(j), p_pos_vega_insert(j),
6192 p_pos_vega_usd_insert(j), p_pos_vega_sob_insert(j),
6193 p_volatility_insert(j), p_ytm_insert(j),
6194 p_gap_date_insert(j), p_reval_price_insert(j),
6195 p_reval_price_usd_insert(j), p_reval_price_sob_insert(j),
6196 p_trans_price_insert(j), p_trans_price_usd_insert(j),
6197 p_trans_price_sob_insert(j), p_ref_datetime,
6198 FND_GLOBAL.user_id, p_ref_datetime,
6199 FND_GLOBAL.user_id, p_ref_datetime, FND_GLOBAL.login_id,
6200 FND_GLOBAL.conc_request_id, FND_GLOBAL.prog_appl_id,
6201 FND_GLOBAL.conc_program_id, p_ref_datetime);
6202
6203 IF (g_event_level>=g_debug_level) THEN --bug 3236479
6204 XTR_RISK_DEBUG_PKG.dlog('DML','INSERTED QRM_DEAL_CALCULATIONS',
6205 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_event_level);
6206 END IF;
6207
6208 --- UPDATE QRM_DEAL_CALCULATIONS
6209 IF (g_state_level>=g_debug_level) THEN --bug 3236479
6210 --XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'about to update');
6211 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'p_update_counter: '|| p_update_counter);
6212 for j in 1..p_update_counter loop
6213 v_log := p_deal_ccy_update(j)||';'||
6214 p_sob_ccy_update(j)||';'|| p_base_ccy_amount_usd_update(j)||';'||
6215 p_base_ccy_amount_sob_update(j)||';'|| p_contra_ccy_amount_usd_update(j)||';'||
6216 p_contra_ccy_amount_sob_update(j)||';'|| p_foreign_amount_usd_update(j)||';'||
6217 p_foreign_amount_sob_update(j)||';'|| p_domestic_amount_usd_update(j)||';'||
6218 p_domestic_amount_sob_update(j)||';'|| p_buy_amount_usd_update(j)||';'||
6219 p_buy_amount_sob_update(j)||';'|| p_sell_amount_usd_update(j)||';'||
6220 p_sell_amount_sob_update(j)||';'|| p_days_update(j);
6221 XTR_RISK_DEBUG_PKG.dlog('update QRM_DEAL_CALCULATIONS Line 1',v_log,
6222 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6223 v_log := p_fx_reval_rate_update(j)||';'||p_mm_reval_rate_update(j)||';'||
6224 p_fx_trans_rate_update(j)||';'|| p_mm_trans_rate_update(j)||';'||
6225 p_fair_value_update(j)||';'|| p_fair_value_usd_update(j)||';'||
6226 p_fair_value_sob_update(j)||';'|| p_gap_amount_update(j)||';'||
6227 p_gap_amount_usd_update(j)||';'|| p_gap_amount_sob_update(j)||';'||
6228 p_maturity_amount_update(j)||';'|| p_maturity_amount_usd_update(j)||';'||
6229 p_maturity_amount_sob_update(j)||';'|| p_premium_amount_usd_update(j)||';'||
6230 p_premium_amount_sob_update(j)||';'|| p_accrued_interest_update(j)||';'||
6231 p_accrued_interest_usd_update(j)||';'|| p_accrued_interest_sob_update(j);
6232 XTR_RISK_DEBUG_PKG.dlog('update QRM_DEAL_CALCULATIONS Line 2',v_log,
6233 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6234 v_log := p_duration_update(j)||';'|| p_mod_duration_update(j)||';'||
6235 p_convexity_update(j)||';'|| p_delta_update(j)||';'|| p_gamma_update(j)||';'||
6236 p_theta_update(j)||';'|| p_rho_update(j)||';'|| p_rho_base_update(j)||';'||
6237 p_rho_contra_update(j)||';'|| p_rho_for_update(j)||';'|| p_rho_dom_update(j)||';'||
6238 p_vega_update(j)||';'|| p_pos_bpv_update(j)||';'|| p_pos_bpv_usd_update(j)||';'||
6239 p_pos_bpv_sob_update(j)||';'|| p_pos_delta_update(j)||';'||
6240 p_pos_delta_usd_update(j)||';'|| p_pos_delta_sob_update(j)||';'||
6241 p_pos_gamma_update(j)||';'|| p_pos_gamma_usd_update(j)||';'||
6242 p_pos_gamma_sob_update(j)||';'|| p_pos_theta_update(j)||';'||
6243 p_pos_theta_usd_update(j)||';'|| p_pos_theta_sob_update(j)||';'||
6244 p_pos_rho_update(j)||';'|| p_pos_rho_usd_update(j)||';'||
6245 p_pos_rho_sob_update(j)||';'|| p_pos_rho_base_update(j)||';'||
6246 p_pos_rho_base_usd_update(j)||';'|| p_pos_rho_base_sob_update(j)||';'||
6247 p_pos_rho_contra_update(j)||';'|| p_pos_rho_contra_usd_update(j);
6248 XTR_RISK_DEBUG_PKG.dlog('update QRM_DEAL_CALCULATIONS Line 3',v_log,
6249 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6250 v_log := p_pos_rho_contra_sob_update(j)||';'|| p_pos_rho_for_update(j)||';'||
6251 p_pos_rho_for_usd_update(j)||';'|| p_pos_rho_for_sob_update(j)||';'||
6252 p_pos_rho_dom_update(j)||';'|| p_pos_rho_dom_usd_update(j)||';'||
6253 p_pos_rho_dom_sob_update(j)||';'|| p_pos_vega_update(j)||';'||
6254 p_pos_vega_usd_update(j)||';'|| p_pos_vega_sob_update(j)||';'||
6255 p_volatility_update(j)||';'|| p_ytm_update(j)||';'||
6256 p_gap_date_update(j)||';'|| p_reval_price_update(j)||';'||
6257 p_reval_price_usd_update(j)||';'|| p_reval_price_sob_update(j)||';'||
6258 p_trans_price_update(j)||';'|| p_trans_price_usd_update(j)||';'||
6259 p_trans_price_sob_update(j)||';'|| p_ref_datetime;
6260 XTR_RISK_DEBUG_PKG.dlog('update QRM_DEAL_CALCULATIONS Line 4',v_log,
6261 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6262 end loop;
6263 END IF;
6264
6265 FORALL j IN 1..p_update_counter
6266 UPDATE qrm_deal_calculations
6267 SET
6268 deal_ccy=p_deal_ccy_update(j), sob_ccy=p_sob_ccy_update(j),
6269 base_ccy_amount_usd= p_base_ccy_amount_usd_update(j),
6270 base_ccy_amount_sob=p_base_ccy_amount_sob_update(j),
6271 contra_ccy_amount_usd=p_contra_ccy_amount_usd_update(j),
6272 contra_ccy_amount_sob=p_contra_ccy_amount_sob_update(j),
6273 foreign_amount_usd=p_foreign_amount_usd_update(j),
6274 foreign_amount_sob=p_foreign_amount_sob_update(j),
6275 domestic_amount_usd=p_domestic_amount_usd_update(j),
6276 domestic_amount_sob=p_domestic_amount_sob_update(j),
6277 buy_amount_usd=p_buy_amount_usd_update(j),
6278 buy_amount_sob=p_buy_amount_sob_update(j),
6279 sell_amount_usd=p_sell_amount_usd_update(j),
6280 sell_amount_sob=p_sell_amount_sob_update(j),
6281 days=p_days_update(j), fx_reval_rate=p_fx_reval_rate_update(j),
6282 mm_reval_rate=p_mm_reval_rate_update(j),
6283 fx_trans_rate=p_fx_trans_rate_update(j),
6284 mm_trans_rate=p_mm_trans_rate_update(j),
6285 revaluation_price = p_reval_price_update(j),
6286 revaluation_price_sob = p_reval_price_sob_update(j),
6287 revaluation_price_usd = p_reval_price_usd_update(j),
6288 transaction_price = p_trans_price_update(j),
6289 transaction_price_sob = p_trans_price_sob_update(j),
6290 transaction_price_usd = p_trans_price_usd_update(j),
6291 fair_value=p_fair_value_update(j),
6292 fair_value_usd=p_fair_value_usd_update(j),
6293 fair_value_sob=p_fair_value_sob_update(j),
6294 gap_amount=p_gap_amount_update(j),
6295 gap_amount_usd=p_gap_amount_usd_update(j),
6296 gap_amount_sob=p_gap_amount_sob_update(j),
6297 maturity_amount=p_maturity_amount_update(j),
6298 maturity_amount_usd=p_maturity_amount_usd_update(j),
6299 maturity_amount_sob=p_maturity_amount_sob_update(j),
6300 premium_amount_usd=p_premium_amount_usd_update(j),
6301 premium_amount_sob=p_premium_amount_sob_update(j),
6302 accrued_interest=p_accrued_interest_update(j),
6303 accrued_interest_usd=p_accrued_interest_usd_update(j),
6304 accrued_interest_sob=p_accrued_interest_sob_update(j),
6305 duration=p_duration_update(j),
6306 modified_duration=p_mod_duration_update(j),
6307 convexity=p_convexity_update(j), delta=p_delta_update(j),
6308 gamma=p_gamma_update(j), theta=p_theta_update(j),
6309 rho=p_rho_update(j), rho_base=p_rho_base_update(j),
6310 rho_contra=p_rho_contra_update(j), rho_foreign=p_rho_for_update(j),
6311 rho_domestic=p_rho_dom_update(j), vega=p_vega_update(j),
6312 pos_bpv=p_pos_bpv_update(j),
6313 pos_bpv_usd=p_pos_bpv_usd_update(j),
6314 pos_bpv_sob=p_pos_bpv_sob_update(j),
6315 pos_delta=p_pos_delta_update(j),
6316 pos_delta_usd=p_pos_delta_usd_update(j),
6317 pos_delta_sob=p_pos_delta_sob_update(j),
6318 pos_gamma=p_pos_gamma_update(j),
6319 pos_gamma_usd=p_pos_gamma_usd_update(j),
6320 pos_gamma_sob=p_pos_gamma_sob_update(j),
6321 pos_theta=p_pos_theta_update(j),
6322 pos_theta_usd=p_pos_theta_usd_update(j),
6323 pos_theta_sob=p_pos_theta_sob_update(j),
6324 pos_rho=p_pos_rho_update(j), pos_rho_usd=p_pos_rho_usd_update(j),
6325 pos_rho_sob=p_pos_rho_sob_update(j),
6326 pos_rho_base=p_pos_rho_base_update(j),
6327 pos_rho_base_usd=p_pos_rho_base_usd_update(j),
6328 pos_rho_base_sob=p_pos_rho_base_sob_update(j),
6329 pos_rho_contra=p_pos_rho_contra_update(j),
6330 pos_rho_contra_usd=p_pos_rho_contra_usd_update(j),
6331 pos_rho_contra_sob=p_pos_rho_contra_sob_update(j),
6332 pos_rho_foreign=p_pos_rho_for_update(j),
6333 pos_rho_foreign_usd=p_pos_rho_for_usd_update(j),
6334 pos_rho_foreign_sob=p_pos_rho_for_sob_update(j),
6335 pos_rho_domestic=p_pos_rho_dom_update(j),
6336 pos_rho_domestic_usd=p_pos_rho_dom_usd_update(j),
6337 pos_rho_domestic_sob=p_pos_rho_dom_sob_update(j),
6338 pos_vega=p_pos_vega_update(j),
6339 pos_vega_usd=p_pos_vega_usd_update(j),
6340 pos_vega_sob=p_pos_vega_sob_update(j),
6341 volatility=p_volatility_update(j),
6342 yield_to_maturity=p_ytm_update(j),
6343 gap_date=p_gap_date_update(j),
6344 last_md_calc_date=p_upd_md_calc_date_update(j),
6345 created_by=FND_GLOBAL.user_id,
6346 creation_date=p_ref_datetime, last_updated_by=FND_GLOBAL.user_id,
6347 last_update_date=p_ref_datetime,
6348 last_update_login=FND_GLOBAL.login_id,
6349 request_id=FND_GLOBAL.conc_request_id,
6350 program_application_id=FND_GLOBAL.prog_appl_id,
6351 program_id=FND_GLOBAL.conc_program_id,
6352 program_update_date=p_ref_datetime
6353 WHERE deal_calc_id = p_deal_calc_id_update(j);
6354
6355 IF (g_event_level>=g_debug_level) THEN --bug 3236479
6356 XTR_RISK_DEBUG_PKG.dlog('DML','UPDATED QRM_DEAL_CALCULATIONS',
6357 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_event_level);
6358 END IF;
6359
6360 -- UPDATE QRM_DEALS_ANALYSES
6361 -- first delete all old links
6362 IF (g_proc_level>=g_debug_level) THEN
6363 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'about to delete');
6364 END IF;
6365 /* BUG 2945198 - SQL BINDING
6366 DELETE
6367 FROM qrm_deals_analyses
6368 WHERE analysis_name=p_analysis_name;
6369 */
6370 -- add links for inserted deals
6371
6372 IF (g_state_level>=g_debug_level) THEN --bug 3236479
6373 for j in 1..p_insert_counter loop
6374 v_log := p_seq_nos(j)||','|| p_analysis_name||','|| p_company_code_insert(j)||','||
6375 FND_GLOBAL.user_id||','|| p_ref_datetime||','|| FND_GLOBAL.user_id||','||
6376 p_ref_datetime||','|| FND_GLOBAL.login_id||','|| FND_GLOBAL.conc_request_id||','||
6377 FND_GLOBAL.prog_appl_id||','|| FND_GLOBAL.conc_program_id||','||p_ref_datetime;
6378 XTR_RISK_DEBUG_PKG.dlog('INSERT QRM_DEALS_ANALYSES',v_log,
6379 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6380 end loop;
6381 for j in 1..p_update_counter loop
6382 v_log := p_deal_calc_id_update(j)||','||p_analysis_name||','||p_company_code_update(j);
6383 XTR_RISK_DEBUG_PKG.dlog('INSERT QRM_DEALS_ANALYSES',v_log,
6384 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6385 end loop;
6386 end if;
6387
6388 FORALL j IN 1..p_insert_counter
6389 INSERT INTO qrm_deals_analyses (deal_calc_id, analysis_name,
6390 company_code, created_by, creation_date, last_updated_by,
6391 last_update_date, last_update_login, request_id,
6392 program_application_id, program_id, program_update_date)
6393 VALUES (p_seq_nos(j), p_analysis_name, p_company_code_insert(j),
6394 FND_GLOBAL.user_id, p_ref_datetime, FND_GLOBAL.user_id,
6395 p_ref_datetime, FND_GLOBAL.login_id, FND_GLOBAL.conc_request_id,
6396 FND_GLOBAL.prog_appl_id, FND_GLOBAL.conc_program_id,p_ref_datetime);
6397 -- add links for updated deals
6398 FORALL j IN 1..p_update_counter
6399 INSERT INTO qrm_deals_analyses (deal_calc_id, analysis_name,
6400 company_code, created_by, creation_date, last_updated_by,
6401 last_update_date, last_update_login, request_id,
6402 program_application_id, program_id, program_update_date)
6403 VALUES (p_deal_calc_id_update(j), p_analysis_name,
6404 p_company_code_update(j), FND_GLOBAL.user_id, p_ref_datetime,
6405 FND_GLOBAL.user_id, p_ref_datetime, FND_GLOBAL.login_id,
6406 FND_GLOBAL.conc_request_id, FND_GLOBAL.prog_appl_id,
6407 FND_GLOBAL.conc_program_id, p_ref_datetime);
6408
6409 IF (g_event_level>=g_debug_level) THEN --bug 3236479
6410 XTR_RISK_DEBUG_PKG.dlog('DML','INSERTED QRM_DEAL_ANALYSES',
6411 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_event_level);
6412 END IF;
6413
6414 -- UPDATE QRM_TB_CALCULATIONS
6415 -- first delete old data for deal no/trans no
6416 FORALL j IN 1..p_tb_counter
6417 DELETE
6418 FROM qrm_tb_calculations
6419 WHERE deal_no=p_tb_deal_no(j)
6420 AND transaction_no=p_tb_transaction_no(j)
6421 AND market_data_set=p_tb_market_data_set(j);
6422 -- then insert new ones
6423
6424 IF (g_event_level>=g_debug_level) THEN --bug 3236479
6425 XTR_RISK_DEBUG_PKG.dlog('DML','DELETED QRM_TB_CALCULATIONS',
6426 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_event_level);
6427 END IF;
6428
6429 IF (g_state_level>=g_debug_level) THEN --bug 3236479
6430 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'p_tb_counter: ' || p_tb_counter);
6431 for j in 1..p_tb_counter loop
6432 v_log := p_tb_deal_no(j)||','||
6433 p_tb_transaction_no(j)||','|| p_tb_market_data_set(j)||','||
6434 p_tb_pos_start_date(j)||','|| p_tb_pos_end_date(j)||','||
6435 p_tb_start_date(j)||','|| p_tb_end_date(j)||','||
6436 p_tb_interest_basis(j)||','|| p_tb_outst_amount(j)||','||
6437 p_tb_outst_amount_usd(j)||','|| p_tb_outst_amount_sob(j)||','||
6438 p_tb_coupon_rate(j)||','|| p_tb_next_coupon_date(j)||','|| p_tb_amt_qty_out(j)||','||
6439 p_tb_amt_qty_out_usd(j)||','|| p_tb_amt_qty_out_sob(j);
6440 XTR_RISK_DEBUG_PKG.dlog('INSERT QRM_TB_CALCULATIONS',v_log,
6441 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_state_level);
6442 end loop;
6443 end if;
6444
6445 FORALL j IN 1..p_tb_counter
6446 INSERT INTO qrm_tb_calculations (deal_no, transaction_no,
6447 market_data_set, pos_start_date, pos_end_date, start_date,
6448 end_date, interest_basis, outstanding_amount,
6449 outstanding_amount_usd, outstanding_amount_sob, coupon_rate,
6450 next_coupon_date,amt_qty_out, amt_qty_out_usd, amt_qty_out_sob,
6451 created_by, creation_date, last_updated_by,
6452 last_update_date, last_update_login, request_id,
6453 program_application_id, program_id,
6454 program_update_date)
6455 VALUES (p_tb_deal_no(j),
6456 p_tb_transaction_no(j), p_tb_market_data_set(j),
6457 p_tb_pos_start_date(j), p_tb_pos_end_date(j),
6458 p_tb_start_date(j), p_tb_end_date(j),
6459 p_tb_interest_basis(j), p_tb_outst_amount(j),
6460 p_tb_outst_amount_usd(j), p_tb_outst_amount_sob(j),
6461 p_tb_coupon_rate(j), p_tb_next_coupon_date(j), p_tb_amt_qty_out(j),
6462 p_tb_amt_qty_out_usd(j), p_tb_amt_qty_out_sob(j),
6463 FND_GLOBAL.user_id, p_ref_datetime, FND_GLOBAL.user_id,
6464 p_ref_datetime, FND_GLOBAL.login_id, FND_GLOBAL.conc_request_id,
6465 FND_GLOBAL.prog_appl_id,FND_GLOBAL.conc_program_id,p_ref_datetime);
6466
6467 IF (g_event_level>=g_debug_level) THEN --bug 3236479
6468 XTR_RISK_DEBUG_PKG.dlog('DML','INSERTED QRM_TB_CALCULATIONS',
6469 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_event_level);
6470 END IF;
6471
6472 -- BUG 2945198 - SQL BINDING
6473 END IF; -- end of if retcode<>'2'
6474
6475 exit when n_num_rows_fetched <> p_batch_fetch_size;
6476 end loop;
6477
6478 EXCEPTION
6479 WHEN OTHERS THEN
6480 if dbms_sql.is_open(v_cursor) then
6481 dbms_sql.close_cursor(v_cursor);
6482 end if;
6483 IF (g_proc_level>=g_debug_level) THEN
6484 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'unhandled exp during deal retrieval after DML');
6485 END IF;
6486 -- unhandled exception, clear previous warnings
6487 p_except_counter := 0;
6488 p_except_deal_no.DELETE;
6489 p_except_transaction_no.DELETE;
6490 p_except_market_data_set.DELETE;
6491 p_except_error_type.DELETE;
6492 p_except_error_code.DELETE;
6493 p_except_token_name.DELETE;
6494 p_except_token_value.DELETE;
6495 retcode := '2'; -- unhandled exception occurred, program fail
6496 p_except_counter := p_except_counter + 1;
6497 p_except_deal_no.EXTEND;
6498 p_except_transaction_no.EXTEND;
6499 p_except_market_data_set.EXTEND;
6500 p_except_error_type.EXTEND;
6501 p_except_error_code.EXTEND;
6502 p_except_token_name.EXTEND;
6503 p_except_token_value.EXTEND;
6504 p_except_deal_no(p_except_counter):=NULL;
6505 p_except_transaction_no(p_except_counter):=NULL;
6506 p_except_market_data_set(p_except_counter):=NULL;
6507 p_except_error_type(p_except_counter):='E';
6508 p_except_error_code(p_except_counter):='QRM_ANA_UNEXPECTED_ERROR';
6509 --exit; -- exit loop
6510 END;
6511
6512
6513 IF (retcode <> '2') THEN
6514
6515 IF (g_proc_level>=g_debug_level) THEN
6516 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'NUMBER OF DEALS: ' || p_total_deals_counter);
6517 END IF;
6518
6519 -- END BUG 2945198 - SQL BINDING
6520
6521 IF (g_proc_level>=g_debug_level) THEN
6522 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'before commit');
6523 END IF;
6524
6525 COMMIT;
6526
6527 -- no deal has passed gap analysis requirements
6528 -- thus, no rows returned
6529 IF (g_proc_level>=g_debug_level) THEN
6530 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'past commit');
6531 END IF;
6532 IF (NOT (p_gap_deal_exists)) THEN
6533 retcode := '5';
6534 END IF;
6535
6536 IF (retcode = '5') THEN
6537 p_except_counter := p_except_counter + 1;
6538 p_except_deal_no.EXTEND;
6539 p_except_transaction_no.EXTEND;
6540 p_except_market_data_set.EXTEND;
6541 p_except_error_type.EXTEND;
6542 p_except_error_code.EXTEND;
6543 p_except_token_name.EXTEND;
6544 p_except_token_value.EXTEND;
6545 p_except_error_type(p_except_counter) := 'W';
6546 p_except_error_code(p_except_counter) := 'QRM_ANA_NO_ROWS_RETURNED';
6547 END IF;
6548
6549 -- CALL AGGREGATOR if analysis style is not 'T'
6550 IF (p_settings.style <> 'T' and retcode <> '5') THEN
6551 IF (g_proc_level>=g_debug_level) THEN
6552 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'about to aggregate');
6553 END IF;
6554 p_agg_ok := QRM_PA_AGGREGATION_P.transform_and_save(p_analysis_name,
6555 p_ref_datetime, 'CONC');
6556
6557 IF (p_agg_ok = 'F') THEN -- unhandled exception in aggregator
6558 IF (g_proc_level>=g_debug_level) THEN
6559 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'unhandled exception in aggregator!');
6560 END IF;
6561 -- clear previous warnings
6562 p_except_counter := 0;
6563 p_except_deal_no.DELETE;
6564 p_except_transaction_no.DELETE;
6565 p_except_market_data_set.DELETE;
6566 p_except_error_type.DELETE;
6567 p_except_error_code.DELETE;
6568 p_except_token_name.DELETE;
6569 p_except_token_value.DELETE;
6570 -- set error message
6571 retcode := '2';
6572 p_except_counter := p_except_counter + 1;
6573 p_except_deal_no.EXTEND;
6574 p_except_transaction_no.EXTEND;
6575 p_except_market_data_set.EXTEND;
6576 p_except_error_type.EXTEND;
6577 p_except_error_code.EXTEND;
6578 p_except_token_name.EXTEND;
6579 p_except_token_value.EXTEND;
6580 p_except_error_type(p_except_counter) := 'E';
6581 p_except_error_code(p_except_counter) := 'QRM_ANA_UNEXPECTED_ERROR';
6582 END IF;
6583 END IF;
6584
6585 -- Remove expired deals with respect to reference date
6586 remove_expired_deals(p_ref_date);
6587
6588 END IF; -- end of if retcode<>'2'
6589
6590 EXCEPTION
6591 WHEN e_no_setting_found THEN
6592 -- clear previous warnings
6593 p_except_counter := 0;
6594 p_except_deal_no.DELETE;
6595 p_except_transaction_no.DELETE;
6596 p_except_market_data_set.DELETE;
6597 p_except_error_type.DELETE;
6598 p_except_error_code.DELETE;
6599 p_except_token_name.DELETE;
6600 p_except_token_value.DELETE;
6601 -- set error message
6602 retcode := '2';
6603 p_except_counter := p_except_counter + 1;
6604 p_except_deal_no.EXTEND;
6605 p_except_transaction_no.EXTEND;
6606 p_except_market_data_set.EXTEND;
6607 p_except_error_type.EXTEND;
6608 p_except_error_code.EXTEND;
6609 p_except_token_name.EXTEND;
6610 p_except_token_value.EXTEND;
6611 p_except_error_type(p_except_counter) := 'E';
6612 p_except_error_code(p_except_counter) := 'QRM_ANA_NO_SETTING';
6613 p_except_token_name(p_except_counter) := 'ANALYSIS_NAME';
6614 p_except_token_value(p_except_counter) := p_analysis_name;
6615 --bug 3236479
6616 IF (g_proc_level>=g_ERROR_level) THEN
6617 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_ANA_NO_SETTING',
6618 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
6619 g_error_level);
6620 END IF;
6621 WHEN e_analysis_in_progress THEN
6622 -- clear previous warnings
6623 p_except_counter := 0;
6624 p_except_deal_no.DELETE;
6625 p_except_transaction_no.DELETE;
6626 p_except_market_data_set.DELETE;
6627 p_except_error_type.DELETE;
6628 p_except_error_code.DELETE;
6629 p_except_token_name.DELETE;
6630 p_except_token_value.DELETE;
6631 -- set error message
6632 retcode := '2';
6633 p_except_counter := p_except_counter + 1;
6634 p_except_deal_no.EXTEND;
6635 p_except_transaction_no.EXTEND;
6636 p_except_market_data_set.EXTEND;
6637 p_except_error_type.EXTEND;
6638 p_except_error_code.EXTEND;
6639 p_except_token_name.EXTEND;
6640 p_except_token_value.EXTEND;
6641 p_except_error_type(p_except_counter) := 'E';
6642 p_except_error_code(p_except_counter) := 'QRM_ANA_RUN_IN_PROGRESS';
6643 p_except_token_name(p_except_counter) := 'ANALYSIS';
6644 p_except_token_value(p_except_counter) := p_analysis_name;
6645 --bug 3236479
6646 IF (g_proc_level>=g_ERROR_level) THEN
6647 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_ANA_RUN_IN_PROGRESS',
6648 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
6649 g_error_level);
6650 END IF;
6651 WHEN QRM_PA_AGGREGATION_P.e_pagg_no_fxrate_found THEN
6652 -- clear previous warnings
6653 p_except_counter := 0;
6654 p_except_deal_no.DELETE;
6655 p_except_transaction_no.DELETE;
6656 p_except_market_data_set.DELETE;
6657 p_except_error_type.DELETE;
6658 p_except_error_code.DELETE;
6659 p_except_token_name.DELETE;
6660 p_except_token_value.DELETE;
6661 -- set error message
6662 retcode := '2';
6663 p_except_counter := p_except_counter + 1;
6664 p_except_deal_no.EXTEND;
6665 p_except_transaction_no.EXTEND;
6666 p_except_market_data_set.EXTEND;
6667 p_except_error_type.EXTEND;
6668 p_except_error_code.EXTEND;
6669 p_except_token_name.EXTEND;
6670 p_except_token_value.EXTEND;
6671 p_except_error_type(p_except_counter) := 'E';
6672 p_except_error_code(p_except_counter) := 'QRM_CALC_NO_DEFAULT_SPOT_ERR';
6673 p_except_token_name(p_except_counter) := 'CCY';
6674 p_except_token_value(p_except_counter) := p_settings.curr_reporting;
6675 --bug 3236479
6676 IF (g_proc_level>=g_ERROR_level) THEN
6677 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_CALC_NO_DEFAULT_SPOT_ERR',
6678 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
6679 g_error_level);
6680 END IF;
6681 WHEN QRM_PA_AGGREGATION_P.e_pagg_no_timebuckets_found THEN
6682 -- clear previous warnings
6683 p_except_counter := 0;
6684 p_except_deal_no.DELETE;
6685 p_except_transaction_no.DELETE;
6686 p_except_market_data_set.DELETE;
6687 p_except_error_type.DELETE;
6688 p_except_error_code.DELETE;
6689 p_except_token_name.DELETE;
6690 p_except_token_value.DELETE;
6691 -- set error message
6692 retcode := '2';
6693 p_except_counter := p_except_counter + 1;
6694 p_except_deal_no.EXTEND;
6695 p_except_transaction_no.EXTEND;
6696 p_except_market_data_set.EXTEND;
6697 p_except_error_type.EXTEND;
6698 p_except_error_code.EXTEND;
6699 p_except_token_name.EXTEND;
6700 p_except_token_value.EXTEND;
6701 p_except_error_type(p_except_counter) := 'E';
6702 p_except_error_code(p_except_counter) := 'QRM_ANA_NO_TIMEBUCKETS';
6703 p_except_token_name(p_except_counter) := 'TB_NAME';
6704 p_except_token_value(p_except_counter) := p_settings.tb_name;
6705 --bug 3236479
6706 IF (g_proc_level>=g_ERROR_level) THEN
6707 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_ANA_NO_TIMEBUCKETS',
6708 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
6709 g_error_level);
6710 END IF;
6711 WHEN QRM_PA_AGGREGATION_P.e_pagg_no_setting_found THEN
6712 -- clear previous warnings
6713 p_except_counter := 0;
6714 p_except_deal_no.DELETE;
6715 p_except_transaction_no.DELETE;
6716 p_except_market_data_set.DELETE;
6717 p_except_error_type.DELETE;
6718 p_except_error_code.DELETE;
6719 p_except_token_name.DELETE;
6720 p_except_token_value.DELETE;
6721 -- set error message
6722 retcode := '2';
6723 p_except_counter := p_except_counter + 1;
6724 p_except_deal_no.EXTEND;
6725 p_except_transaction_no.EXTEND;
6726 p_except_market_data_set.EXTEND;
6727 p_except_error_type.EXTEND;
6728 p_except_error_code.EXTEND;
6729 p_except_token_name.EXTEND;
6730 p_except_token_value.EXTEND;
6731 p_except_error_type(p_except_counter) := 'E';
6732 p_except_error_code(p_except_counter) := 'QRM_ANA_NO_SETTING';
6733 p_except_token_name(p_except_counter) := 'ANALYSIS_NAME';
6734 p_except_token_value(p_except_counter) := p_analysis_name;
6735 --bug 3236479
6736 IF (g_proc_level>=g_ERROR_level) THEN
6737 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_PA_AGGREGATION_P.E_PAGG_NO_SETTING_FOUND',
6738 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
6739 g_error_level);
6740 END IF;
6741 WHEN others THEN
6742 p_except_counter := 0;
6743 p_except_deal_no.DELETE;
6744 p_except_transaction_no.DELETE;
6745 p_except_market_data_set.DELETE;
6746 p_except_error_type.DELETE;
6747 p_except_error_code.DELETE;
6748 p_except_token_name.DELETE;
6749 p_except_token_value.DELETE;
6750 -- set error message
6751 retcode := '2';
6752 p_except_counter := p_except_counter + 1;
6753 p_except_deal_no.EXTEND;
6754 p_except_transaction_no.EXTEND;
6755 p_except_market_data_set.EXTEND;
6756 p_except_error_type.EXTEND;
6757 p_except_error_code.EXTEND;
6758 p_except_token_name.EXTEND;
6759 p_except_token_value.EXTEND;
6760 p_except_error_type(p_except_counter) := 'E';
6761 p_except_error_code(p_except_counter) := 'QRM_ANA_UNEXPECTED_ERROR';
6762 --bug 3236479
6763 IF (g_proc_level>=g_ERROR_level) THEN
6764 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','QRM_ANA_UNEXPECTED_ERROR outer',
6765 'QRM_PA_CALCULATIONS_P.RUN_ANALYSIS',
6766 g_error_level);
6767 END IF;
6768 END;
6769
6770
6771 -- UPDATE LAST RUN DATE AND CALC STATUS IN SETTINGS TABLE
6772 UPDATE qrm_analysis_settings
6773 SET last_run_date = p_ref_datetime, status = retcode
6774 WHERE analysis_name = p_analysis_name;
6775
6776 IF (g_event_level>=g_debug_level) THEN --bug 3236479
6777 XTR_RISK_DEBUG_PKG.dlog('DML','UPDATED LAST RUN DATE AND CALC STATUS IN SETTINGS TABLE',
6778 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_event_level);
6779 END IF;
6780
6781 -- UPDATE ERRORS TABLE
6782 -- first remove all errors associated with this analysis
6783 DELETE
6784 FROM qrm_deal_calc_errors
6785 WHERE analysis_name=p_analysis_name;
6786
6787 IF (g_event_level>=g_debug_level) THEN --bug 3236479
6788 XTR_RISK_DEBUG_PKG.dlog('DML','Deleted qrm_deal_calc_errors',
6789 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_event_level);
6790 END IF;
6791
6792 -- now insert new errors into table
6793 FORALL j IN 1..p_except_counter
6794 INSERT INTO qrm_deal_calc_errors (analysis_name, deal_no,
6795 transaction_no, market_data_set, error_type, error_code,
6796 token_name, token_value, created_by, creation_date,
6797 last_updated_by, last_update_date, last_update_login,
6798 request_id, program_application_id, program_id, program_update_date)
6799 VALUES (p_analysis_name, p_except_deal_no(j), p_except_transaction_no(j),
6800 p_except_market_data_set(j), p_except_error_type(j),
6801 p_except_error_code(j), p_except_token_name(j),
6802 p_except_token_value(j), FND_GLOBAL.user_id, p_ref_datetime,
6803 FND_GLOBAL.user_id, p_ref_datetime, FND_GLOBAL.login_id,
6804 FND_GLOBAL.conc_request_id, FND_GLOBAL.prog_appl_id,
6805 FND_GLOBAL.conc_program_id, p_ref_datetime);
6806
6807 COMMIT;
6808
6809 IF (g_event_level>=g_debug_level) THEN --bug 3236479
6810 XTR_RISK_DEBUG_PKG.dlog('DML','Inserted new errors into table',
6811 'QRM_PA_CALCULATION_P.RUN_ANALYSIS',g_event_level);
6812 END IF;
6813
6814 -- if no rows returned, reset retcode to '1'
6815 -- FOR concurrent manager
6816 IF (retcode = '5') THEN
6817 retcode := '1';
6818 END IF;
6819
6820 IF (g_proc_level>=g_debug_level) THEN
6821 XTR_RISK_DEBUG_PKG.dlog('run_analysis: ' || 'retcode is: '||retcode);
6822 XTR_RISK_DEBUG_PKG.dpop(null,'QRM_CALCULATION_P.RUN_ANALYSIS'); --bug3236479;
6823 END IF;
6824
6825 END run_analysis;
6826
6827
6828
6829 FUNCTION get_signed_amount (p_amount NUMBER,
6830 p_deal_type VARCHAR2,
6831 p_deal_subtype VARCHAR2,
6832 p_action VARCHAR2)
6833 RETURN NUMBER IS
6834
6835 p_signed_amount NUMBER := p_amount;
6836
6837 BEGIN
6838
6839 IF (g_proc_level>=g_debug_level) THEN
6840 XTR_RISK_DEBUG_PKG.dpush(null,'QRM_CALCULATION_P.GET_SIGNED_AMOUNT'); --bug3236479;
6841 END IF;
6842
6843 -- BOND: sign amount outstanding,maturity amount,gap amount,accrued interest
6844 -- NI: sign all except accrued interest (accrued interest is 0)
6845 IF (p_deal_type IN ('BOND', 'NI')) THEN
6846 IF (p_deal_subtype NOT IN ('BUY')) THEN
6847 p_signed_amount := (-1) * p_amount;
6848 END IF;
6849 -- TMM, RTMM, IRS, ONC: sign amount outstanding, maturity amount,
6850 -- gap amount
6851 ELSIF (p_deal_type IN ('TMM', 'RTMM', 'IRS', 'ONC', 'IG')) THEN
6852 IF (p_deal_subtype NOT IN ('INVEST')) THEN
6853 p_signed_amount := (-1) * p_amount;
6854 END IF;
6855 ELSIF (p_deal_type IN ('FRA')) THEN -- only gap amount is signed
6856 IF (p_deal_subtype NOT IN ('FUND')) THEN
6857 p_signed_amount := (-1) * p_amount;
6858 END IF;
6859 ELSIF (p_deal_type IN ('IRO')) THEN -- only gap amount is signed
6860 IF (p_deal_subtype NOT IN ('BCAP', 'SFLOOR')) THEN
6861 p_signed_amount := (-1) * p_amount;
6862 END IF;
6863 ELSIF (p_deal_type IN ('BDO')) THEN -- only gap amount is signed
6864 IF (p_deal_subtype IN ('BCAP', 'SFLOOR')) THEN
6865 p_signed_amount := (-1) * p_amount;
6866 END IF;
6867 ELSIF (p_deal_type IN ('SWPTN')) THEN -- only gap amount is signed
6868 IF (NOT ((p_deal_subtype='BUY' and p_action='PAY') OR
6869 (p_deal_subtype='SELL' and p_action='REC'))) THEN
6870 p_signed_amount := (-1) * p_amount;
6871 END IF;
6872 END IF;
6873
6874 IF (g_proc_level>=g_debug_level) THEN
6875 XTR_RISK_DEBUG_PKG.dpop(null,'QRM_CALCULATION_P.GET_SIGNED_AMOUNT'); --bug3236479;
6876 END IF;
6877
6878 return p_signed_amount;
6879 END get_signed_amount;
6880
6881
6882
6883 FUNCTION get_threshold_date (p_ref_datetime DATE,
6884 p_threshold_num NUMBER,
6885 p_threshold_type VARCHAR2)
6886 RETURN DATE IS
6887
6888 p_threshold_date DATE;
6889 BEGIN
6890 IF (p_threshold_type = 'M') THEN -- Minutes
6891 -- 1440 = number of minutes in a day
6892 p_threshold_date := p_ref_datetime - p_threshold_num/1440;
6893 ELSIF (p_threshold_type = 'H') THEN -- Hours
6894 p_threshold_date := p_ref_datetime - p_threshold_num/24;
6895 ELSIF (p_threshold_type = 'D') THEN -- Days
6896 p_threshold_date := p_ref_datetime - p_threshold_num;
6897 END IF;
6898 RETURN p_threshold_date;
6899 END get_threshold_date;
6900
6901
6902 FUNCTION get_gap_date (p_deal_no IN NUMBER,
6903 p_deal_type IN VARCHAR2,
6904 p_initial_basis IN VARCHAR2,
6905 p_ref_date IN DATE)
6906 RETURN DATE IS
6907
6908 CURSOR get_transaction_data IS
6909 SELECT rate_fixing_date, start_date, maturity_date
6910 FROM xtr_rollover_transactions_v
6911 WHERE deal_number=p_deal_no;
6912
6913 /* CURSOR get_deal_data IS
6914 SELECT max(maturity_date), settle_date
6915 FROM qrm_current_deals_v
6916 GROUP BY deal_no, settle_date
6917 HAVING deal_no=p_deal_no; Bug 4965436*/
6918
6919 CURSOR get_deal_data IS
6920 SELECT max(maturity_date), settle_date
6921 FROM qrm_current_deals_v
6922 WHERE deal_no=p_deal_no
6923 GROUP BY settle_date ;
6924
6925
6926 -- the first part of the where clause accounts for the case
6927 -- where ref_date <= fixed until date, so gap date is next start date
6928 -- that is >= fixed until date
6929 -- the second part is when the ref_date > fixed until date, so the
6930 -- next gap date is the next start date after ref date
6931 CURSOR get_others (p_date DATE) IS
6932 SELECT DISTINCT maturity_date
6933 FROM xtr_rollover_transactions_v
6934 WHERE deal_number=p_deal_no
6935 AND ( (p_ref_date<=p_date
6936 and start_date<p_date
6937 and p_date<=maturity_date
6938 and maturity_date>=p_ref_date)
6939 OR(
6940 p_ref_date>p_date
6941 and start_date<p_ref_date
6942 and p_ref_date<=maturity_date));
6943
6944 p_fixed_until_date DATE;
6945 p_trans_start_date DATE;
6946 p_trans_maturity_date DATE;
6947 p_deal_maturity_date DATE;
6948 p_gap_date DATE;
6949
6950 BEGIN
6951 IF (g_proc_level>=g_debug_level) THEN
6952 XTR_RISK_DEBUG_PKG.dpush(null,'QRM_PA_CALCULATIONS_P.get_gap_date'); --bug 3236479
6953 END IF;
6954
6955 OPEN get_deal_data;
6956 FETCH get_deal_data INTO p_deal_maturity_date, p_fixed_until_date;
6957 CLOSE get_deal_data;
6958
6959
6960 FOR trans_data IN get_transaction_data LOOP
6961 IF ((trans_data.start_date <= p_ref_date) AND
6962 (p_ref_date < trans_data.maturity_date)) THEN
6963 -- get the maturity date of current transaction
6964 p_trans_maturity_date := trans_data.maturity_date;
6965 END IF;
6966 END LOOP;
6967
6968 IF (g_proc_level>=g_debug_level) THEN
6969 XTR_RISK_DEBUG_PKG.dlog('get_gap_date: ' || 'deal no: '||p_deal_no);
6970 END IF;
6971 IF (p_initial_basis='FLOAT') THEN -- floating
6972 p_gap_date := p_trans_maturity_date;
6973 IF (g_proc_level>=g_debug_level) THEN
6974 XTR_RISK_DEBUG_PKG.dlog('get_gap_date: ' || 'initial basis is float');
6975 END IF;
6976 ELSIF(p_deal_type='IRS' and p_initial_basis='FIXED') THEN
6977 p_gap_date := NULL;
6978 IF (g_proc_level>=g_debug_level) THEN
6979 XTR_RISK_DEBUG_PKG.dlog('get_gap_date: ' || 'IRS and initial basis is fixed');
6980 END IF;
6981 ELSIF ((p_fixed_until_date IS NULL) OR
6982 (p_fixed_until_date=p_deal_maturity_date)) THEN -- fixed
6983 IF (g_proc_level>=g_debug_level) THEN
6984 XTR_RISK_DEBUG_PKG.dlog('get_gap_date: ' || 'fixed until date: '||p_fixed_until_date);
6985 END IF;
6986 p_gap_date := p_deal_maturity_date;
6987 ELSE
6988 IF (g_proc_level>=g_debug_level) THEN
6989 XTR_RISK_DEBUG_PKG.dlog('get_gap_date: ' || 'gap date else');
6990 XTR_RISK_DEBUG_PKG.dlog('get_gap_date: ' || 'fixed until date', p_fixed_until_date);
6991 END IF;
6992 OPEN get_others(p_fixed_until_date);
6993 FETCH get_others INTO p_trans_maturity_date;
6994 IF (get_others%FOUND) THEN
6995 p_gap_date := p_trans_maturity_date;
6996 ELSE
6997 p_gap_date := p_deal_maturity_date;
6998 END IF;
6999 CLOSE get_others;
7000 END IF;
7001 IF (g_proc_level>=g_debug_level) THEN
7002 XTR_RISK_DEBUG_PKG.dpop(null,'QRM_PA_CALCULATIONS_P.get_gap_date'); --bug 3236479;
7003 END IF;
7004
7005 RETURN p_gap_date;
7006 END get_gap_date;
7007
7008
7009
7010 PROCEDURE convert_amounts(p_mds IN VARCHAR2,
7011 p_ref_date IN DATE,
7012 p_from_ccy IN VARCHAR2,
7013 p_to_ccy IN VARCHAR2,
7014 p_from_amount IN NUMBER,
7015 p_to_amount OUT NOCOPY NUMBER) IS
7016
7017 p_md_in XTR_MARKET_DATA_P.md_from_set_in_rec_type;
7018 p_md_out XTR_MARKET_DATA_P.md_from_set_out_rec_type;
7019
7020 BEGIN
7021 IF (g_proc_level>=g_debug_level) THEN
7022 XTR_RISK_DEBUG_PKG.dpush(null,'QRM_PA_CALCULATIONS.convert_amounts');--bug3236479
7023 END IF;
7024 p_md_in.p_md_set_code := p_mds;
7025 p_md_in.p_source := 'C';
7026 p_md_in.p_indicator := 'S';
7027 p_md_in.p_spot_date := p_ref_date;
7028 p_md_in.p_ccy := p_from_ccy;
7029 p_md_in.p_contra_ccy := p_to_ccy;
7030 p_md_in.p_side := 'M';
7031 XTR_MARKET_DATA_P.get_md_from_set(p_md_in, p_md_out);
7032 IF (g_proc_level>=g_debug_level) THEN
7033 XTR_RISK_DEBUG_PKG.dlog('convert_amounts: ' || p_from_ccy||'/'||p_to_ccy||' spot rate:'||p_md_out.p_md_out);
7034 END IF;
7035 p_to_amount := p_from_amount*p_md_out.p_md_out;
7036 IF (g_proc_level>=g_debug_level) THEN
7037 XTR_RISK_DEBUG_PKG.dlog('convert_amounts: ' || p_from_ccy||' amount:'||p_from_amount);
7038 XTR_RISK_DEBUG_PKG.dlog('convert_amounts: ' || p_to_ccy||' amount:'||p_to_amount);
7039 XTR_RISK_DEBUG_PKG.dpop(null,'QRM_PA_CALCULATIONS.convert_amounts');--bug3236479
7040 END IF;
7041 END convert_amounts;
7042
7043
7044 PROCEDURE remove_expired_deals(p_ref_date DATE) IS
7045
7046 p_deal_calc_ids XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
7047 p_deal_nos XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
7048 p_transaction_nos XTR_MD_NUM_TABLE := XTR_MD_NUM_TABLE();
7049 p_counter NUMBER := 0;
7050
7051
7052 -- get calculated deals that have matured
7053 CURSOR get_expired_ids IS
7054 SELECT deal_calc_id, deal_no, transaction_no
7055 FROM qrm_deal_calculations
7056 WHERE (deal_no, transaction_no) IN
7057 (SELECT deal_no, transaction_no
7058 FROM qrm_current_deals_v
7059 WHERE nvl(end_date, p_ref_date+1) < p_ref_date);
7060
7061 -- get calculated deals are no longer open
7062 /* CURSOR get_old_deal_ids IS
7063 SELECT deal_calc_id, deal_no, transaction_no
7064 FROM qrm_deal_calculations
7065 WHERE (deal_no, transaction_no) NOT IN
7066 (SELECT deal_no, transaction_no
7067 FROM qrm_current_deals_v); Bug 4965436 */
7068
7069 -- get calculated deals are no longer open
7070 CURSOR get_old_deal_ids IS
7071 SELECT deal_calc_id, deal_no, transaction_no
7072 FROM qrm_deal_calculations qdc
7073 WHERE NOT EXISTS ( select 'x'
7074 from qrm_current_deals_v qcdv
7075 where qcdv.deal_no = qdc.deal_no
7076 and qcdv.transaction_no = qdc.transaction_no ) ;
7077
7078
7079 BEGIN
7080 IF (g_proc_level>=g_debug_level) THEN
7081 XTR_RISK_DEBUG_PKG.dpush(null,'QRM_PA_CALCULATIONS_P.remove_expired_deals');--bug 3236479
7082 END IF;
7083 -- collect calculated matured deals
7084 FOR cursor_rec IN get_expired_ids LOOP
7085 p_counter := p_counter + 1;
7086 p_deal_calc_ids.EXTEND;
7087 p_deal_calc_ids(p_counter) := cursor_rec.deal_calc_id;
7088 p_deal_nos.EXTEND;
7089 p_deal_nos(p_counter) := cursor_rec.deal_no;
7090 p_transaction_nos.EXTEND;
7091 p_transaction_nos(p_counter) := cursor_rec.transaction_no;
7092 END LOOP;
7093
7094 -- collect calculated closed/cancelled/exercised/etc deals
7095 FOR cursor_rec IN get_old_deal_ids LOOP
7096 p_counter := p_counter + 1;
7097 p_deal_calc_ids.EXTEND;
7098 p_deal_calc_ids(p_counter) := cursor_rec.deal_calc_id;
7099 p_deal_nos.EXTEND;
7100 p_deal_nos(p_counter) := cursor_rec.deal_no;
7101 p_transaction_nos.EXTEND;
7102 p_transaction_nos(p_counter) := cursor_rec.transaction_no;
7103 END LOOP;
7104
7105 FORALL i IN 1..p_deal_calc_ids.COUNT
7106 DELETE
7107 FROM qrm_deal_calculations
7108 WHERE deal_calc_id=p_deal_calc_ids(i);
7109
7110 FORALL i IN 1..p_deal_nos.COUNT
7111 DELETE
7112 FROM qrm_tb_calculations
7113 WHERE deal_no=p_deal_nos(i) AND transaction_no=p_transaction_nos(i);
7114
7115 /* -- don't want to delete rows of this table if analysis still exists
7116 -- because need all instances of company code
7117 FORALL i IN 1..p_deal_calc_ids.COUNT
7118 DELETE
7119 FROM qrm_deals_analyses
7120 WHERE deal_calc_id=p_deal_calc_ids(i);
7121 */
7122
7123 FORALL i IN 1..p_deal_nos.COUNT
7124 DELETE
7125 FROM qrm_deal_calc_errors
7126 WHERE deal_no=p_deal_nos(i) AND transaction_no=p_transaction_nos(i);
7127
7128 COMMIT;
7129 IF (g_proc_level>=g_debug_level) THEN
7130 XTR_RISK_DEBUG_PKG.dpop(null,'QRM_PA_CALCULATIONS_P.remove_expired_deals');--bug3236479
7131 END IF;
7132 END remove_expired_deals;
7133
7134
7135 /*-------------------------------------------------------------------
7136 FILTER_MEASURE determine whether a particular analysis needs to filter
7137 deals based on its market type given the measure (refer to Bug 2356514 no 1).
7138 If filtering is necessary, the function returns a conditional clause to
7139 be appended in the dynamic SQL WHERE clause, otherwise it will return NULL.
7140
7141 For example:
7142 If the measure is Amount Outstanding, since it's only applicable
7143 to Money Market deals, the function will give a WHERE clause to exclude
7144 Foreign Exchange deals.
7145 Assuming p_market_type_table_alias='v':
7146 The return value='v.market_type='M''.
7147 -------------------------------------------------------------------*/
7148 FUNCTION filter_measure(p_style VARCHAR2,
7149 p_analysis_name VARCHAR2,
7150 p_market_type_table_alias VARCHAR2)
7151 RETURN VARCHAR2 IS
7152
7153 v_where VARCHAR2(240);
7154 v_mm_fx VARCHAR2(1);
7155 v_eq VARCHAR2(1);
7156 CURSOR get_mm_fx IS
7157 SELECT l.mm_fx FROM qrm_ana_atts_lookups l, qrm_analysis_atts a
7158 WHERE a.analysis_name=p_analysis_name
7159 AND a.history_flag='S'
7160 AND a.type='M'
7161 AND l.attribute_name=a.attribute_name;
7162
7163 CURSOR get_eq IS
7164 SELECT l.applies_to_eqm FROM qrm_ana_atts_lookups l, qrm_analysis_atts a
7165 WHERE a.analysis_name = p_analysis_name
7166 AND a.history_flag= 'S'
7167 AND a.type='M'
7168 AND l.attribute_name = a.attribute_name;
7169
7170 BEGIN
7171
7172 IF (g_proc_level>=g_debug_level) THEN
7173 XTR_RISK_DEBUG_PKG.dpush(null,'QRM_PA_CALCULATIONS_P.filter_measure');--bug3236479
7174 END IF;
7175
7176 --only filter measure for Crosstab and Crosstab with Timebuckets
7177 IF p_style IN ('X','C') THEN
7178 OPEN get_mm_fx;
7179 FETCH get_mm_fx INTO v_mm_fx;
7180 CLOSE get_mm_fx;
7181
7182 OPEN get_eq;
7183 FETCH get_eq INTO v_eq;
7184 CLOSE get_eq;
7185
7186 IF v_mm_fx='F' THEN --FX
7187 IF p_market_type_table_alias IS NULL THEN
7188 v_where := 'market_type<>''M''';
7189 ELSE
7190 v_where := p_market_type_table_alias||'.market_type<>''M''';
7191 END IF;
7192 ELSIF v_mm_fx='M' THEN --MM
7193 IF p_market_type_table_alias IS NULL THEN
7194 v_where := 'market_type<>''F''';
7195 ELSE
7196 v_where := p_market_type_table_alias||'.market_type<>''F''';
7197 END IF;
7198 ELSIF v_mm_fx='B' THEN
7199 IF p_market_type_table_alias IS NULL THEN
7200 v_where:= 'MARKET_TYPE<>''F'' AND DEAL_TYPE IN (''BOND'', ''BDO'', ''STOCK'')';
7201 ELSE
7202 v_where:= p_market_type_table_alias||'.market_type<>''F'' AND'||
7203 p_market_type_table_alias||'.DEAL_TYPE IN (''BOND'', ''BDO'', ''STOCK'')';
7204 END IF;
7205 ELSIF v_mm_fx='O' THEN
7206 IF p_market_type_table_alias IS NULL THEN
7207 v_where:= 'MARKET_TYPE<>''F'' AND DEAL_TYPE NOT IN (''BOND'', ''BDO'')';
7208 ELSE
7209 v_where:= p_market_type_table_alias||'.market_type<>''F'' AND'||
7210 p_market_type_table_alias||'.DEAL_TYPE NOT IN (''BOND'', ''BDO'')';
7211 END IF;
7212 ELSIF v_mm_fx='N' THEN --Neither
7213 IF p_market_type_table_alias IS NULL THEN
7214 v_where := 'market_type<>''F'' AND market_type<>''M''';
7215 ELSE
7216 v_where := p_market_type_table_alias||'.market_type<>''F'' AND market_type <>''M''';
7217 END IF;
7218 ELSE
7219 v_where := NULL;
7220 END IF;
7221 IF v_eq = 'N' THEN --Does not apply to Stock
7222 IF v_where is not null then
7223 v_where:= v_where || ' AND ';
7224 END IF;
7225 IF p_market_type_table_alias IS NULL THEN
7226 v_where := v_where || 'market_type<>''E''';
7227 ELSE
7228 v_where := v_where || p_market_type_table_alias||'.market_type<>''E''';
7229 END IF;
7230 END IF;
7231 ELSE
7232 v_where := NULL;
7233 END IF;
7234
7235 IF (g_proc_level>=g_debug_level) THEN
7236 XTR_RISK_DEBUG_PKG.dpop(v_where,'QRM_PA_CALCULATIONS_P.filter_measure');--bug3236479
7237 END IF;
7238
7239 RETURN v_where;
7240 EXCEPTION
7241 WHEN OTHERS THEN
7242 --bug 3236479
7243 IF (g_proc_level>=g_ERROR_level) THEN
7244 XTR_RISK_DEBUG_PKG.dlog('EXCEPTION','UNEXPECTED',
7245 'QRM_PA_CALCULATIONS_P.FILTER_MEASURE',
7246 g_error_level);
7247 END IF;
7248
7249 RETURN NULL;
7250 END filter_measure;
7251
7252
7253 END QRM_PA_CALCULATION_P;