DBA Data[Home] [Help]

PACKAGE BODY: APPS.CE_AUTO_BANK_MATCH

Source


1 PACKAGE BODY CE_AUTO_BANK_MATCH AS
2 /* $Header: ceabrmab.pls 120.62.12010000.7 2008/11/20 08:58:12 vnetan ship $ */
3 
4   --
5   -- MAIN CURSORS
6   --
7   CURSOR r_branch_cursor( p_bank_branch_id              NUMBER,
8 			  p_bank_account_id             NUMBER,
9 			  p_org_id		        NUMBER,
10 			  p_legal_entity_id             NUMBER) IS
11 	SELECT aba.bank_account_id,
12 		aba.ACCOUNT_OWNER_ORG_ID,
13 	       --bau.bank_acct_use_id,
14 	      /* aba.AP_AMOUNT_TOLERANCE,
15 	       aba.AP_PERCENT_TOLERANCE,
16 	       aba.AR_AMOUNT_TOLERANCE,
17 	       aba.AR_PERCENT_TOLERANCE,
18 	       aba.CE_AMOUNT_TOLERANCE,
19 	       aba.CE_PERCENT_TOLERANCE,
20 	       nvl(bau.AP_USE_ENABLE_FLAG,'N'),
21                nvl(bau.AR_USE_ENABLE_FLAG,'N'),
22                nvl(bau.XTR_USE_ENABLE_FLAG,'N'),
23                nvl(bau.PAY_USE_ENABLE_FLAG,'N'),
24 	       decode(bau.org_id, -1, null, bau.org_id),
25 	       bau.legal_entity_id,*/
26 	       -1 /* for JEC - replace cash account GL CCID here*/
27 	FROM ce_bank_accounts aba
28 	     --ce_bank_acct_uses bau
29 	WHERE aba.bank_branch_id = p_bank_branch_id
30 	AND aba.bank_account_id = NVL(p_bank_account_id, aba.bank_account_id)
31 	--AND aba.bank_account_id = bau.bank_account_id
32         --and sysdate <= nvl(bau.end_date,sysdate)
33 	AND aba.account_classification = 'INTERNAL'
34 	--and aba.ACCOUNT_OWNER_ORG_ID = nvl(p_legal_entity_id,aba.ACCOUNT_OWNER_ORG_ID)
35 	and exists (select 1 from ce_bank_acct_uses_gt_v bau
36 			where bau.bank_account_id = aba.bank_account_id
37 			and sysdate <= nvl(bau.end_date,sysdate)
38 			and  (bau.org_id = nvl(p_org_id, bau.org_id) or
39 			     bau.legal_entity_id = nvl(p_legal_entity_id,bau.legal_entity_id)))
40 	order by aba.bank_account_id;
41 
42 	--SELECT aba.bank_account_id
43 	--FROM ap_bank_accounts aba
44 	--WHERE aba.bank_branch_id = p_bank_branch_id
45 	--AND aba.bank_account_id = NVL(p_bank_account_id, aba.bank_account_id)
46 	--AND aba.account_type = get_security_account_type(aba.account_type);
47 
48   CURSOR r_bank_cursor(	p_statement_number_from       	VARCHAR2,
49 			p_statement_number_to		VARCHAR2,
50 			p_statement_date_from		DATE,
51 			p_statement_date_to		DATE,
52 			p_bank_account_id		NUMBER) IS
53 	SELECT	csh.statement_header_id,
54 		csh.statement_number,
55 		csh.statement_date,
56 		csh.check_digits,
57 		csh.gl_date,
58 		aba.currency_code,
59 		aba.multi_currency_allowed_flag,
60 		aba.check_digits,
61 		csh.rowid,
62 		NVL(csh.statement_complete_flag,'N')
63 	FROM	ce_bank_accts_gt_v aba, --ce_bank_accounts_v aba,
64 		ce_statement_headers csh
65 	WHERE	aba.bank_account_id = NVL(p_bank_account_id,aba.bank_account_id)
66 	AND	aba.bank_account_id = csh.bank_account_id
67 	AND	csh.statement_number
68 		BETWEEN NVL(p_statement_number_from,csh.statement_number)
69 		AND NVL(p_statement_number_to,csh.statement_number)
70 	AND	to_char(csh.statement_date,'YYYY/MM/DD')
71 		BETWEEN NVL(to_char(p_statement_date_from,'YYYY/MM/DD'),
72 				to_char(csh.statement_date,'YYYY/MM/DD'))
73 		AND NVL(to_char(p_statement_date_to,'YYYY/MM/DD'),
74 				to_char(csh.statement_date,'YYYY/MM/DD'))
75 	AND 	NVL(csh.statement_complete_flag,'N') = 'N'; -- Bug 2593830 added this condition
76 
77   CURSOR line_cursor(csh_statement_header_id  NUMBER) IS
78 	SELECT distinct 	sl.rowid,
79 		sl.statement_line_id,
80 		--cd.receivables_trx_id,
81 		--cd.receipt_method_id,
82 		--cd.create_misc_trx_flag,
83 		--cd.matching_against,
84 		--cd.correction_method,
85 		--rm.name,
86 		sl.exchange_rate_type,
87 		sl.exchange_rate_date,
88 		sl.exchange_rate,
89 		sl.currency_code,
90 		sl.trx_type,
91 		--decode(cd.PAYROLL_PAYMENT_FORMAT_ID, null, NVL(cd.reconcile_flag,'X'),
92    		--	decode(cd.reconcile_flag,'PAY', 'PAY_EFT', NVL(cd.reconcile_flag,'X'))),
93 		'NONE',
94 		NULL,
95 		NULL,
96 		sl.original_amount,
97 		--ppt.payment_type_name,
98 		sl.je_status_flag, --JEC
99 		sl.accounting_date, --JEC
100 		--sl.accounting_event_id,  --JEC
101 		sl.cashflow_id,
102 		DECODE(sl.trx_type, 'NSF', 5, 'REJECTED', 5,
103 			decode(nvl(matching_against,'MISC'), 'MISC', 3, 'MS', 2, 1)) order_stmt_lns1,
104 		decode(nvl(matching_against,'MISC'), 'MISC', 0,
105 			to_char(sl.trx_date, 'J')) order_stmt_lns2
106 	FROM	--pay_payment_types ppt,
107 		--ar_receipt_methods rm,
108 		ce_statement_headers sh,
109 		ce_transaction_codes cd,
110 		ce_statement_lines sl
111 	WHERE	--rm.receipt_method_id(+) 	= cd.receipt_method_id
112 		--nvl(cd.RECONCILIATION_SEQUENCE (+) ,1) = 1
113 		nvl(cd.RECONCILIATION_SEQUENCE ,1) =
114 			(select nvl(min(tc.reconciliation_sequence),1)
115 			from ce_transaction_codes tc
116 			where  tc.bank_account_id = cd.bank_account_id
117 			and tc.trx_code = cd.trx_code)
118 	AND	cd.trx_code 	= sl.trx_code
119 	--AND	cd.payroll_payment_format_id = ppt.payment_type_id (+)
120 	AND	csh_statement_date
121 		between nvl(cd.start_date, csh_statement_date)
122 		and     nvl(cd.end_date, csh_statement_date)
123 	AND	sl.status 			= 'UNRECONCILED'
124 	AND	sl.statement_header_id 	= csh_statement_header_id
125 	and 	sh.statement_header_id = sl.statement_header_id
126 	and 	sh.bank_account_id = cd.bank_account_id
127 	ORDER BY order_stmt_lns1, order_stmt_lns2 desc;
128 	    --DECODE(sl.trx_type, 'NSF', 5, 'REJECTED', 5,
129 		--decode(nvl(cd.matching_against,'MISC'), 'MISC', 3, 'MS', 2, 1)),
130 		--decode(nvl(cd.matching_against,'MISC'), 'MISC', 0,
131 		--to_char(sl.trx_date, 'J')) desc;
132 
133 
134   CURSOR trx_code_cursor(csl_statement_line_id  NUMBER, csh_bank_account_id NUMBER) IS
135 	SELECT	cd.receivables_trx_id,
136 		cd.receipt_method_id,
137 		cd.create_misc_trx_flag,
138 		cd.matching_against,
139 		cd.correction_method,
140 		rm.name,
141 		decode(cd.PAYROLL_PAYMENT_FORMAT_ID, null, NVL(cd.reconcile_flag,'X'),
142    			decode(cd.reconcile_flag,'PAY', 'PAY_EFT', NVL(cd.reconcile_flag,'X'))),
143 		ppt.payment_type_name
144 	FROM	pay_payment_types ppt,
145 		ar_receipt_methods rm,
146 		ce_transaction_codes cd,
147 		ce_statement_lines sl
148 	WHERE	rm.receipt_method_id(+) 	= cd.receipt_method_id
149 	--AND	cd.transaction_code_id(+) 	= sl.trx_code_id
150 	AND	cd.trx_code (+)	= sl.trx_code
151 	AND	cd.payroll_payment_format_id = ppt.payment_type_id (+)
152 	AND	csh_statement_date
153 		between nvl(cd.start_date, csh_statement_date)
154 		and     nvl(cd.end_date, csh_statement_date)
155 	AND	sl.status 		= 'UNRECONCILED'
156 	AND	sl.statement_line_id 	= csl_statement_line_id
157 	AND	cd.bank_account_id 	= csh_bank_account_id
158 	ORDER BY cd.RECONCILIATION_SEQUENCE, DECODE(sl.trx_type, 'NSF', 5, 'REJECTED', 5,
159 		decode(nvl(cd.matching_against,'MISC'), 'MISC', 3, 'MS', 2, 1)),
160 		decode(nvl(cd.matching_against,'MISC'), 'MISC', 0,
161 		to_char(sl.trx_date, 'J')) desc;
162 
163 
164 
165   --
166   -- LOCKING CURSORS
167   --
168   -- Journals
169   --
170   CURSOR lock_101 (x_call_mode VARCHAR2, trx_rowid VARCHAR2) IS
171 	SELECT	jel.je_header_id
172 	FROM	gl_je_lines 			jel,
173 		ce_statement_reconcils_all 	rec
174 	WHERE	jel.rowid 				= trx_rowid
175 	AND	rec.reference_id(+) 			= jel.je_line_num
176 	AND	rec.je_header_id(+)			= jel.je_header_id
177 	AND	rec.reference_type(+)			= 'JE_LINE'
178 	AND	NVL(rec.status_flag,X_call_mode)	= x_call_mode
179 	AND	NVL(rec.current_record_flag,'Y') 	= 'Y'
180   FOR UPDATE OF jel.je_header_id NOWAIT;
181 
182   --
183   -- Checks
184   --
185   CURSOR lock_200 (X_call_mode VARCHAR2,trx_rowid VARCHAR2) IS
186 	SELECT	c.check_id
187 	FROM	ap_checks_all 			c,
188 		ce_statement_reconcils_all 	rec
189 	WHERE	c.rowid 				= trx_rowid
190 	AND	rec.reference_id(+)			= c.check_id
191 	AND	rec.reference_type(+)			= 'PAYMENT'
192 	AND	NVL(rec.status_flag,x_call_mode)	= X_call_mode
193 	AND	NVL(rec.current_record_flag,'Y') 	= 'Y'
194   FOR UPDATE OF c.check_id NOWAIT;
195 
196   --
197   -- Check clearing
198   --
199   CURSOR clear_lock_200 (X_call_mode VARCHAR2,trx_rowid	VARCHAR2) IS
200 	SELECT	c.check_id, c.status_lookup_code
201 	FROM 	ap_checks_all c
202 	WHERE	c.rowid = trx_rowid
203   FOR UPDATE OF c.check_id NOWAIT;
204 
205   --
206   -- Receipts
207   --
208   CURSOR lock_222 (X_call_mode VARCHAR2,trx_rowid VARCHAR2) IS
209 	SELECT	crh.cash_receipt_history_id,
210 		cr.cash_receipt_id,
211 		NVL(crh.current_record_flag,'N')
212 	FROM	ar_cash_receipts_all 			cr,
213 		ar_cash_receipt_history_all		crh,
214 		ce_statement_reconcils_all 	rec
215 	WHERE	cr.cash_receipt_id		= crh.cash_receipt_id
216 	AND	crh.rowid 			= trx_rowid
217 	AND	rec.reference_id(+)		= crh.cash_receipt_history_id
218 	AND	rec.reference_type(+) = decode(arp_cashbook.receipt_debit_memo_reversed(crh.cash_receipt_id), 'Y', 'DM REVERSAL', 'RECEIPT')
219 	AND	NVL(rec.status_flag,X_call_mode) = X_call_mode
220 	AND	NVL(rec.current_record_flag,'Y') = 'Y'
221 	FOR UPDATE OF crh.cash_receipt_history_id,
222 			cr.cash_receipt_id NOWAIT;
223 
224   --
225   -- XTR transactions
226   --
227 CURSOR lock_185 (x_call_mode VARCHAR2, trx_rowid VARCHAR2) IS
228 	select xtr.settlement_summary_id
229 	FROM	xtr_settlement_summary        xtr,
230 		ce_statement_reconcils_all 	rec
231 	WHERE	xtr.rowid 				= trx_rowid
232 	AND	rec.reference_id(+) 			= xtr.settlement_summary_id
233 	AND	rec.reference_type(+)			= 'XTR_LINE'
234 	AND	NVL(rec.status_flag,X_call_mode)	= x_call_mode
235 	AND	NVL(rec.current_record_flag,'Y') 	= 'Y'
236   FOR UPDATE OF xtr.settlement_summary_id NOWAIT;
237 
238 
239   --
240   -- Receipts clearing
241   --
242   CURSOR clear_lock_222 (X_call_mode VARCHAR2,trx_rowid VARCHAR2) IS
243 	SELECT	crh.cash_receipt_history_id,
244 		cr.cash_receipt_id,
245 		NVL(crh.current_record_flag,'N')
246 	FROM	ar_cash_receipts_all 		cr,
247 		ar_cash_receipt_history_all	crh
248 	WHERE	cr.cash_receipt_id		= crh.cash_receipt_id
249 	AND	crh.rowid 			= trx_rowid
250 	FOR UPDATE OF crh.cash_receipt_history_id,
251 			  cr.cash_receipt_id NOWAIT;
252 
253   --
254   -- Statement lines
255   --
256   CURSOR lock_260 (X_call_mode VARCHAR2,trx_rowid VARCHAR2) IS
257 	SELECT	cl.statement_line_id
258 	FROM	ce_statement_lines                   cl,
259 		ce_statement_reconcils_all         rec
260 	WHERE	cl.rowid                             = trx_rowid
261 	AND	rec.reference_id(+)                  = cl.statement_line_id
262 	AND	rec.reference_type(+)                = 'STATEMENT'
263 	AND	NVL(rec.status_flag,x_call_mode)     = X_call_mode
264 	AND	NVL(rec.current_record_flag,'Y')     = 'Y'
265   FOR UPDATE OF cl.statement_line_id NOWAIT;
266 
267   --
268   -- Statement line clearing
269   --
270   CURSOR clear_lock_260 (X_call_mode VARCHAR2,trx_rowid VARCHAR2) IS
271 	SELECT	cl.statement_line_id
272 	FROM	ce_statement_lines              cl
273 	WHERE	cl.rowid                        = trx_rowid
274   FOR UPDATE OF cl.statement_line_id NOWAIT;
275 
276   --
277   -- cashflow transaction
278   --
279   CURSOR lock_260_cf (X_call_mode VARCHAR2,trx_rowid VARCHAR2) IS
280 	SELECT	cc.cashflow_id
281 	FROM	ce_cashflows		cc,
282 		ce_statement_reconcils_all         rec
283 	WHERE	cc.rowid                             = trx_rowid
284 	AND	rec.reference_id(+)                  = cc.cashflow_id
285 	AND	rec.reference_type(+)                = 'CASHFLOW'
286 	AND	NVL(rec.status_flag,x_call_mode)     = X_call_mode
287 	AND	NVL(rec.current_record_flag,'Y')     = 'Y'
288   FOR UPDATE OF cc.cashflow_id NOWAIT;
289 
290   --
291   -- cashflow clearing
292   --
293   CURSOR clear_lock_260_cf (X_call_mode VARCHAR2,trx_rowid VARCHAR2) IS
294 	SELECT	cc.cashflow_id
295 	FROM	ce_cashflows		cc
296 	WHERE	cc.rowid                        = trx_rowid
297   FOR UPDATE OF cc.cashflow_id NOWAIT;
298 
299   --
300   -- Payroll
301   --
302   CURSOR lock_801 (X_call_mode VARCHAR2,trx_rowid VARCHAR2) IS
303 	SELECT	paa.assignment_action_id
304 	FROM	pay_assignment_actions		paa,
305 		ce_statement_reconcils_all	rec
306 	WHERE	paa.rowid                            = trx_rowid
307 	AND	rec.reference_id(+)                  = paa.assignment_action_id
308 	AND	rec.reference_type(+)                = 'PAY'
309 	AND	NVL(rec.status_flag,x_call_mode)     = X_call_mode
310 	AND	NVL(rec.current_record_flag,'Y')     = 'Y'
311   FOR UPDATE OF paa.assignment_action_id NOWAIT;
312 
313   --
314   -- Payroll line clearing
315   --
316   CURSOR clear_lock_801 (X_call_mode VARCHAR2,trx_rowid VARCHAR2) IS
317 	SELECT	paa.assignment_action_id
318 	FROM	pay_assignment_actions paa
319 	WHERE	paa.rowid = trx_rowid
320   FOR UPDATE OF paa.assignment_action_id NOWAIT;
321 
322   --
323   -- Remittance batches
324   --
325   CURSOR LOCK_BATCH_RECEIPTS (trx_rowid VARCHAR2) IS
326 	SELECT	crh.cash_receipt_history_id,
327 		cr.cash_receipt_id,
328 		b.batch_id batch_id
329 	FROM	AR_CASH_RECEIPTS_all CR,
330 		AR_CASH_RECEIPT_HISTORY_all CRH,
331 		AR_CASH_RECEIPT_HISTORY_all CRH2,
332 		AR_BATCHES_all B
333 	WHERE	b.rowid = trx_rowid
334 	AND	crh.cash_receipt_history_id = decode(crh.batch_id,
335 			null, crh2.reversal_cash_receipt_hist_id,
336 			crh2.cash_receipt_history_id)
337 	AND	nvl(crh.status, 'REMITTED') <> 'REVERSED'
338 	AND	crh.cash_receipt_id = crh2.cash_receipt_id
339 	AND	cr.cash_receipt_id = crh.cash_receipt_id
340 	AND	crh2.batch_id = b.batch_id
341   FOR UPDATE OF crh.cash_receipt_history_id,
342 		cr.cash_receipt_id,
343 		b.batch_id NOWAIT;
344 
345   CURSOR Receipt_Amounts (X_batch_id NUMBER) IS
346 	SELECT	SUM(a.bank_account_amount)
347 	FROM	ce_222_txn_for_batch_v a
348 	WHERE	a.batch_id = x_batch_id
349 	AND	nvl(a.status, 'REMITTED') <> 'REVERSED';
350 
351   --
352   -- Payment batches
353   --
354   CURSOR LOCK_BATCH_CHECKS (trx_rowid VARCHAR2) IS
355 	SELECT	c.check_id,
356 		b.PAYMENT_INSTRUCTION_ID
357 	FROM	AP_CHECKS_all C,
358 		iby_pay_instructions_all  B
359 	WHERE	c.PAYMENT_INSTRUCTION_ID = b.PAYMENT_INSTRUCTION_ID AND
360 		b.rowid = trx_rowid
361 	AND	nvl(c.status_lookup_code, 'NEGOTIABLE') <> 'VOIDED'
362   FOR UPDATE OF c.check_id, b.PAYMENT_INSTRUCTION_ID NOWAIT;
363 
364 /* bug 5350073
365 	SELECT	c.check_id,
366 		b.checkrun_id
367 	FROM	AP_CHECKS_all C,
368 		AP_INVOICE_SELECTION_CRITERIA B
369 	WHERE	c.checkrun_id = b.checkrun_id AND
370 		b.rowid = trx_rowid
371 	AND	nvl(c.status_lookup_code, 'NEGOTIABLE') <> 'VOIDED'
372   FOR UPDATE OF c.check_id, b.checkrun_id NOWAIT;*/
373 
374 -- bug 5350073 ce_available_transactions_tmp is not populated when manually reconcile IBY batches
375   CURSOR CHECK_AMOUNTS (X_batch_id NUMBER) IS
376 	SELECT	SUM(bank_account_amount)
377 	FROM	CE_200_TRANSACTIONS_V
378 	--FROM	ce_available_transactions_tmp
379 	WHERE	batch_id = X_batch_id
380 	AND	nvl(status, 'NEGOTIABLE') <> 'VOIDED'
381 	AND	application_id = 200;
382 	--AND	NVL(reconciled_status_flag, 'N') = 'N';
383 
384 	/* for SEPA ER 6700007 begins */
385   CURSOR LOCK_GROUP_CHECKS (trx_rowid VARCHAR2,X_LOGICAL_GROUP_REFERENCE VARCHAR2) IS
386 	SELECT	ACA.check_id,
387 		b.PAYMENT_INSTRUCTION_ID
388 	FROM	AP_CHECKS_all ACA,
389 		iby_pay_instructions_all  B,
390 		iby_payments_all IPA
391 	WHERE	ACA.PAYMENT_INSTRUCTION_ID = b.PAYMENT_INSTRUCTION_ID AND
392 		b.rowid = trx_rowid
393 	AND	nvl(ACA.status_lookup_code, 'NEGOTIABLE') <> 'VOIDED'
394 	AND     IPA.PAYMENT_INSTRUCTION_ID  = b.PAYMENT_INSTRUCTION_ID
395 	AND     IPA.PAYMENT_ID = ACA.PAYMENT_ID
396 	AND      IPA.LOGICAL_GROUP_REFERENCE = X_LOGICAL_GROUP_REFERENCE
397   FOR UPDATE OF ACA.check_id, b.PAYMENT_INSTRUCTION_ID NOWAIT;
398 
399 
400   CURSOR CHECK_group_AMOUNTS (X_batch_id NUMBER,X_LOGICAL_GROUP_REFERENCE VARCHAR2) IS
401 	SELECT	SUM(bank_account_amount)
402 	FROM	CE_200_TRANSACTIONS_V catv
403 	WHERE	batch_id = X_batch_id
404 	AND	nvl(status, 'NEGOTIABLE') <> 'VOIDED'
405 	AND	application_id = 200
406      AND    EXISTS ( SELECT 1
407                     FROM iby_payments_all IPA ,AP_CHECKS_ALL ACA
408 		    WHERE ACA.CHECK_ID   =catv.trx_id
409 		      AND ACA.PAYMENT_INSTRUCTION_ID  = X_batch_id
410 		      AND IPA.PAYMENT_INSTRUCTION_ID  = X_batch_id
411 		      AND IPA.PAYMENT_ID = ACA.PAYMENT_ID
412 		      AND IPA.LOGICAL_GROUP_REFERENCE = X_LOGICAL_GROUP_REFERENCE);
413 
414 	/* for SEPA ER 6700007 ends */
415 
416   FUNCTION body_revision RETURN VARCHAR2 IS
417   BEGIN
418 	RETURN '$Revision: 120.62.12010000.7 $';
419   END body_revision;
420 
421   FUNCTION spec_revision RETURN VARCHAR2 IS
422   BEGIN
423 	RETURN G_spec_revision;
424   END spec_revision;
425 
426 /* --------------------------------------------------------------------
427 |  PRIVATE PROCEDURE                                                    |
428 |       set_<application_id>/all					|
429 |                                                                       |
430 |  HISTORY                                                              |
431 |       04-MAR-96        Kai Pigg		Created                 |
432  --------------------------------------------------------------------- */
433   PROCEDURE set_101 IS
434   BEGIN
435     CE_AUTO_BANK_MATCH.yes_101 := 1;
436   END set_101;
437 
438   PROCEDURE set_200 IS
439   BEGIN
440     CE_AUTO_BANK_MATCH.yes_200 := 1;
441   END set_200;
442 
443 
444   -- FOR SEPA ER 6700007
445   PROCEDURE set_200_GROUP IS
446   BEGIN
447     CE_AUTO_BANK_MATCH.yes_200_GROUP := 1;
448   END set_200_GROUP;
449 
450   PROCEDURE set_222 IS
451   BEGIN
452     CE_AUTO_BANK_MATCH.yes_222 := 1;
453   END set_222;
454 
455   PROCEDURE set_260 IS
456   BEGIN
457     CE_AUTO_BANK_MATCH.yes_260 := 1;
458   END set_260;
459 
460   PROCEDURE set_801 IS
461   BEGIN
462     CE_AUTO_BANK_MATCH.yes_801 := 1;
463   END set_801;
464 
465   PROCEDURE set_999 IS
466   BEGIN
467     CE_AUTO_BANK_MATCH.yes_999 := 1;
468   END set_999;
469 
470   PROCEDURE set_all IS
471   BEGIN
472     CE_AUTO_BANK_MATCH.yes_101 := 1;
473     CE_AUTO_BANK_MATCH.yes_200 := 1;
474     CE_AUTO_BANK_MATCH.yes_222 := 1;
475     CE_AUTO_BANK_MATCH.yes_260 := 1;
476     CE_AUTO_BANK_MATCH.yes_801 := 1;
477     CE_AUTO_BANK_MATCH.yes_999 := 1;
478     CE_AUTO_BANK_MATCH.yes_200_GROUP := 1;  -- FOR SEPA ER 6700007
479   END set_all;
480 
481   PROCEDURE set_inverse_rate(inverse_rate VARCHAR2) IS
482   BEGIN
483     CE_AUTO_BANK_MATCH.display_inverse_rate := inverse_rate;
484   END set_inverse_rate;
485 
486 /* ---------------------------------------------------------------------
487 |  PRIVATE PROCEDURE                                                    |
488 |       unset_<application_id>/all					|
489  --------------------------------------------------------------------- */
490   PROCEDURE unset_101 IS
491   BEGIN
492     CE_AUTO_BANK_MATCH.yes_101 := 0;
493   END unset_101;
494 
495   PROCEDURE unset_200 IS
496   BEGIN
497     CE_AUTO_BANK_MATCH.yes_200 := 0;
498   END unset_200;
499 
500  -- FOR SEPA ER 6700007
501   PROCEDURE unset_200_group IS
502   BEGIN
503     CE_AUTO_BANK_MATCH.yes_200_GROUP := 0;
504   END unset_200_group;
505 
506   PROCEDURE unset_222 IS
507   BEGIN
508     CE_AUTO_BANK_MATCH.yes_222 := 0;
509   END unset_222;
510 
511   PROCEDURE unset_260 IS
512   BEGIN
513     CE_AUTO_BANK_MATCH.yes_260 := 0;
514   END unset_260;
515 
516   PROCEDURE unset_801 IS
517   BEGIN
518     CE_AUTO_BANK_MATCH.yes_801 := 0;
519   END unset_801;
520 
521   PROCEDURE unset_999 IS
522   BEGIN
523     CE_AUTO_BANK_MATCH.yes_999 := 0;
524   END unset_999;
525 
526   PROCEDURE unset_all IS
527   BEGIN
528     CE_AUTO_BANK_MATCH.yes_101 := 0;
529     CE_AUTO_BANK_MATCH.yes_200 := 0;
530     CE_AUTO_BANK_MATCH.yes_222 := 0;
531     CE_AUTO_BANK_MATCH.yes_260 := 0;
532     CE_AUTO_BANK_MATCH.yes_801 := 0;
533     CE_AUTO_BANK_MATCH.yes_999 := 0;
534     CE_AUTO_BANK_MATCH.yes_200_GROUP :=  0;  -- FOR SEPA ER 6700007
535   END unset_all;
536 
537 /* --------------------------------------------------------------------
538 |  PRIVATE FUNCTIONS                                                    |
539 |       get_<application_id>						|
540  --------------------------------------------------------------------- */
541   FUNCTION get_101 RETURN NUMBER IS
542   BEGIN
543     RETURN CE_AUTO_BANK_MATCH.yes_101;
544   END get_101;
545 
546   FUNCTION get_200 RETURN NUMBER IS
547   BEGIN
548     RETURN CE_AUTO_BANK_MATCH.yes_200;
549   END get_200;
550 
551 -- FOR SEPA ER 6700007
552    FUNCTION get_200_GROUP RETURN NUMBER IS
553   BEGIN
554     RETURN CE_AUTO_BANK_MATCH.yes_200_GROUP;
555   END get_200_GROUP;
556 
557   FUNCTION get_222 RETURN NUMBER IS
558   BEGIN
559     RETURN CE_AUTO_BANK_MATCH.yes_222;
560   END get_222;
561 
562   FUNCTION get_260 RETURN NUMBER IS
563   BEGIN
564     RETURN CE_AUTO_BANK_MATCH.yes_260;
565   END get_260;
566 
567   FUNCTION get_801 RETURN NUMBER IS
568   BEGIN
569     RETURN CE_AUTO_BANK_MATCH.yes_801;
570   END get_801;
571 
572   FUNCTION get_999 RETURN NUMBER IS
573   BEGIN
574     RETURN CE_AUTO_BANK_MATCH.yes_999;
575   END get_999;
576 
577   FUNCTION get_security_account_type(p_account_type VARCHAR2) RETURN VARCHAR2 IS
578     v_acct_type		VARCHAR2(25);
579   BEGIN
580     v_acct_type :=  FND_PROFILE.VALUE_WNPS('CE_BANK_ACCOUNT_SECURITY_ACCESS');
581     IF (v_acct_type = 'ALL' AND p_account_type <> 'EXTERNAL') THEN
582       v_acct_type := p_account_type;
583     END IF;
584     RETURN v_acct_type;
585   END get_security_account_type;
586 
587   FUNCTION get_inverse_rate RETURN VARCHAR2 IS
588   BEGIN
589     RETURN CE_AUTO_BANK_MATCH.display_inverse_rate;
590   END get_inverse_rate;
591 
592 /* --------------------------------------------------------------------
593 |  PRIVATE FUNCTION							|
594 |       ce_check_numeric       						|
595 |									|
596 |  DESCRIPTION								|
597 |	check if check_value is a numeric value				|
598 |	  - check if the bank_trx_number is numeric or alphanumeric	|
599 |	  - value such as '10084325 23580029' will be considered as 	|
600 |	       alphanumeric because of the space in between the two #	|
601 |									|
602 |  RETURN								|
603 |       0 - numeric value						|
604 |       1 - alphanumeric value						|
605 |									|
606 |  CALLED BY								|
607 |       trx_match							|
608  --------------------------------------------------------------------- */
609   /* check if check_value is a numeric value */
610   FUNCTION ce_check_numeric(check_value VARCHAR2,
611                                     pos_from NUMBER,
612                                     pos_for NUMBER)  RETURN VARCHAR2  IS
613       num_check NUMBER;
614   BEGIN
615       num_check  := TO_NUMBER(substr(check_value,pos_from,pos_for));
616       RETURN('0');
617           EXCEPTION
618     WHEN OTHERS THEN
619       RETURN('1');
620 
621   END ce_check_numeric;
622 
623 /* ---------------------------------------------------------------------
624 |  PRIVATE PROCEDURE							|
625 |	set_single_org							|
626 |									|
627 |  DESCRIPTION								|
628 |	set to single org for AR/AP processing when
629 |	  CE_AUTO_BANK_REC.G_org_id is null
630 |       - always use base table (_ALL) for AP/AR table when try to find
631 |         a match.  Our ce_security_profile_gt will handle the security	|
632 |	- set single org is needed when call AR/AP API, since we cannot
633 | 	  pass the org_id
634 |  CALLED BY								|
635 |	stmtline_match,	match_engine, match_process 			|
636  --------------------------------------------------------------------- */
637 
638 PROCEDURE set_single_org(x_org_id	number) IS
639 current_org_id		number;
640 BEGIN
641   cep_standard.debug('>>CE_AUTO_BANK_MATCH.set_single_org  x_org_id =' || x_org_id);
642 
643     select mo_global.GET_CURRENT_ORG_ID
644     into current_org_id
645     from dual;
646 
647     cep_standard.debug('current_org_id =' ||current_org_id );
648 
649     -- bug 3782741 set single org, since AR will not allow org_id to be passed
650     --IF CE_AUTO_BANK_MATCH.bau_org_id is not null THEN
651     --IF CE_AUTO_BANK_REC.G_org_id is not null THEN (this is set at ceabrdrb ce_auto_bank_rec)
652     IF (x_org_id is not null) THEN
653       IF  ((current_org_id is null) or (x_org_id <> current_org_id )) THEN
654         mo_global.set_policy_context('S',x_org_id);
655         cep_standard.debug('set current_org_id to ' ||x_org_id );
656       END IF;
657     END IF;
658 
659   cep_standard.debug('<<CE_AUTO_BANK_MATCH.set_single_org');
660 EXCEPTION
661   WHEN OTHERS THEN
662     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.set_single_org' );
663     RAISE;
664 END set_single_org;
665 /* ---------------------------------------------------------------------
666 |  PRIVATE PROCEDURE							|
667 |	set_multi_org							|
668 |									|
669 |  DESCRIPTION								|
670 |	set to multi org after processing AR/AP
671 |  CALLED BY								|
672 |									|
673  --------------------------------------------------------------------- */
674 
675 PROCEDURE set_multi_org(x_org_id	number) IS
676 
677 BEGIN
678   cep_standard.debug('>>CE_AUTO_BANK_MATCH.set_multi_org  x_org_id =' || x_org_id);
679 
680   MO_GLOBAL.init('CE');
681 
682   cep_standard.debug('<<CE_AUTO_BANK_MATCH.set_multi_org');
683 EXCEPTION
684   WHEN OTHERS THEN
685     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.set_multi_org' );
686     RAISE;
687 END set_multi_org;
688 
689 /* ----------------------------------------------------------------------
690 |  PUBLIC PROCEDURE                                                     |
691 |       get_receivables_org_id                                          |
692 |                                                                       |
693 |  DESCRIPTION                                                          |
694 |       find the org_id for a RECEIVABLES_TRX_ID      			|
695 |  CALL BY
696 |       create_misc_trx
697  --------------------------------------------------------------------- */
698 PROCEDURE get_receivables_org_id (X_ORG_ID OUT NOCOPY NUMBER ) IS
699 x_receivables_trx_id number;
700 
701 BEGIN
702   cep_standard.debug( '>>CE_AUTO_BANK_MATCH.get_receivables_org_id' );
703   cep_standard.debug( 'CE_AUTO_BANK_MATCH.csl_receivables_trx_id= '|| CE_AUTO_BANK_MATCH.csl_receivables_trx_id||
704 			',CE_AUTO_BANK_MATCH.trx_org_id='||CE_AUTO_BANK_MATCH.trx_org_id  );
705 
706    x_receivables_trx_id :=  nvl(CE_AUTO_BANK_MATCH.csl_receivables_trx_id,
707 				CE_AUTO_BANK_REC.G_receivables_trx_id);
708 
709   cep_standard.debug( 'x_receivables_trx_id= '|| x_receivables_trx_id);
710 
711 -- bug 5722367 removed the reference to ar_receivables_trx_all table to ar_receivables_trx
712   if (x_receivables_trx_id is not null) THEN
713     select org_id
714     into X_ORG_ID
715     from AR_RECEIVABLES_TRX
716     where RECEIVABLES_TRX_ID = x_receivables_trx_id;
717 
718     cep_standard.debug( 'x_ORG_ID= '|| X_ORG_ID);
719 
720   ELSE
721     cep_standard.debug('receivables_trx_id is missing');
722     CE_RECONCILIATION_ERRORS_PKG.insert_row(
723 	   CE_AUTO_BANK_MATCH.csh_statement_header_id,
724 	   CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_MISSING_REC_ACT_ID');
725 
726   END IF;
727 
728   cep_standard.debug( '<<CE_AUTO_BANK_MATCH.get_receivables_org_id' );
729 EXCEPTION
730   WHEN NO_DATA_FOUND THEN
731     cep_standard.debug('receivables_trx_id does not exists');
732     CE_RECONCILIATION_ERRORS_PKG.insert_row(
733 	   CE_AUTO_BANK_MATCH.csh_statement_header_id,
734 	   CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_NO_REC_ACT_ID');
735   WHEN OTHERS THEN
736     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.get_receivables_org_id' );
737     RAISE;
738 END get_receivables_org_id;
739 
740 /* --------------------------------------------------------------------
741 |  PRIVATE FUNCTION							|
742 |       match_oi_trx							|
743 |									|
744 |  DESCRIPTION								|
745 |	Matching open interface transactions by date, currency and	|
746 |	amount.								|
747 |									|
748 |  CALLED BY								|
749 |       trx_match							|
750  --------------------------------------------------------------------- */
751 PROCEDURE match_oi_trx(
752                 tx_type VARCHAR2,
753                 tx_curr VARCHAR2,
754                 tx_match_amount NUMBER,
755                 precision NUMBER,
756                 no_of_matches OUT NOCOPY NUMBER) IS
757 BEGIN
758   cep_standard.debug( '>>CE_AUTO_BANK_MATCH.match_oi_trx' );
759 
760 -- match xtr transaction first then non-xtr OI trx
761 -- bug 4914608 some bank acct used by xtr might not have xtr_use_enable_flag = Y
762   IF ((CE_AUTO_BANK_REC.G_legal_entity_id is not null) or
763   --IF ((CE_AUTO_BANK_MATCH.bau_legal_entity_id is not null) AND
764 	(CE_AUTO_BANK_MATCH.bau_xtr_use_enable_flag = 'Y'))  THEN
765   cep_standard.debug( ' use ce_185_transactions_v CE_AUTO_BANK_MATCH.csl_trx_date='|| CE_AUTO_BANK_MATCH.csl_trx_date);
766     SELECT  catv.trx_id,
767           catv.cash_receipt_id,
768           catv.row_id,
769           catv.trx_date,
770           catv.currency_code,
771           catv.bank_account_amount,
772           catv.base_amount,
773           catv.status,
774           nvl(catv.amount_cleared,0),
775           catv.trx_type,
776           1,
777           catv.trx_currency_type,
778           catv.amount,
779           catv.clearing_trx_type,
780           catv.exchange_rate,
781           catv.exchange_rate_date,
782           catv.exchange_rate_type,
783 	  catv.legal_entity_id,
784  	  catv.CE_BANK_ACCT_USE_ID,
785           catv.seq_id
786     INTO    CE_AUTO_BANK_MATCH.trx_id,
787           CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
788           CE_AUTO_BANK_MATCH.trx_rowid,
789           CE_AUTO_BANK_MATCH.trx_date,
790           CE_AUTO_BANK_MATCH.trx_currency_code,
791           CE_AUTO_BANK_MATCH.trx_amount,
792           CE_AUTO_BANK_MATCH.trx_base_amount,
793           CE_AUTO_BANK_MATCH.trx_status,
794           CE_AUTO_BANK_MATCH.trx_cleared_amount,
795           CE_AUTO_BANK_MATCH.csl_match_type,
796           no_of_matches,
797           CE_AUTO_BANK_MATCH.trx_currency_type,
798           CE_AUTO_BANK_MATCH.trx_curr_amount,
799           CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
800           CE_AUTO_BANK_MATCH.trx_exchange_rate,
801           CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
802           CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
803           CE_AUTO_BANK_MATCH.trx_legal_entity_id,
804  	  CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
805 	  CE_AUTO_BANK_MATCH.gt_seq_id
806     --FROM    ce_185_transactions_v catv
807     FROM    ce_available_transactions_tmp catv
808     WHERE   catv.trx_type = tx_type
809     AND	catv.legal_entity_id = nvl(CE_AUTO_BANK_REC.G_legal_entity_id, catv.legal_entity_id)
810     --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
811     AND     catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
812     AND     to_char(catv.trx_date,'YYYY/MM/DD') =
813                 to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
814     AND     catv.currency_code = tx_curr
815     AND     round(catv.amount, precision) = tx_match_amount
816     AND	    catv.application_id = 185
817     AND	    NVL(catv.reconciled_status_flag, 'N') = 'N';
818   END IF;
819 
820   -- no xtr match from above query
821   IF ( CE_AUTO_BANK_MATCH.trx_id is null) THEN
822   cep_standard.debug( ' use ce_999_transactions_v ' );
823 
824     SELECT  catv.trx_id,
825           catv.cash_receipt_id,
826           catv.row_id,
827           catv.trx_date,
828           catv.currency_code,
829           catv.bank_account_amount,
830           catv.base_amount,
831           catv.status,
832           nvl(catv.amount_cleared,0),
833           catv.trx_type,
834           1,
835           catv.trx_currency_type,
836           catv.amount,
837           catv.clearing_trx_type,
838           catv.exchange_rate,
839           catv.exchange_rate_date,
840           catv.exchange_rate_type,
841 	  catv.org_id,
842 	  catv.legal_entity_id,
843  	  catv.CE_BANK_ACCT_USE_ID,
844 	  catv.seq_id
845     INTO    CE_AUTO_BANK_MATCH.trx_id,
846           CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
847           CE_AUTO_BANK_MATCH.trx_rowid,
848           CE_AUTO_BANK_MATCH.trx_date,
849           CE_AUTO_BANK_MATCH.trx_currency_code,
850           CE_AUTO_BANK_MATCH.trx_amount,
851           CE_AUTO_BANK_MATCH.trx_base_amount,
852           CE_AUTO_BANK_MATCH.trx_status,
853           CE_AUTO_BANK_MATCH.trx_cleared_amount,
854           CE_AUTO_BANK_MATCH.csl_match_type,
855           no_of_matches,
856           CE_AUTO_BANK_MATCH.trx_currency_type,
857           CE_AUTO_BANK_MATCH.trx_curr_amount,
858           CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
859           CE_AUTO_BANK_MATCH.trx_exchange_rate,
860           CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
861           CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
862           CE_AUTO_BANK_MATCH.trx_org_id,
863           CE_AUTO_BANK_MATCH.trx_legal_entity_id,
864  	  CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
865 	  CE_AUTO_BANK_MATCH.gt_seq_id
866     --FROM    ce_999_transactions_v catv
867     FROM    ce_available_transactions_tmp catv
868     WHERE   catv.trx_type = tx_type
869     --AND	catv.org_id = CE_AUTO_BANK_REC.G_org_id
870     --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
871     AND     catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
872     AND     to_char(catv.trx_date,'YYYY/MM/DD') =
873                 to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
874     AND     catv.currency_code = tx_curr
875     AND     round(catv.amount, precision) = tx_match_amount
876     AND	    catv.application_id = 999
877     AND     NVL(catv.reconciled_status_flag, 'N') = 'N';
878   END IF;
879   cep_standard.debug( '<<CE_AUTO_BANK_MATCH.match_oi_trx' );
880 END match_oi_trx;
881 
882 /* --------------------------------------------------------------------
883 |  PRIVATE FUNCTION                                                     |
884 |       validate_exchange_details                                       |
885 |                                                                       |
886 |  DESCRIPTION                                                          |
887 |       If the user selects the exhange rate type of 'User', they must  |
888 |       also provide the exchange rate.  If the type is anything other  |
889 |       than user, the exchange rate date must be provided.             |
890 |                                                                       |
891 |  CALLED BY                                                            |
892 |       trx_validation                                                  |
893  --------------------------------------------------------------------- */
894 FUNCTION validate_exchange_details RETURN BOOLEAN IS
895   error_found 		BOOLEAN;
896   x_exchange_rate 	GL_DAILY_RATES.conversion_rate%TYPE;
897   fixed_relation  	BOOLEAN;
898   curr_relation		VARCHAR2(30);
899 fixed_relation_temp     varchar2(30);
900 BEGIN
901 
902   cep_standard.debug('>>CE_AUTO_BANK_MATCH.validate_exchange_details');
903   error_found := FALSE;
904 
905   --
906   -- TRX Currency needs to be the same that the SL currency
907   --
908 
909   IF (CE_AUTO_BANK_MATCH.csl_currency_code IS NULL) THEN
910     IF (CE_AUTO_BANK_MATCH.trx_currency_type = 'BANK') THEN
911       CE_AUTO_BANK_MATCH.csl_currency_code :=
912 		CE_AUTO_BANK_MATCH.aba_bank_currency;
913     ELSIF (CE_AUTO_BANK_MATCH.trx_currency_type = 'FOREIGN') THEN
914       CE_AUTO_BANK_MATCH.csl_currency_code :=
915 		CE_AUTO_BANK_MATCH.trx_currency_code;
916     END IF;
917   END IF;
918 
919   IF (CE_AUTO_BANK_MATCH.trx_currency_code <>
920 	NVL(CE_AUTO_BANK_MATCH.csl_currency_code,
921 	    CE_AUTO_BANK_MATCH.trx_currency_code)) THEN
922   cep_standard.debug('Inconsistent currencies');
923 
924     CE_RECONCILIATION_ERRORS_PKG.insert_row(
925 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
926 	CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_DIFFERENT_CURRENCY');
927     return(FALSE);
928   END IF;
929 
930   --
931   -- When Fixed relationship is found, exchange info is not mandatory.
932   --
933   cep_standard.debug('CE_AUTO_BANK_REC.G_functional_currency '||CE_AUTO_BANK_REC.G_functional_currency ||
934 			', CE_AUTO_BANK_MATCH.csl_currency_code ' ||CE_AUTO_BANK_MATCH.csl_currency_code);
935 
936   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_exchange_rate_date '||CE_AUTO_BANK_MATCH.csl_exchange_rate_date ||
937 			', CE_AUTO_BANK_MATCH.csl_trx_date ' ||CE_AUTO_BANK_MATCH.csl_trx_date);
938 
939   BEGIN
940 	gl_currency_api.get_relation(CE_AUTO_BANK_REC.G_functional_currency,
941 			     CE_AUTO_BANK_MATCH.csl_currency_code,
942 			     nvl(CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
943 					 CE_AUTO_BANK_MATCH.csl_trx_date),
944 			     fixed_relation,
945 			     curr_relation);
946   EXCEPTION
947   WHEN OTHERS THEN
948 	cep_standard.debug('Cannot find relationship for the give curr');
949 	fixed_relation := FALSE;
950 	curr_relation  := 'OTHER';
951   END;
952   IF fixed_relation THEN
953 	fixed_relation_temp := 'TRUE';
954   ELSE
955 	fixed_relation_temp := 'FALSE';
956   END IF;
957   cep_standard.debug('fixed_relation_temp ' ||fixed_relation_temp || ', curr_relation '||curr_relation);
958 
959   IF (fixed_relation) THEN
960     CE_AUTO_BANK_MATCH.csl_exchange_rate_type	:= 'EMU FIXED';
961     CE_AUTO_BANK_MATCH.csl_exchange_rate_date	:=
962 			     nvl(CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
963 				 CE_AUTO_BANK_MATCH.csl_trx_date);
964   ELSE -- non-emu
965 
966     -- If we have a foreign currency trx and line does not have ANY xrate info
967     -- we calculate the exchange rate and provide that as 'User' rate
968     -- (International)
969 
970     IF (CE_AUTO_BANK_MATCH.trx_currency_type = 'FOREIGN') AND
971 	(CE_AUTO_BANK_MATCH.csl_exchange_rate_type 	IS NULL AND
972 	 CE_AUTO_BANK_MATCH.csl_exchange_rate 		IS NULL AND
973 	 CE_AUTO_BANK_MATCH.csl_exchange_rate_date 	IS NULL) THEN
974 
975       CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
976 	  CE_AUTO_BANK_MATCH.csl_trx_date;
977       CE_AUTO_BANK_MATCH.csl_exchange_rate_type := 'User';
978       CE_AUTO_BANK_MATCH.csl_exchange_rate :=
979 	  CE_AUTO_BANK_MATCH.trx_amount/CE_AUTO_BANK_MATCH.trx_curr_amount;
980 			return(TRUE);
981 
982     ELSIF (CE_AUTO_BANK_MATCH.trx_currency_type = 'BANK' AND
983 	CE_AUTO_BANK_MATCH.csl_exchange_rate_type	IS NULL AND
984 	CE_AUTO_BANK_MATCH.csl_exchange_rate		IS NULL AND
985 	CE_AUTO_BANK_MATCH.csl_exchange_rate_date	IS NULL AND
986 	CE_AUTO_BANK_MATCH.csl_original_amount		IS NULL) THEN
987 
988       cep_standard.debug('++CE_AUTO_BANK_REC.G_exchange_rate_type = ' ||
989 	  CE_AUTO_BANK_REC.G_exchange_rate_type);
990       cep_standard.debug('++CE_AUTO_BANK_REC.G_exchange_rate_date = ' ||
991 	  CE_AUTO_BANK_REC.G_exchange_rate_date);
992 
993       IF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type = 'CASHFLOW') THEN
994         CE_AUTO_BANK_MATCH.csl_exchange_rate_type := CE_AUTO_BANK_REC.G_CASHFLOW_EXCHANGE_RATE_TYPE;
995       ELSE
996         CE_AUTO_BANK_MATCH.csl_exchange_rate_type := CE_AUTO_BANK_REC.G_exchange_rate_type;
997 
998       END IF;
999 
1000       IF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type = 'CASHFLOW') THEN
1001 	IF (CE_AUTO_BANK_MATCH.trx_reference_type = 'STMT')  THEN  -- JEC
1002 	  IF (CE_AUTO_BANK_REC.G_BSC_EXCHANGE_DATE_TYPE = 'CFD') THEN
1003 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1004 					CE_AUTO_BANK_MATCH.trx_date;
1005 	  ELSIF (CE_AUTO_BANK_REC.G_BSC_EXCHANGE_DATE_TYPE = 'CLD') THEN
1006 		/* The statement line trx date is used for the cleared date in autoReconciliation
1007 		So, we will use the matching transaction cleared date  when the cashflow exchange
1008 		date type is set to use the cleared date.  If there is no cleared date, then the
1009 		statement line transaction date will be used. */
1010 
1011 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1012 			NVL(CE_AUTO_BANK_MATCH.trx_cleared_date,CE_AUTO_BANK_MATCH.csl_trx_date);
1013 			--NVL(CE_AUTO_BANK_MATCH.trx_cleared_date,CE_AUTO_BANK_MATCH.trx_date);
1014 	  ELSIF (CE_AUTO_BANK_REC.G_BSC_EXCHANGE_DATE_TYPE = 'BSD') THEN
1015 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1016 					CE_AUTO_BANK_MATCH.csh_statement_date;
1017 	  ELSIF (CE_AUTO_BANK_REC.G_BSC_EXCHANGE_DATE_TYPE = 'BSG') THEN
1018 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1019 					CE_AUTO_BANK_MATCH.csh_statement_gl_date;
1020 	  END IF;
1021 
1022 
1023 	ELSE  -- BAT
1024 	  IF (CE_AUTO_BANK_REC.G_BAT_EXCHANGE_DATE_TYPE = 'CFD') THEN
1025 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1026 					CE_AUTO_BANK_MATCH.trx_date;
1027 	  ELSIF (CE_AUTO_BANK_REC.G_BAT_EXCHANGE_DATE_TYPE = 'AVD') THEN
1028 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1029 					CE_AUTO_BANK_MATCH.trx_value_date;
1030 	  ELSIF (CE_AUTO_BANK_REC.G_BAT_EXCHANGE_DATE_TYPE = 'CLD') THEN
1031 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1032 			NVL(CE_AUTO_BANK_MATCH.trx_cleared_date,CE_AUTO_BANK_MATCH.csl_trx_date);
1033 			--NVL(CE_AUTO_BANK_MATCH.trx_cleared_date,CE_AUTO_BANK_MATCH.trx_date);
1034 	  ELSIF (CE_AUTO_BANK_REC.G_BAT_EXCHANGE_DATE_TYPE = 'BSD') THEN
1035 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1036 					CE_AUTO_BANK_MATCH.csh_statement_date;
1037 	  ELSIF (CE_AUTO_BANK_REC.G_BAT_EXCHANGE_DATE_TYPE = 'BSG') THEN
1038 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1039 					CE_AUTO_BANK_MATCH.csh_statement_gl_date;
1040           ELSIF (CE_AUTO_BANK_REC.G_BAT_EXCHANGE_DATE_TYPE = 'SLD') THEN
1041 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1042 					CE_AUTO_BANK_MATCH.csl_trx_date;
1043 	  ELSIF (CE_AUTO_BANK_REC.G_BAT_EXCHANGE_DATE_TYPE = 'TRX') THEN
1044 	    CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1045 					CE_AUTO_BANK_MATCH.trx_deposit_date;
1046 	  END IF;
1047 
1048         END IF;
1049       ELSE  -- not cashflow
1050 
1051         IF (CE_AUTO_BANK_REC.G_exchange_rate_date = 'SLD') THEN
1052 	  CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1053 		CE_AUTO_BANK_MATCH.csl_trx_date;
1054         ELSIF (CE_AUTO_BANK_REC.G_exchange_rate_date = 'BSD') THEN
1055 	  CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1056 		CE_AUTO_BANK_MATCH.csh_statement_date;
1057         ELSIF (CE_AUTO_BANK_REC.G_exchange_rate_date = 'BGD') THEN
1058 	  CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1059 		CE_AUTO_BANK_MATCH.csh_statement_gl_date;
1060         ELSIF (CE_AUTO_BANK_REC.G_exchange_rate_date = 'TCD') THEN
1061 	  CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1062 		CE_AUTO_BANK_MATCH.trx_date;
1063         ELSIF (CE_AUTO_BANK_REC.G_exchange_rate_date = 'TXD') THEN
1064 	  CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1065 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date;
1066         ELSIF (CE_AUTO_BANK_REC.G_exchange_rate_date = 'TGD') THEN
1067           CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1068 		CE_AUTO_BANK_MATCH.trx_gl_date;
1069         END IF;
1070 
1071 
1072       END IF;
1073 
1074       CE_AUTO_BANK_MATCH.foreign_exchange_defaulted := 'Y';
1075 
1076     ELSE
1077 	  cep_standard.debug('MATCH.CSL_xtype: '||CE_AUTO_BANK_MATCH.csl_exchange_rate_type);
1078 	  cep_standard.debug('MATCH.CSL_xdate: '||CE_AUTO_BANK_MATCH.csl_exchange_rate_date);
1079 
1080       --
1081       -- line must have either xrate, original_amount or (xdate+xtype)
1082       --
1083       IF (CE_AUTO_BANK_MATCH.csl_exchange_rate_date IS NULL or
1084 	  CE_AUTO_BANK_MATCH.csl_exchange_rate_type IS NULL) THEN
1085 
1086         IF (CE_AUTO_BANK_MATCH.csl_exchange_rate IS NOT NULL) or
1087 	   (CE_AUTO_BANK_MATCH.csl_original_amount IS NOT NULL) THEN
1088 
1089 	  CE_AUTO_BANK_MATCH.csl_exchange_rate_date :=
1090 		CE_AUTO_BANK_MATCH.csl_trx_date;
1091 	  CE_AUTO_BANK_MATCH.csl_exchange_rate_type := 'User';
1092 
1093 	  cep_standard.debug('xtype: '||CE_AUTO_BANK_MATCH.csl_exchange_rate_type);
1094 	  cep_standard.debug('xdate: '||CE_AUTO_BANK_MATCH.csl_exchange_rate_date);
1095 
1096 	ELSE
1097 
1098 	  IF (CE_AUTO_BANK_MATCH.csl_exchange_rate_type IS NULL) THEN
1099 	    CE_RECONCILIATION_ERRORS_PKG.insert_row(
1100 		CE_AUTO_BANK_MATCH.csh_statement_header_id,
1101 		CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_NO_RATE_TYPE');
1102 	  ELSIF (CE_AUTO_BANK_MATCH.csl_exchange_rate_date IS NULL) THEN
1103 	    CE_RECONCILIATION_ERRORS_PKG.insert_row(
1104 		CE_AUTO_BANK_MATCH.csh_statement_header_id,
1105 		CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_NO_RATE_DATE');
1106 	  END IF;
1107 	  return(FALSE);
1108 
1109 	END IF;
1110 
1111       END IF;
1112 
1113     END IF; -- foreign curr
1114 
1115   END IF; -- fixed_relation
1116 
1117   --
1118   -- Rate Validation for emu and non-emu
1119   --
1120   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_exchange_rate_type ='||CE_AUTO_BANK_MATCH.csl_exchange_rate_type);
1121 
1122   IF (CE_AUTO_BANK_MATCH.csl_exchange_rate_type = 'User') THEN
1123 
1124     IF (CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL) THEN
1125       IF (CE_AUTO_BANK_MATCH.trx_currency_type = 'BANK') THEN
1126 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
1127 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
1128 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,
1129 		'CE_INCOMPLETE_USER_RATE');
1130 	return(FALSE);
1131       ELSE
1132 	CE_AUTO_BANK_MATCH.csl_exchange_rate :=
1133 	    CE_AUTO_BANK_MATCH.csl_amount/trx_curr_amount;
1134       END IF;
1135     END IF;
1136 
1137   ELSE
1138 
1139     BEGIN
1140   cep_standard.debug('CE_AUTO_BANK_REC.G_set_of_books_id = '||CE_AUTO_BANK_REC.G_set_of_books_id ||
1141 			', CE_AUTO_BANK_MATCH.trx_currency_code = '|| CE_AUTO_BANK_MATCH.trx_currency_code );
1142   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_exchange_rate_date = '|| CE_AUTO_BANK_MATCH.csl_exchange_rate_date ||
1143 			', CE_AUTO_BANK_MATCH.csl_exchange_rate_type = '|| CE_AUTO_BANK_MATCH.csl_exchange_rate_type);
1144 
1145       x_exchange_rate := gl_currency_api.get_rate(
1146       x_set_of_books_id	=> CE_AUTO_BANK_REC.G_set_of_books_id,
1147       x_from_currency	=> nvl(CE_AUTO_BANK_MATCH.trx_currency_code,CE_AUTO_BANK_MATCH.csl_currency_code),
1148       x_conversion_date	=> CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
1149       x_conversion_type => CE_AUTO_BANK_MATCH.csl_exchange_rate_type);
1150 
1151       cep_standard.debug('x_ex: '||x_exchange_rate);
1152       cep_standard.debug('csl_ex: '||CE_AUTO_BANK_MATCH.csl_exchange_rate);
1153 
1154       IF (CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL) THEN
1155 	CE_AUTO_BANK_MATCH.csl_exchange_rate := x_exchange_rate;
1156       END IF;
1157 
1158       IF (round(x_exchange_rate,9) =
1159 	  round(CE_AUTO_BANK_MATCH.csl_exchange_rate,9)) THEN
1160 	RETURN(TRUE);
1161       ELSE
1162 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
1163 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
1164 	    CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_OTHER_ERROR_RATE');
1165 	RETURN(FALSE);
1166       END IF;
1167 
1168     EXCEPTION
1169       WHEN OTHERS THEN
1170 	IF (SQL%NOTFOUND) THEN
1171 	  cep_standard.debug('No Rate for the given criteria');
1172 	--for bug 6786355 start
1173 	CE_AUTO_BANK_MATCH.csl_exchange_rate_type := null;
1174 	CE_AUTO_BANK_MATCH.csl_exchange_rate	    := null;
1175 	CE_AUTO_BANK_MATCH.csl_exchange_rate_date   := null;
1176 	CE_AUTO_BANK_MATCH.csl_original_amount      := null;
1177 	--for bug 6786355 end
1178 	  CE_RECONCILIATION_ERRORS_PKG.insert_row(
1179 	      CE_AUTO_BANK_MATCH.csh_statement_header_id,
1180 	      CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_OTHER_NO_RATE');
1181 	  RETURN(FALSE);
1182 	ELSE
1183 	  cep_standard.debug('EXCEPTION:gl_currency_api.get_rate' );
1184 	  RAISE;
1185 	END IF;
1186     END;
1187 
1188   END IF; -- user type
1189   return(TRUE);
1190   cep_standard.debug('<<CE_AUTO_BANK_MATCH.validate_exchange_details');
1191 
1192 EXCEPTION
1193   WHEN OTHERS THEN
1194   cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.validate_exchange_details');
1195     RAISE;
1196 END validate_exchange_details;
1197 
1198 /* ---------------------------------------------------------------------
1199 |  PRIVATE FUNCTION                                                     |
1200 |       close_cursors							|
1201 |                                                                       |
1202 |  DESCRIPTION                                                          |
1203 |	Closes the locking cursors  					|
1204 |  CALLED BY                                                            |
1205 |       lock_transaction						|
1206  --------------------------------------------------------------------- */
1207 PROCEDURE close_cursors IS
1208 BEGIN
1209   IF lock_101%ISOPEN THEN
1210     CLOSE lock_101;
1211   END IF;
1212   IF lock_200%ISOPEN THEN
1213     CLOSE lock_200;
1214   END IF;
1215   IF lock_222%ISOPEN THEN
1216     CLOSE lock_222;
1217   END IF;
1218   IF lock_185%ISOPEN THEN
1219     CLOSE lock_185;
1220   END IF;
1221   IF lock_260%ISOPEN THEN
1222     CLOSE lock_260;
1223   END IF;
1224   IF lock_260_cf%ISOPEN THEN
1225     CLOSE lock_260_cf;
1226   END IF;
1227   IF lock_801%ISOPEN THEN
1228     CLOSE lock_801;
1229   END IF;
1230   IF clear_lock_200%ISOPEN THEN
1231     CLOSE clear_lock_200;
1232   END IF;
1233   IF clear_lock_222%ISOPEN THEN
1234     CLOSE clear_lock_222;
1235   END IF;
1236   IF clear_lock_260%ISOPEN THEN
1237     CLOSE clear_lock_260;
1238   END IF;
1239   IF clear_lock_260_cf%ISOPEN THEN
1240     CLOSE clear_lock_260_cf;
1241   END IF;
1242   IF clear_lock_801%ISOPEN THEN
1243     CLOSE clear_lock_801;
1244   END IF;
1245   IF lock_batch_checks%ISOPEN THEN
1246     CLOSE lock_batch_checks;
1247   END IF;
1248   IF LOCK_GROUP_CHECKS%ISOPEN THEN
1249     CLOSE LOCK_GROUP_CHECKS;
1250   END IF;
1251   IF lock_batch_receipts%ISOPEN THEN
1252     CLOSE lock_batch_receipts;
1253   END IF;
1254   IF check_amounts%ISOPEN THEN
1255     CLOSE check_amounts;
1256   END IF;
1257   IF receipt_amounts%ISOPEN THEN
1258     CLOSE receipt_amounts;
1259   END IF;
1260 END close_cursors;
1261 
1262 /* ---------------------------------------------------------------------
1263 |  PRIVATE FUNCTION                                                     |
1264 |       get_min_statement_line_id                                       |
1265 |                                                                       |
1266 |  DESCRIPTION                                                          |
1267 |                                                                       |
1268 |  CALLED BY                                                            |
1269 |       match_process							|
1270 |                                                                       |
1271 |  RETURNS                                                              |
1272 |       csl_statement_line_id   Minimum statement line indentifier      |
1273  --------------------------------------------------------------------- */
1274 FUNCTION get_min_statement_line_id RETURN NUMBER IS
1275   min_statement_line		NUMBER;
1276   min_statement_line_num	NUMBER;
1277 BEGIN
1278   cep_standard.debug('>>CE_AUTO_BANK_MATCH.get_min_statement_line_id');
1279   SELECT min(line_number)
1280   INTO   min_statement_line_num
1281   FROM   ce_statement_lines
1282   WHERE  statement_header_id = CE_AUTO_BANK_MATCH.csh_statement_header_id;
1283 
1284   SELECT statement_line_id
1285   INTO   min_statement_line
1286   FROM   ce_statement_lines
1287   WHERE  line_number = min_statement_line_num
1288   AND	 statement_header_id = CE_AUTO_BANK_MATCH.csh_statement_header_id;
1289 	 cep_standard.debug('<<CE_AUTO_BANK_MATCH.get_min_statement_line_id');
1290 
1291   RETURN (min_statement_line);
1292 EXCEPTION
1293   WHEN OTHERS THEN
1294   cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.get_min_statement_line_id');
1295   RAISE;
1296 END get_min_statement_line_id;
1297 
1298 /* ---------------------------------------------------------------------
1299 |  PRIVATE FUNCTION							|
1300 |	lock_transaction						|
1301 |									|
1302 |  DESCRIPTION								|
1303 |	A match has been found and need to lock these transactions in	|
1304 |	the AP/AR 							|
1305 |	X_CALL_MODE is 'U' for reconciliation locking			|
1306 |		       'M' for unreconciliation locking			|
1307 |	X_RECONCILE_FLAG is 'Y' for reconciliation 			|
1308 |		            'N' for clearing				|
1309 |  CALLED BY								|
1310 |	trx_validation							|
1311  --------------------------------------------------------------------- */
1312 PROCEDURE lock_transaction (X_RECONCILE_FLAG	VARCHAR2,
1313 			    X_CALL_MODE		VARCHAR2,
1314 			    X_TRX_TYPE		VARCHAR2,
1315 			    X_CLEARING_TRX_TYPE	VARCHAR2,
1316 			    X_TRX_ROWID		VARCHAR2,
1317 			    X_BATCH_BA_AMOUNT	NUMBER,
1318 			    X_MATCH_CORRECTION_TYPE VARCHAR2,
1319 			    X_LOGICAL_GROUP_REFERENCE VARCHAR2 DEFAULT NULL) IS
1320   id1			NUMBER;
1321   id2			NUMBER;
1322   id3			NUMBER;
1323   current_record_flag	AR_CASH_RECEIPT_HISTORY_ALL.current_record_flag%TYPE;
1324   tx_status		CE_LOOKUPS.lookup_code%TYPE;
1325   batch_ba_amount	NUMBER;
1326 BEGIN
1327   cep_standard.debug('>>CE_AUTO_BANK_MATCH.lock_transaction');
1328   cep_standard.debug('X_RECONCILE_FLAG='||X_RECONCILE_FLAG ||
1329 		', X_CALL_MODE='|| X_CALL_MODE	||',X_TRX_TYPE='|| X_TRX_TYPE||
1330 		', X_CLEARING_TRX_TYPE='|| X_CLEARING_TRX_TYPE	);
1331   cep_standard.debug('X_TRX_ROWID='|| X_TRX_ROWID||
1332 		', X_BATCH_BA_AMOUNT='||X_BATCH_BA_AMOUNT||
1333 		', X_MATCH_CORRECTION_TYPE='||X_MATCH_CORRECTION_TYPE);
1334 
1335   IF (X_reconcile_flag = 'Y') THEN
1336     --
1337     -- This logics needs to be fixed for Prod16.
1338     -- Reason this is here is that MREC passes "wrong values"
1339     -- for locking
1340     --
1341     IF (X_trx_type = 'JE_LINE' OR X_clearing_trx_type = 'JE_LINE') THEN
1342       OPEN CE_AUTO_BANK_MATCH.lock_101(X_CALL_MODE, X_trx_rowid);
1343       FETCH CE_AUTO_BANK_MATCH.lock_101 INTO id1;
1344       IF (CE_AUTO_BANK_MATCH.lock_101%NOTFOUND) THEN
1345 	RAISE NO_DATA_FOUND;
1346       END IF;
1347       CLOSE CE_AUTO_BANK_MATCH.lock_101;
1348     ELSIF (X_clearing_trx_type 	= 'ROI_LINE') THEN
1349       CE_999_PKG.lock_row(X_CALL_MODE, X_trx_type, X_trx_rowid);
1350     ELSIF (X_clearing_trx_type 	= 'XTR_LINE') THEN
1351       OPEN CE_AUTO_BANK_MATCH.lock_185(X_CALL_MODE, X_trx_rowid);
1352       FETCH CE_AUTO_BANK_MATCH.lock_185 INTO id1;
1353       IF (CE_AUTO_BANK_MATCH.lock_185%NOTFOUND) THEN
1354 	RAISE NO_DATA_FOUND;
1355       END IF;
1356       CLOSE CE_AUTO_BANK_MATCH.lock_185;
1357     ELSIF (X_clearing_trx_type 	= 'CASHFLOW') THEN
1358       OPEN CE_AUTO_BANK_MATCH.lock_260_cf(X_CALL_MODE, X_trx_rowid);
1359       FETCH CE_AUTO_BANK_MATCH.lock_260_cf INTO id1;
1360       IF (CE_AUTO_BANK_MATCH.lock_260_cf%NOTFOUND) THEN
1361 	RAISE NO_DATA_FOUND;
1362       END IF;
1363       CLOSE CE_AUTO_BANK_MATCH.lock_260_cf;
1364     ELSIF (X_trx_type in ('PAYMENT', 'REFUND')) THEN
1365       --IF (X_clearing_trx_type = 'PAY') THEN
1366       IF (X_clearing_trx_type in ('PAY', 'PAY_EFT')) THEN
1367 	OPEN CE_AUTO_BANK_MATCH.lock_801(X_CALL_MODE, X_trx_rowid);
1368 	FETCH CE_AUTO_BANK_MATCH.lock_801 INTO id1;
1369 	IF (CE_AUTO_BANK_MATCH.lock_801%NOTFOUND) THEN
1370 	  RAISE NO_DATA_FOUND;
1371 	END IF;
1372 	CLOSE CE_AUTO_BANK_MATCH.lock_801;
1373       ELSE
1374 	OPEN CE_AUTO_BANK_MATCH.lock_200(X_CALL_MODE, X_trx_rowid);
1375 	FETCH CE_AUTO_BANK_MATCH.lock_200 INTO id1;
1376 	IF (CE_AUTO_BANK_MATCH.lock_200%NOTFOUND) THEN
1377 	  RAISE NO_DATA_FOUND;
1378 	END IF;
1379 	CLOSE CE_AUTO_BANK_MATCH.lock_200;
1380       END IF;
1381     ELSIF (X_trx_type IN ('MISC','CASH'))THEN
1382   cep_standard.debug('open lock_222');
1383       OPEN CE_AUTO_BANK_MATCH.lock_222(X_CALL_MODE, x_trx_rowid);
1384       FETCH CE_AUTO_BANK_MATCH.lock_222 INTO id1, id2, current_record_flag;
1385   cep_standard.debug('id1 '||id1);
1386   cep_standard.debug('id2 '||id2);
1387   cep_standard.debug('current_record_flag '||current_record_flag);
1388 
1389       IF (CE_AUTO_BANK_MATCH.lock_222%NOTFOUND) THEN
1390 	RAISE NO_DATA_FOUND;
1391       END IF;
1392       IF (X_call_mode = 'U' AND current_record_flag = 'N') THEN
1393 	RAISE NO_DATA_FOUND;
1394       END IF;
1395       CLOSE CE_AUTO_BANK_MATCH.lock_222;
1396     ELSIF( X_CLEARING_TRX_TYPE   = 'STATEMENT') THEN
1397       IF (X_MATCH_CORRECTION_TYPE is not NULL) then
1398         CE_AUTO_BANK_MATCH.csl_match_correction_type := X_MATCH_CORRECTION_TYPE;
1399       end if;
1400       if (nvl(CE_AUTO_BANK_MATCH.csl_match_correction_type, 'NONE')
1401 	  = 'REVERSAL') then
1402 	OPEN CE_AUTO_BANK_MATCH.lock_260(X_CALL_MODE, x_trx_rowid);
1403 	FETCH CE_AUTO_BANK_MATCH.lock_260 INTO id1;
1404 	IF (CE_AUTO_BANK_MATCH.lock_260%NOTFOUND) THEN
1405 	   RAISE NO_DATA_FOUND;
1406 	END IF;
1407 	CLOSE CE_AUTO_BANK_MATCH.lock_260;
1408       elsif (nvl(CE_AUTO_BANK_MATCH.csl_match_correction_type, 'NONE')
1409 	  = 'ADJUSTMENT') then
1410 	cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.trx_rowid2='||
1411 	    CE_AUTO_BANK_MATCH.trx_rowid2);
1412 	OPEN CE_AUTO_BANK_MATCH.lock_260(X_CALL_MODE,
1413 	    CE_AUTO_BANK_MATCH.trx_rowid2);
1414 	FETCH CE_AUTO_BANK_MATCH.lock_260 INTO id1;
1415 	IF (CE_AUTO_BANK_MATCH.lock_260%NOTFOUND) THEN
1416 	  RAISE NO_DATA_FOUND;
1417 	END IF;
1418 	CLOSE CE_AUTO_BANK_MATCH.lock_260;
1419 	if (CE_AUTO_BANK_MATCH.reconciled_this_run is NULL) then
1420 	  if ((CE_AUTO_BANK_MATCH.corr_csl_amount > 0 AND
1421 	      csl_trx_type = 'MISC_CREDIT') OR
1422 	    (CE_AUTO_BANK_MATCH.corr_csl_amount < 0 AND
1423 	      csl_trx_type = 'MISC_DEBIT')) then
1424 	    OPEN CE_AUTO_BANK_MATCH.lock_222(X_CALL_MODE, x_trx_rowid);
1425 	    FETCH CE_AUTO_BANK_MATCH.lock_222 INTO id1, id2,current_record_flag;
1426 	    IF (CE_AUTO_BANK_MATCH.lock_222%NOTFOUND) THEN
1427 	      RAISE NO_DATA_FOUND;
1428 	    END IF;
1429 	    IF (X_call_mode = 'U' AND current_record_flag = 'N') THEN
1430 	      RAISE NO_DATA_FOUND;
1431 	    END IF;
1432 	    CLOSE CE_AUTO_BANK_MATCH.lock_222;
1433 	  elsif ((CE_AUTO_BANK_MATCH.corr_csl_amount < 0 AND
1434 	      csl_trx_type = 'MISC_CREDIT') OR
1435 	      (CE_AUTO_BANK_MATCH.corr_csl_amount > 0 AND
1436 	      csl_trx_type = 'MISC_DEBIT')) then
1437 	    OPEN CE_AUTO_BANK_MATCH.lock_200(X_CALL_MODE, X_trx_rowid);
1438 	    FETCH CE_AUTO_BANK_MATCH.lock_200 INTO id1;
1439 	    IF (CE_AUTO_BANK_MATCH.lock_200%NOTFOUND) THEN
1440 	      RAISE NO_DATA_FOUND;
1441 	    END IF;
1442 	    CLOSE CE_AUTO_BANK_MATCH.lock_200;
1443 	  end if;
1444 	end if;	   -- CE_AUTO_BANK_MATCH.reconciled_this_run is NULL
1445       end if;
1446     ELSIF (X_trx_type = 'PBATCH') THEN
1447       cep_standard.debug('open lock_batch_checks X_trx_rowid='|| X_trx_rowid);
1448       OPEN CE_AUTO_BANK_MATCH.lock_batch_checks(X_trx_rowid);
1449       FETCH CE_AUTO_BANK_MATCH.lock_batch_checks INTO id1, id2;
1450       IF (CE_AUTO_BANK_MATCH.lock_batch_checks%NOTFOUND) THEN
1451         cep_standard.debug('no_data_found for  lock_batch_checks');
1452 
1453 	RAISE NO_DATA_FOUND;
1454       END IF;
1455       cep_standard.debug('open check_amounts id2='||id2);
1456       OPEN CE_AUTO_BANK_MATCH.check_amounts(id2);
1457       FETCH CE_AUTO_BANK_MATCH.check_amounts INTO batch_ba_amount;
1458       IF (CE_AUTO_BANK_MATCH.check_amounts%NOTFOUND) THEN
1459 	cep_standard.debug('EKA NO DATA');
1460 	RAISE NO_DATA_FOUND;
1461       END IF;
1462 
1463        cep_standard.debug('batch_ba_amount='||batch_ba_amount||', X_batch_ba_amount='||X_batch_ba_amount );
1464 
1465       IF ((batch_ba_amount = X_batch_ba_amount) OR
1466 	  ((batch_ba_amount IS NULL) AND (X_batch_ba_amount IS NULL))) THEN
1467 	NULL;
1468       ELSE
1469 	cep_standard.debug('TOKA NO DATA  batch_ba_amount <> X_batch_ba_amount ');
1470 	RAISE NO_DATA_FOUND;
1471       END IF;
1472       CLOSE CE_AUTO_BANK_MATCH.Check_Amounts;
1473       CLOSE CE_AUTO_BANK_MATCH.Lock_Batch_Checks;
1474   ELSIF (X_trx_type = 'PGROUP') THEN -- SEPA ER 6700007
1475       cep_standard.debug('open lock_group_checks X_trx_rowid='|| X_trx_rowid||' X_LOGICAL_GROUP_REFERENCE-'||X_LOGICAL_GROUP_REFERENCE);
1476       OPEN CE_AUTO_BANK_MATCH.lock_group_checks(X_trx_rowid,X_LOGICAL_GROUP_REFERENCE);
1477       FETCH CE_AUTO_BANK_MATCH.lock_group_checks INTO id1, id2;
1478       IF (CE_AUTO_BANK_MATCH.lock_group_checks%NOTFOUND) THEN
1479         cep_standard.debug('no_data_found for  lock_group_checks');
1480 
1481 	     RAISE NO_DATA_FOUND;
1482       END IF;
1483       cep_standard.debug('open check_amounts id2='||id2);
1484       OPEN CE_AUTO_BANK_MATCH.check_group_amounts(id2,X_LOGICAL_GROUP_REFERENCE);
1485       FETCH CE_AUTO_BANK_MATCH.check_group_amounts INTO batch_ba_amount;
1486       IF (CE_AUTO_BANK_MATCH.check_group_amounts%NOTFOUND) THEN
1487    	    cep_standard.debug('EKA NO DATA');
1488 	RAISE NO_DATA_FOUND;
1489       END IF;
1490 
1491        cep_standard.debug('batch_ba_amount='||batch_ba_amount||', X_batch_ba_amount='||X_batch_ba_amount );
1492 
1493       IF ((batch_ba_amount = X_batch_ba_amount) OR
1494 	  ((batch_ba_amount IS NULL) AND (X_batch_ba_amount IS NULL))) THEN
1495 	NULL;
1496       ELSE
1497 	cep_standard.debug('TOKA NO DATA  batch_ba_amount <> X_batch_ba_amount ');
1498 	RAISE NO_DATA_FOUND;
1499       END IF;
1500       CLOSE CE_AUTO_BANK_MATCH.Check_GROUP_Amounts;
1501       CLOSE CE_AUTO_BANK_MATCH.Lock_group_Checks;
1502     ELSIF (X_trx_type = 'RBATCH') THEN
1503 cep_standard.debug('open lock_batch_receipts X_trx_rowid='|| X_trx_rowid);
1504       OPEN CE_AUTO_BANK_MATCH.lock_batch_receipts(X_trx_rowid);
1505       FETCH CE_AUTO_BANK_MATCH.lock_batch_receipts INTO id1, id2, id3;
1506       IF (CE_AUTO_BANK_MATCH.lock_batch_receipts%NOTFOUND) THEN
1507 	RAISE NO_DATA_FOUND;
1508       END IF;
1509 
1510 cep_standard.debug('open receipt_amounts id3='||id3);
1511 
1512       OPEN CE_AUTO_BANK_MATCH.receipt_amounts(id3);
1513       FETCH CE_AUTO_BANK_MATCH.receipt_amounts INTO batch_ba_amount;
1514       IF (CE_AUTO_BANK_MATCH.receipt_amounts%NOTFOUND) THEN
1515 	RAISE NO_DATA_FOUND;
1516       END IF;
1517 
1518 cep_standard.debug('batch_ba_amount='||batch_ba_amount||', X_batch_ba_amount='||X_batch_ba_amount );
1519 
1520       IF ((batch_ba_amount = X_batch_ba_amount) OR
1521 	  ((batch_ba_amount IS NULL) AND (X_batch_ba_amount IS NULL))) THEN
1522 	NULL;
1523       ELSE
1524 	cep_standard.debug(' remittance batch no_data_found batch_ba_amount <> X_batch_ba_amount ');
1525 	RAISE NO_DATA_FOUND;
1526       END IF;
1527       CLOSE CE_AUTO_BANK_MATCH.Receipt_Amounts;
1528       CLOSE CE_AUTO_BANK_MATCH.Lock_Batch_Receipts;
1529     END IF;
1530   ELSE -- Clearing only, just lock the transaction table and check the status
1531     IF (X_clearing_trx_type = 'ROI_LINE') THEN
1532 	CE_999_PKG.lock_row(X_CALL_MODE, X_trx_type, X_trx_rowid);
1533     ELSIF (X_CLEARING_TRX_TYPE   = 'CASHFLOW') THEN
1534       OPEN CE_AUTO_BANK_MATCH.clear_lock_260_cf(X_CALL_MODE, x_trx_rowid);
1535       FETCH CE_AUTO_BANK_MATCH.clear_lock_260_cf INTO id1;
1536       IF (CE_AUTO_BANK_MATCH.clear_lock_260_cf%NOTFOUND) THEN
1537 	RAISE NO_DATA_FOUND;
1538       END IF;
1539       CLOSE CE_AUTO_BANK_MATCH.clear_lock_260_cf;
1540     ELSIF (X_trx_type in ('PAYMENT', 'REFUND')) THEN
1541       OPEN CE_AUTO_BANK_MATCH.clear_lock_200(X_CALL_MODE, X_trx_rowid);
1542       FETCH CE_AUTO_BANK_MATCH.clear_lock_200 INTO id1,tx_status;
1543       IF (CE_AUTO_BANK_MATCH.clear_lock_200%NOTFOUND) THEN
1544 	RAISE NO_DATA_FOUND;
1545       END IF;
1546       IF (X_call_mode = 'U' and tx_status <> 'NEGOTIABLE') THEN
1547 	RAISE NO_DATA_FOUND;
1548       END IF;
1549       IF (X_call_mode = 'M' and
1550 	  tx_status NOT IN  ('CLEARED','CLEARED BUT UNACCOUNTED')) THEN
1551 	RAISE NO_DATA_FOUND;
1552       END IF;
1553       CLOSE CE_AUTO_BANK_MATCH.clear_lock_200;
1554     ELSIF (X_trx_type	IN ('MISC','CASH')) THEN
1555       OPEN CE_AUTO_BANK_MATCH.clear_lock_222(X_CALL_MODE, x_trx_rowid);
1556       FETCH CE_AUTO_BANK_MATCH.clear_lock_222 INTO id1,id2,current_record_flag;
1557       IF (CE_AUTO_BANK_MATCH.clear_lock_222%NOTFOUND) THEN
1558 	RAISE NO_DATA_FOUND;
1559       END IF;
1560       IF (current_record_flag = 'N') THEN
1561 	RAISE NO_DATA_FOUND;
1562       END IF;
1563       CLOSE CE_AUTO_BANK_MATCH.clear_lock_222;
1564     ELSIF (X_CLEARING_TRX_TYPE   = 'STATEMENT') THEN
1565       OPEN CE_AUTO_BANK_MATCH.clear_lock_260(X_CALL_MODE, x_trx_rowid);
1566       FETCH CE_AUTO_BANK_MATCH.clear_lock_260 INTO id1;
1567       IF (CE_AUTO_BANK_MATCH.clear_lock_260%NOTFOUND) THEN
1568 	RAISE NO_DATA_FOUND;
1569       END IF;
1570       CLOSE CE_AUTO_BANK_MATCH.clear_lock_260;
1571     END IF;
1572   END IF;
1573   cep_standard.debug('<<CE_AUTO_BANK_MATCH.lock_transaction');
1574 EXCEPTION
1575   WHEN NO_DATA_FOUND THEN
1576     cep_standard.debug('Transaction Either Deleted OR Reconciled');
1577     CE_AUTO_BANK_MATCH.close_cursors;
1578     RAISE NO_DATA_FOUND;
1579   WHEN APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION THEN
1580     cep_standard.debug('Could not lock transactions');
1581     CE_AUTO_BANK_MATCH.close_cursors;
1582     RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
1583 END lock_transaction;
1584 
1585 /* ---------------------------------------------------------------------
1586 |  PRIVATE PROCEDURE							|
1587 |	ce_match 	    						|
1588 |									|
1589 |  DESCRIPTION								|
1590 |	Cash Managment transaction will be matched in the following
1591 |         sequence
1592 
1593 |  Seq Matching Criteria Tolerance CE_CASHFLOWS column
1594 |  --- ----------------- --------- -------------------
1595 |  1   Statement Line ID  Yes	    STATEMENT_LINE_ID
1596 
1597         For ZBA transfers created through the sweep transactions
1598          generation program and cashflows created through the
1599          Journal Entry Creation program
1600 
1601 |  2   Transaction Number Yes	    BANK_TRXN_NUMBER,
1602         , date and Amount             CASHFLOW_DATE, CASHFLOW_AMOUNT
1603 
1604         The amount is in the bank account currency. Tolerances are
1605          always calculated based on the functional currency. For dates
1606          always match first by the statement line value date, if null
1607          use the statement line transaction date followed by statement
1608          header date.
1609 
1610 |  3   Agent Bank Account Yes	COUNTERPARTY_BANK_ACCOUNT_ID,
1611 	, Date and Amount         CASHFLOW_DATE, CASHFLOW_AMOUNT
1612 
1613 |									|
1614 |  CALLED BY								|
1615 |	trx_match/match_line					        |
1616  --------------------------------------------------------------------- */
1617 PROCEDURE ce_match(no_of_matches		OUT NOCOPY  NUMBER
1618 		) IS
1619 
1620   cursor stmt_ln_id_cur(tx_type varchar2) IS
1621           SELECT    catv.trx_id,
1622 		catv.cash_receipt_id,
1623 		catv.row_id,
1624 		catv.trx_date,
1625 		catv.currency_code,
1626 		catv.bank_account_amount,
1627 		catv.base_amount,
1628 		catv.status,
1629 		nvl(catv.amount_cleared,0),
1630 		catv.trx_type,
1631 		1,
1632 		catv.trx_currency_type,
1633 		catv.amount,
1634 		catv.clearing_trx_type,
1635 		catv.exchange_rate,
1636 		catv.exchange_rate_date,
1637 		catv.exchange_rate_type,
1638 		catv.reference_type,
1639 		catv.value_date,
1640 		catv.cleared_date,
1641 		catv.deposit_date,
1642 		catv.legal_entity_id,
1643 		catv.seq_id
1644         --FROM      ce_260_cf_transactions_v catv
1645         FROM      ce_available_transactions_tmp catv
1646         WHERE     catv.trx_type = tx_type
1647         AND       catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
1648         AND	catv.legal_entity_id = nvl(CE_AUTO_BANK_REC.G_legal_entity_id , catv.legal_entity_id)
1649         --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
1650         AND       catv.check_number = CE_AUTO_BANK_MATCH.csl_statement_line_id
1651   	AND	catv.application_id = 261
1652 	AND	NVL(catv.reconciled_status_flag, 'N') = 'N';
1653 
1654     cursor trx_num_date_amt_cur(tx_type varchar2) IS
1655         SELECT    catv.trx_id,
1656 		catv.cash_receipt_id,
1657 		catv.row_id,
1658 		catv.trx_date,
1659 		catv.currency_code,
1660 		catv.bank_account_amount,
1661 		catv.base_amount,
1662 		catv.status,
1663 		nvl(catv.amount_cleared,0),
1664 		catv.trx_type,
1665 		1,
1666 		catv.trx_currency_type,
1667 		catv.amount,
1668 		catv.clearing_trx_type,
1669 		catv.exchange_rate,
1670 		catv.exchange_rate_date,
1671 		catv.exchange_rate_type,
1672 		catv.reference_type,
1673 		catv.value_date,
1674 		catv.cleared_date,
1675 		catv.deposit_date,
1676 		catv.legal_entity_id,
1677 		catv.seq_id
1678         --FROM      ce_260_cf_transactions_v catv
1679         FROM      ce_available_transactions_tmp catv
1680         WHERE     catv.trx_type = tx_type
1681         AND       catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
1682         AND	catv.legal_entity_id = nvl(CE_AUTO_BANK_REC.G_legal_entity_id, catv.legal_entity_id)
1683         --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
1684         AND     catv.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number
1685 	and 	catv.check_number is null
1686 	AND     to_char(catv.trx_date,'YYYY/MM/DD') =
1687                 to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
1688 	AND	catv.application_id = 261
1689 	AND	NVL(catv.reconciled_status_flag, 'N') = 'N';
1690 
1691   cursor agent_ba_date_amt_cur(tx_type varchar2) IS
1692         SELECT    catv.trx_id,
1693 		catv.cash_receipt_id,
1694 		catv.row_id,
1695 		catv.trx_date,
1696 		catv.currency_code,
1697 		catv.bank_account_amount,
1698 		catv.base_amount,
1699 		catv.status,
1700 		nvl(catv.amount_cleared,0),
1701 		catv.trx_type,
1702 		1,
1703 		catv.trx_currency_type,
1704 		catv.amount,
1705 		catv.clearing_trx_type,
1706 		catv.exchange_rate,
1707 		catv.exchange_rate_date,
1708 		catv.exchange_rate_type,
1709 		catv.reference_type,
1710 		catv.value_date,
1711 		catv.cleared_date,
1712 		catv.deposit_date,
1713 		catv.legal_entity_id,
1714 		catv.seq_id
1715         --FROM      ce_260_cf_transactions_v catv
1716         FROM      ce_available_transactions_tmp catv
1717         WHERE     catv.trx_type = tx_type
1718         AND       catv.bank_account_id   = CE_AUTO_BANK_MATCH.csh_bank_account_id
1719         --AND	catv.legal_entity_id     = CE_AUTO_BANK_REC.G_legal_entity_id
1720         --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
1721         --AND     catv.customer_id       = CE_AUTO_BANK_MATCH.csl_bank_trx_number
1722     	AND    catv.bank_account_text    = CE_AUTO_BANK_MATCH.csl_bank_account_text
1723 	and 	catv.check_number is null
1724 	AND     to_char(catv.trx_date,'YYYY/MM/DD') =
1725                 to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
1726 	AND	catv.application_id = 261
1727 	AND	NVL(catv.reconciled_status_flag, 'N') = 'N';
1728 
1729 /*  cursor le_sys_par IS
1730       SELECT
1731 	   NVL(s.amount_tolerance_old,0),
1732 	   NVL(s.percent_tolerance_old,0),
1733 	   NVL(s.fx_difference_handling_old,'C'),
1734 	   s.CE_DIFFERENCES_ACCOUNT_old,
1735 	   s.CASHFLOW_EXCHANGE_RATE_TYPE,
1736 	   s.AUTHORIZATION_BAT,
1737 	   s.BSC_EXCHANGE_DATE_TYPE,
1738  	   s.BAT_EXCHANGE_DATE_TYPE,
1739 	   1
1740       FROM CE_SYSTEM_PARAMETERS s
1741       WHERE s.legal_entity_id =  CE_AUTO_BANK_MATCH.trx_legal_entity_id;
1742 */
1743   curr		                NUMBER;
1744   tx_type 			VARCHAR2(30);
1745   le_found	                NUMBER;
1746 BEGIN
1747   cep_standard.debug('>>CE_AUTO_BANK_MATCH.ce_match');
1748 
1749   no_of_matches := 0;
1750   le_found	:= 0;
1751 
1752   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_trx_type = '|| CE_AUTO_BANK_MATCH.csl_trx_type
1753 			||' CE_AUTO_BANK_MATCH.csl_bank_trx_number = '|| CE_AUTO_BANK_MATCH.csl_bank_trx_number);
1754   cep_standard.debug('CE_AUTO_BANK_MATCH.csh_bank_account_id = '|| CE_AUTO_BANK_MATCH.csh_bank_account_id
1755 			||', CE_AUTO_BANK_MATCH.csl_trx_date = '|| CE_AUTO_BANK_MATCH.csl_trx_date
1756 			||', CE_AUTO_BANK_MATCH.csl_payroll_payment_format = '|| CE_AUTO_BANK_MATCH.csl_payroll_payment_format);
1757 
1758   IF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP','SWEEP_OUT') AND
1759      ( CE_AUTO_BANK_MATCH.csl_reconcile_flag NOT IN ('PAY', 'PAY_EFT'))) THEN
1760     tx_type := 'PAYMENT';
1761   ELSIF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('CREDIT','NSF','REJECTED','SWEEP_IN')) THEN
1762     --tx_type := 'CASH';
1763     tx_type := 'RECEIPT';
1764   ELSIF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('MISC_CREDIT','MISC_DEBIT')) THEN
1765     tx_type := 'MISC';
1766   END IF;
1767 
1768 
1769    cep_standard.debug('>>MATCH ce trx by statement_line_id');
1770 	curr:=1;
1771 	OPEN stmt_ln_id_cur(tx_type);
1772    	FETCH stmt_ln_id_cur
1773         INTO      CE_AUTO_BANK_MATCH.trx_id,
1774 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
1775 		CE_AUTO_BANK_MATCH.trx_rowid,
1776 		CE_AUTO_BANK_MATCH.trx_date,
1777 		CE_AUTO_BANK_MATCH.trx_currency_code,
1778 		CE_AUTO_BANK_MATCH.trx_amount,
1779 		CE_AUTO_BANK_MATCH.trx_base_amount,
1780 		CE_AUTO_BANK_MATCH.trx_status,
1781 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
1782 		CE_AUTO_BANK_MATCH.csl_match_type,
1783 		no_of_matches,
1784 		CE_AUTO_BANK_MATCH.trx_currency_type,
1785 		CE_AUTO_BANK_MATCH.trx_curr_amount,
1786 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
1787 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
1788 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
1789 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
1790 		CE_AUTO_BANK_MATCH.trx_reference_type,
1791 		CE_AUTO_BANK_MATCH.trx_value_date,
1792 		CE_AUTO_BANK_MATCH.trx_cleared_date,
1793 		CE_AUTO_BANK_MATCH.trx_deposit_date,
1794 		CE_AUTO_BANK_MATCH.trx_legal_entity_id,
1795 		CE_AUTO_BANK_MATCH.gt_seq_id;
1796 	CLOSE stmt_ln_id_cur;
1797 
1798 
1799    IF (no_of_matches = 0) THEN
1800      cep_standard.debug('>>MATCH ce trx by transaction number, date and amount');
1801 	curr:=2;
1802  	OPEN trx_num_date_amt_cur(tx_type);
1803    	FETCH trx_num_date_amt_cur
1804         INTO      CE_AUTO_BANK_MATCH.trx_id,
1805 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
1806 		CE_AUTO_BANK_MATCH.trx_rowid,
1807 		CE_AUTO_BANK_MATCH.trx_date,
1808 		CE_AUTO_BANK_MATCH.trx_currency_code,
1809 		CE_AUTO_BANK_MATCH.trx_amount,
1810 		CE_AUTO_BANK_MATCH.trx_base_amount,
1811 		CE_AUTO_BANK_MATCH.trx_status,
1812 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
1813 		CE_AUTO_BANK_MATCH.csl_match_type,
1814 		no_of_matches,
1815 		CE_AUTO_BANK_MATCH.trx_currency_type,
1816 		CE_AUTO_BANK_MATCH.trx_curr_amount,
1817 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
1818 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
1819 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
1820 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
1821 		CE_AUTO_BANK_MATCH.trx_reference_type,
1822 		CE_AUTO_BANK_MATCH.trx_value_date,
1823 		CE_AUTO_BANK_MATCH.trx_cleared_date,
1824 		CE_AUTO_BANK_MATCH.trx_deposit_date,
1825 		CE_AUTO_BANK_MATCH.trx_legal_entity_id,
1826 		CE_AUTO_BANK_MATCH.gt_seq_id;
1827 	CLOSE  trx_num_date_amt_cur;
1828 
1829    END IF;
1830 
1831 
1832    IF (no_of_matches = 0) THEN
1833      cep_standard.debug('>>MATCH ce trx by agent bank account, date and amount');
1834 	curr:=3;
1835  	OPEN agent_ba_date_amt_cur(tx_type);
1836    	FETCH agent_ba_date_amt_cur
1837         INTO      CE_AUTO_BANK_MATCH.trx_id,
1838 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
1839 		CE_AUTO_BANK_MATCH.trx_rowid,
1840 		CE_AUTO_BANK_MATCH.trx_date,
1841 		CE_AUTO_BANK_MATCH.trx_currency_code,
1842 		CE_AUTO_BANK_MATCH.trx_amount,
1843 		CE_AUTO_BANK_MATCH.trx_base_amount,
1844 		CE_AUTO_BANK_MATCH.trx_status,
1845 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
1846 		CE_AUTO_BANK_MATCH.csl_match_type,
1847 		no_of_matches,
1848 		CE_AUTO_BANK_MATCH.trx_currency_type,
1849 		CE_AUTO_BANK_MATCH.trx_curr_amount,
1850 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
1851 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
1852 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
1853 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
1854 		CE_AUTO_BANK_MATCH.trx_reference_type,
1855 		CE_AUTO_BANK_MATCH.trx_value_date,
1856 		CE_AUTO_BANK_MATCH.trx_cleared_date,
1857 		CE_AUTO_BANK_MATCH.trx_deposit_date,
1858 		CE_AUTO_BANK_MATCH.trx_legal_entity_id,
1859 		CE_AUTO_BANK_MATCH.gt_seq_id;
1860 
1861 	CLOSE agent_ba_date_amt_cur;
1862 
1863    END IF;
1864 
1865   cep_standard.debug('CE_AUTO_BANK_MATCH.trx_id = '|| CE_AUTO_BANK_MATCH.trx_id
1866 			||', CE_AUTO_BANK_MATCH.trx_amount = '|| CE_AUTO_BANK_MATCH.trx_amount
1867 			);
1868   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_match_type = '|| CE_AUTO_BANK_MATCH.csl_match_type
1869 			||', no_of_matches = '|| no_of_matches
1870 			||', CE_AUTO_BANK_MATCH.csl_trx_date = '|| CE_AUTO_BANK_MATCH.csl_trx_date
1871 			);
1872 
1873 
1874   IF (no_of_matches = 0) THEN
1875     RAISE NO_DATA_FOUND;
1876   END IF;
1877 /*
1878   IF (no_of_matches = 1 and CE_AUTO_BANK_MATCH.trx_legal_entity_id is not null)  THEN
1879 	curr:=4;
1880  	OPEN le_sys_par;
1881    	FETCH le_sys_par
1882         INTO
1883 	  CE_AUTO_BANK_MATCH.G_le_amount_tolerance,
1884 	  CE_AUTO_BANK_MATCH.G_le_percent_tolerance,
1885 	  CE_AUTO_BANK_MATCH.G_le_Fx_Difference_Handling,
1886 	  CE_AUTO_BANK_REC.G_CE_DIFFERENCES_ACCOUNT,
1887 	  CE_AUTO_BANK_REC.G_CASHFLOW_EXCHANGE_RATE_TYPE,
1888 	  CE_AUTO_BANK_REC.G_AUTHORIZATION_BAT,
1889           CE_AUTO_BANK_REC.G_BSC_EXCHANGE_DATE_TYPE,
1890           CE_AUTO_BANK_REC.G_BAT_EXCHANGE_DATE_TYPE,
1891 	  le_found;
1892 
1893 	CLOSE le_sys_par;
1894 
1895   END IF;
1896 
1897   IF (le_found = 0) THEN
1898    --no system parameter set at LE level default value
1899 	  CE_AUTO_BANK_MATCH.G_le_amount_tolerance  := 0;
1900 	  CE_AUTO_BANK_MATCH.G_le_percent_tolerance := 0;
1901 	  CE_AUTO_BANK_MATCH.G_le_Fx_Difference_Handling := 'F';
1902 	  CE_AUTO_BANK_REC.G_CE_DIFFERENCES_ACCOUNT := 'CHARGES';
1903 	  --CE_AUTO_BANK_REC.G_CASHFLOW_EXCHANGE_RATE_TYPE
1904 	  CE_AUTO_BANK_REC.G_AUTHORIZATION_BAT  :='NR';
1905           CE_AUTO_BANK_REC.G_BSC_EXCHANGE_DATE_TYPE :='BSD';
1906           CE_AUTO_BANK_REC.G_BAT_EXCHANGE_DATE_TYPE :='TRX';
1907 
1908   END IF;
1909 */
1910   IF (CE_AUTO_BANK_MATCH.aba_bank_currency <>
1911 	  CE_AUTO_BANK_REC.G_functional_currency) and
1912      (CE_AUTO_BANK_MATCH.aba_bank_currency <>
1913 	  CE_AUTO_BANK_MATCH.trx_currency_code) THEN
1914     cep_standard.debug('Forex account not using the same curr as bk');
1915     curr := 6;
1916     RAISE NO_DATA_FOUND;
1917   END IF;
1918 
1919   cep_standard.debug('<<CE_AUTO_BANK_MATCH.ce_match');
1920 
1921 EXCEPTION
1922   WHEN NO_DATA_FOUND THEN
1923     cep_standard.debug('EXCEPTION - NO_DATA_FOUND: No data found in CE_AUTO_BANK_MATCH.ce_match');
1924     if (curr = 6) then
1925       CE_RECONCILIATION_ERRORS_PKG.insert_row(
1926 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
1927 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_FOREIGN_RECON');
1928     else
1929       CE_RECONCILIATION_ERRORS_PKG.insert_row(
1930 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
1931 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_CE_TRX_MATCH');
1932     end if;
1933     no_of_matches := 0;
1934   WHEN OTHERS THEN
1935     IF (SQL%NOTFOUND) THEN
1936       cep_standard.debug('EXCEPTION - OTHERS: NO data found in CE_AUTO_BANK_MATCH.ce_match');
1937 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
1938 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
1939 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_TRX_MATCH');
1940       no_of_matches:=0;
1941     ELSIF (SQL%ROWCOUNT >0) THEN
1942       cep_standard.debug('EXCEPTION: More than one CE trx match this statement line' );
1943 
1944 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
1945 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
1946 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_DUP_CE_TRX_MATCH');
1947       no_of_matches:=999;
1948     ELSE
1949       cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.ce_match' );
1950       RAISE;
1951     END IF;
1952 END ce_match;
1953 
1954 /* ---------------------------------------------------------------------
1955 |  PRIVATE PROCEDURE							|
1956 |	pay_eft_match     						|
1957 |									|
1958 |  DESCRIPTION								|
1959 |	Using the statement line transaction number, transaction date   |
1960 |       and Amount try to find a 					|
1961 | 	matching batch for eft payments from CE_801_EFT_TRANSACTIONS_V  |
1962 |									|
1963 |  CALLED BY								|
1964 |	match_line						        |
1965  --------------------------------------------------------------------- */
1966 PROCEDURE pay_eft_match(no_of_matches		OUT NOCOPY  NUMBER,
1967 		      no_of_currencies		IN OUT NOCOPY  NUMBER) IS
1968   trx_count			NUMBER;
1969   curr		                NUMBER;
1970 
1971 BEGIN
1972   cep_standard.debug('>>CE_AUTO_BANK_MATCH.pay_eft_match');
1973   no_of_matches := 0;
1974   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_trx_type = '|| CE_AUTO_BANK_MATCH.csl_trx_type
1975 			||' CE_AUTO_BANK_MATCH.csl_bank_trx_number = '|| CE_AUTO_BANK_MATCH.csl_bank_trx_number);
1976   cep_standard.debug('CE_AUTO_BANK_MATCH.csh_bank_account_id = '|| CE_AUTO_BANK_MATCH.csh_bank_account_id
1977 			||', CE_AUTO_BANK_MATCH.csl_trx_date = '|| CE_AUTO_BANK_MATCH.csl_trx_date
1978 			||', CE_AUTO_BANK_MATCH.csl_payroll_payment_format = '|| CE_AUTO_BANK_MATCH.csl_payroll_payment_format);
1979 
1980   IF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT')) THEN
1981     IF (substr(CE_AUTO_BANK_MATCH.csl_payroll_payment_format,1,4) = 'BACS') THEN
1982        curr := 1;
1983     ELSE
1984        curr := 2;
1985     END IF;
1986 
1987    cep_standard.debug('>>MATCH trx ');
1988 
1989       SELECT 	count(*),
1990 		sum(catv.bank_account_amount),
1991 		nvl(sum(catv.base_amount),0),
1992 		nvl(sum(catv.amount_cleared),0),
1993 		SUM(DECODE(catv.currency_code,
1994 		    CE_AUTO_BANK_MATCH.trx_currency_code,0,1)),
1995 		sum(catv.amount),
1996 		'PAY_EFT',
1997 		1,
1998 		catv.batch_id,
1999 		catv.org_id,
2000 		catv.CE_BANK_ACCT_USE_ID
2001       INTO    	CE_AUTO_BANK_MATCH.trx_count,
2002 		CE_AUTO_BANK_MATCH.trx_amount,
2003 		CE_AUTO_BANK_MATCH.trx_base_amount,
2004 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
2005 		no_of_currencies,
2006 		CE_AUTO_BANK_MATCH.trx_curr_amount,
2007 		CE_AUTO_BANK_MATCH.csl_match_type,
2008 		no_of_matches,
2009 		CE_AUTO_BANK_MATCH.trx_group,
2010  		CE_AUTO_BANK_MATCH.trx_org_id,
2011  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id
2012       --FROM 	ce_801_EFT_transactions_v catv
2013       FROM      ce_available_transactions_tmp catv
2014       WHERE       upper(catv.batch_name) =
2015 		    upper(CE_AUTO_BANK_MATCH.csl_bank_trx_number)
2016       AND	catv.trx_date = CE_AUTO_BANK_MATCH.csl_trx_date
2017       AND	catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, catv.org_id)
2018       --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
2019       AND	catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
2020       AND		nvl(catv.status, 'C') <> 'V'
2021       AND       catv.application_id = 802
2022       AND       NVL(catv.reconciled_status_flag, 'N') = 'N'
2023 	    having sum(catv.bank_account_amount) = CE_AUTO_BANK_MATCH.csl_amount
2024 	group by catv.batch_id, catv.batch_name, catv.trx_date, catv.org_id, catv.ce_bank_acct_use_id; -- bug  7242853
2025 
2026   END IF;
2027 
2028   cep_standard.debug('CE_AUTO_BANK_MATCH.trx_count = '|| CE_AUTO_BANK_MATCH.trx_count
2029 			||', CE_AUTO_BANK_MATCH.trx_amount = '|| CE_AUTO_BANK_MATCH.trx_amount
2030 			||', no_of_currencies = '|| no_of_currencies);
2031   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_match_type = '|| CE_AUTO_BANK_MATCH.csl_match_type
2032 			||', no_of_matches = '|| no_of_matches
2033 			||', CE_AUTO_BANK_MATCH.csl_trx_date = '|| CE_AUTO_BANK_MATCH.csl_trx_date
2034 			||', CE_AUTO_BANK_MATCH.trx_group = '|| CE_AUTO_BANK_MATCH.trx_group);
2035 
2036 
2037   curr := 5;
2038   IF (CE_AUTO_BANK_MATCH.trx_count = 0) THEN
2039     RAISE NO_DATA_FOUND;
2040   END IF;
2041 
2042   IF (CE_AUTO_BANK_MATCH.aba_bank_currency <>
2043 	  CE_AUTO_BANK_REC.G_functional_currency) and
2044      (CE_AUTO_BANK_MATCH.aba_bank_currency <>
2045 	  CE_AUTO_BANK_MATCH.trx_currency_code) THEN
2046     cep_standard.debug('Forex account not using the same curr as bk');
2047     curr := 6;
2048     RAISE NO_DATA_FOUND;
2049   END IF;
2050 
2051   cep_standard.debug('<<CE_AUTO_BANK_MATCH.pay_eft_match');
2052 
2053 EXCEPTION
2054   WHEN NO_DATA_FOUND THEN
2055     cep_standard.debug('EXCEPTION - NO_DATA_FOUND: No data found in CE_AUTO_BANK_MATCH.pay_eft_match');
2056     if (curr = 6) then
2057       CE_RECONCILIATION_ERRORS_PKG.insert_row(
2058 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
2059 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_FOREIGN_RECON');
2060     elsif (curr = 1) then
2061       CE_RECONCILIATION_ERRORS_PKG.insert_row(
2062 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
2063 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_BATCH_BACS');
2064     elsif (curr = 2) then
2065       CE_RECONCILIATION_ERRORS_PKG.insert_row(
2066 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
2067 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_BATCH_NACHA');
2068     end if;
2069     no_of_matches := 0;
2070   WHEN OTHERS THEN
2071     IF (SQL%NOTFOUND) THEN
2072       cep_standard.debug('EXCEPTION - OTHERS: NO data found in CE_AUTO_BANK_MATCH.pay_eft_match');
2073       if (curr = 1) then
2074 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2075 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
2076 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_BATCH_BACS');
2077       elsif (curr = 2) then
2078 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2079 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
2080 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_BATCH_NACHA');
2081       end if;
2082       no_of_matches:=0;
2083     ELSIF (SQL%ROWCOUNT >0) THEN
2084       cep_standard.debug('EXCEPTION: More than one EFT batch match this payment' );
2085      -- if (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP')) then
2086       if (curr = 1) then
2087 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2088 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
2089 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_DUP_BATCH_BACS');
2090       elsif (curr = 2) then
2091 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2092 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
2093 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_DUP_BATCH_NACHA');
2094       end if;
2095       no_of_matches:=999;
2096     ELSE
2097       cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.pay_eft_match' );
2098       RAISE;
2099     END IF;
2100 END pay_eft_match;
2101 
2102 /* ---------------------------------------------------------------------
2103 |  PRIVATE PROCEDURE							|
2104 |	bank_account_match						|
2105 |									|
2106 |  DESCRIPTION								|
2107 | 	Using the bank account number and invoice_number, try to find   |
2108 |	a matching receipt NEW/Release 11. Capability to match by       |
2109 |	bank account number and invoice number also for AP.		|
2110 |									|
2111 |  CALLED BY								|
2112 |	match_line							|
2113  --------------------------------------------------------------------- */
2114 PROCEDURE bank_account_match(no_of_matches		OUT NOCOPY	NUMBER) IS
2115   curr		NUMBER;
2116 BEGIN
2117   cep_standard.debug('>>CE_AUTO_BANK_MATCH.bank_account_match');
2118   no_of_matches := 1;
2119   IF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP')) THEN
2120     SELECT	DISTINCT(c.check_id),
2121 		to_number(NULL),
2122 		c.rowid,
2123 		DECODE(c.currency_code,
2124 			sob.currency_code,c.amount,
2125 			ba.currency_code,c.amount,
2126 			NVL(c.base_amount,c.amount)),
2127 		DECODE(DECODE(c.status_lookup_code,
2128 				'CLEARED BUT UNACCOUNTED','CLEARED',
2129 				c.status_lookup_code),
2130 		     'CLEARED',c.cleared_base_amount,
2131 		     c.cleared_amount),
2132 		c.status_lookup_code,
2133 		DECODE(c.currency_code,
2134 			sob.currency_code, DECODE(DECODE(c.status_lookup_code,
2135 					'CLEARED BUT UNACCOUNTED','CLEARED',
2136 					c.status_lookup_code),
2137 				'CLEARED',c.cleared_amount),
2138 			ba.currency_code, DECODE(DECODE(c.status_lookup_code,
2139 					'CLEARED BUT UNACCOUNTED','CLEARED',
2140 					c.status_lookup_code),
2141 				'CLEARED',c.cleared_amount),
2142 			DECODE(DECODE(c.status_lookup_code,
2143 					'CLEARED BUT UNACCOUNTED','CLEARED',
2144 					c.status_lookup_code),
2145 				'CLEARED',NVL(c.cleared_base_amount, c.cleared_amount))),
2146 		'PAYMENT',
2147 		c.currency_code,
2148 		DECODE(c.currency_code,
2149 			sob.currency_code, 'FUNCTIONAL',
2150 			ba.currency_code, 'BANK',
2151 			'FOREIGN'),
2152 		c.amount,
2153 		'PAYMENT',
2154 		DECODE(DECODE(c.status_lookup_code,
2155 				'CLEARED BUT UNACCOUNTED','CLEARED',
2156 				c.status_lookup_code),
2157 			'CLEARED',c.cleared_exchange_rate,
2158 			c.exchange_rate),
2159 		DECODE(DECODE(c.status_lookup_code,
2160 				'CLEARED BUT UNACCOUNTED','CLEARED',
2161 				c.status_lookup_code),
2162 			'CLEARED',c.cleared_exchange_date,
2163 			c.exchange_date),
2164 		DECODE(DECODE(c.status_lookup_code,
2165 				'CLEARED BUT UNACCOUNTED','CLEARED',
2166 				c.status_lookup_code),
2167 			'CLEARED',c.cleared_exchange_rate_type,
2168 			c.exchange_rate_type),
2169 		aph.accounting_date,
2170       		c.cleared_date,
2171 		c.org_id,
2172 		c.CE_BANK_ACCT_USE_ID
2173     INTO   CE_AUTO_BANK_MATCH.trx_id,
2174 	   CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
2175 	   CE_AUTO_BANK_MATCH.trx_rowid,
2176 	   CE_AUTO_BANK_MATCH.trx_amount,
2177 	   CE_AUTO_BANK_MATCH.trx_base_amount,
2178 	   CE_AUTO_BANK_MATCH.trx_status,
2179 	   CE_AUTO_BANK_MATCH.trx_cleared_amount,
2180 	   CE_AUTO_BANK_MATCH.csl_match_type,
2181 	   CE_AUTO_BANK_MATCH.trx_currency_code,
2182 	   CE_AUTO_BANK_MATCH.trx_currency_type,
2183 	   CE_AUTO_BANK_MATCH.trx_curr_amount,
2184 	   CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
2185 	   CE_AUTO_BANK_MATCH.trx_exchange_rate,
2186 	   CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
2187 	   CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
2188 	   CE_AUTO_BANK_MATCH.trx_gl_date,
2189 	   CE_AUTO_BANK_MATCH.trx_cleared_date,
2190 	   CE_AUTO_BANK_MATCH.trx_org_id,
2191 	   CE_AUTO_BANK_MATCH.trx_bank_acct_use_id
2192    FROM    gl_sets_of_books 		sob,
2193 	   ce_system_parameters 	sp,
2194 	   ce_statement_reconcils_all   rec,
2195 	   ce_bank_acct_uses_ou_v 	aba,
2196 	   ce_bank_accounts	 	ba,
2197 	   ce_bank_acct_uses_ou_v 	aba2,
2198 	   ce_bank_accounts	 	ba2,
2199 	   ap_payment_history_all	aph,
2200 	   ap_checks_all			c,
2201 	   ap_invoice_payments_all		pay,
2202 	   ap_invoices_all			inv,
2203 	   po_vendors			ven
2204     WHERE  sob.set_of_books_id 		= sp.set_of_books_id
2205     AND    NVL(rec.status_flag, 'U') 	= 'U'
2206     AND    NVL(rec.current_record_flag,'Y') = 'Y'
2207     AND	   rec.reference_type(+) 	= 'PAYMENT'
2208     AND	   rec.reference_id(+) 		= c.check_id
2209     --AND  aba.bank_account_id		= c.bank_account_id
2210     AND	   aba.bank_acct_use_id		= c.CE_BANK_ACCT_USE_ID
2211     AND    aba.bank_account_id	 	= ba.bank_account_id
2212     AND    aba.bank_account_id 		= CE_AUTO_BANK_MATCH.csh_bank_account_id --bug5182963
2213     AND   BA.ACCOUNT_OWNER_ORG_ID = SP.LEGAL_ENTITY_ID
2214     AND	   aba.org_id			= c.org_id
2215     AND	   aba.org_id			= nvl(CE_AUTO_BANK_REC.G_org_id, c.org_id)
2216     --AND  aba.bank_acct_use_id		= CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
2217     AND    aba.AP_USE_ENABLE_FLAG = 'Y'
2218     AND	   c.status_lookup_code		IN
2219 		('NEGOTIABLE', 'STOP INITIATED',
2220 		   DECODE(CE_AUTO_BANK_MATCH.csl_trx_type,
2221 			'STOP', 'VOIDED',
2222 			'NEGOTIABLE'),
2223 		   DECODE(sp.show_cleared_flag,
2224 			'N','NEGOTIABLE',
2225 			'CLEARED'),
2226 		   DECODE(sp.show_cleared_flag,
2227 			'N','NEGOTIABLE',
2228 			'CLEARED BUT UNACCOUNTED'))
2229     AND	   c.check_date		 >= sp.cashbook_begin_date
2230     --and    c.org_id	= sp.org_id
2231     and    c.org_id	= rec.org_id
2232     AND    c.check_id		 = pay.check_id
2233     AND    c.org_id		 = pay.org_id
2234     AND	   pay.invoice_id	 = inv.invoice_id
2235     AND	   pay.org_id	 	= inv.org_id
2236     AND    ven.vendor_id	 = inv.vendor_id
2237     AND	   inv.invoice_num	 = CE_AUTO_BANK_MATCH.csl_invoice_text
2238     AND    aba2.bank_account_id	 = ba2.bank_account_id
2239     AND    aba2.AP_USE_ENABLE_FLAG = 'Y'
2240     AND    aba2.bank_acct_use_id = c.external_bank_account_id --c.external_bank_acct_use_id
2241     AND    ba2.bank_account_num = CE_AUTO_BANK_MATCH.csl_bank_account_text
2242     AND    aph.check_id (+) = c.check_id
2243     AND    aph.org_id (+) = c.org_id
2244     AND    aph.transaction_type (+) = 'PAYMENT CLEARING'
2245     AND not exists
2246        (select null
2247 	from ap_payment_history_all aph2
2248      	where aph2.check_id = c.check_id
2249      	and  aph2.org_id = c.org_id
2250      	and aph2.transaction_type = 'PAYMENT CLEARING'
2251        	and aph2.payment_history_id > aph.payment_history_id);
2252   ELSE
2253     SELECT distinct(crh.cash_receipt_history_id),
2254 	   crh.cash_receipt_id,
2255 	   crh.rowid,
2256 	   DECODE(cr.currency_code,
2257 		CE_AUTO_BANK_REC.G_functional_currency, crh.amount,
2258 		CE_AUTO_BANK_MATCH.aba_bank_currency, crh.amount,
2259 		NVL(crh.acctd_amount,crh.amount)),
2260 	   crh.acctd_amount,
2261 	   crh.status,
2262 	   DECODE(crh.status,
2263 		'CLEARED', crh.amount,
2264 		'RISK_ELIMINATED', crh.amount,
2265 		0),
2266 	   cr.type,
2267 	   cr.currency_code,
2268 	   DECODE(cr.currency_code,
2269 		sob.currency_code, 'FUNCTIONAL',
2270 		ba.currency_code, 'BANK',
2271 		'FOREIGN'),
2272 	   crh.amount,
2273 	   cr.type,
2274 	   crh.exchange_rate,
2275 	   crh.exchange_date,
2276 	   crh.exchange_rate_type,
2277 	   crh.org_id,
2278 	   cr.remit_bank_acct_use_id
2279     INTO   CE_AUTO_BANK_MATCH.trx_id,
2280 	   CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
2281 	   CE_AUTO_BANK_MATCH.trx_rowid,
2282 	   CE_AUTO_BANK_MATCH.trx_amount,
2283 	   CE_AUTO_BANK_MATCH.trx_base_amount,
2284 	   CE_AUTO_BANK_MATCH.trx_status,
2285 	   CE_AUTO_BANK_MATCH.trx_cleared_amount,
2286 	   CE_AUTO_BANK_MATCH.csl_match_type,
2287 	   CE_AUTO_BANK_MATCH.trx_currency_code,
2288 	   CE_AUTO_BANK_MATCH.trx_currency_type,
2289 	   CE_AUTO_BANK_MATCH.trx_curr_amount,
2290 	   CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
2291 	   CE_AUTO_BANK_MATCH.trx_exchange_rate,
2292 	   CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
2293 	   CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
2294 	   CE_AUTO_BANK_MATCH.trx_org_id,
2295 	   CE_AUTO_BANK_MATCH.trx_bank_acct_use_id
2296     FROM   gl_sets_of_books 		  sob,
2297 	   ce_system_parameters 	  sp,
2298 	   ce_statement_reconcils_all     rec,
2299 	   ce_bank_acct_uses_ou_v 	  aba,
2300 	   ce_bank_accounts	 	ba,
2301 	   ce_bank_acct_uses_ou_v 	  aba2,
2302 	   ce_bank_accounts	 	ba2,
2303 	   ar_cash_receipt_history_all 	  crh,
2304 	   ar_cash_receipts_all 	  cr,
2305 	   ar_receivable_applications_all  ra,
2306 	   ar_payment_schedules_all 	  ps
2307     WHERE  sob.set_of_books_id 		  = sp.set_of_books_id
2308     AND    nvl(rec.status_flag, 'U') 	  = 'U'
2309     AND    nvl(rec.current_record_flag,'Y') = 'Y'
2310     AND    nvl(rec.reference_type, 'RECEIPT') IN ('RECEIPT', 'DM REVERSAL')
2311     AND	   rec.reference_id(+) 		  = crh.cash_receipt_history_id
2312     AND    crh.status IN (
2313 		DECODE(CE_AUTO_BANK_MATCH.csl_trx_type,
2314 			'CREDIT', 'REMITTED',
2315 			'REVERSED'),
2316 		DECODE(sp.show_cleared_flag,
2317 			'N','REMITTED',
2318 			'CLEARED'),
2319 		'REMITTED',
2320 		'RISK_ELIMINATED')
2321     AND    crh.current_record_flag 	  = 'Y'
2322     AND    crh.cash_receipt_id 		  = cr.cash_receipt_id
2323     and    crh.org_id	= cr.org_id
2324     and    crh.org_id	= rec.org_id
2325     --AND  aba.bank_account_id 		  = cr.REMIT_BANK_ACCT_USE_ID
2326     --AND  cr.remittance_bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
2327     --AND  aba.bank_acct_use_id 	 = cr.remittance_bank_account_id
2328     --AND    cr.remit_bank_acct_use_id 	 = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
2329     AND	   aba.bank_acct_use_id 	 = cr.remit_bank_acct_use_id
2330     AND	   aba.org_id 	 		 = cr.org_id
2331     AND	   aba.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, aba.org_id)
2332     --AND	   aba.org_id 	 		 = sp.org_id
2333     and BA.ACCOUNT_OWNER_ORG_ID = SP.LEGAL_ENTITY_ID
2334     AND    aba.bank_account_id 		 = ba.bank_account_id
2335     AND    aba.bank_account_id   	 = CE_AUTO_BANK_MATCH.csh_bank_account_id
2336     AND    aba.AR_USE_ENABLE_FLAG 	 = 'Y'
2337     AND	   crh.trx_date			  >= sp.cashbook_begin_date
2338     AND    cr.cash_receipt_id 		  = ra.cash_receipt_id
2339     and    cr.org_id			  = ra.org_id
2340     AND	   ra.display			  = 'Y'
2341     AND    ra.status 			  = 'APP'
2342     AND    ra.applied_payment_schedule_id = ps.payment_schedule_id
2343     and    ra.org_id			  = ps.org_id
2344     AND    ps.trx_number 	          = CE_AUTO_BANK_MATCH.csl_invoice_text
2345     --AND    aba2.bank_account_id         = cr.customer_bank_account_id
2346     AND    aba2.bank_acct_use_id          = cr.customer_bank_account_id --cr.customer_bank_acct_use_id
2347     AND	   aba2.org_id 	 		 = cr.org_id
2348     AND    aba2.bank_account_id 	 = ba2.bank_account_id
2349     AND    ba2.bank_account_num     	  = CE_AUTO_BANK_MATCH.csl_bank_account_text;
2350   END IF;
2351 
2352   IF ((CE_AUTO_BANK_MATCH.aba_bank_currency <>
2353       CE_AUTO_BANK_REC.G_functional_currency) and
2354       (CE_AUTO_BANK_MATCH.aba_bank_currency <>
2355       CE_AUTO_BANK_MATCH.trx_currency_code)) THEN
2356     cep_standard.debug('Forex account not using the same curr as bk');
2357     curr := 1;
2358     RAISE NO_DATA_FOUND;
2359   END IF;
2360 
2361   cep_standard.debug('<<CE_AUTO_BANK_MATCH.bank_account_match');
2362 EXCEPTION
2363   WHEN NO_DATA_FOUND THEN
2364     cep_standard.debug('EXCEPTION: No data found');
2365     if (curr = 1) then
2366       CE_RECONCILIATION_ERRORS_PKG.insert_row(
2367 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
2368 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_FOREIGN_RECON');
2369     end if;
2370     cep_standard.debug('EXCEPTION: NO bank account match this receipt');
2371     if (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP')) then
2372       CE_RECONCILIATION_ERRORS_PKG.insert_row(
2373 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
2374 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_BAP');
2375     else
2376       CE_RECONCILIATION_ERRORS_PKG.insert_row(
2377 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
2378 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_BAR');
2379     end if;
2380     no_of_matches := 0;
2381   WHEN OTHERS THEN
2382     IF (SQL%ROWCOUNT > 0) THEN
2383       cep_standard.debug('EXCEPTION: More than one bank account match this transaction');
2384       if (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP')) then
2385 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2386 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
2387 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_APT_PARTIAL');
2388       else
2389 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2390 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
2391 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_ART_PARTIAL');
2392       end if;
2393       no_of_matches:=999;
2394     ELSE
2395       cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.bank_account_match' );
2396       RAISE;
2397     END IF;
2398 END bank_account_match;
2399 
2400 /* ---------------------------------------------------------------------
2401 |  PRIVATE PROCEDURE							|
2402 |	invoice_match						        |
2403 |									|
2404 |  DESCRIPTION								|
2405 | 	Using the invoice_number, try to find a matching receipt	|
2406 |	NEW/prod16. Capability to match by invoice number also for AP	|
2407 |									|
2408 |  CALLED BY								|
2409 |	match_line							|
2410  --------------------------------------------------------------------- */
2411 PROCEDURE invoice_match (no_of_matches		OUT NOCOPY	NUMBER) IS
2412   curr		NUMBER;
2413 BEGIN
2414   cep_standard.debug('>>CE_AUTO_BANK_MATCH.invoice_match');
2415   no_of_matches := 1;
2416   IF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP')) THEN
2417     SELECT    DISTINCT(c.check_id),
2418 	      to_number(NULL),
2419 	      c.rowid,
2420 	      DECODE(c.currency_code,
2421 			sob.currency_code,c.amount,
2422 			ba.currency_code,c.amount,
2423 			NVL(c.base_amount,c.amount)),
2424 	      DECODE(DECODE(c.status_lookup_code,
2425 				'CLEARED BUT UNACCOUNTED','CLEARED',
2426 				c.status_lookup_code),
2427 			'CLEARED',c.cleared_base_amount,
2428 			c.cleared_amount),
2429 	      c.status_lookup_code,
2430 	      DECODE(c.currency_code,
2431 			sob.currency_code, DECODE(DECODE(c.status_lookup_code,
2432 					'CLEARED BUT UNACCOUNTED','CLEARED',
2433 					c.status_lookup_code),
2434 				'CLEARED',c.cleared_amount),
2435 			ba.currency_code, DECODE(DECODE(c.status_lookup_code,
2436 					'CLEARED BUT UNACCOUNTED','CLEARED',
2437 					c.status_lookup_code),
2438 				'CLEARED',c.cleared_amount),
2439 			DECODE(DECODE(c.status_lookup_code,
2440 					'CLEARED BUT UNACCOUNTED','CLEARED',
2441 					c.status_lookup_code),
2442 				'CLEARED',NVL(c.cleared_base_amount, c.cleared_amount))),
2443 	      'PAYMENT',
2444 	      c.currency_code,
2445 	      DECODE(c.currency_code,
2446 		     sob.currency_code, 'FUNCTIONAL',
2447 		     ba.currency_code, 'BANK',
2448 	 	     'FOREIGN'),
2449 	      c.amount,
2450 	      'PAYMENT',
2451 	      DECODE(DECODE(c.status_lookup_code,
2452 				'CLEARED BUT UNACCOUNTED','CLEARED',
2453 				c.status_lookup_code),
2454 			'CLEARED',c.cleared_exchange_rate,
2455 			c.exchange_rate),
2456 	      DECODE(DECODE(c.status_lookup_code,
2457 				'CLEARED BUT UNACCOUNTED','CLEARED',
2458 				c.status_lookup_code),
2459 			'CLEARED',c.cleared_exchange_date,
2460 			c.exchange_date),
2461 	      DECODE(DECODE(c.status_lookup_code,
2462 				'CLEARED BUT UNACCOUNTED','CLEARED',
2463 				c.status_lookup_code),
2464 			'CLEARED',c.cleared_exchange_rate_type,
2465 			c.exchange_rate_type),
2466 	      aph.accounting_date,
2467               c.cleared_date,
2468 	      c.org_id,
2469 	      c.CE_BANK_ACCT_USE_ID
2470     INTO   CE_AUTO_BANK_MATCH.trx_id,
2471 	   CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
2472 	   CE_AUTO_BANK_MATCH.trx_rowid,
2473 	   CE_AUTO_BANK_MATCH.trx_amount,
2474 	   CE_AUTO_BANK_MATCH.trx_base_amount,
2475 	   CE_AUTO_BANK_MATCH.trx_status,
2476 	   CE_AUTO_BANK_MATCH.trx_cleared_amount,
2477 	   CE_AUTO_BANK_MATCH.csl_match_type,
2478 	   CE_AUTO_BANK_MATCH.trx_currency_code,
2479 	   CE_AUTO_BANK_MATCH.trx_currency_type,
2480 	   CE_AUTO_BANK_MATCH.trx_curr_amount,
2481 	   CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
2482 	   CE_AUTO_BANK_MATCH.trx_exchange_rate,
2483 	   CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
2484 	   CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
2485 	   CE_AUTO_BANK_MATCH.trx_gl_date,
2486 	   CE_AUTO_BANK_MATCH.trx_cleared_date,
2487 	   CE_AUTO_BANK_MATCH.trx_org_id,
2488  	   CE_AUTO_BANK_MATCH.trx_bank_acct_use_id
2489     FROM   gl_sets_of_books 		sob,
2490 	   ce_system_parameters 	sp,
2491 	   ce_statement_reconcils_all   rec,
2492 	   ce_bank_accounts		ba,
2493 	   ce_bank_acct_uses_ou_v	aba,
2494 	   ap_payment_history_all       aph,
2495 	   ap_checks_all		c,
2496 	   ap_invoice_payments_all	pay,
2497 	   ap_invoices_all		inv,
2498 	   po_vendors			ven
2499     WHERE  sob.set_of_books_id 		= sp.set_of_books_id
2500     AND    NVL(rec.status_flag, 'U') 	= 'U'
2501     AND    NVL(rec.current_record_flag,'Y') = 'Y'
2502     AND	   rec.reference_type(+) 	= 'PAYMENT'
2503     AND	   rec.reference_id(+) 		= c.check_id
2504     --AND  aba.bank_account_id		= c.bank_account_id
2505     AND	   aba.bank_acct_use_id		= c.CE_BANK_ACCT_USE_ID
2506     AND    aba.bank_account_id	 	= ba.bank_account_id
2507     AND    aba.bank_account_id 		= CE_AUTO_BANK_MATCH.csh_bank_account_id --bug5182963
2508     and BA.ACCOUNT_OWNER_ORG_ID = SP.LEGAL_ENTITY_ID
2509     AND	   aba.org_id			= c.org_id
2510     AND		aba.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, aba.org_id)
2511     --AND	   aba.bank_acct_use_id		= CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
2512     AND	   c.status_lookup_code		IN
2513 	   ('NEGOTIABLE', 'STOP INITIATED',
2514 	   DECODE(CE_AUTO_BANK_MATCH.csl_trx_type,
2515 		'STOP', 'VOIDED',
2516 		'NEGOTIABLE'),
2517 	   DECODE(sp.show_cleared_flag,
2518 		'N','NEGOTIABLE',
2519 		'CLEARED'),
2520 	   DECODE(sp.show_cleared_flag,
2521 		'N','NEGOTIABLE',
2522 		'CLEARED BUT UNACCOUNTED'))
2523     AND	   c.check_date			 >= sp.cashbook_begin_date
2524     AND    c.check_id			 = pay.check_id
2525     AND	   c.org_id			= pay.org_id
2526     AND	   pay.invoice_id		 = inv.invoice_id
2527     AND	   inv.invoice_num		 = CE_AUTO_BANK_MATCH.csl_invoice_text
2528     AND    inv.vendor_id		 = ven.vendor_id
2529     AND    ven.vendor_name		 = NVL(CE_AUTO_BANK_MATCH.csl_customer_text, ven.vendor_name)
2530     AND    aph.check_id (+) 		 = c.check_id
2531     AND	   aph.org_id (+) 		 = c.org_id
2532     AND    aph.transaction_type (+) = 'PAYMENT CLEARING'
2533     AND not exists
2534         (select null
2535          from   ap_payment_history aph2
2536          where  aph2.check_id = c.check_id
2537       	 and  aph2.org_id = c.org_id
2538          and    aph2.transaction_type = 'PAYMENT CLEARING'
2539          and    aph2.payment_history_id > aph.payment_history_id);
2540   ELSE
2541     SELECT distinct(crh.cash_receipt_history_id),
2542 	   crh.cash_receipt_id,
2543 	   crh.rowid,
2544 	   DECODE(cr.currency_code,
2545 		CE_AUTO_BANK_REC.G_functional_currency, crh.amount,
2546 		CE_AUTO_BANK_MATCH.aba_bank_currency,   crh.amount,
2547 		NVL(crh.acctd_amount,crh.amount)),
2548 	   crh.acctd_amount,
2549 	   crh.status,
2550 	   DECODE( crh.status,
2551 		'CLEARED', crh.amount,
2552 		'RISK_ELIMINATED', crh.amount,
2553 		0),
2554 	   cr.type,
2555 	   cr.currency_code,
2556 	   DECODE(cr.currency_code,
2557 		sob.currency_code, 'FUNCTIONAL',
2558 		ba.currency_code, 'BANK',
2559 		'FOREIGN'),
2560 	   crh.amount,
2561 	   cr.type,
2562 	   crh.exchange_rate,
2563 	   crh.exchange_date,
2564 	   crh.exchange_rate_type,
2565 	   crh.org_id,
2566 	   cr.remit_bank_acct_use_id
2567     INTO   CE_AUTO_BANK_MATCH.trx_id,
2568 	   CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
2569 	   CE_AUTO_BANK_MATCH.trx_rowid,
2570 	   CE_AUTO_BANK_MATCH.trx_amount,
2571 	   CE_AUTO_BANK_MATCH.trx_base_amount,
2572 	   CE_AUTO_BANK_MATCH.trx_status,
2573 	   CE_AUTO_BANK_MATCH.trx_cleared_amount,
2574 	   CE_AUTO_BANK_MATCH.csl_match_type,
2575 	   CE_AUTO_BANK_MATCH.trx_currency_code,
2576 	   CE_AUTO_BANK_MATCH.trx_currency_type,
2577 	   CE_AUTO_BANK_MATCH.trx_curr_amount,
2578 	   CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
2579 	   CE_AUTO_BANK_MATCH.trx_exchange_rate,
2580 	   CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
2581 	   CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
2582  	   CE_AUTO_BANK_MATCH.trx_org_id,
2583  	   CE_AUTO_BANK_MATCH.trx_bank_acct_use_id
2584    FROM   gl_sets_of_books 		  sob,
2585 	   ce_system_parameters	  sp,
2586 	   ce_statement_reconcils_all   rec,
2587 	   ce_bank_accounts 		  ba,
2588 	   ce_bank_acct_uses_ou_v	  aba,
2589 	   ar_cash_receipt_history_all 	  crh,
2590 	   ar_cash_receipts_all 	  cr,
2591 	   ar_receivable_applications_all  ra,
2592 	   --ra_customers			  rc,
2593         HZ_CUST_ACCOUNTS                CU,
2594 	   hz_parties			hp,
2595 	   ar_payment_schedules_all 	  ps
2596     WHERE  sob.set_of_books_id 		  = sp.set_of_books_id
2597     AND    nvl(rec.status_flag, 'U') 	  = 'U'
2598     AND    nvl(rec.current_record_flag,'Y') = 'Y'
2599     AND    nvl(rec.reference_type, 'RECEIPT') IN ('RECEIPT', 'DM REVERSAL')
2600     AND	   rec.reference_id(+) 		  = crh.cash_receipt_history_id
2601     AND    crh.status	IN ('REMITTED',
2602 		DECODE(sp.show_cleared_flag,
2603 			'N','REMITTED',
2604 			'CLEARED'),
2605 		decode(CE_AUTO_BANK_MATCH.csl_trx_type,
2606 			'NSF', 'REVERSED',
2607 			'REJECTED', 'REVERSED',
2608 			'REMITTED'),
2609 		'RISK_ELIMINATED')
2610     AND    crh.current_record_flag 	  = 'Y'
2611     AND    crh.cash_receipt_id 		  = cr.cash_receipt_id
2612     and    crh.org_id	= cr.org_id
2613     and    crh.org_id	= rec.org_id
2614     --AND  aba.bank_account_id 		  = cr.remittance_bank_account_id
2615     --AND    cr.remittance_bank_account_id =CE_AUTO_BANK_MATCH.csh_bank_account_id
2616     AND	   aba.bank_acct_use_id 	 = cr.remit_bank_acct_use_id
2617     AND   aba.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, aba.org_id)
2618     --AND	   aba.bank_acct_use_id		= CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
2619     AND	   aba.org_id 	 		 = cr.org_id
2620     --AND	   aba.org_id 	 		 = sp.org_id
2621     AND  aba.bank_account_id 		  = ba.bank_account_id
2622     and   BA.ACCOUNT_OWNER_ORG_ID = SP.LEGAL_ENTITY_ID
2623     AND    crh.status = decode(CE_AUTO_BANK_MATCH.csl_trx_type,
2624 		   'NSF', decode(CE_AUTO_BANK_REC.G_nsf_handling,
2625 				'REVERSE',crh.status,
2626 				'REVERSED'),
2627 		   'REJECTED', decode('REVERSE',
2628 				'REVERSE', crh.status,
2629 				'REVERSED'),
2630 		   crh.status)
2631     AND	   crh.trx_date			  >= sp.cashbook_begin_date
2632     AND    cr.cash_receipt_id 		  = ra.cash_receipt_id
2633     and    cr.org_id			  = ra.org_id
2634 --    AND	   ra.display			  = 'Y'
2635     AND    ra.status 			  = 'APP'
2636     AND    ra.applied_payment_schedule_id = ps.payment_schedule_id
2637     and    ra.org_id			  = ps.org_id
2638     --AND    rc.customer_name 		  = CE_AUTO_BANK_MATCH.csl_customer_text
2639     --AND    rc.customer_id  		  = nvl(ps.customer_id,rc.customer_id)
2640 AND	CU.CUST_ACCOUNT_ID		= CR.PAY_FROM_CUSTOMER
2641 AND     HP.PARTY_ID 			= CU.PARTY_ID
2642     AND    hp.party_name 		  = CE_AUTO_BANK_MATCH.csl_customer_text
2643     AND    hp.party_id  		  = nvl(ps.customer_id,hp.party_id)
2644    AND    ps.trx_number 	          = CE_AUTO_BANK_MATCH.csl_invoice_text;
2645   END IF;
2646 
2647   IF (CE_AUTO_BANK_MATCH.aba_bank_currency <>
2648 	  CE_AUTO_BANK_REC.G_functional_currency) and
2649      (CE_AUTO_BANK_MATCH.aba_bank_currency <>
2650 	  CE_AUTO_BANK_MATCH.trx_currency_code) THEN
2651     cep_standard.debug('Forex account not using the same curr as bk');
2652     curr := 1;
2653     RAISE NO_DATA_FOUND;
2654   END IF;
2655 
2656   cep_standard.debug('<<CE_AUTO_BANK_MATCH.invoice_match');
2657 EXCEPTION
2658   WHEN NO_DATA_FOUND THEN
2659       cep_standard.debug('EXCEPTION: No data found');
2660       if (curr = 1) then
2661 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2662 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
2663 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_FOREIGN_RECON');
2664       end if;
2665       cep_standard.debug('EXCEPTION: NO invoices match this receipt');
2666       if (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP')) then
2667 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2668 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
2669 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_INP');
2670       else
2671 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2672 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
2673 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_INR');
2674       end if;
2675       no_of_matches := 0;
2676   WHEN OTHERS THEN
2677     IF (SQL%ROWCOUNT >0) THEN
2678       cep_standard.debug('EXCEPTION: More than one invoice match this transaction');
2679       if (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP')) then
2680 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2681 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
2682 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_APT_PARTIAL');
2683       else
2684 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2685 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
2686 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_ART_PARTIAL');
2687       end if;
2688       no_of_matches:=999;
2689     ELSE
2690       cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.invoice_match' );
2691       RAISE;
2692     END IF;
2693 END invoice_match;
2694 
2695 /* ---------------------------------------------------------------------
2696 |  PRIVATE PROCEDURE							|
2697 |	batch_match     						|
2698 |									|
2699 |  DESCRIPTION								|
2700 |	Using the statement line transaction number, try to find a 	|
2701 | 	matching batch from CE_<APPL_ID>_BATCHES_V			|
2702 |									|
2703 |  CALLED BY								|
2704 |	match_line						        |
2705  --------------------------------------------------------------------- */
2706 PROCEDURE batch_match(no_of_matches		OUT NOCOPY  NUMBER,
2707 		      no_of_currencies		IN OUT NOCOPY  NUMBER) IS
2708 
2709   trx_count			NUMBER;
2710   curr		                NUMBER;
2711 
2712   trx_count_ap			NUMBER;
2713   trx_count_ce			NUMBER;
2714   trx_amount_ap        		NUMBER;
2715   trx_amount_ce        		NUMBER;
2716   trx_base_amount_ap   		NUMBER;
2717   trx_base_amount_ce   		NUMBER;
2718   trx_cleared_amount_ap 	NUMBER;
2719   trx_cleared_amount_ce 	NUMBER;
2720   no_of_currencies_ap 		NUMBER;
2721   no_of_currencies_ce 		NUMBER;
2722   trx_curr_amount_ap  		NUMBER;
2723   trx_curr_amount_ce  		NUMBER;
2724 
2725 BEGIN
2726   cep_standard.debug('>>CE_AUTO_BANK_MATCH.batch_match csl_trx_type='||CE_AUTO_BANK_MATCH.csl_trx_type);
2727   no_of_matches := 0;
2728 
2729   IF (CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'PAY_EFT') THEN
2730 	pay_eft_match(no_of_matches, no_of_currencies);
2731 
2732   ELSIF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP')) THEN
2733     --
2734     -- 7571492: Added clearing_trx_type as 'PAYMENT' for a payment
2735     -- batch. Without this tolerances were not being properly fetched.
2736     --
2737     curr := 1;
2738     SELECT
2739          ab.batch_id,
2740          ab.row_id,
2741          1,
2742          ab.trx_currency_type,
2743          ab.currency_code,
2744          'PBATCH',
2745          ab.exchange_rate,
2746          ab.exchange_rate_date,
2747          ab.exchange_rate_type,
2748          ab.org_id,
2749          ab.legal_entity_id,
2750          ab.CE_BANK_ACCT_USE_ID,
2751          'PAYMENT'                       -- bug 7571492
2752     INTO
2753          CE_AUTO_BANK_MATCH.trx_id,
2754          CE_AUTO_BANK_MATCH.trx_rowid,
2755          no_of_matches,
2756          CE_AUTO_BANK_MATCH.trx_currency_type,
2757          CE_AUTO_BANK_MATCH.trx_currency_code,
2758          CE_AUTO_BANK_MATCH.csl_match_type,
2759          CE_AUTO_BANK_MATCH.trx_exchange_rate,
2760          CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
2761          CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
2762          CE_AUTO_BANK_MATCH.trx_org_id,
2763          CE_AUTO_BANK_MATCH.trx_legal_entity_id,
2764          CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
2765          CE_AUTO_BANK_MATCH.csl_clearing_trx_type -- bug 7571492
2766     FROM CE_200_BATCHES_V ab
2767     WHERE
2768          UPPER(ab.trx_number) = UPPER(CE_AUTO_BANK_MATCH.csl_bank_trx_number)
2769         --AND	ab.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id  --bug 4435028 ignore MO security for IBY batches
2770          AND (ab.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, ab.org_id)
2771             OR ab.legal_entity_id = nvl(CE_AUTO_BANK_REC.G_legal_entity_id, ab.legal_entity_id))
2772          AND		ab.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id;
2773 
2774      --bug 7514063 added NVL to the columns in select clause
2775     curr := 2;
2776     SELECT 	count(*),
2777 		NVL(sum(catv.bank_account_amount),0),
2778 		nvl(sum(catv.base_amount),0),
2779 		nvl(sum(catv.amount_cleared),0),
2780 		NVL(SUM(DECODE(catv.currency_code,
2781 		    CE_AUTO_BANK_MATCH.trx_currency_code,0,1)),0),
2782 		NVL(sum(catv.amount),0),
2783 		'PBATCH'
2784     INTO    	trx_count_ap,
2785 		trx_amount_ap,
2786 		trx_base_amount_ap,
2787 		trx_cleared_amount_ap,
2788 		no_of_currencies_ap,
2789 		trx_curr_amount_ap,
2790 		CE_AUTO_BANK_MATCH.csl_match_type
2791     --FROM 	ce_200_transactions_v catv
2792     FROM      	ce_available_transactions_tmp catv
2793     WHERE	catv.batch_id = CE_AUTO_BANK_MATCH.trx_id
2794     AND		nvl(catv.status, 'NEGOTIABLE') <> 'VOIDED'
2795     AND		catv.application_id = 200
2796     AND		NVL(catv.reconciled_status_flag, 'N') = 'N';
2797 
2798 
2799     --bug 7514063 added NVL to the columns in select clause
2800     curr := 22;
2801     SELECT 	count(*),
2802 		NVL(sum(catv.bank_account_amount),0),
2803 		nvl(sum(catv.base_amount),0),
2804 		nvl(sum(catv.amount_cleared),0),
2805 		NVL(SUM(DECODE(catv.currency_code,
2806 		    CE_AUTO_BANK_MATCH.trx_currency_code,0,1)),0),
2807 		NVL(sum(catv.amount),0),
2808 		'PBATCH'
2809     INTO    	trx_count_ce,
2810 		trx_amount_ce,
2811 		trx_base_amount_ce,
2812 		trx_cleared_amount_ce,
2813 		no_of_currencies_ce,
2814 		trx_curr_amount_ce,
2815 		CE_AUTO_BANK_MATCH.csl_match_type
2816     --FROM 	ce_260_cf_transactions_v catv
2817     FROM        ce_available_transactions_tmp catv
2818     WHERE	catv.batch_id = CE_AUTO_BANK_MATCH.trx_id
2819     AND		nvl(catv.status, 'CANCELED') <> 'CANCELED'
2820     AND		catv.application_id = 261
2821     AND		NVL(catv.reconciled_status_flag, 'N') = 'N';
2822 
2823 	-- bug 4435028 new iPayment batches include transactions from both AP and CE
2824 	trx_count 				:= trx_count_ap + trx_count_ce;
2825 	CE_AUTO_BANK_MATCH.trx_amount 		:= trx_amount_ap + trx_amount_ce;
2826 	CE_AUTO_BANK_MATCH.trx_base_amount	:= trx_base_amount_ap + trx_base_amount_ce;
2827 	CE_AUTO_BANK_MATCH.trx_cleared_amount	:= trx_cleared_amount_ap + trx_cleared_amount_ce;
2828 	no_of_currencies			:= no_of_currencies_ap + no_of_currencies_ce;
2829 	CE_AUTO_BANK_MATCH.trx_curr_amount	:= trx_curr_amount_ap + trx_curr_amount_ce;
2830 
2831 cep_standard.debug('CE_AUTO_BANK_MATCH.trx_amount='|| CE_AUTO_BANK_MATCH.trx_amount);
2832 
2833   ELSIF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('CREDIT','NSF','REJECTED')) THEN
2834 
2835     curr := 3;
2836     SELECT  	ab.batch_id,
2837 		ab.row_id,
2838 		1,
2839 		ab.trx_currency_type,
2840 		ab.currency_code,
2841 		'RBATCH',
2842 		ab.exchange_rate,
2843 		ab.exchange_rate_date,
2844 		ab.exchange_rate_type,
2845 		ab.org_id,
2846 		ab.CE_BANK_ACCT_USE_ID
2847     INTO        CE_AUTO_BANK_MATCH.trx_id,
2848 		CE_AUTO_BANK_MATCH.trx_rowid,
2849 		no_of_matches,
2850 		CE_AUTO_BANK_MATCH.trx_currency_type,
2851 		CE_AUTO_BANK_MATCH.trx_currency_code,
2852 		CE_AUTO_BANK_MATCH.csl_match_type,
2853 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
2854 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
2855 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
2856 		CE_AUTO_BANK_MATCH.trx_org_id,
2857  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id
2858     FROM 	CE_222_BATCHES_V ab
2859     WHERE       ab.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number
2860     --AND		ab.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
2861     AND   ab.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, ab.org_id)
2862     AND		ab.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id;
2863 
2864     curr := 4;
2865     SELECT 	count(*),
2866 		sum(catv.bank_account_amount),
2867 		sum(catv.base_amount),
2868 		nvl(sum(catv.amount_cleared),0),
2869 		SUM(DECODE(catv.currency_code,
2870 		    CE_AUTO_BANK_MATCH.trx_currency_code,0,1)),
2871 		SUM(catv.amount),
2872 		'RBATCH'
2873     INTO    	trx_count,
2874 		CE_AUTO_BANK_MATCH.trx_amount,
2875 		CE_AUTO_BANK_MATCH.trx_base_amount,
2876 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
2877 		no_of_currencies,
2878 		CE_AUTO_BANK_MATCH.trx_curr_amount,
2879 		CE_AUTO_BANK_MATCH.csl_match_type
2880     FROM 	ce_222_txn_for_batch_v catv
2881     WHERE catv.batch_id = CE_AUTO_BANK_MATCH.trx_id
2882     AND   nvl(catv.status, 'REMITTED') <> 'REVERSED';
2883   END IF;
2884 
2885   curr := 5;
2886   IF (trx_count = 0) THEN
2887     RAISE NO_DATA_FOUND;
2888   END IF;
2889   cep_standard.debug('Batch trx_count = '||trx_count);
2890   cep_standard.debug('trx_amount = '||CE_AUTO_BANK_MATCH.trx_amount);
2891   cep_standard.debug('trx_base_amount = '||CE_AUTO_BANK_MATCH.trx_base_amount);
2892   cep_standard.debug('trx_cleared_amount = '||CE_AUTO_BANK_MATCH.trx_cleared_amount);
2893   cep_standard.debug('trx_curr_amount = '||CE_AUTO_BANK_MATCH.trx_curr_amount);
2894   cep_standard.debug('csl_match_type = '||CE_AUTO_BANK_MATCH.csl_match_type);
2895 
2896   IF (CE_AUTO_BANK_MATCH.aba_bank_currency <>
2897 	  CE_AUTO_BANK_REC.G_functional_currency) and
2898      (CE_AUTO_BANK_MATCH.aba_bank_currency <>
2899 	  CE_AUTO_BANK_MATCH.trx_currency_code) THEN
2900     cep_standard.debug('Forex account not using the same curr as bk');
2901     curr := 6;
2902     RAISE NO_DATA_FOUND;
2903   END IF;
2904 
2905   cep_standard.debug('<<CE_AUTO_BANK_MATCH.batch_match');
2906 
2907 EXCEPTION
2908   WHEN NO_DATA_FOUND THEN
2909     cep_standard.debug('EXCEPTION: No data found');
2910     if (curr = 6) then
2911       CE_RECONCILIATION_ERRORS_PKG.insert_row(
2912 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
2913 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_FOREIGN_RECON');
2914     elsif (curr = 1) then
2915       CE_RECONCILIATION_ERRORS_PKG.insert_row(
2916 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
2917 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_BATCH_P');
2918     elsif (curr = 3) then
2919       CE_RECONCILIATION_ERRORS_PKG.insert_row(
2920 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
2921 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_BATCH_R');
2922     end if;
2923     no_of_matches := 0;
2924   WHEN OTHERS THEN
2925     IF (SQL%NOTFOUND) THEN
2926       cep_standard.debug('EXCEPTION: NO data found in batch_match');
2927       if (curr = 1) then
2928 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2929 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
2930 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_BATCH_P');
2931       elsif (curr = 3) then
2932 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2933 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
2934 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_BATCH_R');
2935       end if;
2936       no_of_matches:=0;
2937     ELSIF (SQL%ROWCOUNT >0) THEN
2938       cep_standard.debug('EXCEPTION: More than one batch match this receipt' );
2939       if (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP')) then
2940 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2941 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
2942 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_APB_PARTIAL');
2943       else
2944 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
2945 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
2946 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_ARB_PARTIAL');
2947       end if;
2948       no_of_matches:=999;
2949     ELSE
2950       cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.batch_match' );
2951       RAISE;
2952     END IF;
2953 END batch_match;
2954 
2955 /* ---------------------------------------------------------------------
2956 |  PRIVATE PROCEDURE                                                    |
2957 |    group_match                                                        |
2958 |                                                                       |
2959 |  DESCRIPTION                                                          |
2960 |    Using the statement line transaction number, try to find a         |
2961 |     matching group in payment from CE_200_GROUPS_V                    |
2962 |    FOR SEPA ER 6700007                                                |
2963 |  CALLED BY                                                            |
2964 |    match_line                                                         |
2965  --------------------------------------------------------------------- */
2966 PROCEDURE group_match(
2967     no_of_matches       OUT NOCOPY  NUMBER,
2968     no_of_currencies    IN OUT NOCOPY  NUMBER
2969 ) IS
2970 
2971     trx_count               NUMBER;
2972     curr                    NUMBER;
2973 
2974 BEGIN
2975     cep_standard.debug('>>CE_AUTO_BANK_MATCH.group_match csl_trx_type='||CE_AUTO_BANK_MATCH.csl_trx_type);
2976     no_of_matches := 0;
2977 
2978     curr := 1;
2979     --
2980     -- 7571492: Added clearing_trx_type as 'PAYMENT' for a payment
2981     -- batch. Without this tolerances were not being properly fetched.
2982     --
2983     SELECT
2984         ab.batch_id,
2985         ab.row_id,
2986         1,
2987         ab.trx_currency_type,
2988         ab.currency_code,
2989         'PGROUP',       -- 7571492 : Changed to PGROUP
2990         ab.exchange_rate,
2991         ab.exchange_rate_date,
2992         ab.exchange_rate_type,
2993         ab.org_id,
2994         ab.legal_entity_id,
2995         ab.CE_BANK_ACCT_USE_ID,
2996         ab.logical_group_reference,
2997         'PAYMENT'                       -- bug 7571492
2998     INTO
2999         CE_AUTO_BANK_MATCH.trx_id,
3000         CE_AUTO_BANK_MATCH.trx_rowid,
3001         no_of_matches,
3002         CE_AUTO_BANK_MATCH.trx_currency_type,
3003         CE_AUTO_BANK_MATCH.trx_currency_code,
3004         CE_AUTO_BANK_MATCH.csl_match_type,
3005         CE_AUTO_BANK_MATCH.trx_exchange_rate,
3006         CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
3007         CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
3008         CE_AUTO_BANK_MATCH.trx_org_id,
3009         CE_AUTO_BANK_MATCH.trx_legal_entity_id,
3010         CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
3011         CE_AUTO_BANK_MATCH.logical_group_reference,
3012         CE_AUTO_BANK_MATCH.csl_clearing_trx_type -- bug 7571492
3013     FROM CE_200_GROUPS_V ab
3014     WHERE upper(ab.logical_group_reference) = upper(CE_AUTO_BANK_MATCH.csl_bank_trx_number)
3015       AND (ab.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, ab.org_id)
3016            or
3017            ab.legal_entity_id = nvl(CE_AUTO_BANK_REC.G_legal_entity_id, ab.legal_entity_id))
3018       AND ab.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id;
3019 
3020     -- 7571492 : Changed local variables in INTO clause to global variables.
3021     curr := 2;
3022     SELECT
3023         count(*),
3024         sum(catv.bank_account_amount),
3025         nvl(sum(catv.base_amount),0),
3026         nvl(sum(catv.amount_cleared),0),
3027         SUM(DECODE(catv.currency_code, CE_AUTO_BANK_MATCH.trx_currency_code,0,1)),
3028         sum(catv.amount),
3029         'PGROUP'
3030     INTO
3031         trx_count,
3032         CE_AUTO_BANK_MATCH.trx_amount,
3033         CE_AUTO_BANK_MATCH.trx_base_amount,
3034         CE_AUTO_BANK_MATCH.trx_cleared_amount,
3035         no_of_currencies,
3036         CE_AUTO_BANK_MATCH.trx_curr_amount,
3037         CE_AUTO_BANK_MATCH.csl_match_type
3038     FROM          ce_available_transactions_tmp catv
3039     WHERE    catv.batch_id = CE_AUTO_BANK_MATCH.trx_id
3040     AND        nvl(catv.status, 'NEGOTIABLE') <> 'VOIDED'
3041     AND        catv.application_id = 200
3042     AND        NVL(catv.reconciled_status_flag, 'N') = 'N'
3043     AND    EXISTS ( SELECT 1
3044                     FROM iby_payments_all IPA ,AP_CHECKS_ALL ACA
3045             WHERE ACA.CHECK_ID   =catv.trx_id
3046               AND ACA.PAYMENT_INSTRUCTION_ID  = CE_AUTO_BANK_MATCH.trx_id
3047               AND IPA.PAYMENT_INSTRUCTION_ID  = CE_AUTO_BANK_MATCH.trx_id
3048               AND IPA.PAYMENT_ID = ACA.PAYMENT_ID
3049               AND IPA.LOGICAL_GROUP_REFERENCE = NVL(CE_AUTO_BANK_MATCH.LOGICAL_GROUP_REFERENCE,IPA.LOGICAL_GROUP_REFERENCE));
3050 
3051   IF (trx_count = 0) THEN
3052     cep_standard.debug('No trx for group '||CE_AUTO_BANK_MATCH.csl_bank_trx_number);
3053     RAISE NO_DATA_FOUND;
3054   END IF;
3055   cep_standard.debug('Group trx_count = '||trx_count);
3056   cep_standard.debug('trx_amount = '||CE_AUTO_BANK_MATCH.trx_amount);
3057   cep_standard.debug('trx_base_amount = '||CE_AUTO_BANK_MATCH.trx_base_amount);
3058   cep_standard.debug('trx_cleared_amount = '||CE_AUTO_BANK_MATCH.trx_cleared_amount);
3059   cep_standard.debug('trx_curr_amount = '||CE_AUTO_BANK_MATCH.trx_curr_amount);
3060   cep_standard.debug('csl_match_type = '||CE_AUTO_BANK_MATCH.csl_match_type);
3061 
3062   IF (CE_AUTO_BANK_MATCH.aba_bank_currency <> CE_AUTO_BANK_REC.G_functional_currency) AND
3063      (CE_AUTO_BANK_MATCH.aba_bank_currency <> CE_AUTO_BANK_MATCH.trx_currency_code)
3064   THEN
3065     cep_standard.debug('Forex trx not using the same curr as account');
3066     curr := 6;
3067     RAISE NO_DATA_FOUND;
3068   END IF;
3069 
3070   cep_standard.debug('<<CE_AUTO_BANK_MATCH.group_match');
3071 
3072 EXCEPTION
3073   WHEN NO_DATA_FOUND THEN
3074     cep_standard.debug('EXCEPTION: #1 No data found in group_match');
3075     cep_standard.debug('curr = '||curr);
3076     if (curr = 6) then
3077       CE_RECONCILIATION_ERRORS_PKG.insert_row(
3078       CE_AUTO_BANK_MATCH.csh_statement_header_id,
3079       CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_FOREIGN_RECON');
3080     elsif (curr = 1) then
3081       CE_RECONCILIATION_ERRORS_PKG.insert_row(
3082       CE_AUTO_BANK_MATCH.csh_statement_header_id,
3083       CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_GROUP_P');
3084      end if;
3085     no_of_matches := 0;
3086   WHEN OTHERS THEN
3087     IF (SQL%NOTFOUND) THEN
3088       cep_standard.debug('EXCEPTION: NO data found in group_match');
3089       cep_standard.debug('curr = '||curr);
3090      CE_RECONCILIATION_ERRORS_PKG.insert_row(
3091         CE_AUTO_BANK_MATCH.csh_statement_header_id,
3092         CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_GROUP_P');
3093       no_of_matches:=0;
3094     ELSIF (SQL%ROWCOUNT >0) THEN
3095       cep_standard.debug('EXCEPTION: More than one batch match this group' );
3096       cep_standard.debug('curr = '||curr);
3097     CE_RECONCILIATION_ERRORS_PKG.insert_row(
3098         CE_AUTO_BANK_MATCH.csh_statement_header_id,
3099         CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_APG_PARTIAL');
3100       no_of_matches:=999;
3101     ELSE
3102       cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.group_match' );
3103       RAISE;
3104     END IF;
3105 END group_match;
3106 
3107 
3108 FUNCTION convert_to_base_curr( amount_to_convert NUMBER) RETURN NUMBER IS
3109   precision		NUMBER;
3110   ext_precision		NUMBER;
3111   min_acct_unit		NUMBER;
3112   acctd_amount		NUMBER;
3113   rounded_amount	NUMBER;
3114 BEGIN
3115   cep_standard.debug('>>CE_AUTO_BANK_MATCH.convert_to_base_curr');
3116 
3117   IF (CE_AUTO_BANK_MATCH.csl_exchange_rate_type <> 'User') THEN
3118 
3119     BEGIN
3120       acctd_amount := gl_currency_api.convert_amount(
3121 		CE_AUTO_BANK_MATCH.csl_currency_code,
3122 		CE_AUTO_BANK_REC.G_functional_currency,
3123 		nvl(CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
3124 		    CE_AUTO_BANK_MATCH.csl_trx_date),
3125 		CE_AUTO_BANK_MATCH.csl_exchange_rate_type,
3126 		amount_to_convert);
3127 
3128       cep_standard.debug('acctd_amount '||acctd_amount);
3129     EXCEPTION
3130       WHEN OTHERS THEN
3131 	cep_standard.debug('EXCEPTION: Could not convert amount');
3132 	acctd_amount := NULL;
3133     END;
3134 
3135     rounded_amount := acctd_amount;
3136 
3137   ELSE
3138 
3139     acctd_amount := amount_to_convert * CE_AUTO_BANK_MATCH.csl_exchange_rate;
3140     fnd_currency.get_info(CE_AUTO_BANK_MATCH.aba_bank_currency, precision,
3141 		ext_precision, min_acct_unit);
3142     IF (min_acct_unit IS NOT NULL) THEN
3143       rounded_amount := round(acctd_amount/min_acct_unit,0) * min_acct_unit;
3144     ELSE
3145       rounded_amount := round(acctd_amount,precision);
3146     END IF;
3147 
3148   END IF;
3149 
3150   cep_standard.debug('<<CE_AUTO_BANK_MATCH.convert_to_base_curr');
3151   RETURN(rounded_amount);
3152 
3153 EXCEPTION
3154   WHEN OTHERS THEN
3155     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.convert_to_base_curr');
3156     RAISE;
3157 END convert_to_base_curr;
3158 
3159 /* ---------------------------------------------------------------------
3160 |  PRIVATE PROCEDURE							|
3161 |	create_misc_trx     						|
3162 |									|
3163 |  DESCRIPTION								|
3164 |	Misc receipt can be created when				|
3165 |       1) csl_bank_trx_number is null and csl_create_misc_trx_flag=Y
3166 |       2) csl_bank_trx_number is not null and
3167 |	   no matching misc receipt  and
3168 |          csl_create_misc_trx_flag=Y
3169 |          bug 3407503, 4542114
3170 |  CALLED BY								|
3171 |	match_engine						        |
3172  --------------------------------------------------------------------- */
3173 PROCEDURE create_misc_trx IS
3174   no_of_currencies		NUMBER;
3175   x_statement_line_id		CE_STATEMENT_LINES.statement_line_id%TYPE;
3176   misc_exists			VARCHAR2(1);
3177   receipt_amount		NUMBER;
3178   base_receipt_amount		NUMBER;
3179   precision			NUMBER;
3180   ext_precision			NUMBER;
3181   min_acct_unit			NUMBER;
3182   l_vat_tax_id                  NUMBER;
3183   l_tax_rate                    NUMBER;
3184   l_trx_number CE_STATEMENT_LINES.BANK_TRX_NUMBER%TYPE; --Bug 3385023 added this variable.
3185   current_org_id		number;
3186   receivables_trx_org_id		number;
3187 BEGIN
3188   cep_standard.debug('>>CE_AUTO_BANK_MATCH.create_misc_trx');
3189 
3190 	-- Changes for Release 11.
3191 	-- We can create a new misc receipt only if the matching_against can
3192 	-- be a normal MISC (i.e. <> 'STMT').
3193 	IF (CE_AUTO_BANK_MATCH.csl_create_misc_trx_flag = 'Y' AND
3194 	    CE_AUTO_BANK_MATCH.csl_matching_against <> 'STMT') THEN
3195 
3196 	  cep_standard.debug('DEBUG: trx_curr: '||
3197 	      CE_AUTO_BANK_MATCH.trx_currency_type);
3198 
3199 	  IF (trx_currency_type = 'FOREIGN' and
3200 	      CE_AUTO_BANK_MATCH.aba_bank_currency
3201 	      <> CE_AUTO_BANK_REC.G_functional_currency) OR
3202 	      (trx_currency_type = 'FUNCTIONAL' and
3203 	      CE_AUTO_BANK_MATCH.aba_bank_currency
3204 	      <> CE_AUTO_BANK_REC.G_functional_currency) THEN
3205 
3206 	    CE_RECONCILIATION_ERRORS_PKG.insert_row(
3207 		CE_AUTO_BANK_MATCH.csh_statement_header_id,
3208 		CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_NO_FOREIGN_MISC');
3209 
3210 	  ELSE
3211 	    CE_AUTO_BANK_MATCH.csl_match_type 		:= 'CMISC';
3212 	    CE_AUTO_BANK_MATCH.csl_clearing_trx_type	:= 'MISC';
3213 	    CE_AUTO_BANK_MATCH.trx_status 		:= 'REMITTED';
3214 	    CE_AUTO_BANK_MATCH.trx_cleared_amount	:= 0;
3215 	    CE_AUTO_BANK_MATCH.trx_currency_code 	:=
3216 		NVL(CE_AUTO_BANK_MATCH.csl_currency_code,
3217 		CE_AUTO_BANK_MATCH.aba_bank_currency);
3218 	    IF (trx_validation(no_of_currencies)) THEN
3219 	      if (ce_auto_bank_match.csl_trx_type = 'MISC_DEBIT') then
3220 		CE_AUTO_BANK_MATCH.calc_csl_amount :=
3221 		    CE_AUTO_BANK_MATCH.calc_csl_amount -
3222 		    nvl(CE_AUTO_BANK_MATCH.csl_charges_amount,0);
3223 	      else
3224 	        CE_AUTO_BANK_MATCH.calc_csl_amount :=
3225 		    CE_AUTO_BANK_MATCH.calc_csl_amount +
3226 		    nvl(CE_AUTO_BANK_MATCH.csl_charges_amount,0);
3227 	      end if;
3228 
3229               --
3230               -- bug# 1180124
3231               -- If exchange type is pre-defined rate type, populate the
3232 	      -- exchange rate
3233 	      --
3234 	      -- bug 2293491
3235               IF ((CE_AUTO_BANK_MATCH.csl_exchange_rate_type is null and
3236 			CE_AUTO_BANK_MATCH.csl_exchange_rate_date is null and
3237 			CE_AUTO_BANK_MATCH.csl_exchange_rate is null) OR
3238 			(CE_AUTO_BANK_MATCH.csl_exchange_rate_type <> 'User' and
3239 			CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL)) THEN
3240 		IF (NOT validate_exchange_details) THEN
3241 		  cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.trx_validation' );
3242 		END IF;
3243 	      END IF;
3244 
3245 	      --
3246 	      -- bug# 939160
3247 	      -- Verified that exchange information is not null
3248 	      --    when creating foreign currency misc receipts
3249 	      --
3250 	      IF (CE_AUTO_BANK_MATCH.aba_bank_currency
3251 		  <> CE_AUTO_BANK_REC.G_functional_currency
3252 		  AND CE_AUTO_BANK_MATCH.csl_create_misc_trx_flag = 'Y'
3253 		  AND (CE_AUTO_BANK_MATCH.csl_exchange_rate_date IS NULL
3254 		  OR CE_AUTO_BANK_MATCH.csl_exchange_rate_type IS NULL
3255 		  OR CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL) ) THEN
3256 		CE_RECONCILIATION_ERRORS_PKG.insert_row(
3257 		  CE_AUTO_BANK_MATCH.csh_statement_header_id,
3258 		  CE_AUTO_BANK_MATCH.csl_statement_line_id,
3259 		  'CE_REQUIRED_EXCHANGE_FIELD');
3260 	      ELSE
3261 
3262 		-- bug# 1190376
3263 		-- Make sure the amount is converted to foreign curr
3264 		-- and the decimal is rounded correctly
3265 		--
3266 		IF (CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL
3267 		    OR CE_AUTO_BANK_MATCH.trx_currency_type = 'BANK') THEN
3268 		  receipt_amount := CE_AUTO_BANK_MATCH.calc_csl_amount;
3269 	   	  base_receipt_amount := receipt_amount;
3270 		ELSIF (CE_AUTO_BANK_MATCH.csl_exchange_rate_type <> 'User') THEN
3271 		  BEGIN
3272 		    receipt_amount := gl_currency_api.convert_amount(
3273                        		CE_AUTO_BANK_REC.G_functional_currency,
3274                        		CE_AUTO_BANK_MATCH.csl_currency_code,
3275                        		nvl(CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
3276 				CE_AUTO_BANK_MATCH.csl_trx_date),
3277                         	CE_AUTO_BANK_MATCH.csl_exchange_rate_type,
3278                         	CE_AUTO_BANK_MATCH.calc_csl_amount);
3279        		  EXCEPTION
3280 		    WHEN OTHERS THEN
3281 		      cep_standard.debug('EXCEPTION: Could not convert amount');
3282 		      receipt_amount := NULL;
3283 		  END;
3284 
3285 		  base_receipt_amount := convert_to_base_curr(receipt_amount);
3286 
3287 		ELSE -- forigen currency type 'User'
3288 
3289 		  receipt_amount := CE_AUTO_BANK_MATCH.calc_csl_amount *
3290 				(1/CE_AUTO_BANK_MATCH.csl_exchange_rate);
3291 	   	  fnd_currency.get_info(CE_AUTO_BANK_MATCH.aba_bank_currency,
3292 				precision, ext_precision, min_acct_unit);
3293 		  receipt_amount := round(receipt_amount,precision);
3294 		  base_receipt_amount := convert_to_base_curr(receipt_amount);
3295 
3296 		END IF;
3297 
3298 		if (CE_AUTO_BANK_MATCH.ar_accounting_method = 'ACCRUAL') then
3299 		  CE_AUTO_BANK_MATCH.get_vat_tax_id('AUTO_TRX',
3300 			l_vat_tax_id, l_tax_rate);
3301 		end if;
3302 
3303           /* Bug 3385023 - Start code fix */
3304 		--- Shorten the trx_number for the misc receipts created by the
3305 		--- AutoReconciliation Program.
3306 
3307 		IF CE_AUTO_BANK_MATCH.csl_bank_trx_number is not null then  -- for bug 6376250
3308 		   l_trx_number :=  CE_AUTO_BANK_MATCH.csl_bank_trx_number;
3309 		ELSE
3310 	   	   l_trx_number := CE_AUTO_BANK_MATCH.csh_statement_number||'/'||
3311      				 	          CE_AUTO_BANK_MATCH.csl_line_number;
3312 		END IF;
3313 		IF length(l_trx_number) > 30 THEN
3314 			l_trx_number := substrb(l_trx_number,
3315 				   		            length(l_trx_number)-25,
3316  	 				  	            length(l_trx_number));
3317 		END IF;
3318           /* Bug 3385023 - End code fix */
3319 
3320 		IF NOT(VALIDATE_PAYMENT_METHOD)  THEN
3321 			CE_RECONCILIATION_ERRORS_PKG.insert_row(CE_AUTO_BANK_MATCH.csh_statement_header_id,
3322 				CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_PAYMENT_METHOD');
3323 		ELSE
3324 
3325                   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_receivables_trx_id= '||
3326 						CE_AUTO_BANK_MATCH.csl_receivables_trx_id);
3327 
3328 		  -- bug 5185358  not able to create misc receipt
3329 		  get_receivables_org_id(receivables_trx_org_id);
3330 		  CE_AUTO_BANK_MATCH.trx_org_id := receivables_trx_org_id;
3331 
3332 		  cep_standard.debug('receivables_trx_org_id= '|| receivables_trx_org_id);
3333 
3334 		  set_single_org(receivables_trx_org_id);
3335 
3336 		  select mo_global.GET_CURRENT_ORG_ID
3337 		  into current_org_id
3338 		  from dual;
3339 
3340 		  cep_standard.debug('current_org_id =' ||current_org_id );
3341 
3342 		  cep_standard.debug('create_misc_trx: >> CE_AUTO_BANK_CLEAR.misc_receipt');
3343 
3344 		  CE_AUTO_BANK_CLEAR.misc_receipt(
3345 			X_passin_mode	    => 'AUTO_TRX',
3346 			X_trx_number 	    => l_trx_number,
3347 			X_doc_sequence_value  => to_number(NULL),
3348 			X_doc_sequence_id     => to_number(NULL),
3349 			X_gl_date	=> CE_AUTO_BANK_REC.G_gl_date,
3350 			X_value_date    =>
3351 			    CE_AUTO_BANK_MATCH.csl_effective_date,
3352 			X_trx_date	=>     CE_AUTO_BANK_MATCH.csl_trx_date,
3353 			X_deposit_date	    =>     CE_AUTO_BANK_MATCH.csl_trx_date,
3354 			X_amount		    => receipt_amount,
3355 			X_bank_account_amount => base_receipt_amount,
3356 			X_set_of_books_id	    =>
3357 			    CE_AUTO_BANK_REC.G_set_of_books_id,
3358 			X_misc_currency_code  =>
3359 			    NVL(CE_AUTO_BANK_MATCH.csl_currency_code,
3360 				CE_AUTO_BANK_MATCH.aba_bank_currency),
3361 			X_exchange_rate_date =>  CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
3362 			X_exchange_rate_type =>
3363 			    CE_AUTO_BANK_MATCH.csl_exchange_rate_type,
3364 			X_exchange_rate	=>
3365 			    CE_AUTO_BANK_MATCH.csl_exchange_rate,
3366 			X_receipt_method_id  =>
3367 			    CE_AUTO_BANK_MATCH.csl_receipt_method_id,
3368 			X_bank_account_id =>
3369 			    CE_AUTO_BANK_MATCH.csh_bank_account_id,
3370 			X_activity_type_id   =>
3371 			    CE_AUTO_BANK_MATCH.csl_receivables_trx_id,
3372 			X_comments	    => 'Created by Auto Bank Rec',
3373 			X_tax_id		    => l_vat_tax_id,
3374 			X_tax_rate	    => l_tax_rate,
3375 			X_paid_from	    => NULL,
3376 			X_reference_type    => NULL,
3377 			X_reference_id	    => NULL,
3378 			X_clear_currency_code => NULL,
3379 			X_statement_line_id   => X_statement_line_id,
3380 			X_module_name	    => 'CE_AUTO_BANK_REC',
3381 			X_cr_vat_tax_id	    =>
3382 			    CE_AUTO_BANK_REC.G_cr_vat_tax_code,
3383 			X_dr_vat_tax_id	    =>
3384 			    CE_AUTO_BANK_REC.G_dr_vat_tax_code,
3385 			trx_currency_type   =>
3386 			    CE_AUTO_BANK_MATCH.trx_currency_type,
3387 			X_cr_id		    =>
3388 			    CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
3389 			X_effective_date    =>
3390 			    CE_AUTO_BANK_MATCH.csl_effective_date,
3391 			X_org_id    =>
3392 			    nvl(CE_AUTO_BANK_MATCH.trx_org_id, CE_AUTO_BANK_REC.G_org_id));
3393 			    --CE_AUTO_BANK_MATCH.bau_org_id);
3394 		  cep_standard.debug('end create_misc_trx: >> CE_AUTO_BANK_CLEAR.misc_receipt');
3395 
3396 		CE_AUTO_BANK_MATCH.csl_match_found := 'FULL';
3397 		END IF;--validate payment method
3398 	      END IF; -- if not creating foreign misc receipts with null exchange info
3399 	    ELSE
3400 	      CE_AUTO_BANK_MATCH.csl_match_found := 'NONE';
3401 	    END IF; -- valid trx
3402 
3403 	    -- bug# 1190376
3404        	    CE_AUTO_BANK_MATCH.trx_amount := base_receipt_amount;
3405   	    CE_AUTO_BANK_MATCH.trx_curr_amount := receipt_amount;
3406   	    CE_AUTO_BANK_MATCH.trx_exchange_rate_date :=
3407 		CE_AUTO_BANK_MATCH.csl_exchange_rate_date;
3408   	    CE_AUTO_BANK_MATCH.trx_exchange_rate_type :=
3409 		CE_AUTO_BANK_MATCH.csl_exchange_rate_type;
3410 	    CE_AUTO_BANK_MATCH.trx_exchange_rate :=
3411 		CE_AUTO_BANK_MATCH.csl_exchange_rate;
3412 
3413 	  END IF; -- FOREIGN CURRENCY
3414 	ELSE 	-- create flag = 'N'
3415 	  CE_AUTO_BANK_MATCH.csl_match_found := 'NONE';
3416 	END IF;  -- If create-misc-flag = 'Y'
3417 
3418   cep_standard.debug('<<CE_AUTO_BANK_MATCH.create_misc_trx');
3419 
3420 EXCEPTION
3421   WHEN NO_DATA_FOUND THEN
3422     cep_standard.debug('CE_AUTO_BANK_MATCH.create_misc_trx no_data_found');
3423     RAISE NO_DATA_FOUND;
3424   WHEN OTHERS THEN
3425     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.create_misc_trx' );
3426     RAISE;
3427 
3428 END create_misc_trx;
3429 
3430 
3431 /* ---------------------------------------------------------------------
3432 |  PRIVATE FUNCTION							|
3433 |	trx_validation							|
3434 |									|
3435 |  DESCRIPTION								|
3436 |	After a match has been found, we need to validate the matching  |
3437 |	Trx. Things that are validated are:				|
3438 |	1. Exchange rate for foreign (BANK,FOREIGN) trxs		|
3439 |	2. For Foreign batches, all the trxs in a batch must be of same |
3440 |	   (batch) currency						|
3441 |	3. Tolerances							|
3442 |	4. For batches with toleranced differences we need to validate  |
3443 |	   payment method						|
3444 |	5. GL Date (open or future enterable in AP/AR)			|
3445 |	6. Future Dated Payment	- is not status 'ISSUED'(bug# 868977)	|
3446 |	7. The cleared GL date cannot be earlier than the original      |
3447 |          GL date of the receipt.	-bug 1941362                    |
3448 |	8. The cleared_date cannot be earlier than the original GL date |
3449 |	   of the receipts		-bug 1941362			|
3450 |									|
3451 |  CALLED BY								|
3452 |	match_line							|
3453  --------------------------------------------------------------------- */
3454 FUNCTION trx_validation(no_of_currencies	NUMBER) RETURN BOOLEAN IS
3455   valid_trx		BOOLEAN;
3456   comp_csl_amount	NUMBER;
3457   base_csl_amount	NUMBER;
3458   base_tolerance_amount	NUMBER;
3459   valid_trx_temp	varchar2(10);
3460 
3461 BEGIN
3462   cep_standard.debug('   ++++++++++++++ trx_validation ++++++++++++++ ');
3463   cep_standard.debug('>>CE_AUTO_BANK_MATCH.trx_validation');
3464   valid_trx := TRUE;
3465   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_match_type '||CE_AUTO_BANK_MATCH.csl_match_type ||
3466 		     ', CE_AUTO_BANK_MATCH.csl_clearing_trx_type ' ||CE_AUTO_BANK_MATCH.csl_clearing_trx_type );
3467 
3468   -- 7571492: Added 'PGROUP'
3469   IF (CE_AUTO_BANK_MATCH.csl_match_type IN
3470       ('PAYMENT','MISC','CASH','PBATCH','RBATCH', 'NSF', 'RECEIPT','PGROUP')) THEN
3471     IF (CE_AUTO_BANK_MATCH.csl_match_type IN ('PBATCH','RBATCH','PGROUP')) THEN
3472       IF (no_of_currencies > 0) THEN
3473 	valid_trx := FALSE;
3474 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
3475 	   CE_AUTO_BANK_MATCH.csh_statement_header_id,
3476 	   CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_PBATCH_CURRENCY');
3477       END IF;
3478     END IF;
3479     --
3480     -- Validate the transaction currency for foreign transactions
3481     --
3482     IF (CE_AUTO_BANK_MATCH.trx_currency_type IN ('BANK','FOREIGN')) THEN
3483       IF (NOT validate_exchange_details) THEN
3484     cep_standard.debug('not validate_exchange_details' );
3485 	valid_trx := FALSE;
3486       END IF;
3487     END IF;
3488     IF valid_trx THEN
3489 	valid_trx_temp := 'TRUE';
3490     ELSE
3491 	valid_trx_temp := 'FALSE';
3492     END IF;
3493     cep_standard.debug('valid_trx_temp  validate_exchange_details validate trx cur for FX trx ' ||valid_trx_temp);
3494     cep_standard.debug('DEBUG - trx_currency_type = ' || trx_currency_type);
3495     -------------------------------------------------------------------------
3496     --
3497     -- We calculate the tolerance here since here is where we need that
3498     -- for the first time
3499     --
3500     calc_actual_tolerance;
3501     cep_standard.debug('DEBUG#6.3- tolerance_amount = ' || tolerance_amount);
3502 
3503     -------------------------------------------------------------------------
3504     --
3505     -- Validate the transaction amount
3506     --
3507     IF (CE_AUTO_BANK_MATCH.csl_match_correction_type = 'REVERSAL') THEN
3508       CE_AUTO_BANK_MATCH.csl_charges_amount := NULL;
3509     ELSIF (CE_AUTO_BANK_MATCH.csl_match_correction_type = 'ADJUSTMENT') THEN
3510       if ((CE_AUTO_BANK_MATCH.csl_trx_type = 'MISC_DEBIT' AND
3511 	   CE_AUTO_BANK_MATCH.csl_match_type IN ('CASH', 'MISC')) OR
3512 	  (CE_AUTO_BANK_MATCH.csl_trx_type = 'MISC_CREDIT' AND
3513 	   CE_AUTO_BANK_MATCH.csl_match_type = 'PAYMENT')) then
3514 	comp_csl_amount := - CE_AUTO_BANK_MATCH.corr_csl_amount;
3515       else
3516 	comp_csl_amount := CE_AUTO_BANK_MATCH.corr_csl_amount;
3517       end if;
3518 
3519       cep_standard.debug('comp_csl_amount: '||comp_csl_amount);
3520       cep_standard.debug('trx_amount: '||trx_amount);
3521       if CE_AUTO_BANK_MATCH.trx_amount
3522 	NOT BETWEEN (comp_csl_amount
3523 		    - CE_AUTO_BANK_MATCH.tolerance_amount)
3524 	AND (comp_csl_amount
3525 		    + CE_AUTO_BANK_MATCH.tolerance_amount) then
3526 	valid_trx := FALSE;
3527 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
3528 	   CE_AUTO_BANK_MATCH.csh_statement_header_id,
3529 	   CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_PMT_AMOUNT');
3530       end if;
3531     ELSIF (CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'OI' AND
3532         CE_AUTO_BANK_REC.G_open_interface_matching_code = 'D') THEN
3533         -- do not perform the following check for open-interface transactions
3534         -- when matched by Date and Amount
3535         null;
3536     -- 7581995 : Statement line amount is always in bank-account currency
3537     ELSIF (
3538          CE_AUTO_BANK_MATCH.trx_amount
3539             NOT BETWEEN (CE_AUTO_BANK_MATCH.calc_csl_amount-CE_AUTO_BANK_MATCH.tolerance_amount)
3540                     AND (CE_AUTO_BANK_MATCH.calc_csl_amount+CE_AUTO_BANK_MATCH.tolerance_amount)
3541     ) THEN
3542 
3543         valid_trx := FALSE;
3544         CE_RECONCILIATION_ERRORS_PKG.insert_row(
3545             CE_AUTO_BANK_MATCH.csh_statement_header_id,
3546             CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_PMT_AMOUNT');
3547     --
3548     -- Validate the charges_amount
3549     --
3550     ELSIF (abs(CE_AUTO_BANK_MATCH.csl_charges_amount) > CE_AUTO_BANK_MATCH.tolerance_amount) THEN
3551         CE_RECONCILIATION_ERRORS_PKG.insert_row(
3552             CE_AUTO_BANK_MATCH.csh_statement_header_id,
3553             CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_CHARGES_AMOUNT');
3554         valid_trx:= FALSE;
3555     END IF;
3556     IF valid_trx THEN
3557 	valid_trx_temp := 'TRUE';
3558     ELSE
3559 	valid_trx_temp := 'FALSE';
3560     END IF;
3561 
3562     cep_standard.debug('valid_trx_temp validate charge amount ' ||valid_trx_temp);
3563 
3564     --
3565     -- If trx_currency_type is BANK, check that there are no gross
3566     -- discrepancies in foreign exchange rates provided
3567     --
3568     IF (CE_AUTO_BANK_MATCH.trx_currency_type = 'BANK' AND
3569 	CE_AUTO_BANK_MATCH.csl_match_type NOT IN ('CMISC')) THEN
3570       base_tolerance_amount 	:=
3571 	  convert_to_base_curr(CE_AUTO_BANK_MATCH.tolerance_amount);
3572       base_csl_amount		:=
3573 	  convert_to_base_curr(CE_AUTO_BANK_MATCH.calc_csl_amount);
3574 
3575       cep_standard.debug('calc_csl_amount: '||calc_csl_amount);
3576       cep_standard.debug('trx_base_amount: '||trx_base_amount);
3577       cep_standard.debug('base_csl_amount: '||base_csl_amount);
3578       cep_standard.debug('base_tolerance_amount: '||base_tolerance_amount);
3579 
3580       IF (CE_AUTO_BANK_MATCH.trx_base_amount
3581 	  NOT BETWEEN (base_csl_amount - base_tolerance_amount)
3582 		 AND (base_csl_amount + base_tolerance_amount)) THEN
3583 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
3584 	   CE_AUTO_BANK_MATCH.csh_statement_header_id,
3585 	   CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_XCH_AMOUNT');
3586 	valid_trx := FALSE;
3587       END IF;
3588     END IF;
3589 
3590   IF valid_trx THEN
3591 	valid_trx_temp := 'TRUE';
3592   ELSE
3593 	valid_trx_temp := 'FALSE';
3594   END IF;
3595   cep_standard.debug('valid_trx_temp  transaction amount ' ||valid_trx_temp);
3596 
3597     cep_standard.debug('DEBUG#6.5- calc_csl_amount = ' || calc_csl_amount);
3598     --
3599     -- Remittance batches with amount differences
3600     -- try to create misc receipts
3601     -- we need to validate the payment method
3602     --
3603     IF (CE_AUTO_BANK_MATCH.trx_amount <> CE_AUTO_BANK_MATCH.calc_csl_amount AND
3604 	CE_AUTO_BANK_MATCH.csl_match_type = 'RBATCH') THEN
3605       IF NOT (validate_payment_method) THEN
3606 	valid_trx := FALSE;
3607 	CE_RECONCILIATION_ERRORS_PKG.insert_row(CE_AUTO_BANK_MATCH.csh_statement_header_id,
3608 	   CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_PAYMENT_METHOD');
3609       END IF;
3610     END IF;
3611 
3612     --
3613     -- bug 868977
3614     -- Make sure the Future Dated Payment has already Matured
3615     -- with status 'NEGOTIABLE' and not 'ISSUED'
3616     --
3617     IF (CE_AUTO_BANK_MATCH.trx_status = 'ISSUED') THEN
3618       valid_trx := FALSE;
3619       CE_RECONCILIATION_ERRORS_PKG.insert_row(
3620 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
3621 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,
3622 	  'CE_CANNOT_RECONCILE_FD_PAYMENT');
3623     END IF;
3624 
3625   ELSIF (CE_AUTO_BANK_MATCH.csl_match_type IN  ('JE_LINE', 'PAY_LINE', 'PAY_EFT')) THEN
3626     --
3627     -- JE_LINE and PAY_LINE validation:
3628     --
3629     IF (CE_AUTO_BANK_MATCH.trx_amount <>CE_AUTO_BANK_MATCH.calc_csl_amount) THEN
3630       valid_trx := FALSE;
3631       CE_RECONCILIATION_ERRORS_PKG.insert_row(
3632 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
3633 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_PMT_AMOUNT');
3634     END IF;
3635   END IF;
3636 
3637   IF valid_trx THEN
3638 	valid_trx_temp := 'TRUE';
3639   ELSE
3640 	valid_trx_temp := 'FALSE';
3641   END IF;
3642   cep_standard.debug('valid_trx_temp batch ' ||valid_trx_temp);
3643  -------------------------------------------------------------------------------
3644   --
3645   -- Validate GL date #5
3646   --
3647   -- 7571492 : Added PGROUP for csl_match_type
3648   IF (CE_AUTO_BANK_MATCH.csl_match_type IN
3649       ('PAYMENT','CASH','MISC','PBATCH','RBATCH','CMISC','RECEIPT','PGROUP') --bug 4435028
3650       AND NVL(CE_AUTO_BANK_MATCH.csl_reconcile_flag, 'X') <> 'OI' ) THEN
3651     -- 7571492 : Added PGROUP for csl_match_type
3652     IF (CE_AUTO_BANK_MATCH.csl_match_type IN ('PBATCH','PAYMENT','PGROUP')) THEN
3653       IF(NOT(CE_AUTO_BANK_REC.find_gl_period(CE_AUTO_BANK_REC.G_gl_date, 200))) THEN
3654 	valid_trx:=FALSE;
3655 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
3656 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
3657 	    CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_INVALID_AP_PERIOD');
3658       END IF;
3659       -- bug 1196994
3660       -- 7571492 : Added PGROUP for csl_match_type
3661       IF (CE_AUTO_BANK_MATCH.csl_match_type in ('PAYMENT', 'PBATCH','PGROUP')
3662 	  and (to_char(CE_AUTO_BANK_MATCH.trx_date,'YYYY/MM/DD') >
3663 	  to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD'))) THEN
3664 	CE_AUTO_BANK_MATCH.trx_clr_flag := 'Y';
3665       END IF;
3666     ELSIF (NOT(CE_AUTO_BANK_REC.find_gl_period(CE_AUTO_BANK_REC.G_gl_date, 222))) THEN
3667       valid_trx:= FALSE;
3668       CE_RECONCILIATION_ERRORS_PKG.insert_row(
3669 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
3670 	  CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_INVALID_AR_PERIOD');
3671     END IF;
3672   END IF;
3673   IF valid_trx THEN
3674 	valid_trx_temp := 'TRUE';
3675   ELSE
3676 	valid_trx_temp := 'FALSE';
3677   END IF;
3678   cep_standard.debug('valid_trx_temp gl date ' ||valid_trx_temp);
3679  -------------------------------------------------------------------------------
3680 
3681   --
3682   --	7. The cleared GL date cannot be earlier than the original
3683   --          GL date of the receipt.	-bug 1941362
3684   --
3685   --
3686   -- cep_standard.debug('7 Before** to_date( CE_AUTO_BANK_REC.G_gl_date  = ' || CE_AUTO_BANK_REC.G_gl_date);
3687   -- cep_standard.debug('7 Before** to_date( CE_AUTO_BANK_REC.G_gl_date_original  = ' || CE_AUTO_BANK_REC.G_gl_date_original);
3688   -- cep_standard.debug('7 Before** to_date( CE_AUTO_BANK_MATCH.trx_gl_date  = ' || CE_AUTO_BANK_MATCH.trx_gl_date);
3689 
3690 
3691   IF ((CE_AUTO_BANK_MATCH.csl_match_type =  'CASH' or CE_AUTO_BANK_MATCH.csl_clearing_trx_type = 'CASHFLOW'  ) AND
3692        (to_char(CE_AUTO_BANK_REC.G_gl_date,'YYYY/MM/DD') < to_char(CE_AUTO_BANK_MATCH.trx_gl_date,'YYYY/MM/DD'))) THEN
3693      CE_AUTO_BANK_REC.G_gl_date := CE_AUTO_BANK_MATCH.trx_gl_date;
3694   END IF;
3695 
3696   -- cep_standard.debug('7 After** to_date(CE_AUTO_BANK_REC.G_gl_date  = ' || CE_AUTO_BANK_REC.G_gl_date);
3697 
3698   --
3699   --	8. The cleared_date cannot be earlier than the original GL date
3700   --	   of the receipts		-bug 1941362
3701   --
3702 
3703   -- cep_standard.debug('8 Before** to_date( CE_AUTO_BANK_MATCH.csl_trx_date  = ' || CE_AUTO_BANK_MATCH.csl_trx_date);
3704   -- cep_standard.debug('8 Before** to_date( CE_AUTO_BANK_REC.G_gl_date  = ' || CE_AUTO_BANK_REC.G_gl_date);
3705   -- cep_standard.debug('8 Before** to_date( CE_AUTO_BANK_MATCH.trx_date  = ' || CE_AUTO_BANK_MATCH.trx_date);
3706 
3707   IF ((CE_AUTO_BANK_MATCH.csl_match_type  = 'CASH' or CE_AUTO_BANK_MATCH.csl_clearing_trx_type = 'CASHFLOW' ) AND
3708         (to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD') < to_char(CE_AUTO_BANK_MATCH.trx_gl_date,'YYYY/MM/DD'))) THEN
3709        CE_AUTO_BANK_MATCH.csl_trx_date := CE_AUTO_BANK_MATCH.trx_gl_date;
3710   END IF;
3711 
3712   -- cep_standard.debug('8 After** to_date(CE_AUTO_BANK_MATCH.csl_trx_date  = ' || CE_AUTO_BANK_MATCH.csl_trx_date);
3713   -- cep_standard.debug('8 After** to_date(CE_AUTO_BANK_MATCH.trx_gl_date  = ' || CE_AUTO_BANK_MATCH.trx_gl_date);
3714 
3715   IF valid_trx THEN
3716 	valid_trx_temp := 'TRUE';
3717   ELSE
3718 	valid_trx_temp := 'FALSE';
3719   END IF;
3720   cep_standard.debug('valid_trx_temp 7 8 ' ||valid_trx_temp);
3721 
3722   --
3723   -- Lock the transaction
3724   --
3725 
3726  cep_standard.debug('trx_validation - call CE_AUTO_BANK_MATCH.lock_transaction');
3727  cep_standard.debug('CE_AUTO_BANK_MATCH.csl_match_type='||CE_AUTO_BANK_MATCH.csl_match_type||
3728 			', CE_AUTO_BANK_MATCH.csl_clearing_trx_type='||CE_AUTO_BANK_MATCH.csl_clearing_trx_type	);
3729 
3730 cep_standard.debug('CE_AUTO_BANK_MATCH.trx_rowid='||CE_AUTO_BANK_MATCH.trx_rowid||
3731 			', CE_AUTO_BANK_MATCH.trx_amount='||CE_AUTO_BANK_MATCH.trx_amount);
3732 
3733   BEGIN
3734     CE_AUTO_BANK_MATCH.lock_transaction(
3735 		'Y',
3736 		'U',
3737 		CE_AUTO_BANK_MATCH.csl_match_type,
3738 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
3739 		CE_AUTO_BANK_MATCH.trx_rowid,
3740 		CE_AUTO_BANK_MATCH.trx_amount);
3741   EXCEPTION
3742     WHEN NO_DATA_FOUND THEN
3743       CE_RECONCILIATION_ERRORS_PKG.insert_row(
3744 	 CE_AUTO_BANK_MATCH.csh_statement_header_id,
3745 	 CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_TRX_RECONCILED');
3746     WHEN APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION THEN
3747       CE_RECONCILIATION_ERRORS_PKG.insert_row(
3748 	 CE_AUTO_BANK_MATCH.csh_statement_header_id,
3749 	 CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_TRX_BUSY');
3750     WHEN OTHERS THEN
3751       RAISE;
3752   END;
3753 
3754   IF valid_trx THEN
3755 	valid_trx_temp := 'TRUE';
3756   ELSE
3757 	valid_trx_temp := 'FALSE';
3758   END IF;
3759   cep_standard.debug('valid_trx_temp ' ||valid_trx_temp);
3760   cep_standard.debug('<<CE_AUTO_BANK_MATCH.trx_validation');
3761 
3762   RETURN (valid_trx);
3763 EXCEPTION
3764   WHEN OTHERS THEN
3765     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.trx_validation' );
3766     RAISE;
3767 END trx_validation;
3768 
3769 /* ---------------------------------------------------------------------
3770 |  PRIVATE PROCEDURE							|
3771 |	trx_match       						|
3772 |									|
3773 |  DESCRIPTION								|
3774 |	Using the statement line trx number, try to find a matching	|
3775 |	check/receipt from CE_<APPL_ID>_TRANSACTIONS_V			|
3776 |									|
3777 |  CALLED BY								|
3778 |	match_line				         		|
3779  --------------------------------------------------------------------- */
3780 PROCEDURE trx_match(no_of_matches		OUT NOCOPY   NUMBER) IS
3781   tx_type	  CE_LOOKUPS.lookup_code%TYPE;
3782   curr		  NUMBER;
3783   tx_curr	  VARCHAR2(10);
3784   min_unit	  NUMBER;
3785   amount_to_match NUMBER;
3786   bank_charges	  NUMBER;
3787   stmt_amount	  NUMBER;
3788   precision	  NUMBER;
3789   ext_precision	  NUMBER;
3790   numeric_result_trx_num varchar2(40);
3791   /* Bug 2925260 */
3792   funct_curr_precision NUMBER;
3793   funct_curr_ext_precision NUMBER;
3794   funct_curr_min_acct_unit NUMBER;
3795   /* Bug 2925260 */
3796 
3797 BEGIN
3798   cep_standard.debug('>>CE_AUTO_BANK_MATCH.trx_match');
3799   no_of_matches := 0;
3800   -- bug 5122576 - zba trx in xtr
3801   IF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP','SWEEP_OUT') AND
3802      ( CE_AUTO_BANK_MATCH.csl_reconcile_flag NOT IN ('PAY', 'PAY_EFT'))) THEN
3803     tx_type := 'PAYMENT';
3804   ELSIF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('CREDIT','NSF','REJECTED','SWEEP_IN')) THEN
3805     tx_type := 'CASH';
3806   ELSIF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('MISC_CREDIT','MISC_DEBIT')) THEN
3807     tx_type := 'MISC';
3808   END IF;
3809   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_trx_type ' ||CE_AUTO_BANK_MATCH.csl_trx_type);
3810   cep_standard.debug('tx_type ' ||tx_type);
3811   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_reconcile_flag ' ||CE_AUTO_BANK_MATCH.csl_reconcile_flag);
3812 /*  cep_standard.debug('CE_AUTO_BANK_MATCH.bau_ar_use_enable_flag ' ||CE_AUTO_BANK_MATCH.bau_ar_use_enable_flag);
3813   cep_standard.debug('CE_AUTO_BANK_MATCH.bau_ap_use_enable_flag ' ||CE_AUTO_BANK_MATCH.bau_ap_use_enable_flag);
3814   cep_standard.debug('CE_AUTO_BANK_MATCH.bau_xtr_use_enable_flag ' ||CE_AUTO_BANK_MATCH.bau_xtr_use_enable_flag);
3815   cep_standard.debug('CE_AUTO_BANK_MATCH.bau_pay_use_enable_flag ' ||CE_AUTO_BANK_MATCH.bau_pay_use_enable_flag);*/
3816   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_bank_trx_number ' ||CE_AUTO_BANK_MATCH.csl_bank_trx_number);
3817 
3818   IF (CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'CE') THEN
3819 	ce_match(no_of_matches);
3820 
3821 
3822   ELSIF ((CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'PAY') AND
3823 	(CE_AUTO_BANK_MATCH.bau_pay_use_enable_flag = 'Y'))    THEN
3824     curr := 1;
3825     SELECT 	catv.trx_id,
3826 		catv.cash_receipt_id,
3827 		catv.row_id,
3828 		catv.trx_date,
3829 		catv.currency_code,
3830 		catv.bank_account_amount,
3831 		catv.base_amount,
3832 		catv.status,
3833 		nvl(catv.amount_cleared,0),
3834 		'PAY_LINE',
3835 		1,
3836 		catv.trx_currency_type,
3837 		catv.amount,
3838 		catv.clearing_trx_type,
3839 		catv.exchange_rate,
3840 		catv.exchange_rate_date,
3841 		catv.exchange_rate_type,
3842 		catv.org_id,
3843 		catv.CE_BANK_ACCT_USE_ID,
3844 		catv.seq_id
3845     INTO        CE_AUTO_BANK_MATCH.trx_id,
3846 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
3847 		CE_AUTO_BANK_MATCH.trx_rowid,
3848 		CE_AUTO_BANK_MATCH.trx_date,
3849 		CE_AUTO_BANK_MATCH.trx_currency_code,
3850 		CE_AUTO_BANK_MATCH.trx_amount,
3851 		CE_AUTO_BANK_MATCH.trx_base_amount,
3852 		CE_AUTO_BANK_MATCH.trx_status,
3853 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
3854 		CE_AUTO_BANK_MATCH.csl_match_type,
3855 		no_of_matches,
3856 		CE_AUTO_BANK_MATCH.trx_currency_type,
3857 		CE_AUTO_BANK_MATCH.trx_curr_amount,
3858 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
3859 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
3860 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
3861 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
3862 		CE_AUTO_BANK_MATCH.trx_org_id,
3863  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
3864 		CE_AUTO_BANK_MATCH.gt_seq_id
3865     --FROM        ce_801_transactions_v catv
3866     FROM        ce_available_transactions_tmp catv
3867     WHERE       catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
3868     AND		catv.bank_account_amount = CE_AUTO_BANK_MATCH.csl_amount
3869     AND		catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, catv.org_id)
3870     --AND		catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
3871     AND		catv.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number
3872     AND		catv.application_id = 801
3873     AND		NVL(catv.reconciled_status_flag, 'N') = 'N';
3874 
3875   ELSIF (CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'JE') THEN
3876 
3877     curr := 2;
3878     SELECT 	catv.trx_id,
3879 		catv.cash_receipt_id,
3880 		catv.row_id,
3881 		catv.trx_date,
3882 		catv.currency_code,
3883 		catv.bank_account_amount,
3884 		catv.base_amount,
3885 		catv.status,
3886 		nvl(catv.amount_cleared,0),
3887 		'JE_LINE',
3888 		1,
3889 		catv.trx_currency_type,
3890 		catv.amount,
3891 		catv.clearing_trx_type,
3892 		catv.exchange_rate,
3893 		catv.exchange_rate_date,
3894 		catv.exchange_rate_type,
3895 		catv.seq_id
3896     INTO        CE_AUTO_BANK_MATCH.trx_id,
3897 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
3898 		CE_AUTO_BANK_MATCH.trx_rowid,
3899 		CE_AUTO_BANK_MATCH.trx_date,
3900 		CE_AUTO_BANK_MATCH.trx_currency_code,
3901 		CE_AUTO_BANK_MATCH.trx_amount,
3902 		CE_AUTO_BANK_MATCH.trx_base_amount,
3903 		CE_AUTO_BANK_MATCH.trx_status,
3904 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
3905 		CE_AUTO_BANK_MATCH.csl_match_type,
3906 		no_of_matches,
3907 		CE_AUTO_BANK_MATCH.trx_currency_type,
3908 		CE_AUTO_BANK_MATCH.trx_curr_amount,
3909 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
3910 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
3911 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
3912 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
3913 		CE_AUTO_BANK_MATCH.gt_seq_id
3914     --FROM        ce_101_transactions_v catv
3915     FROM    	ce_available_transactions_tmp  catv
3916     WHERE       catv.trx_type = tx_type
3917     AND         catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
3918     AND         catv.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number
3919     AND		catv.application_id = 101
3920     AND		NVL(catv.reconciled_status_flag, 'N') = 'N';
3921 
3922   ELSIF (CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'OI') THEN
3923 
3924   cep_standard.debug('CE_AUTO_BANK_MATCH.bau_xtr_use_enable_flag ' ||CE_AUTO_BANK_MATCH.bau_xtr_use_enable_flag);
3925 
3926     curr := 3;
3927 
3928     if (CE_AUTO_BANK_REC.G_open_interface_matching_code = 'T') then
3929       IF ((CE_AUTO_BANK_REC.G_legal_entity_id is not null) or
3930           (CE_AUTO_BANK_MATCH.bau_xtr_use_enable_flag = 'Y'))  THEN
3931 
3932 	  cep_standard.debug('use ce_185_transactions_v ' );
3933 
3934         SELECT    catv.trx_id,
3935 		catv.cash_receipt_id,
3936 		catv.row_id,
3937 		catv.trx_date,
3938 		catv.currency_code,
3939 		catv.bank_account_amount,
3940 		catv.base_amount,
3941 		catv.status,
3942 		nvl(catv.amount_cleared,0),
3943 		catv.trx_type,
3944 		1,
3945 		catv.trx_currency_type,
3946 		catv.amount,
3947 		catv.clearing_trx_type,
3948 		catv.exchange_rate,
3949 		catv.exchange_rate_date,
3950 		catv.exchange_rate_type,
3951 		catv.legal_entity_id,
3952 		catv.CE_BANK_ACCT_USE_ID,
3953 		catv.seq_id
3954         INTO      CE_AUTO_BANK_MATCH.trx_id,
3955 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
3956 		CE_AUTO_BANK_MATCH.trx_rowid,
3957 		CE_AUTO_BANK_MATCH.trx_date,
3958 		CE_AUTO_BANK_MATCH.trx_currency_code,
3959 		CE_AUTO_BANK_MATCH.trx_amount,
3960 		CE_AUTO_BANK_MATCH.trx_base_amount,
3961 		CE_AUTO_BANK_MATCH.trx_status,
3962 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
3963 		CE_AUTO_BANK_MATCH.csl_match_type,
3964 		no_of_matches,
3965 		CE_AUTO_BANK_MATCH.trx_currency_type,
3966 		CE_AUTO_BANK_MATCH.trx_curr_amount,
3967 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
3968 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
3969 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
3970 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
3971 		CE_AUTO_BANK_MATCH.trx_legal_entity_id,
3972  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
3973 		CE_AUTO_BANK_MATCH.gt_seq_id
3974         --FROM      ce_185_transactions_v catv
3975         FROM      ce_available_transactions_tmp catv
3976         WHERE     catv.trx_type = tx_type
3977         AND       catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
3978         AND	catv.legal_entity_id = nvl(CE_AUTO_BANK_REC.G_legal_entity_id,CE_AUTO_BANK_REC.G_legal_entity_id)
3979         --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
3980         AND       catv.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number
3981         AND	catv.application_id = 185
3982         AND     NVL(catv.reconciled_status_flag, 'N') = 'N';
3983       ELSE -- no LE_ID or not XTR acct
3984 	cep_standard.debug('use ce_999_transactions_v ' );
3985 
3986         SELECT    catv.trx_id,
3987 		catv.cash_receipt_id,
3988 		catv.row_id,
3989 		catv.trx_date,
3990 		catv.currency_code,
3991 		catv.bank_account_amount,
3992 		catv.base_amount,
3993 		catv.status,
3994 		nvl(catv.amount_cleared,0),
3995 		catv.trx_type,
3996 		1,
3997 		catv.trx_currency_type,
3998 		catv.amount,
3999 		catv.clearing_trx_type,
4000 		catv.exchange_rate,
4001 		catv.exchange_rate_date,
4002 		catv.exchange_rate_type,
4003 		catv.legal_entity_id,
4004 		catv.seq_id
4005         INTO      CE_AUTO_BANK_MATCH.trx_id,
4006 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
4007 		CE_AUTO_BANK_MATCH.trx_rowid,
4008 		CE_AUTO_BANK_MATCH.trx_date,
4009 		CE_AUTO_BANK_MATCH.trx_currency_code,
4010 		CE_AUTO_BANK_MATCH.trx_amount,
4011 		CE_AUTO_BANK_MATCH.trx_base_amount,
4012 		CE_AUTO_BANK_MATCH.trx_status,
4013 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
4014 		CE_AUTO_BANK_MATCH.csl_match_type,
4015 		no_of_matches,
4016 		CE_AUTO_BANK_MATCH.trx_currency_type,
4017 		CE_AUTO_BANK_MATCH.trx_curr_amount,
4018 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
4019 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
4020 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
4021 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
4022 		CE_AUTO_BANK_MATCH.trx_legal_entity_id,
4023 		CE_AUTO_BANK_MATCH.gt_seq_id
4024         --FROM      ce_999_transactions_v catv
4025         FROM      ce_available_transactions_tmp catv
4026         WHERE     catv.trx_type = tx_type
4027         AND       catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4028         --AND	catv.legal_entity_id = nvl(CE_AUTO_BANK_REC.G_legal_entity_id,CE_AUTO_BANK_REC.G_legal_entity_id)
4029         --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4030         AND       catv.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number
4031         AND	catv.application_id = 999
4032  	AND	NVL(catv.reconciled_status_flag, 'N') = 'N';
4033 
4034       END IF;
4035     else  -- match by DATE and AMOUNT
4036 
4037      cep_standard.debug('match by DATE and AMOUNT ' );
4038      -- bug 5122576 issue with zba trx in xtr
4039      --if (CE_AUTO_BANK_MATCH.csl_trx_type = 'CREDIT') then
4040      if (CE_AUTO_BANK_MATCH.csl_trx_type in ('SWEEP_IN', 'CREDIT')) then
4041 	bank_charges := -nvl(CE_AUTO_BANK_MATCH.csl_charges_amount,0);
4042       else
4043 	bank_charges := nvl(CE_AUTO_BANK_MATCH.csl_charges_amount,0);
4044       end if;
4045       stmt_amount := CE_AUTO_BANK_MATCH.csl_amount - bank_charges;
4046       tx_curr := nvl(CE_AUTO_BANK_MATCH.csl_currency_code,
4047                         CE_AUTO_BANK_MATCH.aba_bank_currency);
4048       fnd_currency.get_info(tx_curr, precision, ext_precision,
4049 			min_unit);
4050 
4051       if (tx_curr = CE_AUTO_BANK_MATCH.aba_bank_currency) then
4052 
4053         /* bank currency match */
4054         amount_to_match := round(stmt_amount, precision);
4055 
4056    cep_standard.debug('tx_type='||tx_type ||', amount_to_match =' || amount_to_match);
4057 
4058         match_oi_trx(tx_type, tx_curr, amount_to_match, precision,
4059                 no_of_matches);
4060 
4061       else
4062 
4063         /* foreign currency match */
4064         if (CE_AUTO_BANK_MATCH.csl_original_amount is not null) then
4065           if (nvl(CE_AUTO_BANK_MATCH.csl_charges_amount,0) <> 0) then
4066             if (nvl(CE_AUTO_BANK_MATCH.csl_exchange_rate,0) = 0) then
4067               no_of_matches := 0;
4068 	      IF (CE_AUTO_BANK_MATCH.csl_currency_code <>
4069 		  CE_AUTO_BANK_MATCH.aba_bank_currency AND
4070 		  CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL) THEN
4071 		CE_RECONCILIATION_ERRORS_PKG.insert_row(
4072 		    CE_AUTO_BANK_MATCH.csh_statement_header_id,
4073 		    CE_AUTO_BANK_MATCH.csl_statement_line_id,
4074 		    'CE_REQUIRED_EXCHANGE_FIELD');
4075 	      END IF;
4076 	      RAISE NO_DATA_FOUND;
4077             else
4078               amount_to_match := round(stmt_amount
4079 		  / CE_AUTO_BANK_MATCH.csl_exchange_rate, precision);
4080 
4081    cep_standard.debug('tx_type='||tx_type ||', amount_to_match =' || amount_to_match);
4082 
4083               match_oi_trx(tx_type, tx_curr, amount_to_match, precision,
4084 		  no_of_matches);
4085             end if;
4086           else
4087             amount_to_match := round(CE_AUTO_BANK_MATCH.csl_original_amount,
4088 		precision);
4089 
4090    cep_standard.debug('tx_type='||tx_type ||', amount_to_match =' || amount_to_match);
4091 
4092             match_oi_trx(tx_type, tx_curr, amount_to_match, precision,
4093 		no_of_matches);
4094           end if;
4095         else
4096           if (nvl(CE_AUTO_BANK_MATCH.csl_exchange_rate,0) = 0) then
4097 	    no_of_matches := 0;
4098 	    IF (CE_AUTO_BANK_MATCH.csl_currency_code <>
4099 		CE_AUTO_BANK_MATCH.aba_bank_currency AND
4100 		CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL) THEN
4101 		CE_RECONCILIATION_ERRORS_PKG.insert_row(
4102 		    CE_AUTO_BANK_MATCH.csh_statement_header_id,
4103 		    CE_AUTO_BANK_MATCH.csl_statement_line_id,
4104 		    'CE_REQUIRED_EXCHANGE_FIELD');
4105 	    END IF;
4106 	    RAISE NO_DATA_FOUND;
4107           else
4108             amount_to_match := round(stmt_amount
4109 		/ CE_AUTO_BANK_MATCH.csl_exchange_rate, precision);
4110 
4111    cep_standard.debug('tx_type='||tx_type ||', amount_to_match =' || amount_to_match);
4112 
4113             match_oi_trx(tx_type, tx_curr, amount_to_match, precision,
4114 		no_of_matches);
4115           end if;
4116         end if;
4117       end if;
4118 
4119     end if;
4120 
4121   ELSIF ((CE_AUTO_BANK_MATCH.csl_trx_type IN ('NSF','REJECTED')) AND
4122 	 (CE_AUTO_BANK_MATCH.bau_ar_use_enable_flag = 'Y'))  THEN
4123 
4124     curr := 4;
4125     SELECT 	catv.trx_id,
4126 		catv.cash_receipt_id,
4127 		catv.row_id,
4128 		catv.trx_date,
4129 		catv.currency_code,
4130 		catv.bank_account_amount,
4131 		catv.base_amount,
4132 		catv.status,
4133 		nvl(catv.amount_cleared,0),
4134 		catv.trx_type,
4135 		1,
4136 		catv.trx_currency_type,
4137 		catv.amount,
4138 		catv.trx_type,
4139 		to_number(NULL),
4140 		to_date(NULL),
4141 		NULL,
4142 		catv.customer_id,
4143 		'N',  -- reversed receipt flag
4144 		catv.org_id,
4145 		catv.CE_BANK_ACCT_USE_ID,
4146 		-1
4147     INTO	CE_AUTO_BANK_MATCH.trx_id,
4148 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
4149 		CE_AUTO_BANK_MATCH.trx_rowid,
4150 		CE_AUTO_BANK_MATCH.trx_date,
4151 		CE_AUTO_BANK_MATCH.trx_currency_code,
4152 		CE_AUTO_BANK_MATCH.trx_amount,
4153 		CE_AUTO_BANK_MATCH.trx_base_amount,
4154 		CE_AUTO_BANK_MATCH.trx_status,
4155 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
4156 		CE_AUTO_BANK_MATCH.csl_match_type,
4157 		no_of_matches,
4158 		CE_AUTO_BANK_MATCH.trx_currency_type,
4159 		CE_AUTO_BANK_MATCH.trx_curr_amount,
4160 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
4161 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
4162 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
4163 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
4164 		CE_AUTO_BANK_MATCH.trx_customer_id,
4165 		CE_AUTO_BANK_MATCH.reversed_receipt_flag,
4166  		CE_AUTO_BANK_MATCH.trx_org_id,
4167  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
4168 		CE_AUTO_BANK_MATCH.gt_seq_id
4169    FROM  	ce_222_reversal_v catv
4170     WHERE	DECODE(tx_type,'CASH',
4171 				DECODE(catv.trx_type,'MISC',
4172 						     'CASH',
4173 						     catv.trx_type),
4174 				catv.trx_type) = tx_type
4175     AND		catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4176     AND		catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, catv.org_id)
4177     --AND		catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4178     AND		catv.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number
4179     AND		catv.status = decode(CE_AUTO_BANK_REC.G_nsf_handling,
4180 				'REVERSE',catv.status,
4181 				'DM REVERSE',catv.status, 'REVERSED')
4182     UNION
4183     SELECT      catv.trx_id,
4184 		catv.cash_receipt_id,
4185 		catv.row_id,
4186 		catv.trx_date,
4187 		catv.currency_code,
4188 		catv.bank_account_amount,
4189 		catv.base_amount,
4190 		catv.status,
4191 		nvl(catv.amount_cleared,0),
4192 		catv.trx_type,
4193 		1,
4194 		catv.trx_currency_type,
4195 		catv.amount,
4196 		catv.trx_type,
4197 		to_number(NULL),
4198 		to_date(NULL),
4199 		NULL,
4200 		catv.customer_id,
4201 		NVL(catv.reversed_receipt_flag, 'N'),
4202 		catv.org_id,
4203 		catv.CE_BANK_ACCT_USE_ID,
4204 		catv.seq_id
4205     --FROM        ce_222_transactions_v catv
4206     FROM        ce_available_transactions_tmp catv
4207     WHERE       DECODE(tx_type,'CASH',
4208 				DECODE(catv.trx_type,'MISC',
4209 						     'CASH',
4210 						     catv.trx_type),
4211 				catv.trx_type) = tx_type
4212     AND         catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4213     AND		catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, catv.org_id)
4214     --AND		catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4215     AND         catv.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number
4216     AND		catv.status = 'REVERSED'
4217     AND		catv.application_id = 222
4218     AND		NVL(catv.reconciled_status_flag, 'N') = 'N';
4219 
4220   ELSIF ((tx_type IN ('CASH','MISC')) AND
4221 	 (CE_AUTO_BANK_MATCH.bau_ar_use_enable_flag = 'Y'))  THEN
4222   cep_standard.debug('curr 5 ' );
4223 
4224     curr := 5;
4225     SELECT	catv.trx_id,
4226 		catv.cash_receipt_id,
4227 		catv.row_id,
4228 		catv.trx_date,
4229 		catv.currency_code,
4230 		catv.bank_account_amount,
4231 		catv.base_amount,
4232 		catv.status,
4233 		nvl(catv.amount_cleared,0),
4234 		catv.trx_type,
4235 		1,
4236 		catv.trx_currency_type,
4237 		catv.amount,
4238 		catv.clearing_trx_type,
4239 		catv.exchange_rate,
4240 		catv.exchange_rate_date,
4241 		catv.exchange_rate_type,
4242 		NVL(catv.reversed_receipt_flag, 'N'),
4243 		catv.gl_date,
4244 		catv.org_id,
4245 		catv.CE_BANK_ACCT_USE_ID,
4246 		catv.seq_id
4247     INTO	CE_AUTO_BANK_MATCH.trx_id,
4248 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
4249 		CE_AUTO_BANK_MATCH.trx_rowid,
4250 		CE_AUTO_BANK_MATCH.trx_date,
4251 		CE_AUTO_BANK_MATCH.trx_currency_code,
4252 		CE_AUTO_BANK_MATCH.trx_amount,
4253 		CE_AUTO_BANK_MATCH.trx_base_amount,
4254 		CE_AUTO_BANK_MATCH.trx_status,
4255 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
4256 		CE_AUTO_BANK_MATCH.csl_match_type,
4257 		no_of_matches,
4258 		CE_AUTO_BANK_MATCH.trx_currency_type,
4259 		CE_AUTO_BANK_MATCH.trx_curr_amount,
4260 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
4261 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
4262 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
4263 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
4264 		CE_AUTO_BANK_MATCH.reversed_receipt_flag,
4265 		CE_AUTO_BANK_MATCH.trx_gl_date ,
4266  		CE_AUTO_BANK_MATCH.trx_org_id,
4267  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
4268 		CE_AUTO_BANK_MATCH.gt_seq_id
4269    --FROM  	ce_222_transactions_v catv
4270     FROM        ce_available_transactions_tmp catv
4271     WHERE	DECODE(tx_type,'CASH',
4272 				DECODE(catv.trx_type,'MISC',
4273 						     'CASH',
4274 						     catv.trx_type),
4275 				catv.trx_type) = tx_type
4276     AND		catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4277     AND		catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, catv.org_id)
4278     --AND		catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4279     AND		catv.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number
4280     AND         catv.status <> 'REVERSED'
4281     AND		catv.application_id = 222
4282     AND		NVL(catv.reconciled_status_flag, 'N') = 'N';
4283 
4284   ELSIF ((tx_type = 'PAYMENT') AND
4285 	 (CE_AUTO_BANK_MATCH.bau_ap_use_enable_flag = 'Y'))  THEN
4286 
4287     curr := 6;
4288     numeric_result_trx_num := ce_check_numeric(CE_AUTO_BANK_MATCH.csl_bank_trx_number,
4289 						1,length(CE_AUTO_BANK_MATCH.csl_bank_trx_number));
4290 
4291     if (numeric_result_trx_num = '0') then /* CE_AUTO_BANK_MATCH.csl_bank_trx_number is numeric */
4292       SELECT	catv.trx_id,
4293 		catv.cash_receipt_id,
4294 		catv.row_id,
4295 		catv.trx_date,
4296 		catv.currency_code,
4297 		catv.bank_account_amount,
4298 		catv.base_amount,
4299 		catv.status,
4300 		nvl(catv.amount_cleared,0),
4301 		'PAYMENT', /* catv.trx_type, */
4302 		1,
4303 		catv.trx_currency_type,
4304 		catv.amount,
4305 		'PAYMENT', /* catv.clearing_trx_type, */
4306 		catv.exchange_rate,
4307 		catv.exchange_rate_date,
4308 		catv.exchange_rate_type,
4309                	catv.gl_date,
4310                	catv.cleared_date,
4311 		catv.org_id,
4312 		catv.CE_BANK_ACCT_USE_ID,
4313 		catv.seq_id
4314       INTO	CE_AUTO_BANK_MATCH.trx_id,
4315 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
4316 		CE_AUTO_BANK_MATCH.trx_rowid,
4317 		CE_AUTO_BANK_MATCH.trx_date,
4318 		CE_AUTO_BANK_MATCH.trx_currency_code,
4319 		CE_AUTO_BANK_MATCH.trx_amount,
4320 		CE_AUTO_BANK_MATCH.trx_base_amount,
4321 		CE_AUTO_BANK_MATCH.trx_status,
4322 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
4323 		CE_AUTO_BANK_MATCH.csl_match_type,
4324 		no_of_matches,
4325 		CE_AUTO_BANK_MATCH.trx_currency_type,
4326 		CE_AUTO_BANK_MATCH.trx_curr_amount,
4327 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
4328 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
4329 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
4330 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
4331 		CE_AUTO_BANK_MATCH.trx_gl_date,
4332                 CE_AUTO_BANK_MATCH.trx_cleared_date,
4333  		CE_AUTO_BANK_MATCH.trx_org_id,
4334  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
4335 		CE_AUTO_BANK_MATCH.gt_seq_id
4336       --FROM  	ce_200_transactions_v catv
4337       FROM	ce_available_transactions_tmp  catv
4338       WHERE	catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4339       AND	catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, catv.org_id)
4340       --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4341       AND	catv.check_number =
4342 		to_number(LTRIM(CE_AUTO_BANK_MATCH.csl_bank_trx_number, '0'))
4343       AND	catv.application_id = 200
4344       AND       NVL(catv.reconciled_status_flag, 'N') = 'N';
4345     else /* CE_AUTO_BANK_MATCH.csl_bank_trx_number is alphanumeric */
4346       SELECT	catv.trx_id,
4347 		catv.cash_receipt_id,
4348 		catv.row_id,
4349 		catv.trx_date,
4350 		catv.currency_code,
4351 		catv.bank_account_amount,
4352 		catv.base_amount,
4353 		catv.status,
4354 		nvl(catv.amount_cleared,0),
4355 		'PAYMENT', /* catv.trx_type, */
4356 		1,
4357 		catv.trx_currency_type,
4358 		catv.amount,
4359 		'PAYMENT', /* catv.clearing_trx_type, */
4360 		catv.exchange_rate,
4361 		catv.exchange_rate_date,
4362 		catv.exchange_rate_type,
4363                	catv.gl_date,
4364                	catv.cleared_date,
4365 		catv.org_id,
4366 		catv.CE_BANK_ACCT_USE_ID,
4367 		catv.seq_id
4368       INTO	CE_AUTO_BANK_MATCH.trx_id,
4369 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
4370 		CE_AUTO_BANK_MATCH.trx_rowid,
4371 		CE_AUTO_BANK_MATCH.trx_date,
4372 		CE_AUTO_BANK_MATCH.trx_currency_code,
4373 		CE_AUTO_BANK_MATCH.trx_amount,
4374 		CE_AUTO_BANK_MATCH.trx_base_amount,
4375 		CE_AUTO_BANK_MATCH.trx_status,
4376 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
4377 		CE_AUTO_BANK_MATCH.csl_match_type,
4378 		no_of_matches,
4379 		CE_AUTO_BANK_MATCH.trx_currency_type,
4380 		CE_AUTO_BANK_MATCH.trx_curr_amount,
4381 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
4382 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
4383 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
4384 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
4385 		CE_AUTO_BANK_MATCH.trx_gl_date,
4386                 CE_AUTO_BANK_MATCH.trx_cleared_date,
4387  		CE_AUTO_BANK_MATCH.trx_org_id,
4388  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
4389 		CE_AUTO_BANK_MATCH.gt_seq_id
4390       --FROM  	ce_200_transactions_v catv
4391       FROM	ce_available_transactions_tmp  catv
4392       WHERE	catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4393       --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4394       AND	catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,catv.org_id)
4395       AND	catv.trx_number =
4396 		LTRIM(CE_AUTO_BANK_MATCH.csl_bank_trx_number, '0')
4397       AND	catv.application_id = 200
4398       AND	NVL(catv.reconciled_status_flag, 'N') = 'N';
4399 
4400     END IF;
4401     /* Bug 2925260
4402        The amount is not rounded in the view. */
4403 
4404     IF ((CE_AUTO_BANK_MATCH.trx_currency_type = 'FOREIGN')
4405        AND (CE_AUTO_BANK_MATCH.trx_currency_code <>
4406             CE_AUTO_BANK_REC.G_functional_currency)) THEN
4407 	fnd_currency.get_info(CE_AUTO_BANK_REC.G_functional_currency,
4408                                 funct_curr_precision,
4409                                 funct_curr_ext_precision,
4410                                 funct_curr_min_acct_unit);
4411         CE_AUTO_BANK_MATCH.trx_amount :=
4412                         round(CE_AUTO_BANK_MATCH.trx_curr_amount *
4413                               CE_AUTO_BANK_MATCH.trx_exchange_rate,
4414                               funct_curr_precision);
4415     END IF;
4416     /* Bug 2925260
4417        End Code Changes */
4418 
4419   END IF;
4420 
4421   IF (CE_AUTO_BANK_MATCH.aba_bank_currency <>
4422 	  CE_AUTO_BANK_REC.G_functional_currency) and
4423      (CE_AUTO_BANK_MATCH.aba_bank_currency <>
4424 	  CE_AUTO_BANK_MATCH.trx_currency_code) THEN
4425     cep_standard.debug('Forex account not using the same curr as bk');
4426     curr := 9;
4427     RAISE NO_DATA_FOUND;
4428   END IF;
4429 
4430   cep_standard.debug('<<CE_AUTO_BANK_MATCH.trx_match');
4431 
4432 EXCEPTION
4433   WHEN NO_DATA_FOUND THEN
4434     cep_standard.debug('EXCEPTION: No data found in trx_match');
4435     if (curr = 7) then
4436       CE_RECONCILIATION_ERRORS_PKG.insert_row(
4437 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
4438 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_BAD_ARL');
4439     elsif (curr = 8) then
4440       CE_RECONCILIATION_ERRORS_PKG.insert_row(
4441 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
4442 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_BAD_NSF');
4443     elsif (curr = 9) then
4444       CE_RECONCILIATION_ERRORS_PKG.insert_row(
4445 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
4446 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_NO_FOREIGN_RECON');
4447     elsif (curr = 4 or curr = 5) then
4448       IF (CE_AUTO_BANK_MATCH.csl_trx_type in
4449 	  ('CREDIT','MISC_CREDIT','MISC_DEBIT')) THEN
4450 	IF (CE_AUTO_BANK_MATCH.trx_status = 'REVERSED') then
4451 	  cep_standard.debug('>>receipt with reversed status');
4452 	  CE_RECONCILIATION_ERRORS_PKG.insert_row(
4453 	      CE_AUTO_BANK_MATCH.csh_statement_header_id,
4454 	      CE_AUTO_BANK_MATCH.csl_statement_line_id,
4455 	      'CE_STATEMENT_REVERSAL_NSF');
4456 	ELSIF (CE_AUTO_BANK_MATCH.trx_status NOT IN
4457 	    ('REMITTED', 'CLEARED', 'RISK_ELIMINATED')) THEN
4458 	  cep_standard.debug('>>receipt with wrong status');
4459 	  CE_RECONCILIATION_ERRORS_PKG.insert_row(
4460 	      CE_AUTO_BANK_MATCH.csh_statement_header_id,
4461 	      CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_BAD_ARL');
4462 	ELSE
4463 	  CE_RECONCILIATION_ERRORS_PKG.insert_row(
4464 	      CE_AUTO_BANK_MATCH.csh_statement_header_id,
4465 	      CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_ARL');
4466 	END IF;
4467       ELSE -- NSF, REJECTED
4468 	IF (CE_AUTO_BANK_MATCH.trx_status NOT IN
4469 	   ('REMITTED', 'CLEARED', 'RISK_ELIMINATED','REVERSED')) THEN
4470 	  cep_standard.debug('>>NSF/REJECTED with wrong status');
4471 	  CE_RECONCILIATION_ERRORS_PKG.insert_row(
4472 	      CE_AUTO_BANK_MATCH.csh_statement_header_id,
4473 	      CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_BAD_NSF');
4474 	END IF;
4475       END IF;
4476     elsif (curr = 1) then
4477       CE_RECONCILIATION_ERRORS_PKG.insert_row(
4478 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
4479 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_PAYL');
4480     elsif (curr = 2) then
4481       CE_RECONCILIATION_ERRORS_PKG.insert_row(
4482 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
4483 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_JEL');
4484     elsif (curr = 3) then
4485       CE_RECONCILIATION_ERRORS_PKG.insert_row(
4486 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
4487 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_OIL');
4488     elsif (curr = 6) then
4489       CE_RECONCILIATION_ERRORS_PKG.insert_row(
4490 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
4491 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_APL');
4492 	     end if;
4493       no_of_matches := 0;
4494   WHEN OTHERS THEN
4495     IF (SQL%ROWCOUNT >0) THEN
4496       cep_standard.debug('EXCEPTION: More than one transaction match this receipt' );
4497       if (CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'JE') then
4498 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
4499 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
4500 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_JEL_PARTIAL');
4501       elsif (CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'OI') then
4502 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
4503 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
4504 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_OIL_PARTIAL');
4505       elsif (CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'PAY') then
4506 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
4507 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
4508 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_PAYL_PARTIAL');
4509       elsif (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT','STOP')) then
4510 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
4511 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
4512 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_APT_PARTIAL');
4513       else
4514 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
4515 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
4516 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_ART_PARTIAL');
4517       end if;
4518       no_of_matches:=999;
4519     ELSE
4520       cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.trx_match' );
4521       RAISE;
4522     END IF;
4523 END trx_match;
4524 
4525 /* ---------------------------------------------------------------------
4526 |  PRIVATE PROCEDURE                                                    |
4527 |       stmtline_match                                                  |
4528 |                                                                       |
4529 |  DESCRIPTION                                                          |
4530 |       Using the statement line trx number, try to find a matching     |
4531 |       statement line from CE_260_TRANSACTIONS_V                       |
4532 |                                                                       |
4533 |  CALLED BY                                                            |
4534 |       match_line                                                      |
4535  --------------------------------------------------------------------- */
4536 PROCEDURE stmtline_match(no_of_matches            IN OUT NOCOPY   NUMBER) IS
4537    cursor get_reversal is
4538 	SELECT  catv.trx_id,
4539 		catv.cash_receipt_id,
4540 		catv.row_id,
4541 		catv.trx_date,
4542 		catv.currency_code,
4543 		catv.bank_account_amount,
4544 		catv.base_amount,
4545 		catv.status,
4546 		nvl(catv.amount_cleared,0),
4547 		catv.trx_type,
4548 		1,
4549 		catv.trx_currency_type,
4550 		catv.amount,
4551 		catv.clearing_trx_type,
4552 		catv.exchange_rate,
4553 		catv.exchange_rate_date,
4554 		catv.exchange_rate_type,
4555 		catv.seq_id
4556 	--FROM	ce_260_transactions_v catv
4557         FROM    ce_available_transactions_tmp catv
4558 	WHERE	catv.trx_id <> CE_AUTO_BANK_MATCH.csl_statement_line_id
4559 	AND	catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4560 	AND 	nvl(catv.trx_number, '-99999') =
4561 			nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number, '-99999')
4562 	AND	(nvl(catv.invoice_text, '-99999') =
4563 			nvl(CE_AUTO_BANK_MATCH.csl_invoice_text,'-99999')
4564 	AND	(nvl(catv.bank_account_text,'-99999') =
4565 			nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')
4566 			or nvl(catv.customer_text,'-99999') =
4567 			nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')))
4568 	AND	catv.trx_type in (
4569 			decode(csl_trx_type,
4570 				'MISC_DEBIT', 'CREDIT',
4571 				'DEBIT'),
4572 			decode(csl_trx_type,
4573 				'MISC_DEBIT', 'MISC_CREDIT',
4574 				'MISC_DEBIT'))
4575 	AND	catv.bank_account_amount = CE_AUTO_BANK_MATCH.csl_amount
4576 	AND	to_char(catv.trx_date,'YYYY/MM/DD') <=
4577 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
4578         AND	catv.application_id = 260
4579         AND   	NVL(catv.reconciled_status_flag, 'N') = 'N';
4580 
4581    cursor get_adjustment(tolerance_amount_ap NUMBER,tolerance_amount_ar NUMBER) is
4582        SELECT   catv.trx_id,
4583 		catv.row_id,
4584 		catv.trx_date,
4585 		catv.currency_code,
4586 		catv.bank_account_amount,
4587 		catv.base_amount,
4588 		catv.status,
4589 		nvl(catv.amount_cleared,0),
4590 		catv.trx_type,
4591 		1,
4592 		catv.trx_currency_type,
4593 		catv.amount,
4594 		catv.trx_type,
4595 		catv.exchange_rate,
4596 		catv.exchange_rate_date,
4597 		catv.exchange_rate_type,
4598 		catv.seq_id,
4599 		v.trx_id,
4600 		v.cash_receipt_id,
4601 		v.row_id,
4602 		v.trx_date,
4603 		v.currency_code,
4604 		v.bank_account_amount,
4605 		v.base_amount,
4606 		v.status,
4607 		nvl(v.amount_cleared,0),
4608 		v.trx_type,
4609 		v.trx_currency_type,
4610 		v.amount,
4611 		v.clearing_trx_type,
4612 		v.exchange_rate,
4613 		v.exchange_rate_date,
4614 		v.exchange_rate_type,
4615                	v.gl_date,
4616                	v.cleared_date,
4617 		v.org_id,
4618 		v.CE_BANK_ACCT_USE_ID,
4619 		v.seq_id
4620 	--FROM    ce_222_transactions_v v, ce_260_transactions_v catv
4621         FROM    ce_available_transactions_tmp v, ce_available_transactions_tmp catv
4622 	WHERE	catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4623 	AND     nvl(catv.trx_number, '-99999') =
4624 			nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number,'-99999')
4625 	AND	(nvl(catv.invoice_text, '-99999') =
4626 			nvl(CE_AUTO_BANK_MATCH.csl_invoice_text,'-99999')
4627 			and (nvl(catv.customer_text, '-99999') =
4628 			nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')
4629 			or nvl(catv.bank_account_text, '-99999') =
4630 			nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')))
4631 	AND     catv.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number
4632 	AND     to_char(catv.trx_date,'YYYY/MM/DD') <=
4633 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
4634 	AND     catv.trx_id <> CE_AUTO_BANK_MATCH.csl_statement_line_id
4635 	AND	catv.trx_type in ('MISC_DEBIT', 'MISC_CREDIT')
4636 	AND	v.trx_type = 'MISC'
4637 	AND	v.bank_account_id = catv.bank_account_id
4638         --AND	v.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4639         AND	v.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,v.org_id)
4640 	AND    	v.trx_number = nvl(catv.trx_number,v.trx_number)
4641 	AND    	to_char(v.trx_date,'YYYY/MM/DD') <=
4642 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
4643 	AND    	v.status in ('REMITTED', 'CLEARED', 'RISK_ELIMINATED')
4644 	AND    	v.bank_account_amount
4645 			between (CE_AUTO_BANK_MATCH.calc_csl_amount +
4646 			  decode(catv.trx_type,
4647 				'MISC_CREDIT', catv.amount,
4648 				- catv.amount)
4649 			  - decode(catv.trx_currency_type,
4650 				'BANK', tolerance_amount_ar,
4651 				CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance))
4652 			and (CE_AUTO_BANK_MATCH.calc_csl_amount +
4653 			  decode(catv.trx_type,
4654 				'MISC_CREDIT', catv.amount,
4655 				- catv.amount)
4656 			  + decode(catv.trx_currency_type,
4657 				'BANK', tolerance_amount_ar,
4658 				CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance))
4659 	AND     v.bank_account_amount
4660 			between ((CE_AUTO_BANK_MATCH.calc_csl_amount +
4661 			  decode(catv.trx_type,
4662 				'MISC_CREDIT', catv.amount,
4663 				- catv.amount))
4664 			  - abs((CE_AUTO_BANK_MATCH.calc_csl_amount +
4665 			  decode(catv.trx_type,
4666 				'MISC_CREDIT', catv.amount,
4667 			  	- catv.amount))
4668 			  * CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100))
4669 			and ((CE_AUTO_BANK_MATCH.calc_csl_amount +
4670 			  decode(catv.trx_type,
4671 				'MISC_CREDIT', catv.amount,
4672 				- catv.amount))
4673 			  + abs((CE_AUTO_BANK_MATCH.calc_csl_amount +
4674 			  decode(catv.trx_type,
4675 				'MISC_CREDIT', catv.amount,
4676 			  	- catv.amount))
4677 			  * CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100))
4678         AND	v.application_id = 222
4679         AND	NVL(v.reconciled_status_flag, 'N') = 'N'
4680         AND	catv.application_id = 260
4681         AND	NVL(catv.reconciled_status_flag, 'N') = 'N'
4682 	UNION
4683        SELECT   catv.trx_id,
4684 		catv.row_id,
4685 		catv.trx_date,
4686 		catv.currency_code,
4687 		catv.bank_account_amount,
4688 		catv.base_amount,
4689 		catv.status,
4690 		nvl(catv.amount_cleared,0),
4691 		catv.trx_type,
4692 		1,
4693 		catv.trx_currency_type,
4694 		catv.amount,
4695 		catv.trx_type,
4696 		catv.exchange_rate,
4697 		catv.exchange_rate_date,
4698 		catv.exchange_rate_type,
4699 		catv.seq_id,
4700 		v.trx_id,
4701 		v.cash_receipt_id,
4702 		v.row_id,
4703 		v.trx_date,
4704 		v.currency_code,
4705 		v.bank_account_amount,
4706 		v.base_amount,
4707 		v.status,
4708 		nvl(v.amount_cleared,0),
4709 		v.trx_type,
4710 		v.trx_currency_type,
4711 		v.amount,
4712 		v.clearing_trx_type,
4713 		v.exchange_rate,
4714 		v.exchange_rate_date,
4715 		v.exchange_rate_type,
4716                 v.gl_date,
4717                 v.cleared_date,
4718 		v.org_id,
4719 		v.CE_BANK_ACCT_USE_ID,
4720 		v.seq_id
4721        --FROM     ce_222_transactions_v v, ce_260_transactions_v catv
4722        FROM     ce_available_transactions_tmp v, ce_available_transactions_tmp catv
4723        WHERE    catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4724        AND      nvl(catv.trx_number, '-99999') =
4725 			nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number,'-99999')
4726        AND	(nvl(catv.invoice_text, '-99999') =
4727 			nvl(CE_AUTO_BANK_MATCH.csl_invoice_text,'-99999')
4728 			and (nvl(catv.customer_text, '-99999') =
4729 			nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')
4730 			or nvl(catv.bank_account_text, '-99999') =
4731 			nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')))
4732        AND      to_char(catv.trx_date,'YYYY/MM/DD') <=
4733 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
4734        AND      catv.trx_id <> CE_AUTO_BANK_MATCH.csl_statement_line_id
4735        AND      catv.trx_type in ('DEBIT', 'CREDIT')
4736        AND      v.trx_type = 'CASH'
4737        AND	v.bank_account_id = catv.bank_account_id
4738        --AND	v.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4739        AND	v.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, v.org_id)
4740        AND    	v.trx_number = nvl(catv.trx_number,v.trx_number)
4741        AND    	to_char(v.trx_date,'YYYY/MM/DD') <=
4742 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
4743        AND    	v.status in ('REMITTED', 'CLEARED', 'RISK_ELIMINATED')
4744        AND      CE_AUTO_BANK_MATCH.calc_csl_amount +
4745 		    decode(catv.trx_type,'DEBIT',-catv.amount, catv.amount) > 0
4746        AND    	v.bank_account_amount
4747 		between (CE_AUTO_BANK_MATCH.calc_csl_amount +
4748 		  decode(catv.trx_type, 'CREDIT', catv.amount, - catv.amount)
4749 		  - decode(catv.trx_currency_type, 'BANK', tolerance_amount_ar,
4750 			CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance))
4751 		and (CE_AUTO_BANK_MATCH.calc_csl_amount +
4752 		  decode(catv.trx_type, 'CREDIT', catv.amount, - catv.amount)
4753 		  + decode(catv.trx_currency_type, 'BANK', tolerance_amount_ar,
4754 			CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance))
4755        AND      v.bank_account_amount
4756 		between ((CE_AUTO_BANK_MATCH.calc_csl_amount +
4757 		  decode(catv.trx_type, 'CREDIT', catv.amount, - catv.amount))
4758 		  - abs((CE_AUTO_BANK_MATCH.calc_csl_amount +
4759 		  decode(catv.trx_type, 'CREDIT', catv.amount, - catv.amount))
4760 		  * CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100))
4761 		and ((CE_AUTO_BANK_MATCH.calc_csl_amount +
4762 		  decode(catv.trx_type, 'CREDIT', catv.amount, - catv.amount))
4763 		  + abs((CE_AUTO_BANK_MATCH.calc_csl_amount +
4764 		  decode(catv.trx_type, 'CREDIT', catv.amount, - catv.amount))
4765 		  * CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance/ 100))
4766        AND	v.application_id = 222
4767        AND	NVL(v.reconciled_status_flag, 'N') = 'N'
4768        AND	catv.application_id = 260
4769        AND     	NVL(catv.reconciled_status_flag, 'N') = 'N'
4770        UNION
4771        SELECT   catv.trx_id,
4772 		catv.row_id,
4773 		catv.trx_date,
4774 		catv.currency_code,
4775 		catv.bank_account_amount,
4776 		catv.base_amount,
4777 		catv.status,
4778 		nvl(catv.amount_cleared,0),
4779 		catv.trx_type,
4780 		1,
4781 		catv.trx_currency_type,
4782 		catv.amount,
4783 		catv.trx_type,
4784 		catv.exchange_rate,
4785 		catv.exchange_rate_date,
4786 		catv.exchange_rate_type,
4787 		catv.seq_id,
4788 		v2.trx_id,
4789 		v2.cash_receipt_id,
4790 		v2.row_id,
4791 		v2.trx_date,
4792 		v2.currency_code,
4793 		v2.bank_account_amount,
4794 		v2.base_amount,
4795 		v2.status,
4796 		nvl(v2.amount_cleared,0),
4797 		'PAYMENT', /* v2.trx_type, */
4798 		v2.trx_currency_type,
4799 		v2.amount,
4800 		'PAYMENT', /* v2.clearing_trx_type, */
4801 		v2.exchange_rate,
4802 		v2.exchange_rate_date,
4803 		v2.exchange_rate_type,
4804                 v2.gl_date,
4805                 v2.cleared_date,
4806 		v2.org_id,
4807 		v2.CE_BANK_ACCT_USE_ID,
4808 		v2.seq_id
4809        --FROM     ce_200_transactions_v v2, ce_260_transactions_v catv
4810        FROM  	ce_available_transactions_tmp v2, ce_available_transactions_tmp  catv
4811        WHERE    catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4812        AND      nvl(catv.trx_number, '-99999') =
4813 			nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number,'-99999')
4814        AND	(nvl(catv.invoice_text, '-99999') =
4815 			nvl(CE_AUTO_BANK_MATCH.csl_invoice_text,'-99999')
4816 			and (nvl(catv.customer_text, '-99999') =
4817 			nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')
4818 			or nvl(catv.bank_account_text, '-99999') =
4819 			nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')))
4820        AND      to_char(catv.trx_date,'YYYY/MM/DD') <=
4821 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
4822        AND      catv.trx_id <> CE_AUTO_BANK_MATCH.csl_statement_line_id
4823        AND      catv.trx_type in ('DEBIT', 'CREDIT')
4824        AND	v2.bank_account_id = catv.bank_account_id
4825        AND	v2.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, v2.org_id)
4826        --AND	v2.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4827        AND    	v2.trx_number = nvl(catv.trx_number,v2.trx_number)
4828        AND    	to_char(v2.trx_date,'YYYY/MM/DD') <=
4829 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
4830        AND      CE_AUTO_BANK_MATCH.calc_csl_amount +
4831 		decode(catv.trx_type, 'DEBIT', - catv.amount, catv.amount) < 0
4832        AND      v2.bank_account_amount
4833 		between (- CE_AUTO_BANK_MATCH.calc_csl_amount +
4834 		  decode(catv.trx_type, 'DEBIT', catv.amount, - catv.amount)
4835 		  - decode(catv.trx_currency_type, 'BANK', tolerance_amount_ap,
4836 			CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance))
4837 		and (- CE_AUTO_BANK_MATCH.calc_csl_amount +
4838 		  decode(catv.trx_type, 'DEBIT', catv.amount, - catv.amount)
4839 		  + decode(catv.trx_currency_type, 'BANK', tolerance_amount_ap,
4840 			CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance))
4841        AND      v2.bank_account_amount
4842 		between ((- CE_AUTO_BANK_MATCH.calc_csl_amount +
4843 		  decode(catv.trx_type, 'DEBIT', catv.amount, - catv.amount))
4844 		  - abs((- CE_AUTO_BANK_MATCH.calc_csl_amount +
4845 		  decode(catv.trx_type, 'DEBIT', catv.amount, - catv.amount))
4846 		  * CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance / 100))
4847 		and ((- CE_AUTO_BANK_MATCH.calc_csl_amount +
4848 		  decode(catv.trx_type, 'DEBIT', catv.amount, - catv.amount))
4849 		  + abs((- CE_AUTO_BANK_MATCH.calc_csl_amount +
4850 		  decode(catv.trx_type, 'DEBIT', catv.amount, - catv.amount))
4851 		  * CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance / 100))
4852        AND	v2.application_id = 200
4853        AND	NVL(v2.reconciled_status_flag, 'N') = 'N'
4854        AND	catv.application_id = 260
4855        AND	NVL(catv.reconciled_status_flag, 'N') = 'N';
4856 
4857   cursor get_rev_credit is
4858        SELECT   catv.statement_line_id,
4859 		catv.trx_id,
4860 		catv.cash_receipt_id,
4861 		catv.row_id,
4862 		catv.trx_date,
4863 		catv.currency_code,
4864 		catv.bank_account_amount,
4865 		catv.status,
4866 		nvl(catv.amount_cleared,0),
4867 		catv.trx_type,
4868 		1,
4869 		catv.trx_currency_type,
4870 		catv.amount,
4871 		catv.clearing_trx_type,
4872 		catv.exchange_rate,
4873 		catv.exchange_rate_date,
4874 		catv.exchange_rate_type,
4875 		catv.org_id,
4876 		catv.CE_BANK_ACCT_USE_ID
4877        FROM     ce_200_reconciled_v catv
4878        WHERE    catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4879        --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4880        AND	catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, catv.org_id)
4881        AND      nvl(catv.trx_number,'-99999')
4882 			= nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number,'-99999')
4883        AND      (nvl(catv.invoice_text, '-99999')
4884 			= nvl(CE_AUTO_BANK_MATCH.csl_invoice_text,'-99999')
4885 		and (nvl(catv.customer_text, '-99999')
4886 			= nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')
4887 		     or
4888 		     nvl(catv.bank_account_text, '-99999')
4889 		= nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')))
4890        AND      catv.bank_account_amount = CE_AUTO_BANK_MATCH.csl_amount
4891        AND      to_char(catv.trx_date,'YYYY/MM/DD') <=
4892 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
4893        AND      catv.request_id = nvl(FND_GLOBAL.conc_request_id,-1)
4894        AND NOT EXISTS
4895 	  (select NULL
4896 	   from   ce_statement_reconcils_all r
4897 	   where  r.statement_line_id = catv.statement_line_id
4898 	   and    r.current_record_flag = 'Y'
4899 	   and    nvl(r.status_flag, 'U') <> 'U'
4900 	   AND    r.reference_type = 'STATEMENT');
4901 
4902   cursor get_rev_debit is
4903        SELECT   catv.statement_line_id,
4904 		catv.trx_id,
4905 		catv.cash_receipt_id,
4906 		catv.row_id,
4907 		catv.trx_date,
4908 		catv.currency_code,
4909 		catv.bank_account_amount,
4910 		catv.status,
4911 		nvl(catv.amount_cleared,0),
4912 		catv.trx_type,
4913 		1,
4914 		catv.trx_currency_type,
4915 		catv.amount,
4916 		catv.clearing_trx_type,
4917 		catv.exchange_rate,
4918 		catv.exchange_rate_date,
4919 		catv.exchange_rate_type,
4920 		catv.org_id,
4921 		catv.CE_BANK_ACCT_USE_ID
4922        FROM     ce_222_reconciled_v catv
4923        WHERE    catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4924        --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4925        AND	catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,catv.org_id)
4926        AND      nvl(catv.trx_number,'-99999')
4927 			= nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number,'-99999')
4928        AND      (nvl(catv.invoice_text, '-99999')
4929 			= nvl(CE_AUTO_BANK_MATCH.csl_invoice_text,'-99999')
4930 		and (nvl(catv.customer_text, '-99999')
4931 			= nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')
4932 		     or
4933 		     nvl(catv.bank_account_text, '-99999')
4934 			= nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')))
4935        AND      catv.bank_account_amount = decode(csl_trx_type,
4936 			'MISC_CREDIT', - CE_AUTO_BANK_MATCH.csl_amount,
4937 			CE_AUTO_BANK_MATCH.csl_amount)
4938        AND      to_char(catv.trx_date,'YYYY/MM/DD') <=
4939 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
4940        AND      catv.request_id = nvl(FND_GLOBAL.conc_request_id,-1)
4941        AND NOT EXISTS
4942 	  (select NULL
4943 	   from   ce_statement_reconcils_all r
4944 	   where  r.statement_line_id = catv.statement_line_id
4945 	   and    r.current_record_flag = 'Y'
4946 	   and    nvl(r.status_flag, 'U') <> 'U'
4947 	   AND    r.reference_type = 'STATEMENT');
4948 
4949   cursor get_recon_adj_misc(tolerance_amount NUMBER) is
4950        SELECT   sl.statement_line_id,
4951 		'RECEIPT',
4952 		sl.trx_type,
4953 		sl.rowid,
4954 		sl.amount,
4955 		catv.trx_id,
4956 		catv.cash_receipt_id,
4957 		catv.row_id,
4958 		catv.trx_date,
4959 		catv.currency_code,
4960 		catv.bank_account_amount,
4961 		catv.status,
4962 		nvl(catv.amount_cleared,0),
4963 		catv.trx_type,
4964 		1,
4965 		catv.trx_currency_type,
4966 		catv.amount,
4967 		catv.clearing_trx_type,
4968 		catv.exchange_rate,
4969 		catv.exchange_rate_date,
4970 		catv.exchange_rate_type,
4971 		catv.org_id,
4972 		catv.CE_BANK_ACCT_USE_ID
4973        FROM     ce_222_reconciled_v catv, ce_statement_lines sl
4974        WHERE    nvl(sl.bank_trx_number,'-9999') =
4975 			nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number, '-9999')
4976        AND      (nvl(sl.invoice_text, '-99999') =
4977 			nvl(CE_AUTO_BANK_MATCH.csl_invoice_text, '-99999')
4978 			and (nvl(sl.bank_account_text, '-99999') =
4979 			nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')
4980 			or nvl(sl.customer_text, '-99999') =
4981 			nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')))
4982        AND      sl.statement_line_id = catv.statement_line_id
4983        AND      sl.trx_type in ('MISC_DEBIT', 'MISC_CREDIT')
4984        AND      catv.trx_type = 'MISC'
4985        AND      catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
4986        --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
4987        AND	catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id, catv.org_id)
4988        AND      nvl(catv.trx_number, '-99999')
4989 			 = nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number,'-99999')
4990        AND      to_char(catv.trx_date,'YYYY/MM/DD') <=
4991 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
4992        AND      catv.request_id = nvl(FND_GLOBAL.conc_request_id,-1)
4993        AND      catv.bank_account_amount
4994 		between (decode(sl.trx_type,
4995 				'MISC_CREDIT', sl.amount,
4996 				- sl.amount) +
4997 			 decode(CE_AUTO_BANK_MATCH.csl_trx_type,
4998 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
4999 				CE_AUTO_BANK_MATCH.csl_amount)
5000 			 - decode(catv.trx_currency_type,
5001 				'BANK', tolerance_amount,
5002 				CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance))
5003 		and     (decode(sl.trx_type,
5004 				'MISC_CREDIT', sl.amount,
5005 				- sl.amount) +
5006 			 decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5007 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5008 				CE_AUTO_BANK_MATCH.csl_amount)
5009 			 + decode(catv.trx_currency_type,
5010 				'BANK', tolerance_amount,
5011 				CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance))
5012        AND      catv.bank_account_amount
5013 		between ((decode(sl.trx_type,
5014 				'MISC_CREDIT', sl.amount,
5015 				- sl.amount) +
5016 			decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5017 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5018 				CE_AUTO_BANK_MATCH.csl_amount))
5019 				- abs((decode(sl.trx_type,
5020 					'MISC_CREDIT', sl.amount,
5021 					- sl.amount) +
5022 			decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5023 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5024 				CE_AUTO_BANK_MATCH.csl_amount)) *
5025 				CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100))
5026 		and	((decode(sl.trx_type,
5027 				'MISC_CREDIT', sl.amount,
5028 				- sl.amount)
5029 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5030 				 'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5031 				CE_AUTO_BANK_MATCH.csl_amount))
5032 			+ abs((decode(sl.trx_type,
5033 				'MISC_CREDIT', sl.amount,
5034 				- sl.amount)
5035 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5036 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5037 				CE_AUTO_BANK_MATCH.csl_amount)) *
5038 				CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100))
5039        AND NOT EXISTS
5040 	  (select NULL
5041 	   from   ce_statement_reconcils_all r
5042 	   where  r.statement_line_id = catv.statement_line_id
5043 	   and    r.current_record_flag = 'Y'
5044 	   and    nvl(r.status_flag, 'U') <> 'U'
5045 	   AND    r.reference_type = 'STATEMENT');
5046 
5047   cursor get_recon_adj_cash(tolerance_amount NUMBER) is
5048        SELECT   sl.statement_line_id,
5049 		'RECEIPT',
5050 		sl.trx_type,
5051 		sl.rowid,
5052 		sl.amount,
5053 		catv.trx_id,
5054 		catv.cash_receipt_id,
5055 		catv.row_id,
5056 		catv.trx_date,
5057 		catv.currency_code,
5058 		catv.bank_account_amount,
5059 		catv.status,
5060 		nvl(catv.amount_cleared,0),
5061 		catv.trx_type,
5062 		1,
5063 		catv.trx_currency_type,
5064 		catv.amount,
5065 		catv.clearing_trx_type,
5066 		catv.exchange_rate,
5067 		catv.exchange_rate_date,
5068 		catv.exchange_rate_type,
5069 		catv.org_id,
5070 		catv.CE_BANK_ACCT_USE_ID
5071        FROM     ce_222_reconciled_v catv, ce_statement_lines sl
5072        WHERE    nvl(sl.bank_trx_number,'-9999') =
5073 			nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number, '-9999')
5074        AND      (nvl(sl.invoice_text, '-99999') =
5075 			nvl(CE_AUTO_BANK_MATCH.csl_invoice_text, '-99999')
5076 			and (nvl(sl.bank_account_text, '-99999') =
5077 			nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')
5078 			or nvl(sl.customer_text, '-99999') =
5079 			nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')))
5080        AND      sl.statement_line_id = catv.statement_line_id
5081        AND      sl.trx_type in ('DEBIT', 'CREDIT')
5082        AND      catv.trx_type = 'CASH'
5083        AND      catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
5084        --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
5085        AND	catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,catv.org_id)
5086        AND      nvl(catv.trx_number, '-99999')
5087 			 = nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number, '-99999')
5088        AND      to_char(catv.trx_date,'YYYY/MM/DD') <=
5089 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
5090        AND      catv.request_id = nvl(FND_GLOBAL.conc_request_id,-1)
5091        AND      catv.bank_account_amount
5092 		between (decode(sl.trx_type,
5093 				'CREDIT', sl.amount,
5094 				- sl.amount)
5095 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5096 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5097 				CE_AUTO_BANK_MATCH.csl_amount)
5098 			- decode(catv.trx_currency_type,
5099 				'BANK', tolerance_amount,
5100 				CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance))
5101 		and     (decode(sl.trx_type,
5102 				'CREDIT', sl.amount,
5103 				- sl.amount)
5104 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5105 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5106 				CE_AUTO_BANK_MATCH.csl_amount)
5107 			+ decode(catv.trx_currency_type,
5108 				'BANK', tolerance_amount,
5109 				CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance))
5110        AND      catv.bank_account_amount
5111 		between ((decode(sl.trx_type,
5112 				'CREDIT', sl.amount,
5113 				- sl.amount)
5114 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5115 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5116 				CE_AUTO_BANK_MATCH.csl_amount))
5117 			- abs((decode(sl.trx_type,
5118 				'CREDIT', sl.amount,
5119 				- sl.amount)
5120 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5121 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5122 				CE_AUTO_BANK_MATCH.csl_amount)) *
5123 				CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100))
5124 		and     ((decode(sl.trx_type,
5125 				'CREDIT', sl.amount,
5126 				- sl.amount)
5127 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5128 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5129 				CE_AUTO_BANK_MATCH.csl_amount))
5130 			+ abs((decode(sl.trx_type,
5131 				'CREDIT', sl.amount,
5132 				- sl.amount)
5133 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5134 				'MISC_DEBIT', - CE_AUTO_BANK_MATCH.csl_amount,
5135 				CE_AUTO_BANK_MATCH.csl_amount)) *
5136 				CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100))
5137        AND NOT EXISTS
5138 	  (select NULL
5139 	   from   ce_statement_reconcils_all r
5140 	   where  r.statement_line_id = catv.statement_line_id
5141 	   and    r.current_record_flag = 'Y'
5142 	   and    nvl(r.status_flag, 'U') <> 'U'
5143 	   AND    r.reference_type = 'STATEMENT');
5144 
5145   cursor get_recon_adj_pay(tolerance_amount NUMBER) is
5146        SELECT   catv.statement_line_id,
5147 		'PAYMENT',
5148 		sl.trx_type,
5149 		sl.rowid,
5150 		sl.amount,
5151 		catv.trx_id,
5152 		catv.cash_receipt_id,
5153 		catv.row_id,
5154 		catv.trx_date,
5155 		catv.currency_code,
5156 		catv.bank_account_amount,
5157 		catv.status,
5158 		nvl(catv.amount_cleared,0),
5159 		catv.trx_type,
5160 		1,
5161 		catv.trx_currency_type,
5162 		catv.amount,
5163 		catv.clearing_trx_type,
5164 		catv.exchange_rate,
5165 		catv.exchange_rate_date,
5166 		catv.exchange_rate_type,
5167 		catv.org_id,
5168 		catv.CE_BANK_ACCT_USE_ID
5169        FROM     ce_200_reconciled_v catv, ce_statement_lines sl
5170        WHERE    nvl(sl.bank_trx_number,'-9999') =
5171 			nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number, '-9999')
5172        AND      (nvl(sl.invoice_text, '-99999') =
5173 			nvl(CE_AUTO_BANK_MATCH.csl_invoice_text, '-99999')
5174 		and (nvl(sl.bank_account_text, '-99999') =
5175 			nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')
5176 			or nvl(sl.customer_text, '-99999') =
5177 			nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')))
5178        AND      sl.statement_line_id = catv.statement_line_id
5179        AND      sl.trx_type in ('DEBIT', 'CREDIT')
5180        AND      catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
5181        --AND	catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
5182        AND	catv.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,catv.org_id)
5183        AND      nvl(catv.trx_number,'-99999') =
5184 			nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number,'-99999')
5185        AND      to_char(catv.trx_date,'YYYY/MM/DD') <=
5186 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
5187        AND      catv.request_id = nvl(FND_GLOBAL.conc_request_id,-1)
5188        AND      catv.bank_account_amount
5189 		between (decode(sl.trx_type,
5190 				'DEBIT', sl.amount,
5191 				- sl.amount)
5192 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5193 				'MISC_DEBIT', CE_AUTO_BANK_MATCH.csl_amount,
5194 				- CE_AUTO_BANK_MATCH.csl_amount)
5195 			- decode(catv.trx_currency_type,
5196 				'BANK', tolerance_amount,
5197 				CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance))
5198 		and     (decode(sl.trx_type,
5199 				'DEBIT', sl.amount,
5200 				- sl.amount)
5201 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5202 				'MISC_DEBIT', CE_AUTO_BANK_MATCH.csl_amount,
5203 				- CE_AUTO_BANK_MATCH.csl_amount)
5204 			+ decode(catv.trx_currency_type,
5205 				'BANK', tolerance_amount,
5206 				CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance))
5207        AND      catv.bank_account_amount
5208 		between ((decode(sl.trx_type,
5209 				'CREDIT', sl.amount,
5210 				- sl.amount)
5211 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5212 				'MISC_DEBIT', CE_AUTO_BANK_MATCH.csl_amount,
5213 				- CE_AUTO_BANK_MATCH.csl_amount))
5214 			- abs((decode(sl.trx_type,
5215 				'CREDIT', sl.amount,
5216 				- sl.amount)
5217 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5218 				'MISC_DEBIT', CE_AUTO_BANK_MATCH.csl_amount,
5219 				- CE_AUTO_BANK_MATCH.csl_amount)) *
5220 				CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance / 100))
5221 		and     ((decode(sl.trx_type,
5222 				'CREDIT', sl.amount,
5223 				- sl.amount)
5224 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5225 				'MISC_DEBIT', CE_AUTO_BANK_MATCH.csl_amount,
5226 				- CE_AUTO_BANK_MATCH.csl_amount))
5227 			+ abs((decode(sl.trx_type,
5228 				'CREDIT', sl.amount,
5229 				- sl.amount)
5230 			+ decode(CE_AUTO_BANK_MATCH.csl_trx_type,
5231 				'MISC_DEBIT', CE_AUTO_BANK_MATCH.csl_amount,
5232 				- CE_AUTO_BANK_MATCH.csl_amount)) *
5233 				CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance / 100))
5234        AND NOT EXISTS
5235 	  (select NULL
5236 	   from   ce_statement_reconcils_all r
5237 	   where  r.statement_line_id = catv.statement_line_id
5238 	   and    r.current_record_flag = 'Y'
5239 	   and    nvl(r.status_flag, 'U') <> 'U'
5240 	   AND    r.reference_type = 'STATEMENT');
5241 
5242   cursor get_recon_adj2_ar(tolerance_amount NUMBER) is
5243        SELECT   l.statement_line_id,
5244 		l.rowid,
5245 		l.trx_date,
5246 		l.currency_code,
5247 		decode(l.currency_code, CE_AUTO_BANK_REC.G_functional_currency,
5248 		  l.amount, CE_AUTO_BANK_MATCH.aba_bank_currency, l.amount,
5249 		  nvl(l.original_amount, l.amount)),
5250 		l.original_amount,
5251 		l.status,
5252 		0,
5253 		l.trx_type,
5254 		1,
5255 		decode(l.currency_code, CE_AUTO_BANK_REC.G_functional_currency,
5256 		  'FUNCTIONAL', CE_AUTO_BANK_MATCH.aba_bank_currency, 'BANK',
5257 		  'FOREIGN'),
5258 		l.amount,
5259 		l.trx_type,
5260 		l.exchange_rate,
5261 		l.exchange_rate_date,
5262 		glcc.user_conversion_type,
5263 		v.trx_id,
5264 		v.cash_receipt_id,
5265 		v.row_id,
5266 		v.trx_date,
5267 		v.currency_code,
5268 		v.bank_account_amount,
5269 		v.base_amount,
5270 		v.status,
5271 		nvl(v.amount_cleared,0),
5272 		v.trx_type,
5273 		v.trx_currency_type,
5274 		v.amount,
5275 		v.clearing_trx_type,
5276 		v.exchange_rate,
5277 		v.exchange_rate_date,
5278 		v.exchange_rate_type,
5279 		'RECEIPT',
5280 		r.reference_id,
5281 		ar.cash_receipt_id,
5282 		ar.trx_date,
5283 		v.org_id,
5284 		v.CE_BANK_ACCT_USE_ID,
5285 		v.seq_id
5286        --FROM     ce_222_transactions_v v, gl_daily_conversion_types glcc,
5287        FROM     ce_available_transactions_tmp v, gl_daily_conversion_types glcc,
5288 		ar_cash_receipt_history_all ar, ce_statement_headers h,
5289 		ce_statement_reconcils_all r, ce_statement_lines l
5290        WHERE    h.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
5291        AND      nvl(l.bank_trx_number,'-9999') =
5292 			nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number, '-9999')
5293        AND      (nvl(l.invoice_text, '-99999') =
5294 			nvl(CE_AUTO_BANK_MATCH.csl_invoice_text, '-99999')
5295 			and (nvl(l.bank_account_text, '-99999') =
5296 			nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')
5297 			or nvl(l.customer_text, '-99999') =
5298 			nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')))
5299        AND      to_char(l.trx_date,'YYYY/MM/DD') <=
5300 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
5301        AND      l.status = 'RECONCILED'
5302        AND      l.statement_line_id <> CE_AUTO_BANK_MATCH.csl_statement_line_id
5303        AND      l.trx_type in ('DEBIT', 'CREDIT')
5304        AND	l.statement_header_id = h.statement_header_id
5305        AND	r.statement_line_id = l.statement_line_id
5306        AND	r.org_id = v.org_id
5307        AND	nvl(r.current_record_flag, 'Y') = 'Y'
5308        AND	nvl(r.status_flag, 'U') <> 'U'
5309        AND	glcc.conversion_type = l.exchange_rate_type
5310        AND	ar.cash_receipt_history_id = r.reference_id
5311        AND	ar.org_id = r.org_id
5312        AND      v.trx_type = 'CASH'
5313        AND	v.bank_account_id = h.bank_account_id
5314        --AND	v.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
5315        AND	v.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,v.org_id)
5316        AND    	v.trx_number = nvl(l.bank_trx_number,v.trx_number)
5317        AND    	to_char(v.trx_date,'YYYY/MM/DD') <=
5318 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
5319        AND    	v.status in ('REMITTED', 'CLEARED', 'RISK_ELIMINATED')
5320        AND      CE_AUTO_BANK_MATCH.calc_csl_amount +
5321 		decode(l.trx_type, 'DEBIT', - l.amount, l.amount) > 0
5322        AND    	v.bank_account_amount
5323 		between (CE_AUTO_BANK_MATCH.calc_csl_amount
5324 			+ decode(l.trx_type,
5325 				'CREDIT', l.amount,
5326 				- l.amount)
5327 			- decode(l.currency_code,
5328 				CE_AUTO_BANK_REC.G_functional_currency,
5329 					CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance,
5330 				CE_AUTO_BANK_MATCH.aba_bank_currency,
5331 					tolerance_amount,
5332 				CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance))
5333 		and (CE_AUTO_BANK_MATCH.calc_csl_amount
5334 			+ decode(l.trx_type,
5335 				'CREDIT', l.amount,
5336 				- l.amount)
5337 			+ decode(l.currency_code,
5338 				CE_AUTO_BANK_REC.G_functional_currency,
5339 					CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance,
5340 				CE_AUTO_BANK_MATCH.aba_bank_currency,
5341 					tolerance_amount,
5342 				CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance))
5343        AND      v.bank_account_amount
5344 		between ((CE_AUTO_BANK_MATCH.calc_csl_amount
5345 			+ decode(l.trx_type, 'CREDIT', l.amount, - l.amount))
5346 			- abs((CE_AUTO_BANK_MATCH.calc_csl_amount +
5347 			  decode(l.trx_type, 'CREDIT', l.amount, - l.amount))
5348 			  * CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100))
5349 		and ((CE_AUTO_BANK_MATCH.calc_csl_amount
5350 			+ decode(l.trx_type, 'CREDIT', l.amount, - l.amount))
5351 			+ abs((CE_AUTO_BANK_MATCH.calc_csl_amount +
5352 			  decode(l.trx_type, 'CREDIT', l.amount, - l.amount))
5353 			  * CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100))
5354        AND	v.application_id = 222
5355        AND	NVL(v.reconciled_status_flag, 'N') = 'N';
5356 
5357   cursor get_recon_adj2_ap(tolerance_amount NUMBER) is
5358        SELECT   l.statement_line_id,
5359 		l.rowid,
5360 		l.trx_date,
5361 		l.currency_code,
5362 		decode(l.currency_code, CE_AUTO_BANK_REC.G_functional_currency,
5363 		  l.amount, CE_AUTO_BANK_MATCH.aba_bank_currency, l.amount,
5364 		  nvl(l.original_amount, l.amount)),
5365 		l.original_amount,
5366 		l.status,
5367 		0,
5368 		l.trx_type,
5369 		1,
5370 		decode(l.currency_code, CE_AUTO_BANK_REC.G_functional_currency,
5371 		  'FUNCTIONAL', CE_AUTO_BANK_MATCH.aba_bank_currency, 'BANK',
5372 		  'FOREIGN'),
5373 		l.amount,
5374 		l.trx_type,
5375 		l.exchange_rate,
5376 		l.exchange_rate_date,
5377 		glcc.user_conversion_type,
5378 		v2.trx_id,
5379 		v2.cash_receipt_id,
5380 		v2.row_id,
5381 		v2.trx_date,
5382 		v2.currency_code,
5383 		v2.bank_account_amount,
5384 		v2.base_amount,
5385 		v2.status,
5386 		nvl(v2.amount_cleared,0),
5387 		'PAYMENT', /* v2.trx_type, */
5388 		v2.trx_currency_type,
5389 		v2.amount,
5390 		'PAYMENT', /* v2.clearing_trx_type, */
5391 		v2.exchange_rate,
5392 		v2.exchange_rate_date,
5393 		v2.exchange_rate_type,
5394 		'PAYMENT',
5395 		r.reference_id,
5396 		to_number(NULL),
5397 		to_date(NULL),
5398 		v2.org_id,
5399 		v2.CE_BANK_ACCT_USE_ID,
5400 		v2.seq_id
5401        --FROM     ce_200_transactions_v v2, gl_daily_conversion_types glcc,
5402        FROM     ce_available_transactions_tmp v2, gl_daily_conversion_types glcc,
5403 		ce_statement_headers h,
5404 		ce_statement_reconcils_all r, ce_statement_lines l
5405        WHERE    h.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
5406        AND      nvl(l.bank_trx_number,'-9999') =
5407 			nvl(CE_AUTO_BANK_MATCH.csl_bank_trx_number, '-9999')
5408        AND      (nvl(l.invoice_text, '-99999') =
5409 			nvl(CE_AUTO_BANK_MATCH.csl_invoice_text, '-99999')
5410 			and (nvl(l.bank_account_text, '-99999') =
5411 			nvl(CE_AUTO_BANK_MATCH.csl_bank_account_text,'-99999')
5412 			or nvl(l.customer_text, '-99999') =
5413 			nvl(CE_AUTO_BANK_MATCH.csl_customer_text,'-99999')))
5414        AND      to_char(l.trx_date,'YYYY/MM/DD') <=
5415 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
5416        AND      l.status = 'RECONCILED'
5417        AND      l.statement_line_id <> CE_AUTO_BANK_MATCH.csl_statement_line_id
5418        AND      l.trx_type in ('DEBIT', 'CREDIT')
5419        AND      l.statement_header_id = h.statement_header_id
5420        AND      r.statement_line_id = l.statement_line_id
5421        AND	r.org_id	= v2.org_id
5422        AND      nvl(r.current_record_flag, 'Y') = 'Y'
5423        AND      nvl(r.status_flag, 'U') <> 'U'
5424        AND      glcc.conversion_type = l.exchange_rate_type
5425        AND	v2.bank_account_id = h.bank_account_id
5426        --AND	v2.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
5427        AND	v2.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,v2.org_id)
5428        AND    	v2.trx_number = nvl(l.bank_trx_number,v2.trx_number)
5429        AND    	to_char(v2.trx_date,'YYYY/MM/DD') <=
5430 		to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
5431        AND      CE_AUTO_BANK_MATCH.calc_csl_amount +
5432 		decode(l.trx_type, 'DEBIT', - l.amount, l.amount) < 0
5433        AND      v2.bank_account_amount
5434 		between (- CE_AUTO_BANK_MATCH.calc_csl_amount
5435 			+ decode(l.trx_type, 'DEBIT', l.amount, - l.amount)
5436 			- decode(l.currency_code,
5437 				CE_AUTO_BANK_REC.G_functional_currency,
5438 					CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance,
5439 				CE_AUTO_BANK_MATCH.aba_bank_currency,
5440 					tolerance_amount,
5441 				CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance))
5442 		and (- CE_AUTO_BANK_MATCH.calc_csl_amount
5443 			+ decode(l.trx_type, 'DEBIT', l.amount, - l.amount)
5444 			+ decode(l.currency_code,
5445 				CE_AUTO_BANK_REC.G_functional_currency,
5446 					CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance,
5447 				CE_AUTO_BANK_MATCH.aba_bank_currency,
5448 					tolerance_amount,
5449 				CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance))
5450        AND      v2.bank_account_amount
5451 		between ((- CE_AUTO_BANK_MATCH.calc_csl_amount
5452 			+ decode(l.trx_type, 'DEBIT', l.amount, - l.amount))
5453 			- abs((- CE_AUTO_BANK_MATCH.calc_csl_amount +
5454 			  decode(l.trx_type, 'DEBIT', l.amount, - l.amount))
5455 			  * CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance / 100))
5456 		and ((- CE_AUTO_BANK_MATCH.calc_csl_amount
5457 			+ decode(l.trx_type, 'DEBIT', l.amount, - l.amount))
5458 			+ abs((- CE_AUTO_BANK_MATCH.calc_csl_amount +
5459 			  decode(l.trx_type, 'DEBIT', l.amount, - l.amount))
5460 			  * CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance / 100))
5461        AND 	v2.application_id = 200
5462        AND	NVL(v2.reconciled_status_flag, 'N') = 'N';
5463 
5464   calc_tolerance_amount	 NUMBER;
5465   calc_tolerance_amount_ap	 NUMBER;
5466   calc_tolerance_amount_ar	 NUMBER;
5467   loc_match_type	 CE_LOOKUPS.lookup_code%TYPE;
5468   loc_trx_id		 AR_CASH_RECEIPT_HISTORY_ALL.cash_receipt_history_id%TYPE;
5469   loc_cash_receipt_id	 AR_CASH_RECEIPT_HISTORY_ALL.cash_receipt_id%TYPE;
5470   loc_trx_date		 DATE;
5471 
5472 BEGIN
5473   cep_standard.debug('>>CE_AUTO_BANK_MATCH.stmtline_match');
5474   no_of_matches := 0;
5475 
5476   /* Calculate calc_tolerance_amount. */
5477 
5478   IF (NVL(CE_AUTO_BANK_MATCH.csl_currency_code,
5479 	CE_AUTO_BANK_MATCH.aba_bank_currency)
5480 	= CE_AUTO_BANK_REC.G_functional_currency) THEN
5481     CE_AUTO_BANK_MATCH.trx_currency_type := 'FUNCTIONAL';
5482   ELSIF (NVL(CE_AUTO_BANK_MATCH.csl_currency_code,
5483 	CE_AUTO_BANK_MATCH.aba_bank_currency)
5484 	= CE_AUTO_BANK_MATCH.aba_bank_currency) THEN
5485     CE_AUTO_BANK_MATCH.trx_currency_type := 'BANK';
5486   ELSE
5487     CE_AUTO_BANK_MATCH.trx_currency_type := 'FOREIGN';
5488   END IF;
5489 
5490   --
5491   -- Amount tolerance
5492   -- bug 3676745 MO/BA uptake
5493   -- AP/AR transactions - get tolerance amount in the following order (per Amrita)
5494   -- 1) tolerances defined at the bank account level
5495   -- 2) tolerances defined at the system parameters level for the OU for which the transactions
5496   --   	are being reconciled
5497   -- 3) if none exist then the tolerance is zero.
5498   -- No tolerance for PAY, PAY_EFT, JE_LINE, STATEMENT transactions
5499   -- ROI_LINE -LE???
5500 
5501   -- In rel 11i - tolerance amount is in Functional currency		|
5502   -- In rel 12 - tolerance amount is in Bank Account currency (bug 4969806)
5503   -- bug 4969806  tolerance amount is in Bank Account currency,
5504   --              do not need to convert tolerance amount
5505   IF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('PAYMENT')) THEN
5506     calc_tolerance_amount_ap := CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance ;
5507   ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASH', 'MISC')) THEN
5508     calc_tolerance_amount_ar := CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance;
5509   ELSE
5510     calc_tolerance_amount := 0;
5511   END IF;
5512 
5513 /*
5514   IF (CE_AUTO_BANK_MATCH.trx_currency_type = 'BANK') THEN
5515     IF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('PAYMENT')) THEN
5516       IF (nvl(CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance,0) <> 0) THEN
5517 	  calc_tolerance_amount_ap :=
5518  	    convert_amount_tolerance(CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance);
5519       ELSE
5520         calc_tolerance_amount_ap := 0;
5521       END IF;
5522     ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASH','MISC')) THEN
5523       IF (nvl(CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance,0) <> 0) THEN
5524 	  calc_tolerance_amount_ar :=
5525  	    convert_amount_tolerance(CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance);
5526       ELSE
5527         calc_tolerance_amount_ar := 0;
5528       END IF;
5529     ELSE
5530       IF (NVL(CE_AUTO_BANK_MATCH.BA_RECON_OI_AMOUNT_TOLERANCE,0) <> 0) THEN
5531         calc_tolerance_amount :=
5532 	  convert_amount_tolerance(CE_AUTO_BANK_MATCH.BA_RECON_OI_AMOUNT_TOLERANCE);
5533       ELSE
5534         calc_tolerance_amount := 0;
5535       END IF;
5536     END IF;
5537   ELSIF (CE_AUTO_BANK_MATCH.trx_currency_type IN ('FUNCTIONAL','FOREIGN')) THEN
5538     IF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('PAYMENT')) THEN
5539         calc_tolerance_amount_ap := CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance ;
5540     ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASH', 'MISC')) THEN
5541        calc_tolerance_amount_ar := CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance;
5542     ELSE
5543       calc_tolerance_amount := CE_AUTO_BANK_MATCH.BA_RECON_OI_AMOUNT_TOLERANCE;
5544     END IF;
5545   END IF;
5546 */
5547 /*
5548   IF (CE_AUTO_BANK_MATCH.trx_currency_type = 'BANK') THEN
5549     IF (NVL(CE_AUTO_BANK_REC.G_amount_tolerance,0) <> 0) THEN
5550       calc_tolerance_amount :=
5551 	  convert_amount_tolerance(CE_AUTO_BANK_REC.G_amount_tolerance);
5552     ELSE
5553       calc_tolerance_amount := 0;
5554     END IF;
5555   ELSIF (CE_AUTO_BANK_MATCH.trx_currency_type IN ('FUNCTIONAL','FOREIGN')) THEN
5556     calc_tolerance_amount := CE_AUTO_BANK_REC.G_amount_tolerance;
5557   END IF;
5558 */
5559 
5560   --------------------------------------------------------------------------------
5561   cep_standard.debug('DEBUG: calc_tolerance_amount = '|| calc_tolerance_amount);
5562   cep_standard.debug('DEBUG: calc_tolerance_amount_ap = '|| calc_tolerance_amount_ap);
5563   cep_standard.debug('DEBUG: calc_tolerance_amount_ar = '|| calc_tolerance_amount_ar);
5564   cep_standard.debug('DEBUG: csl_correction_method = '|| csl_correction_method);
5565 
5566   if (CE_AUTO_BANK_MATCH.csl_correction_method in ('REVERSAL', 'BOTH')) then
5567     OPEN get_reversal;
5568     FETCH get_reversal
5569     INTO     	CE_AUTO_BANK_MATCH.trx_id,
5570 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
5571 		CE_AUTO_BANK_MATCH.trx_rowid,
5572 		CE_AUTO_BANK_MATCH.trx_date,
5573 		CE_AUTO_BANK_MATCH.trx_currency_code,
5574 		CE_AUTO_BANK_MATCH.trx_amount,
5575 		CE_AUTO_BANK_MATCH.trx_base_amount,
5576 		CE_AUTO_BANK_MATCH.trx_status,
5577 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
5578 		CE_AUTO_BANK_MATCH.csl_match_type,
5579 		no_of_matches,
5580 		CE_AUTO_BANK_MATCH.trx_currency_type,
5581 		CE_AUTO_BANK_MATCH.trx_curr_amount,
5582 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
5583 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
5584 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
5585 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
5586 		CE_AUTO_BANK_MATCH.gt_seq_id;
5587     CLOSE get_reversal;
5588 
5589     cep_standard.debug('DEBUG: get_reversal no_of_matches = '|| no_of_matches);
5590     if (no_of_matches = 1) then
5591        CE_AUTO_BANK_MATCH.csl_match_correction_type := 'REVERSAL';
5592        CE_AUTO_BANK_MATCH.corr_csl_amount := 0;
5593        CE_AUTO_BANK_MATCH.calc_csl_amount := 0;
5594     end if;
5595   end if;
5596 
5597   if (CE_AUTO_BANK_MATCH.csl_correction_method in ('ADJUSTMENT', 'BOTH') AND
5598       no_of_matches <> 1) then
5599     cep_standard.debug('DEBUG: get_adjustment calc_tolerance_amount = '
5600 		|| calc_tolerance_amount);
5601     cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.csh_bank_account_id = '
5602 		|| CE_AUTO_BANK_MATCH.csh_bank_account_id);
5603     cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.csl_bank_trx_number = '
5604 		|| CE_AUTO_BANK_MATCH.csl_bank_trx_number);
5605     cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.csl_trx_date = '
5606 		|| CE_AUTO_BANK_MATCH.csl_trx_date);
5607     cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.csl_statement_line_id = '
5608 		|| CE_AUTO_BANK_MATCH.csl_statement_line_id);
5609     cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.calc_csl_amount = '
5610 		|| CE_AUTO_BANK_MATCH.calc_csl_amount);
5611 
5612 
5613     -- No transaction match if the sum of statement line amount is $0.
5614     --OPEN get_adjustment(calc_tolerance_amount);
5615     OPEN get_adjustment(calc_tolerance_amount_ap,calc_tolerance_amount_ar );
5616     FETCH get_adjustment
5617     INTO	CE_AUTO_BANK_MATCH.trx_id2,
5618 		CE_AUTO_BANK_MATCH.trx_rowid2,
5619 		CE_AUTO_BANK_MATCH.trx_date2,
5620 		CE_AUTO_BANK_MATCH.trx_currency_code2,
5621 		CE_AUTO_BANK_MATCH.trx_amount2,
5622 		CE_AUTO_BANK_MATCH.trx_base_amount2,
5623 		CE_AUTO_BANK_MATCH.trx_status2,
5624 		CE_AUTO_BANK_MATCH.trx_cleared_amount2,
5625 		CE_AUTO_BANK_MATCH.csl_match_type2,
5626 		no_of_matches,
5627 		CE_AUTO_BANK_MATCH.trx_currency_type2,
5628 		CE_AUTO_BANK_MATCH.trx_curr_amount2,
5629 		CE_AUTO_BANK_MATCH.trx_type2,
5630 		CE_AUTO_BANK_MATCH.trx_exchange_rate2,
5631 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date2,
5632 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type2,
5633 		CE_AUTO_BANK_MATCH.gt_seq_id2,
5634 		CE_AUTO_BANK_MATCH.trx_id,
5635 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
5636 		CE_AUTO_BANK_MATCH.trx_rowid,
5637 		CE_AUTO_BANK_MATCH.trx_date,
5638 		CE_AUTO_BANK_MATCH.trx_currency_code,
5639 		CE_AUTO_BANK_MATCH.trx_amount,
5640 		CE_AUTO_BANK_MATCH.trx_base_amount,
5641 		CE_AUTO_BANK_MATCH.trx_status,
5642 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
5643 		CE_AUTO_BANK_MATCH.csl_match_type,
5644 		CE_AUTO_BANK_MATCH.trx_currency_type,
5645 		CE_AUTO_BANK_MATCH.trx_curr_amount,
5646 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
5647 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
5648 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
5649 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
5650 		CE_AUTO_BANK_MATCH.trx_gl_date,
5651                	CE_AUTO_BANK_MATCH.trx_cleared_date,
5652  		CE_AUTO_BANK_MATCH.trx_org_id,
5653  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
5654 		CE_AUTO_BANK_MATCH.gt_seq_id;
5655     CLOSE get_adjustment;
5656 
5657     cep_standard.debug('DEBUG: get_adjustment no_of_matches = '||no_of_matches);
5658     if (no_of_matches = 1) then
5659       CE_AUTO_BANK_MATCH.csl_match_correction_type := 'ADJUSTMENT';
5660       if (CE_AUTO_BANK_MATCH.csl_trx_type = 'MISC_CREDIT') then
5661 	if (CE_AUTO_BANK_MATCH.trx_type2 in ('CREDIT', 'MISC_CREDIT')) then
5662 	  CE_AUTO_BANK_MATCH.corr_csl_amount := CE_AUTO_BANK_MATCH.csl_amount
5663 	      + CE_AUTO_BANK_MATCH.trx_amount2;
5664 	else
5665 	  CE_AUTO_BANK_MATCH.corr_csl_amount := CE_AUTO_BANK_MATCH.csl_amount
5666 	      - CE_AUTO_BANK_MATCH.trx_amount2;
5667 	end if;
5668       else  /* CE_AUTO_BANK_MATCH.csl_trx_type = 'MISC_DEBIT' */
5669 	if (CE_AUTO_BANK_MATCH.trx_type2 in ('DEBIT', 'MISC_DEBIT')) then
5670 	  CE_AUTO_BANK_MATCH.corr_csl_amount := CE_AUTO_BANK_MATCH.csl_amount
5671 	      + CE_AUTO_BANK_MATCH.trx_amount2;
5672 	else
5673 	  CE_AUTO_BANK_MATCH.corr_csl_amount := CE_AUTO_BANK_MATCH.csl_amount
5674 	      - CE_AUTO_BANK_MATCH.trx_amount2;
5675 	end if;
5676       end if;
5677       cep_standard.debug('corr_csl_amount: '||corr_csl_amount);
5678       CE_AUTO_BANK_MATCH.calc_csl_amount := CE_AUTO_BANK_MATCH.corr_csl_amount;
5679     end if;
5680   end if;
5681 
5682   if (CE_AUTO_BANK_MATCH.csl_correction_method in ('REVERSAL', 'BOTH') AND
5683       no_of_matches <> 1) then
5684 
5685     if (csl_trx_type = 'MISC_CREDIT') then
5686       OPEN get_rev_credit;
5687       FETCH get_rev_credit
5688       INTO	CE_AUTO_BANK_MATCH.trx_id2,
5689 		CE_AUTO_BANK_MATCH.trx_id,
5690 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
5691 		CE_AUTO_BANK_MATCH.trx_rowid,
5692 		CE_AUTO_BANK_MATCH.trx_date,
5693 		CE_AUTO_BANK_MATCH.trx_currency_code,
5694 		CE_AUTO_BANK_MATCH.trx_amount,
5695 		CE_AUTO_BANK_MATCH.trx_status,
5696 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
5697 		CE_AUTO_BANK_MATCH.csl_match_type,
5698 		no_of_matches,
5699 		CE_AUTO_BANK_MATCH.trx_currency_type,
5700 		CE_AUTO_BANK_MATCH.trx_curr_amount,
5701 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
5702 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
5703 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
5704 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
5705  		CE_AUTO_BANK_MATCH.trx_org_id,
5706  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id;
5707       CLOSE get_rev_credit;
5708     end if;
5709 
5710     if (csl_trx_type = 'MISC_DEBIT' OR no_of_matches <> 1) then
5711       OPEN get_rev_debit;
5712       FETCH get_rev_debit
5713       INTO	CE_AUTO_BANK_MATCH.trx_id2,
5714 		CE_AUTO_BANK_MATCH.trx_id,
5715 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
5716 		CE_AUTO_BANK_MATCH.trx_rowid,
5717 		CE_AUTO_BANK_MATCH.trx_date,
5718 		CE_AUTO_BANK_MATCH.trx_currency_code,
5719 		CE_AUTO_BANK_MATCH.trx_amount,
5720 		CE_AUTO_BANK_MATCH.trx_status,
5721 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
5722 		CE_AUTO_BANK_MATCH.csl_match_type,
5723 		no_of_matches,
5724 		CE_AUTO_BANK_MATCH.trx_currency_type,
5725 		CE_AUTO_BANK_MATCH.trx_curr_amount,
5726 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
5727 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
5728 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
5729 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
5730  		CE_AUTO_BANK_MATCH.trx_org_id,
5731  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id;
5732       CLOSE get_rev_debit;
5733     end if;
5734 
5735     cep_standard.debug('DEBUG: get_rev_xx no_of_matches = '|| no_of_matches);
5736     if (no_of_matches = 1) then
5737 
5738       -- bug 4914608 set the org after a match for AR/AP
5739       set_single_org(CE_AUTO_BANK_MATCH.trx_org_id);
5740 
5741       if CE_AUTO_BANK_MATCH.csl_match_type = 'PAYMENT' then
5742 /*
5743 	  AP_RECONCILIATION_PKG.recon_reverse(
5744 	     X_CHECKRUN_ID                   => NULL,
5745 	     X_CHECK_ID                      => CE_AUTO_BANK_MATCH.trx_id,
5746 	     X_LAST_UPDATED_BY               => nvl(FND_GLOBAL.user_id, -1),
5747 	     X_LAST_UPDATE_LOGIN             => nvl(FND_GLOBAL.user_id, -1),
5748 	     X_CREATED_BY                    => nvl(FND_GLOBAL.user_id, -1),
5749 	     X_PROGRAM_APPLICATION_ID        => NULL,
5750 	     X_PROGRAM_ID                    => NULL,
5751 	     X_REQUEST_ID                    => NULL);
5752 */
5753 	  AP_RECONCILIATION_PKG.recon_payment_history(
5754 	     X_CHECKRUN_ID           => to_number(NULL),
5755 	     X_CHECK_ID              => CE_AUTO_BANK_MATCH.trx_id,
5756 	     X_ACCOUNTING_DATE       => to_date(NULL),
5757 	     X_CLEARED_DATE          => to_date(NULL),
5758 	     X_TRANSACTION_AMOUNT    => CE_AUTO_BANK_MATCH.trx_amount,
5759 	     X_TRANSACTION_TYPE      => 'PAYMENT UNCLEARING',
5760 	     X_ERROR_AMOUNT          => to_number(NULL),
5761 	     X_CHARGE_AMOUNT         => to_number(NULL),
5762 	     X_CURRENCY_CODE         => CE_AUTO_BANK_MATCH.trx_currency_code,
5763 	     X_EXCHANGE_RATE_TYPE  => CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
5764 	     X_EXCHANGE_RATE_DATE  => CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
5765 	     X_EXCHANGE_RATE         => CE_AUTO_BANK_MATCH.trx_exchange_rate,
5766 	     X_MATCHED_FLAG          => 'Y',
5767 	     X_ACTUAL_VALUE_DATE     => to_date(NULL),
5768 	     X_LAST_UPDATE_DATE      => sysdate,
5769 	     X_LAST_UPDATED_BY       => NVL(FND_GLOBAL.user_id,-1),
5770 	     X_LAST_UPDATE_LOGIN     => NVL(FND_GLOBAL.user_id,-1),
5771 	     X_CREATED_BY            => NVL(FND_GLOBAL.user_id,-1),
5772 	     X_CREATION_DATE         => sysdate,
5773 	     X_PROGRAM_UPDATE_DATE   => to_date(NULL),
5774 	     X_PROGRAM_APPLICATION_ID=> to_number(NULL),
5775 	     X_PROGRAM_ID            => to_number(NULL),
5776 	     X_REQUEST_ID            => to_number(NULL),
5777 	     X_CALLING_SEQUENCE      => 'CE_AUTO_BANK_MATCH.stmtline_match');
5778 
5779       elsif CE_AUTO_BANK_MATCH.csl_match_type = 'RECEIPT' then
5780 
5781 	ARP_CASHBOOK.unclear(
5782 	     p_cr_id                 => CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
5783 	     p_trx_date              => CE_AUTO_BANK_MATCH.trx_date,
5784 	     p_gl_date               => CE_AUTO_BANK_REC.G_gl_date,
5785 	     p_actual_value_date     => CE_AUTO_BANK_MATCH.csl_effective_date,
5786 	     p_module_name           => 'CEABRMA',
5787 	     p_module_version        => '1.0',
5788 	     p_crh_id                => CE_AUTO_BANK_MATCH.trx_id);
5789       end if;
5790 
5791       --delete from ce_statement_reconciliations
5792       delete from ce_statement_reconcils_all
5793       where statement_line_id = CE_AUTO_BANK_MATCH.trx_id2
5794       and request_id = nvl(FND_GLOBAL.conc_request_id,-1);
5795       CE_AUTO_BANK_MATCH.trx_id := CE_AUTO_BANK_MATCH.trx_id2;
5796       CE_AUTO_BANK_MATCH.csl_match_correction_type := 'REVERSAL';
5797       CE_AUTO_BANK_MATCH.corr_csl_amount := 0;
5798       CE_AUTO_BANK_MATCH.calc_csl_amount := 0;
5799       CE_AUTO_BANK_MATCH.reconciled_this_run := 'Y';
5800     end if;
5801   end if;
5802 
5803   if (CE_AUTO_BANK_MATCH.csl_correction_method in ('ADJUSTMENT', 'BOTH') AND
5804       no_of_matches <> 1) then
5805     OPEN get_recon_adj_misc(calc_tolerance_amount_ar);
5806     FETCH get_recon_adj_misc
5807     INTO        CE_AUTO_BANK_MATCH.trx_id2,
5808 		CE_AUTO_BANK_MATCH.csl_match_type2,
5809 		CE_AUTO_BANK_MATCH.trx_type2,
5810 		CE_AUTO_BANK_MATCH.trx_rowid2,
5811 		CE_AUTO_BANK_MATCH.trx_amount2,
5812 		CE_AUTO_BANK_MATCH.trx_id,
5813 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
5814 		CE_AUTO_BANK_MATCH.trx_rowid,
5815 		CE_AUTO_BANK_MATCH.trx_date,
5816 		CE_AUTO_BANK_MATCH.trx_currency_code,
5817 		CE_AUTO_BANK_MATCH.trx_amount,
5818 		CE_AUTO_BANK_MATCH.trx_status,
5819 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
5820 		CE_AUTO_BANK_MATCH.csl_match_type,
5821 		no_of_matches,
5822 		CE_AUTO_BANK_MATCH.trx_currency_type,
5823 		CE_AUTO_BANK_MATCH.trx_curr_amount,
5824 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
5825 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
5826 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
5827 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
5828  		CE_AUTO_BANK_MATCH.trx_org_id,
5829  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id;
5830     CLOSE get_recon_adj_misc;
5831 
5832     if (no_of_matches <> 1) then
5833       OPEN get_recon_adj_cash(calc_tolerance_amount_ar);
5834       FETCH get_recon_adj_cash
5835       INTO      CE_AUTO_BANK_MATCH.trx_id2,
5836 		CE_AUTO_BANK_MATCH.csl_match_type2,
5837 		CE_AUTO_BANK_MATCH.trx_type2,
5838 		CE_AUTO_BANK_MATCH.trx_rowid2,
5839 		CE_AUTO_BANK_MATCH.trx_amount2,
5840 		CE_AUTO_BANK_MATCH.trx_id,
5841 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
5842 		CE_AUTO_BANK_MATCH.trx_rowid,
5843 		CE_AUTO_BANK_MATCH.trx_date,
5844 		CE_AUTO_BANK_MATCH.trx_currency_code,
5845 		CE_AUTO_BANK_MATCH.trx_amount,
5846 		CE_AUTO_BANK_MATCH.trx_status,
5847 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
5848 		CE_AUTO_BANK_MATCH.csl_match_type,
5849 		no_of_matches,
5850 		CE_AUTO_BANK_MATCH.trx_currency_type,
5851 		CE_AUTO_BANK_MATCH.trx_curr_amount,
5852 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
5853 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
5854 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
5855 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
5856  		CE_AUTO_BANK_MATCH.trx_org_id,
5857  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id;
5858       CLOSE get_recon_adj_cash;
5859     end if;
5860 
5861     if (no_of_matches <> 1) then
5862       OPEN get_recon_adj_pay(calc_tolerance_amount_ap);
5863       FETCH get_recon_adj_pay
5864       INTO      CE_AUTO_BANK_MATCH.trx_id2,
5865 		CE_AUTO_BANK_MATCH.csl_match_type2,
5866 		CE_AUTO_BANK_MATCH.trx_type2,
5867 		CE_AUTO_BANK_MATCH.trx_rowid2,
5868 		CE_AUTO_BANK_MATCH.trx_amount2,
5869 		CE_AUTO_BANK_MATCH.trx_id,
5870 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
5871 		CE_AUTO_BANK_MATCH.trx_rowid,
5872 		CE_AUTO_BANK_MATCH.trx_date,
5873 		CE_AUTO_BANK_MATCH.trx_currency_code,
5874 		CE_AUTO_BANK_MATCH.trx_amount,
5875 		CE_AUTO_BANK_MATCH.trx_status,
5876 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
5877 		CE_AUTO_BANK_MATCH.csl_match_type,
5878 		no_of_matches,
5879 		CE_AUTO_BANK_MATCH.trx_currency_type,
5880 		CE_AUTO_BANK_MATCH.trx_curr_amount,
5881 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
5882 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
5883 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
5884 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
5885  		CE_AUTO_BANK_MATCH.trx_org_id,
5886  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id;
5887       CLOSE get_recon_adj_pay;
5888     end if;
5889 
5890     cep_standard.debug('DEBUG: get_reconciled_adj no_of_matches = '||
5891 	no_of_matches);
5892     if (no_of_matches = 1) then
5893       CE_AUTO_BANK_MATCH.reconciled_this_run := 'Y';
5894     else
5895       OPEN get_recon_adj2_ar(calc_tolerance_amount_ar);
5896       FETCH get_recon_adj2_ar
5897       INTO	CE_AUTO_BANK_MATCH.trx_id2,
5898 		CE_AUTO_BANK_MATCH.trx_rowid2,
5899 		CE_AUTO_BANK_MATCH.trx_date2,
5900 		CE_AUTO_BANK_MATCH.trx_currency_code2,
5901 		CE_AUTO_BANK_MATCH.trx_amount2,
5902 		CE_AUTO_BANK_MATCH.trx_base_amount2,
5903 		CE_AUTO_BANK_MATCH.trx_status2,
5904 		CE_AUTO_BANK_MATCH.trx_cleared_amount2,
5905 		CE_AUTO_BANK_MATCH.csl_match_type2,
5906 		no_of_matches,
5907 		CE_AUTO_BANK_MATCH.trx_currency_type2,
5908 		CE_AUTO_BANK_MATCH.trx_curr_amount2,
5909 		CE_AUTO_BANK_MATCH.trx_type2,
5910 		CE_AUTO_BANK_MATCH.trx_exchange_rate2,
5911 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date2,
5912 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type2,
5913 		CE_AUTO_BANK_MATCH.trx_id,
5914 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
5915 		CE_AUTO_BANK_MATCH.trx_rowid,
5916 		CE_AUTO_BANK_MATCH.trx_date,
5917 		CE_AUTO_BANK_MATCH.trx_currency_code,
5918 		CE_AUTO_BANK_MATCH.trx_amount,
5919 		CE_AUTO_BANK_MATCH.trx_base_amount,
5920 		CE_AUTO_BANK_MATCH.trx_status,
5921 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
5922 		CE_AUTO_BANK_MATCH.csl_match_type,
5923 		CE_AUTO_BANK_MATCH.trx_currency_type,
5924 		CE_AUTO_BANK_MATCH.trx_curr_amount,
5925 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
5926 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
5927 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
5928 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
5929 		loc_match_type,
5930 		loc_trx_id,
5931 		loc_cash_receipt_id,
5932 		loc_trx_date,
5933  		CE_AUTO_BANK_MATCH.trx_org_id,
5934  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
5935 		CE_AUTO_BANK_MATCH.gt_seq_id;
5936       CLOSE get_recon_adj2_ar;
5937 
5938       if (no_of_matches <> 1) then
5939         OPEN	get_recon_adj2_ap(calc_tolerance_amount_ap);
5940         FETCH	get_recon_adj2_ap
5941         INTO	CE_AUTO_BANK_MATCH.trx_id2,
5942 		CE_AUTO_BANK_MATCH.trx_rowid2,
5943 		CE_AUTO_BANK_MATCH.trx_date2,
5944 		CE_AUTO_BANK_MATCH.trx_currency_code2,
5945 		CE_AUTO_BANK_MATCH.trx_amount2,
5946 		CE_AUTO_BANK_MATCH.trx_base_amount2,
5947 		CE_AUTO_BANK_MATCH.trx_status2,
5948 		CE_AUTO_BANK_MATCH.trx_cleared_amount2,
5949 		CE_AUTO_BANK_MATCH.csl_match_type2,
5950 		no_of_matches,
5951 		CE_AUTO_BANK_MATCH.trx_currency_type2,
5952 		CE_AUTO_BANK_MATCH.trx_curr_amount2,
5953 		CE_AUTO_BANK_MATCH.trx_type2,
5954 		CE_AUTO_BANK_MATCH.trx_exchange_rate2,
5955 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date2,
5956 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type2,
5957 		CE_AUTO_BANK_MATCH.trx_id,
5958 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
5959 		CE_AUTO_BANK_MATCH.trx_rowid,
5960 		CE_AUTO_BANK_MATCH.trx_date,
5961 		CE_AUTO_BANK_MATCH.trx_currency_code,
5962 		CE_AUTO_BANK_MATCH.trx_amount,
5963 		CE_AUTO_BANK_MATCH.trx_base_amount,
5964 		CE_AUTO_BANK_MATCH.trx_status,
5965 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
5966 		CE_AUTO_BANK_MATCH.csl_match_type,
5967 		CE_AUTO_BANK_MATCH.trx_currency_type,
5968 		CE_AUTO_BANK_MATCH.trx_curr_amount,
5969 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
5970 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
5971 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
5972 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
5973 		loc_match_type,
5974 		loc_trx_id,
5975 		loc_cash_receipt_id,
5976 		loc_trx_date,
5977  		CE_AUTO_BANK_MATCH.trx_org_id,
5978  		CE_AUTO_BANK_MATCH.trx_bank_acct_use_id,
5979 		CE_AUTO_BANK_MATCH.gt_seq_id;
5980       CLOSE get_recon_adj2_ap;
5981     end if;
5982 
5983       cep_standard.debug('DEBUG: get_reconciled_adj2 no_of_matches = '||
5984 		no_of_matches);
5985       if (no_of_matches = 1) then
5986 
5987       -- bug 4914608 set the org after a match for AR/AP
5988       set_single_org(CE_AUTO_BANK_MATCH.trx_org_id);
5989 
5990 	if (loc_match_type = 'PAYMENT') then
5991 	/*
5992 	    AP_RECONCILIATION_PKG.recon_reverse(
5993 	     X_CHECKRUN_ID                   => NULL,
5994 	     X_CHECK_ID                      => loc_trx_id,
5995 	     X_LAST_UPDATED_BY               => nvl(FND_GLOBAL.user_id, -1),
5996 	     X_LAST_UPDATE_LOGIN             => nvl(FND_GLOBAL.user_id, -1),
5997 	     X_CREATED_BY                    => nvl(FND_GLOBAL.user_id, -1),
5998 	     X_PROGRAM_APPLICATION_ID        => NULL,
5999 	     X_PROGRAM_ID                    => NULL,
6000 	     X_REQUEST_ID                    => NULL);
6001 	*/
6002 	    AP_RECONCILIATION_PKG.recon_payment_history(
6003 	     X_CHECKRUN_ID           => to_number(NULL),
6004 	     X_CHECK_ID              => loc_trx_id,
6005 	     X_ACCOUNTING_DATE       => to_date(NULL),
6006 	     X_CLEARED_DATE          => to_date(NULL),
6007 	     X_TRANSACTION_AMOUNT    => CE_AUTO_BANK_MATCH.trx_amount,
6008 	     X_TRANSACTION_TYPE      => 'PAYMENT UNCLEARING',
6009 	     X_ERROR_AMOUNT          => to_number(NULL),
6010 	     X_CHARGE_AMOUNT         => to_number(NULL),
6011 	     X_CURRENCY_CODE         => CE_AUTO_BANK_MATCH.trx_currency_code,
6012 	     X_EXCHANGE_RATE_TYPE  => CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
6013 	     X_EXCHANGE_RATE_DATE  => CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
6014 	     X_EXCHANGE_RATE         => CE_AUTO_BANK_MATCH.trx_exchange_rate,
6015 	     X_MATCHED_FLAG          => 'Y',
6016 	     X_ACTUAL_VALUE_DATE     => to_date(NULL),
6017 	     X_LAST_UPDATE_DATE      => sysdate,
6018 	     X_LAST_UPDATED_BY       => NVL(FND_GLOBAL.user_id,-1),
6019 	     X_LAST_UPDATE_LOGIN     => NVL(FND_GLOBAL.user_id,-1),
6020 	     X_CREATED_BY            => NVL(FND_GLOBAL.user_id,-1),
6021 	     X_CREATION_DATE         => sysdate,
6022 	     X_PROGRAM_UPDATE_DATE   => to_date(NULL),
6023 	     X_PROGRAM_APPLICATION_ID=> to_number(NULL),
6024 	     X_PROGRAM_ID            => to_number(NULL),
6025 	     X_REQUEST_ID            => to_number(NULL),
6026 	     X_CALLING_SEQUENCE      => 'CE_AUTO_BANK_MATCH.stmtline_match');
6027 
6028 	elsif (loc_match_type = 'RECEIPT') then
6029 	    ARP_CASHBOOK.unclear(
6030 	     p_cr_id                 => loc_cash_receipt_id,
6031 	     p_trx_date              => loc_trx_date,
6032 	     p_gl_date               => CE_AUTO_BANK_REC.G_gl_date,
6033 	     p_actual_value_date     => CE_AUTO_BANK_MATCH.csl_effective_date,
6034 	     p_module_name           => 'CEABRMA',
6035 	     p_module_version        => '1.0',
6036 	     p_crh_id                => loc_trx_id);
6037 	end if;
6038 	CE_AUTO_BANK_MATCH.reconciled_this_run := 'N';
6039       end if;
6040     end if;
6041 
6042     if (no_of_matches = 1) then
6043       CE_AUTO_BANK_MATCH.csl_match_correction_type := 'ADJUSTMENT';
6044       if (CE_AUTO_BANK_MATCH.csl_trx_type = 'MISC_CREDIT') then
6045 	if (CE_AUTO_BANK_MATCH.trx_type2 in ('CREDIT', 'MISC_CREDIT')) then
6046 	  CE_AUTO_BANK_MATCH.corr_csl_amount := CE_AUTO_BANK_MATCH.csl_amount
6047 			+ CE_AUTO_BANK_MATCH.trx_amount2;
6048 	else
6049 	  CE_AUTO_BANK_MATCH.corr_csl_amount := CE_AUTO_BANK_MATCH.csl_amount
6050 			- CE_AUTO_BANK_MATCH.trx_amount2;
6051 	end if;
6052       else  /* CE_AUTO_BANK_MATCH.csl_trx_type = 'MISC_DEBIT' */
6053 	if (CE_AUTO_BANK_MATCH.trx_type2 in ('DEBIT', 'MISC_DEBIT')) then
6054 	  CE_AUTO_BANK_MATCH.corr_csl_amount := CE_AUTO_BANK_MATCH.csl_amount
6055 			+ CE_AUTO_BANK_MATCH.trx_amount2;
6056 	else
6057 	  CE_AUTO_BANK_MATCH.corr_csl_amount := CE_AUTO_BANK_MATCH.csl_amount
6058 			- CE_AUTO_BANK_MATCH.trx_amount2;
6059 	end if;
6060       end if;
6061       CE_AUTO_BANK_MATCH.calc_csl_amount := CE_AUTO_BANK_MATCH.corr_csl_amount;
6062     end if;
6063   end if;
6064   if (no_of_matches = 0) then
6065     raise NO_DATA_FOUND;
6066   elsif (no_of_matches > 1) then
6067     raise TOO_MANY_ROWS;
6068   end if;
6069   cep_standard.debug('<<CE_AUTO_BANK_MATCH.stmtline_match' );
6070 
6071 EXCEPTION
6072   WHEN NO_DATA_FOUND THEN
6073     CE_RECONCILIATION_ERRORS_PKG.insert_row(
6074 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
6075 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_NO_STMTL');
6076     no_of_matches:=0;
6077   WHEN TOO_MANY_ROWS THEN
6078     cep_standard.debug('EXCEPTION: More than one statement line match this receipt' );
6079     CE_RECONCILIATION_ERRORS_PKG.insert_row(
6080 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
6081 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_ABR_STMT_PARTIAL');
6082     no_of_matches:=999;
6083   WHEN OTHERS THEN
6084     cep_standard.debug('SQLCODE = '|| sqlcode);
6085     cep_standard.debug('SQLERRM = '|| sqlerrm);
6086     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.stmtline_match' );
6087     RAISE;
6088 
6089 END stmtline_match;
6090 
6091 /* ---------------------------------------------------------------------
6092 |  PRIVATE PROCEDURE							|
6093 |	match_line							|
6094 |  CALLS								|
6095 |	trx_match			         			|
6096 |	batch_match			         			|
6097 |	bank_account_match       					|
6098 |	invoice_match			         			|
6099 |	stmtline_match			         			|
6100 |	trx_validation							|
6101 |									|
6102 |  CALLED BY								|
6103 |	match_engine							|
6104  --------------------------------------------------------------------- */
6105 PROCEDURE match_line(call_mode	VARCHAR2) IS
6106   no_of_matches		NUMBER;
6107   no_of_currencies    	NUMBER;
6108   dup_invoice           NUMBER;
6109   curr			NUMBER;
6110 
6111 cursor count_dup_invoice is
6112 	select count(*)
6113 	from ap_invoices ap,
6114 	ap_invoice_payments aip,
6115 	ap_checks_all ac,
6116 	ce_bank_accounts ba,
6117 	ce_bank_acct_uses_ou_v bau
6118 	where ba.bank_account_num = CE_AUTO_BANK_MATCH.csl_bank_account_text
6119 	and ba.bank_account_id = bau.bank_account_id
6120 	and bau.AP_USE_ENABLE_FLAG ='Y'
6121 	--and bau.bank_account_id = ac.external_bank_account_id
6122     	--and bau.bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
6123         AND bau.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,bau.org_id)
6124 	and bau.bank_acct_use_id = ac.CE_BANK_ACCT_USE_ID
6125 	and ac.check_id    = aip.check_id
6126 	and ac.org_id      = aip.org_id
6127 	and aip.invoice_id = ap.invoice_id
6128 	and ap.invoice_num = CE_AUTO_BANK_MATCH.csl_invoice_text;
6129 
6130 BEGIN
6131   cep_standard.debug('>>CE_AUTO_BANK_MATCH.match_line');
6132 
6133 /* Comment this out NOCOPY since Kayo move this to the match_engine().
6134   if (CE_AUTO_BANK_MATCH.csl_bank_trx_number is NULL AND
6135       (CE_AUTO_BANK_MATCH.csl_invoice_text is NULL AND
6136        CE_AUTO_BANK_MATCH.csl_customer_text is NULL) AND
6137       (CE_AUTO_BANK_MATCH.csl_bank_account_text is NULL AND
6138        CE_AUTO_BANK_MATCH.csl_invoice_text is NULL)) then
6139 	--  Message #53000
6140     raise NO_DATA_FOUND;
6141   end if;
6142 */
6143 
6144   IF (call_mode = 'T') THEN
6145     trx_match(no_of_matches);
6146   ELSIF (call_mode = 'B') THEN
6147     batch_match(no_of_matches, no_of_currencies);
6148   ELSIF (call_mode = 'G') THEN
6149     Group_match(no_of_matches, no_of_currencies);  --FOR SEPA ER 6700007 END
6150   ELSIF (call_mode = 'A') THEN
6151     bank_account_match(no_of_matches);
6152   ELSIF (call_mode = 'I') THEN
6153     invoice_match(no_of_matches);
6154   ELSIF (call_mode = 'S') THEN
6155     stmtline_match(no_of_matches);
6156   END IF;
6157 
6158   cep_standard.debug('no_of_matches = '|| no_of_matches);
6159   cep_standard.debug('no_of_currencies = '|| no_of_currencies);
6160 
6161   IF (no_of_matches = 1) THEN
6162     IF (trx_validation(no_of_currencies)) THEN
6163       CE_AUTO_BANK_MATCH.csl_match_found := 'FULL';
6164     ELSE
6165       CE_AUTO_BANK_MATCH.csl_match_found := 'PARTIAL';
6166     END IF;
6167   ELSIF (no_of_matches > 1) THEN
6168     CE_AUTO_BANK_MATCH.csl_match_found := 'ERROR';
6169 /*    open  count_dup_invoice;
6170     fetch count_dup_invoice into dup_invoice;
6171     close count_dup_invoice;
6172     IF (dup_invoice > 0) THEN
6173       CE_RECONCILIATION_ERRORS_PKG.insert_row(
6174       CE_AUTO_BANK_MATCH.csh_statement_header_id,
6175       CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_MULTI_MATCH_INVOICE');
6176     ELSE
6177 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
6178 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
6179 	CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_PMT_PARTIAL');
6180     END IF;
6181 */
6182   ELSE
6183     CE_AUTO_BANK_MATCH.csl_match_found := 'NONE';
6184   END IF;
6185   cep_standard.debug('DEBUG #5 - csl_match_found = '|| csl_match_found);
6186   cep_standard.debug('<<CE_AUTO_BANK_MATCH.match_line');
6187 EXCEPTION
6188   WHEN OTHERS THEN
6189     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.match_line' );
6190     RAISE;
6191 END match_line;
6192 
6193 /* ---------------------------------------------------------------------
6194 |  PRIVATE PROCEDURE							|
6195 |	match_engine							|
6196 |									|
6197 |  DESCRIPTION								|
6198 |	Depending on the statement line type, try and match the trans-	|
6199 |	action to a credit, debit or miscellaneous transaction.		|
6200 |  									|
6201 |	Relationship between trx_type and receipt_type			|
6202 |	trx_type	receipt_type					|
6203 |	--------	------------					|
6204 |	JE_LINE		JE_LINE						|
6205 |	ROI_LINE	PAYMENT						|
6206 |			CASH						|
6207 |  CALLS								|
6208 |	match_line						        |
6209 |									|
6210 |  CALLED BY								|
6211 |	match_process							|
6212  --------------------------------------------------------------------- */
6213 PROCEDURE match_engine IS
6214   l_encoded_message		VARCHAR2(500);
6215   l_message_name		FND_NEW_MESSAGES.message_name%TYPE;
6216   l_app_short_name		VARCHAR2(30);
6217   no_of_currencies		NUMBER;
6218   primary_match			VARCHAR2(10);
6219   secondary_match		VARCHAR2(10);
6220   Tertiary_match		VARCHAR2(10); --- FOR SEPA ER 6700007
6221   x_statement_line_id		CE_STATEMENT_LINES.statement_line_id%TYPE;
6222   misc_exists			VARCHAR2(1) := 'N';
6223   receipt_amount		NUMBER;
6224   base_receipt_amount		NUMBER;
6225   precision			NUMBER;
6226   ext_precision			NUMBER;
6227   min_acct_unit			NUMBER;
6228   l_vat_tax_id                  NUMBER := to_number(null);
6229   l_tax_rate                    NUMBER := to_number(null);
6230   l_trx_number CE_STATEMENT_LINES.BANK_TRX_NUMBER%TYPE; --Bug 3385023 added this variable.
6231  accounting_method_found	NUMBER := 0;
6232   current_org_id		number;
6233   receivables_trx_org_id		number;
6234 
6235 BEGIN
6236 
6237   cep_standard.debug('>>CE_AUTO_BANK_MATCH.match_engine');
6238 
6239   CE_AUTO_BANK_MATCH.csl_match_correction_type := 'NONE';
6240   CE_AUTO_BANK_MATCH.reconciled_this_run := NULL;
6241   CE_AUTO_BANK_MATCH.reconcile_to_statement_flag := NULL;
6242 
6243   --
6244   -- bug 1941362
6245   -- Reset G_gl_date because trx_match might have changed the G_gl_date
6246   --
6247   -- cep_standard.debug('Before reset ** to_date( CE_AUTO_BANK_REC.G_gl_date  = ' || CE_AUTO_BANK_REC.G_gl_date);
6248 
6249   CE_AUTO_BANK_REC.G_gl_date	:= CE_AUTO_BANK_REC.G_gl_date_original;
6250 
6251   -- cep_standard.debug('After reset ** to_date( CE_AUTO_BANK_REC.G_gl_date  = ' || CE_AUTO_BANK_REC.G_gl_date);
6252 
6253   --
6254   -- Set the trx_currency_type
6255   --
6256 
6257   IF (NVL(CE_AUTO_BANK_MATCH.csl_currency_code,
6258       CE_AUTO_BANK_MATCH.aba_bank_currency)
6259       = CE_AUTO_BANK_REC.G_functional_currency) THEN
6260     CE_AUTO_BANK_MATCH.trx_currency_type := 'FUNCTIONAL';
6261   ELSIF (NVL(CE_AUTO_BANK_MATCH.csl_currency_code,
6262       CE_AUTO_BANK_MATCH.aba_bank_currency)
6263       = CE_AUTO_BANK_MATCH.aba_bank_currency) THEN
6264     CE_AUTO_BANK_MATCH.trx_currency_type := 'BANK';
6265   ELSE
6266     CE_AUTO_BANK_MATCH.trx_currency_type := 'FOREIGN';
6267   END IF;
6268 
6269   -- bug3668921
6270   IF (CE_AUTO_BANK_MATCH.trx_currency_type = 'BANK') THEN
6271     IF ((CE_AUTO_BANK_MATCH.csl_exchange_rate_type is null and
6272          CE_AUTO_BANK_MATCH.csl_exchange_rate_date is null and
6273          CE_AUTO_BANK_MATCH.csl_exchange_rate is null) OR
6274          (CE_AUTO_BANK_MATCH.csl_exchange_rate_type <> 'User' and
6275           CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL)) THEN
6276       IF (NOT validate_exchange_details) THEN
6277         cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.trx_validation' );
6278       END IF;
6279     END IF;
6280   END IF;
6281 
6282   IF ((csl_bank_trx_number is null) and not (csl_reconcile_flag = 'OI' and
6283        nvl(CE_AUTO_BANK_REC.G_open_interface_matching_code,'T') = 'D') and
6284       (csl_invoice_text is null and csl_bank_account_text is null) and
6285       (csl_invoice_text is null and csl_customer_text is null) and
6286       (CE_AUTO_BANK_MATCH.csl_trx_type not in ('MISC_CREDIT', 'MISC_DEBIT') or
6287       (CE_AUTO_BANK_MATCH.csl_trx_type in ('MISC_CREDIT', 'MISC_DEBIT') and
6288        nvl(CE_AUTO_BANK_MATCH.csl_create_misc_trx_flag,'N') = 'N'))) THEN
6289 
6290     raise NO_DATA_FOUND;
6291 
6292   ELSIF (trx_currency_type = 'FOREIGN' and CE_AUTO_BANK_MATCH.aba_bank_currency
6293 	<> CE_AUTO_BANK_REC.G_functional_currency) OR
6294 	(trx_currency_type = 'FUNCTIONAL' and
6295 	CE_AUTO_BANK_MATCH.aba_bank_currency
6296 	<> CE_AUTO_BANK_REC.G_functional_currency) THEN
6297 
6298     CE_RECONCILIATION_ERRORS_PKG.insert_row(
6299     CE_AUTO_BANK_MATCH.csh_statement_header_id,
6300     CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_NO_FOREIGN_RECON');
6301 
6302   ELSE
6303     --
6304     -- Open Interface system option needs to be enabled
6305     -- before we try to find the match
6306     --
6307     IF (CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'OI' AND
6308 	NVL(CE_AUTO_BANK_REC.G_open_interface_flag,'N') = 'N' ) THEN
6309       CE_RECONCILIATION_ERRORS_PKG.insert_row(
6310 	  CE_AUTO_BANK_MATCH.csh_statement_header_id,
6311 	  CE_AUTO_BANK_MATCH.csl_statement_line_id,
6312 	  'CE_OPEN_INTERFACE_DISABLED');
6313       CE_AUTO_BANK_MATCH.csl_match_found := 'NONE';
6314 
6315     --
6316     -- If statement line NOT MISC-creation
6317     --
6318     ELSIF (CE_AUTO_BANK_MATCH.csl_trx_type IN
6319 	('DEBIT', 'STOP','CREDIT','NSF','REJECTED', 'SWEEP_IN', 'SWEEP_OUT')) THEN
6320       primary_match := NULL;
6321       secondary_match := NULL;
6322       Tertiary_match  := NULL; --FOR SEPA ER 6700007
6323       --
6324       -- For open interface, journal, and payroll reconciliation
6325       -- csl_reconcile_flag is 'JE' or 'OI' or 'PAY'
6326       --
6327       IF (CE_AUTO_BANK_MATCH.csl_reconcile_flag IN ('JE', 'OI', 'PAY','CE')) THEN
6328         primary_match := 'T';
6329       --
6330       -- AP/AR Transaction
6331       --
6332       ELSIF (CE_AUTO_BANK_MATCH.csl_reconcile_flag IN ( 'PAY_EFT')) THEN
6333         primary_match := 'B';
6334       --
6335       -- AP/AR Transaction
6336       --
6337       ELSE
6338         --
6339         -- Prod16 NEW, ability to match by invoice number also for AP
6340         --
6341         cep_standard.debug('AP/AR trx');
6342 	IF (CE_AUTO_BANK_MATCH.csl_bank_account_text IS NOT NULL AND
6343 	    CE_AUTO_BANK_MATCH.csl_invoice_text IS NOT NULL) THEN
6344 	  primary_match := 'T';
6345 	  secondary_match := 'A';
6346 	ELSIF (CE_AUTO_BANK_MATCH.csl_invoice_text IS NOT NULL) THEN
6347 	  primary_match := 'T';
6348 	  secondary_match := 'I';
6349 	ELSE
6350 	  IF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT', 'STOP')) THEN
6351 	    --FOR SEPA ER 6700007 START
6352 	    primary_match := NVL(CE_AUTO_BANK_REC.G_ap_matching_order,'T');
6353  	    --bug 7565001 : selective setting secondary_match
6354         IF (primary_match = 'T') THEN
6355      	    secondary_match  := NVL(CE_AUTO_BANK_REC.G_ap_matching_order2,'B');
6356         ELSE
6357           secondary_match  := NVL(CE_AUTO_BANK_REC.G_ap_matching_order2,'T');
6358         END IF;
6359 
6360 
6361          IF (primary_match = 'T') and (secondary_match = 'B') THEN
6362 	       Tertiary_match := 'G' ;
6363 	     ELSIF (primary_match = 'T') and (secondary_match = 'G') THEN
6364 	       Tertiary_match := 'B';
6365 	     ELSIF (primary_match = 'G') and (secondary_match = 'B') THEN
6366 	       Tertiary_match := 'T';
6367 	     ELSIF (primary_match = 'G') and (secondary_match = 'T') THEN
6368 	       Tertiary_match := 'B';
6369 	     ELSIF (primary_match = 'B') and (secondary_match = 'T') THEN
6370 	       Tertiary_match := 'G';
6371 	     ELSIF (primary_match = 'B') and (secondary_match = 'G') THEN
6372 	       Tertiary_match := 'T';
6373 	     END IF;
6374 	     cep_standard.debug('AP primary_match -'||primary_match||' secondary_match -'||secondary_match||' Tertiary_match -'||Tertiary_match);
6375 	  ELSE
6376 	    primary_match := NVL(CE_AUTO_BANK_REC.G_ar_matching_order,'T');
6377 	    IF (primary_match = 'T') THEN
6378 	        secondary_match := 'B';
6379 	    ELSE
6380 	        secondary_match := 'T';
6381 	    END IF;
6382 	  END IF;
6383 	  --FOR SEPA ER 6700007 END
6384 	END IF;
6385       END IF;
6386        cep_standard.debug('EXECUTING  primary_match ');
6387 
6388       match_line(primary_match);
6389       IF (CE_AUTO_BANK_MATCH.csl_match_found IN ('ERROR','NONE','PARTIAL') AND
6390 	  nvl(CE_AUTO_BANK_MATCH.csl_reconcile_flag,'NONE')
6391 	  NOT IN ('JE', 'OI', 'PAY', 'PAY_EFT', 'CE') AND secondary_match IS NOT NULL) THEN
6392 
6393           cep_standard.debug('EXECUTING  secondary_match ');
6394 
6395 
6396         match_line(secondary_match);
6397 
6398 	 --FOR SEPA ER 6700007 START
6399 	IF (CE_AUTO_BANK_MATCH.csl_match_found IN ('ERROR','NONE','PARTIAL') AND
6400 	   CE_AUTO_BANK_MATCH.csl_trx_type IN ('DEBIT', 'STOP')  AND
6401 	   Tertiary_match IS NOT NULL) THEN
6402 
6403 	    cep_standard.debug('EXECUTING  Tertiary_match ');
6404 
6405              match_line(Tertiary_match);
6406 
6407         END IF;
6408          --FOR SEPA ER 6700007 END
6409       END IF;
6410 
6411       -- bug 4914608 set the org after a match for AR/AP
6412       cep_standard.debug('CE_AUTO_BANK_MATCH.trx_org_id =' ||CE_AUTO_BANK_MATCH.trx_org_id);
6413       if (CE_AUTO_BANK_MATCH.csl_match_found = 'FULL')  THEN
6414         set_single_org(CE_AUTO_BANK_MATCH.trx_org_id);
6415       END IF;
6416 
6417       -- moved from match_process
6418       -- bug 1796965
6419       SELECT count(*)
6420       INTO	accounting_method_found
6421       FROM	ar_system_parameters s
6422       where s.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,CE_AUTO_BANK_MATCH.trx_org_id);
6423 
6424       if (accounting_method_found = 1) then
6425         SELECT accounting_method
6426         INTO   CE_AUTO_BANK_MATCH.ar_accounting_method
6427         FROM   ar_system_parameters s
6428         where s.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,CE_AUTO_BANK_MATCH.trx_org_id);
6429       else
6430         CE_AUTO_BANK_MATCH.ar_accounting_method := NULL;
6431       end if;
6432       cep_standard.debug('CE_AUTO_BANK_MATCH.ar_accounting_method =' ||CE_AUTO_BANK_MATCH.ar_accounting_method);
6433 
6434       --
6435       -- Bug 928060: Create a misc receipt for NSF line with tolerance.
6436       --
6437       if (CE_AUTO_BANK_MATCH.csl_match_found = 'FULL' and
6438   	CE_AUTO_BANK_MATCH.csl_trx_type = 'NSF' and
6439   	(CE_AUTO_BANK_MATCH.trx_amount <>
6440   	CE_AUTO_BANK_MATCH.calc_csl_amount)) then
6441 
6442 	begin
6443 	  select 'Y'
6444 	  into   misc_exists
6445 	  --from   ce_222_transactions_v
6446           from   ce_available_transactions_tmp
6447 	  where  trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number || '/NSF'
6448 	  and    trx_type = 'MISC'
6449           and    rownum = 1
6450           and    application_id = 222
6451           and    reconciled_status_flag = 'N';
6452         exception
6453 	  when no_data_found then
6454 	    misc_exists := 'N';
6455 	  when others then
6456 	    misc_exists := 'N';
6457 	end;
6458 
6459 	IF (misc_exists = 'N') THEN
6460 	  if (nvl(CE_AUTO_BANK_MATCH.csl_receipt_method_id,
6461 	      CE_AUTO_BANK_REC.G_payment_method_id) is null OR
6462 	      nvl(CE_AUTO_BANK_MATCH.csl_receivables_trx_id,
6463 	      CE_AUTO_BANK_REC.G_receivables_trx_id) is null) then
6464 	    cep_standard.debug('No receipt method or receivable activity info.');
6465 	    CE_AUTO_BANK_MATCH.nsf_info_flag := 'Y';
6466 	  else
6467 	    cep_standard.debug('Create a misc receipt for NSF line with tolerance.');
6468 	    declare
6469 	      p_cr_id ar_cash_receipts.cash_receipt_id%TYPE;
6470 	    begin
6471 
6472 	      --
6473 	      -- bug# 1180124
6474 	      -- If exchange type is pre-defined rate type, populate the
6475 	      -- exchange rate
6476 	      --
6477 	      -- bug 2293491
6478               IF ((CE_AUTO_BANK_MATCH.csl_exchange_rate_type is null and
6479 			CE_AUTO_BANK_MATCH.csl_exchange_rate_date is null and
6480 			CE_AUTO_BANK_MATCH.csl_exchange_rate is null) OR
6481 			(CE_AUTO_BANK_MATCH.csl_exchange_rate_type <> 'User' and
6482 			CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL)) THEN
6483 		IF (NOT validate_exchange_details) THEN
6484 		  cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.trx_validation' );
6485 		END IF;
6486 	      END IF;
6487 
6488 	      --
6489 	      -- bug# 939160
6490 	      -- Verified that exchange information is not null
6491 	      --    when creating foreign currency misc receipts
6492 	      --
6493 	      IF (CE_AUTO_BANK_MATCH.aba_bank_currency <>
6494 		  CE_AUTO_BANK_REC.G_functional_currency
6495 		  AND CE_AUTO_BANK_MATCH.csl_create_misc_trx_flag = 'Y'
6496 		  AND (CE_AUTO_BANK_MATCH.csl_exchange_rate_date IS NULL
6497 		  OR CE_AUTO_BANK_MATCH.csl_exchange_rate_type IS NULL
6498 		  OR CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL) ) THEN
6499 		CE_RECONCILIATION_ERRORS_PKG.insert_row(
6500 		    CE_AUTO_BANK_MATCH.csh_statement_header_id,
6501 		    CE_AUTO_BANK_MATCH.csl_statement_line_id,
6502 		    'CE_REQUIRED_EXCHANGE_FIELD');
6503 	      ELSE
6504  	        --
6505  	        -- bug# 1190376
6506  	        -- Make sure the amount is converted to foreign curr
6507  	        -- and the decimal is rounded correctly
6508  	        --
6509  	        IF (CE_AUTO_BANK_MATCH.csl_exchange_rate IS NULL
6510 		    OR CE_AUTO_BANK_MATCH.trx_currency_type = 'BANK') THEN
6511 		  receipt_amount := CE_AUTO_BANK_MATCH.trx_amount -
6512 			CE_AUTO_BANK_MATCH.calc_csl_amount;
6513 		  base_receipt_amount := receipt_amount;
6514 		ELSIF (CE_AUTO_BANK_MATCH.csl_exchange_rate_type <> 'User') THEN
6515 		  BEGIN
6516 		    receipt_amount := gl_currency_api.convert_amount(
6517 			CE_AUTO_BANK_REC.G_functional_currency,
6518 			CE_AUTO_BANK_MATCH.csl_currency_code,
6519 			nvl(CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
6520 			CE_AUTO_BANK_MATCH.csl_trx_date),
6521 			CE_AUTO_BANK_MATCH.csl_exchange_rate_type,
6522 			(CE_AUTO_BANK_MATCH.trx_amount
6523 			- CE_AUTO_BANK_MATCH.calc_csl_amount));
6524 		  EXCEPTION
6525 		    WHEN OTHERS THEN
6526 		      cep_standard.debug('EXCEPTION: Could not convert amount');
6527 		      receipt_amount := NULL;
6528 		  END;
6529 
6530 		  base_receipt_amount := convert_to_base_curr(receipt_amount);
6531 
6532 		ELSE -- foreign curr type = 'User'
6533 		  receipt_amount := (CE_AUTO_BANK_MATCH.trx_amount
6534 		      - CE_AUTO_BANK_MATCH.calc_csl_amount) *
6535 		      (1/CE_AUTO_BANK_MATCH.csl_exchange_rate);
6536 		  fnd_currency.get_info(CE_AUTO_BANK_MATCH.aba_bank_currency,
6537 		      precision, ext_precision, min_acct_unit);
6538 		  receipt_amount := round(receipt_amount,precision);
6539 		  base_receipt_amount := convert_to_base_curr(receipt_amount);
6540 		END IF;
6541 
6542 		/* This is to populate cleared amount properly. */
6543 		CE_AUTO_BANK_MATCH.calc_csl_amount :=
6544 		    CE_AUTO_BANK_MATCH.trx_amount;
6545 
6546 		if (CE_AUTO_BANK_MATCH.ar_accounting_method = 'ACCRUAL') then
6547 		  CE_AUTO_BANK_MATCH.get_vat_tax_id('AUTO_NSF',
6548 		      l_vat_tax_id, l_tax_rate);
6549 		end if;
6550 
6551 		--Bug 4260337 Validate payment method for end date
6552 		IF NOT(VALIDATE_PAYMENT_METHOD)  THEN
6553 			CE_RECONCILIATION_ERRORS_PKG.insert_row(CE_AUTO_BANK_MATCH.csh_statement_header_id,
6554 				CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_PAYMENT_METHOD');
6555 		ELSE
6556 
6557                   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_receivables_trx_id= '||
6558 						CE_AUTO_BANK_MATCH.csl_receivables_trx_id);
6559 
6560 		  -- bug 5185358  not able to create misc receipt
6561 		  get_receivables_org_id(receivables_trx_org_id);
6562 		  CE_AUTO_BANK_MATCH.trx_org_id := receivables_trx_org_id;
6563 
6564 		  cep_standard.debug('receivables_trx_org_id= '|| receivables_trx_org_id);
6565 
6566 		  set_single_org(receivables_trx_org_id);
6567 
6568 		  select mo_global.GET_CURRENT_ORG_ID
6569 		  into current_org_id
6570 		  from dual;
6571 
6572 		  cep_standard.debug('current_org_id =' ||current_org_id );
6573 
6574 
6575   		  cep_standard.debug('match_engine: >> CE_AUTO_BANK_CLEAR.misc_receipt');
6576 
6577 		  CE_AUTO_BANK_CLEAR.misc_receipt(
6578 			X_passin_mode => 'AUTO_TRX',
6579 			X_trx_number  =>
6580 			    CE_AUTO_BANK_MATCH.csl_bank_trx_number || '/NSF',
6581 			X_doc_sequence_value => NULL,
6582 			X_doc_sequence_id   => to_number(NULL),
6583 			X_gl_date => CE_AUTO_BANK_REC.G_gl_date,
6584 			X_value_date => CE_AUTO_BANK_MATCH.csl_effective_date,
6585 			X_trx_date  => CE_AUTO_BANK_MATCH.csl_trx_date,
6586 			X_deposit_date =>  CE_AUTO_BANK_MATCH.csl_trx_date,
6587 			X_amount => receipt_amount,
6588 			X_bank_account_amount => base_receipt_amount,
6589 			X_set_of_books_id => CE_AUTO_BANK_REC.G_set_of_books_id,
6590 			X_misc_currency_code =>
6591 			    NVL(CE_AUTO_BANK_MATCH.csl_currency_code,
6592 			    CE_AUTO_BANK_MATCH.aba_bank_currency),
6593 		 	X_exchange_rate_date  =>
6594 			    CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
6595 			X_exchange_rate_type =>
6596 			    CE_AUTO_BANK_MATCH.csl_exchange_rate_type,
6597 			X_exchange_rate       =>
6598 			    CE_AUTO_BANK_MATCH.csl_exchange_rate,
6599 			X_receipt_method_id   =>
6600 			    nvl(CE_AUTO_BANK_MATCH.csl_receipt_method_id,
6601 				CE_AUTO_BANK_REC.G_payment_method_id),
6602 			X_bank_account_id =>
6603 			    CE_AUTO_BANK_MATCH.csh_bank_account_id,
6604 			X_activity_type_id   =>
6605 			    nvl(CE_AUTO_BANK_MATCH.csl_receivables_trx_id,
6606 				CE_AUTO_BANK_REC.G_receivables_trx_id),
6607 			X_comments            => 'Created by Auto Bank Rec',
6608 			X_reference_type      => NULL,
6609 			X_reference_id        => to_number(NULL),
6610 			X_clear_currency_code => NULL,
6611 			X_statement_line_id   => X_statement_line_id,
6612 			X_tax_id              => l_vat_tax_id,
6613 			X_tax_rate	      => l_tax_rate,
6614 			X_paid_from           => NULL,
6615 			X_module_name         => 'CE_AUTO_BANK_REC',
6616 			X_cr_vat_tax_id  => CE_AUTO_BANK_REC.G_cr_vat_tax_code,
6617 			X_dr_vat_tax_id  => CE_AUTO_BANK_REC.G_dr_vat_tax_code,
6618 			trx_currency_type =>
6619 			    CE_AUTO_BANK_MATCH.trx_currency_type,
6620 			X_cr_id               => p_cr_id,
6621 			X_effective_date      =>
6622 			    CE_AUTO_BANK_MATCH.csl_effective_date,
6623 			X_org_id      =>
6624 			    nvl(CE_AUTO_BANK_MATCH.trx_org_id,CE_AUTO_BANK_REC.G_org_id));
6625 			    --CE_AUTO_BANK_MATCH.bau_org_id);
6626 
6627   		  cep_standard.debug('end match_engine: >> CE_AUTO_BANK_CLEAR.misc_receipt');
6628  		  cep_standard.debug('p_cr_id = '|| p_cr_id);
6629 
6630 		cep_standard.debug('Create a misc receipt with cash_receipt_id='|| to_char(p_cr_id));
6631 		END IF; --validate payment method
6632 	      END IF; -- if not creating foreign misc receipts with null exchange info
6633 
6634 	    exception
6635 	      when others then
6636 		cep_standard.debug('Error in CE_AUTO_BANK_CLEAR.misc_receipt');
6637 		raise;
6638 	    end;
6639 	  end if;
6640 
6641 	ELSE	/* misc_exists = 'Y' */
6642 	  cep_standard.debug('Exist a misc receipt with trx number <'||
6643 	      CE_AUTO_BANK_MATCH.csl_bank_trx_number || '/NSF>.');
6644 	END IF;
6645       end if;
6646 
6647     --
6648     --  If the transaction type is miscellaneous, try and match the
6649     --  statement line to a miscellaneous receipt. If the bank trx number
6650     --  is provided.
6651     --
6652     ELSIF CE_AUTO_BANK_MATCH.csl_trx_type IN ('MISC_CREDIT', 'MISC_DEBIT') THEN
6653       IF CE_AUTO_BANK_MATCH.csl_bank_trx_number IS NOT NULL
6654 	  --and CE_AUTO_BANK_MATCH.csl_create_misc_trx_flag <> 'Y') --bug 4542114
6655 	  or
6656 	  (CE_AUTO_BANK_MATCH.csl_invoice_text IS NOT NULL and
6657 	  (CE_AUTO_BANK_MATCH.csl_bank_account_text IS NOT NULL or
6658 	  CE_AUTO_BANK_MATCH.csl_customer_text IS NOT NULL)) THEN
6659 
6660 	-- Changes for Release 11.
6661 	-- Check if the misc statement line is to match against statement line
6662 	-- and/or transaction.
6663 	if (CE_AUTO_BANK_MATCH.csl_matching_against = 'MISC') then
6664 	  primary_match := 'T';
6665 	  secondary_match := NULL;
6666 	elsif (CE_AUTO_BANK_MATCH.csl_matching_against = 'STMT') then
6667 	  primary_match := 'S';
6668 	  secondary_match := NULL;
6669 	elsif (CE_AUTO_BANK_MATCH.csl_matching_against = 'MS') then
6670 	  primary_match := 'T';
6671 	  secondary_match := 'S';
6672 	else   /* CE_AUTO_BANK_MATCH.csl_matching_against = 'SM' */
6673 	  primary_match := 'S';
6674 	  secondary_match := 'T';
6675 	end if;
6676 
6677 	match_line(primary_match);
6678 	cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.csl_match_found = '||
6679 	    CE_AUTO_BANK_MATCH.csl_match_found);
6680 	cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.csl_reconcile_flag = '||
6681 	    CE_AUTO_BANK_MATCH.csl_reconcile_flag);
6682 	cep_standard.debug('DEBUG: secondary_match = '|| secondary_match);
6683 	if (CE_AUTO_BANK_MATCH.csl_match_found IN ('ERROR','NONE','PARTIAL') AND
6684 	    nvl(CE_AUTO_BANK_MATCH.csl_reconcile_flag,'NONE')
6685 	    NOT IN ('JE', 'OI') AND secondary_match IS NOT NULL) then
6686 	  match_line(secondary_match);
6687 	end if;
6688 
6689 
6690 cep_standard.debug('CE_AUTO_BANK_MATCH.csl_match_found - '|| CE_AUTO_BANK_MATCH.csl_match_found);
6691 cep_standard.debug('CE_AUTO_BANK_MATCH.csl_reconcile_flag - '|| CE_AUTO_BANK_MATCH.csl_reconcile_flag);
6692 cep_standard.debug('CE_AUTO_BANK_MATCH.csl_matching_against - '|| CE_AUTO_BANK_MATCH.csl_matching_against);
6693 cep_standard.debug('CE_AUTO_BANK_MATCH.csl_create_misc_trx_flag -  '|| CE_AUTO_BANK_MATCH.csl_create_misc_trx_flag );
6694 cep_standard.debug('CE_AUTO_BANK_MATCH.csl_bank_trx_number - '|| CE_AUTO_BANK_MATCH.csl_bank_trx_number);
6695 cep_standard.debug('CE_AUTO_BANK_MATCH.csl_invoice_text - '|| CE_AUTO_BANK_MATCH.csl_invoice_text);
6696 cep_standard.debug('CE_AUTO_BANK_MATCH.csl_bank_account_text - '|| CE_AUTO_BANK_MATCH.csl_bank_account_text);
6697 cep_standard.debug('CE_AUTO_BANK_MATCH.csl_customer_text - '|| CE_AUTO_BANK_MATCH.csl_customer_text);
6698 
6699 	-- bug 4542114  If there is no match, then create the misc receipt
6700         /* bug 	6049035  If there is no match with  and data is available in "Customer name" or "account number" and also the
6701            invoice field in the Bank Statement lines window, then create the misc receipt */
6702 
6703 	if (CE_AUTO_BANK_MATCH.csl_match_found IN ('ERROR','NONE','PARTIAL') AND
6704 	    nvl(CE_AUTO_BANK_MATCH.csl_reconcile_flag,'NONE') NOT IN ('JE', 'OI')  AND
6705 	    CE_AUTO_BANK_MATCH.csl_matching_against <> 'STMT'  AND
6706 	    CE_AUTO_BANK_MATCH.csl_create_misc_trx_flag = 'Y'  AND
6707 	      (CE_AUTO_BANK_MATCH.csl_bank_trx_number IS NOT NULL  or
6708 		  (CE_AUTO_BANK_MATCH.csl_invoice_text IS NOT NULL and
6709 		  (CE_AUTO_BANK_MATCH.csl_bank_account_text IS NOT NULL or
6710 		   CE_AUTO_BANK_MATCH.csl_customer_text IS NOT NULL))))	then
6711 
6712 	   cep_standard.debug('calling create_misc_trx ');
6713   	   create_misc_trx;
6714 	end if;
6715 
6716       ELSE
6717 
6718 	-- bug 4542114
6719 	create_misc_trx;
6720 
6721       END IF;   -- CE_AUTO_BANK_MATCH.csl_bank_trx_number not is null
6722 
6723       CE_AUTO_BANK_MATCH.trx_match_type := CE_AUTO_BANK_MATCH.csl_match_type;
6724       IF (CE_AUTO_BANK_MATCH.csl_match_found = 'FULL') THEN
6725 	CE_AUTO_BANK_MATCH.csl_match_type := 'MISC';
6726       ELSE
6727 	CE_AUTO_BANK_MATCH.csl_match_type := 'NONE';
6728 	--CE_RECONCILIATION_ERRORS_PKG.insert_row(CE_AUTO_BANK_MATCH.csh_statement_header_id,
6729 	--CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_DR_NOT_FOUND');
6730       END IF;
6731     END IF; -- End main IF statement -- CE_AUTO_BANK_MATCH.csl_reconcile_flag = 'OI'
6732   END IF; -- Forex
6733 
6734   cep_standard.debug('<<CE_AUTO_BANK_MATCH.match_engine');
6735 
6736 EXCEPTION
6737   WHEN NO_DATA_FOUND THEN
6738     cep_standard.debug('info missing');
6739     CE_RECONCILIATION_ERRORS_PKG.insert_row(
6740 	   CE_AUTO_BANK_MATCH.csh_statement_header_id,
6741 	   CE_AUTO_BANK_MATCH.csl_statement_line_id, 'CE_ABR_INFO_MISSING');
6742   WHEN app_exception.application_exception THEN
6743     cep_standard.debug('EXCEPTION:CE_AUTO_BANK_MATCH.match_engine-application_exception' );
6744     l_encoded_message := FND_MESSAGE.GET_ENCODED;
6745     IF (l_encoded_message IS NOT NULL) THEN
6746       cep_standard.debug('Encoded message is: ' ||l_encoded_message);
6747       FND_MESSAGE.parse_encoded(l_encoded_message,l_app_short_name,
6748 				l_message_name);
6749     ELSE
6750       cep_standard.debug('No messages on stack');
6751       l_message_name := 'OTHER_APP_ERROR';
6752     END IF;
6753     CE_RECONCILIATION_ERRORS_PKG.insert_row(
6754 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
6755 	CE_AUTO_BANK_MATCH.csl_statement_line_id, l_message_name,
6756 	l_app_short_name);
6757   WHEN OTHERS THEN
6758     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.match_engine' );
6759     RAISE;
6760 END match_engine;
6761 
6762 /* ---------------------------------------------------------------------
6763 |  PRIVATE PROCEDURE							|
6764 |	lock_statement 							|
6765 |									|
6766 |  DESCRIPTION								|
6767 |	Using the rowid, lock the statement regular way			|
6768 |									|
6769 |  CALLED BY								|
6770 |	match_process							|
6771 |									|
6772 |  REQUIRES								|
6773 |	lockhandle							|
6774  --------------------------------------------------------------------- */
6775 FUNCTION lock_statement(lockhandle IN OUT NOCOPY VARCHAR2) RETURN BOOLEAN IS
6776   x_statement_header_id	CE_STATEMENT_HEADERS.statement_header_id%TYPE;
6777   lock_status		NUMBER;
6778   expiration_secs	NUMBER;
6779   lockname		VARCHAR2(128);
6780   lockmode		NUMBER;
6781   timeout		NUMBER;
6782   release_on_commit	BOOLEAN;
6783 BEGIN
6784   cep_standard.debug('>>CE_AUTO_BANK_MATCH.lock_statement');
6785 
6786   SELECT  statement_header_id
6787   INTO    x_statement_header_id
6788   FROM    ce_statement_headers
6789   WHERE   rowid = CE_AUTO_BANK_MATCH.csh_rowid
6790   FOR UPDATE OF statement_header_id NOWAIT;
6791 
6792   cep_standard.debug('>>CE_AUTO_BANK_MATCH.Regular statement lock OK');
6793   lockname := CE_AUTO_BANK_MATCH.csh_rowid;
6794   timeout  := 1;
6795   lockmode := 6;
6796   expiration_secs  := 10;
6797   release_on_commit := FALSE;
6798   --
6799   -- dbms_lock of row to deal with other locking
6800   --
6801   cep_standard.debug('>>CE_AUTO_BANK_MATCH.Allocating unique');
6802   dbms_lock.allocate_unique (lockname, lockhandle, expiration_secs);
6803   lock_status := dbms_lock.request( lockhandle, lockmode, timeout,
6804 				    release_on_commit );
6805   IF (lock_status <> 0) THEN
6806     lock_status := dbms_lock.release(lockhandle);
6807     RAISE APP_EXCEPTIONS.record_lock_exception;
6808   END IF;
6809   cep_standard.debug('<<CE_AUTO_BANK_MATCH.lock_statement');
6810   RETURN(TRUE);
6811 EXCEPTION
6812   WHEN APP_EXCEPTIONS.record_lock_exception THEN
6813     return(FALSE);
6814   WHEN OTHERS THEN
6815     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.lock_statement' );
6816     RAISE;
6817     return(FALSE);
6818 END lock_statement;
6819 
6820 /* ---------------------------------------------------------------------
6821 |  PRIVATE PROCEDURE							|
6822 |	lock_statement_line						|
6823 |									|
6824 |  DESCRIPTION								|
6825 |	Using the rowid, retrieve the statement line details.		|
6826 |									|
6827 |  CALLED BY								|
6828 |	match_process							|
6829  --------------------------------------------------------------------- */
6830 FUNCTION lock_statement_line RETURN BOOLEAN IS
6831 BEGIN
6832   cep_standard.debug('>>CE_AUTO_BANK_MATCH.lock_statement_line');
6833   SELECT  statement_line_id,
6834 	  trx_date,
6835 	  trx_type,
6836 	  trx_code_id,
6837 	  bank_trx_number,
6838 	  invoice_text,
6839 	  bank_account_text,
6840 	  amount,
6841 	  NVL(charges_amount,0),
6842 	  currency_code,
6843 	  line_number,
6844 	  customer_text,
6845 	  effective_date,
6846 	  original_amount
6847   INTO    CE_AUTO_BANK_MATCH.csl_statement_line_id,
6848 	  CE_AUTO_BANK_MATCH.csl_trx_date,
6849 	  CE_AUTO_BANK_MATCH.csl_trx_type,
6850 	  CE_AUTO_BANK_MATCH.csl_trx_code_id,
6851 	  CE_AUTO_BANK_MATCH.csl_bank_trx_number,
6852 	  CE_AUTO_BANK_MATCH.csl_invoice_text,
6853 	  CE_AUTO_BANK_MATCH.csl_bank_account_text,
6854 	  CE_AUTO_BANK_MATCH.csl_amount,
6855 	  CE_AUTO_BANK_MATCH.csl_charges_amount,
6856 	  CE_AUTO_BANK_MATCH.csl_currency_code,
6857 	  CE_AUTO_BANK_MATCH.csl_line_number,
6858 	  CE_AUTO_BANK_MATCH.csl_customer_text,
6859 	  CE_AUTO_BANK_MATCH.csl_effective_date,
6860 	  CE_AUTO_BANK_MATCH.csl_original_amount
6861   FROM    ce_statement_lines
6862   WHERE   rowid = CE_AUTO_BANK_MATCH.csl_rowid
6863   FOR UPDATE OF status NOWAIT;
6864 
6865   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_trx_type='||CE_AUTO_BANK_MATCH.csl_trx_type||
6866 			', csl_currency_code=' || csl_currency_code ||
6867 			', csl_bank_trx_number='||csl_bank_trx_number );
6868   cep_standard.debug('csl_customer_text='||csl_customer_text ||
6869 			', csl_invoice_text='|| csl_invoice_text||
6870 			', csl_bank_account_text='||csl_bank_account_text);
6871   cep_standard.debug('csl_amount='||csl_amount ||
6872 			', csl_charges_amount='||csl_charges_amount||
6873 			', csl_original_amount='||csl_original_amount);
6874 
6875   cep_standard.debug('<<CE_AUTO_BANK_MATCH.lock_statement_line');
6876   RETURN(TRUE);
6877 
6878 EXCEPTION
6879   WHEN APP_EXCEPTIONS.record_lock_exception THEN
6880     return(FALSE);
6881   WHEN OTHERS THEN
6882     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.lock_statement_line' );
6883     RAISE;
6884     return(FALSE);
6885 END lock_statement_line;
6886 
6887 /* ---------------------------------------------------------------------
6888 |  PRIVATE PROCEDURE							|
6889 |	update_gl_date							|
6890 |									|
6891 |  DESCRIPTION								|
6892 |	Update the gl posting date on ce_statement_headers to the new 	|
6893 |	one for	this run.						|
6894 |									|
6895 |  CALLED BY								|
6896 |	match_process							|
6897  --------------------------------------------------------------------- */
6898 PROCEDURE update_gl_date IS
6899 BEGIN
6900   cep_standard.debug('>>CE_AUTO_BANK_MATCH.update_gl_date');
6901   IF ((CE_AUTO_BANK_REC.find_gl_period(CE_AUTO_BANK_REC.G_gl_date, 200)) OR
6902      (CE_AUTO_BANK_REC.find_gl_period(CE_AUTO_BANK_REC.G_gl_date, 222))) THEN
6903     UPDATE ce_statement_headers
6904     SET    gl_date = CE_AUTO_BANK_REC.G_gl_date
6905     WHERE  rowid = CE_AUTO_BANK_MATCH.csh_rowid;
6906   END IF;
6907   cep_standard.debug('<<CE_AUTO_BANK_MATCH.update_gl_date');
6908 EXCEPTION
6909   WHEN OTHERS THEN
6910     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.update_gl_date' );
6911     RAISE;
6912 END update_gl_date;
6913 
6914 /* ---------------------------------------------------------------------
6915 |  PRIVATE PROCEDURE							|
6916 |	find_le_sys_par							|
6917 |									|
6918 |  DESCRIPTION								|
6919 |	Need to get legal entity system parameters values for		|
6920 |       Open Interface transactions
6921 |									|
6922 |  CALLED BY								|
6923 |									|
6924  --------------------------------------------------------------------- */
6925 /*
6926 PROCEDURE find_le_sys_par(x_bank_account_id	number) IS
6927 
6928 BEGIN
6929   cep_standard.debug('>>CE_AUTO_BANK_MATCH.find_le_sys_par x_bank_account_id'|| x_bank_account_id);
6930  -- populate ce_security_profiles_tmp table with ce_security_procfiles_v
6931  CEP_STANDARD.init_security;
6932 
6933   IF (x_bank_account_id is not null)
6934 	select ACCOUNT_OWNER_ORG_ID
6935 	into p_le_id
6936 	from ce_bank_accts_gt_v  --ce_BANK_ACCOUNTS_v
6937 	where BANK_ACCOUNT_ID = x_bank_account_id;
6938 
6939 	select   AMOUNT_TOLERANCE_OLD,
6940 		 PERCENT_TOLERANCE_OLD,
6941 		 OI_FLOAT_STATUS_OLD,
6942 		 OI_CLEAR_STATUS_OLD,
6943 		 FLOAT_HANDLING_FLAG_OLD,
6944 		 SHOW_VOID_PAYMENT_FLAG,
6945 		 OI_MATCHING_CODE_OLD
6946 	FROM CE_SYSTEM_PARAMETERS;
6947 
6948   END IF;
6949   cep_standard.debug('<<CE_AUTO_BANK_MATCH.find_le_sys_par');
6950 EXCEPTION
6951   WHEN OTHERS THEN
6952     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.find_le_sys_par' );
6953     RAISE;
6954 END find_le_sys_par;
6955 */
6956 
6957 /* ---------------------------------------------------------------------
6958 |  PRIVATE PROCEDURE							|
6959 |	calc_actual_tolerance						|
6960 |									|
6961 |  DESCRIPTION								|
6962 |	Calculate the tolerance range from the percentage tolerance and	|
6963 |	the amount tolerance.						|
6964 |       In rel 11i - tolerance amount is in Functional currency		|
6965 |	In rel 12 - tolerance amount is in Bank Account currency (bug 4969806)
6966 |									|
6967 |  CALLED BY								|
6968 |	match_process							|
6969  --------------------------------------------------------------------- */
6970 PROCEDURE calc_actual_tolerance IS
6971   calc_percent_tolerance     	NUMBER;
6972   calc_amount_tolerance		NUMBER;
6973   calc_charges_amount		NUMBER;
6974 BEGIN
6975   cep_standard.debug('>>CE_AUTO_BANK_MATCH.calc_actual_tolerance');
6976   cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.trx_currency_type = '||
6977 		CE_AUTO_BANK_MATCH.trx_currency_type);
6978 
6979   cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.corr_csl_amount = '||
6980 		CE_AUTO_BANK_MATCH.corr_csl_amount);
6981 
6982   cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance = '||
6983 		CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance ||
6984 		', CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance = '||
6985 		CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance);
6986 
6987   cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance = '||
6988 		CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance ||
6989 		', CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance = '||
6990 		CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance);
6991 
6992   cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.ba_ce_amount_tolerance = '||
6993 		CE_AUTO_BANK_MATCH.ba_ce_amount_tolerance ||
6994 		', CE_AUTO_BANK_MATCH.ba_ce_percent_tolerance = '||
6995 		CE_AUTO_BANK_MATCH.ba_ce_percent_tolerance);
6996 
6997  cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.BA_RECON_OI_AMOUNT_TOLERANCE = '||
6998 		CE_AUTO_BANK_MATCH.BA_RECON_OI_AMOUNT_TOLERANCE ||
6999 		', CE_AUTO_BANK_MATCH.BA_RECON_OI_PERCENT_TOLERANCE = '||
7000 		CE_AUTO_BANK_MATCH.BA_RECON_OI_PERCENT_TOLERANCE);
7001 
7002   cep_standard.debug('DEBUG: CE_AUTO_BANK_MATCH.csl_clearing_trx_type = '||
7003 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type);
7004 
7005   CE_AUTO_BANK_MATCH.tolerance_amount := 0;
7006   IF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('REJECTED', 'STOP')
7007       OR (CE_AUTO_BANK_MATCH.csl_clearing_trx_type in ('ROI_LINE', 'XTR_LINE')
7008 	AND CE_AUTO_BANK_REC.G_open_interface_matching_code = 'D')) THEN
7009     CE_AUTO_BANK_MATCH.tolerance_amount := 0;
7010   ELSE
7011     --
7012     -- Amount tolerance
7013     -- bug 3676745 MO/BA uptake
7014     -- AP/AR transactions - get tolerance amount in the following order (per Amrita)
7015     -- 1) tolerances defined at the bank account level
7016     -- 2) tolerances defined at the system parameters level for the OU for which the transactions
7017     --   	are being reconciled
7018     -- 3) if none exist then the tolerance is zero.
7019     -- No tolerance for PAY, PAY_EFT, JE_LINE, STATEMENT transactions
7020     -- ROI_LINE -LE???
7021 
7022     -- bug 4914608 no more tolerance at system parameters level, always get tolerance at bank account level
7023     -- bug 4969806  tolerance amount is in Bank Account currency,
7024     --              do not need to convert tolerance amount
7025     IF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('PAYMENT')) THEN
7026       calc_amount_tolerance := CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance ;
7027     ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASH', 'MISC')) THEN
7028         calc_amount_tolerance := CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance;
7029     ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASHFLOW')) THEN
7030       calc_amount_tolerance := CE_AUTO_BANK_MATCH.ba_ce_amount_tolerance;
7031     ELSIF  (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('ROI_LINE')) THEN
7032       calc_amount_tolerance := CE_AUTO_BANK_MATCH.BA_RECON_OI_AMOUNT_TOLERANCE;
7033     ELSE
7034       calc_amount_tolerance := 0;
7035     END IF;
7036 
7037 
7038 /*
7039     IF (CE_AUTO_BANK_MATCH.trx_currency_type = 'BANK') THEN
7040       IF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('PAYMENT')) THEN
7041         IF (nvl(CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance,0) <> 0) THEN
7042 	  calc_amount_tolerance := convert_amount_tolerance(CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance);
7043         ELSE
7044 	  calc_amount_tolerance := 0;
7045         END IF;
7046       ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASH','MISC')) THEN
7047         IF (nvl(CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance,0) <> 0) THEN
7048 	  calc_amount_tolerance := convert_amount_tolerance(CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance);
7049         ELSE
7050 	  calc_amount_tolerance := 0;
7051         END IF;
7052       ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASHFLOW')) THEN --bug 4435028
7053         IF (nvl(CE_AUTO_BANK_MATCH.ba_ce_amount_tolerance,0) <> 0) THEN
7054 	  calc_amount_tolerance := convert_amount_tolerance(CE_AUTO_BANK_MATCH.ba_ce_amount_tolerance);
7055         ELSE
7056 	  calc_amount_tolerance := 0;
7057         END IF;
7058       ELSE -- (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('ROI_LINE')) THEN
7059         IF (NVL(CE_AUTO_BANK_MATCH.BA_RECON_OI_AMOUNT_TOLERANCE,0) <> 0) THEN
7060 	  calc_amount_tolerance :=
7061 	     convert_amount_tolerance(CE_AUTO_BANK_MATCH.BA_RECON_OI_AMOUNT_TOLERANCE);
7062         ELSE
7063 	  calc_amount_tolerance := 0;
7064         END IF;
7065       END IF;
7066 
7067     ELSIF (CE_AUTO_BANK_MATCH.trx_currency_type IN
7068 	('FUNCTIONAL','FOREIGN')) THEN
7069       IF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('PAYMENT')) THEN
7070         calc_amount_tolerance := CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance ;
7071       ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASH', 'MISC')) THEN
7072         calc_amount_tolerance := CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance;
7073       ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASHFLOW')) THEN
7074         calc_amount_tolerance := CE_AUTO_BANK_MATCH.ba_ce_amount_tolerance;
7075       ELSE -- (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('ROI_LINE')) THEN
7076         calc_amount_tolerance := CE_AUTO_BANK_MATCH.BA_RECON_OI_AMOUNT_TOLERANCE;
7077       END IF;
7078     END IF;
7079 */
7080 
7081     --
7082     -- Percent tolerance
7083     --
7084     if (CE_AUTO_BANK_MATCH.csl_match_correction_type IN
7085 	('REVERSAL', 'ADJUSTMENT')) then
7086       IF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('PAYMENT')) THEN
7087         calc_percent_tolerance := CE_AUTO_BANK_MATCH.corr_csl_amount *
7088 	  (CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance / 100);
7089       ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASH', 'MISC')) THEN
7090         calc_percent_tolerance := CE_AUTO_BANK_MATCH.corr_csl_amount *
7091 	  (CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100);
7092       ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASHFLOW')) THEN
7093         calc_percent_tolerance := CE_AUTO_BANK_MATCH.corr_csl_amount *
7094 	  (CE_AUTO_BANK_MATCH.ba_ce_percent_tolerance / 100);
7095       ELSE
7096         calc_percent_tolerance := CE_AUTO_BANK_MATCH.corr_csl_amount *
7097 	  (CE_AUTO_BANK_MATCH.BA_RECON_OI_PERCENT_TOLERANCE / 100);
7098       END IF;
7099     else
7100       IF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('PAYMENT')) THEN
7101         calc_percent_tolerance := CE_AUTO_BANK_MATCH.csl_amount *
7102 	  (CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance / 100);
7103       ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASH', 'MISC')) THEN
7104         calc_percent_tolerance := CE_AUTO_BANK_MATCH.csl_amount *
7105 	  (CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance / 100);
7106       ELSIF (CE_AUTO_BANK_MATCH.csl_clearing_trx_type IN ('CASHFLOW')) THEN  --bug 4435028
7107         calc_percent_tolerance := CE_AUTO_BANK_MATCH.csl_amount *
7108 	  (CE_AUTO_BANK_MATCH.ba_ce_percent_tolerance / 100);
7109       ELSE
7110         calc_percent_tolerance := CE_AUTO_BANK_MATCH.csl_amount *
7111 	  (CE_AUTO_BANK_MATCH.BA_RECON_OI_PERCENT_TOLERANCE / 100);
7112       END IF;
7113     end if;
7114 
7115     cep_standard.debug('%calc_amount_tolerance: '||calc_amount_tolerance);
7116     cep_standard.debug('%calc_percent_tolerance: '||calc_percent_tolerance);
7117 
7118     if (calc_percent_tolerance < 0) then
7119       calc_percent_tolerance := calc_percent_tolerance * -1;
7120     end if;
7121     --
7122     -- Comparison
7123     --
7124     cep_standard.debug('calc_amount_tolerance: '||calc_amount_tolerance);
7125     cep_standard.debug('calc_percent_tolerance: '||calc_percent_tolerance);
7126     IF (calc_amount_tolerance = 0) THEN
7127       CE_AUTO_BANK_MATCH.tolerance_amount := calc_percent_tolerance;
7128     ELSIF (calc_percent_tolerance = 0) THEN
7129       CE_AUTO_BANK_MATCH.tolerance_amount := calc_amount_tolerance;
7130     ELSE
7131       IF (calc_percent_tolerance > calc_amount_tolerance) THEN
7132 	CE_AUTO_BANK_MATCH.tolerance_amount := calc_amount_tolerance;
7133       ELSE
7134 	CE_AUTO_BANK_MATCH.tolerance_amount := calc_percent_tolerance;
7135       END IF;
7136     END IF;
7137   END IF;
7138   cep_standard.debug('<<CE_AUTO_BANK_MATCH.calc_actual_tolerance');
7139 EXCEPTION
7140   WHEN OTHERS THEN
7141     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.calc_actual_tolerance' );
7142     RAISE;
7143 END calc_actual_tolerance;
7144 
7145 /* ---------------------------------------------------------------------
7146 |  PRIVATE FUNCTION							|
7147 |	convert_amount_tolerance					|
7148 |									|
7149 |  DESCRIPTION								|
7150 |	If the bank account currency is not the same as the functional	|
7151 |	currency, convert the tolerance amount into the bank currency.	|
7152 |									|
7153 |  CALLED BY								|
7154 |	calc_actual_tolerance						|
7155  --------------------------------------------------------------------- */
7156 FUNCTION convert_amount_tolerance (amount_to_convert NUMBER)  RETURN NUMBER IS
7157   precision		NUMBER;
7158   ext_precision		NUMBER;
7159   min_acct_unit		NUMBER;
7160   acctd_amount		NUMBER;
7161   rounded_amount	NUMBER;
7162 BEGIN
7163   cep_standard.debug('>>CE_AUTO_BANK_MATCH.convert_amount_tolerance');
7164 
7165   IF (CE_AUTO_BANK_MATCH.csl_exchange_rate_type <> 'User') THEN
7166 
7167     BEGIN
7168     --bug 4452153 exchanged the currency code parameters
7169       acctd_amount := gl_currency_api.convert_amount(
7170 		CE_AUTO_BANK_REC.G_functional_currency,
7171 		CE_AUTO_BANK_MATCH.csl_currency_code,
7172 		nvl(CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
7173 		    CE_AUTO_BANK_MATCH.csl_trx_date),
7174 		CE_AUTO_BANK_MATCH.csl_exchange_rate_type,
7175 		amount_to_convert);
7176     EXCEPTION
7177       WHEN OTHERS THEN
7178 	cep_standard.debug('EXCEPTION: Could not convert amount');
7179 	acctd_amount := NULL;
7180     END;
7181 
7182     rounded_amount := acctd_amount;
7183     cep_standard.debug('convert_amount_tolerance: rounded_amount: '||
7184 	acctd_amount);
7185 
7186   ELSE
7187 
7188     acctd_amount := amount_to_convert / CE_AUTO_BANK_MATCH.csl_exchange_rate;
7189     fnd_currency.get_info(CE_AUTO_BANK_MATCH.aba_bank_currency, precision,
7190 	ext_precision, min_acct_unit);
7191     IF min_acct_unit IS NOT NULL THEN
7192       rounded_amount := round(acctd_amount/min_acct_unit,0) * min_acct_unit;
7193     ELSE
7194       rounded_amount := round(acctd_amount,precision);
7195     END IF;
7196 
7197   END IF;
7198 
7199   cep_standard.debug('<<CE_AUTO_BANK_MATCH.convert_amount_tolerance');
7200   RETURN(rounded_amount);
7201 
7202 EXCEPTION
7203   WHEN OTHERS THEN
7204     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.convert_amount_tolerance');
7205     RAISE;
7206 END convert_amount_tolerance;
7207 
7208 /* ---------------------------------------------------------------------
7209 |  PRIVATE FUNCTION							|
7210 |	validate_payment_method						|
7211 |									|
7212 |  DESCRIPTION								|
7213 |	To create a miscellaneous transaction, a valid payment method	|
7214 |	must be provided by the user.  Payment methods are valid for	|
7215 |	bank accounts.							|
7216 |									|
7217 |  CALLED BY								|
7218 |	match_engine, trx_validation, create_misc_trx
7219 |									|
7220 |  RETURNS								|
7221 |	valid_method		TRUE / FALSE				|
7222  --------------------------------------------------------------------- */
7223 FUNCTION validate_payment_method RETURN BOOLEAN IS
7224 BEGIN
7225   cep_standard.debug('>>CE_AUTO_BANK_MATCH.validate_payment_method_id');
7226   cep_standard.debug('CE_AUTO_BANK_MATCH.csl_receipt_method_id '|| CE_AUTO_BANK_MATCH.csl_receipt_method_id);
7227   cep_standard.debug('CE_AUTO_BANK_MATCH.trx_org_id '|| CE_AUTO_BANK_MATCH.trx_org_id);
7228 
7229   SELECT arm.name
7230   INTO   CE_AUTO_BANK_REC.G_payment_method_name
7231   FROM   ar_receipt_method_accounts arma,
7232 	 ar_receipt_methods arm
7233   WHERE  arm.receipt_method_id = arma.receipt_method_id
7234   --AND    arma.REMIT_BANK_ACCT_USE_ID = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
7235   AND    arma.REMIT_BANK_ACCT_USE_ID = nvl(CE_AUTO_BANK_MATCH.trx_bank_acct_use_id, arma.REMIT_BANK_ACCT_USE_ID)
7236   --AND    arma.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
7237   --AND	 arma.org_id = CE_AUTO_BANK_MATCH.bau_org_id
7238   AND	 arma.org_id = nvl(CE_AUTO_BANK_MATCH.trx_org_id,  nvl(CE_AUTO_BANK_REC.G_org_id, arma.org_id))
7239   --AND    arm.receipt_method_id = nvl(CE_AUTO_BANK_REC.G_payment_method_id,CE_AUTO_BANK_MATCH.csl_receipt_method_id)
7240   AND    arm.receipt_method_id = nvl(CE_AUTO_BANK_MATCH.csl_receipt_method_id, CE_AUTO_BANK_REC.G_payment_method_id)
7241   AND    CE_AUTO_BANK_MATCH.csl_trx_date between nvl(arm.start_date,CE_AUTO_BANK_MATCH.csl_trx_date)
7242   AND    nvl(arm.end_date,CE_AUTO_BANK_MATCH.csl_trx_date)
7243   and exists (select 1 from ce_bank_acct_uses_gt_v bau
7244 		where bau.bank_acct_use_id = arma.REMIT_BANK_ACCT_USE_ID
7245 		and bau.bank_account_id =CE_AUTO_BANK_MATCH.csh_bank_account_id
7246 		and bau.AR_USE_ENABLE_FLAG = 'Y' );
7247   cep_standard.debug('<<CE_AUTO_BANK_MATCH.validate_payment_method_id');
7248   RETURN (TRUE);
7249 EXCEPTION
7250   WHEN NO_DATA_FOUND THEN
7251     cep_standard.debug('<<CE_AUTO_BANK_MATCH.Invalid payment method');
7252     RETURN (FALSE);
7253   WHEN TOO_MANY_ROWS THEN
7254     cep_standard.debug('<<CE_AUTO_BANK_MATCH.too many payment method for this account');
7255     RETURN (FALSE);
7256   WHEN OTHERS THEN
7257     cep_standard.debug('EXCEPTION: CE_AUTO_BANK_MATCH.validate_payment_method');
7258     RAISE;
7259 END validate_payment_method;
7260 
7261 /* ----------------------------------------------------------------------
7262 |  PUBLIC PROCEDURE                                                     |
7263 |       get_tax_id                                                      |
7264 |                                                                       |
7265 |  DESCRIPTION                                                          |
7266 |       fetches the tax id depending on the statement line type and     |
7267 |       transaction date                                                |
7268 |  CALL BY
7269 |       match_engine, create_misc_trx
7270  --------------------------------------------------------------------- */
7271 /*FUNCTION  get_vat_tax_id RETURN NUMBER IS */
7272 PROCEDURE get_vat_tax_id (X_pass_mode   VARCHAR2,
7273 			  l_vat_tax_id OUT NOCOPY NUMBER,
7274 			  X_tax_rate OUT NOCOPY NUMBER) IS
7275 
7276 --  l_vat_tax_id	NUMBER;
7277   y_dr_vat_tax_code       AR_RECEIVABLES_TRX.liability_tax_code%type;
7278   y_cr_vat_tax_code       AR_RECEIVABLES_TRX.asset_tax_code%type;
7279 
7280  -- bug 5733971
7281       l_return_status   VARCHAR2(50);
7282       l_msg_count       NUMBER;
7283       l_msg_data        VARCHAR2(1024);
7284       l_eff_date        date ;
7285       l_le_id      NUMBER;
7286 
7287 BEGIN
7288   cep_standard.debug( '>>CE_AUTO_BANK_MATCH.get_vat_tax_id' );
7289   cep_standard.debug( 'CE_AUTO_BANK_MATCH.csl_receivables_trx_id= '|| CE_AUTO_BANK_MATCH.csl_receivables_trx_id||
7290 			',CE_AUTO_BANK_MATCH.trx_org_id='||CE_AUTO_BANK_MATCH.trx_org_id  );
7291   if (X_pass_mode = 'AUTO_TRX') then
7292     SELECT ar.liability_tax_code, ar.asset_tax_code
7293     INTO   y_dr_vat_tax_code, y_cr_vat_tax_code
7294     FROM   ar_receivables_trx  ar
7295     WHERE  ar.receivables_trx_id = CE_AUTO_BANK_MATCH.csl_receivables_trx_id
7296     AND	   ar.org_id = nvl(CE_AUTO_BANK_MATCH.trx_org_id,CE_AUTO_BANK_REC.G_org_id) ; --CE_AUTO_BANK_MATCH.bau_org_id;
7297   else
7298     y_dr_vat_tax_code := CE_AUTO_BANK_REC.G_dr_vat_tax_code;
7299     y_cr_vat_tax_code := CE_AUTO_BANK_REC.G_cr_vat_tax_code;
7300   end if;
7301 
7302 
7303  -- bug 5733971
7304   begin
7305 
7306     select  LEGAL_ENTITY_ID
7307     into     l_le_id
7308     from XLE_FP_OU_LEDGER_V
7309     where OPERATING_UNIT_ID =nvl(CE_AUTO_BANK_MATCH.trx_org_id,CE_AUTO_BANK_REC.G_org_id) ;
7310   exception
7311     WHEN OTHERS THEN
7312     l_le_id := nvl(CE_AUTO_BANK_MATCH.trx_org_id,CE_AUTO_BANK_REC.G_org_id) ;
7313   end;
7314 
7315         zx_api_pub.set_tax_security_context(
7316             p_api_version      => 1.0,
7317             p_init_msg_list    => 'T',
7318             p_commit           => 'F',
7319             p_validation_level => NULL,
7320             x_return_status    => l_return_status,
7321             x_msg_count        => l_msg_count,
7322             x_msg_data         => l_msg_data,
7323             p_internal_org_id  => nvl(CE_AUTO_BANK_MATCH.trx_org_id, CE_AUTO_BANK_REC.G_org_id), --:org_id,
7324             p_legal_entity_id  =>  l_le_id, --:org_id,
7325             p_transaction_date => sysdate,
7326             p_related_doc_date => NULL,
7327             p_adjusted_doc_date=> NULL,
7328             x_effective_date   => l_eff_date);
7329 
7330 
7331 
7332   IF (CE_AUTO_BANK_MATCH.csl_trx_type IN ('MISC_DEBIT','DEBIT','STOP')) THEN
7333     SELECT ar.vat_tax_id, ar.tax_rate
7334     INTO   l_vat_tax_id, X_tax_rate
7335     FROM   ce_misc_tax_code_v ar --ar_vat_tax ar
7336     WHERE  ar.tax_code = y_dr_vat_tax_code
7337     AND	   ar.org_id = nvl(CE_AUTO_BANK_MATCH.trx_org_id, CE_AUTO_BANK_REC.G_org_id)
7338     AND    to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
7339 	   between to_char(ar.start_date,'YYYY/MM/DD')
7340 	   and NVL(to_char(ar.end_date,'YYYY/MM/DD'),
7341 		 to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD'));
7342   ELSE
7343     SELECT ar.vat_tax_id, ar.tax_rate
7344     INTO   l_vat_tax_id, X_tax_rate
7345     FROM    ce_misc_tax_code_v ar --ar_vat_tax ar
7346     WHERE  tax_code = y_cr_vat_tax_code
7347     AND	   ar.org_id = nvl(CE_AUTO_BANK_MATCH.trx_org_id,CE_AUTO_BANK_REC.G_org_id)
7348     AND    to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD')
7349 	   between to_char(ar.start_date,'YYYY/MM/DD')
7350 	   and NVL(to_char(ar.end_date,'YYYY/MM/DD'),
7351   	  to_char(CE_AUTO_BANK_MATCH.csl_trx_date,'YYYY/MM/DD'));
7352   END IF;
7353   cep_standard.debug('>>get_vat_tax_id.l_vat_tax_id:  '||TO_CHAR(l_vat_tax_id));
7354   cep_standard.debug('>>get_vat_tax_id.X_tax_rate:  '||TO_CHAR(X_tax_rate));
7355   cep_standard.debug( '<<CE_AUTO_BANK_MATCH.get_vat_tax_id' );
7356 --  RETURN l_vat_tax_id;
7357 EXCEPTION
7358   WHEN OTHERS THEN
7359   return;
7360 END get_vat_tax_id;
7361 
7362 /* ----------------------------------------------------------------------
7363 |  PUBLIC PROCEDURE                                                     |
7364 |       set_acct_type
7365 |                                                                       |
7366 |  DESCRIPTION                                                          |
7367 |       set  type of bank account
7368 |
7369 |  CALL BY
7370 |       match_process
7371  --------------------------------------------------------------------- */
7372 
7373 PROCEDURE set_acct_type(x_bank_account_id number) IS
7374     x_ap_count	NUMBER;
7375     x_ar_count	NUMBER;
7376     x_xtr_count	NUMBER;
7377     x_pay_count	NUMBER;
7378     x_pay_only_count	NUMBER;
7379     x_acct_uses_count	NUMBER;
7380     x_ou_exists_in_bau	NUMBER;
7381   BEGIN
7382   cep_standard.debug( '>>CE_AUTO_BANK_MATCH.set_acct_type x_bank_account_id ' ||x_bank_account_id );
7383 
7384     IF (x_bank_account_id is not null) THEN
7385 
7386    -- IS AP ACCOUNT?
7387      Select count(*)
7388      into x_ap_count
7389      from ce_bank_acct_uses_all bau, CE_SECURITY_PROFILES_GT OU
7390      where AP_USE_ENABLE_FLAG = 'Y'
7391      and sysdate <= nvl(end_date,sysdate)
7392      and BANK_ACCOUNT_ID = x_bank_account_id
7393      and BAU.ORG_ID = OU.ORGANIZATION_ID
7394      AND OU.ORGANIZATION_TYPE = 'OPERATING_UNIT';
7395 
7396 
7397      IF (x_ap_count > 0) THEN
7398        CE_AUTO_BANK_MATCH.BAU_AP_USE_ENABLE_FLAG := 'Y';
7399      ELSE
7400        CE_AUTO_BANK_MATCH.BAU_AP_USE_ENABLE_FLAG := 'N';
7401      END IF;
7402 
7403    -- IS AR ACCOUNT?
7404      Select count(*)
7405      into x_ar_count
7406      from ce_bank_acct_uses_all bau, CE_SECURITY_PROFILES_GT OU
7407      where AR_USE_ENABLE_FLAG = 'Y'
7408      and sysdate <= nvl(end_date,sysdate)
7409      and BANK_ACCOUNT_ID = x_bank_account_id
7410      and BAU.ORG_ID = OU.ORGANIZATION_ID
7411      AND OU.ORGANIZATION_TYPE = 'OPERATING_UNIT';
7412 
7413      IF (x_ar_count > 0) THEN
7414        CE_AUTO_BANK_MATCH.BAU_AR_USE_ENABLE_FLAG := 'Y';
7415      ELSE
7416        CE_AUTO_BANK_MATCH.BAU_AR_USE_ENABLE_FLAG := 'N';
7417      END IF;
7418 
7419    -- IS xtr ACCOUNT?
7420      Select count(*)
7421      into x_xtr_count
7422      from ce_bank_acct_uses_all bau, CE_SECURITY_PROFILES_GT OU
7423      where XTR_USE_ENABLE_FLAG = 'Y'
7424      and sysdate <= nvl(end_date,sysdate)
7425      and BANK_ACCOUNT_ID = x_bank_account_id
7426      and BAU.LEGAL_ENTITY_ID = OU.ORGANIZATION_ID   --BUG 5122576
7427      AND OU.ORGANIZATION_TYPE = 'LEGAL_ENTITY';
7428 
7429      IF (x_xtr_count > 0) THEN
7430        CE_AUTO_BANK_MATCH.BAU_XTR_USE_ENABLE_FLAG := 'Y';
7431      ELSE
7432        CE_AUTO_BANK_MATCH.BAU_XTR_USE_ENABLE_FLAG := 'N';
7433      END IF;
7434 
7435    -- IS pay ACCOUNT?
7436      Select count(*)
7437      into x_pay_count
7438      from ce_bank_acct_uses_all bau, CE_SECURITY_PROFILES_GT OU
7439      where PAY_USE_ENABLE_FLAG = 'Y'
7440      and sysdate <= nvl(end_date,sysdate)
7441      and BANK_ACCOUNT_ID = x_bank_account_id
7442      and BAU.ORG_ID = OU.ORGANIZATION_ID
7443      AND OU.ORGANIZATION_TYPE = 'BUSINESS_GROUP';
7444 
7445      IF (x_pay_count > 0) THEN
7446        CE_AUTO_BANK_MATCH.BAU_PAY_USE_ENABLE_FLAG := 'Y';
7447      ELSE
7448        CE_AUTO_BANK_MATCH.BAU_PAY_USE_ENABLE_FLAG := 'N';
7449      END IF;
7450    END IF;  -- (x_bank_account_id is not null)
7451 
7452   cep_standard.debug('CE_AUTO_BANK_MATCH.bau_ar_use_enable_flag ' ||CE_AUTO_BANK_MATCH.bau_ar_use_enable_flag);
7453   cep_standard.debug('CE_AUTO_BANK_MATCH.bau_ap_use_enable_flag ' ||CE_AUTO_BANK_MATCH.bau_ap_use_enable_flag);
7454   cep_standard.debug('CE_AUTO_BANK_MATCH.bau_xtr_use_enable_flag ' ||CE_AUTO_BANK_MATCH.bau_xtr_use_enable_flag);
7455   cep_standard.debug('CE_AUTO_BANK_MATCH.bau_pay_use_enable_flag ' ||CE_AUTO_BANK_MATCH.bau_pay_use_enable_flag);
7456 
7457   cep_standard.debug( '<<CE_AUTO_BANK_MATCH.set_acct_type ' );
7458 
7459     EXCEPTION
7460     WHEN OTHERS THEN
7461 	  cep_standard.debug('EXCEPTION: ce_auto_bank_match.set_acct_type');
7462 
7463       RAISE;
7464   END set_acct_type;
7465 
7466 /* ---------------------------------------------------------------------|
7467 |  PRIVATE PROCEDURE                                	                |
7468 |       match_stmt_line_JE						|
7469 |  DESCRIPTION								|
7470 |	 For the Journal Entry Creation project.			|
7471 |	 Bug 3951431							|
7472 |	 This procedure mathes and reconcils the stmt line that has     |
7473 |	 created a JE. The matching is done on the following fields     |
7474 |	 1) JE actual flag ='A'						|
7475 |	 2) JE status = 'P'						|
7476 |	 3) JE ccid = bank cash account ccid				|
7477 |	 4) JE effective date = sl.accounting_date			|
7478 |	 5) JE source ='Other'						|
7479 |	 6) JE currency = sl (or bank) currency				|
7480 |	 7) JE amount = sl.amount (or original amount)			|
7481 |                                                                       |
7482 |        bug 4435028   8/10/05                                          |
7483 |        - Match JEC/ZBA by cashflow_id  only                           |
7484 |                                                                       |
7485 |  HISTORY                                                              |
7486 |       16-SEP-2004        Shaik Vali		Created
7487 |       15-APR-2205        BHCHUNG              SLA change
7488 |       10-AUG-2005	   lkwan       bug 4435028 -
7489 |                                      - Match JEC/ZBA by cashflow_id  only
7490  --------------------------------------------------------------------- */
7491   PROCEDURE match_stmt_line_JE IS
7492   no_of_matches		NUMBER;
7493 	l_je_header_id GL_JE_HEADERS.je_header_id%TYPE := null;
7494 	l_je_line_num  GL_JE_LINES.je_line_num%TYPE;
7495 	l_trx_currency_type VARCHAR2(100);
7496 	l_sob_currency_code FND_CURRENCIES.CURRENCY_CODE%TYPE;
7497 	l_je_amount GL_JE_LINES.accounted_dr%TYPE;
7498 	l_sl_amount CE_STATEMENT_LINES.amount%TYPE;
7499 	l_je_entered_dr GL_JE_LINES.entered_dr%TYPE;
7500 	l_je_entered_cr GL_JE_LINES.entered_cr%TYPE;
7501 	l_je_currency_code FND_CURRENCIES.CURRENCY_CODE%TYPE;
7502 	l_sl_currency_code FND_CURRENCIES.CURRENCY_CODE%TYPE;
7503 	d_statement_header_id CE_STATEMENT_HEADERS.statement_header_id%TYPE;
7504 	P_CURRENCY_CODE  VARCHAR2(15);
7505 	P_STATUS	VARCHAR2(30);
7506 	P_AMOUNT	NUMBER;
7507   BEGIN
7508   cep_standard.debug( '>>CE_AUTO_BANK_MATCH.match_stmt_line_JE ' );
7509 
7510 -- bug 4435028 - get JEC lines from ce_cashflows
7511 
7512 /*
7513 	SELECT
7514 		JEL.JE_HEADER_ID,
7515 		JEL.JE_LINE_NUM,
7516 		SOB.CURRENCY_CODE,
7517 		JEL.ENTERED_DR,
7518 		JEL.ENTERED_CR,
7519 		JEH.CURRENCY_CODE
7520 	INTO
7521 		l_je_header_id,
7522 		l_je_line_num,
7523 		l_sob_currency_code,
7524 		l_je_entered_dr,
7525 		l_je_entered_cr,
7526 		l_je_currency_code
7527 	FROM
7528 		GL_JE_LINES JEL,
7529 		GL_SETS_OF_BOOKS SOB,
7530 		CE_SYSTEM_PARAMETERS SYS,
7531 		GL_JE_HEADERS JEH,
7532 		GL_PERIOD_STATUSES GPS,
7533 		XLA_DISTRIBUTION_LINKS XLA,
7534 		XLA_AE_LINES XLL
7535 	WHERE
7536 	    JEH.JE_HEADER_ID = JEL.JE_HEADER_ID
7537 	    AND JEL.CODE_COMBINATION_ID = CE_AUTO_BANK_MATCH.aba_asset_code_combination_id
7538 	    AND JEL.PERIOD_NAME = GPS.PERIOD_NAME
7539 	    AND GPS.APPLICATION_ID = 101
7540 	    AND GPS.SET_OF_BOOKS_ID = SOB.SET_OF_BOOKS_ID
7541 	    AND SOB.SET_OF_BOOKS_ID = SYS.SET_OF_BOOKS_ID
7542 --JEC	    AND JEL.SET_OF_BOOKS_ID = SYS.SET_OF_BOOKS_ID
7543 	    AND JEL.EFFECTIVE_DATE >= SYS.CASHBOOK_BEGIN_DATE
7544 	    AND JEH.JE_SOURCE ='Other'
7545 	    AND JEL.STATUS = 'P'
7546 	    AND JEH.ACTUAL_FLAG = 'A'
7547 	    AND JEL.EFFECTIVE_DATE = CE_AUTO_BANK_MATCH.csl_accounting_date
7548 	    AND JEH.CURRENCY_CODE = NVL(CE_AUTO_BANK_MATCH.csl_currency_code,
7549 								CE_AUTO_BANK_MATCH.aba_bank_currency)
7550 	    AND XLL.AE_LINE_NUM = XLA.AE_LINE_NUM
7551 	    AND XLL.AE_HEADER_ID = XLA.AE_HEADER_ID
7552 	    AND XLA.APPLICATION_ID = 260
7553 	    AND XLA.EVENT_ID = CE_AUTO_BANK_MATCH.csl_event_id
7554 	    AND JEL.GL_SL_LINK_ID = XLL.GL_SL_LINK_ID
7555 	    AND JEL.GL_SL_LINK_TABLE = XLL.GL_SL_LINK_TABLE
7556 	    AND NOT EXISTS
7557 	   (SELECT NULL
7558 	    FROM
7559 	       CE_STATEMENT_RECONCILS_ALL CRE2,
7560 	   	CE_SYSTEM_PARAMETERS SYS2
7561 	    WHERE JEL.JE_HEADER_ID = CRE2.JE_HEADER_ID
7562 		AND JEL.JE_LINE_NUM = CRE2.REFERENCE_ID
7563 		AND CRE2.STATUS_FLAG = 'M'
7564 		AND NVL(CRE2.CURRENT_RECORD_FLAG,'Y') = 'Y');
7565 --JEC		AND SYS2.SET_OF_BOOKS_ID = JEL.SET_OF_BOOKS_ID);
7566 
7567 */
7568 
7569     SELECT 	catv.trx_id,
7570 		catv.cash_receipt_id,
7571 		catv.row_id,
7572 		catv.trx_date,
7573 		catv.currency_code,
7574 		catv.bank_account_amount,
7575 		catv.base_amount,
7576 		catv.status,
7577 		nvl(catv.amount_cleared,0),
7578 		'CASHFLOW',
7579 		1,
7580 		catv.trx_currency_type,
7581 		catv.amount,
7582 		catv.clearing_trx_type,
7583 		catv.exchange_rate,
7584 		catv.exchange_rate_date,
7585 		catv.exchange_rate_type,
7586 		catv.legal_entity_id,
7587 		catv.seq_id
7588     INTO        CE_AUTO_BANK_MATCH.trx_id,
7589 		CE_AUTO_BANK_MATCH.trx_cash_receipt_id,
7590 		CE_AUTO_BANK_MATCH.trx_rowid,
7591 		CE_AUTO_BANK_MATCH.trx_date,
7592 		CE_AUTO_BANK_MATCH.trx_currency_code,
7593 		CE_AUTO_BANK_MATCH.trx_amount,
7594 		CE_AUTO_BANK_MATCH.trx_base_amount,
7595 		CE_AUTO_BANK_MATCH.trx_status,
7596 		CE_AUTO_BANK_MATCH.trx_cleared_amount,
7597 		CE_AUTO_BANK_MATCH.csl_match_type,
7598 		no_of_matches,
7599 		CE_AUTO_BANK_MATCH.trx_currency_type,
7600 		CE_AUTO_BANK_MATCH.trx_curr_amount,
7601 		CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
7602 		CE_AUTO_BANK_MATCH.trx_exchange_rate,
7603 		CE_AUTO_BANK_MATCH.trx_exchange_rate_date,
7604 		CE_AUTO_BANK_MATCH.trx_exchange_rate_type,
7605 		CE_AUTO_BANK_MATCH.trx_legal_entity_id,
7606 		CE_AUTO_BANK_MATCH.gt_seq_id
7607     --FROM        ce_260_cf_transactions_v catv
7608     FROM        ce_available_transactions_tmp catv
7609     WHERE       catv.bank_account_id = CE_AUTO_BANK_MATCH.csh_bank_account_id
7610      AND 	catv.TRX_ID = CE_AUTO_BANK_MATCH.csl_cashflow_id
7611        AND	catv.legal_entity_id = nvl(CE_AUTO_BANK_REC.G_legal_entity_id,catv.legal_entity_id)
7612      AND	catv.application_id = 261
7613      AND	NVL(catv.reconciled_status_flag, 'N') = 'N';
7614     --AND		catv.bank_account_amount = CE_AUTO_BANK_MATCH.csl_amount
7615     --AND		catv.ce_bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
7616     --AND		catv.trx_number = CE_AUTO_BANK_MATCH.csl_bank_trx_number;
7617 
7618   cep_standard.debug( 'no_of_matches '||no_of_matches );
7619 
7620 	--
7621 	-- Currency and amount should be matched based on
7622 	-- whether the stmt line is DOMESTIC, FOREIGN or
7623 	-- INTERNATIONAL
7624 	--
7625 	IF (NVL(CE_AUTO_BANK_MATCH.CSL_CURRENCY_CODE, CE_AUTO_BANK_MATCH.ABA_BANK_CURRENCY)
7626 		 = l_SOB_CURRENCY_CODE) THEN
7627 		l_trx_currency_type := 'FUNCTIONAL';
7628 		l_sl_currency_code := l_SOB_CURRENCY_CODE;
7629 		l_sl_amount := CE_AUTO_BANK_MATCH.csl_amount;
7630 	ELSIF (NVL(CE_AUTO_BANK_MATCH.CSL_CURRENCY_CODE, CE_AUTO_BANK_MATCH.ABA_BANK_CURRENCY)
7631 		 = CE_AUTO_BANK_MATCH.aba_bank_currency) THEN
7632 		l_trx_currency_type := 'BANK';
7633 		l_sl_currency_code := CE_AUTO_BANK_MATCH.aba_bank_currency;
7634 		l_sl_amount := CE_AUTO_BANK_MATCH.csl_amount;
7635 	ELSE
7636 		l_trx_currency_type := 'FOREIGN';
7637 		l_sl_currency_code := CE_AUTO_BANK_MATCH.csl_currency_code;
7638 		-- bug 4953625
7639 		-- CE_AUTO_BANK_MATCH.csl_original_amount is the trx currency
7640 		-- CE_AUTO_BANK_MATCH.csl_amount is the bank account currency
7641 		--l_sl_amount := CE_AUTO_BANK_MATCH.csl_original_amount;
7642 		l_sl_amount := CE_AUTO_BANK_MATCH.csl_amount;
7643 	END IF;
7644 	--
7645 	-- Match should be on the balancing JE, which will have reverse amounts
7646 	--
7647 	/*
7648 	IF (CE_AUTO_BANK_MATCH.csl_trx_type in ('DEBIT','MISC_DEBIT','NSF')) THEN
7649 	   l_je_amount := l_je_entered_cr;
7650 	ELSE
7651 	   l_je_amount := l_je_entered_dr;
7652 	END IF;
7653 	*/
7654 
7655   cep_standard.debug( 'CE_AUTO_BANK_MATCH.trx_currency_code '||CE_AUTO_BANK_MATCH.trx_currency_code
7656 			|| ', l_sl_currency_code '|| l_sl_currency_code
7657 			|| ', CE_AUTO_BANK_MATCH.trx_amount '|| CE_AUTO_BANK_MATCH.trx_amount
7658 			|| ', l_sl_amount ' ||l_sl_amount);
7659 
7660 	--IF(l_je_currency_code = l_sl_currency_code AND l_je_amount = l_sl_amount)
7661 	-- bug 4953625 match trx bank acct cur amt with stmt ln bank acct cur amt
7662 	IF(CE_AUTO_BANK_MATCH.trx_currency_code = l_sl_currency_code AND
7663 		CE_AUTO_BANK_MATCH.trx_amount = l_sl_amount) 	THEN
7664 
7665  	  --CE_AUTO_BANK_MATCH.csl_reconcile_flag := CE_AUTO_BANK_MATCH.csl_match_type; --'JE';
7666 	  --CE_AUTO_BANK_MATCH.csl_reconcile_flag := 'CE';
7667 	  --CE_AUTO_BANK_MATCH.trx_id := CE_AUTO_BANK_MATCH.csl_cashflow_id; --l_je_line_num;
7668 
7669 	  CE_AUTO_BANK_CLEAR.reconcile_trx(
7670 		passin_mode 		=> 'AUTO',
7671 		tx_type 		=> CE_AUTO_BANK_MATCH.csl_match_type, -- CASHFLOW --'JE_LINE',
7672 		trx_id			=> CE_AUTO_BANK_MATCH.TRX_id, --l_je_line_num,
7673 		trx_status		=> CE_AUTO_BANK_MATCH.trx_status, --'P',
7674 		receipt_type		=> CE_AUTO_BANK_MATCH.csl_match_type,-- CASHFLOW - --'JE',
7675 		exchange_rate_type  	=> CE_AUTO_BANK_MATCH.csl_exchange_rate_type,
7676 		exchange_date	    	=> CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
7677 		exchange_rate		=> CE_AUTO_BANK_MATCH.csl_exchange_rate,
7678 /*		amount_cleared		=> CE_AUTO_BANK_MATCH.calc_csl_amount,*/
7679 		amount_cleared		=> CE_AUTO_BANK_MATCH.trx_amount, --CE_AUTO_BANK_MATCH.csl_amount,
7680 		charges_amount		=> CE_AUTO_BANK_MATCH.trx_charges_amount,
7681 		errors_amount		=> CE_AUTO_BANK_MATCH.trx_errors_amount,
7682 		gl_date			=> CE_AUTO_BANK_REC.G_gl_date_original,
7683 		value_date		=> CE_AUTO_BANK_MATCH.csl_effective_date,
7684 		cleared_date		=> CE_AUTO_BANK_MATCH.csl_trx_date,
7685 		ar_cash_receipt_id	=> NULL, --l_je_header_id,
7686 		X_bank_currency	    	=> CE_AUTO_BANK_MATCH.aba_bank_currency,
7687 		X_statement_line_id	=> CE_AUTO_BANK_MATCH.csl_statement_line_id,
7688 		X_statement_line_type	=> CE_AUTO_BANK_MATCH.csl_line_trx_type,
7689 		reference_status	=> NULL,
7690 		trx_currency_type	=> l_trx_currency_type,
7691 	        X_currency_code     	=> NVL(CE_AUTO_BANK_MATCH.csl_currency_code,CE_AUTO_BANK_MATCH.aba_bank_currency),
7692 		auto_reconciled_flag 	=> 'Y',
7693 		X_statement_header_id	=> d_statement_header_id,
7694 		X_effective_date	=> CE_AUTO_BANK_MATCH.csl_effective_date,
7695 		X_float_handling_flag	=> CE_AUTO_BANK_REC.G_float_handling_flag,
7696 	        X_reversed_receipt_flag => CE_AUTO_BANK_MATCH.reversed_receipt_flag);
7697 
7698 	        CE_AUTO_BANK_CLEAR.update_line_status(CE_AUTO_BANK_MATCH.csl_statement_line_id,'RECONCILED');
7699 
7700 		-- update the reconciled_status_flag of the GT table, ce_available_transactions_tmp,
7701 		-- to 'Y'
7702 		update_gt_reconciled_status (CE_AUTO_BANK_MATCH.gt_seq_id, 'Y');
7703 
7704 	ELSE
7705   	  cep_standard.debug( 'currency or amount does not match' );
7706   	  CE_RECONCILIATION_ERRORS_PKG.delete_row(
7707  	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
7708 	    CE_AUTO_BANK_MATCH.csl_statement_line_id);
7709 
7710 	  CE_RECONCILIATION_ERRORS_PKG.insert_row(
7711 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,
7712 	    CE_AUTO_BANK_MATCH.csl_statement_line_id,'CE_CE_TRX_AMT_OR_CUR_NOT_MATCH');
7713 
7714 	END IF;
7715  cep_standard.debug( '<<CE_AUTO_BANK_MATCH.match_stmt_line_JE ' );
7716 
7717   EXCEPTION
7718   WHEN NO_DATA_FOUND THEN
7719   CE_RECONCILIATION_ERRORS_PKG.delete_row(
7720  	CE_AUTO_BANK_MATCH.csh_statement_header_id,
7721 	CE_AUTO_BANK_MATCH.csl_statement_line_id);
7722   CE_RECONCILIATION_ERRORS_PKG.insert_row(
7723 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
7724 	CE_AUTO_BANK_MATCH.csl_statement_line_id,
7725 	'CE_NO_CE_TRX_MATCH');
7726 
7727   WHEN TOO_MANY_ROWS THEN
7728   CE_RECONCILIATION_ERRORS_PKG.delete_row(
7729 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
7730 	CE_AUTO_BANK_MATCH.csl_statement_line_id);
7731   CE_RECONCILIATION_ERRORS_PKG.insert_row(
7732 	CE_AUTO_BANK_MATCH.csh_statement_header_id,
7733 	CE_AUTO_BANK_MATCH.csl_statement_line_id,
7734 	'CE_ABR_JEL_PARTIAL');
7735   END;
7736 
7737 /* ---------------------------------------------------------------------
7738 |  PUBLIC PROCEDURE                                                     |
7739 |       populate_available_gt                                           |
7740 |                                                                       |
7741 |  DESCRIPTION                                                          |
7742 |       populate ce_available_transactions_tmp for auto reconciliation  |
7743 |                                                                       |
7744 |  CALLED BY                                                            |
7745 |       match_process                                                   |
7746 |                                                                       |
7747 |  HISTORY                                                              |
7748 |       11-MAY-2006        Xin Wang     Created                         |
7749  --------------------------------------------------------------------- */
7750 PROCEDURE populate_available_gt (p_bank_account_id 	NUMBER) IS
7751    cursor r_trx_source(p_bank_account_id 	NUMBER) is
7752         SELECT 	trx_type,
7753 		trx_code,
7754 		decode(PAYROLL_PAYMENT_FORMAT_ID, null, NVL(reconcile_flag,'X'),
7755                         decode(reconcile_flag,'PAY', 'PAY_EFT', NVL(reconcile_flag,'X'))),
7756 		matching_against
7757 	FROM  	ce_transaction_codes
7758 	WHERE  	bank_account_id = p_bank_account_id;
7759    l_trx_type	VARCHAR2(30);
7760    l_trx_code	VARCHAR2(30);
7761    l_trx_source	VARCHAR2(20);
7762    l_matching_against	VARCHAR2(20);
7763    l_cf		NUMBER(15) := 0;
7764 BEGIN
7765   cep_standard.debug('>>CE_AUTO_BANK_MATCH.populate_available_gt');
7766 
7767   -- clean up the temp table
7768   delete ce_available_transactions_tmp;
7769 
7770   -- first check if there's any stmt line that has cashflow_id
7771   -- if so, populate from ce_260_cf_transactions_v,
7772   -- this is because in autoreconciliation, if a line has cashflow_id,
7773   -- before everything else, it'll match to cashflow transactions
7774 
7775   select count(1)
7776   into   l_cf
7777   from   ce_statement_lines      sl,
7778          ce_statement_headers    sh
7779   where  sl.statement_header_id = sh.statement_header_id
7780   and    sh.bank_account_id = p_bank_account_id
7781   and    sl.cashflow_id is not null;
7782 
7783   IF l_cf > 0 THEN  -- some line has cashflow_id
7784     IF CE_AUTO_BANK_MATCH.av_260_cf_inserted_flag = 'N' THEN
7785       cep_standard.debug('inserting data from ce_260_cf_transactions_v');
7786       insert into ce_available_transactions_tmp
7787 		(seq_id,
7788 		ROW_ID,
7789 		MULTI_SELECT,
7790 		BANK_ACCOUNT_ID,
7791 		BANK_ACCOUNT_NAME,
7792 		BANK_ACCOUNT_NUM,
7793 		BANK_NAME,
7794 		BANK_BRANCH_NAME,
7795 		TRX_ID,
7796 		TRX_TYPE,
7797 		TYPE_MEANING,
7798 		TRX_NUMBER,
7799 		CHECK_NUMBER,
7800 		CURRENCY_CODE,
7801 		AMOUNT,
7802 		BANK_ACCOUNT_AMOUNT,
7803 		AMOUNT_CLEARED,
7804 		GL_DATE,
7805 		STATUS_DSP,
7806 		STATUS,
7807 		TRX_DATE,
7808 		CLEARED_DATE,
7809 		MATURITY_DATE,
7810 		EXCHANGE_RATE_DATE,
7811 		EXCHANGE_RATE_TYPE,
7812 		USER_EXCHANGE_RATE_TYPE,
7813 		EXCHANGE_RATE,
7814 		BANK_CHARGES,
7815 		BANK_ERRORS,
7816 		BATCH_NAME,
7817 		BATCH_ID,
7818 		AGENT_NAME,
7819 		CUSTOMER_NAME,
7820 		PAYMENT_METHOD,
7821 		VENDOR_NAME,
7822 		CUSTOMER_ID,
7823 		SUPPLIER_ID,
7824 		REFERENCE_TYPE_DSP,
7825 		REFERENCE_TYPE,
7826 		REFERENCE_ID,
7827 		ACTUAL_AMOUNT_CLEARED,
7828 		CREATION_DATE,
7829 		CREATED_BY,
7830 		LAST_UPDATE_DATE,
7831 		LAST_UPDATED_BY,
7832 		REMITTANCE_NUMBER,
7833 		CASH_RECEIPT_ID,
7834 		APPLICATION_ID,
7835 		COUNT_CLEARED,
7836 		BANK_CURRENCY_CODE,
7837 		TRX_CURRENCY_TYPE,
7838 		CODE_COMBINATION_ID,
7839 		PERIOD_NAME,
7840 		JOURNAL_ENTRY_NAME,
7841 		DOCUMENT_NUMBER,
7842 		JOURNAL_ENTRY_LINE_NUMBER,
7843 		CLEARING_TRX_TYPE,
7844 		JOURNAL_CATEGORY,
7845 		BASE_AMOUNT,
7846 		RECEIPT_CLASS_ID,
7847 		RECEIPT_METHOD_ID,
7848 		RECEIPT_CLASS_NAME,
7849 		DEPOSIT_DATE,
7850 		VALUE_DATE,
7851 		REVERSED_RECEIPT_FLAG,
7852 		LEGAL_ENTITY_ID,
7853 		ORG_ID,
7854 		INVOICE_TEXT,
7855 		BANK_ACCOUNT_TEXT,
7856 		CUSTOMER_TEXT,
7857 		COUNTERPARTY,
7858 		TRXN_SUBTYPE,
7859 		CE_BANK_ACCT_USE_ID,
7860 		RECONCILED_STATUS_FLAG)
7861       select	ce_available_transactions_s.nextval,
7862 		ROW_ID,
7863                 MULTI_SELECT,
7864                 BANK_ACCOUNT_ID,
7865                 BANK_ACCOUNT_NAME,
7866                 BANK_ACCOUNT_NUM,
7867                 BANK_NAME,
7868                 BANK_BRANCH_NAME,
7869                 TRX_ID,
7870                 TRX_TYPE,
7871                 TYPE_MEANING,
7872                 TRX_NUMBER,
7873                 CHECK_NUMBER,
7874 		CURRENCY_CODE,
7875                 AMOUNT,
7876                 BANK_ACCOUNT_AMOUNT,
7877                 AMOUNT_CLEARED,
7878                 GL_DATE,
7879                 STATUS_DSP,
7880                 STATUS,
7881                 TRX_DATE,
7882                 CLEARED_DATE,
7883                 MATURITY_DATE,
7884                 EXCHANGE_RATE_DATE,
7885                 EXCHANGE_RATE_TYPE,
7886                 USER_EXCHANGE_RATE_TYPE,
7887                 EXCHANGE_RATE,
7888                 BANK_CHARGES,
7889                 BANK_ERRORS,
7890                 BATCH_NAME,
7891                 BATCH_ID,
7892                 AGENT_NAME,
7893                 CUSTOMER_NAME,
7894                 PAYMENT_METHOD,
7895 		VENDOR_NAME,
7896                 CUSTOMER_ID,
7897                 SUPPLIER_ID,
7898                 REFERENCE_TYPE_DSP,
7899                 REFERENCE_TYPE,
7900                 REFERENCE_ID,
7901                 ACTUAL_AMOUNT_CLEARED,
7902                 CREATION_DATE,
7903                 CREATED_BY,
7904                 LAST_UPDATE_DATE,
7905                 LAST_UPDATED_BY,
7906                 REMITTANCE_NUMBER,
7907                 CASH_RECEIPT_ID,
7908                 261,   --APPLICATION_ID,
7909                 COUNT_CLEARED,
7910                 BANK_CURRENCY_CODE,
7911                 TRX_CURRENCY_TYPE,
7912                 CODE_COMBINATION_ID,
7913                 PERIOD_NAME,
7914                 JOURNAL_ENTRY_NAME,
7915                 DOCUMENT_NUMBER,
7916                 JOURNAL_ENTRY_LINE_NUMBER,
7917 		CLEARING_TRX_TYPE,
7918                 JOURNAL_CATEGORY,
7919                 BASE_AMOUNT,
7920                 RECEIPT_CLASS_ID,
7921                 RECEIPT_METHOD_ID,
7922                 RECEIPT_CLASS_NAME,
7923                 DEPOSIT_DATE,
7924                 VALUE_DATE,
7925                 REVERSED_RECEIPT_FLAG,
7926                 LEGAL_ENTITY_ID,
7927                 ORG_ID,
7928 		INVOICE_TEXT,
7929                 BANK_ACCOUNT_TEXT,
7930                 CUSTOMER_TEXT,
7931                 COUNTERPARTY,
7932                 TRXN_SUBTYPE,
7933                 CE_BANK_ACCT_USE_ID,
7934 		'N'
7935       from 	ce_260_cf_transactions_v
7936       where     bank_account_id = p_bank_account_id;
7937 
7938       CE_AUTO_BANK_MATCH.av_260_cf_inserted_flag := 'Y';
7939      END IF;  --CE_AUTO_BANK_MATCH.av_260_cf_inserted_flag = 'N'
7940   END IF;  -- l_cf = 1
7941 
7942   OPEN r_trx_source (p_bank_account_id);
7943   LOOP
7944     FETCH r_trx_source INTO
7945       l_trx_type,
7946       l_trx_code,
7947       l_trx_source,
7948       l_matching_against;
7949     EXIT WHEN r_trx_source%NOTFOUND OR r_trx_source%NOTFOUND IS NULL;
7950 
7951     cep_standard.debug('bank_account_id = ' || p_bank_account_id);
7952     cep_standard.debug('l_trx_source = ' || l_trx_source ||
7953 			', l_trx_type = ' || l_trx_type ||
7954 			', l_trx_code = ' || l_trx_code ||
7955 			', l_matching_against = ' || l_matching_against);
7956     IF l_trx_source = 'AP' THEN
7957 
7958      IF CE_AUTO_BANK_MATCH.av_200_inserted_flag = 'N' THEN  -- AP data has not been inserted into the GT table
7959 
7960       cep_standard.debug('inserting data from ce_200_transactions_v');
7961 
7962       insert into ce_available_transactions_tmp
7963 		(seq_id,
7964 		ROW_ID,
7965 		MULTI_SELECT,
7966 		BANK_ACCOUNT_ID,
7967 		BANK_ACCOUNT_NAME,
7968 		BANK_ACCOUNT_NUM,
7969 		BANK_NAME,
7970 		BANK_BRANCH_NAME,
7971 		TRX_ID,
7972 		TRX_TYPE,
7973 		TYPE_MEANING,
7974 		TRX_NUMBER,
7975 		CHECK_NUMBER,
7976 		CURRENCY_CODE,
7977 		AMOUNT,
7978 		BANK_ACCOUNT_AMOUNT,
7979 		AMOUNT_CLEARED,
7980 		GL_DATE,
7981 		STATUS_DSP,
7982 		STATUS,
7983 		TRX_DATE,
7984 		CLEARED_DATE,
7985 		MATURITY_DATE,
7986 		EXCHANGE_RATE_DATE,
7987 		EXCHANGE_RATE_TYPE,
7988 		USER_EXCHANGE_RATE_TYPE,
7989 		EXCHANGE_RATE,
7990 		BANK_CHARGES,
7991 		BANK_ERRORS,
7992 		BATCH_NAME,
7993 		BATCH_ID,
7994 		AGENT_NAME,
7995 		CUSTOMER_NAME,
7996 		PAYMENT_METHOD,
7997 		VENDOR_NAME,
7998 		CUSTOMER_ID,
7999 		SUPPLIER_ID,
8000 		REFERENCE_TYPE_DSP,
8001 		REFERENCE_TYPE,
8002 		REFERENCE_ID,
8003 		ACTUAL_AMOUNT_CLEARED,
8004 		CREATION_DATE,
8005 		CREATED_BY,
8006 		LAST_UPDATE_DATE,
8007 		LAST_UPDATED_BY,
8008 		REMITTANCE_NUMBER,
8009 		CASH_RECEIPT_ID,
8010 		APPLICATION_ID,
8011 		COUNT_CLEARED,
8012 		BANK_CURRENCY_CODE,
8013 		TRX_CURRENCY_TYPE,
8014 		CODE_COMBINATION_ID,
8015 		PERIOD_NAME,
8016 		JOURNAL_ENTRY_NAME,
8017 		DOCUMENT_NUMBER,
8018 		JOURNAL_ENTRY_LINE_NUMBER,
8019 		CLEARING_TRX_TYPE,
8020 		JOURNAL_CATEGORY,
8021 		BASE_AMOUNT,
8022 		RECEIPT_CLASS_ID,
8023 		RECEIPT_METHOD_ID,
8024 		RECEIPT_CLASS_NAME,
8025 		DEPOSIT_DATE,
8026 		VALUE_DATE,
8027 		REVERSED_RECEIPT_FLAG,
8028 		LEGAL_ENTITY_ID,
8029 		ORG_ID,
8030 		CE_BANK_ACCT_USE_ID,
8031 		RECONCILED_STATUS_FLAG)
8032       select  	ce_available_transactions_s.nextval,
8033 		ROW_ID,
8034                 MULTI_SELECT,
8035                 BANK_ACCOUNT_ID,
8036                 BANK_ACCOUNT_NAME,
8037                 BANK_ACCOUNT_NUM,
8038                 BANK_NAME,
8039                 BANK_BRANCH_NAME,
8040                 TRX_ID,
8041                 TRX_TYPE,
8042                 TYPE_MEANING,
8043                 TRX_NUMBER,
8044                 CHECK_NUMBER,
8045 		CURRENCY_CODE,
8046                 AMOUNT,
8047                 BANK_ACCOUNT_AMOUNT,
8048                 AMOUNT_CLEARED,
8049                 GL_DATE,
8050                 STATUS_DSP,
8051                 STATUS,
8052                 TRX_DATE,
8053                 CLEARED_DATE,
8054                 MATURITY_DATE,
8055                 EXCHANGE_RATE_DATE,
8056                 EXCHANGE_RATE_TYPE,
8057                 USER_EXCHANGE_RATE_TYPE,
8058                 EXCHANGE_RATE,
8059                 BANK_CHARGES,
8060                 BANK_ERRORS,
8061                 BATCH_NAME,
8062                 BATCH_ID,
8063                 AGENT_NAME,
8064                 CUSTOMER_NAME,
8065                 PAYMENT_METHOD,
8066 		VENDOR_NAME,
8067                 CUSTOMER_ID,
8068                 SUPPLIER_ID,
8069                 REFERENCE_TYPE_DSP,
8070                 REFERENCE_TYPE,
8071                 REFERENCE_ID,
8072                 ACTUAL_AMOUNT_CLEARED,
8073                 CREATION_DATE,
8074                 CREATED_BY,
8075                 LAST_UPDATE_DATE,
8076                 LAST_UPDATED_BY,
8077                 REMITTANCE_NUMBER,
8078                 CASH_RECEIPT_ID,
8079                 APPLICATION_ID,
8080                 COUNT_CLEARED,
8081                 BANK_CURRENCY_CODE,
8082                 TRX_CURRENCY_TYPE,
8083                 CODE_COMBINATION_ID,
8084                 PERIOD_NAME,
8085                 JOURNAL_ENTRY_NAME,
8086                 DOCUMENT_NUMBER,
8087                 JOURNAL_ENTRY_LINE_NUMBER,
8088 		CLEARING_TRX_TYPE,
8089                 JOURNAL_CATEGORY,
8090                 BASE_AMOUNT,
8091                 RECEIPT_CLASS_ID,
8092                 RECEIPT_METHOD_ID,
8093                 RECEIPT_CLASS_NAME,
8094                 DEPOSIT_DATE,
8095                 VALUE_DATE,
8096                 REVERSED_RECEIPT_FLAG,
8097                 LEGAL_ENTITY_ID,
8098                 ORG_ID,
8099                 CE_BANK_ACCT_USE_ID,
8100 		'N'
8101       from 	ce_200_transactions_v
8102       where     bank_account_id = p_bank_account_id;
8103 
8104       CE_AUTO_BANK_MATCH.av_200_inserted_flag := 'Y';
8105      END IF;
8106 
8107     ELSIF l_trx_source = 'AR' THEN
8108 
8109      IF CE_AUTO_BANK_MATCH.av_222_inserted_flag = 'N' THEN  -- AP data has not been inserted into the GT table
8110       cep_standard.debug('inserting data from ce_222_transactions_v');
8111 
8112       insert into ce_available_transactions_tmp
8113 		(seq_id,
8114 		ROW_ID,
8115 		MULTI_SELECT,
8116 		BANK_ACCOUNT_ID,
8117 		BANK_ACCOUNT_NAME,
8118 		BANK_ACCOUNT_NUM,
8119 		BANK_NAME,
8120 		BANK_BRANCH_NAME,
8121 		TRX_ID,
8122 		TRX_TYPE,
8123 		TYPE_MEANING,
8124 		TRX_NUMBER,
8125 		CHECK_NUMBER,
8126 		CURRENCY_CODE,
8127 		AMOUNT,
8128 		BANK_ACCOUNT_AMOUNT,
8129 		AMOUNT_CLEARED,
8130 		GL_DATE,
8131 		STATUS_DSP,
8132 		STATUS,
8133 		TRX_DATE,
8134 		CLEARED_DATE,
8135 		MATURITY_DATE,
8136 		EXCHANGE_RATE_DATE,
8137 		EXCHANGE_RATE_TYPE,
8138 		USER_EXCHANGE_RATE_TYPE,
8139 		EXCHANGE_RATE,
8140 		BANK_CHARGES,
8141 		BANK_ERRORS,
8142 		BATCH_NAME,
8143 		BATCH_ID,
8144 		AGENT_NAME,
8145 		CUSTOMER_NAME,
8146 		PAYMENT_METHOD,
8147 		VENDOR_NAME,
8148 		CUSTOMER_ID,
8149 		SUPPLIER_ID,
8150 		REFERENCE_TYPE_DSP,
8151 		REFERENCE_TYPE,
8152 		REFERENCE_ID,
8153 		ACTUAL_AMOUNT_CLEARED,
8154 		CREATION_DATE,
8155 		CREATED_BY,
8156 		LAST_UPDATE_DATE,
8157 		LAST_UPDATED_BY,
8158 		REMITTANCE_NUMBER,
8159 		CASH_RECEIPT_ID,
8160 		APPLICATION_ID,
8161 		COUNT_CLEARED,
8162 		BANK_CURRENCY_CODE,
8163 		TRX_CURRENCY_TYPE,
8164 		CODE_COMBINATION_ID,
8165 		PERIOD_NAME,
8166 		JOURNAL_ENTRY_NAME,
8167 		DOCUMENT_NUMBER,
8168 		JOURNAL_ENTRY_LINE_NUMBER,
8169 		CLEARING_TRX_TYPE,
8170 		JOURNAL_CATEGORY,
8171 		BASE_AMOUNT,
8172 		RECEIPT_CLASS_ID,
8173 		RECEIPT_METHOD_ID,
8174 		RECEIPT_CLASS_NAME,
8175 		DEPOSIT_DATE,
8176 		VALUE_DATE,
8177 		REVERSED_RECEIPT_FLAG,
8178 		LEGAL_ENTITY_ID,
8179 		ORG_ID,
8180 		CE_BANK_ACCT_USE_ID,
8181 		RECONCILED_STATUS_FLAG)
8182       select	ce_available_transactions_s.nextval,
8183 		ROW_ID,
8184                 MULTI_SELECT,
8185                 BANK_ACCOUNT_ID,
8186                 BANK_ACCOUNT_NAME,
8187                 BANK_ACCOUNT_NUM,
8188                 BANK_NAME,
8189                 BANK_BRANCH_NAME,
8190                 TRX_ID,
8191                 TRX_TYPE,
8192                 TYPE_MEANING,
8193                 TRX_NUMBER,
8194                 CHECK_NUMBER,
8195 		CURRENCY_CODE,
8196                 AMOUNT,
8197                 BANK_ACCOUNT_AMOUNT,
8198                 AMOUNT_CLEARED,
8199                 GL_DATE,
8200                 STATUS_DSP,
8201                 STATUS,
8202                 TRX_DATE,
8203                 CLEARED_DATE,
8204                 MATURITY_DATE,
8205                 EXCHANGE_RATE_DATE,
8206                 EXCHANGE_RATE_TYPE,
8207                 USER_EXCHANGE_RATE_TYPE,
8208                 EXCHANGE_RATE,
8209                 BANK_CHARGES,
8210                 BANK_ERRORS,
8211                 BATCH_NAME,
8212                 BATCH_ID,
8213                 AGENT_NAME,
8214                 CUSTOMER_NAME,
8215                 PAYMENT_METHOD,
8216 		VENDOR_NAME,
8217                 CUSTOMER_ID,
8218                 SUPPLIER_ID,
8219                 REFERENCE_TYPE_DSP,
8220                 REFERENCE_TYPE,
8221                 REFERENCE_ID,
8222                 ACTUAL_AMOUNT_CLEARED,
8223                 CREATION_DATE,
8224                 CREATED_BY,
8225                 LAST_UPDATE_DATE,
8226                 LAST_UPDATED_BY,
8227                 REMITTANCE_NUMBER,
8228                 CASH_RECEIPT_ID,
8229                 APPLICATION_ID,
8230                 COUNT_CLEARED,
8231                 BANK_CURRENCY_CODE,
8232                 TRX_CURRENCY_TYPE,
8233                 CODE_COMBINATION_ID,
8234                 PERIOD_NAME,
8235                 JOURNAL_ENTRY_NAME,
8236                 DOCUMENT_NUMBER,
8237                 JOURNAL_ENTRY_LINE_NUMBER,
8238 		CLEARING_TRX_TYPE,
8239                 JOURNAL_CATEGORY,
8240                 BASE_AMOUNT,
8241                 RECEIPT_CLASS_ID,
8242                 RECEIPT_METHOD_ID,
8243                 RECEIPT_CLASS_NAME,
8244                 DEPOSIT_DATE,
8245                 VALUE_DATE,
8246                 REVERSED_RECEIPT_FLAG,
8247                 LEGAL_ENTITY_ID,
8248                 ORG_ID,
8249                 CE_BANK_ACCT_USE_ID,
8250 		'N'
8251       from 	ce_222_transactions_v
8252       where     bank_account_id = p_bank_account_id;
8253 
8254       CE_AUTO_BANK_MATCH.av_222_inserted_flag := 'Y';
8255      END IF;
8256 
8257     ELSIF l_trx_source = 'CE' THEN
8258      -- when l_trx_source is 'CE', only populate from ce_260_cf_transactions_v
8259 /*
8260      IF av_260_inserted_flag = 'N' THEN
8261 
8262       cep_standard.debug('inserting data from ce_260_transactions_v');
8263 
8264       insert into ce_available_transactions_tmp
8265 		(seq_id,
8266 		ROW_ID,
8267 		MULTI_SELECT,
8268 		BANK_ACCOUNT_ID,
8269 		BANK_ACCOUNT_NAME,
8270 		BANK_ACCOUNT_NUM,
8271 		BANK_NAME,
8272 		BANK_BRANCH_NAME,
8273 		TRX_ID,
8274 		TRX_TYPE,
8275 		TYPE_MEANING,
8276 		TRX_NUMBER,
8277 		CHECK_NUMBER,
8278 		CURRENCY_CODE,
8279 		AMOUNT,
8280 		BANK_ACCOUNT_AMOUNT,
8281 		AMOUNT_CLEARED,
8282 		GL_DATE,
8283 		STATUS_DSP,
8284 		STATUS,
8285 		TRX_DATE,
8286 		CLEARED_DATE,
8287 		MATURITY_DATE,
8288 		EXCHANGE_RATE_DATE,
8289 		EXCHANGE_RATE_TYPE,
8290 		USER_EXCHANGE_RATE_TYPE,
8291 		EXCHANGE_RATE,
8292 		BANK_CHARGES,
8293 		BANK_ERRORS,
8294 		BATCH_NAME,
8295 		BATCH_ID,
8296 		AGENT_NAME,
8297 		CUSTOMER_NAME,
8298 		PAYMENT_METHOD,
8299 		VENDOR_NAME,
8300 		CUSTOMER_ID,
8301 		SUPPLIER_ID,
8302 		REFERENCE_TYPE_DSP,
8303 		REFERENCE_TYPE,
8304 		REFERENCE_ID,
8305 		ACTUAL_AMOUNT_CLEARED,
8306 		CREATION_DATE,
8307 		CREATED_BY,
8308 		LAST_UPDATE_DATE,
8309 		LAST_UPDATED_BY,
8310 		REMITTANCE_NUMBER,
8311 		CASH_RECEIPT_ID,
8312 		APPLICATION_ID,
8313 		COUNT_CLEARED,
8314 		BANK_CURRENCY_CODE,
8315 		TRX_CURRENCY_TYPE,
8316 		CODE_COMBINATION_ID,
8317 		PERIOD_NAME,
8318 		JOURNAL_ENTRY_NAME,
8319 		DOCUMENT_NUMBER,
8320 		JOURNAL_ENTRY_LINE_NUMBER,
8321 		CLEARING_TRX_TYPE,
8322 		JOURNAL_CATEGORY,
8323 		BASE_AMOUNT,
8324 		RECEIPT_CLASS_ID,
8325 		RECEIPT_METHOD_ID,
8326 		RECEIPT_CLASS_NAME,
8327 		DEPOSIT_DATE,
8328 		VALUE_DATE,
8329 		REVERSED_RECEIPT_FLAG,
8330 		LEGAL_ENTITY_ID,
8331 		ORG_ID,
8332 		INVOICE_TEXT,
8333 		BANK_ACCOUNT_TEXT,
8334 		CUSTOMER_TEXT,
8335 		CE_BANK_ACCT_USE_ID,
8336 		RECONCILED_STATUS_FLAG)
8337       select	ce_available_transactions_s.nextval,
8338 		ROW_ID,
8339                 MULTI_SELECT,
8340                 BANK_ACCOUNT_ID,
8341                 BANK_ACCOUNT_NAME,
8342                 BANK_ACCOUNT_NUM,
8343                 BANK_NAME,
8344                 BANK_BRANCH_NAME,
8345                 TRX_ID,
8346                 TRX_TYPE,
8347                 TYPE_MEANING,
8348                 TRX_NUMBER,
8349                 CHECK_NUMBER,
8350 		CURRENCY_CODE,
8351                 AMOUNT,
8352                 BANK_ACCOUNT_AMOUNT,
8353                 AMOUNT_CLEARED,
8354                 GL_DATE,
8355                 STATUS_DSP,
8356                 STATUS,
8357                 TRX_DATE,
8358                 CLEARED_DATE,
8359                 MATURITY_DATE,
8360                 EXCHANGE_RATE_DATE,
8361                 EXCHANGE_RATE_TYPE,
8362                 USER_EXCHANGE_RATE_TYPE,
8363                 EXCHANGE_RATE,
8364                 BANK_CHARGES,
8365                 BANK_ERRORS,
8366                 BATCH_NAME,
8367                 BATCH_ID,
8368                 AGENT_NAME,
8369                 CUSTOMER_NAME,
8370                 PAYMENT_METHOD,
8371 		VENDOR_NAME,
8372                 CUSTOMER_ID,
8373                 SUPPLIER_ID,
8374                 REFERENCE_TYPE_DSP,
8375                 REFERENCE_TYPE,
8376                 REFERENCE_ID,
8377                 ACTUAL_AMOUNT_CLEARED,
8378                 CREATION_DATE,
8379                 CREATED_BY,
8380                 LAST_UPDATE_DATE,
8381                 LAST_UPDATED_BY,
8382                 REMITTANCE_NUMBER,
8383                 CASH_RECEIPT_ID,
8384                 APPLICATION_ID,
8385                 COUNT_CLEARED,
8386                 BANK_CURRENCY_CODE,
8387                 TRX_CURRENCY_TYPE,
8388                 CODE_COMBINATION_ID,
8389                 PERIOD_NAME,
8390                 JOURNAL_ENTRY_NAME,
8391                 DOCUMENT_NUMBER,
8392                 JOURNAL_ENTRY_LINE_NUMBER,
8393 		CLEARING_TRX_TYPE,
8394                 JOURNAL_CATEGORY,
8395                 BASE_AMOUNT,
8396                 RECEIPT_CLASS_ID,
8397                 RECEIPT_METHOD_ID,
8398                 RECEIPT_CLASS_NAME,
8399                 DEPOSIT_DATE,
8400                 VALUE_DATE,
8401                 REVERSED_RECEIPT_FLAG,
8402                 LEGAL_ENTITY_ID,
8403                 ORG_ID,
8404 		INVOICE_TEXT,
8405                 BANK_ACCOUNT_TEXT,
8406                 CUSTOMER_TEXT,
8407                 CE_BANK_ACCT_USE_ID,
8408 		'N'
8409       from 	ce_260_transactions_v
8410       where     bank_account_id = p_bank_account_id;
8411 
8412       av_260_inserted_flag := 'Y';
8413      END IF;
8414 */
8415      IF CE_AUTO_BANK_MATCH.av_260_cf_inserted_flag = 'N' THEN
8416       cep_standard.debug('inserting data from ce_260_cf_transactions_v');
8417       insert into ce_available_transactions_tmp
8418 		(seq_id,
8419 		ROW_ID,
8420 		MULTI_SELECT,
8421 		BANK_ACCOUNT_ID,
8422 		BANK_ACCOUNT_NAME,
8423 		BANK_ACCOUNT_NUM,
8424 		BANK_NAME,
8425 		BANK_BRANCH_NAME,
8426 		TRX_ID,
8427 		TRX_TYPE,
8428 		TYPE_MEANING,
8429 		TRX_NUMBER,
8430 		CHECK_NUMBER,
8431 		CURRENCY_CODE,
8432 		AMOUNT,
8433 		BANK_ACCOUNT_AMOUNT,
8434 		AMOUNT_CLEARED,
8435 		GL_DATE,
8436 		STATUS_DSP,
8437 		STATUS,
8438 		TRX_DATE,
8439 		CLEARED_DATE,
8440 		MATURITY_DATE,
8441 		EXCHANGE_RATE_DATE,
8442 		EXCHANGE_RATE_TYPE,
8443 		USER_EXCHANGE_RATE_TYPE,
8444 		EXCHANGE_RATE,
8445 		BANK_CHARGES,
8446 		BANK_ERRORS,
8447 		BATCH_NAME,
8448 		BATCH_ID,
8449 		AGENT_NAME,
8450 		CUSTOMER_NAME,
8451 		PAYMENT_METHOD,
8452 		VENDOR_NAME,
8453 		CUSTOMER_ID,
8454 		SUPPLIER_ID,
8455 		REFERENCE_TYPE_DSP,
8456 		REFERENCE_TYPE,
8457 		REFERENCE_ID,
8458 		ACTUAL_AMOUNT_CLEARED,
8459 		CREATION_DATE,
8460 		CREATED_BY,
8461 		LAST_UPDATE_DATE,
8462 		LAST_UPDATED_BY,
8463 		REMITTANCE_NUMBER,
8464 		CASH_RECEIPT_ID,
8465 		APPLICATION_ID,
8466 		COUNT_CLEARED,
8467 		BANK_CURRENCY_CODE,
8468 		TRX_CURRENCY_TYPE,
8469 		CODE_COMBINATION_ID,
8470 		PERIOD_NAME,
8471 		JOURNAL_ENTRY_NAME,
8472 		DOCUMENT_NUMBER,
8473 		JOURNAL_ENTRY_LINE_NUMBER,
8474 		CLEARING_TRX_TYPE,
8475 		JOURNAL_CATEGORY,
8476 		BASE_AMOUNT,
8477 		RECEIPT_CLASS_ID,
8478 		RECEIPT_METHOD_ID,
8479 		RECEIPT_CLASS_NAME,
8480 		DEPOSIT_DATE,
8481 		VALUE_DATE,
8482 		REVERSED_RECEIPT_FLAG,
8483 		LEGAL_ENTITY_ID,
8484 		ORG_ID,
8485 		INVOICE_TEXT,
8486 		BANK_ACCOUNT_TEXT,
8487 		CUSTOMER_TEXT,
8488 		COUNTERPARTY,
8489 		TRXN_SUBTYPE,
8490 		CE_BANK_ACCT_USE_ID,
8491 		RECONCILED_STATUS_FLAG)
8492       select	ce_available_transactions_s.nextval,
8493 		ROW_ID,
8494                 MULTI_SELECT,
8495                 BANK_ACCOUNT_ID,
8496                 BANK_ACCOUNT_NAME,
8497                 BANK_ACCOUNT_NUM,
8498                 BANK_NAME,
8499                 BANK_BRANCH_NAME,
8500                 TRX_ID,
8501                 TRX_TYPE,
8502                 TYPE_MEANING,
8503                 TRX_NUMBER,
8504                 CHECK_NUMBER,
8505 		CURRENCY_CODE,
8506                 AMOUNT,
8507                 BANK_ACCOUNT_AMOUNT,
8508                 AMOUNT_CLEARED,
8509                 GL_DATE,
8510                 STATUS_DSP,
8511                 STATUS,
8512                 TRX_DATE,
8513                 CLEARED_DATE,
8514                 MATURITY_DATE,
8515                 EXCHANGE_RATE_DATE,
8516                 EXCHANGE_RATE_TYPE,
8517                 USER_EXCHANGE_RATE_TYPE,
8518                 EXCHANGE_RATE,
8519                 BANK_CHARGES,
8520                 BANK_ERRORS,
8521                 BATCH_NAME,
8522                 BATCH_ID,
8523                 AGENT_NAME,
8524                 CUSTOMER_NAME,
8525                 PAYMENT_METHOD,
8526 		VENDOR_NAME,
8527                 CUSTOMER_ID,
8528                 SUPPLIER_ID,
8529                 REFERENCE_TYPE_DSP,
8530                 REFERENCE_TYPE,
8531                 REFERENCE_ID,
8532                 ACTUAL_AMOUNT_CLEARED,
8533                 CREATION_DATE,
8534                 CREATED_BY,
8535                 LAST_UPDATE_DATE,
8536                 LAST_UPDATED_BY,
8537                 REMITTANCE_NUMBER,
8538                 CASH_RECEIPT_ID,
8539                 261,   --APPLICATION_ID,
8540                 COUNT_CLEARED,
8541                 BANK_CURRENCY_CODE,
8542                 TRX_CURRENCY_TYPE,
8543                 CODE_COMBINATION_ID,
8544                 PERIOD_NAME,
8545                 JOURNAL_ENTRY_NAME,
8546                 DOCUMENT_NUMBER,
8547                 JOURNAL_ENTRY_LINE_NUMBER,
8548 		CLEARING_TRX_TYPE,
8549                 JOURNAL_CATEGORY,
8550                 BASE_AMOUNT,
8551                 RECEIPT_CLASS_ID,
8552                 RECEIPT_METHOD_ID,
8553                 RECEIPT_CLASS_NAME,
8554                 DEPOSIT_DATE,
8555                 VALUE_DATE,
8556                 REVERSED_RECEIPT_FLAG,
8557                 LEGAL_ENTITY_ID,
8558                 ORG_ID,
8559 		INVOICE_TEXT,
8560                 BANK_ACCOUNT_TEXT,
8561                 CUSTOMER_TEXT,
8562                 COUNTERPARTY,
8563                 TRXN_SUBTYPE,
8564                 CE_BANK_ACCT_USE_ID,
8565 		'N'
8566       from 	ce_260_cf_transactions_v
8567       where     bank_account_id = p_bank_account_id;
8568 
8569       CE_AUTO_BANK_MATCH.av_260_cf_inserted_flag := 'Y';
8570      END IF;
8571 
8572     ELSIF l_trx_source = 'JE' THEN
8573 
8574      IF CE_AUTO_BANK_MATCH.av_101_inserted_flag = 'N' THEN
8575 
8576       cep_standard.debug('inserting data from ce_101_transactions_v');
8577 
8578       insert into ce_available_transactions_tmp
8579 		(seq_id,
8580 		ROW_ID,
8581 		MULTI_SELECT,
8582 		BANK_ACCOUNT_ID,
8583 		BANK_ACCOUNT_NAME,
8584 		BANK_ACCOUNT_NUM,
8585 		BANK_NAME,
8586 		BANK_BRANCH_NAME,
8587 		TRX_ID,
8588 		TRX_TYPE,
8589 		TYPE_MEANING,
8590 		TRX_NUMBER,
8591 		CHECK_NUMBER,
8592 		CURRENCY_CODE,
8593 		AMOUNT,
8594 		BANK_ACCOUNT_AMOUNT,
8595 		AMOUNT_CLEARED,
8596 		GL_DATE,
8597 		STATUS_DSP,
8598 		STATUS,
8599 		DESCRIPTION,
8600 		TRX_DATE,
8601 		CLEARED_DATE,
8602 		MATURITY_DATE,
8603 		EXCHANGE_RATE_DATE,
8604 		EXCHANGE_RATE_TYPE,
8605 		USER_EXCHANGE_RATE_TYPE,
8606 		EXCHANGE_RATE,
8607 		BANK_CHARGES,
8608 		BANK_ERRORS,
8609 		BATCH_NAME,
8610 		BATCH_ID,
8611 		AGENT_NAME,
8612 		CUSTOMER_NAME,
8613 		PAYMENT_METHOD,
8614 		VENDOR_NAME,
8615 		CUSTOMER_ID,
8616 		SUPPLIER_ID,
8617 		REFERENCE_TYPE_DSP,
8618 		REFERENCE_TYPE,
8619 		REFERENCE_ID,
8620 		ACTUAL_AMOUNT_CLEARED,
8621 		CREATION_DATE,
8622 		CREATED_BY,
8623 		LAST_UPDATE_DATE,
8624 		LAST_UPDATED_BY,
8625 		REMITTANCE_NUMBER,
8626 		CASH_RECEIPT_ID,
8627 		APPLICATION_ID,
8628 		COUNT_CLEARED,
8629 		BANK_CURRENCY_CODE,
8630 		TRX_CURRENCY_TYPE,
8631 		CODE_COMBINATION_ID,
8632 		PERIOD_NAME,
8633 		JOURNAL_ENTRY_NAME,
8634 		DOCUMENT_NUMBER,
8635 		JOURNAL_ENTRY_LINE_NUMBER,
8636 		CLEARING_TRX_TYPE,
8637 		JOURNAL_CATEGORY,
8638 		BASE_AMOUNT,
8639 		RECEIPT_CLASS_ID,
8640 		RECEIPT_METHOD_ID,
8641 		RECEIPT_CLASS_NAME,
8642 		DEPOSIT_DATE,
8643 		VALUE_DATE,
8644 		REVERSED_RECEIPT_FLAG,
8645 		LEGAL_ENTITY_ID,
8646 		ORG_ID,
8647 		CE_BANK_ACCT_USE_ID,
8648 		RECONCILED_STATUS_FLAG)
8649       select	ce_available_transactions_s.nextval,
8650 		ROW_ID,
8651                 MULTI_SELECT,
8652                 BANK_ACCOUNT_ID,
8653                 BANK_ACCOUNT_NAME,
8654                 BANK_ACCOUNT_NUM,
8655                 BANK_NAME,
8656                 BANK_BRANCH_NAME,
8657                 TRX_ID,
8658                 TRX_TYPE,
8659                 TYPE_MEANING,
8660                 TRX_NUMBER,
8661                 CHECK_NUMBER,
8662 		CURRENCY_CODE,
8663                 AMOUNT,
8664                 BANK_ACCOUNT_AMOUNT,
8665                 AMOUNT_CLEARED,
8666                 GL_DATE,
8667                 STATUS_DSP,
8668                 STATUS,
8669                 DESCRIPTION,
8670                 TRX_DATE,
8671                 CLEARED_DATE,
8672                 MATURITY_DATE,
8673                 EXCHANGE_RATE_DATE,
8674                 EXCHANGE_RATE_TYPE,
8675                 USER_EXCHANGE_RATE_TYPE,
8676                 EXCHANGE_RATE,
8677                 BANK_CHARGES,
8678                 BANK_ERRORS,
8679                 BATCH_NAME,
8680                 BATCH_ID,
8681                 AGENT_NAME,
8682                 CUSTOMER_NAME,
8683                 PAYMENT_METHOD,
8684 		VENDOR_NAME,
8685                 CUSTOMER_ID,
8686                 SUPPLIER_ID,
8687                 REFERENCE_TYPE_DSP,
8688                 REFERENCE_TYPE,
8689                 REFERENCE_ID,
8690                 ACTUAL_AMOUNT_CLEARED,
8691                 CREATION_DATE,
8692                 CREATED_BY,
8693                 LAST_UPDATE_DATE,
8694                 LAST_UPDATED_BY,
8695                 REMITTANCE_NUMBER,
8696                 CASH_RECEIPT_ID,
8697                 APPLICATION_ID,
8698                 COUNT_CLEARED,
8699                 BANK_CURRENCY_CODE,
8700                 TRX_CURRENCY_TYPE,
8701                 CODE_COMBINATION_ID,
8702                 PERIOD_NAME,
8703                 JOURNAL_ENTRY_NAME,
8704                 DOCUMENT_NUMBER,
8705                 JOURNAL_ENTRY_LINE_NUMBER,
8706 		CLEARING_TRX_TYPE,
8707                 JOURNAL_CATEGORY,
8708                 BASE_AMOUNT,
8709                 RECEIPT_CLASS_ID,
8710                 RECEIPT_METHOD_ID,
8711                 RECEIPT_CLASS_NAME,
8712                 DEPOSIT_DATE,
8713                 VALUE_DATE,
8714                 REVERSED_RECEIPT_FLAG,
8715                 LEGAL_ENTITY_ID,
8716                 ORG_ID,
8717                 CE_BANK_ACCT_USE_ID,
8718 		'N'
8719       from 	ce_101_transactions_v
8720       where     bank_account_id = p_bank_account_id;
8721 
8722       CE_AUTO_BANK_MATCH.av_101_inserted_flag := 'Y';
8723      END IF;
8724 
8725     ELSIF l_trx_source = 'OI' THEN
8726 
8727      -- Bug 7356199 removed the inserting data from ce_185_transactions_v
8728      -- as ce_999_transactions_v consists a union  of ce_185_transactions_v
8729      IF CE_AUTO_BANK_MATCH.av_999_inserted_flag = 'N' THEN
8730 
8731       cep_standard.debug('inserting data from ce_999_transactions_v');
8732 
8733       insert into ce_available_transactions_tmp
8734 		(seq_id,
8735 		ROW_ID,
8736 		MULTI_SELECT,
8737 		BANK_ACCOUNT_ID,
8738 		BANK_ACCOUNT_NAME,
8739 		BANK_ACCOUNT_NUM,
8740 		BANK_NAME,
8741 		BANK_BRANCH_NAME,
8742 		TRX_ID,
8743 		TRX_TYPE,
8744 		TYPE_MEANING,
8745 		TRX_NUMBER,
8746 		CHECK_NUMBER,
8747 		CURRENCY_CODE,
8748 		AMOUNT,
8749 		BANK_ACCOUNT_AMOUNT,
8750 		AMOUNT_CLEARED,
8751 		GL_DATE,
8752 		STATUS_DSP,
8753 		STATUS,
8754 		TRX_DATE,
8755 		CLEARED_DATE,
8756 		MATURITY_DATE,
8757 		EXCHANGE_RATE_DATE,
8758 		EXCHANGE_RATE_TYPE,
8759 		USER_EXCHANGE_RATE_TYPE,
8760 		EXCHANGE_RATE,
8761 		BANK_CHARGES,
8762 		BANK_ERRORS,
8763 		BATCH_NAME,
8764 		BATCH_ID,
8765 		AGENT_NAME,
8766 		CUSTOMER_NAME,
8767 		PAYMENT_METHOD,
8768 		VENDOR_NAME,
8769 		CUSTOMER_ID,
8770 		SUPPLIER_ID,
8771 		REFERENCE_TYPE_DSP,
8772 		REFERENCE_TYPE,
8773 		REFERENCE_ID,
8774 		ACTUAL_AMOUNT_CLEARED,
8775 		CREATION_DATE,
8776 		CREATED_BY,
8777 		LAST_UPDATE_DATE,
8778 		LAST_UPDATED_BY,
8779 		REMITTANCE_NUMBER,
8780 		CASH_RECEIPT_ID,
8781 		APPLICATION_ID,
8782 		COUNT_CLEARED,
8783 		BANK_CURRENCY_CODE,
8784 		TRX_CURRENCY_TYPE,
8785 		CODE_COMBINATION_ID,
8786 		PERIOD_NAME,
8787 		JOURNAL_ENTRY_NAME,
8788 		DOCUMENT_NUMBER,
8789 		JOURNAL_ENTRY_LINE_NUMBER,
8790 		CLEARING_TRX_TYPE,
8791 		JOURNAL_CATEGORY,
8792 		BASE_AMOUNT,
8793 		RECEIPT_CLASS_ID,
8794 		RECEIPT_METHOD_ID,
8795 		RECEIPT_CLASS_NAME,
8796 		DEPOSIT_DATE,
8797 		VALUE_DATE,
8798 		REVERSED_RECEIPT_FLAG,
8799 		LEGAL_ENTITY_ID,
8800 		ORG_ID,
8801 		CE_BANK_ACCT_USE_ID,
8802 		RECONCILED_STATUS_FLAG)
8803       select	ce_available_transactions_s.nextval,
8804 		ROW_ID,
8805                 MULTI_SELECT,
8806                 BANK_ACCOUNT_ID,
8807                 BANK_ACCOUNT_NAME,
8808                 BANK_ACCOUNT_NUM,
8809                 BANK_NAME,
8810                 BANK_BRANCH_NAME,
8811                 TRX_ID,
8812                 TRX_TYPE,
8813                 TYPE_MEANING,
8814                 TRX_NUMBER,
8815                 CHECK_NUMBER,
8816 		CURRENCY_CODE,
8817                 AMOUNT,
8818                 BANK_ACCOUNT_AMOUNT,
8819                 AMOUNT_CLEARED,
8820                 GL_DATE,
8821                 STATUS_DSP,
8822                 STATUS,
8823                 TRX_DATE,
8824                 CLEARED_DATE,
8825                 MATURITY_DATE,
8826                 EXCHANGE_RATE_DATE,
8827                 EXCHANGE_RATE_TYPE,
8828                 USER_EXCHANGE_RATE_TYPE,
8829                 EXCHANGE_RATE,
8830                 BANK_CHARGES,
8831                 BANK_ERRORS,
8832                 BATCH_NAME,
8833                 BATCH_ID,
8834                 AGENT_NAME,
8835                 CUSTOMER_NAME,
8836                 PAYMENT_METHOD,
8837 		VENDOR_NAME,
8838                 CUSTOMER_ID,
8839                 SUPPLIER_ID,
8840                 REFERENCE_TYPE_DSP,
8841                 REFERENCE_TYPE,
8842                 REFERENCE_ID,
8843                 ACTUAL_AMOUNT_CLEARED,
8844                 CREATION_DATE,
8845                 CREATED_BY,
8846                 LAST_UPDATE_DATE,
8847                 LAST_UPDATED_BY,
8848                 REMITTANCE_NUMBER,
8849                 CASH_RECEIPT_ID,
8850                 APPLICATION_ID,
8851                 COUNT_CLEARED,
8852                 BANK_CURRENCY_CODE,
8853                 TRX_CURRENCY_TYPE,
8854                 CODE_COMBINATION_ID,
8855                 PERIOD_NAME,
8856                 JOURNAL_ENTRY_NAME,
8857                 DOCUMENT_NUMBER,
8858                 JOURNAL_ENTRY_LINE_NUMBER,
8859 		CLEARING_TRX_TYPE,
8860                 JOURNAL_CATEGORY,
8861                 BASE_AMOUNT,
8862                 RECEIPT_CLASS_ID,
8863                 RECEIPT_METHOD_ID,
8864                 RECEIPT_CLASS_NAME,
8865                 DEPOSIT_DATE,
8866                 VALUE_DATE,
8867                 REVERSED_RECEIPT_FLAG,
8868                 LEGAL_ENTITY_ID,
8869                 ORG_ID,
8870                 CE_BANK_ACCT_USE_ID,
8871 		'N'
8872       from 	ce_999_transactions_v
8873       where     bank_account_id = p_bank_account_id;
8874 
8875       CE_AUTO_BANK_MATCH.av_999_inserted_flag := 'Y';
8876      END IF;
8877 
8878     ELSIF l_trx_source = 'PAY' THEN
8879      IF CE_AUTO_BANK_MATCH.av_801_inserted_flag = 'N' THEN
8880       cep_standard.debug('inserting data from ce_801_transactions_v');
8881 
8882       insert into ce_available_transactions_tmp
8883 		(seq_id,
8884 		ROW_ID,
8885 		MULTI_SELECT,
8886 		BANK_ACCOUNT_ID,
8887 		BANK_ACCOUNT_NAME,
8888 		BANK_ACCOUNT_NUM,
8889 		BANK_NAME,
8890 		BANK_BRANCH_NAME,
8891 		TRX_ID,
8892 		TRX_TYPE,
8893 		TYPE_MEANING,
8894 		TRX_NUMBER,
8895 		CHECK_NUMBER,
8896 		CURRENCY_CODE,
8897 		AMOUNT,
8898 		BANK_ACCOUNT_AMOUNT,
8899 		AMOUNT_CLEARED,
8900 		GL_DATE,
8901 		STATUS_DSP,
8902 		STATUS,
8903 		TRX_DATE,
8904 		CLEARED_DATE,
8905 		MATURITY_DATE,
8906 		EXCHANGE_RATE_DATE,
8907 		EXCHANGE_RATE_TYPE,
8908 		USER_EXCHANGE_RATE_TYPE,
8909 		EXCHANGE_RATE,
8910 		BANK_CHARGES,
8911 		BANK_ERRORS,
8912 		BATCH_NAME,
8913 		BATCH_ID,
8914 		AGENT_NAME,
8915 		CUSTOMER_NAME,
8916 		PAYMENT_METHOD,
8917 		VENDOR_NAME,
8918 		CUSTOMER_ID,
8919 		SUPPLIER_ID,
8920 		REFERENCE_TYPE_DSP,
8921 		REFERENCE_TYPE,
8922 		REFERENCE_ID,
8923 		ACTUAL_AMOUNT_CLEARED,
8924 		CREATION_DATE,
8925 		CREATED_BY,
8926 		LAST_UPDATE_DATE,
8927 		LAST_UPDATED_BY,
8928 		REMITTANCE_NUMBER,
8929 		CASH_RECEIPT_ID,
8930 		APPLICATION_ID,
8931 		COUNT_CLEARED,
8932 		BANK_CURRENCY_CODE,
8933 		TRX_CURRENCY_TYPE,
8934 		CODE_COMBINATION_ID,
8935 		PERIOD_NAME,
8936 		JOURNAL_ENTRY_NAME,
8937 		DOCUMENT_NUMBER,
8938 		JOURNAL_ENTRY_LINE_NUMBER,
8939 		CLEARING_TRX_TYPE,
8940 		JOURNAL_CATEGORY,
8941 		BASE_AMOUNT,
8942 		RECEIPT_CLASS_ID,
8943 		RECEIPT_METHOD_ID,
8944 		RECEIPT_CLASS_NAME,
8945 		DEPOSIT_DATE,
8946 		VALUE_DATE,
8947 		REVERSED_RECEIPT_FLAG,
8948 		LEGAL_ENTITY_ID,
8949 		ORG_ID,
8950 		CE_BANK_ACCT_USE_ID,
8951 		RECONCILED_STATUS_FLAG)
8952       select	ce_available_transactions_s.nextval,
8953 		ROW_ID,
8954                 MULTI_SELECT,
8955                 BANK_ACCOUNT_ID,
8956                 BANK_ACCOUNT_NAME,
8957                 BANK_ACCOUNT_NUM,
8958                 BANK_NAME,
8959                 BANK_BRANCH_NAME,
8960                 TRX_ID,
8961                 TRX_TYPE,
8962                 TYPE_MEANING,
8963                 TRX_NUMBER,
8964                 CHECK_NUMBER,
8965 		CURRENCY_CODE,
8966                 AMOUNT,
8967                 BANK_ACCOUNT_AMOUNT,
8968                 AMOUNT_CLEARED,
8969                 GL_DATE,
8970                 STATUS_DSP,
8971                 STATUS,
8972                 TRX_DATE,
8973                 CLEARED_DATE,
8974                 MATURITY_DATE,
8975                 EXCHANGE_RATE_DATE,
8976                 EXCHANGE_RATE_TYPE,
8977                 USER_EXCHANGE_RATE_TYPE,
8978                 EXCHANGE_RATE,
8979                 BANK_CHARGES,
8980                 BANK_ERRORS,
8981                 BATCH_NAME,
8982                 BATCH_ID,
8983                 AGENT_NAME,
8984                 CUSTOMER_NAME,
8985                 PAYMENT_METHOD,
8986 		VENDOR_NAME,
8987                 CUSTOMER_ID,
8988                 SUPPLIER_ID,
8989                 REFERENCE_TYPE_DSP,
8990                 REFERENCE_TYPE,
8991                 REFERENCE_ID,
8992                 ACTUAL_AMOUNT_CLEARED,
8993                 CREATION_DATE,
8994                 CREATED_BY,
8995                 LAST_UPDATE_DATE,
8996                 LAST_UPDATED_BY,
8997                 REMITTANCE_NUMBER,
8998                 CASH_RECEIPT_ID,
8999                 APPLICATION_ID,
9000                 COUNT_CLEARED,
9001                 BANK_CURRENCY_CODE,
9002                 TRX_CURRENCY_TYPE,
9003                 CODE_COMBINATION_ID,
9004                 PERIOD_NAME,
9005                 JOURNAL_ENTRY_NAME,
9006                 DOCUMENT_NUMBER,
9007                 JOURNAL_ENTRY_LINE_NUMBER,
9008 		CLEARING_TRX_TYPE,
9009                 JOURNAL_CATEGORY,
9010                 BASE_AMOUNT,
9011                 RECEIPT_CLASS_ID,
9012                 RECEIPT_METHOD_ID,
9013                 RECEIPT_CLASS_NAME,
9014                 DEPOSIT_DATE,
9015                 VALUE_DATE,
9016                 REVERSED_RECEIPT_FLAG,
9017                 LEGAL_ENTITY_ID,
9018                 ORG_ID,
9019                 CE_BANK_ACCT_USE_ID,
9020 		'N'
9021       from 	ce_801_transactions_v
9022       where     bank_account_id = p_bank_account_id;
9023 
9024       CE_AUTO_BANK_MATCH.av_801_inserted_flag := 'Y';
9025      END IF;
9026 
9027     ELSIF l_trx_source = 'PAY_EFT' THEN
9028      IF CE_AUTO_BANK_MATCH.av_801_eft_inserted_flag = 'N' THEN
9029       cep_standard.debug('inserting data from ce_801_eft_transactions_v');
9030 
9031       insert into ce_available_transactions_tmp
9032 		(seq_id,
9033 		ROW_ID,
9034 		MULTI_SELECT,
9035 		BANK_ACCOUNT_ID,
9036 		BANK_ACCOUNT_NAME,
9037 		BANK_ACCOUNT_NUM,
9038 		BANK_NAME,
9039 		BANK_BRANCH_NAME,
9040 		TRX_ID,
9041 		TRX_TYPE,
9042 		TYPE_MEANING,
9043 		TRX_NUMBER,
9044 		CHECK_NUMBER,
9045 		CURRENCY_CODE,
9046 		AMOUNT,
9047 		BANK_ACCOUNT_AMOUNT,
9048 		AMOUNT_CLEARED,
9049 		GL_DATE,
9050 		STATUS_DSP,
9051 		STATUS,
9052 		TRX_DATE,
9053 		CLEARED_DATE,
9054 		MATURITY_DATE,
9055 		EXCHANGE_RATE_DATE,
9056 		EXCHANGE_RATE_TYPE,
9057 		USER_EXCHANGE_RATE_TYPE,
9058 		EXCHANGE_RATE,
9059 		BANK_CHARGES,
9060 		BANK_ERRORS,
9061 		BATCH_NAME,
9062 		BATCH_ID,
9063 		AGENT_NAME,
9064 		CUSTOMER_NAME,
9065 		PAYMENT_METHOD,
9066 		VENDOR_NAME,
9067 		CUSTOMER_ID,
9068 		SUPPLIER_ID,
9069 		REFERENCE_TYPE_DSP,
9070 		REFERENCE_TYPE,
9071 		REFERENCE_ID,
9072 		ACTUAL_AMOUNT_CLEARED,
9073 		CREATION_DATE,
9074 		CREATED_BY,
9075 		LAST_UPDATE_DATE,
9076 		LAST_UPDATED_BY,
9077 		REMITTANCE_NUMBER,
9078 		CASH_RECEIPT_ID,
9079 		APPLICATION_ID,
9080 		COUNT_CLEARED,
9081 		BANK_CURRENCY_CODE,
9082 		TRX_CURRENCY_TYPE,
9083 		CODE_COMBINATION_ID,
9084 		PERIOD_NAME,
9085 		JOURNAL_ENTRY_NAME,
9086 		DOCUMENT_NUMBER,
9087 		JOURNAL_ENTRY_LINE_NUMBER,
9088 		CLEARING_TRX_TYPE,
9089 		JOURNAL_CATEGORY,
9090 		BASE_AMOUNT,
9091 		RECEIPT_CLASS_ID,
9092 		RECEIPT_METHOD_ID,
9093 		RECEIPT_CLASS_NAME,
9094 		DEPOSIT_DATE,
9095 		VALUE_DATE,
9096 		REVERSED_RECEIPT_FLAG,
9097 		LEGAL_ENTITY_ID,
9098 		ORG_ID,
9099 		CE_BANK_ACCT_USE_ID,
9100 		RECONCILED_STATUS_FLAG)
9101       select 	ce_available_transactions_s.nextval,
9102 		ROW_ID,
9103                 MULTI_SELECT,
9104                 BANK_ACCOUNT_ID,
9105                 BANK_ACCOUNT_NAME,
9106                 BANK_ACCOUNT_NUM,
9107                 BANK_NAME,
9108                 BANK_BRANCH_NAME,
9109                 TRX_ID,
9110                 TRX_TYPE,
9111                 TYPE_MEANING,
9112                 TRX_NUMBER,
9113                 CHECK_NUMBER,
9114 		CURRENCY_CODE,
9115                 AMOUNT,
9116                 BANK_ACCOUNT_AMOUNT,
9117                 AMOUNT_CLEARED,
9118                 GL_DATE,
9119                 STATUS_DSP,
9120                 STATUS,
9121                 TRX_DATE,
9122                 CLEARED_DATE,
9123                 MATURITY_DATE,
9124                 EXCHANGE_RATE_DATE,
9125                 EXCHANGE_RATE_TYPE,
9126                 USER_EXCHANGE_RATE_TYPE,
9127                 EXCHANGE_RATE,
9128                 BANK_CHARGES,
9129                 BANK_ERRORS,
9130                 BATCH_NAME,
9131                 BATCH_ID,
9132                 AGENT_NAME,
9133                 CUSTOMER_NAME,
9134                 PAYMENT_METHOD,
9135 		VENDOR_NAME,
9136                 CUSTOMER_ID,
9137                 SUPPLIER_ID,
9138                 REFERENCE_TYPE_DSP,
9139                 REFERENCE_TYPE,
9140                 REFERENCE_ID,
9141                 ACTUAL_AMOUNT_CLEARED,
9142                 CREATION_DATE,
9143                 CREATED_BY,
9144                 LAST_UPDATE_DATE,
9145                 LAST_UPDATED_BY,
9146                 REMITTANCE_NUMBER,
9147                 CASH_RECEIPT_ID,
9148                 802,   --APPLICATION_ID,
9149                 COUNT_CLEARED,
9150                 BANK_CURRENCY_CODE,
9151                 TRX_CURRENCY_TYPE,
9152                 CODE_COMBINATION_ID,
9153                 PERIOD_NAME,
9154                 JOURNAL_ENTRY_NAME,
9155                 DOCUMENT_NUMBER,
9156                 JOURNAL_ENTRY_LINE_NUMBER,
9157 		CLEARING_TRX_TYPE,
9158                 JOURNAL_CATEGORY,
9159                 BASE_AMOUNT,
9160                 RECEIPT_CLASS_ID,
9161                 RECEIPT_METHOD_ID,
9162                 RECEIPT_CLASS_NAME,
9163                 DEPOSIT_DATE,
9164                 VALUE_DATE,
9165                 REVERSED_RECEIPT_FLAG,
9166                 LEGAL_ENTITY_ID,
9167                 ORG_ID,
9168                 CE_BANK_ACCT_USE_ID,
9169 		'N'
9170       from 	ce_801_eft_transactions_v
9171       where     bank_account_id = p_bank_account_id;
9172 
9173       CE_AUTO_BANK_MATCH.av_801_eft_inserted_flag := 'Y';
9174      END IF;
9175 
9176     ELSIF l_trx_source = 'X' OR l_trx_source is null THEN
9177       IF l_trx_type IN ('MISC_CREDIT', 'MISC_DEBIT') THEN
9178         IF l_matching_against IN ('STMT', 'MS', 'SM') THEN
9179           IF CE_AUTO_BANK_MATCH.av_260_inserted_flag = 'N' THEN
9180             cep_standard.debug('inserting data from ce_260_transactions_v');
9181             insert into ce_available_transactions_tmp
9182 		(seq_id,
9183 		ROW_ID,
9184 		MULTI_SELECT,
9185 		BANK_ACCOUNT_ID,
9186 		BANK_ACCOUNT_NAME,
9187 		BANK_ACCOUNT_NUM,
9188 		BANK_NAME,
9189 		BANK_BRANCH_NAME,
9190 		TRX_ID,
9191 		TRX_TYPE,
9192 		TYPE_MEANING,
9193 		TRX_NUMBER,
9194 		CHECK_NUMBER,
9195 		CURRENCY_CODE,
9196 		AMOUNT,
9197 		BANK_ACCOUNT_AMOUNT,
9198 		AMOUNT_CLEARED,
9199 		GL_DATE,
9200 		STATUS_DSP,
9201 		STATUS,
9202 		TRX_DATE,
9203 		CLEARED_DATE,
9204 		MATURITY_DATE,
9205 		EXCHANGE_RATE_DATE,
9206 		EXCHANGE_RATE_TYPE,
9207 		USER_EXCHANGE_RATE_TYPE,
9208 		EXCHANGE_RATE,
9209 		BANK_CHARGES,
9210 		BANK_ERRORS,
9211 		BATCH_NAME,
9212 		BATCH_ID,
9213 		AGENT_NAME,
9214 		CUSTOMER_NAME,
9215 		PAYMENT_METHOD,
9216 		VENDOR_NAME,
9217 		CUSTOMER_ID,
9218 		SUPPLIER_ID,
9219 		REFERENCE_TYPE_DSP,
9220 		REFERENCE_TYPE,
9221 		REFERENCE_ID,
9222 		ACTUAL_AMOUNT_CLEARED,
9223 		CREATION_DATE,
9224 		CREATED_BY,
9225 		LAST_UPDATE_DATE,
9226 		LAST_UPDATED_BY,
9227 		REMITTANCE_NUMBER,
9228 		CASH_RECEIPT_ID,
9229 		APPLICATION_ID,
9230 		COUNT_CLEARED,
9231 		BANK_CURRENCY_CODE,
9232 		TRX_CURRENCY_TYPE,
9233 		CODE_COMBINATION_ID,
9234 		PERIOD_NAME,
9235 		JOURNAL_ENTRY_NAME,
9236 		DOCUMENT_NUMBER,
9237 		JOURNAL_ENTRY_LINE_NUMBER,
9238 		CLEARING_TRX_TYPE,
9239 		JOURNAL_CATEGORY,
9240 		BASE_AMOUNT,
9241 		RECEIPT_CLASS_ID,
9242 		RECEIPT_METHOD_ID,
9243 		RECEIPT_CLASS_NAME,
9244 		DEPOSIT_DATE,
9245 		VALUE_DATE,
9246 		REVERSED_RECEIPT_FLAG,
9247 		LEGAL_ENTITY_ID,
9248 		ORG_ID,
9249 		INVOICE_TEXT,
9250 		BANK_ACCOUNT_TEXT,
9251 		CUSTOMER_TEXT,
9252 		CE_BANK_ACCT_USE_ID,
9253 		RECONCILED_STATUS_FLAG)
9254          select ce_available_transactions_s.nextval,
9255 		ROW_ID,
9256                 MULTI_SELECT,
9257                 BANK_ACCOUNT_ID,
9258                 BANK_ACCOUNT_NAME,
9259                 BANK_ACCOUNT_NUM,
9260                 BANK_NAME,
9261                 BANK_BRANCH_NAME,
9262                 TRX_ID,
9263                 TRX_TYPE,
9264                 TYPE_MEANING,
9265                 TRX_NUMBER,
9266                 CHECK_NUMBER,
9267 		CURRENCY_CODE,
9268                 AMOUNT,
9269                 BANK_ACCOUNT_AMOUNT,
9270                 AMOUNT_CLEARED,
9271                 GL_DATE,
9272                 STATUS_DSP,
9273                 STATUS,
9274                 TRX_DATE,
9275                 CLEARED_DATE,
9276                 MATURITY_DATE,
9277                 EXCHANGE_RATE_DATE,
9278                 EXCHANGE_RATE_TYPE,
9279                 USER_EXCHANGE_RATE_TYPE,
9280                 EXCHANGE_RATE,
9281                 BANK_CHARGES,
9282                 BANK_ERRORS,
9283                 BATCH_NAME,
9284                 BATCH_ID,
9285                 AGENT_NAME,
9286                 CUSTOMER_NAME,
9287                 PAYMENT_METHOD,
9288 		VENDOR_NAME,
9289                 CUSTOMER_ID,
9290                 SUPPLIER_ID,
9291                 REFERENCE_TYPE_DSP,
9292                 REFERENCE_TYPE,
9293                 REFERENCE_ID,
9294                 ACTUAL_AMOUNT_CLEARED,
9295                 CREATION_DATE,
9296                 CREATED_BY,
9297                 LAST_UPDATE_DATE,
9298                 LAST_UPDATED_BY,
9299                 REMITTANCE_NUMBER,
9300                 CASH_RECEIPT_ID,
9301                 APPLICATION_ID,
9302                 COUNT_CLEARED,
9303                 BANK_CURRENCY_CODE,
9304                 TRX_CURRENCY_TYPE,
9305                 CODE_COMBINATION_ID,
9306                 PERIOD_NAME,
9307                 JOURNAL_ENTRY_NAME,
9308                 DOCUMENT_NUMBER,
9309                 JOURNAL_ENTRY_LINE_NUMBER,
9310 		CLEARING_TRX_TYPE,
9311                 JOURNAL_CATEGORY,
9312                 BASE_AMOUNT,
9313                 RECEIPT_CLASS_ID,
9314                 RECEIPT_METHOD_ID,
9315                 RECEIPT_CLASS_NAME,
9316                 DEPOSIT_DATE,
9317                 VALUE_DATE,
9318                 REVERSED_RECEIPT_FLAG,
9319                 LEGAL_ENTITY_ID,
9320                 ORG_ID,
9321 		INVOICE_TEXT,
9322                 BANK_ACCOUNT_TEXT,
9323                 CUSTOMER_TEXT,
9324                 CE_BANK_ACCT_USE_ID,
9325 		'N'
9326           from 	ce_260_transactions_v
9327           where bank_account_id = p_bank_account_id;
9328 
9329             CE_AUTO_BANK_MATCH.av_260_inserted_flag := 'Y';
9330           END IF;  --  CE_AUTO_BANK_MATCH.av_260_inserted_flag = 'N'
9331 
9332         END IF;  -- l_matching_against
9333 
9334         IF l_matching_against IN ('MISC', 'MS', 'SM') THEN
9335           IF CE_AUTO_BANK_MATCH.av_222_inserted_flag = 'N' THEN
9336             cep_standard.debug('inserting data from ce_222_transactions_v');
9337             insert into ce_available_transactions_tmp
9338 		(seq_id,
9339 		ROW_ID,
9340 		MULTI_SELECT,
9341 		BANK_ACCOUNT_ID,
9342 		BANK_ACCOUNT_NAME,
9343 		BANK_ACCOUNT_NUM,
9344 		BANK_NAME,
9345 		BANK_BRANCH_NAME,
9346 		TRX_ID,
9347 		TRX_TYPE,
9348 		TYPE_MEANING,
9349 		TRX_NUMBER,
9350 		CHECK_NUMBER,
9351 		CURRENCY_CODE,
9352 		AMOUNT,
9353 		BANK_ACCOUNT_AMOUNT,
9354 		AMOUNT_CLEARED,
9355 		GL_DATE,
9356 		STATUS_DSP,
9357 		STATUS,
9358 		TRX_DATE,
9359 		CLEARED_DATE,
9360 		MATURITY_DATE,
9361 		EXCHANGE_RATE_DATE,
9362 		EXCHANGE_RATE_TYPE,
9363 		USER_EXCHANGE_RATE_TYPE,
9364 		EXCHANGE_RATE,
9365 		BANK_CHARGES,
9366 		BANK_ERRORS,
9367 		BATCH_NAME,
9368 		BATCH_ID,
9369 		AGENT_NAME,
9370 		CUSTOMER_NAME,
9371 		PAYMENT_METHOD,
9372 		VENDOR_NAME,
9373 		CUSTOMER_ID,
9374 		SUPPLIER_ID,
9375 		REFERENCE_TYPE_DSP,
9376 		REFERENCE_TYPE,
9377 		REFERENCE_ID,
9378 		ACTUAL_AMOUNT_CLEARED,
9379 		CREATION_DATE,
9380 		CREATED_BY,
9381 		LAST_UPDATE_DATE,
9382 		LAST_UPDATED_BY,
9383 		REMITTANCE_NUMBER,
9384 		CASH_RECEIPT_ID,
9385 		APPLICATION_ID,
9386 		COUNT_CLEARED,
9387 		BANK_CURRENCY_CODE,
9388 		TRX_CURRENCY_TYPE,
9389 		CODE_COMBINATION_ID,
9390 		PERIOD_NAME,
9391 		JOURNAL_ENTRY_NAME,
9392 		DOCUMENT_NUMBER,
9393 		JOURNAL_ENTRY_LINE_NUMBER,
9394 		CLEARING_TRX_TYPE,
9395 		JOURNAL_CATEGORY,
9396 		BASE_AMOUNT,
9397 		RECEIPT_CLASS_ID,
9398 		RECEIPT_METHOD_ID,
9399 		RECEIPT_CLASS_NAME,
9400 		DEPOSIT_DATE,
9401 		VALUE_DATE,
9402 		REVERSED_RECEIPT_FLAG,
9403 		LEGAL_ENTITY_ID,
9404 		ORG_ID,
9405 		CE_BANK_ACCT_USE_ID,
9406 		RECONCILED_STATUS_FLAG)
9407       select	ce_available_transactions_s.nextval,
9408 		ROW_ID,
9409                 MULTI_SELECT,
9410                 BANK_ACCOUNT_ID,
9411                 BANK_ACCOUNT_NAME,
9412                 BANK_ACCOUNT_NUM,
9413                 BANK_NAME,
9414                 BANK_BRANCH_NAME,
9415                 TRX_ID,
9416                 TRX_TYPE,
9417                 TYPE_MEANING,
9418                 TRX_NUMBER,
9419                 CHECK_NUMBER,
9420 		CURRENCY_CODE,
9421                 AMOUNT,
9422                 BANK_ACCOUNT_AMOUNT,
9423                 AMOUNT_CLEARED,
9424                 GL_DATE,
9425                 STATUS_DSP,
9426                 STATUS,
9427                 TRX_DATE,
9428                 CLEARED_DATE,
9429                 MATURITY_DATE,
9430                 EXCHANGE_RATE_DATE,
9431                 EXCHANGE_RATE_TYPE,
9432                 USER_EXCHANGE_RATE_TYPE,
9433                 EXCHANGE_RATE,
9434                 BANK_CHARGES,
9435                 BANK_ERRORS,
9436                 BATCH_NAME,
9437                 BATCH_ID,
9438                 AGENT_NAME,
9439                 CUSTOMER_NAME,
9440                 PAYMENT_METHOD,
9441 		VENDOR_NAME,
9442                 CUSTOMER_ID,
9443                 SUPPLIER_ID,
9444                 REFERENCE_TYPE_DSP,
9445                 REFERENCE_TYPE,
9446                 REFERENCE_ID,
9447                 ACTUAL_AMOUNT_CLEARED,
9448                 CREATION_DATE,
9449                 CREATED_BY,
9450                 LAST_UPDATE_DATE,
9451                 LAST_UPDATED_BY,
9452                 REMITTANCE_NUMBER,
9453                 CASH_RECEIPT_ID,
9454                 APPLICATION_ID,
9455                 COUNT_CLEARED,
9456                 BANK_CURRENCY_CODE,
9457                 TRX_CURRENCY_TYPE,
9458                 CODE_COMBINATION_ID,
9459                 PERIOD_NAME,
9460                 JOURNAL_ENTRY_NAME,
9461                 DOCUMENT_NUMBER,
9462                 JOURNAL_ENTRY_LINE_NUMBER,
9463 		CLEARING_TRX_TYPE,
9464                 JOURNAL_CATEGORY,
9465                 BASE_AMOUNT,
9466                 RECEIPT_CLASS_ID,
9467                 RECEIPT_METHOD_ID,
9468                 RECEIPT_CLASS_NAME,
9469                 DEPOSIT_DATE,
9470                 VALUE_DATE,
9471                 REVERSED_RECEIPT_FLAG,
9472                 LEGAL_ENTITY_ID,
9473                 ORG_ID,
9474                 CE_BANK_ACCT_USE_ID,
9475 		'N'
9476           from  ce_222_transactions_v
9477           where bank_account_id = p_bank_account_id;
9478 
9479             CE_AUTO_BANK_MATCH.av_222_inserted_flag := 'Y';
9480           END IF;  -- CE_AUTO_BANK_MATCH.av_222_inserted_flag = 'N'
9481         END IF;   -- l_matching_against
9482 
9483       ELSIF l_trx_type IN ('REJECTED', 'NSF') THEN
9484         IF CE_AUTO_BANK_MATCH.av_222_inserted_flag = 'N' THEN
9485           cep_standard.debug('inserting data from ce_222_transactions_v');
9486 
9487           insert into ce_available_transactions_tmp
9488 		(seq_id,
9489 		ROW_ID,
9490 		MULTI_SELECT,
9491 		BANK_ACCOUNT_ID,
9492 		BANK_ACCOUNT_NAME,
9493 		BANK_ACCOUNT_NUM,
9494 		BANK_NAME,
9495 		BANK_BRANCH_NAME,
9496 		TRX_ID,
9497 		TRX_TYPE,
9498 		TYPE_MEANING,
9499 		TRX_NUMBER,
9500 		CHECK_NUMBER,
9501 		CURRENCY_CODE,
9502 		AMOUNT,
9503 		BANK_ACCOUNT_AMOUNT,
9504 		AMOUNT_CLEARED,
9505 		GL_DATE,
9506 		STATUS_DSP,
9507 		STATUS,
9508 		TRX_DATE,
9509 		CLEARED_DATE,
9510 		MATURITY_DATE,
9511 		EXCHANGE_RATE_DATE,
9512 		EXCHANGE_RATE_TYPE,
9513 		USER_EXCHANGE_RATE_TYPE,
9514 		EXCHANGE_RATE,
9515 		BANK_CHARGES,
9516 		BANK_ERRORS,
9517 		BATCH_NAME,
9518 		BATCH_ID,
9519 		AGENT_NAME,
9520 		CUSTOMER_NAME,
9521 		PAYMENT_METHOD,
9522 		VENDOR_NAME,
9523 		CUSTOMER_ID,
9524 		SUPPLIER_ID,
9525 		REFERENCE_TYPE_DSP,
9526 		REFERENCE_TYPE,
9527 		REFERENCE_ID,
9528 		ACTUAL_AMOUNT_CLEARED,
9529 		CREATION_DATE,
9530 		CREATED_BY,
9531 		LAST_UPDATE_DATE,
9532 		LAST_UPDATED_BY,
9533 		REMITTANCE_NUMBER,
9534 		CASH_RECEIPT_ID,
9535 		APPLICATION_ID,
9536 		COUNT_CLEARED,
9537 		BANK_CURRENCY_CODE,
9538 		TRX_CURRENCY_TYPE,
9539 		CODE_COMBINATION_ID,
9540 		PERIOD_NAME,
9541 		JOURNAL_ENTRY_NAME,
9542 		DOCUMENT_NUMBER,
9543 		JOURNAL_ENTRY_LINE_NUMBER,
9544 		CLEARING_TRX_TYPE,
9545 		JOURNAL_CATEGORY,
9546 		BASE_AMOUNT,
9547 		RECEIPT_CLASS_ID,
9548 		RECEIPT_METHOD_ID,
9549 		RECEIPT_CLASS_NAME,
9550 		DEPOSIT_DATE,
9551 		VALUE_DATE,
9552 		REVERSED_RECEIPT_FLAG,
9553 		LEGAL_ENTITY_ID,
9554 		ORG_ID,
9555 		CE_BANK_ACCT_USE_ID,
9556 		RECONCILED_STATUS_FLAG)
9557       select	ce_available_transactions_s.nextval,
9558 		ROW_ID,
9559                 MULTI_SELECT,
9560                 BANK_ACCOUNT_ID,
9561                 BANK_ACCOUNT_NAME,
9562                 BANK_ACCOUNT_NUM,
9563                 BANK_NAME,
9564                 BANK_BRANCH_NAME,
9565                 TRX_ID,
9566                 TRX_TYPE,
9567                 TYPE_MEANING,
9568                 TRX_NUMBER,
9569                 CHECK_NUMBER,
9570 		CURRENCY_CODE,
9571                 AMOUNT,
9572                 BANK_ACCOUNT_AMOUNT,
9573                 AMOUNT_CLEARED,
9574                 GL_DATE,
9575                 STATUS_DSP,
9576                 STATUS,
9577                 TRX_DATE,
9578                 CLEARED_DATE,
9579                 MATURITY_DATE,
9580                 EXCHANGE_RATE_DATE,
9581                 EXCHANGE_RATE_TYPE,
9582                 USER_EXCHANGE_RATE_TYPE,
9583                 EXCHANGE_RATE,
9584                 BANK_CHARGES,
9585                 BANK_ERRORS,
9586                 BATCH_NAME,
9587                 BATCH_ID,
9588                 AGENT_NAME,
9589                 CUSTOMER_NAME,
9590                 PAYMENT_METHOD,
9591 		VENDOR_NAME,
9592                 CUSTOMER_ID,
9593                 SUPPLIER_ID,
9594                 REFERENCE_TYPE_DSP,
9595                 REFERENCE_TYPE,
9596                 REFERENCE_ID,
9597                 ACTUAL_AMOUNT_CLEARED,
9598                 CREATION_DATE,
9599                 CREATED_BY,
9600                 LAST_UPDATE_DATE,
9601                 LAST_UPDATED_BY,
9602                 REMITTANCE_NUMBER,
9603                 CASH_RECEIPT_ID,
9604                 APPLICATION_ID,
9605                 COUNT_CLEARED,
9606                 BANK_CURRENCY_CODE,
9607                 TRX_CURRENCY_TYPE,
9608                 CODE_COMBINATION_ID,
9609                 PERIOD_NAME,
9610                 JOURNAL_ENTRY_NAME,
9611                 DOCUMENT_NUMBER,
9612                 JOURNAL_ENTRY_LINE_NUMBER,
9613 		CLEARING_TRX_TYPE,
9614                 JOURNAL_CATEGORY,
9615                 BASE_AMOUNT,
9616                 RECEIPT_CLASS_ID,
9617                 RECEIPT_METHOD_ID,
9618                 RECEIPT_CLASS_NAME,
9619                 DEPOSIT_DATE,
9620                 VALUE_DATE,
9621                 REVERSED_RECEIPT_FLAG,
9622                 LEGAL_ENTITY_ID,
9623                 ORG_ID,
9624                 CE_BANK_ACCT_USE_ID,
9625 		'N'
9626           from 	ce_222_transactions_v
9627           where bank_account_id = p_bank_account_id;
9628 
9629          CE_AUTO_BANK_MATCH.av_222_inserted_flag := 'Y';
9630        END IF;  -- av_222_inserted_flag = 'N'
9631       END IF;   -- l_trx_type
9632     END IF;  -- l_trx_source
9633   END LOOP;  -- r_trx_source cursor
9634   CLOSE r_trx_source;
9635 EXCEPTION
9636   WHEN OTHERS THEN
9637     cep_standard.debug('EXCEPTION: populate_available_gt');
9638     IF r_trx_source%ISOPEN THEN
9639       CLOSE r_trx_source;
9640     END IF;
9641     RAISE;
9642 END populate_available_gt;
9643 
9644 /* ---------------------------------------------------------------------
9645 |  PUBLIC PROCEDURE                                                     |
9646 |       update_gt_reconciled_status                                     |
9647 |                                                                       |
9648 |  DESCRIPTION                                                          |
9649 |       update the reconciled_status_flag of table                      |
9650 |       ce_available_transactions_tmp                                   |
9651 |                                                                       |
9652 |  CALLED BY                                                            |
9653 |       match_process                                                   |
9654 |       match_stmt_line_JE                                              |
9655 |       CE_AUTO_BANK_CLEAR1.reconcile_pbatch                            |
9656 |       CE_AUTO_BANK_CLEAR1.reconcile_rbatch                            |
9657 |       CE_AUTO_BANK_CLEAR1.reconcile_pay_eft                           |
9658 |                                                                       |
9659 |  HISTORY                                                              |
9660 |       11-MAY-2006        Xin Wang     Created                         |
9661  --------------------------------------------------------------------- */
9662 PROCEDURE update_gt_reconciled_status(p_seq_id	NUMBER,
9663 				      p_status	VARCHAR2) IS
9664 BEGIN
9665   update ce_available_transactions_tmp
9666   set    reconciled_status_flag = p_status
9667   where  seq_id = p_seq_id;
9668 EXCEPTION
9669   WHEN OTHERS THEN
9670     cep_standard.debug('EXCEPTION: update_gt_reconciled_status');
9671     RAISE;
9672 END update_gt_reconciled_status;
9673 
9674 
9675 /* ---------------------------------------------------------------------
9676 |  PUBLIC PROCEDURE                                                     |
9677 |       update_gt_reconciled_status                                     |
9678 |                                                                       |
9679 |  DESCRIPTION                                                          |
9680 |       update the reconciled_status_flag of table                      |
9681 |       ce_available_transactions_tmp                                   |
9682 |       mainly used to update the status to 'N' during unreconciliation |
9683 |                                                                       |
9684 |  CALLED BY                                                            |
9685 |       CE_AUTO_BANK_CLEAR1.unclear_process                             |
9686 |                                                                       |
9687 |  HISTORY                                                              |
9688 |       11-MAY-2006        Xin Wang     Created                         |
9689  --------------------------------------------------------------------- */
9690 PROCEDURE update_gt_reconciled_status(p_application_id          NUMBER,
9691                                       p_trx_id                  NUMBER,
9692                                       p_reconciled_status       VARCHAR2) IS
9693 BEGIN
9694   update ce_available_transactions_tmp
9695   set    reconciled_status_flag = p_reconciled_status
9696   where  application_id = p_application_id
9697   and	 trx_id = p_trx_id;
9698 EXCEPTION
9699   WHEN OTHERS THEN
9700     cep_standard.debug('EXCEPTION: update_gt_reconciled_status');
9701     RAISE;
9702 END update_gt_reconciled_status;
9703 
9704 /* ---------------------------------------------------------------------
9705 |  PUBLIC PROCEDURE                                                     |
9706 |       update_gt_reconciled_status                                     |
9707 |                                                                       |
9708 |  DESCRIPTION                                                          |
9709 |       update the reconciled_status_flag of table                      |
9710 |       ce_available_transactions_tmp                                   |
9711 |       mainly used to update the status to 'N' during 			|
9712 |	auto unreconciliation 						|
9713 |                                                                       |
9714 |  CALLED BY                                                            |
9715 |       CE_AUTO_BANK_CLEAR1.unclear_process                             |
9716 |                                                                       |
9717 |  HISTORY                                                              |
9718 |       11-MAY-2006        Xin Wang     Created                         |
9719  --------------------------------------------------------------------- */
9720 PROCEDURE update_gt_reconciled_status(p_reconciled_status       VARCHAR2) IS
9721 BEGIN
9722   update ce_available_transactions_tmp
9723   set    reconciled_status_flag = p_reconciled_status;
9724 EXCEPTION
9725   WHEN OTHERS THEN
9726     cep_standard.debug('EXCEPTION: update_gt_reconciled_status');
9727     RAISE;
9728 END update_gt_reconciled_status;
9729 
9730 
9731 /* ---------------------------------------------------------------------
9732 |  PRIVATE PROCEDURE							|
9733 |	match_process							|
9734 |									|
9735 |  DESCRIPTION								|
9736 |	Reconcile the imported statement.				|
9737 |									|
9738 |	Match statement lines by looping:				|
9739 |	1. r_branch_cursor - find all bank accounts
9740 |	2. r_bank_cursor - find all statements for each bank account
9741 |       3. line_cursor - find all statement lines for each statement
9742 |       4. trx_code_cursor - match each statement line based on the
9743 |                            trx code source by sequences		|
9744 |	5. Do not need to loop through each bank_acct_uses_id (OU/BG/LE)|
9745 |	   The base views ce_*_transactions_v already has the security	|
9746 |	   access.  If the org_id or legal_entity_id is passed, then we
9747 |          need to restrict the matching to the org_id/legal_entity_id.	|
9748 |	   If no org_id or legal_entity_id is passed, then we will
9749 |           match trx source across OUs/BGs/LEs.  This is to check for
9750 |           duplicates across OUs/BGs/LEs.  If a line could be
9751 |           reconciled to two trxns that have the same reference
9752 |           but happen to be in two different OUs, then the right
9753 |           thing is to flag them as duplicates. (Omar)
9754 |									|
9755 |  CALLS								|
9756 |	Lock_Statement							|
9757 |	Update_GL_Date							|
9758 |	CE_RECONCILIATION_ERRORS_PKG.delete_row				|
9759 |	Lock_Statement_Line						|
9760 |	Match_Statement_Line						|
9761 |	CE_AUTO_BANK_CLEAR.reconcile_process				|
9762 |	CE_RECONCILIATION_ERRORS_PKG.insert_row				|
9763 |	Get_Min_Statement_Line_Id					|
9764 |									|
9765 |  CALLED BY								|
9766 |	statement							|
9767  --------------------------------------------------------------------- */
9768 PROCEDURE match_process IS
9769   error_statement_line_id	CE_STATEMENT_LINES.statement_line_id%TYPE;
9770   lockhandle			VARCHAR2(128);
9771   lock_status			NUMBER;
9772   statement_line_count		NUMBER;
9773   i				NUMBER;
9774   j				NUMBER;
9775   rec_status                    NUMBER;
9776 --  account_type		CE_BANK_ACCOUNTS.account_classification%TYPE;
9777   accounting_method_found	NUMBER := 0;
9778   row_count                     NUMBER;
9779   ignore_trx_id		NUMBER;
9780   ignore_trx_id2		NUMBER;
9781   ignore_trx_id3		NUMBER;
9782   ignore_trx_id4		NUMBER;
9783   x_pay_count		NUMBER;
9784   current_org_id           NUMBER;
9785   x_trx_code_row_count        NUMBER;
9786 BEGIN
9787   /* Bug 3364143 - Start code fix */
9788    IF CE_AUTO_BANK_REC.G_ce_debug_flag in ('Y', 'C') THEN
9789           cep_standard.enable_debug(CE_AUTO_BANK_REC.G_debug_path,
9790 			      CE_AUTO_BANK_REC.G_debug_file);
9791   end if;
9792   /* Bug 3364143 - End code fix */
9793 
9794   cep_standard.debug('========== START MATCHING ========== ');
9795   cep_standard.debug('>>CE_AUTO_BANK_MATCH.match_process');
9796 
9797  -- populate ce_security_profiles_tmp table with ce_security_procfiles_v
9798  CEP_STANDARD.init_security;
9799 
9800 /* --bug3676745 move this down to after fetch r_branch_cursor
9801   cep_standard.debug('Get AR accounting method.');
9802 
9803   -- bug 1796965
9804   SELECT count(*)
9805   INTO	accounting_method_found
9806   FROM	ar_system_parameters s
9807   where s.org_id = CE_AUTO_BANK_REC.G_org_id;
9808 
9809   if (accounting_method_found = 1) then
9810     SELECT accounting_method
9811     INTO   CE_AUTO_BANK_MATCH.ar_accounting_method
9812     FROM   ar_system_parameters s
9813     where s.org_id = CE_AUTO_BANK_REC.G_org_id;
9814   else
9815     CE_AUTO_BANK_MATCH.ar_accounting_method := NULL;
9816   end if;
9817 */
9818   cep_standard.debug('>>CE_AUTO_BANK_MATCH.Opening r_branch_cursor');
9819   OPEN r_branch_cursor( CE_AUTO_BANK_REC.G_bank_branch_id,
9820 			CE_AUTO_BANK_REC.G_bank_account_id,
9821 			CE_AUTO_BANK_REC.G_org_id,
9822 			CE_AUTO_BANK_REC.G_legal_entity_id);
9823   j := 0;
9824   LOOP
9825     cep_standard.debug('>>CE_AUTO_BANK_MATCH.Fetching r_branch_cursor');
9826     FETCH r_branch_cursor INTO CE_AUTO_BANK_MATCH.csh_bank_account_id,
9827 				CE_AUTO_BANK_MATCH.ba_owner_le_id,
9828 				CE_AUTO_BANK_MATCH.aba_asset_code_combination_id;
9829 /*
9830     -- bug 5221561
9831     -- for every bank account, reinitialize the global temp variables
9832     CE_AUTO_BANK_MATCH.av_101_inserted_flag := 'N';
9833     CE_AUTO_BANK_MATCH.av_200_inserted_flag := 'N';
9834     CE_AUTO_BANK_MATCH.av_222_inserted_flag := 'N';
9835     CE_AUTO_BANK_MATCH.av_260_inserted_flag := 'N';
9836     CE_AUTO_BANK_MATCH.av_260_cf_inserted_flag := 'N';
9837     CE_AUTO_BANK_MATCH.av_801_inserted_flag := 'N';
9838     CE_AUTO_BANK_MATCH.av_801_eft_inserted_flag := 'N';
9839     CE_AUTO_BANK_MATCH.av_999_inserted_flag := 'N';
9840     CE_AUTO_BANK_MATCH.av_185_inserted_flag := 'N';
9841 
9842     -- populate the GT table
9843     populate_available_gt (CE_AUTO_BANK_MATCH.csh_bank_account_id);
9844 */
9845     cep_standard.debug('CE_AUTO_BANK_MATCH.csh_bank_account_id = '||CE_AUTO_BANK_MATCH.csh_bank_account_id);
9846 			--||', CE_AUTO_BANK_MATCH.bau_bank_acct_use_id = '||CE_AUTO_BANK_MATCH.bau_bank_acct_use_id);
9847 
9848    -- For each bank account set the use flag
9849    set_acct_type(CE_AUTO_BANK_MATCH.csh_bank_account_id);
9850 
9851 /*
9852     cep_standard.debug('CE_AUTO_BANK_MATCH.bau_org_id = '||CE_AUTO_BANK_MATCH.bau_org_id
9853 			||',CE_AUTO_BANK_MATCH.bau_legal_entity_id = '||CE_AUTO_BANK_MATCH.bau_legal_entity_id);
9854 
9855     select mo_global.GET_CURRENT_ORG_ID
9856     into current_org_id
9857     from dual;
9858 
9859     cep_standard.debug('current_org_id =' ||current_org_id );
9860 
9861     -- bug 3782741 set single org, since AR will not allow org_id to be passed
9862     --IF CE_AUTO_BANK_MATCH.bau_org_id is not null THEN
9863     IF CE_AUTO_BANK_REC.G_org_id is not null THEN
9864       IF  ((current_org_id is null) or (CE_AUTO_BANK_MATCH.bau_org_id <> current_org_id )) THEN
9865         mo_global.set_policy_context('S',CE_AUTO_BANK_MATCH.bau_org_id);
9866         cep_standard.debug('set current_org_id to ' ||CE_AUTO_BANK_MATCH.bau_org_id );
9867       END IF;
9868     END IF;
9869 
9870    cep_standard.debug('Get AR accounting method.');
9871 
9872  -- bug 1796965
9873   SELECT count(*)
9874   INTO	accounting_method_found
9875   FROM	ar_system_parameters s
9876   where s.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,CE_AUTO_BANK_MATCH.bau_org_id);
9877 
9878   if (accounting_method_found = 1) then
9879     SELECT accounting_method
9880     INTO   CE_AUTO_BANK_MATCH.ar_accounting_method
9881     FROM   ar_system_parameters s
9882     where s.org_id = nvl(CE_AUTO_BANK_REC.G_org_id,CE_AUTO_BANK_MATCH.bau_org_id);
9883   else
9884     CE_AUTO_BANK_MATCH.ar_accounting_method := NULL;
9885   end if;
9886 */
9887     -- bug 3676745 1/20/05 Did not enter organization (le_id and org_id missing)
9888     --   use match org_id and legal_entity_id
9889    -- if CE_AUTO_BANK_REC.G_legal_entity_id is not null then it has already been set by ceabrdrb.pls
9890   --IF (CE_AUTO_BANK_REC.G_legal_entity_id is null and CE_AUTO_BANK_REC.G_org_id is null) THEN
9891     --bug 4914608 get owner LE info from ce_system_parameters
9892   IF (CE_AUTO_BANK_REC.G_legal_entity_id is null) THEN
9893     --IF (CE_AUTO_BANK_MATCH.bau_org_id is not null or CE_AUTO_BANK_MATCH.bau_legal_entity_id is not null) THEN
9894     IF (CE_AUTO_BANK_MATCH.ba_owner_le_id is not null) THEN
9895         CE_SYSTEM_PARAMETERS1_PKG.select_columns(CE_AUTO_BANK_REC.G_rowid,
9896 				CE_AUTO_BANK_REC.G_set_of_books_id,
9897 				CE_AUTO_BANK_REC.G_cashbook_begin_date,
9898 				CE_AUTO_BANK_REC.G_show_cleared_flag,
9899                                 CE_AUTO_BANK_REC.G_show_void_payment_flag,
9900 				CE_AUTO_BANK_REC.G_line_autocreation_flag,
9901 			 	CE_AUTO_BANK_REC.G_interface_purge_flag,
9902 				CE_AUTO_BANK_REC.G_interface_archive_flag,
9903 				CE_AUTO_BANK_REC.G_lines_per_commit,
9904 				CE_AUTO_BANK_REC.G_functional_currency,
9905 				CE_AUTO_BANK_REC.G_sob_short_name,
9906 				CE_AUTO_BANK_REC.G_account_period_type,
9907 				CE_AUTO_BANK_REC.G_user_exchange_rate_type,
9908 				CE_AUTO_BANK_REC.G_chart_of_accounts_id,
9909 				CE_AUTO_BANK_REC.G_CASHFLOW_EXCHANGE_RATE_TYPE,
9910 				CE_AUTO_BANK_REC.G_AUTHORIZATION_BAT,
9911                                 CE_AUTO_BANK_REC.G_BSC_EXCHANGE_DATE_TYPE,
9912                                 CE_AUTO_BANK_REC.G_BAT_EXCHANGE_DATE_TYPE,
9913                                 CE_AUTO_BANK_MATCH.ba_owner_le_id
9914 			);
9915     END IF;
9916   END IF;
9917 
9918   -- bug 4914608 set bank account variables
9919   IF (CE_AUTO_BANK_MATCH.csh_bank_account_id is not null) THEN
9920 
9921         CE_SYSTEM_PARAMETERS1_PKG.ba_select_columns(CE_AUTO_BANK_MATCH.BA_ROWID,
9922 				CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance,
9923 				CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance,
9924 				CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance,
9925 				CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance,
9926 				CE_AUTO_BANK_MATCH.ba_ce_amount_tolerance,
9927 				CE_AUTO_BANK_MATCH.ba_ce_percent_tolerance,
9928 				CE_AUTO_BANK_REC.G_float_handling_flag,
9929 				CE_AUTO_BANK_REC.G_ap_matching_order,
9930 				CE_AUTO_BANK_REC.G_ar_matching_order,
9931 				CE_AUTO_BANK_REC.G_exchange_rate_type,
9932 				CE_AUTO_BANK_REC.G_exchange_rate_date,
9933 				CE_AUTO_BANK_REC.G_open_interface_flag,
9934 				CE_AUTO_BANK_REC.G_open_interface_float_status,
9935 				CE_AUTO_BANK_REC.G_open_interface_clear_status,
9936 				CE_AUTO_BANK_REC.G_open_interface_matching_code,
9937  				CE_AUTO_BANK_MATCH.BA_RECON_OI_AMOUNT_TOLERANCE,
9938  				CE_AUTO_BANK_MATCH.BA_RECON_OI_PERCENT_TOLERANCE,
9939 				ignore_trx_id,
9940 				ignore_trx_id2,
9941  				CE_AUTO_BANK_MATCH.BA_RECON_AP_FX_DIFF_HANDLING,
9942  				CE_AUTO_BANK_MATCH.BA_RECON_AR_FX_DIFF_HANDLING,
9943  				CE_AUTO_BANK_MATCH.BA_RECON_CE_FX_DIFF_HANDLING,
9944  				CE_AUTO_BANK_REC.G_differences_account,
9945  				CE_AUTO_BANK_REC.G_CE_DIFFERENCES_ACCOUNT,
9946                                 CE_AUTO_BANK_MATCH.ba_owner_le_id,
9947 				CE_AUTO_BANK_MATCH.csh_bank_account_id,
9948 				CE_AUTO_BANK_REC.G_ap_matching_order2 -- FOR SEPA ER 6700007
9949 			);
9950 
9951 
9952   END IF;
9953 
9954     cep_standard.debug('CE_AUTO_BANK_MATCH.BA_ROWID '|| CE_AUTO_BANK_MATCH.BA_ROWID);
9955     cep_standard.debug('CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance= ' || CE_AUTO_BANK_MATCH.ba_ap_amount_tolerance ||
9956 			', CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance= '||CE_AUTO_BANK_MATCH.ba_ap_percent_tolerance);
9957     cep_standard.debug('CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance= ' || CE_AUTO_BANK_MATCH.ba_ar_amount_tolerance ||
9958 			', CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance= '||CE_AUTO_BANK_MATCH.ba_ar_percent_tolerance);
9959     cep_standard.debug('CE_AUTO_BANK_MATCH.ba_ce_amount_tolerance= ' || CE_AUTO_BANK_MATCH.ba_ce_amount_tolerance ||
9960 			', CE_AUTO_BANK_MATCH.ba_ce_percent_tolerance= '||CE_AUTO_BANK_MATCH.ba_ce_percent_tolerance);
9961     cep_standard.debug('CE_AUTO_BANK_REC.G_float_handling_flag='||CE_AUTO_BANK_REC.G_float_handling_flag ||
9962 			', CE_AUTO_BANK_REC.G_ap_matching_order ='|| CE_AUTO_BANK_REC.G_ap_matching_order ||
9963 			', CE_AUTO_BANK_REC.G_ar_matching_order ='|| CE_AUTO_BANK_REC.G_ar_matching_order);
9964     cep_standard.debug('CE_AUTO_BANK_REC.G_exchange_rate_type='||CE_AUTO_BANK_REC.G_exchange_rate_type ||
9965 			', CE_AUTO_BANK_REC.G_exchange_rate_date='|| CE_AUTO_BANK_REC.G_exchange_rate_date);
9966     cep_standard.debug('CE_AUTO_BANK_REC.G_open_interface_flag='|| CE_AUTO_BANK_REC.G_open_interface_flag||
9967 			', REC.G_open_interface_float_status='|| CE_AUTO_BANK_REC.G_open_interface_float_status  ||
9968 			', REC.G_open_interface_clear_status='||  CE_AUTO_BANK_REC.G_open_interface_clear_status);
9969     cep_standard.debug('REC.G_open_interface_matching_code='||CE_AUTO_BANK_REC.G_open_interface_matching_code||
9970 			', BA_RECON_OI_AMOUNT_TOLERANCE='|| BA_RECON_OI_AMOUNT_TOLERANCE ||
9971 			', BA_RECON_OI_PERCENT_TOLERANCE='|| BA_RECON_OI_PERCENT_TOLERANCE);
9972     cep_standard.debug('BA_RECON_AP_FX_DIFF_HANDLING='|| BA_RECON_AP_FX_DIFF_HANDLING ||
9973 			', BA_RECON_AR_FX_DIFF_HANDLING='||  BA_RECON_AR_FX_DIFF_HANDLING ||
9974 			', BA_RECON_CE_FX_DIFF_HANDLING='|| BA_RECON_CE_FX_DIFF_HANDLING);
9975     cep_standard.debug('REC.G_differences_account=' || CE_AUTO_BANK_REC.G_differences_account ||
9976 			', REC.G_CE_DIFFERENCES_ACCOUNT=' ||  CE_AUTO_BANK_REC.G_CE_DIFFERENCES_ACCOUNT);
9977 
9978 
9979 
9980   IF (r_branch_cursor%ROWCOUNT = j) THEN
9981       EXIT;
9982   ELSE
9983       j := r_branch_cursor%ROWCOUNT;
9984       -- bug 5221561
9985     -- for every bank account, reinitialize the global temp variables
9986     CE_AUTO_BANK_MATCH.av_101_inserted_flag := 'N';
9987     CE_AUTO_BANK_MATCH.av_200_inserted_flag := 'N';
9988     CE_AUTO_BANK_MATCH.av_222_inserted_flag := 'N';
9989     CE_AUTO_BANK_MATCH.av_260_inserted_flag := 'N';
9990     CE_AUTO_BANK_MATCH.av_260_cf_inserted_flag := 'N';
9991     CE_AUTO_BANK_MATCH.av_801_inserted_flag := 'N';
9992     CE_AUTO_BANK_MATCH.av_801_eft_inserted_flag := 'N';
9993     CE_AUTO_BANK_MATCH.av_999_inserted_flag := 'N';
9994 --    CE_AUTO_BANK_MATCH.av_185_inserted_flag := 'N'; Bug 7356199
9995 
9996     -- populate the GT table
9997     populate_available_gt (CE_AUTO_BANK_MATCH.csh_bank_account_id);
9998   END IF;
9999 
10000     cep_standard.debug('>>CE_AUTO_BANK_MATCH.Opening r_bank_cursor');
10001     OPEN r_bank_cursor (CE_AUTO_BANK_REC.G_statement_number_from,
10002 		      CE_AUTO_BANK_REC.G_statement_number_to,
10003 		      CE_AUTO_BANK_REC.G_statement_date_from,
10004 		      CE_AUTO_BANK_REC.G_statement_date_to,
10005 		      CE_AUTO_BANK_MATCH.csh_bank_account_id);
10006     i := 0;
10007       LOOP
10008 	cep_standard.debug('>>CE_AUTO_BANK_MATCH.Fetching r_bank_cursor');
10009 	FETCH r_bank_cursor INTO CE_AUTO_BANK_MATCH.csh_statement_header_id,
10010 			     CE_AUTO_BANK_MATCH.csh_statement_number,
10011 			     CE_AUTO_BANK_MATCH.csh_statement_date,
10012 			     CE_AUTO_BANK_MATCH.csh_check_digits,
10013 			     CE_AUTO_BANK_MATCH.csh_statement_gl_date,
10014 			     CE_AUTO_BANK_MATCH.aba_bank_currency,
10015 			     CE_AUTO_BANK_MATCH.aba_multi_currency_flag,
10016 			     CE_AUTO_BANK_MATCH.aba_check_digits,
10017 			     CE_AUTO_BANK_MATCH.csh_rowid,
10018 			     CE_AUTO_BANK_MATCH.csh_statement_complete_flag;
10019 	cep_standard.debug('>>CE_AUTO_BANK_MATCH.After fetch header');
10020 	cep_standard.debug('>>CE_AUTO_BANK_MATCH.statement_header_id:' ||
10021 			CE_AUTO_BANK_MATCH.csh_statement_header_id );
10022 
10023 	if (r_bank_cursor%ROWCOUNT = i) then
10024 	  EXIT;
10025 	else
10026 	  i := r_bank_cursor%ROWCOUNT;
10027 	end if;
10028 	-- EXIT WHEN r_bank_cursor%NOTFOUND OR r_bank_cursor%NOTFOUND IS NULL;
10029 
10030         select count(1)
10031         into row_count
10032         from ce_statement_lines
10033         where statement_header_id = CE_AUTO_BANK_MATCH.csh_statement_header_id;
10034 
10035         if (row_count = 0 ) then
10036           CE_RECONCILIATION_ERRORS_PKG.delete_row(
10037                   CE_AUTO_BANK_MATCH.csh_statement_header_id,
10038                   to_number(NULL));
10039           CE_RECONCILIATION_ERRORS_PKG.insert_row(
10040                   CE_AUTO_BANK_MATCH.csh_statement_header_id,
10041                   to_number(NULL), 'CE_NO_STMT_LINE');
10042         end if;
10043 
10044 	IF (nvl(LTRIM(nvl(CE_AUTO_BANK_MATCH.csh_check_digits, 'NO DIGIT'),
10045 		'0'), '0') = nvl(LTRIM(nvl(CE_AUTO_BANK_MATCH.aba_check_digits,
10046 		'NO DIGIT'), '0'), '0')) THEN
10047 
10048 	  --
10049 	  -- Lock the statement
10050 	  --
10051 	  IF (lock_statement(lockhandle)) THEN
10052 	    IF (csh_statement_complete_flag = 'N') THEN
10053 
10054 	   /*   Select count(*)
10055 	      into x_pay_count
10056 	      from ce_bank_acct_uses_all bau, CE_SECURITY_PROFILES_GT OU
10057 	      where bau.PAY_USE_ENABLE_FLAG = 'Y'
10058 	      and sysdate <= nvl(end_date,sysdate)
10059 	      and BANK_ACCOUNT_ID = CE_AUTO_BANK_MATCH.csh_bank_account_id
10060 	      --and BAU.bank_acct_use_id = CE_AUTO_BANK_MATCH.bau_bank_acct_use_id
10061 	      and BAU.ORG_ID = nvl(CE_AUTO_BANK_REC.G_org_id, BAU.ORG_ID)
10062 	      and BAU.ORG_ID = OU.ORGANIZATION_ID
10063 	      AND OU.ORGANIZATION_TYPE = 'BUSINESS_GROUP';
10064 	   */
10065 	  /*  SELECT aba.account_classification
10066 	      INTO   account_type
10067 	      FROM   ce_bank_accounts_v aba
10068 	      WHERE  aba.bank_account_id =
10069 		     CE_AUTO_BANK_MATCH.csh_bank_account_id;
10070 	 */
10071 	     -- IF account_type <> 'PAYROLL' THEN
10072 	      --IF (x_pay_count  <> 0) THEN
10073 	      IF (CE_AUTO_BANK_MATCH.BAU_PAY_USE_ENABLE_FLAG <> 'Y') THEN
10074 		update_gl_date;
10075 	      END IF;
10076 	      statement_line_count := 0;
10077 
10078 	      --
10079 	      -- Read in all the lines on the statement for the selected bank
10080 	      -- account.
10081 	      --
10082     	      cep_standard.debug('>>CE_AUTO_BANK_MATCH.Opening line_cursor');
10083 	      OPEN line_cursor (CE_AUTO_BANK_MATCH.csh_statement_header_id);
10084 	      LOOP
10085 		FETCH line_cursor INTO CE_AUTO_BANK_MATCH.csl_rowid,
10086 			 CE_AUTO_BANK_MATCH.csl_statement_line_id,
10087 			 --CE_AUTO_BANK_MATCH.csl_receivables_trx_id,
10088 			 --CE_AUTO_BANK_MATCH.csl_receipt_method_id,
10089 			 --CE_AUTO_BANK_MATCH.csl_create_misc_trx_flag,
10090 			 --CE_AUTO_BANK_MATCH.csl_matching_against,
10091 			 --CE_AUTO_BANK_MATCH.csl_correction_method,
10092 			 --CE_AUTO_BANK_MATCH.csl_receipt_method_name,
10093 			 CE_AUTO_BANK_MATCH.csl_exchange_rate_type,
10094 			 CE_AUTO_BANK_MATCH.csl_exchange_rate_date,
10095 			 CE_AUTO_BANK_MATCH.csl_exchange_rate,
10096 			 CE_AUTO_BANK_MATCH.csl_currency_code,
10097 			 CE_AUTO_BANK_MATCH.csl_line_trx_type,
10098 			 --CE_AUTO_BANK_MATCH.csl_reconcile_flag,
10099 			 CE_AUTO_BANK_MATCH.csl_match_found,
10100 			 CE_AUTO_BANK_MATCH.csl_match_type,
10101 			 CE_AUTO_BANK_MATCH.csl_clearing_trx_type,
10102 			 CE_AUTO_BANK_MATCH.csl_original_amount,
10103 			 --CE_AUTO_BANK_MATCH.csl_payroll_payment_format,
10104 			 CE_AUTO_BANK_MATCH.csl_je_status_flag,
10105 			 CE_AUTO_BANK_MATCH.csl_accounting_date,
10106 			 --CE_AUTO_BANK_MATCH.csl_event_id,
10107 			 CE_AUTO_BANK_MATCH.csl_cashflow_id,
10108 			ignore_trx_id,
10109 			ignore_trx_id2	;
10110 		EXIT WHEN line_cursor%NOTFOUND OR line_cursor%NOTFOUND IS NULL;
10111 
10112 		cep_standard.debug('========= new statement line ============ ');
10113 
10114 		cep_standard.debug('CE_AUTO_BANK_MATCH.csl_statement_line_id = '|| CE_AUTO_BANK_MATCH.csl_statement_line_id
10115 				 ||' CE_AUTO_BANK_MATCH.csl_payroll_payment_format = '|| CE_AUTO_BANK_MATCH.csl_payroll_payment_format
10116 				 ||' CE_AUTO_BANK_MATCH.csl_cashflow_id = '|| CE_AUTO_BANK_MATCH.csl_cashflow_id);
10117 
10118 
10119 		select count(*)
10120 		into   rec_status
10121 		--from   ce_statement_reconciliations
10122 		from   ce_statement_reconcils_all
10123 		where  statement_line_id =
10124 		       CE_AUTO_BANK_MATCH.csl_statement_line_id
10125 		and    nvl(status_flag, 'U') = 'M'
10126 		and    nvl(current_record_flag, 'Y') = 'Y';
10127 
10128 		if (rec_status = 0) then
10129 
10130 		  --
10131 		  -- NULL values to transaction holders
10132 		  --
10133 		  CE_AUTO_BANK_MATCH.trx_id		 := to_number(NULL);
10134 		  CE_AUTO_BANK_MATCH.trx_cash_receipt_id := to_number(NULL);
10135 		  CE_AUTO_BANK_MATCH.trx_rowid		 := NULL;
10136 		  CE_AUTO_BANK_MATCH.trx_currency_code	 := NULL;
10137 		  CE_AUTO_BANK_MATCH.trx_amount		 := to_number(NULL);
10138 		  CE_AUTO_BANK_MATCH.trx_base_amount	 := to_number(NULL);
10139 		  CE_AUTO_BANK_MATCH.trx_cleared_amount	 := to_number(NULL);
10140 		  CE_AUTO_BANK_MATCH.trx_curr_amount	 := to_number(NULL);
10141 		  CE_AUTO_BANK_MATCH.trx_currency_type   := NULL;
10142 		  CE_AUTO_BANK_MATCH.trx_status		 := NULL;
10143 		  CE_AUTO_BANK_MATCH.trx_errors_amount	 := to_number(NULL);
10144 		  CE_AUTO_BANK_MATCH.trx_charges_amount	 := to_number(NULL);
10145 		  CE_AUTO_BANK_MATCH.trx_prorate_amount	 := to_number(NULL);
10146 		  CE_AUTO_BANK_MATCH.trx_reference_type  := NULL;
10147 		  CE_AUTO_BANK_MATCH.trx_value_date      := to_date(NULL);
10148 		  CE_AUTO_BANK_MATCH.trx_cleared_date    := to_date(NULL);
10149 		  CE_AUTO_BANK_MATCH.trx_deposit_date    := to_date(NULL);
10150 		  CE_AUTO_BANK_MATCH.trx_legal_entity_id := to_number(NULL);
10151 		  CE_AUTO_BANK_MATCH.trx_org_id := to_number(NULL);
10152 		  CE_AUTO_BANK_MATCH.gt_seq_id 		 := to_number(NULL);
10153                   CE_AUTO_BANK_MATCH.gt_seq_id2          := to_number(NULL);
10154 		/* for bug 6786355 start */
10155 		  CE_AUTO_BANK_MATCH.trx_exchange_rate       := to_number(NULL);
10156 		  CE_AUTO_BANK_MATCH.trx_exchange_rate_date  := to_date(NULL);
10157 		  CE_AUTO_BANK_MATCH.trx_exchange_rate_type  := NULL;
10158 		  CE_AUTO_BANK_MATCH.trx_gl_date             := to_date(NULL);
10159                   CE_AUTO_BANK_MATCH.trx_date                := to_date(NULL);
10160 		  CE_AUTO_BANK_MATCH.trx_value_date          := to_date(NULL);
10161 		  CE_AUTO_BANK_MATCH.trx_deposit_date        := to_date(NULL);
10162 		/* for bug 6786355 end */
10163 
10164 		  statement_line_count := statement_line_count + 1;
10165 		  --
10166 		  -- Clear recon_errors table
10167 		  --
10168 		  CE_RECONCILIATION_ERRORS_PKG.delete_row(
10169 			CE_AUTO_BANK_MATCH.csh_statement_header_id,
10170 			CE_AUTO_BANK_MATCH.csl_statement_line_id);
10171 		  IF (lock_statement_line) THEN
10172 		    --
10173 		    -- On the statement line MISC_DEBIT amounts will come
10174 		    -- through as a positive amount but the transaction
10175 		    -- will be negative.  If the transaction is a
10176 		    -- MISC_DEBIT, reverse the sign on the amount.
10177 		    --
10178 			/* JEC Bug 4234483 modified the IF condition below */
10179 		   -- bug 4435028 amount in ce_cashflows should be positive ??
10180 		/*
10181 		    IF (CE_AUTO_BANK_MATCH.csl_trx_type = 'MISC_DEBIT' and
10182 				(CE_AUTO_BANK_MATCH.csl_je_status_flag is null OR
10183 				(CE_AUTO_BANK_MATCH.csl_je_status_flag <> 'C'))) THEN
10184 		      CE_AUTO_BANK_MATCH.calc_csl_amount :=
10185 			  CE_AUTO_BANK_MATCH.csl_amount * -1;
10186 		    ELSE
10187 		      CE_AUTO_BANK_MATCH.calc_csl_amount :=
10188 			  CE_AUTO_BANK_MATCH.csl_amount;
10189 		    END IF;
10190 		*/
10191 
10192 
10193 		--BUG NO. 6136002
10194 		 IF (CE_AUTO_BANK_MATCH.csl_trx_type = 'MISC_DEBIT' and
10195 		    (CE_AUTO_BANK_MATCH.csl_cashflow_id is null)) THEN
10196 			  CE_AUTO_BANK_MATCH.calc_csl_amount :=
10197 			  CE_AUTO_BANK_MATCH.csl_amount * -1;
10198 		 ELSE
10199 			  CE_AUTO_BANK_MATCH.calc_csl_amount :=
10200 			  CE_AUTO_BANK_MATCH.csl_amount;
10201 		 END IF;
10202 
10203 		--CE_AUTO_BANK_MATCH.calc_csl_amount := CE_AUTO_BANK_MATCH.csl_amount;
10204 
10205 		 cep_standard.debug('CE_AUTO_BANK_MATCH.calc_csl_amount = '|| CE_AUTO_BANK_MATCH.calc_csl_amount);
10206 
10207 		/*JEC*/
10208 		-- bug4435028
10209 		--IF(CE_AUTO_BANK_MATCH.csl_je_status_flag = 'C') THEN
10210 		    IF(CE_AUTO_BANK_MATCH.csl_cashflow_id is not null) THEN  --this will handle JEC/ZBA(?) trx
10211 			match_stmt_line_JE;
10212 		    ELSE
10213 		    -- bug 4435028 multi-matching based on trx_code
10214     	      	      cep_standard.debug('>>CE_AUTO_BANK_MATCH.Opening trx_code_cursor');
10215 
10216  		      OPEN trx_code_cursor (CE_AUTO_BANK_MATCH.csl_statement_line_id,CE_AUTO_BANK_MATCH.csh_bank_account_id);
10217 		      LOOP
10218 		        FETCH trx_code_cursor INTO
10219 			  CE_AUTO_BANK_MATCH.csl_receivables_trx_id,
10220 			  CE_AUTO_BANK_MATCH.csl_receipt_method_id,
10221 			  CE_AUTO_BANK_MATCH.csl_create_misc_trx_flag,
10222 			  CE_AUTO_BANK_MATCH.csl_matching_against,
10223 			  CE_AUTO_BANK_MATCH.csl_correction_method,
10224 			  CE_AUTO_BANK_MATCH.csl_receipt_method_name,
10225 			  CE_AUTO_BANK_MATCH.csl_reconcile_flag,
10226 			  CE_AUTO_BANK_MATCH.csl_payroll_payment_format;
10227 
10228 	                EXIT WHEN trx_code_cursor%NOTFOUND OR trx_code_cursor%NOTFOUND IS NULL;
10229 
10230 		cep_standard.debug('CE_AUTO_BANK_MATCH.csl_reconcile_flag = '|| CE_AUTO_BANK_MATCH.csl_reconcile_flag
10231 				 ||', CE_AUTO_BANK_MATCH.csl_matching_against = '|| CE_AUTO_BANK_MATCH.csl_matching_against
10232 				 ||', CE_AUTO_BANK_MATCH.csl_payroll_payment_format = '|| CE_AUTO_BANK_MATCH.csl_payroll_payment_format);
10233 
10234 		cep_standard.debug('CE_AUTO_BANK_MATCH.csl_match_found = '|| CE_AUTO_BANK_MATCH.csl_match_found);
10235 
10236 		        IF (CE_AUTO_BANK_MATCH.csl_match_found IN ('ERROR','NONE','PARTIAL') ) THEN
10237 
10238 		          CE_AUTO_BANK_MATCH.match_engine;
10239 
10240 			  cep_standard.debug('CE_AUTO_BANK_MATCH.csl_match_found = '|| CE_AUTO_BANK_MATCH.csl_match_found);
10241 		          IF (CE_AUTO_BANK_MATCH.csl_match_found = 'FULL') THEN
10242 
10243 			    -- bug 4914608 set the org after a match for AR/AP
10244 		            cep_standard.debug('CE_AUTO_BANK_MATCH.trx_org_id =' ||CE_AUTO_BANK_MATCH.trx_org_id);
10245 			    set_single_org(CE_AUTO_BANK_MATCH.trx_org_id);
10246 
10247 			    CE_AUTO_BANK_CLEAR.reconcile_process;
10248 
10249 			    -- after a match and reconcilation,
10250 			    -- update the ce_available_transactions_tmp.reconciled_status_flag
10251 			    IF (CE_AUTO_BANK_MATCH.gt_seq_id is not null) AND
10252 			       (CE_AUTO_BANK_MATCH.gt_seq_id <> -1) THEN
10253 			      update_gt_reconciled_status (CE_AUTO_BANK_MATCH.gt_seq_id, 'Y');
10254 			      --update ce_available_transactions_tmp
10255 			      --set    reconciled_status_flag = 'Y'
10256 			      --where  seq_id = CE_AUTO_BANK_MATCH.gt_seq_id;
10257 			    END IF;
10258 
10259 			    IF CE_AUTO_BANK_MATCH.gt_seq_id2 is not null THEN
10260                               update_gt_reconciled_status (CE_AUTO_BANK_MATCH.gt_seq_id2, 'Y');
10261                               --update ce_available_transactions_tmp
10262                               --set    reconciled_status_flag = 'Y'
10263                               --where  seq_id = CE_AUTO_BANK_MATCH.gt_seq_id2;
10264                             END IF;
10265 
10266 
10267 		          -- Bug 900251 - remove this default message.
10268 		          --ELSIF (CE_AUTO_BANK_MATCH.csl_match_found IN
10269 			  --  ('NONE','PARTIAL')) THEN
10270 		          --  CE_RECONCILIATION_ERRORS_PKG.insert_row(
10271 			  --    CE_AUTO_BANK_MATCH.csh_statement_header_id,
10272 			  --    CE_AUTO_BANK_MATCH.csl_statement_line_id,
10273 			  --    'CE_DR_NOT_FOUND');
10274 		          --
10275 		          END IF;  --CE_AUTO_BANK_MATCH.csl_match_found = FULL
10276 		        END IF; --CE_AUTO_BANK_MATCH.csl_match_found IN ('ERROR','NONE','PARTIAL')
10277       		      END LOOP; -- trx_code_cursor
10278 
10279                         x_trx_code_row_count := trx_code_cursor%ROWCOUNT;
10280                         cep_standard.debug('x_trx_code_row_count  = '||  x_trx_code_row_count );
10281 
10282 		      CLOSE trx_code_cursor;
10283 		    END IF; -- cashflow_id is not null
10284 		  ELSE -- statement line is locked
10285 		    CE_RECONCILIATION_ERRORS_PKG.insert_row(
10286 			CE_AUTO_BANK_MATCH.csh_statement_header_id,
10287 			CE_AUTO_BANK_MATCH.csl_statement_line_id,
10288 			'CE_LINE_LOCKED');
10289 		  END IF;
10290 		  IF (statement_line_count =
10291 		      CE_AUTO_BANK_REC.G_lines_per_commit) THEN
10292 		    COMMIT;
10293 		    statement_line_count := 0;
10294 		  END IF;
10295 
10296 		end if;   --  rec_status = 0
10297 	      END LOOP; -- statement lines
10298 	      CLOSE line_cursor;
10299 
10300 	    ELSE
10301 	      error_statement_line_id := get_min_statement_line_id;
10302 	      CE_RECONCILIATION_ERRORS_PKG.delete_row(
10303 		  CE_AUTO_BANK_MATCH.csh_statement_header_id,
10304 		  error_statement_line_id);
10305 	      CE_RECONCILIATION_ERRORS_PKG.insert_row(
10306 		  CE_AUTO_BANK_MATCH.csh_statement_header_id,
10307 		  error_statement_line_id, 'CE_STATEMENT_COMPLETED');
10308 	  END IF; -- statement completed
10309 
10310 	ELSE -- statement is locked
10311 	/*      error_statement_line_id := get_min_statement_line_id;
10312 	      CE_RECONCILIATION_ERRORS_PKG.delete_row(error_statement_line_id);
10313 	      CE_RECONCILIATION_ERRORS_PKG.insert_row(
10314 		  error_statement_line_id,'CE_LOCK_STATEMENT_HEADER_ERR');
10315 	*/
10316 	  CE_RECONCILIATION_ERRORS_PKG.delete_row(
10317 	      CE_AUTO_BANK_MATCH.csh_statement_header_id, to_number(NULL));
10318 	      CE_RECONCILIATION_ERRORS_PKG.insert_row(
10319 		  CE_AUTO_BANK_MATCH.csh_statement_header_id,to_number(NULL),
10320 		  'CE_LOCK_STATEMENT_HEADER_ERR');
10321 	END IF;
10322 	lock_status := dbms_lock.release(lockhandle);
10323 
10324       ELSE -- check digits failed
10325 	/*        error_statement_line_id := get_min_statement_line_id;
10326 		CE_RECONCILIATION_ERRORS_PKG.delete_row(error_statement_line_id);
10327 		CE_RECONCILIATION_ERRORS_PKG.insert_row(
10328 		error_statement_line_id,'CE_CHECK_DIGITS');
10329 	*/
10330 	CE_RECONCILIATION_ERRORS_PKG.delete_row(
10331 	    CE_AUTO_BANK_MATCH.csh_statement_header_id, to_number(NULL));
10332 	CE_RECONCILIATION_ERRORS_PKG.insert_row(
10333 	    CE_AUTO_BANK_MATCH.csh_statement_header_id,to_number(NULL),
10334 	    'CE_CHECK_DIGITS');
10335       END IF; -- check_digits
10336 
10337     END LOOP; -- statement headers
10338     CLOSE r_bank_cursor;
10339   END LOOP;
10340   CLOSE r_branch_cursor;
10341   cep_standard.debug('<<CE_AUTO_BANK_MATCH.match_process');
10342   cep_standard.debug('========== END MATCHING ========== ');
10343 
10344 /* Bug 3364143 start code fix */
10345   cep_standard.disable_debug(CE_AUTO_BANK_REC.G_display_debug);
10346 /* Bug 3364143 end code fix */
10347 EXCEPTION
10348   WHEN OTHERS THEN
10349     cep_standard.debug(' EXCEPTION: CE_AUTO_BANK_MATCH.match_process - OTHERS');
10350     IF r_branch_cursor%ISOPEN THEN
10351       CLOSE r_branch_cursor;
10352     END IF;
10353     IF r_bank_cursor%ISOPEN THEN
10354       CLOSE r_bank_cursor;
10355     END IF;
10356     IF line_cursor%ISOPEN THEN
10357       CLOSE line_cursor;
10358     END IF;
10359     IF trx_code_cursor%ISOPEN THEN
10360       CLOSE trx_code_cursor;
10361     END IF;
10362     lock_status := dbms_lock.release(lockhandle);
10363     cep_standard.debug('DEBUG: sqlcode:' || sqlcode );
10364     cep_standard.debug('DEBUG: sqlerrm:' || sqlerrm);
10365     RAISE;
10366 END match_process;
10367 
10368 END CE_AUTO_BANK_MATCH;