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