DBA Data[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;