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