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