DBA Data[Home] [Help]

PACKAGE BODY: APPS.ZX_PTP_IMPORT

Source


1 PACKAGE BODY zx_ptp_import AS
2   /* $Header: zxptpimportb.pls 120.8.12020000.2 2012/12/03 10:41:36 srajapar noship $ */
3 
4   -- ==========================================================================
5   --                         Package variables
6   -- ==========================================================================
7 
8     G_PKG_NAME                   CONSTANT VARCHAR2(30):='ZX_PTP_IMPORT';
9     G_PROC_NAME                  VARCHAR2(30);
10     G_BATCH_ID                   NUMBER(22);
11     G_RETURN_STATUS              VARCHAR2(1);
12     G_MSG_DATA                   VARCHAR2(2000);
13     G_CUST_INTF_TABLE            VARCHAR2(30);
14     G_RECORD_TYPE_CODE           VARCHAR2(30);
15 
16     G_INTF_PTP_TABLE_NAME       VARCHAR2(30);
17     G_INTF_REG_TABLE_NAME       VARCHAR2(30);
18     G_INTF_EXE_TABLE_NAME       VARCHAR2(30);
19     G_INTF_RCA_TABLE_NAME       VARCHAR2(30);
20     G_INTF_CUS_TABLE_NAME       VARCHAR2(30);
21     G_INTF_SUP_TABLE_NAME       VARCHAR2(30);
22     G_INTF_SUP_SITE_TABLE_NAME  VARCHAR2(30);
23 
24     G_USER_ID                    fnd_user.user_id%TYPE;
25     G_LOGIN_ID                   fnd_user.last_update_login%TYPE;
26     G_REQUEST_ID                 NUMBER;
27     G_PROG_APPID                 zx_party_tax_profile.program_application_id%TYPE;
28     G_PROG_ID                    zx_party_tax_profile.program_id%TYPE;
29     G_SYSDATE                    DATE;
30     G_SESSION_LANG               VARCHAR2(99);
31 
32     G_MISS_CHAR                  VARCHAR2(1);
33     G_MISS_DATE                  DATE;
34     G_MISS_NUM                   NUMBER;
35     G_TRUE                       VARCHAR2(1);
36     G_FALSE                      VARCHAR2(1);
37 
38     G_CONC_RET_STS_SUCCESS       VARCHAR2(1);
39     G_CONC_RET_STS_WARNING       VARCHAR2(1);
40     G_CONC_RET_STS_ERROR         VARCHAR2(1);
41     G_CONC_RET_STS_UNEXP_ERROR   VARCHAR2(1);
42     G_PROG_INT_VAL               NUMBER(1);
43 
44     --
45     -- debug parameter constants
46     --
47     G_DEBUG_LEVEL_EXCEPTION      CONSTANT  NUMBER(1):= FND_LOG.LEVEL_EXCEPTION;
48     G_DEBUG_LEVEL_PROCEDURE      CONSTANT  NUMBER(1):= FND_LOG.LEVEL_PROCEDURE;
49     G_DEBUG_LEVEL_STATEMENT      CONSTANT  NUMBER(1):= FND_LOG.LEVEL_STATEMENT;
50     G_CURRENT_DEBUG_LEVEL_SET              NUMBER(5):= FND_LOG.G_CURRENT_RUNTIME_LEVEL;
51     G_DEBUG_LOG_HEADER                     VARCHAR2(30):= 'ZX.PLSQL.'||G_PKG_NAME||'.';
52     G_DEBUG_STATEMENT                      VARCHAR2(2000);
53 
54     G_RS_IN_PROCESS              NUMBER(2);
55     G_RS_ERROR                   NUMBER(2);
56     G_RS_TRN_COMPLETE            NUMBER(2);
57     G_RS_DFF_VAL_COMPLETE        NUMBER(2);
58     G_RS_VALID                   NUMBER(2);
59 
60     G_ES_PTP_MAND_PARAM_MISSING  NUMBER;
61     G_ES_PTP_TRANS_TYPE_INVALID  NUMBER;
62     G_ES_PTP_PARTY_TYPE_INVALID  NUMBER;
63     G_ES_PTP_PARTY_INVALID       NUMBER;
64     G_ES_PTP_PARTY_NAME_DUP      NUMBER;
65     G_ES_PTP_COUNTRY_INVALID     NUMBER;
66     G_ES_PTP_REG_NUM_INVALID     NUMBER;
67     G_ES_PTP_REG_TYPE_INVALID    NUMBER;
68     G_ES_PTP_ROUND_LEVEL_INVALID NUMBER;
69     G_ES_PTP_ROUND_RULE_INVALID  NUMBER;
70     G_ES_PTP_TAX_CLASS_INVALID   NUMBER;
71     G_ES_PTP_DUP_INTF_RECORD     NUMBER;
72     G_ES_PTP_INC_FLG_INVALID     NUMBER;
73     G_ES_PTP_APP_FLG_INVALID     NUMBER;
74     G_ES_PTP_OFF_FLG_RECORD      NUMBER;
75     G_ES_PTP_REG_NUM_DUP         NUMBER;
76 
77     G_ES_REG_MAND_PARAM_MISSING   NUMBER;
78     G_ES_REG_DUP_INTF_RECORD      NUMBER;
79     G_ES_REG_TRANS_TYPE_INVALID   NUMBER;
80     G_ES_REG_DATE_RANGE_INVALID   NUMBER;
81     G_ES_REG_REG_TYPE_INVALID     NUMBER;
82     G_ES_REG_REG_STAT_INVALID     NUMBER;
83     G_ES_REG_REG_SRC_INVALID      NUMBER;
84     G_ES_REG_REG_RSN_INVALID      NUMBER;
85     G_ES_REG_TAX_AUT_INVALID      NUMBER;
86     G_ES_REG_ROUND_RULE_INVALID   NUMBER;
87     G_ES_REG_INC_FLG_INVALID      NUMBER;
88     G_ES_REG_LGL_LOC_INVALID      NUMBER;
89     G_ES_REG_DEFREG_FLG_INVALID   NUMBER;
90     G_ES_REG_TAX_REG_INVALID      NUMBER;
91     G_ES_REG_TAX_PARAM_INVALID    NUMBER;
92     G_ES_REG_TAX_JUR_INVALID      NUMBER;
93     G_ES_REG_MULT_DEF_FLAG        NUMBER;
94     G_ES_REG_REG_NUM_DUP          NUMBER;
95     G_ES_REG_REG_NUM_INVALID      NUMBER;
96     G_ES_REG_TAX_AUT_REQ          NUMBER;
97     G_ES_REG_DATE_OVERLAP         NUMBER;
98 
99     G_ES_RCA_MAND_PARAM_MISSING   NUMBER;
100     G_ES_RCA_DUP_INTF_RECORD      NUMBER;
101     G_ES_RCA_TRANS_TYPE_INVALID   NUMBER;
102     G_ES_RCA_ENTY_CD_INVALID      NUMBER;
103     G_ES_RCA_DATE_RANGE_INVALID   NUMBER;
104     G_ES_RCA_REP_TYPE_INVALID     NUMBER;
105     G_ES_RCA_REP_CODE_INVALID     NUMBER;
106     G_ES_RCA_REP_CODE_VAL_INVALID NUMBER;
107     G_ES_RCA_DATE_OVERLAP         NUMBER;
108 
109     G_ES_EXE_DFF_INVALID          NUMBER;
110     G_ES_EXE_MAND_PARAM_MISSING   NUMBER;
111     G_ES_EXE_TRANS_TYPE_INVALID   NUMBER;
112     G_ES_EXE_EXMPT_RSN_INVALID    NUMBER;
113     G_ES_EXE_EXMPT_STS_INVALID    NUMBER;
114     G_ES_EXE_TAX_REG_INVALID      NUMBER;
115     G_ES_EXE_CNT_OWN_INVALID      NUMBER;
116     G_ES_EXE_TAX_PARAM_INVALID    NUMBER;
117     G_ES_EXE_TAX_STS_INVALID      NUMBER;
118     G_ES_EXE_TAX_JUR_INVALID      NUMBER;
119     G_ES_EXE_TAX_RATE_INVALID     NUMBER;
120     G_ES_EXE_LWR_LVL_FLG_INVALID  NUMBER;
121     G_ES_EXE_DATE_RANGE_INVALID   NUMBER;
122     G_ES_EXE_INV_ORG_INVALID      NUMBER;
123     G_ES_EXE_INV_ITM_INVALID      NUMBER;
124     G_ES_EXE_TAX_AUT_INVALID      NUMBER;
125     G_ES_EXE_EXMPT_TYP_INVALID    NUMBER;
126     G_ES_EXE_DATE_OVERLAP         NUMBER;
127 
128     TYPE G_DFF_ATTRIBUTES_REC IS RECORD
129       (attribute1    VARCHAR2(1)
130       ,attribute2    VARCHAR2(1)
131       ,attribute3    VARCHAR2(1)
132       ,attribute4    VARCHAR2(1)
133       ,attribute5    VARCHAR2(1)
134       ,attribute6    VARCHAR2(1)
135       ,attribute7    VARCHAR2(1)
136       ,attribute8    VARCHAR2(1)
137       ,attribute9    VARCHAR2(1)
138       ,attribute10   VARCHAR2(1)
139       ,attribute11   VARCHAR2(1)
140       ,attribute12   VARCHAR2(1)
141       ,attribute13   VARCHAR2(1)
142       ,attribute14   VARCHAR2(1)
143       ,attribute15   VARCHAR2(1)
144       );
145 
146     G_DFF_USAGE_RECORD  G_DFF_ATTRIBUTES_REC;
147 
148 
149   -- ==========================================================================
150   --                     Private Functions and Procedure Declarations
151   -- ==========================================================================
152 
153   PROCEDURE SetGlobals;
154   PROCEDURE SetProcessConstants;
155   PROCEDURE log_now (p_log_level  IN NUMBER
156                     ,p_message    IN VARCHAR2
157                     );
158   PROCEDURE ProcessPtyTxProfileRecord;
159   PROCEDURE ProcessRegistrationRecord;
160   PROCEDURE ProcessExemptionRecord;
161   PROCEDURE ProcessRepCodeAssocRecord;
162   PROCEDURE PtpValueToIdConversion;
163   PROCEDURE RegValueToIdConversion;
164   PROCEDURE ExemptValueToIdConversion;
165   PROCEDURE AssocValueToIdConversion;
166   PROCEDURE TRNValidation(p_table_name   IN VARCHAR2,
167                           p_column_name  IN VARCHAR2,
168                           p_country_code IN VARCHAR2
169                          );
170   PROCEDURE SyncUpRegNumberToPTP;
171   PROCEDURE DupTRNValidation;
172   PROCEDURE LogErrorToTable;
173   PROCEDURE PopulateProductionTables;
174   PROCEDURE ResetRecStatusForChildTables;
175   PROCEDURE performDFFValidation;
176   PROCEDURE resetDFFFieldUsage;
177   FUNCTION getAttrValue(p_zx_exempt_rec     IN   zx_exemptions_int%ROWTYPE
178                        ,p_column_name       IN   VARCHAR2
179                        ) RETURN VARCHAR2 ;
180 
181 
182   -- ==========================================================================
183   --                     Private Functions and Procedure
184   -- ==========================================================================
185 
186   --
187   -- Set Global Variables that will be used by the programs
188   --
189   ------------------------------------------------------------------------------
190   PROCEDURE SetGlobals IS
191   BEGIN
192 
193     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
194       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'SetGlobals','SetGlobals(+)');
195     END IF;
196 
197     --
198     -- user values
199     --
200     G_USER_ID      := FND_GLOBAL.user_id;
201     G_LOGIN_ID     := FND_GLOBAL.login_id;
202     G_PROG_APPID   := FND_GLOBAL.prog_appl_id;
203     G_PROG_ID      := FND_GLOBAL.conc_program_id;
204     G_SYSDATE      := NVL(G_SYSDATE,SYSDATE);
205     G_SESSION_LANG := USERENV('LANG');
206 
207     --
208     -- package name
209     --
210     G_CUST_INTF_TABLE  := 'RA_CUSTOMERS_INTERFACE_ALL';
211     G_RECORD_TYPE_CODE := 'USER_DEFINED';
212 
213     --
214     -- interface table names
215     --
216     G_INTF_PTP_TABLE_NAME  := 'ZX_PARTY_TAX_PROFILE_INT';
217     G_INTF_REG_TABLE_NAME  := 'ZX_REGISTRATIONS_INT';
218     G_INTF_EXE_TABLE_NAME  := 'ZX_EXEMPTIONS_INT';
219     G_INTF_RCA_TABLE_NAME  := 'ZX_REPORT_CODES_ASSOC_INT';
220     G_INTF_CUS_TABLE_NAME  := 'RA_CUSTOMERS_INTERFACE_ALL';
221     G_INTF_SUP_TABLE_NAME  := 'AP_SUPPLIERS_INT';
222     G_INTF_SUP_SITE_TABLE_NAME  := 'AP_SUPPLIER_SITES_INT';
223 
224     --
225     -- concurrent program return status
226     --
227     G_CONC_RET_STS_SUCCESS        := FND_API.G_RET_STS_SUCCESS;
228     G_CONC_RET_STS_WARNING        := 'W';
229     G_CONC_RET_STS_ERROR          := FND_API.G_RET_STS_ERROR;
230     G_CONC_RET_STS_UNEXP_ERROR    := FND_API.G_RET_STS_UNEXP_ERROR;
231 
232     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
233       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'SetGlobals','SetGlobals(-)');
234     END IF;
235 
236   EXCEPTION
237     WHEN OTHERS THEN
238       log_now (p_log_level => FND_FILE.LOG
239               ,p_message   => ' Unable to intialize Globals'||SQLERRM
240               );
241       IF (G_DEBUG_LEVEL_EXCEPTION >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
242         FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,G_DEBUG_LOG_HEADER||'SetGlobals',' Unable to intialize Globals'||SQLERRM);
243       END IF;
244       RAISE;
245   END SetGlobals;
246 
247 
248   --
249   -- Set Process Constants
250   --
251   ------------------------------------------------------------------------------
252   PROCEDURE SetProcessConstants IS
253   BEGIN
254 
255     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
256       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'SetProcessConstants','SetProcessConstants(+)');
257     END IF;
258 
259     --
260     -- record status values
261     --
262     G_RS_IN_PROCESS              := 1;
263     G_RS_ERROR                   := 3;
264     G_RS_TRN_COMPLETE            := 4;
265     G_RS_DFF_VAL_COMPLETE        := 8;
266     G_RS_VALID                   := 2;
267 
268     --
269     -- Prog Internal values
270     --
271     G_PROG_INT_VAL               := -1;
272 
273     G_MISS_CHAR                  := FND_API.G_MISS_CHAR;
274     G_MISS_DATE                  := FND_API.G_MISS_DATE;
275     G_MISS_NUM                   := FND_API.G_MISS_NUM;
276     G_TRUE                       := FND_API.G_TRUE;
277     G_FALSE                      := FND_API.G_FALSE;
278 
279     --
280     -- error flags for PTP records
281     --
282 
283     G_ES_PTP_MAND_PARAM_MISSING  := POWER(2,4);
284     G_ES_PTP_TRANS_TYPE_INVALID  := POWER(2,5);
285     G_ES_PTP_PARTY_TYPE_INVALID  := POWER(2,6);
286     G_ES_PTP_PARTY_INVALID       := POWER(2,8);
287     G_ES_PTP_PARTY_NAME_DUP      := POWER(2,9);
288     G_ES_PTP_COUNTRY_INVALID     := POWER(2,10);
289     G_ES_PTP_REG_NUM_INVALID     := POWER(2,11);
290     G_ES_PTP_REG_TYPE_INVALID    := POWER(2,12);
291     G_ES_PTP_ROUND_LEVEL_INVALID := POWER(2,13);
292     G_ES_PTP_ROUND_RULE_INVALID  := POWER(2,14);
293     G_ES_PTP_TAX_CLASS_INVALID   := POWER(2,15);
294     G_ES_PTP_DUP_INTF_RECORD     := POWER(2,16);
295     G_ES_PTP_INC_FLG_INVALID     := POWER(2,17);
296     G_ES_PTP_APP_FLG_INVALID     := POWER(2,18);
297     G_ES_PTP_OFF_FLG_RECORD      := POWER(2,19);
298     G_ES_PTP_REG_NUM_DUP         := POWER(2,20);
299 
300     G_ES_REG_MAND_PARAM_MISSING   := POWER(2,4);
301     G_ES_REG_DUP_INTF_RECORD      := POWER(2,5);
302     G_ES_REG_TRANS_TYPE_INVALID   := POWER(2,6);
303     G_ES_REG_DATE_RANGE_INVALID   := POWER(2,8);
304     G_ES_REG_REG_TYPE_INVALID     := POWER(2,9);
305     G_ES_REG_REG_STAT_INVALID     := POWER(2,10);
306     G_ES_REG_REG_SRC_INVALID      := POWER(2,11);
307     G_ES_REG_REG_RSN_INVALID      := POWER(2,12);
308     G_ES_REG_TAX_AUT_INVALID      := POWER(2,13);
309     G_ES_REG_ROUND_RULE_INVALID   := POWER(2,14);
310     G_ES_REG_INC_FLG_INVALID      := POWER(2,15);
311     G_ES_REG_LGL_LOC_INVALID      := POWER(2,16);
312     G_ES_REG_DEFREG_FLG_INVALID   := POWER(2,17);
313     G_ES_REG_TAX_REG_INVALID      := POWER(2,18);
314     G_ES_REG_TAX_PARAM_INVALID    := POWER(2,19);
315     G_ES_REG_TAX_JUR_INVALID      := POWER(2,20);
316     G_ES_REG_MULT_DEF_FLAG        := POWER(2,21);
317     G_ES_REG_REG_NUM_DUP          := POWER(2,22);
318     G_ES_REG_TAX_AUT_REQ          := POWER(2,23);
319     G_ES_REG_REG_NUM_INVALID      := POWER(2,24);
320     G_ES_REG_DATE_OVERLAP         := POWER(2,25);
321 
322     G_ES_RCA_MAND_PARAM_MISSING   := POWER(2,4);
323     G_ES_RCA_DUP_INTF_RECORD      := POWER(2,5);
324     G_ES_RCA_TRANS_TYPE_INVALID   := POWER(2,6);
325     G_ES_RCA_ENTY_CD_INVALID      := POWER(2,8);
326     G_ES_RCA_DATE_RANGE_INVALID   := POWER(2,9);
327     G_ES_RCA_REP_TYPE_INVALID     := POWER(2,10);
328     G_ES_RCA_REP_CODE_INVALID     := POWER(2,11);
329     G_ES_RCA_REP_CODE_VAL_INVALID := POWER(2,12);
330     G_ES_RCA_DATE_OVERLAP         := POWER(2,13);
331 
332     G_ES_EXE_DFF_INVALID          := POWER(2,4);
333     G_ES_EXE_MAND_PARAM_MISSING   := POWER(2,5);
334     G_ES_EXE_EXMPT_TYP_INVALID    := POWER(2,6);
335     G_ES_EXE_DATE_OVERLAP         := POWER(2,7);
336     G_ES_EXE_TRANS_TYPE_INVALID   := POWER(2,8);
337     G_ES_EXE_EXMPT_RSN_INVALID    := POWER(2,9);
338     G_ES_EXE_EXMPT_STS_INVALID    := POWER(2,10);
339     G_ES_EXE_TAX_REG_INVALID      := POWER(2,11);
340     G_ES_EXE_CNT_OWN_INVALID      := POWER(2,12);
341     G_ES_EXE_TAX_PARAM_INVALID    := POWER(2,13);
342     G_ES_EXE_TAX_STS_INVALID      := POWER(2,14);
343     G_ES_EXE_TAX_JUR_INVALID      := POWER(2,15);
344     G_ES_EXE_TAX_RATE_INVALID     := POWER(2,16);
345     G_ES_EXE_LWR_LVL_FLG_INVALID  := POWER(2,17);
346     G_ES_EXE_DATE_RANGE_INVALID   := POWER(2,18);
347     G_ES_EXE_INV_ORG_INVALID      := POWER(2,19);
348     G_ES_EXE_INV_ITM_INVALID      := POWER(2,20);
349     G_ES_EXE_TAX_AUT_INVALID      := POWER(2,21);
350 
351     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
352       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'SetProcessConstants','SetProcessConstants(-)');
353     END IF;
354 
355   EXCEPTION
356     WHEN OTHERS THEN
357       log_now (p_log_level => FND_FILE.LOG
358               ,p_message   => ' Unable to set Global Constants '||SQLERRM
359               );
360       RAISE;
361   END SetProcessConstants;
362 
363   --
364   -- write to debug into concurrent log
365   --
366   ------------------------------------------------------------------------------
367   PROCEDURE log_now (p_log_level  IN NUMBER
368                     ,p_message    IN VARCHAR2
369                     ) IS
370   BEGIN
371 
372 
373   --
374   -- writing to concurrent log
375   --
376 
377   IF G_REQUEST_ID <> -1 THEN
378     IF p_log_level = FND_FILE.LOG THEN
379         FND_FILE.put_line(which => FND_FILE.LOG
380                          ,buff  => '['||To_Char(SYSDATE,'DD-MM-YYYY HH24:MI:SS')
381                                    ||'] '||p_message);
382     ELSE
383         FND_FILE.put_line(which => FND_FILE.OUTPUT
384                          ,buff  => p_message);
385     END IF;
386   END IF;
387 
388   EXCEPTION
389     WHEN OTHERS THEN
390       RAISE;
391   END log_now;
392 
393   --
394   -- Delete the Sucess Records from the Interface tables.
395   --
396   ------------------------------------------------------------------------------
397   PROCEDURE DELETE_SUCCESS_RECORDS
398       (p_request_id                     IN             NUMBER
399       ,p_commit                         IN             VARCHAR2
400       ,x_return_status                  OUT NOCOPY  VARCHAR2
401       ,x_msg_data                       OUT NOCOPY  VARCHAR2
402     ) IS
403   BEGIN
404 
405     G_PROC_NAME    := 'DELETE_SUCCESS_RECORDS';
406     log_now (p_log_level => FND_FILE.LOG
407             ,p_message   => G_PROC_NAME||'(+)'
408             );
409     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
410       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||G_PROC_NAME,G_PROC_NAME||'(+)');
411     END IF;
412 
413     SetGlobals();
414     SetProcessConstants();
415 
416     x_return_status := G_CONC_RET_STS_SUCCESS;
417     G_REQUEST_ID    := p_request_id;
418 
419     ---------------------------------------
420     -- validate mandatory API parameters
421     ---------------------------------------
422     IF    p_request_id IS NULL
423        OR NVL(p_commit,G_MISS_CHAR)
424                   NOT IN (G_TRUE, G_FALSE)
425     THEN
426       x_return_status := G_CONC_RET_STS_ERROR;
427       FND_MESSAGE.Set_Name('ZX', 'ZX_API_INVALID_PARAM');
428       FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
429       FND_MESSAGE.Set_Token('API_NAME', G_PROC_NAME);
430       x_msg_data := FND_MESSAGE.get();
431       RETURN;
432     END IF;
433 
434     G_DEBUG_STATEMENT:='Validated mandatory API parameters';
435     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
436       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||G_PROC_NAME,G_DEBUG_STATEMENT);
437     END IF;
438 
439     -- create save point
440     IF FND_API.TO_BOOLEAN(p_commit) THEN
441       SAVEPOINT DEL_SUC_REC_SP;
442     END IF;
443 
444     DELETE zx_party_tax_profile_int
445     WHERE request_id = G_REQUEST_ID
446     AND record_status = G_RS_VALID;
447 
448     G_DEBUG_STATEMENT:='Deleted '||SQL%ROWCOUNT||' records from '||G_INTF_PTP_TABLE_NAME;
449     log_now (p_log_level => FND_FILE.LOG
450             ,p_message   => G_DEBUG_STATEMENT
451             );
452     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
453       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||G_PROC_NAME,G_DEBUG_STATEMENT);
454     END IF;
455 
456 
457     DELETE zx_registrations_int
458     WHERE request_id = G_REQUEST_ID
459     AND record_status = G_RS_VALID;
460 
461     G_DEBUG_STATEMENT:='Deleted '||SQL%ROWCOUNT||' records from '||G_INTF_REG_TABLE_NAME;
462     log_now (p_log_level => FND_FILE.LOG
463             ,p_message   => G_DEBUG_STATEMENT
464             );
465     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
466       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||G_PROC_NAME,G_DEBUG_STATEMENT);
467     END IF;
468 
469     DELETE zx_exemptions_int
470     WHERE request_id = G_REQUEST_ID
471     AND record_status = G_RS_VALID;
472 
473     G_DEBUG_STATEMENT:='Deleted '||SQL%ROWCOUNT||' records from '||G_INTF_EXE_TABLE_NAME;
474     log_now (p_log_level => FND_FILE.LOG
475             ,p_message   => G_DEBUG_STATEMENT
476             );
477     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
478       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||G_PROC_NAME,G_DEBUG_STATEMENT);
479     END IF;
480 
481     DELETE zx_report_codes_assoc_int
482     WHERE request_id = G_REQUEST_ID
483     AND record_status = G_RS_VALID;
484 
485     G_DEBUG_STATEMENT:='Deleted '||SQL%ROWCOUNT||' records from '||G_INTF_RCA_TABLE_NAME;
486     log_now (p_log_level => FND_FILE.LOG
487             ,p_message   => G_DEBUG_STATEMENT
488             );
489     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
490       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||G_PROC_NAME,G_DEBUG_STATEMENT);
491     END IF;
492 
493     IF FND_API.TO_BOOLEAN(p_commit) THEN
494       COMMIT WORK;
495     END IF;
496 
497     log_now (p_log_level => FND_FILE.LOG
498             ,p_message   => G_PROC_NAME||'(-)'
499             );
500     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
501       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||G_PROC_NAME,G_PROC_NAME||'(-)');
502     END IF;
503 
504 
505   EXCEPTION
506     WHEN OTHERS THEN
507       log_now (p_log_level => FND_FILE.LOG
508             ,p_message   =>   G_PROC_NAME||' Exception '|| SQLERRM
509             );
510       IF FND_API.TO_BOOLEAN(p_commit) THEN
511         ROLLBACK TO DEL_SUC_REC_SP;
512       END IF;
513       x_return_status := G_CONC_RET_STS_UNEXP_ERROR;
514       x_msg_data := SQLERRM;
515   END DELETE_SUCCESS_RECORDS;
516 
517   --
518   -- Reset the Record Status for Child Records
519   --
520   ------------------------------------------------------------------------------
521   PROCEDURE ResetRecStatusForChildTables IS
522   BEGIN
523 
524     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
525       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ResetRecStatusForChildTables','ResetRecStatusForChildTables(+)');
526     END IF;
527 
528     UPDATE zx_party_tax_profile_int ptp_int
529     SET record_status = NULL
530     WHERE request_id = G_REQUEST_ID
531     AND record_status = G_RS_VALID
532     AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
533                 FROM zx_party_tax_profile_int ptp_err
534                 WHERE request_id = G_REQUEST_ID
535                 AND NVL(record_status,G_RS_ERROR) = G_RS_ERROR
536                 AND ptp_err.intf_party_reference = ptp_int.intf_party_reference
537                 AND ROWNUM = 1
538                );
539 
540     G_DEBUG_STATEMENT:='Updated Record Status for '||SQL%ROWCOUNT||' records from '||G_INTF_PTP_TABLE_NAME;
541     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
542       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ResetRecStatusForChildTables',G_DEBUG_STATEMENT);
543     END IF;
544 
545     UPDATE zx_registrations_int reg_int
546     SET record_status = NULL
547     WHERE request_id = G_REQUEST_ID
548     AND record_status = G_RS_VALID
549     AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
550                 FROM zx_party_tax_profile_int ptp_int
551                 WHERE request_id = G_REQUEST_ID
552                 AND NVL(record_status,G_RS_ERROR) = G_RS_ERROR
553                 AND ptp_int.intf_ptp_reference = reg_int.intf_ptp_reference
554                 AND ROWNUM = 1
555                );
556 
557     G_DEBUG_STATEMENT:='Updated Record Status for '||SQL%ROWCOUNT||' records from '||G_INTF_REG_TABLE_NAME;
558     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
559       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ResetRecStatusForChildTables',G_DEBUG_STATEMENT);
560     END IF;
561 
562     UPDATE zx_exemptions_int exe_int
563     SET record_status = NULL
564     WHERE request_id = G_REQUEST_ID
565     AND record_status = G_RS_VALID
566     AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
567                 FROM zx_party_tax_profile_int ptp_int
568                 WHERE request_id = G_REQUEST_ID
569                 AND NVL(record_status,G_RS_ERROR) = G_RS_ERROR
570                 AND ptp_int.intf_ptp_reference = exe_int.intf_ptp_reference
571                 AND ROWNUM = 1
572                );
573 
574     G_DEBUG_STATEMENT:='Updated Record Status for '||SQL%ROWCOUNT||' records from '||G_INTF_EXE_TABLE_NAME;
575     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
576       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ResetRecStatusForChildTables',G_DEBUG_STATEMENT);
577     END IF;
578 
579     UPDATE zx_report_codes_assoc_int rca_int
580     SET record_status = NULL
581     WHERE request_id = G_REQUEST_ID
582     AND record_status = G_RS_VALID
583     AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
584                 FROM zx_party_tax_profile_int ptp_int
585                 WHERE request_id = G_REQUEST_ID
586                 AND NVL(record_status,G_RS_ERROR) = G_RS_ERROR
587                 AND ptp_int.intf_ptp_reference = rca_int.intf_ptp_reference
588                 AND ROWNUM = 1
589                );
590 
591     G_DEBUG_STATEMENT:='Updated Record Status for '||SQL%ROWCOUNT||' records from '||G_INTF_RCA_TABLE_NAME;
592     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
593       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ResetRecStatusForChildTables',G_DEBUG_STATEMENT);
594     END IF;
595 
596     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
597       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ResetRecStatusForChildTables','ResetRecStatusForChildTables(-)');
598     END IF;
599 
600   EXCEPTION
601     WHEN OTHERS THEN
602       log_now (p_log_level => FND_FILE.LOG
603             ,p_message   =>  'ResetRecStatusForChildTables : '||SQLERRM
604             );
605   END ResetRecStatusForChildTables;
606 
607   ------------------------------------------------------------------------------
608   Procedure IMPORT_PTP (
609      p_party_intf_table_name     IN      VARCHAR2
610     ,p_commit                    IN      VARCHAR2
611     ,p_gather_stats              IN      VARCHAR2
612     ,p_validate_only             IN      VARCHAR2
613     ,p_insert_only               IN      VARCHAR2
614     ,x_return_status                OUT  NOCOPY  VARCHAR2
615     ,x_msg_data                     OUT  NOCOPY  VARCHAR2
616      ) IS
617     ---------------------------------------------------------------------------
618     -- Start of comments
619     -- API name  : Import_Ptp
620     -- Type      : Protected (only for ZX Use not for customer call)
621     -- Pre-reqs  : None
622     -- FUNCTION  : To bulkload the Party related Tax information from the
623     --             Interface tables into Production tables after validations
624     --
625     -- Parameters:
626     --     IN    :
627     --
628     --
629     --    OUT    : x_return_status        VARCHAR2
630     --               status of the API
631     --               'S' if the program is success
632     --               'W' if the program terminated successfully with atleast an
633     --                   error reported onto error table
634     --               'E' if the program has an exception
635     --               'U' if the program has an unhandled exception
636     --             x_msg_data             VARCHAR2
637     --               contains data only if return status is 'U' or 'E'
638     --
639     ---------------------------------------------------------------------------
640 
641     l_temp_char_30    VARCHAR2(30);
642 
643     NO_ROWS_IN_INTF_TABLE     EXCEPTION;
644 
645     l_msg_data       VARCHAR2(4000);
646     l_msg_count      NUMBER;
647     l_return_status  VARCHAR2(1);
648     l_err_msg_sql    VARCHAR2(4000);
649 
650   BEGIN
651     ---------------------------------------
652     -- validate mandatory API parameters
653     --
654     -- NOT required as every calling program takes care
655     -- the concurrent program must be defined to make the fields mandatory
656     --
657     ---------------------------------------
658 
659     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
660       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'IMPORT_PTP','IMPORT_PTP(+)');
661     END IF;
662 
663     x_return_status := G_CONC_RET_STS_SUCCESS;
664 
665     IF FND_API.TO_BOOLEAN(p_commit) THEN
666       SAVEPOINT IMPORT_PTP_SP;
667     END IF;
668 
669     IF FND_API.TO_BOOLEAN(p_validate_only) THEN
670       BEGIN
671         SELECT 'x'
672         INTO l_temp_char_30
673         FROM ZX_PARTY_TAX_PROFILE_INT
674         WHERE NVL(record_status,G_RS_ERROR) <> G_RS_VALID
675         AND NVL(batch_id,G_MISS_NUM) =
676             NVL(G_BATCH_ID,NVL(batch_id,G_MISS_NUM))
677         AND ROWNUM = 1;
678       EXCEPTION
679         WHEN NO_DATA_FOUND THEN
680           FND_MESSAGE.Set_Name('ZX', 'ZX_BULK_NO_ROWS');
681           FND_MESSAGE.Set_Token('TABLE_NAME', G_INTF_PTP_TABLE_NAME);
682           log_now (p_log_level => FND_FILE.LOG
683                   ,p_message   => FND_MESSAGE.get()
684                   );
685           RAISE NO_ROWS_IN_INTF_TABLE;
686       END;
687       G_DEBUG_STATEMENT:='Validate Mode : There are records to Process in PTP';
688       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
689         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
690       END IF;
691 
692     END IF;
693 
694     IF FND_API.TO_BOOLEAN(p_insert_only) THEN
695       BEGIN
696         SELECT 'x'
697         INTO l_temp_char_30
698         FROM ZX_PARTY_TAX_PROFILE_INT
699         WHERE request_id = G_REQUEST_ID
700         AND record_status = G_RS_VALID
701         AND ROWNUM = 1;
702       EXCEPTION
703         WHEN NO_DATA_FOUND THEN
704           FND_MESSAGE.Set_Name('ZX', 'ZX_BULK_NO_ROWS');
705           FND_MESSAGE.Set_Token('TABLE_NAME', G_INTF_PTP_TABLE_NAME);
706           log_now (p_log_level => FND_FILE.LOG
707                   ,p_message   => FND_MESSAGE.get()
708                   );
709           RAISE NO_ROWS_IN_INTF_TABLE;
710       END;
711       G_DEBUG_STATEMENT:='Insert Mode : There are records to Process in PTP';
712       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
713         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
714       END IF;
715     END IF;
716 
717     -- collect stats on the tables
718     IF FND_API.TO_BOOLEAN(p_gather_stats) THEN
719 
720       SELECT owner
721       INTO l_temp_char_30
722       FROM sys.all_objects
723       WHERE object_name = G_INTF_PTP_TABLE_NAME
724       AND object_type = 'TABLE';
725 
726       FND_STATS.gather_table_stats(ownname => l_temp_char_30
727                                   ,tabname => G_INTF_PTP_TABLE_NAME);
728       FND_STATS.gather_table_stats(ownname => l_temp_char_30
729                                   ,tabname => G_INTF_REG_TABLE_NAME);
730       FND_STATS.gather_table_stats(ownname => l_temp_char_30
731                                   ,tabname => G_INTF_EXE_TABLE_NAME);
732       FND_STATS.gather_table_stats(ownname => l_temp_char_30
733                                   ,tabname => G_INTF_RCA_TABLE_NAME);
734       FND_STATS.gather_table_stats(ownname => l_temp_char_30
735                                   ,tabname => 'ZX_ERRORS_INT');
736 
737       G_DEBUG_STATEMENT:='Completed Gathering Stats on interface tables';
738       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
739         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
740       END IF;
741 
742     END IF;
743 
744     -------------------------------------
745     -- PTP record processing
746     -------------------------------------
747     IF FND_API.TO_BOOLEAN(p_validate_only) THEN
748 
749       ProcessPtyTxProfileRecord();
750 
751       G_DEBUG_STATEMENT:='Completed Processing Party Tax Profile Records';
752       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
753         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
754       END IF;
755 
756     END IF;
757 
758     -------------------------------------
759     -- Registration record processing
760     -------------------------------------
761     IF FND_API.TO_BOOLEAN(p_validate_only) THEN
762 
763       BEGIN
764         SELECT G_INTF_REG_TABLE_NAME
765         INTO l_temp_char_30
766         FROM ZX_REGISTRATIONS_INT
767         WHERE NVL(record_status,G_RS_ERROR) <> G_RS_VALID
768         AND NVL(batch_id,G_MISS_NUM) =
769             NVL(G_BATCH_ID,NVL(batch_id,G_MISS_NUM))
770         AND ROWNUM = 1;
771 
772         ProcessRegistrationRecord();
773 
774       EXCEPTION
775         WHEN NO_DATA_FOUND THEN
776           l_temp_char_30 := NULL;
777           FND_MESSAGE.Set_Name('ZX', 'ZX_BULK_NO_ROWS');
778           FND_MESSAGE.Set_Token('TABLE_NAME', G_INTF_REG_TABLE_NAME);
779           log_now (p_log_level => FND_FILE.LOG
780                   ,p_message   => fnd_message.get()
781                   );
782       END;
783 
784       G_DEBUG_STATEMENT:='Completed Processing Registration Records';
785       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
786         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
787       END IF;
788 
789     END IF;
790 
791     -------------------------------------
792     -- Sync Default Registration Number onto PTP
793     -------------------------------------
794     IF FND_API.TO_BOOLEAN(p_validate_only) THEN
795 
796       IF (l_temp_char_30 = G_INTF_REG_TABLE_NAME) THEN
797         SyncUpRegNumberToPTP();
798       END IF;
799 
800       G_DEBUG_STATEMENT:='Completed Sync Default Registration Number onto PTP';
801       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
802         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
803       END IF;
804 
805     END IF;
806 
807 
808     -------------------------------------
809     -- Duplicate Tax Registration Validation
810     -------------------------------------
811     IF FND_API.TO_BOOLEAN(p_validate_only) THEN
812 
813       DupTRNValidation();
814 
815       G_DEBUG_STATEMENT:='Completed Duplicate Tax Registration Validation';
816       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
817         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
818       END IF;
819 
820     END IF;
821 
822     -------------------------------------
823     -- Exemptions record processing
824     -------------------------------------
825     IF FND_API.TO_BOOLEAN(p_validate_only) THEN
826 
827       BEGIN
828         SELECT G_INTF_EXE_TABLE_NAME
829         INTO l_temp_char_30
830         FROM ZX_EXEMPTIONS_INT
831         WHERE NVL(record_status,G_RS_ERROR) <> G_RS_VALID
832         AND NVL(batch_id,G_MISS_NUM) =
833             NVL(G_BATCH_ID,NVL(batch_id,G_MISS_NUM))
834         AND ROWNUM = 1;
835 
836         ProcessExemptionRecord();
837 
838       EXCEPTION
839         WHEN NO_DATA_FOUND THEN
840           l_temp_char_30 := NULL;
841           FND_MESSAGE.Set_Name('ZX', 'ZX_BULK_NO_ROWS');
842           FND_MESSAGE.Set_Token('TABLE_NAME', G_INTF_EXE_TABLE_NAME);
843           log_now (p_log_level => FND_FILE.LOG
844                   ,p_message   => fnd_message.get()
845                   );
846       END;
847 
848       G_DEBUG_STATEMENT:='Completed Exemptions record processing';
849       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
850         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
851       END IF;
852 
853     END IF;
854 
855     -------------------------------------
856     -- Reporting Code Association record processing
857     -------------------------------------
858     IF FND_API.TO_BOOLEAN(p_validate_only) THEN
859 
860       BEGIN
861         SELECT G_INTF_RCA_TABLE_NAME
862         INTO l_temp_char_30
863         FROM ZX_REPORT_CODES_ASSOC_INT
864         WHERE NVL(record_status,G_RS_ERROR) <> G_RS_VALID
865         AND NVL(batch_id,G_MISS_NUM) =
866             NVL(G_BATCH_ID,NVL(batch_id,G_MISS_NUM))
867         AND ROWNUM = 1;
868 
869         ProcessRepCodeAssocRecord();
870 
871       EXCEPTION
872         WHEN NO_DATA_FOUND THEN
873           l_temp_char_30 := NULL;
874           FND_MESSAGE.Set_Name('ZX', 'ZX_BULK_NO_ROWS');
875           FND_MESSAGE.Set_Token('TABLE_NAME', G_INTF_RCA_TABLE_NAME);
876           log_now (p_log_level => FND_FILE.LOG
877                   ,p_message   => fnd_message.get()
878                   );
879       END;
880 
881       G_DEBUG_STATEMENT:='Completed Reporting Code Association record processing';
882       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
883         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
884       END IF;
885 
886     END IF;
887 
888     -------------------------------------
889     -- Populate Errors onto ZX_ERRORS_INT record processing
890     -------------------------------------
891     IF FND_API.TO_BOOLEAN(p_validate_only) THEN
892 
893       LogErrorToTable();
894 
895       G_DEBUG_STATEMENT:='Populated Errors onto ZX_ERRORS_INT record processing';
896       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
897         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
898       END IF;
899 
900     END IF;
901 
902     -------------------------------------
903     -- Populate Errors onto ZX_ERRORS_INT record processing
904     -------------------------------------
905     IF FND_API.TO_BOOLEAN(p_validate_only) THEN
906 
907       ResetRecStatusForChildTables();
908 
909       G_DEBUG_STATEMENT:='Populated Errors onto ZX_ERRORS_INT record processing';
910       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
911         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
912       END IF;
913 
914     END IF;
915     -------------------------------------
916     -- Populate all production tables
917     -------------------------------------
918     IF FND_API.to_boolean(p_insert_only) THEN
919 
920       PopulateProductionTables();
921 
922       G_DEBUG_STATEMENT:='Populated all production tables';
923       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
924         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
925       END IF;
926 
927     END IF;
928 
929     IF FND_API.TO_BOOLEAN(p_commit) THEN
930 
931       COMMIT WORK;
932 
933       G_DEBUG_STATEMENT:='All Data Committed';
934       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
935         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_PTP',G_DEBUG_STATEMENT);
936       END IF;
937 
938     END IF;
939 
940     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
941       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'IMPORT_PTP','IMPORT_PTP(-)');
942     END IF;
943 
944   EXCEPTION
945     WHEN NO_ROWS_IN_INTF_TABLE THEN
946 
947       x_return_status := G_CONC_RET_STS_SUCCESS;
948       x_msg_data      := NULL;
949       IF FND_API.TO_BOOLEAN(p_commit) THEN
950         ROLLBACK TO IMPORT_PTP_SP;
951       END IF;
952 
953     WHEN OTHERS THEN
954       log_now (p_log_level => FND_FILE.LOG
955               ,p_message   => 'IMPORT_PTP'||' : '||SQLERRM
956               );
957       IF FND_API.TO_BOOLEAN(p_commit) THEN
958         ROLLBACK TO IMPORT_PTP_SP;
959       END IF;
960       x_return_status := G_CONC_RET_STS_UNEXP_ERROR;
961       x_msg_data := SQLERRM;
962   END IMPORT_PTP;
963 
964   ------------------------------------------------------------------------------
965   ------------------------------------------------------------------------------
966   PROCEDURE ProcessPtyTxProfileRecord IS
967 
968     CURSOR get_country_codes IS
969       SELECT DISTINCT country_code
970       FROM zx_party_tax_profile_int
971       WHERE record_status = G_RS_IN_PROCESS
972         AND request_id = G_REQUEST_ID
973         AND country_code IN ('TW','SK','SI','SE','RU','PT','PL','NL','MT',
974                              'LV','LU','LT','IT','IE','HU','GR','GB','FR',
975                              'FI','ES','EE','DK','DE','CY','CO','CL','CH',
976                              'AR','AT','BE','BR')
977         AND BITAND(error_number,G_ES_PTP_COUNTRY_INVALID) = 0;
978 
979     l_date1 DATE;
980     l_date2 DATE;
981     l_date3 DATE;
982     l_date4 DATE;
983     l_date5 DATE;
984 
985   BEGIN
986 
987     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
988       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ProcessPtyTxProfileRecord','ProcessPtyTxProfileRecord(+)');
989     END IF;
990 
991     l_date1     := SYSDATE;
992 
993     -------------------------
994     -- Populate default values
995     -------------------------
996     UPDATE zx_party_tax_profile_int
997     SET request_id = G_REQUEST_ID
998        ,record_status = G_RS_IN_PROCESS
999        ,dml_type = UPPER(dml_type)
1000        ,prog_int_char1 = NULL
1001        ,prog_int_num1 = 0
1002        ,error_number = 0
1003     WHERE NVL(record_status,G_RS_ERROR) <> G_RS_VALID
1004     AND NVL(batch_id,G_MISS_NUM) =
1005         NVL(G_BATCH_ID,NVL(batch_id,G_MISS_NUM));
1006 
1007     G_DEBUG_STATEMENT:='Populated default values onto '||SQL%ROWCOUNT||' records';
1008     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1009       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessPtyTxProfileRecord',G_DEBUG_STATEMENT);
1010     END IF;
1011 
1012     -------------------------
1013     -- Check Mandatory Paramters
1014     -------------------------
1015     UPDATE zx_party_tax_profile_int
1016     SET error_number = G_ES_PTP_MAND_PARAM_MISSING
1017     WHERE request_id = G_REQUEST_ID
1018     AND record_status = G_RS_IN_PROCESS
1019     AND party_id IS NULL
1020     AND party_name IS NULL
1021     AND intf_party_reference IS NULL
1022     AND intf_party_site_reference IS NULL;
1023 
1024     G_DEBUG_STATEMENT:='Mandatory Parameters not populated onto '||SQL%ROWCOUNT||' records';
1025     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1026       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessPtyTxProfileRecord',G_DEBUG_STATEMENT);
1027     END IF;
1028 
1029     -------------------------
1030     -- Duplicate records checking
1031     -------------------------
1032 
1033     UPDATE zx_party_tax_profile_int  orig
1034     SET error_number = error_number + G_ES_PTP_DUP_INTF_RECORD,
1035         record_status = G_RS_ERROR
1036     WHERE request_id = G_REQUEST_ID
1037     AND record_status = G_RS_IN_PROCESS
1038     AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
1039                 FROM zx_party_tax_profile_int dup
1040                 WHERE dup.rowid <> orig.rowid
1041                 AND dup.request_id = G_REQUEST_ID
1042                 AND dup.record_status = G_RS_IN_PROCESS
1043                 AND NVL(dup.intf_party_reference,G_MISS_CHAR) =
1044                     NVL(orig.intf_party_reference,G_MISS_CHAR)
1045                 AND NVL(dup.intf_party_site_reference,G_MISS_CHAR) =
1046                     NVL(orig.intf_party_site_reference,G_MISS_CHAR)
1047                 AND dup.party_type_code  = orig.party_type_code
1048                 AND ROWNUM = 1
1049                );
1050 
1051     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Duplicate records found';
1052     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1053       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessPtyTxProfileRecord',G_DEBUG_STATEMENT);
1054     END IF;
1055 
1056     -------------------------
1057     -- Value to Id Conversion
1058     -------------------------
1059 
1060     l_date2     := SYSDATE;
1061     PtpValueToIdConversion();
1062     l_date3     := SYSDATE;
1063 
1064     G_DEBUG_STATEMENT:='Completed Value to Id Conversion for PTP';
1065     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1066       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessPtyTxProfileRecord',G_DEBUG_STATEMENT);
1067     END IF;
1068 
1069     ------------------
1070     -- TRN Validations
1071     ------------------
1072 
1073     UPDATE zx_party_tax_profile_int ptp_int
1074     SET PROG_INT_NUM1 = G_PROG_INT_VAL
1075     WHERE request_id = G_REQUEST_ID
1076     AND (country_code IS NULL OR registration_number IS NULL)
1077     AND record_status = G_RS_IN_PROCESS;
1078 
1079     --Validation Per Country
1080     FOR rec in get_country_codes LOOP
1081       TRNValidation(p_table_name   => G_INTF_PTP_TABLE_NAME
1082                    ,p_column_name  => 'country_code'
1083                    ,p_country_code => rec.COUNTRY_CODE
1084                    );
1085     END LOOP;
1086 
1087     -- Final Updation of the Record Status and error Codes
1088 
1089     UPDATE zx_party_tax_profile_int ptp_int
1090     SET error_number  = error_number + G_ES_PTP_REG_NUM_INVALID
1091     WHERE country_code IS NOT NULL
1092     AND country_code IN ('TW','SK','SI','SE','RU','PT','PL','NL','MT',
1093                          'LV','LU','LT','IT','IE','HU','GR','GB','FR',
1094                          'FI','ES','EE','DK','DE','CY','CO','CL','CH',
1095                          'AR','AT','BE','BR')
1096     AND registration_number IS NOT NULL
1097     AND prog_int_num1 <> G_PROG_INT_VAL
1098     AND request_id = G_REQUEST_ID
1099     AND record_status = G_RS_IN_PROCESS;
1100     l_date4     := SYSDATE;
1101 
1102     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid TRN found';
1103     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1104       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessPtyTxProfileRecord',G_DEBUG_STATEMENT);
1105     END IF;
1106 
1107     ---------------------------
1108     -- Record level validations
1109     ---------------------------
1110 
1111     -------------------------
1112     -- NO Other Validations
1113     -------------------------
1114 
1115     UPDATE zx_party_tax_profile_int ptp_int
1116     SET record_status = DECODE(error_number,0,G_RS_VALID,G_RS_ERROR),
1117         prog_int_num1 = 0
1118     WHERE request_id = G_REQUEST_ID
1119     AND record_status = G_RS_IN_PROCESS;
1120 
1121     l_date5     := SYSDATE;
1122 
1123     log_now (p_log_level => FND_FILE.LOG
1124             ,p_message   => '+--------------------------------------------------------------------'
1125             );
1126     log_now (p_log_level => FND_FILE.LOG
1127             ,p_message   => '|              PERF METRICS for Processing Party Tax Profile Records '
1128             );
1129     log_now (p_log_level => FND_FILE.LOG
1130             ,p_message   => '| Time Taken for Value to ID Conversions     '||(l_date3-l_date2)*86400||' Secs'
1131             );
1132     log_now (p_log_level => FND_FILE.LOG
1133             ,p_message   => '| Time Taken for TRN Validation              '||(l_date4-l_date3)*86400||' Secs'
1134             );
1135     log_now (p_log_level => FND_FILE.LOG
1136             ,p_message   => '| Total Time Taken for PTP Record Processing '||(l_date5-l_date1)*86400||' Secs'
1137             );
1138     log_now (p_log_level => FND_FILE.LOG
1139             ,p_message   => '+--------------------------------------------------------------------'
1140             );
1141 
1142     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1143       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ProcessPtyTxProfileRecord','ProcessPtyTxProfileRecord(-)');
1144     END IF;
1145 
1146   EXCEPTION
1147       WHEN OTHERS THEN
1148       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
1149       G_MSG_DATA      := SQLERRM;
1150       log_now (p_log_level => FND_FILE.LOG
1151               ,p_message   => 'ProcessPtyTxProfileRecord'||' : '||SQLERRM
1152               );
1153       RAISE;
1154   END ProcessPtyTxProfileRecord;
1155 
1156   ------------------------------------------------------------------------------
1157   ------------------------------------------------------------------------------
1158   ------------------------------------------------------------------------------
1159   PROCEDURE PtpValueToIdConversion  IS
1160   BEGIN
1161 
1162     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1163       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion','PtpValueToIdConversion(+)');
1164     END IF;
1165 
1166     UPDATE zx_party_tax_profile_int
1167     SET error_number = error_number + G_ES_PTP_TRANS_TYPE_INVALID
1168     WHERE record_status = G_RS_IN_PROCESS
1169     AND request_id = G_REQUEST_ID
1170     AND dml_type <> 'CREATE';
1171 
1172     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid dml_type found';
1173     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1174       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1175     END IF;
1176 
1177     UPDATE zx_party_tax_profile_int
1178     SET error_number = error_number + G_ES_PTP_PARTY_TYPE_INVALID
1179     WHERE record_status = G_RS_IN_PROCESS
1180     AND request_id = G_REQUEST_ID
1181     AND party_type_code NOT IN ('THIRD_PARTY','THIRD_PARTY_SITE');
1182 
1183     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid party_type_code found';
1184     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1185       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1186     END IF;
1187 
1188     -- value to id conversion for party_id Only for DML TYpe = 'UPDATE'
1189     -- written for future use at the time of creation
1190     UPDATE zx_party_tax_profile_int intf
1191     SET error_number = error_number + G_ES_PTP_PARTY_INVALID
1192     WHERE record_status = G_RS_IN_PROCESS
1193     AND request_id = G_REQUEST_ID
1194     AND party_type_code = 'THIRD_PARTY'
1195     AND dml_type = 'UPDATE'
1196     AND (  (    party_id IS NOT NULL
1197             AND NOT EXISTS
1198                     (SELECT 1 FROM hz_parties WHERE party_id = intf.party_id)
1199             )
1200             OR
1201             (    party_id IS NULL
1202              AND party_name IS NOT NULL
1203              AND NOT EXISTS
1204                     (SELECT 1 FROM hz_parties WHERE party_name = intf.party_name)
1205             )
1206             OR
1207             (    party_id IS NULL
1208              AND party_name IS NULL
1209              AND intf_party_reference IS NOT NULL
1210              AND NOT EXISTS
1211                     (SELECT 1 FROM hz_parties
1212                      WHERE orig_system_reference = intf.intf_party_reference)
1213             )
1214         );
1215 
1216     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid party_id found';
1217     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1218       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1219     END IF;
1220 
1221     UPDATE zx_party_tax_profile_int intf
1222     SET party_id = CASE WHEN party_id IS NULL AND party_name IS NOT NULL
1223                           THEN (SELECT party_id
1224                                 FROM hz_parties
1225                                 WHERE party_name = intf.party_name)
1226                         WHEN party_id is NULL
1227                              AND party_name IS NULL
1228                              AND intf_party_reference IS NOT NULL
1229                           THEN (SELECT 1
1230                                 FROM hz_parties
1231                                 WHERE orig_system_reference =
1232                                        intf.intf_party_reference)
1233                    END
1234     WHERE record_status = G_RS_IN_PROCESS
1235     AND request_id = G_REQUEST_ID
1236     AND BITAND(error_number,G_ES_PTP_PARTY_INVALID) = 0
1237     AND party_type_code = 'THIRD_PARTY'
1238     AND dml_type = 'UPDATE';
1239 
1240     IF G_CUST_INTF_TABLE IN (G_INTF_SUP_TABLE_NAME,G_INTF_SUP_SITE_TABLE_NAME) THEN
1241       UPDATE zx_party_tax_profile_int
1242       SET error_number = error_number + G_ES_PTP_INC_FLG_INVALID
1243       WHERE record_status = G_RS_IN_PROCESS
1244       AND request_id = G_REQUEST_ID
1245       AND inclusive_tax_flag NOT IN ('Y','N',NULL);
1246 
1247       UPDATE zx_party_tax_profile_int
1248       SET error_number = error_number + G_ES_PTP_APP_FLG_INVALID
1249       WHERE record_status = G_RS_IN_PROCESS
1250       AND request_id = G_REQUEST_ID
1251       AND process_for_applicability_flag NOT IN ('Y','N',NULL);
1252 
1253       UPDATE zx_party_tax_profile_int
1254       SET error_number = error_number + G_ES_PTP_OFF_FLG_RECORD
1255       WHERE record_status = G_RS_IN_PROCESS
1256       AND request_id = G_REQUEST_ID
1257       AND allow_offset_tax_flag NOT IN ('Y','N',NULL);
1258 
1259     END IF;
1260 
1261     -- validating the fields country_code and country_name
1262     UPDATE zx_party_tax_profile_int ptp_int
1263     SET error_number = error_number + G_ES_PTP_COUNTRY_INVALID
1264     WHERE (( country_code IS NOT NULL
1265              AND NOT EXISTS
1266                  (
1267                   SELECT 1
1268                     FROM fnd_territories
1269                    WHERE territory_code = ptp_int.country_code
1270                  )
1271             )
1272            OR
1273            (     country_code IS NULL
1274              AND country_name IS NOT NULL
1275              AND NOT EXISTS
1276                  (
1277                   SELECT 1
1278                    FROM fnd_territories_vl
1279                   WHERE territory_short_name = ptp_int.country_name
1280                  )
1281             )
1282           )
1283     AND record_status = G_RS_IN_PROCESS
1284     AND request_id = G_REQUEST_ID;
1285 
1286     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid country found';
1287     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1288       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1289     END IF;
1290 
1291     -- value to id conversion for registration_type_code
1292     UPDATE zx_party_tax_profile_int ptp_int
1293     SET country_code = (
1294                          SELECT territory_code
1295                            FROM fnd_territories_vl
1296                           WHERE territory_short_name =  ptp_int.country_name
1297                        )
1298     WHERE record_status = G_RS_IN_PROCESS
1299     AND request_id = G_REQUEST_ID
1300     AND BITAND(error_number,G_ES_PTP_COUNTRY_INVALID) = 0
1301     AND country_code IS NULL
1302     AND country_name IS NOT NULL;
1303 
1304     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with country_code';
1305     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1306       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1307     END IF;
1308 
1309     -- validating the fields registration_type_code and registration_type_name
1310     UPDATE zx_party_tax_profile_int ptp_int
1311     SET error_number = error_number + G_ES_PTP_REG_TYPE_INVALID
1312     WHERE (( registration_type_code IS NOT NULL
1313              AND NOT EXISTS
1314                 (
1315                   SELECT 1
1316                     FROM fnd_lookups    fndlookup
1317                    WHERE fndlookup.lookup_type = 'ZX_REGISTRATIONS_TYPE'
1318                      AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
1319                      AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
1320                      AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
1321                      AND fndlookup.lookup_code = ptp_int.registration_type_code
1322                  )
1323             )
1324            OR
1325            (     registration_type_code IS NULL
1326              AND registration_type_name IS NOT NULL
1327              AND NOT EXISTS
1328                  ( SELECT 1
1329                      FROM fnd_lookups    fndlookup
1330                     WHERE fndlookup.lookup_type = 'ZX_REGISTRATIONS_TYPE'
1331                       AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
1332                       AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
1333                       AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
1334                       AND fndlookup.meaning = ptp_int.registration_type_name
1335                  )
1336             )
1337           )
1338     AND record_status = G_RS_IN_PROCESS
1339     AND request_id = G_REQUEST_ID;
1340 
1341     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid registration type found';
1342     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1343       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1344     END IF;
1345 
1346     -- value to id conversion for registration_type_code
1347     UPDATE zx_party_tax_profile_int ptp_int
1348     SET registration_type_code = (
1349                       SELECT fndlookup.lookup_code
1350                       FROM    fnd_lookups    fndlookup
1351                       WHERE   fndlookup.lookup_type = 'ZX_REGISTRATIONS_TYPE'
1352                       AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
1353                       AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
1354                       AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
1355                       AND fndlookup.meaning = ptp_int.registration_type_name
1356                                  )
1357     WHERE record_status = G_RS_IN_PROCESS
1358     AND request_id = G_REQUEST_ID
1359     AND BITAND(error_number,G_ES_PTP_REG_TYPE_INVALID) = 0
1360     AND registration_type_code IS NULL
1361     AND ptp_int.registration_type_name IS NOT NULL;
1362 
1363     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with registration_type_code';
1364     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1365       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1366     END IF;
1367 
1368     -- validating the fields rounding_level_code and rounding_level_name
1369     UPDATE zx_party_tax_profile_int ptp_int
1370     SET error_number  = error_number + G_ES_PTP_ROUND_LEVEL_INVALID
1371     WHERE (( rounding_level_code IS NOT NULL
1372              AND NOT EXISTS
1373                 (
1374                   SELECT 1
1375                     FROM fnd_lookups
1376                    WHERE lookup_type = 'ZX_ROUNDING_LEVEL'
1377                      AND NVL(start_date_active, SYSDATE) <= SYSDATE
1378                      AND NVL(end_date_active, SYSDATE)  >= SYSDATE
1379                      AND NVL(enabled_flag, 'N') = 'Y'
1380                      AND lookup_code = ptp_int.rounding_level_code
1381                  )
1382             )
1383            OR
1384            (     rounding_level_code IS NULL
1385              AND rounding_level_name IS NOT NULL
1386              AND NOT EXISTS
1387                  ( SELECT 1
1388                      FROM fnd_lookups
1389                     WHERE lookup_type = 'ZX_ROUNDING_LEVEL'
1390                       AND NVL(start_date_active, SYSDATE) <= SYSDATE
1391                       AND NVL(end_date_active, SYSDATE)  >= SYSDATE
1392                       AND NVL(enabled_flag, 'N') = 'Y'
1393                       AND meaning = ptp_int.rounding_level_name
1394                  )
1395             )
1396           )
1397     AND record_status = G_RS_IN_PROCESS
1398     AND request_id = G_REQUEST_ID;
1399 
1400     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid rounding level found';
1401     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1402       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1403     END IF;
1404 
1405     -- value to id conversion for rounding_level_code
1406     UPDATE zx_party_tax_profile_int ptp_int
1407     SET rounding_level_code =
1408                   (
1409                     SELECT lookup_code
1410                       FROM fnd_lookups
1411                      WHERE lookup_type = 'ZX_ROUNDING_LEVEL'
1412                        AND NVL(start_date_active, SYSDATE) <= SYSDATE
1413                        AND NVL(end_date_active, SYSDATE)  >= SYSDATE
1414                        AND NVL(enabled_flag, 'N') = 'Y'
1415                        AND meaning = ptp_int.rounding_level_name
1416                   )
1417     WHERE record_status = G_RS_IN_PROCESS
1418     AND request_id = G_REQUEST_ID
1419     AND BITAND(error_number,G_ES_PTP_ROUND_LEVEL_INVALID) = 0
1420     AND rounding_level_code IS NULL
1421     AND rounding_level_name IS NOT NULL;
1422 
1423     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with rounding_level_code';
1424     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1425       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1426     END IF;
1427 
1428     -- validating the fields rounding_rule_code and rounding_rule_name
1429     UPDATE zx_party_tax_profile_int ptp_int
1430     SET error_number  = error_number + G_ES_PTP_ROUND_RULE_INVALID
1431     WHERE (( rounding_rule_code IS NOT NULL
1432              AND NOT EXISTS
1433                 (
1434                   SELECT 1
1435                     FROM fnd_lookups
1436                    WHERE lookup_type = 'ZX_ROUNDING_RULE'
1437                      AND NVL(start_date_active, SYSDATE) <= SYSDATE
1438                      AND NVL(end_date_active, SYSDATE)  >= SYSDATE
1439                      AND NVL(enabled_flag, 'N') = 'Y'
1440                      AND lookup_code = ptp_int.rounding_rule_code
1441                  )
1442             )
1443            OR
1444            (     rounding_rule_code IS NULL
1445              AND rounding_rule_name IS NOT NULL
1446              AND NOT EXISTS
1447                  ( SELECT 1
1448                      FROM fnd_lookups
1449                     WHERE lookup_type = 'ZX_ROUNDING_RULE'
1450                       AND NVL(start_date_active, SYSDATE) <= SYSDATE
1451                       AND NVL(end_date_active, SYSDATE)  >= SYSDATE
1452                       AND NVL(enabled_flag, 'N') = 'Y'
1453                       AND meaning = ptp_int.rounding_rule_name
1454                  )
1455             )
1456           )
1457     AND record_status = G_RS_IN_PROCESS
1458     AND request_id = G_REQUEST_ID;
1459 
1460     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid rounding rule found';
1461     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1462       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1463     END IF;
1464 
1465     -- value to id conversion for rounding_rule_code
1466     UPDATE zx_party_tax_profile_int ptp_int
1467     SET rounding_rule_code = (
1468                     SELECT lookup_code
1469                       FROM fnd_lookups
1470                      WHERE lookup_type = 'ZX_ROUNDING_RULE'
1471                        AND NVL(start_date_active, SYSDATE) <= SYSDATE
1472                        AND NVL(end_date_active, SYSDATE)  >= SYSDATE
1473                        AND NVL(enabled_flag, 'N') = 'Y'
1474                        AND meaning = ptp_int.rounding_rule_name
1475                               )
1476     WHERE record_status = G_RS_IN_PROCESS
1477     AND request_id = G_REQUEST_ID
1478     AND BITAND(error_number,G_ES_PTP_ROUND_RULE_INVALID) = 0
1479     AND rounding_rule_code IS NULL
1480     AND rounding_rule_name IS NOT NULL;
1481 
1482     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with rounding_rule_code';
1483     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1484       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1485     END IF;
1486 
1487     -- validating the fields tax_classification_code and tax_classification_name
1488     UPDATE zx_party_tax_profile_int ptp_int
1489     SET error_number  = error_number + G_ES_PTP_TAX_CLASS_INVALID
1490     WHERE (( tax_classification_code IS NOT NULL
1491              AND NOT EXISTS
1492                 (
1493                     SELECT 1
1494                       FROM zx_input_classifications_v
1495                      WHERE enabled_flag = 'Y'
1496                        AND SYSDATE BETWEEN start_date_active
1497                                    AND  NVL(end_date_active,SYSDATE)
1498                        AND lookup_code = ptp_int.tax_classification_code
1499                     UNION ALL
1500                     SELECT 1
1501                       FROM zx_output_classifications_v
1502                      WHERE enabled_flag = 'Y'
1503                        AND SYSDATE BETWEEN start_date_active
1504                                    AND  NVL(end_date_active,SYSDATE)
1505                        AND lookup_code = ptp_int.tax_classification_code
1506                  )
1507             )
1508            OR
1509            (     tax_classification_code IS NULL
1510              AND tax_classification_name IS NOT NULL
1511              AND NOT EXISTS
1512                 (
1513                     SELECT 1
1514                       FROM zx_input_classifications_v
1515                      WHERE enabled_flag = 'Y'
1516                        AND SYSDATE BETWEEN start_date_active
1517                                    AND  NVL(end_date_active,SYSDATE)
1518                        AND meaning = ptp_int.tax_classification_name
1519                     UNION ALL
1520                     SELECT 1
1521                       FROM zx_output_classifications_v
1522                      WHERE enabled_flag = 'Y'
1523                        AND SYSDATE BETWEEN start_date_active
1524                                    AND  NVL(end_date_active,SYSDATE)
1525                        AND meaning = ptp_int.tax_classification_name
1526                  )
1527             )
1528           )
1529     AND record_status = G_RS_IN_PROCESS
1530     AND request_id = G_REQUEST_ID;
1531 
1532     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid Tax Classification found';
1533     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1534       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1535     END IF;
1536 
1537     -- value to id conversion for rounding_rule_code
1538     UPDATE zx_party_tax_profile_int ptp_int
1539     SET tax_classification_code = (
1540                           SELECT lookup_code
1541                             FROM zx_input_classifications_v
1542                            WHERE enabled_flag = 'Y'
1543                              AND SYSDATE BETWEEN start_date_active
1544                                          AND  NVL(end_date_active,SYSDATE)
1545                              AND meaning = ptp_int.tax_classification_name
1546                           UNION
1547                           SELECT lookup_code
1548                             FROM zx_output_classifications_v
1549                            WHERE enabled_flag = 'Y'
1550                              AND SYSDATE BETWEEN start_date_active
1551                                          AND  NVL(end_date_active,SYSDATE)
1552                              AND meaning = ptp_int.tax_classification_name
1553                                   )
1554     WHERE record_status = G_RS_IN_PROCESS
1555     AND request_id = G_REQUEST_ID
1556     AND BITAND(error_number,G_ES_PTP_TAX_CLASS_INVALID) = 0
1557     AND tax_classification_code IS NULL
1558     AND tax_classification_name IS NOT NULL;
1559 
1560     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with Tax Classification code';
1561     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1562       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion',G_DEBUG_STATEMENT);
1563     END IF;
1564 
1565     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1566       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'PtpValueToIdConversion','PtpValueToIdConversion(-)');
1567     END IF;
1568 
1569   EXCEPTION
1570     WHEN OTHERS THEN
1571       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
1572       G_MSG_DATA      := SQLERRM;
1573       log_now (p_log_level => FND_FILE.LOG
1574               ,p_message   => 'PtpValueToIdConversion'||' : '||SQLERRM
1575               );
1576       RAISE;
1577   END PtpValueToIdConversion;
1578 
1579   -------------------------------------------------------------------------------
1580   -------------------------------------------------------------------------------
1581   -------------------------------------------------------------------------------
1582   PROCEDURE TRNValidation(p_table_name IN VARCHAR2,
1583                           p_column_name IN VARCHAR2,
1584                           p_country_code IN VARCHAR2
1585                           ) IS
1586   l_const_sql     VARCHAR2(2000);
1587   l_dynamic_sql   VARCHAR2(4000);
1588 
1589   BEGIN
1590 
1591     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1592       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'TRNValidation','TRNValidation(+)');
1593     END IF;
1594 
1595 
1596   l_const_sql :=
1597   ' UPDATE '||p_table_name||
1598   '  SET PROG_INT_NUM1 = :G_PROG_INT_VAL
1599     WHERE request_id = :G_REQUEST_ID
1600     AND record_status = :G_RS_IN_PROCESS
1601     AND registration_number IS NOT NULL
1602     AND '||p_column_name||' = :P_COUNTRY_CODE
1603     AND BITAND(error_number,:G_ES_PTP_COUNTRY_INVALID) = 0
1604     AND prog_int_num1 <> :G_PROG_INT_VAL ';
1605 
1606   --Validation for Country Code TW Replacing API validate_trn_tw
1607   IF p_country_code = 'TW' THEN
1608 
1609   l_dynamic_sql := l_const_sql||
1610   q'# AND REGEXP_LIKE(registration_number,'^[[:digit:]]{9}$') #' ;
1611 
1612   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1613     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1614   END IF;
1615 
1616   EXECUTE IMMEDIATE l_dynamic_sql
1617           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1618                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1619 
1620   --Validation for Country Code SK Replacing API VALIDATE_TRN_SK
1621 
1622   ELSIF p_country_code = 'SK' THEN
1623 
1624   l_dynamic_sql := l_const_sql||
1625   q'# AND (REGEXP_LIKE(registration_number,'^(SK)[[:digit:]]*$')
1626             OR ( REGEXP_LIKE(registration_number,'^[[:digit:]]{9,12}$')
1627                  AND NOT REGEXP_LIKE(registration_number,'^[[:digit:]]{11}$'))) #' ;
1628 
1629   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1630     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1631   END IF;
1632 
1633   EXECUTE IMMEDIATE l_dynamic_sql
1634           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1635                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1636 
1637   --Validation for Country Code SI Replacing API VALIDATE_TRN_SI
1638 
1639   ELSIF p_country_code = 'SI' THEN
1640 
1641   l_dynamic_sql := l_const_sql||
1642   q'# AND REGEXP_LIKE(registration_number,'^(SI)?[[:digit:]]{8}$') #' ;
1643 
1644   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1645     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1646   END IF;
1647 
1648   EXECUTE IMMEDIATE l_dynamic_sql
1649           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1650                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1651 
1652   --Validation for Country Code SE Replacing API VALIDATE_TRN_SE
1653 
1654   ELSIF p_country_code = 'SE' THEN
1655 
1656   l_dynamic_sql := l_const_sql||
1657   q'# AND REGEXP_LIKE(registration_number,'^(SE)?[[:digit:]]{10}(01)$') #' ;
1658 
1659   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1660     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1661   END IF;
1662 
1663   EXECUTE IMMEDIATE l_dynamic_sql
1664           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1665                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1666 
1667   --Validation for Country Code RU Replacing API VALIDATE_TRN_RU
1668 
1669   ELSIF p_country_code = 'RU' THEN
1670 
1671   l_dynamic_sql := l_const_sql||
1672   q'# AND LENGTH(registration_number) IN (9,10,12) #' ;
1673 
1674   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1675     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1676   END IF;
1677 
1678   EXECUTE IMMEDIATE l_dynamic_sql
1679           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1680                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1681 
1682   --Validation for Country Code PT Replacing API VALIDATE_TRN_PT
1683 
1684   ELSIF p_country_code = 'PT' THEN
1685 
1686   l_dynamic_sql := l_const_sql||
1687   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^(PT)[[:digit:]]{9}$') THEN
1688          Mod(Mod(11-Mod(((substr(registration_number,3,1)*9) + (substr(registration_number,4,1)*8) +
1689         (substr(registration_number,5,1)*7) + (substr(registration_number,6,1)*6) +
1690         (substr(registration_number,7,1)*5) + (substr(registration_number,8,1)*4) +
1691         (substr(registration_number,9,1)*3) + (substr(registration_number,10,1)*2) +
1692         (substr(registration_number,11,1)*1)),11),11),10)
1693          ELSE :G_MISS_NUM END
1694         ) = substr(registration_number,11,1) #' ;
1695 
1696   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1697     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1698   END IF;
1699 
1700   EXECUTE IMMEDIATE l_dynamic_sql
1701           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1702                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
1703 
1704   --Validation for Country Code PL Replacing API VALIDATE_TRN_PL
1705 
1706   ELSIF p_country_code = 'PL' THEN
1707 
1708   l_dynamic_sql := l_const_sql||
1709   q'# AND (
1710             (
1711              REGEXP_LIKE(registration_number,'^[0-9-]*$')
1712              AND Length(registration_number) IN (10,13,15)
1713              )
1714            OR
1715             (
1716              REGEXP_LIKE(registration_number,'^(PL)[0-9]*$')
1717             )
1718           ) #' ;
1719 
1720   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1721     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1722   END IF;
1723 
1724   EXECUTE IMMEDIATE l_dynamic_sql
1725           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1726                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1727 
1728   --Validation for Country Code NL Replacing API VALIDATE_TRN_NL
1729 
1730   ELSIF p_country_code = 'NL' THEN
1731 
1732   l_dynamic_sql := l_const_sql||
1733   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^(NL)[[:digit:]]{9}(B)[[:digit:]]{2}$') THEN
1734              Mod(((substr(registration_number,3,1)*9) + (substr(registration_number,4,1)*8) +
1735             (substr(registration_number,5,1)*7) + (substr(registration_number,6,1)*6) +
1736             (substr(registration_number,7,1)*5) + (substr(registration_number,8,1)*4) +
1737             (substr(registration_number,9,1)*3) + (substr(registration_number,10,1)*2)),11)
1738            ELSE :G_MISS_NUM END
1739           ) = substr(registration_number,11,1) #' ;
1740 
1741   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1742     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1743   END IF;
1744 
1745   EXECUTE IMMEDIATE l_dynamic_sql
1746           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1747                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
1748 
1749   --Validation for Country Code MT Replacing API VALIDATE_TRN_MT
1750 
1751   ELSIF p_country_code = 'MT' THEN
1752 
1753   l_dynamic_sql := l_const_sql||
1754   q'# AND REGEXP_LIKE(registration_number,'^(MT)?[[:digit:]]{8}$') #' ;
1755 
1756   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1757     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1758   END IF;
1759 
1760   EXECUTE IMMEDIATE l_dynamic_sql
1761           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1762                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1763 
1764   --Validation for Country Code LV Replacing API VALIDATE_TRN_LV
1765 
1766   ELSIF p_country_code = 'LV' THEN
1767 
1768   l_dynamic_sql := l_const_sql||
1769   q'# AND REGEXP_LIKE(registration_number,'^(LV)?[[:digit:]]{11}$') #' ;
1770 
1771   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1772     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1773   END IF;
1774 
1775   EXECUTE IMMEDIATE l_dynamic_sql
1776           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1777                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1778 
1779   --Validation for Country Code LU Replacing API VALIDATE_TRN_LU
1780 
1781   ELSIF p_country_code = 'LU' THEN
1782   l_dynamic_sql := l_const_sql||
1783   q'# AND REGEXP_LIKE(registration_number,'^(LU)[[:digit:]]{8}$') #' ;
1784 
1785   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1786     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1787   END IF;
1788 
1789   EXECUTE IMMEDIATE l_dynamic_sql
1790           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1791                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1792 
1793   --Validation for Country Code LT Replacing API VALIDATE_TRN_LT
1794 
1795   ELSIF p_country_code = 'LT' THEN
1796 
1797   l_dynamic_sql := l_const_sql||
1798   q'# AND (
1799            REGEXP_LIKE(registration_number,'^(LT)?[[:digit:]]{9}$')
1800            OR
1801            REGEXP_LIKE(registration_number,'^(LT)?[[:digit:]]{12}$')
1802            ) #' ;
1803 
1804   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1805     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1806   END IF;
1807 
1808   EXECUTE IMMEDIATE l_dynamic_sql
1809           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1810                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1811 
1812   --Validation for Country Code IT Replacing API VALIDATE_TRN_IT
1813 
1814   ELSIF p_country_code = 'IT' THEN
1815 
1816   l_dynamic_sql := l_const_sql||
1817   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^(IT)?[[:digit:]]{11}$') THEN
1818         substr(substr(registration_number,2,1)*2,1,1) + nvl(substr(substr(registration_number,2,1)*2,2,1),0) +
1819         substr(substr(registration_number,4,1)*2,1,1) + nvl(substr(substr(registration_number,4,1)*2,2,1),0) +
1820         substr(substr(registration_number,6,1)*2,1,1) + nvl(substr(substr(registration_number,6,1)*2,2,1),0) +
1821         substr(substr(registration_number,8,1)*2,1,1) + nvl(substr(substr(registration_number,8,1)*2,2,1),0) +
1822         substr(substr(registration_number,10,1)*2,1,1) + nvl(substr(substr(registration_number,10,1)*2,2,1),0) +
1823         substr(registration_number,1,1) + substr(registration_number,3,1) +
1824         substr(registration_number,5,1) + substr(registration_number,7,1) + substr(registration_number,9,1)
1825         ELSE :G_MISS_NUM END) = Decode(substr(registration_number,11,1),0,0,10-substr(registration_number,11,1)) #' ;
1826 
1827   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1828     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1829   END IF;
1830 
1831   EXECUTE IMMEDIATE l_dynamic_sql
1832           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1833                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
1834 
1835   --Validation for Country Code IE Replacing API VALIDATE_TRN_IE
1836 
1837   ELSIF p_country_code = 'IE' THEN
1838 
1839   l_dynamic_sql := l_const_sql||
1840   q'# AND (
1841            REGEXP_LIKE(registration_number,'^(IE)((.[0-9]{5}.))[A-HJ-NP-Z]$')
1842            OR
1843            REGEXP_LIKE(registration_number,'^(IE)((..[0-9]{5}))[A-HJ-NP-Z]$')
1844           ) #' ;
1845 
1846   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1847     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1848   END IF;
1849 
1850   EXECUTE IMMEDIATE l_dynamic_sql
1851           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1852                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1853 
1854   --Validation for Country Code HU Replacing API VALIDATE_TRN_HU
1855 
1856   ELSIF p_country_code = 'HU' THEN
1857 
1858   l_dynamic_sql := l_const_sql||
1859   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^[0-9]{8,}$') THEN
1860             mod((substr(registration_number,8,1) * 1 +
1861             substr(registration_number,7,1) * 3   +
1862             substr(registration_number,6,1) * 7   +
1863             substr(registration_number,5,1) * 9   +
1864             substr(registration_number,4,1) * 1   +
1865             substr(registration_number,3,1) * 3   +
1866             substr(registration_number,2,1) * 7   +
1867             substr(registration_number,1,1) * 9),10)
1868             ELSE :G_MISS_NUM END
1869            )  = 0 #' ;
1870 
1871   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1872     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1873   END IF;
1874 
1875   EXECUTE IMMEDIATE l_dynamic_sql
1876           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1877                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
1878 
1879   --Validation for Country Code GR Replacing API VALIDATE_TRN_GR
1880 
1881   ELSIF p_country_code = 'GR' THEN
1882 
1883   l_dynamic_sql := l_const_sql||
1884   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^(GR|EL)?[[:digit:]]{9}$') THEN
1885              mod(mod(((substr(registration_number,3,1) * power(2,8)) +
1886             (substr(registration_number,4,1) * power(2,7))   +
1887             (substr(registration_number,5,1) * power(2,6))   +
1888             (substr(registration_number,6,1) * power(2,5))   +
1889             (substr(registration_number,7,1) * power(2,4))   +
1890             (substr(registration_number,8,1) * power(2,3))   +
1891             (substr(registration_number,9,1) * power(2,2))   +
1892             (substr(registration_number,10,1) * power(2,1))),11),10)
1893             ELSE :G_MISS_NUM END) = substr(registration_number,11,1) #' ;
1894 
1895   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1896     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1897   END IF;
1898 
1899   EXECUTE IMMEDIATE l_dynamic_sql
1900           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1901                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
1902 
1903   --Validation for Country Code GB Replacing API VALIDATE_TRN_GB
1904 
1905   ELSIF p_country_code = 'GB' THEN
1906     --CASE 1
1907   l_dynamic_sql := l_const_sql||
1908   q'# AND ((REGEXP_LIKE(registration_number,'^(GB)(GD)[[:digit:]]{3}$')
1909             AND substr(registration_number,5)>499)
1910             OR
1911            (REGEXP_LIKE(registration_number,'^(GB)(HA)[[:digit:]]{3}$')
1912             AND substr(registration_number,5) BETWEEN 500 AND 999)
1913            ) #' ;
1914 
1915   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1916     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1917   END IF;
1918 
1919   EXECUTE IMMEDIATE l_dynamic_sql
1920           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1921                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1922 
1923     --CASE 2
1924   l_dynamic_sql := l_const_sql||
1925   q'# AND 1= (CASE WHEN (REGEXP_LIKE(registration_number,'^(GB)[[:digit:]]{9}$') OR
1926                      REGEXP_LIKE(registration_number,'^(GB)[[:digit:]]{12}$')) THEN
1927             (SELECT 1
1928             FROM DUAL
1929             CONNECT BY LEVEL<8
1930             HAVING (Mod(SUM(SUBSTR(registration_number,LEVEL+2,1)*(9-LEVEL)),97)-97 +          SUBSTR(registration_number,-2,2) = 0) OR
1931                    (Mod(SUM(SUBSTR(registration_number,LEVEL+2,1)*(9-LEVEL)),97)-97 + 55 +     SUBSTR(registration_number,-2,2) = 0) OR
1932                    (Mod(SUM(SUBSTR(registration_number,LEVEL+2,1)*(9-LEVEL)),97)-97 + 55 -97 + SUBSTR(registration_number,-2,2) = 0))
1933            ELSE :G_MISS_NUM END
1934            ) #' ;
1935 
1936   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1937     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1938   END IF;
1939 
1940   EXECUTE IMMEDIATE l_dynamic_sql
1941           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1942                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
1943 
1944   --Validation for Country Code FR Replacing API VALIDATE_TRN_FR
1945 
1946   ELSIF p_country_code = 'FR' THEN
1947 
1948   l_dynamic_sql := l_const_sql||
1949   q'# AND REGEXP_LIKE(registration_number,'^(FR)[A-HJ-NP-Z0-9]{2}[[:digit:]]{9}$') #' ;
1950 
1951   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1952     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1953   END IF;
1954 
1955   EXECUTE IMMEDIATE l_dynamic_sql
1956           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1957                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1958 
1959   --Validation for Country Code FI Replacing API VALIDATE_TRN_FI
1960 
1961   ELSIF p_country_code = 'FI' THEN
1962 
1963   l_dynamic_sql := l_const_sql||
1964   q'# AND REGEXP_LIKE(registration_number,'^(FI)[[:digit:]]{8}$') #' ;
1965 
1966   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1967     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1968   END IF;
1969 
1970   EXECUTE IMMEDIATE l_dynamic_sql
1971           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1972                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1973 
1974   --Validation for Country Code ES Replacing API VALIDATE_TRN_ES
1975 
1976   ELSIF p_country_code = 'ES' THEN
1977     --Case1
1978 
1979   l_dynamic_sql := l_const_sql||
1980   q'# AND (REGEXP_LIKE(registration_number,'^(EST)[.]*$') OR REGEXP_LIKE(registration_number,'^(ESN)[.]*[A-Za-z]$')) #' ;
1981 
1982   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1983     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1984   END IF;
1985 
1986   EXECUTE IMMEDIATE l_dynamic_sql
1987           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
1988                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
1989 
1990     --Case2
1991   l_dynamic_sql := l_const_sql||
1992   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^(ES)[0-9]+[A-Za-z]$') THEN
1993                substr('A-HJ-NP-TV-Z',mod(substr(registration_number,3,length(registration_number)-3),23) + 1,1)
1994            ELSE :G_MISS_CHAR END) = substr(registration_number, -1,1) #' ;
1995 
1996   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
1997     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
1998   END IF;
1999 
2000   EXECUTE IMMEDIATE l_dynamic_sql
2001           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2002                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_CHAR;
2003 
2004     --Case3
2005   l_dynamic_sql := l_const_sql||
2006   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^(ES)[yzYZ][0-9]+[A-Za-z]$') THEN
2007                 substr('TRWAGMYFPDXBNJZSQVHLCKE',mod(Decode(SubStr(registration_number,3,1),'Y',1,2)||SubStr(registration_number,4,length(registration_number)-4),23) + 1,1)
2008            ELSE :G_MISS_CHAR END) = substr(registration_number, -1,1) #' ;
2009 
2010   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2011     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2012   END IF;
2013 
2014   EXECUTE IMMEDIATE l_dynamic_sql
2015           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2016                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_CHAR;
2017 
2018     --Case4
2019   l_dynamic_sql := l_const_sql||
2020   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^(ES)[k-mxK-MX][0-9]+[A-Za-z]$') THEN
2021                 substr('TRWAGMYFPDXBNJZSQVHLCKE',mod(substr(registration_number,4,length(registration_number)-4),23) + 1,1)
2022            ELSE :G_MISS_CHAR END) = substr(registration_number, -1,1) #' ;
2023 
2024   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2025     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2026   END IF;
2027 
2028   EXECUTE IMMEDIATE l_dynamic_sql
2029           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2030                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_CHAR;
2031 
2032     --Case5
2033   l_dynamic_sql := l_const_sql||
2034   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^(ES)[A-HJP-SU-W][0-9]+[A-Ja-j]$') THEN
2035                 substr('JABCDEFGHI',(10-MOD((substr(substr(registration_number,4,length(registration_number)-4),2,1) +
2036                 substr(substr(registration_number,4,length(registration_number)-4),4,1) +
2037                 substr(substr(registration_number,4,length(registration_number)-4),6,1) +
2038                 substr(substr(substr(registration_number,4,length(registration_number)-4),1,1) * 2,1,1) +
2039                 nvl(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),1,1))
2040                           * 2),2,1),'0') +
2041                 substr(substr(substr(registration_number,4,length(registration_number)-4),3,1) * 2,1,1) +
2042                 nvl(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),3,1))
2043                           * 2),2,1),'0') +
2044                 substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),5,1)) * 2),1,1) +
2045                 nvl(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),5,1))
2046                           * 2),2,1),'0') +
2047                 substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),7,1)) * 2),1,1) +
2048                 nvl(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),7,1))
2049                           * 2),2,1),'0')
2050                 + nvl(to_number(substr(substr(registration_number,4,length(registration_number)-4),8,1)),0)
2051                 + nvl(to_number(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),9,1)) * 2),1,1)),0) +
2052                 to_number(nvl(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),9,1))
2053                           * 2),2,1),'0'))),10)) + 1, 1)
2054             ELSE :G_MISS_CHAR
2055             END) = substr(registration_number, -1,1)  #' ;
2056 
2057   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2058     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2059   END IF;
2060 
2061   EXECUTE IMMEDIATE l_dynamic_sql
2062           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2063                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_CHAR;
2064 
2065     --Case6
2066   l_dynamic_sql := l_const_sql||
2067   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^(ES)[A-HJP-SU-W][0-9]+[k-zK-Z]$')  THEN
2068                (10-MOD((substr(substr(registration_number,4,length(registration_number)-4),2,1) +
2069                 substr(substr(registration_number,4,length(registration_number)-4),4,1) +
2070                 substr(substr(registration_number,4,length(registration_number)-4),6,1) +
2071                 substr(substr(substr(registration_number,4,length(registration_number)-4),1,1) * 2,1,1) +
2072                 nvl(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),1,1))
2073                           * 2),2,1),'0') +
2074                 substr(substr(substr(registration_number,4,length(registration_number)-4),3,1) * 2,1,1) +
2075                 nvl(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),3,1))
2076                           * 2),2,1),'0') +
2077                 substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),5,1)) * 2),1,1) +
2078                 nvl(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),5,1))
2079                           * 2),2,1),'0') +
2080                 substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),7,1)) * 2),1,1) +
2081                 nvl(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),7,1))
2082                           * 2),2,1),'0')
2083                 + nvl(to_number(substr(substr(registration_number,4,length(registration_number)-4),8,1)),0)
2084                 + nvl(to_number(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),9,1)) * 2),1,1)),0) +
2085                 to_number(nvl(substr(to_char(to_number(substr(substr(registration_number,4,length(registration_number)-4),9,1))
2086                           * 2),2,1),'0'))),10))
2087             ELSE :G_MISS_NUM
2088             END) = substr(registration_number, -1,1) #' ;
2089 
2090   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2091     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2092   END IF;
2093 
2094   EXECUTE IMMEDIATE l_dynamic_sql
2095           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2096                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
2097 
2098   --Validation for Country Code EE Replacing API VALIDATE_TRN_EE
2099 
2100   ELSIF p_country_code = 'EE' THEN
2101 
2102   l_dynamic_sql := l_const_sql||
2103   q'# AND REGEXP_LIKE(registration_number,'^(EE)[[:digit:]]{9}$') #' ;
2104 
2105   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2106     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2107   END IF;
2108 
2109   EXECUTE IMMEDIATE l_dynamic_sql
2110           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2111                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
2112 
2113   --Validation for Country Code DK Replacing API VALIDATE_TRN_DK
2114 
2115   ELSIF p_country_code = 'DK' THEN
2116 
2117   l_dynamic_sql := l_const_sql||
2118   q'# AND REGEXP_LIKE(registration_number,'^(DK)[[:digit:]]{8}$') #' ;
2119 
2120   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2121     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2122   END IF;
2123 
2124   EXECUTE IMMEDIATE l_dynamic_sql
2125           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2126                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
2127 
2128   --Validation for Country Code DE Replacing API VALIDATE_TRN_DE
2129 
2130   ELSIF p_country_code = 'DE' THEN
2131 
2132   l_dynamic_sql := l_const_sql||
2133   q'# AND REGEXP_LIKE(registration_number,'^(DE)[[:digit:]]{9}$') #' ;
2134 
2135   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2136     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2137   END IF;
2138 
2139   EXECUTE IMMEDIATE l_dynamic_sql
2140           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2141                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
2142 
2143   --Validation for Country Code CY Replacing API VALIDATE_TRN_CY
2144 
2145   ELSIF p_country_code = 'CY' THEN
2146 
2147   l_dynamic_sql := l_const_sql||
2148   q'# AND REGEXP_LIKE(registration_number,'^(CY)[[:digit:]]{8}[A-Z]$') #' ;
2149 
2150   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2151     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2152   END IF;
2153 
2154   EXECUTE IMMEDIATE l_dynamic_sql
2155           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2156                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
2157 
2158   --Validation for Country Code CO Replacing API VALIDATE_TRN_CO
2159 
2160   ELSIF p_country_code = 'CO' THEN
2161 
2162   l_dynamic_sql :=
2163   ' UPDATE '||p_table_name||
2164   '  SET PROG_INT_NUM1 = '||
2165   q'#   (MOD((nvl(TO_NUMBER(SUBSTR(registration_number,-2,1)),0)   *3  +
2166                   nvl(TO_NUMBER(SUBSTR(registration_number,-3,1)),0)   *7  +
2167                   nvl(TO_NUMBER(SUBSTR(registration_number,-4,1)),0)   *13 +
2168                   nvl(TO_NUMBER(SUBSTR(registration_number,-5,1)),0)   *17 +
2169                   nvl(TO_NUMBER(SUBSTR(registration_number,-6,1)),0)   *19 +
2170                   nvl(TO_NUMBER(SUBSTR(registration_number,-7,1)),0)   *23 +
2171                   nvl(TO_NUMBER(SUBSTR(registration_number,-8,1)),0)   *29 +
2172                   nvl(TO_NUMBER(SUBSTR(registration_number,-9,1)),0)   *37 +
2173                   nvl(TO_NUMBER(SUBSTR(registration_number,-10,1)),0)  *41 +
2174                   nvl(TO_NUMBER(SUBSTR(registration_number,-11,1)),0)  *43 +
2175                   nvl(TO_NUMBER(SUBSTR(registration_number,-12,1)),0)  *47 +
2176                   nvl(TO_NUMBER(SUBSTR(registration_number,-13,1)),0)  *53 +
2177                   nvl(TO_NUMBER(SUBSTR(registration_number,-14,1)),0)  *59 +
2178                   nvl(TO_NUMBER(SUBSTR(registration_number,-15,1)),0)  *67 +
2179                   nvl(TO_NUMBER(SUBSTR(registration_number,-16,1)),0)  *71),11))#'||
2180   ' WHERE request_id = :G_REQUEST_ID
2181     AND record_status = :G_RS_IN_PROCESS
2182     AND registration_number IS NOT NULL
2183     AND '||p_column_name||' = :P_COUNTRY_CODE
2184     AND BITAND(error_number,:G_ES_PTP_COUNTRY_INVALID) = 0
2185     AND prog_int_num1 <> :G_PROG_INT_VAL'||
2186   q'#  AND REGEXP_LIKE(registration_number,'^[[:digit:]]{0,16}$') #';
2187 
2188   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2189     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2190   END IF;
2191 
2192   EXECUTE IMMEDIATE l_dynamic_sql
2193           USING G_REQUEST_ID,G_RS_IN_PROCESS,
2194                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
2195 
2196   l_dynamic_sql :=
2197   ' UPDATE '||p_table_name||
2198   '  SET PROG_INT_NUM1 = :G_PROG_INT_VAL
2199     WHERE request_id = :G_REQUEST_ID
2200     AND record_status = :G_RS_IN_PROCESS
2201     AND registration_number IS NOT NULL
2202     AND '||p_column_name||' = :P_COUNTRY_CODE
2203     AND BITAND(error_number,:G_ES_PTP_COUNTRY_INVALID) = 0
2204     AND DECODE(PROG_INT_NUM1,1,PROG_INT_NUM1,0,PROG_INT_NUM1,11-PROG_INT_NUM1)
2205           = nvl((SUBSTR(registration_number,-1,1)),0)
2206     AND prog_int_num1 <> :G_PROG_INT_VAL'||
2207   q'#  AND REGEXP_LIKE(registration_number,'^[[:digit:]]{0,16}$') #';
2208 
2209   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2210     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2211   END IF;
2212 
2213   EXECUTE IMMEDIATE l_dynamic_sql
2214           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2215                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
2216 
2217   ---Validation for Country Code CL Replacing API VALIDATE_TRN_CL
2218 
2219   ELSIF p_country_code = 'CL' THEN
2220 
2221   l_dynamic_sql := l_const_sql||
2222   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^[[:digit:]]{0,12}[KO1-9]$') THEN
2223             (11-MOD((nvl(TO_NUMBER(SUBSTR(registration_number,-2,1)),0)  *2 +
2224              nvl(TO_NUMBER(SUBSTR(registration_number,-3,1)),0)  *3 +
2225              nvl(TO_NUMBER(SUBSTR(registration_number,-4,1)),0)  *4 +
2226              nvl(TO_NUMBER(SUBSTR(registration_number,-5,1)),0)  *5 +
2227              nvl(TO_NUMBER(SUBSTR(registration_number,-6,1)),0)  *6 +
2228              nvl(TO_NUMBER(SUBSTR(registration_number,-7,1)),0)  *7 +
2229              nvl(TO_NUMBER(SUBSTR(registration_number,-8,1)),0)  *2 +
2230              nvl(TO_NUMBER(SUBSTR(registration_number,-9,1)),0)  *3 +
2231              nvl(TO_NUMBER(SUBSTR(registration_number,-10,1)),0) *4 +
2232              nvl(TO_NUMBER(SUBSTR(registration_number,-11,1)),0) *5 +
2233              nvl(TO_NUMBER(SUBSTR(registration_number,-12,1)),0) *6 +
2234              nvl(TO_NUMBER(SUBSTR(registration_number,-13,1)),0) *7),11))
2235           ELSE :G_MISS_NUM END)  = Decode(substr(registration_number,-1,1),'K',10,'0',11,substr(registration_number,-1,1))  #' ;
2236 
2237   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2238     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2239   END IF;
2240 
2241   EXECUTE IMMEDIATE l_dynamic_sql
2242           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2243                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
2244 
2245   --Validation for Country Code CH Replacing API VALIDATE_TRN_CH
2246 
2247   ELSIF p_country_code = 'CH' THEN
2248 
2249     IF (SYSDATE < TO_DATE('01-01-2014','dd-mm-yyyy') ) THEN
2250       -- we need both old and new validations
2251       l_dynamic_sql := l_const_sql||
2252        q'# AND ( (REGEXP_LIKE(registration_number,'^(CH)[[:digit:]]{6}$') )
2253                  OR
2254          #';
2255     ELSE
2256       -- we need only the new validation
2257       l_dynamic_sql := l_const_sql|| ' ( ';
2258     END IF;
2259     -- adding logic for Swiss Registration Number validation
2260     -- incorporated through bug 14677337
2261     l_dynamic_sql := l_dynamic_sql ||
2262       q'# 'VALID' =
2263             (SELECT
2264              DECODE(ceil(((REGEXP_SUBSTR(num,'[0-9]',1,1))*5+
2265                           (REGEXP_SUBSTR(num,'[0-9]',1,2))*4+
2266                           (REGEXP_SUBSTR(num,'[0-9]',1,3))*3+
2267                           (REGEXP_SUBSTR(num,'[0-9]',1,4))*2+
2268                           (REGEXP_SUBSTR(num,'[0-9]',1,5))*7+
2269                           (REGEXP_SUBSTR(num,'[0-9]',1,6))*6+
2270                           (REGEXP_SUBSTR(num,'[0-9]',1,7))*5+
2271                           (REGEXP_SUBSTR(num,'[0-9]',1,8))*4
2272                          )/11) * 11 -
2273                     ((REGEXP_SUBSTR(num,'[0-9]',1,1))*5+
2274                      (REGEXP_SUBSTR(num,'[0-9]',1,2))*4+
2275                      (REGEXP_SUBSTR(num,'[0-9]',1,3))*3+
2276                      (REGEXP_SUBSTR(num,'[0-9]',1,4))*2+
2277                      (REGEXP_SUBSTR(num,'[0-9]',1,5))*7+
2278                      (REGEXP_SUBSTR(num,'[0-9]',1,6))*6+
2279                      (REGEXP_SUBSTR(num,'[0-9]',1,7))*5+
2280                      (REGEXP_SUBSTR(num,'[0-9]',1,8))*4),
2281                     10,'INVALID',
2282                     (REGEXP_SUBSTR(num,'[0-9]',1,9)),'VALID',
2283                     'INVALID') FINAL_RESULT
2284              FROM (SELECT
2285                      REGEXP_SUBSTR(REPLACE(REGEXP_SUBSTR(registration_number,'^(CHE-[0-9]{3}.[0-9]{3}.[0-9]{3}) (MWST|TVA|IVA)$'),'.',''),'[0-9]+') NUM
2286                    FROM DUAL
2287                   )
2288             WHERE REGEXP_SUBSTR(registration_number,'^(CHE-[0-9]{3}.[0-9]{3}.[0-9]{3}) (MWST|TVA|IVA)$')=registration_number
2289            )
2290           )
2291         #' ;
2292 
2293   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2294     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2295   END IF;
2296 
2297   EXECUTE IMMEDIATE l_dynamic_sql
2298           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2299                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL;
2300 
2301   --Validation for Country Code AR Replacing API VALIDATE_TRN_AR
2302 
2303   ELSIF p_country_code = 'AR' THEN
2304     --CASE1
2305   l_dynamic_sql := l_const_sql||
2306   q'# AND Nvl(REGISTRATION_TYPE_CODE,'CUIL') = 'CUIL'
2307       AND (CASE WHEN REGEXP_LIKE(registration_number,'^[[:digit:]]{11}$') THEN
2308                  (11-MOD(((TO_NUMBER(SUBSTR(registration_number,10,1))) *2 +
2309                           (TO_NUMBER(SUBSTR(registration_number,9,1)))  *3 +
2310                           (TO_NUMBER(SUBSTR(registration_number,8,1)))  *4 +
2311                           (TO_NUMBER(SUBSTR(registration_number,7,1)))  *5 +
2312                           (TO_NUMBER(SUBSTR(registration_number,6,1)))  *6 +
2313                           (TO_NUMBER(SUBSTR(registration_number,5,1)))  *7 +
2314                           (TO_NUMBER(SUBSTR(registration_number,4,1)))  *2 +
2315                           (TO_NUMBER(SUBSTR(registration_number,3,1)))  *3 +
2316                           (TO_NUMBER(SUBSTR(registration_number,2,1)))  *4 +
2317                           (TO_NUMBER(SUBSTR(registration_number,1,1)))  *5),11))
2318          ELSE :G_MISS_NUM END) =  Decode(TO_NUMBER(SUBSTR(registration_number,11,1)),9,10,11,0,TO_NUMBER(SUBSTR(registration_number,11,1))) #' ;
2319 
2320   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2321     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2322   END IF;
2323 
2324   EXECUTE IMMEDIATE l_dynamic_sql
2325           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2326                 p_country_code,(G_ES_PTP_COUNTRY_INVALID+G_ES_PTP_REG_TYPE_INVALID),G_PROG_INT_VAL,G_MISS_NUM;
2327 
2328     --CASE2
2329     --  i feel for DNI it will fail always.
2330   l_dynamic_sql := l_const_sql||
2331   q'# AND Nvl(REGISTRATION_TYPE_CODE,'CUIL') = 'DNI'
2332       AND (CASE WHEN REGEXP_LIKE(registration_number,'^[[:digit:]]{9}$') THEN
2333                  (11-MOD(((TO_NUMBER(SUBSTR(registration_number,10,1))) *2 +
2334                           (TO_NUMBER(SUBSTR(registration_number,9,1)))  *3 +
2335                           (TO_NUMBER(SUBSTR(registration_number,8,1)))  *4 +
2336                           (TO_NUMBER(SUBSTR(registration_number,7,1)))  *5 +
2337                           (TO_NUMBER(SUBSTR(registration_number,6,1)))  *6 +
2338                           (TO_NUMBER(SUBSTR(registration_number,5,1)))  *7 +
2339                           (TO_NUMBER(SUBSTR(registration_number,4,1)))  *2 +
2340                           (TO_NUMBER(SUBSTR(registration_number,3,1)))  *3 +
2341                           (TO_NUMBER(SUBSTR(registration_number,2,1)))  *4 +
2342                           (TO_NUMBER(SUBSTR(registration_number,1,1)))  *5),11))
2343           ELSE :G_MISS_NUM END) = Decode(TO_NUMBER(SUBSTR(registration_number,9,1)),9,10,11,0,TO_NUMBER(SUBSTR(registration_number,9,1)))  #' ;
2344 
2345   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2346     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2347   END IF;
2348 
2349   EXECUTE IMMEDIATE l_dynamic_sql
2350           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2351                 p_country_code,(G_ES_PTP_COUNTRY_INVALID+G_ES_PTP_REG_TYPE_INVALID),G_PROG_INT_VAL,G_MISS_NUM;
2352 
2353   --Validation for Country Code AT Replacing API VALIDATE_TRN_AT
2354 
2355   ELSIF p_country_code = 'AT' THEN
2356 
2357   l_dynamic_sql := l_const_sql||
2358   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'^(ATU)[[:digit:]]{8}$') THEN
2359                substr(100 - (substr(substr(registration_number,5,1)*2,1,1) + nvl(substr(substr(registration_number,5,1)*2,2,1),0) +
2360                substr(substr(registration_number,7,1)*2,1,1) + nvl(substr(substr(registration_number,7,1)*2,2,1),0) +
2361                substr(substr(registration_number,9,1)*2,1,1) + nvl(substr(substr(registration_number,9,1)*2,2,1),0) +
2362                substr(registration_number,4,1) + substr(registration_number,6,1) +
2363                substr(registration_number,8,1) + substr(registration_number,10,1)+4)-1,1)
2364            ELSE :G_MISS_CHAR END) = substr(registration_number,11,1) #' ;
2365 
2366   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2367     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2368   END IF;
2369 
2370   EXECUTE IMMEDIATE l_dynamic_sql
2371           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2372                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_CHAR;
2373 
2374   --Validation for Country Code BE Replacing API VALIDATE_TRN_BE
2375 
2376   ELSIF p_country_code = 'BE' THEN
2377 
2378   l_dynamic_sql := l_const_sql||
2379   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'(1|0)^[[:digit:]]{9}$') THEN
2380                 (97-mod(substr(registration_number,2,7),97))
2381            ELSE :G_MISS_NUM END) = substr(registration_number,9,2) #' ;
2382 
2383   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2384     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2385   END IF;
2386 
2387   EXECUTE IMMEDIATE l_dynamic_sql
2388           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2389                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
2390 
2391   l_dynamic_sql := l_const_sql||
2392   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'(BE)^[[:digit:]]{9}$') THEN
2393                 (97-mod(substr(registration_number,3,7),97))
2394            ELSE :G_MISS_NUM END) = substr(registration_number,10,2) #' ;
2395 
2396   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2397     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2398   END IF;
2399 
2400   EXECUTE IMMEDIATE l_dynamic_sql
2401           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2402                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
2403 
2404   l_dynamic_sql := l_const_sql||
2405   q'# AND (CASE WHEN REGEXP_LIKE(registration_number,'(BE)(1|0)^[[:digit:]]{9}$') THEN
2406                  (97-mod(substr(registration_number,3,7),97))
2407            ELSE :G_MISS_NUM END) = substr(registration_number,11,2) #' ;
2408 
2409   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2410     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2411   END IF;
2412 
2413   EXECUTE IMMEDIATE l_dynamic_sql
2414           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2415                 p_country_code,G_ES_PTP_COUNTRY_INVALID,G_PROG_INT_VAL,G_MISS_NUM;
2416 
2417   --Validation for Country Code BR Replacing API VALIDATE_TRN_BR
2418 
2419   ELSIF p_country_code = 'BR' THEN
2420 
2421   l_dynamic_sql := l_const_sql||
2422   q'# AND NVL(REGISTRATION_TYPE_CODE,'CNPJ') = 'OTHERS' #' ;
2423 
2424   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2425     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2426   END IF;
2427 
2428   EXECUTE IMMEDIATE l_dynamic_sql
2429           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2430                 p_country_code,(G_ES_PTP_COUNTRY_INVALID+G_ES_PTP_REG_TYPE_INVALID),G_PROG_INT_VAL;
2431 
2432   l_dynamic_sql := ' UPDATE '||p_table_name||
2433   ' SET PROG_INT_NUM1 = '||
2434   q'# DECODE((11 - mod(
2435         (to_number(substr(registration_number,9,1)) * 2   +
2436          to_number(substr(registration_number,8,1)) * 3   +
2437          to_number(substr(registration_number,7,1)) * 4   +
2438          to_number(substr(registration_number,6,1)) * 5   +
2439          to_number(substr(registration_number,5,1)) * 6   +
2440          to_number(substr(registration_number,4,1)) * 7   +
2441          to_number(substr(registration_number,3,1)) * 8   +
2442          to_number(substr(registration_number,2,1)) * 9   +
2443          to_number(substr(registration_number,1,1)) * 10),11)),10,0,10,0,
2444         (11 - mod(
2445         (to_number(substr(registration_number,9,1)) * 2   +
2446          to_number(substr(registration_number,8,1)) * 3   +
2447          to_number(substr(registration_number,7,1)) * 4   +
2448          to_number(substr(registration_number,6,1)) * 5   +
2449          to_number(substr(registration_number,5,1)) * 6   +
2450          to_number(substr(registration_number,4,1)) * 7   +
2451          to_number(substr(registration_number,3,1)) * 8   +
2452          to_number(substr(registration_number,2,1)) * 9   +
2453          to_number(substr(registration_number,1,1)) * 10),11))) #'
2454   ||' WHERE request_id = :G_REQUEST_ID'
2455   ||' AND record_status = :G_RS_IN_PROCESS'
2456   ||' AND registration_number IS NOT NULL'
2457   ||' AND '||p_column_name||' = :P_COUNTRY_CODE'
2458   ||' AND BITAND(error_number,:G_ES_PTP_COUNTRY_INVALID) = 0'
2459   ||' AND prog_int_num1 <> :G_PROG_INT_VAL' ||
2460   q'# AND NVL(REGISTRATION_TYPE_CODE,'CNPJ') = 'CPF'
2461       AND REGEXP_LIKE(REGISTRATION_NUMBER,'^(0000)*[[:digit:]]{11}$') #' ;
2462 
2463   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2464     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2465   END IF;
2466 
2467   EXECUTE IMMEDIATE l_dynamic_sql
2468           USING G_REQUEST_ID,G_RS_IN_PROCESS,
2469                 p_country_code,(G_ES_PTP_COUNTRY_INVALID+G_ES_PTP_REG_TYPE_INVALID),G_PROG_INT_VAL;
2470 
2471   l_dynamic_sql := ' UPDATE '||p_table_name
2472   ||' SET PROG_INT_NUM1 = :G_PROG_INT_VAL '
2473   ||' WHERE request_id = :G_REQUEST_ID'
2474   ||' AND record_status = :G_RS_IN_PROCESS'
2475   ||' AND registration_number IS NOT NULL'
2476   ||' AND '||p_column_name||' = :P_COUNTRY_CODE'
2477   ||' AND BITAND(error_number,:G_ES_PTP_COUNTRY_INVALID) = 0'
2478   ||' AND prog_int_num1 <> :G_PROG_INT_VAL' ||
2479   q'# AND NVL(REGISTRATION_TYPE_CODE,'CNPJ') = 'CPF'
2480       AND REGEXP_LIKE(REGISTRATION_NUMBER,'^(0000)*[[:digit:]]{11}$')
2481       AND substr(to_char(PROG_INT_NUM1),1,1) = = substr(REGISTRATION_NUMBER,-2,1)
2482       AND substr(to_char(Decode((11 - mod((PROG_INT_NUM1 * 2    +
2483        to_number(substr(registration_number,9,1)) * 3   +
2484        to_number(substr(registration_number,8,1)) * 4   +
2485        to_number(substr(registration_number,7,1)) * 5   +
2486        to_number(substr(registration_number,6,1)) * 6   +
2487        to_number(substr(registration_number,5,1)) * 7   +
2488        to_number(substr(registration_number,4,1)) * 8   +
2489        to_number(substr(registration_number,3,1)) * 9   +
2490        to_number(substr(registration_number,2,1)) * 10  +
2491        to_number(substr(registration_number,1,1)) * 11),11)),11,0,10,0,
2492        (11 - mod((PROG_INT_NUM1 * 2    +
2493        to_number(substr(registration_number,9,1)) * 3   +
2494        to_number(substr(registration_number,8,1)) * 4   +
2495        to_number(substr(registration_number,7,1)) * 5   +
2496        to_number(substr(registration_number,6,1)) * 6   +
2497        to_number(substr(registration_number,5,1)) * 7   +
2498        to_number(substr(registration_number,4,1)) * 8   +
2499        to_number(substr(registration_number,3,1)) * 9   +
2500        to_number(substr(registration_number,2,1)) * 10  +
2501        to_number(substr(registration_number,1,1)) * 11),11)))),1,1)
2502          = substr(registration_number,-1,1) #' ;
2503 
2504   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2505     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2506   END IF;
2507 
2508   EXECUTE IMMEDIATE l_dynamic_sql
2509           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2510                 p_country_code,(G_ES_PTP_COUNTRY_INVALID+G_ES_PTP_REG_TYPE_INVALID),G_PROG_INT_VAL;
2511 
2512   l_dynamic_sql := ' UPDATE '||p_table_name
2513   ||' SET PROG_INT_NUM1 = '||
2514   q'# DECODE((11 - mod(
2515        (to_number(substr(registration_number,-3,1)) * 2 +
2516         to_number(substr(registration_number,-4,1)) * 3 +
2517         to_number(substr(registration_number,-5,1)) * 4 +
2518         to_number(substr(registration_number,-6,1)) * 5 +
2519         to_number(substr(registration_number,-7,1)) * 6 +
2520         to_number(substr(registration_number,-8,1)) * 7 +
2521         to_number(substr(registration_number,-9,1)) * 8 +
2522         to_number(substr(registration_number,-10,1)) * 9 +
2523         to_number(substr(registration_number,-11,1)) * 2 +
2524         to_number(substr(registration_number,-12,1)) * 3 +
2525         to_number(substr(registration_number,-13,1)) * 4 +
2526         to_number(substr(registration_number,-14,1))* 5),11)),10,0,10,0,
2527         (11 - mod(
2528          (to_number(substr(registration_number,-3,1)) * 2 +
2529           to_number(substr(registration_number,-4,1)) * 3 +
2530           to_number(substr(registration_number,-5,1)) * 4 +
2531           to_number(substr(registration_number,-6,1)) * 5 +
2532           to_number(substr(registration_number,-7,1)) * 6 +
2533           to_number(substr(registration_number,-8,1)) * 7 +
2534           to_number(substr(registration_number,-9,1)) * 8 +
2535           to_number(substr(registration_number,-10,1)) * 9 +
2536           to_number(substr(registration_number,-11,1)) * 2 +
2537           to_number(substr(registration_number,-12,1)) * 3 +
2538           to_number(substr(registration_number,-13,1)) * 4 +
2539           to_number(substr(registration_number,-14,1))* 5),11))) #'
2540   ||' WHERE request_id = :G_REQUEST_ID'
2541   ||' AND record_status = :G_RS_IN_PROCESS'
2542   ||' AND registration_number IS NOT NULL'
2543   ||' AND '||p_column_name||' = :P_COUNTRY_CODE'
2544   ||' AND BITAND(error_number,:G_ES_PTP_COUNTRY_INVALID) = 0'
2545   ||' AND prog_int_num1 <> :G_PROG_INT_VAL' ||
2546   q'# AND NVL(REGISTRATION_TYPE_CODE,'CNPJ') = 'CNPJ'
2547       AND REGEXP_LIKE(registration_number,'^[[:digit:]]?[[:digit:]]{14}$') #' ;
2548 
2549   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2550     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2551   END IF;
2552 
2553   EXECUTE IMMEDIATE l_dynamic_sql
2554           USING G_REQUEST_ID,G_RS_IN_PROCESS,
2555                 p_country_code,(G_ES_PTP_COUNTRY_INVALID+G_ES_PTP_REG_TYPE_INVALID),G_PROG_INT_VAL;
2556 
2557 
2558   l_dynamic_sql := ' UPDATE '||p_table_name
2559   ||' SET PROG_INT_NUM1 = :G_PROG_INT_VAL '
2560   ||' WHERE request_id = :G_REQUEST_ID'
2561   ||' AND record_status = :G_RS_IN_PROCESS'
2562   ||' AND registration_number IS NOT NULL'
2563   ||' AND '||p_column_name||' = :P_COUNTRY_CODE'
2564   ||' AND BITAND(error_number,:G_ES_PTP_COUNTRY_INVALID) = 0'
2565   ||' AND prog_int_num1 <> :G_PROG_INT_VAL' ||
2566   q'# AND NVL(REGISTRATION_TYPE_CODE,'CNPJ') = 'CNPJ'
2567       AND REGEXP_LIKE(registration_number,'^[[:digit:]]?[[:digit:]]{14}$')
2568       AND substr(to_char(PROG_INT_NUM1),1,1) = = substr(registration_number,-2,1)
2569       AND substr(to_char(Decode((11 - mod(((l_control_digit_1 * 2)   +
2570               to_number(substr(registration_number,-3,1)) * 3   +
2571               to_number(substr(registration_number,-4,1)) * 4   +
2572               to_number(substr(registration_number,-5,1)) * 5   +
2573               to_number(substr(registration_number,-6,1)) * 6   +
2574               to_number(substr(registration_number,-7,1)) * 7   +
2575               to_number(substr(registration_number,-8,1)) * 8   +
2576               to_number(substr(registration_number,-9,1)) * 9   +
2577               to_number(substr(registration_number,-10,1)) * 2   +
2578               to_number(substr(registration_number,-11,1)) * 3   +
2579               to_number(substr(registration_number,-12,1)) * 4   +
2580               to_number(substr(registration_number,-13,1)) * 5   +
2581               to_number(substr(registration_number,-14,1)) * 6),11)),11,0,10,0,
2582                (11 - mod(((l_control_digit_1 * 2)   +
2583                 to_number(substr(registration_number,-3,1)) * 3   +
2584                 to_number(substr(registration_number,-4,1)) * 4   +
2585                 to_number(substr(registration_number,-5,1)) * 5   +
2586                 to_number(substr(registration_number,-6,1)) * 6   +
2587                 to_number(substr(registration_number,-7,1)) * 7   +
2588                 to_number(substr(registration_number,-8,1)) * 8   +
2589                 to_number(substr(registration_number,-9,1)) * 9   +
2590                 to_number(substr(registration_number,-10,1)) * 2  +
2591                 to_number(substr(registration_number,-11,1)) * 3  +
2592                 to_number(substr(registration_number,-12,1)) * 4  +
2593                 to_number(substr(registration_number,-13,1)) * 5  +
2594                 to_number(substr(registration_number,-14,1)) * 6),11)))),1,1)
2595          = substr(registration_number,-1,1) #' ;
2596 
2597   IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2598     FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'TRNValidation',L_DYNAMIC_SQL);
2599   END IF;
2600 
2601   EXECUTE IMMEDIATE l_dynamic_sql
2602           USING G_PROG_INT_VAL,G_REQUEST_ID,G_RS_IN_PROCESS,
2603                 p_country_code,(G_ES_PTP_COUNTRY_INVALID+G_ES_PTP_REG_TYPE_INVALID),G_PROG_INT_VAL;
2604 
2605   END IF;
2606 
2607   IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2608     FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'TRNValidation','TRNValidation(-)');
2609   END IF;
2610 
2611   EXCEPTION
2612     WHEN OTHERS THEN
2613       log_now (p_log_level => FND_FILE.LOG
2614               ,p_message   => l_dynamic_sql
2615               );
2616       log_now (p_log_level => FND_FILE.LOG
2617               ,p_message   => 'TRNValidation'||' : '||p_table_name||' : '||p_country_code||' : '||SQLERRM
2618               );
2619     RAISE;
2620   END TRNValidation;
2621 
2622   -------------------------------------------------------------------------------
2623   -------------------------------------------------------------------------------
2624   -------------------------------------------------------------------------------
2625 
2626   PROCEDURE ProcessRegistrationRecord IS
2627 
2628   CURSOR get_country_codes IS
2629   SELECT DISTINCT prog_int_char1
2630   FROM zx_registrations_int
2631   WHERE record_status = G_RS_IN_PROCESS
2632     AND request_id = G_REQUEST_ID
2633     AND BITAND(error_number,G_ES_REG_TAX_REG_INVALID) = 0
2634     AND prog_int_char1 IS NOT NULL
2635     AND prog_int_char1 IN ('TW','SK','SI','SE','RU','PT','PL','NL','MT',
2636                          'LV','LU','LT','IT','IE','HU','GR','GB','FR',
2637                          'FI','ES','EE','DK','DE','CY','CO','CL','CH',
2638                          'AR','AT','BE','BR');
2639   l_date1 DATE;
2640   l_date2 DATE;
2641   l_date3 DATE;
2642   l_date4 DATE;
2643   l_date5 DATE;
2644 
2645   BEGIN
2646 
2647     l_date1     := SYSDATE;
2648 
2649     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2650       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord','ProcessRegistrationRecord(+)');
2651     END IF;
2652 
2653     -------------------------
2654     -- Populate default values
2655     -------------------------
2656     UPDATE zx_registrations_int
2657     SET request_id = G_REQUEST_ID
2658        ,record_status = G_RS_IN_PROCESS
2659        ,dml_type = UPPER(dml_type)
2660        ,prog_int_char1 = NULL
2661        ,prog_int_num1 = 0
2662        ,error_number = 0
2663     WHERE NVL(record_status,G_RS_ERROR) <> G_RS_VALID
2664     AND NVL(batch_id,G_MISS_NUM) =
2665         NVL(G_BATCH_ID,NVL(batch_id,G_MISS_NUM));
2666 
2667     G_DEBUG_STATEMENT:='Populated default values onto '||SQL%ROWCOUNT||' records';
2668     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2669       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord',G_DEBUG_STATEMENT);
2670     END IF;
2671 
2672     -------------------------
2673     -- Check Mandatory Paramters
2674     -------------------------
2675 
2676     UPDATE zx_registrations_int
2677     SET error_number = G_ES_REG_MAND_PARAM_MISSING
2678     WHERE request_id = G_REQUEST_ID
2679     AND record_status = G_RS_IN_PROCESS
2680     AND NVL(tax_regime_code,tax_regime_name) IS NULL;
2681 
2682     G_DEBUG_STATEMENT:='Mandatory Parameters not populated for '||SQL%ROWCOUNT||' records';
2683     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2684       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord',G_DEBUG_STATEMENT);
2685     END IF;
2686 
2687     -------------------------
2688     -- Duplicate records checking
2689     -------------------------
2690 
2691     UPDATE zx_registrations_int  orig
2692     SET error_number = error_number + G_ES_REG_DUP_INTF_RECORD,
2693         record_status = G_RS_ERROR
2694     WHERE request_id = G_REQUEST_ID
2695     AND record_status = G_RS_IN_PROCESS
2696     AND error_number <> G_ES_REG_MAND_PARAM_MISSING
2697     AND EXISTS (
2698                 SELECT /*+ FIRST_ROWS(1) */ 1
2699                 FROM zx_registrations_int dup
2700                 WHERE dup.rowid <> orig.rowid
2701                 AND dup.request_id = G_REQUEST_ID
2702                 AND dup.record_status = G_RS_IN_PROCESS
2703                 AND NVL(dup.party_tax_profile_id,G_MISS_NUM)
2704                       = NVL(orig.party_tax_profile_id,G_MISS_NUM)
2705                 AND NVL(dup.intf_ptp_reference,G_MISS_CHAR)
2706                       = NVL(orig.intf_ptp_reference,G_MISS_CHAR)
2707                 AND NVL(dup.tax_regime_code,G_MISS_CHAR)  = NVL(orig.tax_regime_code,G_MISS_CHAR)
2708                 AND NVL(dup.tax_regime_name,G_MISS_CHAR)  = NVL(orig.tax_regime_name,G_MISS_CHAR)
2709                 AND NVL(dup.tax_code,G_MISS_CHAR)  = NVL(orig.tax_code,G_MISS_CHAR)
2710                 AND NVL(dup.tax_name,G_MISS_CHAR)  = NVL(orig.tax_name,G_MISS_CHAR)
2711                 AND NVL(dup.tax_jurisdiction_code,G_MISS_CHAR) =
2712                     NVL(orig.tax_jurisdiction_code,G_MISS_CHAR)
2713                 AND NVL(dup.tax_jurisdiction_name,G_MISS_CHAR) =
2714                     NVL(orig.tax_jurisdiction_name,G_MISS_CHAR)
2715                 AND dup.effective_from = orig.effective_from
2716                 AND ROWNUM = 1
2717                );
2718 
2719     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' duplicate records exists';
2720     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2721       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord',G_DEBUG_STATEMENT);
2722     END IF;
2723 
2724     -------------------------
2725     -- Value to Id Conversion
2726     -------------------------
2727 
2728     l_date2     := SYSDATE;
2729     RegValueToIdConversion();
2730     l_date3     := SYSDATE;
2731 
2732     G_DEBUG_STATEMENT:= 'Value to Id Conversion completed for reg records';
2733     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2734       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord',G_DEBUG_STATEMENT);
2735     END IF;
2736 
2737     -------------------------
2738     --  Record level validations
2739     -------------------------
2740     --  Registrations with overlapping date ranges.
2741 
2742     UPDATE zx_registrations_int  orig
2743     SET error_number = error_number + G_ES_REG_DATE_OVERLAP,
2744         record_status = G_RS_ERROR
2745     WHERE request_id = G_REQUEST_ID
2746     AND record_status = G_RS_IN_PROCESS
2747     AND BITAND(error_number,G_ES_REG_DUP_INTF_RECORD) = 0
2748     AND EXISTS (
2749                 SELECT /*+ FIRST_ROWS(1) */ 1
2750                 FROM zx_registrations_int dup
2751                 WHERE dup.rowid <> orig.rowid
2752                 AND dup.request_id = G_REQUEST_ID
2753                 AND dup.record_status = G_RS_IN_PROCESS
2754                 AND dup.intf_ptp_reference = orig.intf_ptp_reference
2755                 AND dup.tax_regime_code  = orig.tax_regime_code
2756                 AND NVL(dup.tax_code,G_MISS_CHAR)  = NVL(orig.tax_code,G_MISS_CHAR)
2757                 AND NVL(dup.tax_jurisdiction_code,G_MISS_CHAR) =
2758                     NVL(orig.tax_jurisdiction_code,G_MISS_CHAR)
2759                 AND BITAND(dup.error_number,G_ES_REG_TAX_REG_INVALID+
2760                                             G_ES_REG_TAX_PARAM_INVALID+
2761                                             G_ES_REG_TAX_JUR_INVALID+
2762                                             G_ES_REG_DUP_INTF_RECORD) = 0
2763                 AND (   dup.effective_to IS NULL
2764                      OR orig.effective_from <= dup.effective_to
2765                     )
2766                 AND (   orig.effective_to IS NULL
2767                      OR orig.effective_to >= dup.effective_from
2768                     )
2769                 AND ROWNUM = 1
2770                );
2771 
2772     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Registrations with overlapping date ranges.';
2773     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2774       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord',G_DEBUG_STATEMENT);
2775     END IF;
2776 
2777     -----------------
2778     -- TRN Validation
2779     -----------------
2780 
2781     --Initialise prog_int_char1 with Country Code
2782     UPDATE ZX_REGISTRATIONS_INT REG
2783     SET PROG_INT_CHAR1 = (SELECT COUNTRY_CODE
2784                             FROM ZX_REGIMES_B TR
2785                            WHERE TR.TAX_REGIME_CODE = REG.TAX_REGIME_CODE)
2786     WHERE request_id = G_REQUEST_ID
2787     AND PROG_INT_CHAR1 IS NULL
2788     AND TAX_REGIME_CODE IS NOT NULL
2789     AND record_status = G_RS_IN_PROCESS
2790     AND BITAND(error_number,G_ES_REG_TAX_REG_INVALID) = 0;
2791 
2792     --Stamp Valid Status for Null registration_number OR Country Code
2793     UPDATE zx_registrations_int reg_int
2794     SET PROG_INT_NUM1 = G_PROG_INT_VAL
2795     WHERE request_id = G_REQUEST_ID
2796     AND prog_int_char1 IS NULL
2797     OR registration_number IS NULL
2798     AND record_status = G_RS_IN_PROCESS;
2799 
2800     FOR rec in get_country_codes LOOP
2801       TRNValidation(p_table_name   => G_INTF_REG_TABLE_NAME
2802                    ,p_column_name  => 'prog_int_char1'
2803                    ,p_country_code => rec.prog_int_char1
2804                    );
2805     END LOOP;
2806 
2807     -- Final Updation of the Record Status and error Codes
2808     UPDATE zx_registrations_int reg
2809     SET error_number  = error_number + G_ES_REG_REG_NUM_INVALID
2810     WHERE prog_int_char1 IS NOT NULL
2811     AND prog_int_char1 IN ('TW','SK','SI','SE','RU','PT','PL','NL','MT',
2812                          'LV','LU','LT','IT','IE','HU','GR','GB','FR',
2813                          'FI','ES','EE','DK','DE','CY','CO','CL','CH',
2814                          'AR','AT','BE','BR')
2815     AND registration_number IS NOT NULL
2816     AND prog_int_num1 <> G_PROG_INT_VAL
2817     AND request_id = G_REQUEST_ID
2818     AND record_status = G_RS_IN_PROCESS;
2819 
2820     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records exists with invalid TRN';
2821     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2822       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord',G_DEBUG_STATEMENT);
2823     END IF;
2824 
2825     l_date4     := SYSDATE;
2826 
2827     -------------------------
2828     --  Record level validations
2829     -------------------------
2830 
2831     -- Validation to check multiple default_registration_flag defined for a ptp
2832     UPDATE zx_registrations_int orig
2833     SET error_number = error_number + G_ES_REG_MULT_DEF_FLAG
2834     WHERE orig.record_status = G_RS_IN_PROCESS
2835     AND orig.request_id = G_REQUEST_ID
2836     AND BITAND(orig.error_number,G_ES_REG_DEFREG_FLG_INVALID) = 0
2837     AND NVL(orig.default_registration_flag,'N')  = 'Y'
2838     AND EXISTS (
2839                 SELECT /*+ FIRST_ROWS(1) */ 1
2840                 FROM zx_registrations_int dup
2841                 WHERE dup.rowid <> orig.rowid
2842                 AND dup.request_id = G_REQUEST_ID
2843                 AND dup.record_status = G_RS_IN_PROCESS
2844                 AND NVL(dup.default_registration_flag,'N')  = 'Y'
2845                 AND BITAND(dup.error_number,G_ES_REG_DEFREG_FLG_INVALID) = 0
2846                 AND dup.intf_ptp_reference = orig.intf_ptp_reference
2847                 AND ROWNUM = 1
2848                );
2849 
2850     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records exists with multiple default_registration_flag defined for a ptp';
2851     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2852       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord',G_DEBUG_STATEMENT);
2853     END IF;
2854 
2855     -- Validation to check when REGISTRATION_STATUS_CODE = 'REGISTERED'
2856     --  and REGISTRATION_SOURCE_CODE = 'EXPLICIT', tax authority is required
2857     UPDATE zx_registrations_int
2858     SET error_number = error_number + G_ES_REG_TAX_AUT_REQ
2859     WHERE record_status = G_RS_IN_PROCESS
2860     AND request_id = G_REQUEST_ID
2861     AND BITAND(error_number,G_ES_REG_TAX_AUT_INVALID) = 0
2862     AND NVL(registration_status_code,G_MISS_CHAR) = 'REGISTERED'
2863     AND NVL(registration_source_code,G_MISS_CHAR) = 'EXPLICIT'
2864     AND tax_authority_id IS NULL;
2865 
2866     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records exists with Tax Authority req Check';
2867     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2868       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord',G_DEBUG_STATEMENT);
2869     END IF;
2870 
2871 
2872     -------------------------
2873     -- No Other Validations
2874     -------------------------
2875 
2876     UPDATE zx_registrations_int reg_int
2877     SET record_status = DECODE(error_number,0,G_RS_VALID,G_RS_ERROR)
2878     WHERE request_id = G_REQUEST_ID
2879     AND record_status = G_RS_IN_PROCESS;
2880 
2881     UPDATE zx_party_tax_profile_int ptp_int
2882     SET record_status = NULL
2883     WHERE request_id = G_REQUEST_ID
2884     AND record_status = G_RS_VALID
2885     AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
2886                 FROM zx_registrations_int reg_int
2887                 WHERE request_id = G_REQUEST_ID
2888                 AND record_status = G_RS_ERROR
2889                 AND reg_int.intf_ptp_reference = ptp_int.intf_ptp_reference);
2890 
2891     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' PTP records updated with NULL record_status';
2892     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2893       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord',G_DEBUG_STATEMENT);
2894     END IF;
2895 
2896 
2897     l_date5     := SYSDATE;
2898 
2899     log_now (p_log_level => FND_FILE.LOG
2900             ,p_message   => '+--------------------------------------------------------------------'
2901             );
2902     log_now (p_log_level => FND_FILE.LOG
2903             ,p_message   => '|              PERF METRICS for Processing Registrations Records'
2904             );
2905     log_now (p_log_level => FND_FILE.LOG
2906             ,p_message   => '| Time Taken for Value to ID Conversions     '||(l_date3-l_date2)*86400||' Secs'
2907             );
2908     log_now (p_log_level => FND_FILE.LOG
2909             ,p_message   => '| Time Taken for TRN Validation              '||(l_date4-l_date3)*86400||' Secs'
2910             );
2911     log_now (p_log_level => FND_FILE.LOG
2912             ,p_message   => '| Total Time Taken for REG Record Processing '||(l_date5-l_date1)*86400||' Secs'
2913             );
2914     log_now (p_log_level => FND_FILE.LOG
2915             ,p_message   => '+--------------------------------------------------------------------'
2916             );
2917 
2918     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2919       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ProcessRegistrationRecord','ProcessRegistrationRecord(-)');
2920     END IF;
2921 
2922   EXCEPTION
2923     WHEN OTHERS THEN
2924       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
2925       G_MSG_DATA      := SQLERRM;
2926       log_now (p_log_level => FND_FILE.LOG
2927               ,p_message   => 'ProcessRegistrationRecord'||' : '||SQLERRM
2928               );
2929       RAISE;
2930   END ProcessRegistrationRecord;
2931 
2932 
2933   ------------------------------------------------------------------------------
2934   ------------------------------------------------------------------------------
2935   ------------------------------------------------------------------------------
2936   PROCEDURE  RegValueToIdConversion IS
2937     --
2938     -- records will be processed with record_status as G_RS_IN_PROCESS
2939     --                              and error_number <> G_ES_REG_DUP_INTF_RECORD
2940     --
2941   BEGIN
2942 
2943     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2944       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'RegValueToIdConversion','RegValueToIdConversion(+)');
2945     END IF;
2946 
2947     -- Records with invalid dml_type
2948     UPDATE zx_registrations_int
2949     SET error_number = error_number + G_ES_REG_TRANS_TYPE_INVALID
2950     WHERE record_status = G_RS_IN_PROCESS
2951     AND request_id = G_REQUEST_ID
2952     AND dml_type <> 'CREATE';
2953 
2954     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid dml_type';
2955     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2956       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
2957     END IF;
2958 
2959     -- Validate the fields effective_to and effective_from
2960     UPDATE zx_registrations_int
2961     SET error_number = error_number + G_ES_REG_DATE_RANGE_INVALID
2962     WHERE record_status = G_RS_IN_PROCESS
2963     AND request_id = G_REQUEST_ID
2964     AND effective_to IS NOT NULL
2965     AND effective_to <  effective_from;
2966 
2967     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid date ';
2968     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
2969       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
2970     END IF;
2971 
2972     -- validating the fields registration_type_code and registration_type_name
2973     UPDATE zx_registrations_int reg_int
2974     SET error_number = error_number + G_ES_REG_REG_TYPE_INVALID
2975     WHERE (( REGISTRATION_TYPE_CODE IS NOT NULL
2976              AND NOT EXISTS
2977                 (
2978                   SELECT 1
2979                     FROM fnd_lookups    fndlookup
2980                    WHERE fndlookup.lookup_type = 'ZX_REGISTRATIONS_TYPE'
2981                      AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
2982                      AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
2983                      AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
2984                      AND fndlookup.lookup_code = reg_int.REGISTRATION_TYPE_CODE
2985                  )
2986             )
2987            OR
2988            (     REGISTRATION_TYPE_CODE IS NULL
2989              AND REGISTRATION_TYPE_NAME IS NOT NULL
2990              AND NOT EXISTS
2991                  ( SELECT 1
2992                      FROM fnd_lookups    fndlookup
2993                     WHERE fndlookup.lookup_type = 'ZX_REGISTRATIONS_TYPE'
2994                       AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
2995                       AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
2996                       AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
2997                       AND fndlookup.meaning = reg_int.REGISTRATION_TYPE_NAME
2998                  )
2999             )
3000           )
3001     AND record_status = G_RS_IN_PROCESS
3002     AND request_id = G_REQUEST_ID;
3003 
3004     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid registration_type ';
3005     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3006       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3007     END IF;
3008 
3009     -- value to id conversion for registration_type_code
3010     UPDATE zx_registrations_int reg_int
3011     SET registration_type_code = (
3012                     SELECT fndlookup.lookup_code
3013                     FROM    fnd_lookups    fndlookup
3014                     WHERE   fndlookup.lookup_type = 'ZX_REGISTRATIONS_TYPE'
3015                     AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
3016                     AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
3017                     AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
3018                     AND fndlookup.meaning = reg_int.REGISTRATION_TYPE_NAME
3019                                  )
3020     WHERE record_status = G_RS_IN_PROCESS
3021     AND request_id = G_REQUEST_ID
3022     AND BITAND(error_number,G_ES_REG_REG_TYPE_INVALID) = 0
3023     AND registration_type_code IS NULL
3024     AND reg_int.REGISTRATION_TYPE_NAME IS NOT NULL;
3025 
3026     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with valid registration_type_code ';
3027     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3028       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3029     END IF;
3030 
3031     -- validating the fields registration_status_code and registration_status_name
3032     UPDATE zx_registrations_int reg_int
3033     SET error_number = error_number + G_ES_REG_REG_STAT_INVALID
3034     WHERE (( registration_status_code IS NOT NULL
3035              AND NOT EXISTS
3036                 (
3037                   SELECT 1
3038                     FROM fnd_lookups    fndlookup
3039                    WHERE fndlookup.lookup_type = 'ZX_REGISTRATIONS_STATUS'
3040                      AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
3041                      AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
3042                      AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
3043                      AND fndlookup.lookup_code = reg_int.registration_status_code
3044                  )
3045             )
3046            OR
3047            (     registration_status_code IS NULL
3048              AND registration_status_name IS NOT NULL
3049              AND NOT EXISTS
3050                  ( SELECT 1
3051                      FROM fnd_lookups    fndlookup
3052                     WHERE fndlookup.lookup_type = 'ZX_REGISTRATIONS_STATUS'
3053                       AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
3054                       AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
3055                       AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
3056                       AND fndlookup.meaning = reg_int.registration_status_name
3057                  )
3058             )
3059           )
3060     AND record_status = G_RS_IN_PROCESS
3061     AND request_id = G_REQUEST_ID;
3062 
3063     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid registration_status ';
3064     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3065       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3066     END IF;
3067 
3068     -- value to id conversion for registration_status_code
3069     UPDATE zx_registrations_int reg_int
3070     SET registration_status_code = (
3071                     SELECT fndlookup.lookup_code
3072                     FROM    fnd_lookups    fndlookup
3073                     WHERE   fndlookup.lookup_type = 'ZX_REGISTRATIONS_STATUS'
3074                     AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
3075                     AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
3076                     AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
3077                     AND fndlookup.meaning = reg_int.registration_status_name
3078                                  )
3079     WHERE record_status = G_RS_IN_PROCESS
3080     AND request_id = G_REQUEST_ID
3081     AND BITAND(error_number,G_ES_REG_REG_STAT_INVALID) = 0
3082     AND registration_status_code IS NULL
3083     AND reg_int.registration_status_name IS NOT NULL;
3084 
3085     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with valid registration_status_code ';
3086     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3087       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3088     END IF;
3089 
3090     -- validating the fields registration_source_code and registration_source_name
3091     UPDATE zx_registrations_int reg_int
3092     SET error_number = error_number + G_ES_REG_REG_SRC_INVALID
3093     WHERE (( registration_source_code IS NOT NULL
3094              AND NOT EXISTS
3095                 (
3096                   SELECT 1
3097                     FROM fnd_lookups    fndlookup
3098                    WHERE fndlookup.lookup_type = 'ZX_REGISTRATIONS_SOURCE'
3099                      AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
3100                      AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
3101                      AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
3102                      AND fndlookup.lookup_code = reg_int.registration_source_code
3103                  )
3104             )
3105            OR
3106            (     registration_source_code IS NULL
3107              AND registration_source_name IS NOT NULL
3108              AND NOT EXISTS
3109                  ( SELECT 1
3110                      FROM fnd_lookups    fndlookup
3111                     WHERE fndlookup.lookup_type = 'ZX_REGISTRATIONS_SOURCE'
3112                       AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
3113                       AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
3114                       AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
3115                       AND fndlookup.meaning = reg_int.registration_source_name
3116                  )
3117             )
3118           )
3119     AND record_status = G_RS_IN_PROCESS
3120     AND request_id = G_REQUEST_ID;
3121 
3122     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid registration_source ';
3123     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3124       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3125     END IF;
3126 
3127     -- value to id conversion for registration_source_code
3128     UPDATE zx_registrations_int reg_int
3129     SET registration_source_code = (
3130                     SELECT fndlookup.lookup_code
3131                     FROM    fnd_lookups    fndlookup
3132                     WHERE   fndlookup.lookup_type = 'ZX_REGISTRATIONS_SOURCE'
3133                     AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
3134                     AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
3135                     AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
3136                     AND fndlookup.meaning = reg_int.registration_source_name
3137                                  )
3138     WHERE record_status = G_RS_IN_PROCESS
3139     AND request_id = G_REQUEST_ID
3140     AND BITAND(error_number,G_ES_REG_REG_SRC_INVALID) = 0
3141     AND registration_source_code IS NULL
3142     AND registration_source_name IS NOT NULL;
3143 
3144     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with valid registration_source_code ';
3145     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3146       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3147     END IF;
3148 
3149     -- validating the fields registration_reason_code and registration_reason_name
3150     UPDATE zx_registrations_int reg_int
3151     SET error_number = error_number + G_ES_REG_REG_RSN_INVALID
3152     WHERE (( registration_reason_code IS NOT NULL
3153              AND NOT EXISTS
3154                 (
3155                   SELECT 1
3156                     FROM fnd_lookups    fndlookup
3157                    WHERE fndlookup.lookup_type = 'ZX_REGISTRATIONS_REASON'
3158                      AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
3159                      AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
3160                      AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
3161                      AND fndlookup.lookup_code = reg_int.registration_reason_code
3162                  )
3163             )
3164            OR
3165            (     registration_reason_code IS NULL
3166              AND registration_reason_name IS NOT NULL
3167              AND NOT EXISTS
3168                  ( SELECT 1
3169                      FROM fnd_lookups    fndlookup
3170                     WHERE fndlookup.lookup_type = 'ZX_REGISTRATIONS_REASON'
3171                       AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
3172                       AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
3173                       AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
3174                       AND fndlookup.meaning = reg_int.registration_reason_name
3175                  )
3176             )
3177           )
3178     AND record_status = G_RS_IN_PROCESS
3179     AND request_id = G_REQUEST_ID;
3180 
3181     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid registration_reason ';
3182     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3183       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3184     END IF;
3185 
3186     -- value to id conversion for registration_reason_code
3187     UPDATE zx_registrations_int reg_int
3188     SET registration_reason_code = (
3189                     SELECT fndlookup.lookup_code
3190                     FROM    fnd_lookups    fndlookup
3191                     WHERE   fndlookup.lookup_type = 'ZX_REGISTRATIONS_REASON'
3192                     AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
3193                     AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
3194                     AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
3195                     AND fndlookup.meaning = reg_int.registration_reason_name
3196                                  )
3197     WHERE record_status = G_RS_IN_PROCESS
3198     AND request_id = G_REQUEST_ID
3199     AND BITAND(error_number,G_ES_REG_REG_RSN_INVALID) = 0
3200     AND registration_reason_code IS NULL
3201     AND reg_int.registration_reason_name IS NOT NULL;
3202 
3203     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with valid registration_reason_code ';
3204     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3205       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3206     END IF;
3207 
3208     -- validating the fields tax_authority_id and tax_authority_name
3209     UPDATE zx_registrations_int reg_int
3210     SET error_number = error_number + G_ES_REG_TAX_AUT_INVALID
3211     WHERE (( tax_authority_id IS NOT NULL
3212              AND NOT EXISTS
3213                 (
3214                   SELECT 1
3215                   FROM zx_party_tax_profile ptp, hz_parties pty
3216                   WHERE ptp.party_type_code ='TAX_AUTHORITY'
3217                   AND ptp.party_id = ptp.party_id
3218                   AND pty.party_type = 'ORGANIZATION'
3219                   AND ptp.party_tax_profile_id = reg_int.tax_authority_id
3220                  )
3221             )
3222            OR
3223            (     tax_authority_id IS NULL
3224              AND tax_authority_name IS NOT NULL
3225              AND NOT EXISTS
3226                  (
3227                   SELECT 1
3228                   FROM zx_party_tax_profile ptp, hz_parties pty
3229                   WHERE ptp.party_type_code ='TAX_AUTHORITY'
3230                   AND ptp.party_id = PTY.party_id
3231                   AND pty.party_type = 'ORGANIZATION'
3232                   AND pty.party_name = reg_int.tax_authority_name
3233                  )
3234             )
3235           )
3236     AND record_status = G_RS_IN_PROCESS
3237     AND request_id = G_REQUEST_ID;
3238 
3239     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid tax authority ';
3240     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3241       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3242     END IF;
3243 
3244     -- value to id conversion for tax_authority_id
3245     UPDATE zx_registrations_int reg_int
3246     SET tax_authority_id = (
3247                             SELECT PTP.party_tax_profile_id
3248                             FROM zx_party_tax_profile ptp, hz_parties pty
3249                             WHERE ptp.party_type_code ='TAX_AUTHORITY'
3250                             AND ptp.party_id = PTY.party_id
3251                             AND pty.party_type = 'ORGANIZATION'
3252                             AND pty.party_name = reg_int.tax_authority_name
3253                             )
3254     WHERE record_status = G_RS_IN_PROCESS
3255     AND request_id = G_REQUEST_ID
3256     AND BITAND(error_number,G_ES_REG_TAX_AUT_INVALID) = 0
3257     AND tax_authority_id IS NULL
3258     AND tax_authority_name IS NOT NULL;
3259 
3260     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with valid tax_authority_id ';
3261     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3262       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3263     END IF;
3264 
3265     -- validating the field inclusive_tax_flag
3266     UPDATE zx_registrations_int
3267     SET error_number = error_number + G_ES_REG_INC_FLG_INVALID
3268     WHERE record_status = G_RS_IN_PROCESS
3269     AND request_id = G_REQUEST_ID
3270     AND inclusive_tax_flag NOT IN ('Y','N',NULL);
3271 
3272     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid inclusive_tax_flag ';
3273     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3274       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3275     END IF;
3276 
3277     -- validating the fields rounding_rule_code and rounding_rule_name
3278     UPDATE zx_registrations_int reg_int
3279     SET error_number  = error_number + G_ES_REG_ROUND_RULE_INVALID
3280     WHERE (( rounding_rule_code IS NOT NULL
3281              AND NOT EXISTS
3282                 (
3283                   SELECT 1
3284                     FROM fnd_lookups
3285                    WHERE lookup_type = 'ZX_ROUNDING_RULE'
3286                      AND NVL(start_date_active, SYSDATE) <= SYSDATE
3287                      AND NVL(end_date_active, SYSDATE)  >= SYSDATE
3288                      AND NVL(enabled_flag, 'N') = 'Y'
3289                      AND lookup_code = reg_int.rounding_rule_code
3290                  )
3291             )
3292            OR
3293            (     rounding_rule_code IS NULL
3294              AND rounding_rule_name IS NOT NULL
3295              AND NOT EXISTS
3296                  ( SELECT 1
3297                      FROM fnd_lookups
3298                     WHERE lookup_type = 'ZX_ROUNDING_RULE'
3299                       AND NVL(start_date_active, SYSDATE) <= SYSDATE
3300                       AND NVL(end_date_active, SYSDATE)  >= SYSDATE
3301                       AND NVL(enabled_flag, 'N') = 'Y'
3302                       AND meaning = reg_int.rounding_rule_name
3303                  )
3304             )
3305           )
3306     AND record_status = G_RS_IN_PROCESS
3307     AND request_id = G_REQUEST_ID;
3308 
3309     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid rounding_rule ';
3310     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3311       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3312     END IF;
3313 
3314     -- value to id conversion for rounding_rule_code
3315     UPDATE zx_registrations_int reg_int
3316     SET rounding_rule_code = (
3317                     SELECT lookup_code
3318                       FROM fnd_lookups
3319                      WHERE lookup_type = 'ZX_ROUNDING_RULE'
3320                        AND NVL(start_date_active, SYSDATE) <= SYSDATE
3321                        AND NVL(end_date_active, SYSDATE)  >= SYSDATE
3322                        AND NVL(enabled_flag, 'N') = 'Y'
3323                        AND meaning = reg_int.rounding_rule_name
3324                               )
3325     WHERE record_status = G_RS_IN_PROCESS
3326     AND request_id = G_REQUEST_ID
3327     AND BITAND(error_number,G_ES_REG_ROUND_RULE_INVALID) = 0
3328     AND rounding_rule_code IS NULL
3329     AND rounding_rule_name IS NOT NULL;
3330 
3331     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with valid rounding_rule_code ';
3332     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3333       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3334     END IF;
3335 
3336     -- validating the fields legal_location_id and other asccociated columns
3337     UPDATE zx_registrations_int reg_int
3338     SET error_number  = error_number + G_ES_REG_LGL_LOC_INVALID
3339     WHERE (( legal_location_id IS NOT NULL
3340              AND NOT EXISTS
3341                 (
3342                   SELECT 1
3343                   FROM  hr_locations  loc
3344                   WHERE legal_address_flag = 'Y'
3345                   AND SYSDATE < nvl(inactive_date, SYSDATE + 1)
3346                   AND loc.location_id = reg_int.legal_location_id
3347                  )
3348             )
3349            OR
3350            (     legal_location_id IS NULL
3351              AND (legal_location_code IS NOT NULL OR
3352                   address_line_1 IS NOT NULL OR
3353                   region_1 IS NOT NULL OR
3354                   town_or_city IS NOT NULL
3355                  )
3356              AND NOT EXISTS
3357                  (
3358                   SELECT 1
3359                   FROM  hr_locations
3360                   WHERE legal_address_flag = 'Y'
3361                   AND SYSDATE < nvl(inactive_date, SYSDATE + 1)
3362                   AND legal_location_code = reg_int.legal_location_code
3363                   AND NVL(address_line_1,G_MISS_CHAR) = NVL(reg_int.address_line_1,G_MISS_CHAR)
3364                   AND NVL(region_1,G_MISS_CHAR) = NVL(reg_int.region_1,G_MISS_CHAR)
3365                   AND NVL(town_or_city,G_MISS_CHAR) = NVL(reg_int.town_or_city,G_MISS_CHAR)
3366                  )
3367             )
3368           )
3369     AND record_status = G_RS_IN_PROCESS
3370     AND request_id = G_REQUEST_ID;
3371 
3372     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid legal_location_id ';
3373     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3374       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3375     END IF;
3376 
3377     -- value to id conversion for legal_location_id
3378     UPDATE zx_registrations_int reg_int
3379     SET legal_location_id = (
3380                   SELECT legal_location_id
3381                   FROM  hr_locations
3382                   WHERE legal_address_flag = 'Y'
3383                   AND SYSDATE < nvl(inactive_date, SYSDATE + 1)
3384                   AND legal_location_code = reg_int.legal_location_code
3385                   AND NVL(address_line_1,G_MISS_CHAR) =
3386                       NVL(reg_int.Address_Line_1,G_MISS_CHAR)
3387                   AND NVL(region_1,G_MISS_CHAR) =
3388                       NVL(reg_int.Region_1,G_MISS_CHAR)
3389                   AND NVL(town_or_city,G_MISS_CHAR) =
3390                       NVL(reg_int.Town_OR_City,G_MISS_CHAR)
3391                           )
3392     WHERE record_status = G_RS_IN_PROCESS
3393     AND request_id = G_REQUEST_ID
3394     AND BITAND(error_number,G_ES_REG_LGL_LOC_INVALID) = 0
3395     AND legal_location_id IS NULL
3396     AND ( legal_location_code IS NOT NULL OR
3397           address_line_1 IS NOT NULL OR
3398           region_1 IS NOT NULL OR
3399           town_or_city IS NOT NULL
3400         );
3401 
3402     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with valid legal_location_id ';
3403     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3404       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3405     END IF;
3406 
3407     -- validating the field default_registration_flag
3408     UPDATE zx_registrations_int
3409     SET error_number = error_number + G_ES_REG_DEFREG_FLG_INVALID
3410     WHERE record_status = G_RS_IN_PROCESS
3411     AND request_id = G_REQUEST_ID
3412     AND default_registration_flag NOT IN ('Y','N');
3413 
3414     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid default_registration_flag ';
3415     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3416       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3417     END IF;
3418 
3419     -- validating the fields tax_regime_name snd tax_regime_code
3420     UPDATE zx_registrations_int reg_int
3421     SET error_number  = error_number + G_ES_REG_TAX_REG_INVALID
3422     WHERE (( tax_regime_code IS NOT NULL
3423              AND NOT EXISTS
3424                 (
3425                     SELECT 1
3426                       FROM zx_regimes_v
3427                      WHERE has_sub_regime_flag <> 'Y'
3428                        AND tax_regime_code = reg_int.tax_regime_code
3429                  )
3430             )
3431            OR
3432            (     tax_regime_code IS NULL
3433              AND tax_regime_name IS NOT NULL
3434              AND NOT EXISTS
3435                 (
3436                     SELECT 1
3437                       FROM zx_regimes_v
3438                      WHERE has_sub_regime_flag <> 'Y'
3439                        AND tax_regime_name = reg_int.tax_regime_name
3440                  )
3441             )
3442           )
3443     AND record_status = G_RS_IN_PROCESS
3444     AND request_id = G_REQUEST_ID;
3445 
3446     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid tax_regime ';
3447     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3448       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3449     END IF;
3450 
3451     -- value to id conversion for tax_regime_code
3452     UPDATE zx_registrations_int reg_int
3453     SET tax_regime_code = (
3454                             SELECT tax_regime_name
3455                               FROM zx_regimes_v
3456                              WHERE has_sub_regime_flag <> 'Y'
3457                                AND tax_regime_name  =  reg_int.tax_regime_name
3458                                AND rownum=1
3459                           )
3460     WHERE record_status = G_RS_IN_PROCESS
3461     AND request_id = G_REQUEST_ID
3462     AND BITAND(error_number,G_ES_REG_TAX_REG_INVALID) = 0
3463     AND tax_regime_code IS NULL
3464     AND tax_regime_name IS NOT NULL;
3465 
3466     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with valid tax_regime_code ';
3467     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3468       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3469     END IF;
3470 
3471     -- validating the fields tax and tax_name
3472     UPDATE zx_registrations_int reg_int
3473     SET error_number  = error_number + G_ES_REG_TAX_PARAM_INVALID
3474     WHERE (( tax_code IS NOT NULL
3475              AND NOT EXISTS
3476                 (
3477                     SELECT 1
3478                     FROM zx_mco_lv_taxes_v
3479                     WHERE tax_regime_code = reg_int.tax_regime_code
3480                       AND tax = reg_int.tax_code
3481                  )
3482             )
3483            OR
3484            (     tax_code IS NULL
3485              AND tax_name IS NOT NULL
3486              AND NOT EXISTS
3487                 (
3488                     SELECT 1
3489                     FROM zx_mco_lv_taxes_v
3490                     WHERE tax_regime_code = reg_int.tax_regime_code
3491                       AND tax_full_name = reg_int.tax_name
3492                 )
3493             )
3494           )
3495     AND record_status = G_RS_IN_PROCESS
3496     AND request_id = G_REQUEST_ID
3497     AND BITAND(error_number,G_ES_REG_TAX_REG_INVALID) = 0;
3498 
3499     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid tax ';
3500     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3501       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3502     END IF;
3503 
3504     -- value to id conversion for tax
3505     UPDATE zx_registrations_int reg_int
3506     SET tax_code = (
3507                     SELECT tax
3508                     FROM zx_mco_lv_taxes_v
3509                     WHERE tax_regime_code = reg_int.tax_regime_code
3510                     AND tax_full_name = reg_int.tax_name
3511                     AND rownum=1
3512                    )
3513     WHERE record_status = G_RS_IN_PROCESS
3514     AND request_id = G_REQUEST_ID
3515     AND BITAND(error_number,G_ES_REG_TAX_REG_INVALID+
3516                             G_ES_REG_TAX_PARAM_INVALID) = 0
3517     AND tax_code IS NULL
3518     AND tax_name IS NOT NULL;
3519 
3520     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with valid tax_code ';
3521     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3522       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3523     END IF;
3524 
3525     -- validating the fields tax_jurisdiction_code and tax_jurisdiction_name
3526     UPDATE zx_registrations_int reg_int
3527     SET error_number  = error_number + G_ES_REG_TAX_JUR_INVALID
3528     WHERE ( tax_jurisdiction_code IS NOT NULL
3529             OR tax_jurisdiction_name IS NOT NULL
3530           )
3531     AND record_status = G_RS_IN_PROCESS
3532     AND request_id = G_REQUEST_ID
3533     AND BITAND(error_number,G_ES_REG_TAX_REG_INVALID+
3534                             G_ES_REG_TAX_PARAM_INVALID) = 0
3535     AND tax_code IS NULL;
3536 
3537     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid tax_jurisdiction ';
3538     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3539       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3540     END IF;
3541 
3542     -- validating the fields TAX_JURISDICTION_CODE and tax_jurisdiction_name
3543     UPDATE zx_registrations_int reg_int
3544     SET error_number  = error_number + G_ES_REG_TAX_JUR_INVALID
3545     WHERE (( tax_jurisdiction_code IS NOT NULL
3546              AND NOT EXISTS
3547                 (
3548                     SELECT 1
3549                     FROM zx_jurisdictions_b
3550                     WHERE tax_regime_code = reg_int.tax_regime_code
3551                     AND tax = reg_int.tax_code
3552                     AND tax_jurisdiction_code = reg_int.tax_jurisdiction_code
3553                     AND NVL(allow_tax_registrations_flag,'N') = 'Y'
3554                 )
3555             )
3556            OR
3557            (     tax_jurisdiction_code IS NULL
3558              AND tax_jurisdiction_name IS NOT NULL
3559              AND NOT EXISTS
3560                 (
3561                     SELECT 1
3562                     FROM zx_jurisdictions_vl
3563                     WHERE tax_regime_code = reg_int.tax_regime_code
3564                     AND tax = reg_int.tax_code
3565                     AND tax_jurisdiction_name = reg_int.tax_jurisdiction_name
3566                     AND NVL(allow_tax_registrations_flag,'N') = 'Y'
3567                 )
3568             )
3569           )
3570     AND record_status = G_RS_IN_PROCESS
3571     AND request_id = G_REQUEST_ID
3572     AND BITAND(error_number,G_ES_REG_TAX_REG_INVALID+
3573                             G_ES_REG_TAX_PARAM_INVALID+
3574                             G_ES_REG_TAX_JUR_INVALID) = 0
3575     AND tax_code IS NOT NULL;
3576 
3577     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with invalid tax_jurisdiction ';
3578     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3579       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3580     END IF;
3581 
3582     -- value to id conversion for tax_jurisdiction_code
3583     UPDATE zx_registrations_int reg_int
3584     SET tax_jurisdiction_code = (
3585                     SELECT tax_jurisdiction_code
3586                     FROM zx_jurisdictions_vl
3587                     WHERE tax_regime_code = reg_int.tax_regime_code
3588                     AND tax = reg_int.tax_code
3589                     AND tax_jurisdiction_name = reg_int.tax_jurisdiction_name
3590                     AND NVL(allow_tax_registrations_flag,'N') = 'Y'
3591                     AND rownum=1
3592                                  )
3593     WHERE record_status = G_RS_IN_PROCESS
3594     AND request_id = G_REQUEST_ID
3595     AND BITAND(error_number,G_ES_REG_TAX_JUR_INVALID+
3596                             G_ES_REG_TAX_REG_INVALID+
3597                             G_ES_REG_TAX_PARAM_INVALID) = 0
3598     AND tax_jurisdiction_code IS NULL
3599     AND tax_jurisdiction_name IS NOT NULL;
3600 
3601     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' REG records updated with valid tax_jurisdiction_code ';
3602     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3603       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'RegValueToIdConversion',G_DEBUG_STATEMENT);
3604     END IF;
3605 
3606     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3607       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'RegValueToIdConversion','RegValueToIdConversion(-)');
3608     END IF;
3609 
3610   EXCEPTION
3611     WHEN OTHERS THEN
3612       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
3613       G_MSG_DATA      := SQLERRM;
3614       log_now (p_log_level => FND_FILE.LOG
3615               ,p_message   => 'RegValueToIdConversion'||' : '||SQLERRM
3616               );
3617       RAISE;
3618   END RegValueToIdConversion;
3619 
3620   -------------------------------------------------------------------------------
3621   -------------------------------------------------------------------------------
3622   -------------------------------------------------------------------------------
3623   PROCEDURE DupTRNValidation IS
3624 
3625   BEGIN
3626 
3627     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3628       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'DupTRNValidation','DupTRNValidation(+)');
3629     END IF;
3630 
3631     -- Store Party Info in prog_int_char1
3632     UPDATE zx_registrations_int  reg_int
3633     SET prog_int_char1 =
3634                (SELECT /*+ FIRST_ROWS(1) */ intf_party_reference
3635                 FROM zx_party_tax_profile_int ptp_int
3636                 WHERE ptp_int.intf_ptp_reference = reg_int.intf_ptp_reference
3637                 AND ROWNUM = 1 )
3638     WHERE request_id = G_REQUEST_ID
3639     AND NVL(record_status,G_RS_ERROR) = G_RS_VALID;
3640 
3641     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with Party Info in prog_int_char1';
3642     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3643       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3644     END IF;
3645 
3646     -- Ignore Records having allow_dup_regn_num_flag enables at Tax Level.
3647     UPDATE zx_registrations_int  reg_int
3648     SET prog_int_num1 = G_PROG_INT_VAL
3649     WHERE request_id = G_REQUEST_ID
3650     AND NVL(record_status,G_RS_ERROR) = G_RS_VALID
3651     AND BITAND(reg_int.error_number,G_ES_REG_TAX_PARAM_INVALID) = 0
3652     and reg_int.tax_code IS NOT NULL
3653     AND EXISTS (
3654        select 1
3655          from zx_taxes_b tax
3656         where tax.tax = reg_int.tax_code
3657           and tax.tax_regime_code = reg_int.tax_regime_code
3658           and nvl(allow_dup_regn_num_flag,'N') = 'Y'
3659             );
3660 
3661     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with allow_dup_regn_num_flag ';
3662     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3663       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3664     END IF;
3665 
3666     -- TRN duplicate against other Party/sites
3667     UPDATE zx_party_tax_profile_int  ptp_int
3668     SET error_number = error_number + G_ES_PTP_REG_NUM_DUP
3669     WHERE request_id = G_REQUEST_ID
3670     AND NVL(record_status,G_RS_ERROR) = G_RS_VALID
3671     AND ptp_int.registration_number IS NOT NULL
3672     AND EXISTS (
3673        SELECT /*+ FIRST_ROWS(1) */ 1
3674          FROM zx_party_tax_profile_int ptp_dup
3675         WHERE ptp_dup.request_id = ptp_int.request_id
3676           AND ptp_dup.record_status = ptp_int.record_status
3677           AND ptp_dup.registration_number = ptp_int.registration_number
3678           AND ptp_dup.ROWID <> ptp_int.ROWID
3679           AND ptp_dup.intf_party_reference <> ptp_int.intf_party_reference
3680           AND ROWNUM = 1
3681         UNION ALL
3682         select /*+ FIRST_ROWS(1) */ 2
3683          from zx_registrations_int  reg_dup
3684         where reg_dup.request_id = ptp_int.request_id
3685           AND reg_dup.record_status = ptp_int.record_status
3686           AND reg_dup.registration_number = ptp_int.registration_number
3687           AND reg_dup.intf_ptp_reference  <> ptp_int.intf_ptp_reference
3688           AND BITAND(reg_dup.error_number,G_ES_REG_TAX_PARAM_INVALID) = 0
3689           AND reg_dup.prog_int_char1  <> ptp_int.intf_party_reference
3690           AND ROWNUM = 1
3691                );
3692 
3693     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with TRN duplicate against other Party/sites ';
3694     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3695       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3696     END IF;
3697 
3698     -- TRN duplicate for Party Sites  Siblings
3699     UPDATE zx_party_tax_profile_int  ptp_int
3700     SET error_number = error_number + G_ES_PTP_REG_NUM_DUP
3701     WHERE request_id = G_REQUEST_ID
3702     AND NVL(record_status,G_RS_ERROR) = G_RS_VALID
3703     AND party_type_code = 'THIRD_PARTY_SITE'
3704     AND ptp_int.registration_number IS NOT NULL
3705     AND BITAND(ptp_int.error_number,G_ES_PTP_REG_NUM_DUP) = 0
3706     AND EXISTS (
3707         SELECT /*+ FIRST_ROWS(1) */ 1
3708         FROM zx_party_tax_profile_int ptp_dup
3709         WHERE ptp_dup.request_id = ptp_int.request_id
3710         AND ptp_dup.record_status = ptp_int.record_status
3711         and ptp_dup.party_type_code = 'THIRD_PARTY_SITE'
3712         AND ptp_dup.intf_party_reference = ptp_int.intf_party_reference
3713         AND ptp_dup.ROWID <> ptp_int.ROWID
3714         AND (ptp_dup.registration_number = ptp_int.registration_number
3715              OR EXISTS (
3716                 select /*+ FIRST_ROWS(1) */ 2
3717                 from zx_registrations_int  reg_dup
3718                 where reg_dup.request_id = ptp_dup.request_id
3719                 AND reg_dup.record_status = ptp_dup.record_status
3720                 and reg_dup.registration_number =ptp_int.registration_number
3721                 and reg_dup.intf_ptp_reference  =ptp_dup.intf_ptp_reference
3722                         )
3723              )
3724         AND NOT EXISTS (
3725             select 1
3726             from zx_party_tax_profile_int ptp_prnt
3727             where ptp_prnt.request_id = ptp_dup.request_id
3728             AND ptp_prnt.record_status = ptp_dup.record_status
3729             and ptp_prnt.party_type_code = 'THIRD_PARTY'
3730             AND ptp_prnt.intf_party_reference = ptp_dup.intf_party_reference
3731             AND (
3732                  ptp_prnt.registration_number=ptp_dup.registration_number
3733                  OR EXISTS (
3734                     SELECT /*+ FIRST_ROWS(1) */ 1
3735                     FROM zx_registrations_int  reg_prnt
3736                     WHERE reg_prnt.request_id = ptp_prnt.request_id
3737                     AND reg_prnt.record_status = ptp_prnt.record_status
3738                     AND reg_prnt.intf_ptp_reference =ptp_prnt.intf_ptp_reference
3739                     AND reg_prnt.registration_number =
3740                                                 ptp_dup.registration_number
3741                        )
3742                  )
3743                          )
3744         AND ROWNUM = 1
3745               );
3746 
3747     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with TRN duplicate for Party Sites  Siblings ';
3748     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3749       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3750     END IF;
3751 
3752     UPDATE zx_party_tax_profile_int  ptp_int
3753     SET error_number = error_number + G_ES_PTP_REG_NUM_DUP
3754     WHERE request_id = G_REQUEST_ID
3755     AND NVL(record_status,G_RS_ERROR) = G_RS_VALID
3756     AND BITAND(ptp_int.error_number,G_ES_PTP_REG_NUM_DUP) = 0
3757     AND EXISTS(
3758          SELECT /*+ FIRST_ROWS(1) */ 1
3759          FROM zx_party_tax_profile prod
3760         WHERE prod.rep_registration_number = ptp_int.registration_number
3761           AND ROWNUM = 1
3762               );
3763 
3764     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with TRN duplicate against Production';
3765     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3766       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3767     END IF;
3768 
3769     UPDATE zx_party_tax_profile_int  ptp_int
3770     SET error_number = error_number + G_ES_PTP_REG_NUM_DUP
3771     WHERE request_id = G_REQUEST_ID
3772     AND NVL(record_status,G_RS_ERROR) = G_RS_VALID
3773     AND BITAND(ptp_int.error_number,G_ES_PTP_REG_NUM_DUP) = 0
3774     AND EXISTS(
3775          SELECT /*+ FIRST_ROWS(1) */ 1
3776          FROM zx_registrations prod
3777         WHERE prod.registration_number = ptp_int.registration_number
3778           AND ROWNUM = 1
3779               );
3780 
3781     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with TRN duplicate against REG Production';
3782     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3783       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3784     END IF;
3785 
3786     -- TRN duplicate for Third Party and Third Party Site against Diff Party/Sites
3787     UPDATE zx_registrations_int  reg_int
3788     SET error_number = error_number + G_ES_REG_REG_NUM_DUP
3789     WHERE request_id = G_REQUEST_ID
3790     AND NVL(record_status,G_RS_ERROR) = G_RS_VALID
3791     AND prog_int_num1 <> G_PROG_INT_VAL
3792     AND reg_int.registration_number IS NOT NULL
3793     AND EXISTS (
3794           SELECT /*+ FIRST_ROWS(1) */ 1
3795           FROM zx_party_tax_profile_int ptp_dup
3796           WHERE ptp_dup.request_id = reg_int.request_id
3797           AND ptp_dup.record_status = reg_int.record_status
3798           AND ptp_dup.registration_number = reg_int.registration_number
3799           AND ptp_dup.intf_party_reference <> reg_int.prog_int_char1
3800           AND ROWNUM = 1
3801           UNION ALL
3802           select /*+ FIRST_ROWS(1) */ 2
3803           from zx_registrations_int  reg_dup
3804           where reg_dup.request_id = reg_int.request_id
3805           AND reg_dup.record_status = reg_int.record_status
3806           and reg_dup.registration_number = reg_int.registration_number
3807           AND reg_dup.ROWID <> reg_int.ROWID
3808           and reg_dup.prog_int_char1  <> reg_int.prog_int_char1
3809           AND ROWNUM = 1
3810                );
3811 
3812     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with TRN duplicate for Third Party and Third Party Site against Diff Party/Sites';
3813     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3814       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3815     END IF;
3816 
3817     -- TRN duplicate for Third Party Sites  Siblings
3818     UPDATE zx_registrations_int  reg_int
3819     SET error_number = error_number + G_ES_REG_REG_NUM_DUP
3820     WHERE request_id = G_REQUEST_ID
3821     AND NVL(record_status,G_RS_ERROR) = G_RS_VALID
3822     AND prog_int_num1 <> G_PROG_INT_VAL
3823     AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
3824                 FROM zx_party_tax_profile_int  ptp_int
3825                 WHERE ptp_int.request_id = reg_int.request_id
3826                 AND ptp_int.record_status = reg_int.record_status
3827                 AND ptp_int.intf_ptp_reference = reg_int.intf_ptp_reference
3828                 AND ptp_int.intf_party_reference = reg_int.prog_int_char1
3829                 AND ptp_int.party_type_code = 'THIRD_PARTY_SITE'
3830                 AND ROWNUM = 1)
3831     AND reg_int.registration_number IS NOT NULL
3832     AND BITAND(reg_int.error_number,G_ES_REG_REG_NUM_DUP) = 0
3833     AND EXISTS (
3834         SELECT /*+ FIRST_ROWS(1) */ 1
3835         FROM zx_party_tax_profile_int ptp_dup
3836         WHERE ptp_dup.request_id = reg_int.request_id
3837         AND ptp_dup.record_status = reg_int.record_status
3838         and ptp_dup.party_type_code = 'THIRD_PARTY_SITE'
3839         AND ptp_dup.intf_party_reference = reg_int.prog_int_char1
3840         AND ptp_dup.intf_ptp_reference <> reg_int.intf_ptp_reference
3841         AND (ptp_dup.registration_number = reg_int.registration_number
3842              OR EXISTS (
3843                 select /*+ FIRST_ROWS(1) */ 2
3844                 from zx_registrations_int  reg_dup
3845                 where reg_dup.request_id = ptp_dup.request_id
3846                 AND reg_dup.record_status = ptp_dup.record_status
3847                 and reg_dup.registration_number =reg_int.registration_number
3848                 and reg_dup.intf_ptp_reference  =ptp_dup.intf_ptp_reference
3849                 AND reg_dup.prog_int_char1      =reg_int.prog_int_char1
3850                 AND BITAND(reg_dup.error_number,G_ES_REG_TAX_PARAM_INVALID) = 0
3851                         )
3852              )
3853         AND NOT EXISTS (
3854             select /*+ FIRST_ROWS(1) */ 1
3855             from zx_party_tax_profile_int ptp_prnt
3856             where ptp_prnt.request_id = ptp_dup.request_id
3857             AND ptp_prnt.record_status = ptp_dup.record_status
3858             and ptp_prnt.party_type_code = 'THIRD_PARTY'
3859             AND ptp_prnt.intf_party_reference = ptp_dup.intf_party_reference
3860             AND (
3861                  ptp_prnt.registration_number=ptp_dup.registration_number
3862                  OR EXISTS (
3863                     SELECT /*+ FIRST_ROWS(1) */ 1
3864                     FROM zx_registrations_int  reg_prnt
3865                     WHERE reg_prnt.request_id = ptp_prnt.request_id
3866                     AND reg_prnt.record_status = ptp_prnt.record_status
3867                     AND reg_prnt.intf_ptp_reference =ptp_prnt.intf_ptp_reference
3868                     AND reg_prnt.registration_number =
3869                                                 ptp_dup.registration_number
3870                            )
3871                  )
3872                          )
3873         AND ROWNUM = 1
3874               );
3875 
3876     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with TRN duplicate for Third Party Sites  Siblings';
3877     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3878       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3879     END IF;
3880 
3881     -- TRN duplicate against Prod Tables
3882     UPDATE zx_registrations_int  reg_int
3883     SET error_number = error_number + G_ES_REG_REG_NUM_DUP
3884     WHERE request_id = G_REQUEST_ID
3885     AND NVL(record_status,G_RS_ERROR) = G_RS_VALID
3886     AND prog_int_num1 <> G_PROG_INT_VAL
3887     AND BITAND(reg_int.error_number,G_ES_REG_REG_NUM_DUP) = 0
3888     AND EXISTS(
3889          SELECT /*+ FIRST_ROWS(1) */ 1
3890          FROM zx_party_tax_profile prod
3891         WHERE prod.rep_registration_number = reg_int.registration_number
3892           AND ROWNUM = 1
3893               );
3894 
3895     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with TRN duplicate against Prod Tables';
3896     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3897       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3898     END IF;
3899 
3900     -- TRN duplicate against Prod Tables
3901     UPDATE zx_registrations_int  reg_int
3902     SET error_number = error_number + G_ES_REG_REG_NUM_DUP
3903     WHERE request_id = G_REQUEST_ID
3904     AND NVL(record_status,G_RS_ERROR) = G_RS_VALID
3905     AND prog_int_num1 <> G_PROG_INT_VAL
3906     AND BITAND(reg_int.error_number,G_ES_REG_REG_NUM_DUP) = 0
3907     AND EXISTS(
3908          SELECT /*+ FIRST_ROWS(1) */ 1
3909          FROM zx_registrations prod
3910         WHERE prod.registration_number = reg_int.registration_number
3911           AND ROWNUM = 1
3912               );
3913 
3914     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with TRN duplicate against Prod Tables';
3915     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3916       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3917     END IF;
3918 
3919 
3920     UPDATE zx_party_tax_profile_int ptp_int
3921     SET record_status = G_RS_ERROR
3922     WHERE request_id = G_REQUEST_ID
3923     AND record_status = G_RS_VALID
3924     AND error_number > 0;
3925 
3926     G_DEBUG_STATEMENT:='Updated Record Status for '||SQL%ROWCOUNT||' records from '||G_INTF_PTP_TABLE_NAME;
3927     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3928       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3929     END IF;
3930 
3931     UPDATE zx_registrations_int reg_int
3932     SET record_status = G_RS_ERROR
3933     WHERE request_id = G_REQUEST_ID
3934     AND record_status = G_RS_VALID
3935     AND error_number > 0;
3936 
3937     G_DEBUG_STATEMENT:='Updated Record Status for '||SQL%ROWCOUNT||' records from '||G_INTF_REG_TABLE_NAME;
3938     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3939       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3940     END IF;
3941 
3942     UPDATE zx_party_tax_profile_int ptp_int
3943     SET record_status = NULL
3944     WHERE request_id = G_REQUEST_ID
3945     AND record_status = G_RS_VALID
3946     AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
3947                 FROM zx_registrations_int reg_int
3948                 WHERE request_id = G_REQUEST_ID
3949                 AND record_status = G_RS_ERROR
3950                 AND reg_int.intf_ptp_reference = ptp_int.intf_ptp_reference);
3951 
3952     G_DEBUG_STATEMENT:='Reset Record Status for '||SQL%ROWCOUNT||' records from '||G_INTF_PTP_TABLE_NAME;
3953     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3954       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'DupTRNValidation',G_DEBUG_STATEMENT);
3955     END IF;
3956 
3957     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3958       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'DupTRNValidation','DupTRNValidation(-)');
3959     END IF;
3960 
3961   EXCEPTION
3962     WHEN OTHERS THEN
3963       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
3964       G_MSG_DATA      := SQLERRM;
3965       log_now (p_log_level => FND_FILE.LOG
3966               ,p_message   => 'DupTRNValidation'||' : '||SQLERRM
3967               );
3968       RAISE;
3969   END DupTRNValidation;
3970 
3971   -------------------------------------------------------------------------------
3972   -------------------------------------------------------------------------------
3973   -------------------------------------------------------------------------------
3974 
3975   PROCEDURE SyncUpRegNumberToPTP IS
3976 
3977   BEGIN
3978 
3979     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
3980       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'SyncUpRegNumberToPTP','SyncUpRegNumberToPTP(+)');
3981     END IF;
3982 
3983     UPDATE zx_party_tax_profile_int ptp_int
3984     SET registration_number = (
3985                                    SELECT registration_number
3986                                     FROM  zx_registrations_int reg
3987                                     WHERE reg.request_id = G_REQUEST_ID
3988                                     AND NVL(reg.record_status,G_RS_ERROR) = G_RS_VALID
3989                                     AND reg.intf_ptp_reference =  nvl(ptp_int.intf_ptp_reference,G_MISS_CHAR)
3990                                     AND NVL(reg.default_registration_flag,'N') = 'Y'
3991                                     AND BITAND(error_number,G_ES_REG_DEFREG_FLG_INVALID+G_ES_REG_MULT_DEF_FLAG) = 0
3992                                   )
3993     WHERE request_id = G_REQUEST_ID
3994     AND record_status = G_RS_IN_PROCESS
3995     AND EXISTS (
3996                  SELECT 1
3997                   FROM  zx_registrations_int reg
3998                   WHERE reg.request_id = G_REQUEST_ID
3999                   AND NVL(reg.record_status,G_RS_ERROR) = G_RS_VALID
4000                   AND reg.intf_ptp_reference =  nvl(ptp_int.intf_ptp_reference,G_MISS_CHAR)
4001                   AND NVL(reg.default_registration_flag,'N') = 'Y'
4002                   AND BITAND(error_number,G_ES_REG_DEFREG_FLG_INVALID+G_ES_REG_MULT_DEF_FLAG) = 0
4003                );
4004 
4005     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records synced up with TRN in PTP from REG';
4006     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4007       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'SyncUpRegNumberToPTP',G_DEBUG_STATEMENT);
4008     END IF;
4009 
4010     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4011       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'SyncUpRegNumberToPTP','SyncUpRegNumberToPTP(-)');
4012     END IF;
4013 
4014   EXCEPTION
4015     WHEN OTHERS THEN
4016       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
4017       G_MSG_DATA      := SQLERRM;
4018       log_now (p_log_level => FND_FILE.LOG
4019               ,p_message   => 'SyncUpRegNumberToPTP'||' : '||SQLERRM
4020               );
4021       RAISE;
4022   END SyncUpRegNumberToPTP;
4023 
4024   ------------------------------------------------------------------------------
4025   ------------------------------------------------------------------------------
4026 
4027   PROCEDURE ProcessExemptionRecord IS
4028 
4029   l_date1 DATE;
4030   l_date2 DATE;
4031   l_date3 DATE;
4032   l_date4 DATE;
4033   l_date5 DATE;
4034   l_date6 DATE;
4035 
4036   BEGIN
4037 
4038     l_date1     := SYSDATE;
4039 
4040     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4041       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ProcessExemptionRecord','ProcessExemptionRecord(+)');
4042     END IF;
4043 
4044     -------------------------
4045     -- Populate default values
4046     -------------------------
4047     UPDATE zx_exemptions_int
4048     SET request_id = G_REQUEST_ID
4049        ,record_status = G_RS_IN_PROCESS
4050        ,dml_type = UPPER(dml_type)
4051        ,prog_int_char1 = NULL
4052        ,prog_int_num1 = 0
4053        ,error_number = 0
4054     WHERE NVL(record_status,G_RS_ERROR) <> G_RS_VALID
4055     AND NVL(batch_id,G_MISS_NUM) =
4056         NVL(G_BATCH_ID,NVL(batch_id,G_MISS_NUM));
4057 
4058     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Populated default values';
4059     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4060       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessExemptionRecord',G_DEBUG_STATEMENT);
4061     END IF;
4062 
4063     -------------------------
4064     -- Check Mandatory Paramters
4065     -------------------------
4066 
4067     UPDATE zx_exemptions_int exe_int
4068     SET error_number = G_ES_EXE_MAND_PARAM_MISSING
4069     WHERE request_id = G_REQUEST_ID
4070     AND record_status = G_RS_IN_PROCESS
4071     AND (NVL(tax_regime_code,tax_regime_name) IS NULL OR
4072          (content_owner_id IS NULL AND content_owner_name IS NULL) OR
4073          rate_modifier IS NULL);
4074 
4075     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with Mandatory Paramters NULL';
4076     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4077       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessExemptionRecord',G_DEBUG_STATEMENT);
4078     END IF;
4079 
4080     -------------------------
4081     -- Duplicate records checking
4082     -------------------------
4083 
4084     --NULL;
4085 
4086     -------------------------
4087     -- Value to Id Conversion
4088     -------------------------
4089 
4090     l_date2     := SYSDATE;
4091     ExemptValueToIdConversion();
4092     l_date3     := SYSDATE;
4093 
4094     G_DEBUG_STATEMENT:= ' Value to Conversion complete for Exemptions';
4095     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4096       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessExemptionRecord',G_DEBUG_STATEMENT);
4097     END IF;
4098 
4099     -------------------------
4100     --  Record level validations
4101     -------------------------
4102     --Exemptions with overlapping date ranges.
4103 
4104     UPDATE zx_exemptions_int orig
4105     SET error_number = error_number + G_ES_EXE_DATE_OVERLAP
4106     WHERE record_status = G_RS_IN_PROCESS
4107     AND  request_id = G_REQUEST_ID
4108     AND EXISTS (
4109                 SELECT /*+ FIRST_ROWS(1) */ 1
4110                 FROM zx_exemptions_int dup
4111                 WHERE dup.rowid <> orig.rowid
4112                 AND dup.request_id = G_REQUEST_ID
4113                 AND dup.record_status = G_RS_IN_PROCESS
4114                 AND dup.intf_ptp_reference = orig.intf_ptp_reference
4115                 AND dup.tax_regime_code = orig.tax_regime_code
4116                 AND NVL(dup.tax_code,G_MISS_CHAR) = NVL(orig.tax_code,G_MISS_CHAR)
4117                 AND NVL(dup.tax_status_code,G_MISS_CHAR) = NVL(orig.tax_status_code,G_MISS_CHAR)
4118                 AND NVL(dup.tax_rate_code,G_MISS_CHAR) = NVL(orig.tax_rate_code,G_MISS_CHAR)
4119                 AND NVL(dup.tax_jurisdiction_id,G_MISS_NUM) = NVL(orig.tax_jurisdiction_id,G_MISS_NUM)
4120                 AND NVL(dup.inventory_org_id,G_MISS_NUM) = NVL(orig.inventory_org_id,G_MISS_NUM)
4121                 AND NVL(dup.inventory_item_id,G_MISS_NUM) = NVL(orig.inventory_item_id,G_MISS_NUM)
4122                 AND (
4123                      (    dup.exemption_status_code = 'PRIMARY' AND orig.exemption_status_code = 'PRIMARY')
4124                      OR
4125                      (    NVL(dup.exempt_reason_code,G_MISS_CHAR) = NVL(orig.exempt_reason_code,G_MISS_CHAR)
4126                       AND NVL(dup.exempt_certificate_number,G_MISS_CHAR) = NVL(orig.exempt_certificate_number,G_MISS_CHAR)
4127                      )
4128                     )
4129                 AND (   dup.effective_to IS NULL
4130                      OR orig.effective_from <= dup.effective_to
4131                     )
4132                 AND (   orig.effective_to IS NULL
4133                      OR orig.effective_to >= dup.effective_from
4134                     )
4135                );
4136 
4137     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with Exemptions overlapping date ranges.';
4138     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4139       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessExemptionRecord',G_DEBUG_STATEMENT);
4140     END IF;
4141 
4142     ----------------------------
4143     -- Exemption DFF Validation
4144     ----------------------------
4145 
4146     l_date4     := SYSDATE;
4147     performDFFValidation();
4148     l_date5     := SYSDATE;
4149 
4150     G_DEBUG_STATEMENT:= 'Exemptions DFF validation Complete';
4151     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4152       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessExemptionRecord',G_DEBUG_STATEMENT);
4153     END IF;
4154 
4155     ----------------------------
4156     -- Tail End Activities
4157     ----------------------------
4158 
4159     UPDATE zx_exemptions_int exe_int
4160     SET record_status = DECODE(error_number,0,G_RS_VALID,G_RS_ERROR)
4161     WHERE request_id = G_REQUEST_ID
4162     AND record_status = G_RS_IN_PROCESS;
4163 
4164     UPDATE zx_party_tax_profile_int ptp_int
4165     SET record_status = NULL
4166     WHERE request_id = G_REQUEST_ID
4167     AND record_status = G_RS_VALID
4168     AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
4169                 FROM zx_exemptions_int exe_int
4170                 WHERE request_id = G_REQUEST_ID
4171                 AND record_status = G_RS_ERROR
4172                 AND exe_int.intf_ptp_reference = ptp_int.intf_ptp_reference);
4173 
4174     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with record_status NULL';
4175     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4176       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessExemptionRecord',G_DEBUG_STATEMENT);
4177     END IF;
4178 
4179     l_date6     := SYSDATE;
4180 
4181     log_now (p_log_level => FND_FILE.LOG
4182             ,p_message   => '+--------------------------------------------------------------------'
4183             );
4184     log_now (p_log_level => FND_FILE.LOG
4185             ,p_message   => '|              PERF METRICS for Processing Exemption Records'
4186             );
4187     log_now (p_log_level => FND_FILE.LOG
4188             ,p_message   => '| Time Taken for Value to ID Conversions     '||(l_date3-l_date2)*86400||' Secs'
4189             );
4190     log_now (p_log_level => FND_FILE.LOG
4191             ,p_message   => '| Time Taken for Date Overlap Validation     '||(l_date4-l_date3)*86400||' Secs'
4192             );
4193     log_now (p_log_level => FND_FILE.LOG
4194             ,p_message   => '| Time Taken for DFF Validation              '||(l_date5-l_date4)*86400||' Secs'
4195             );
4196     log_now (p_log_level => FND_FILE.LOG
4197             ,p_message   => '| Total Time Taken for EXE Record Processing '||(l_date6-l_date1)*86400||' Secs'
4198             );
4199     log_now (p_log_level => FND_FILE.LOG
4200             ,p_message   => '+--------------------------------------------------------------------'
4201             );
4202 
4203     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4204       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ProcessExemptionRecord','ProcessExemptionRecord(-)');
4205     END IF;
4206 
4207   EXCEPTION
4208     WHEN OTHERS THEN
4209       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
4210       G_MSG_DATA      := SQLERRM;
4211       log_now (p_log_level => FND_FILE.LOG
4212               ,p_message   => 'ProcessExemptionRecord'||' : '||SQLERRM
4213               );
4214       RAISE;
4215   END ProcessExemptionRecord;
4216 
4217   ------------------------------------------------------------------------------
4218   ------------------------------------------------------------------------------
4219   ------------------------------------------------------------------------------
4220   PROCEDURE ExemptValueToIdConversion  IS
4221   BEGIN
4222 
4223     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4224       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion','ExemptValueToIdConversion(+)');
4225     END IF;
4226 
4227     -- Field Validations
4228 
4229     -- Records with invalid dml_type
4230     UPDATE zx_exemptions_int
4231     SET error_number = error_number + G_ES_EXE_TRANS_TYPE_INVALID
4232     WHERE record_status = G_RS_IN_PROCESS
4233     AND request_id = G_REQUEST_ID
4234     AND dml_type <> 'CREATE';
4235 
4236     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid dml_type';
4237     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4238       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4239     END IF;
4240 
4241     -- validating the fields exempt_reason_name and exempt_reason_code
4242     UPDATE zx_exemptions_int exe_int
4243     SET error_number = error_number + G_ES_EXE_EXMPT_RSN_INVALID
4244     WHERE (( exempt_reason_code IS NOT NULL
4245              AND NOT EXISTS
4246                 (
4247                   SELECT 1
4248                     FROM fnd_lookups    fndlookup
4249                    WHERE fndlookup.lookup_type = 'ZX_EXEMPTION_REASON_CODE'
4250                      AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
4251                      AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
4252                      AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
4253                      AND fndlookup.lookup_code = exe_int.exempt_reason_code
4254                  )
4255             )
4256            OR
4257            (     exempt_reason_code IS NULL
4258              AND exempt_reason_name IS NOT NULL
4259              AND NOT EXISTS
4260                  ( SELECT 1
4261                      FROM fnd_lookups    fndlookup
4262                     WHERE fndlookup.lookup_type = 'ZX_EXEMPTION_REASON_CODE'
4263                       AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
4264                       AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
4265                       AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
4266                       AND fndlookup.meaning = exe_int.exempt_reason_name
4267                  )
4268             )
4269           )
4270     AND record_status = G_RS_IN_PROCESS
4271     AND request_id = G_REQUEST_ID;
4272 
4273     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid exempt_reason';
4274     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4275       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4276     END IF;
4277 
4278     -- value to id conversion for registration_reason_code
4279     UPDATE zx_exemptions_int exe_int
4280     SET exempt_reason_code = (
4281                     SELECT fndlookup.lookup_code
4282                     FROM    fnd_lookups    fndlookup
4283                     WHERE   fndlookup.lookup_type = 'ZX_EXEMPTION_REASON_CODE'
4284                     AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
4285                     AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
4286                     AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
4287                     AND fndlookup.meaning = exe_int.exempt_reason_name
4288                              )
4289     WHERE record_status = G_RS_IN_PROCESS
4290     AND request_id = G_REQUEST_ID
4291     AND BITAND(error_number,G_ES_EXE_EXMPT_RSN_INVALID) = 0
4292     AND exempt_reason_code IS NULL
4293     AND exempt_reason_name IS NOT NULL;
4294 
4295     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid exempt_reason_code';
4296     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4297       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4298     END IF;
4299 
4300   -- validating the fields exemption_status_name and exemption_status_code
4301     UPDATE zx_exemptions_int exe_int
4302     SET error_number = error_number + G_ES_EXE_EXMPT_STS_INVALID
4303     WHERE (( exemption_status_code IS NOT NULL
4304              AND NOT EXISTS
4305                 (
4306                   SELECT 1
4307                     FROM fnd_lookups    fndlookup
4308                    WHERE fndlookup.lookup_type = 'ZX_EXEMPTION_STATUS'
4309                      AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
4310                      AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
4311                      AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
4312                      AND fndlookup.lookup_code = exe_int.exemption_status_code
4313                  )
4314             )
4315            OR
4316            (     exemption_status_code IS NULL
4317              AND exemption_status_name IS NOT NULL
4318              AND NOT EXISTS
4319                  ( SELECT 1
4320                      FROM fnd_lookups    fndlookup
4321                     WHERE fndlookup.lookup_type = 'ZX_EXEMPTION_STATUS'
4322                       AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
4323                       AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
4324                       AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
4325                       AND fndlookup.meaning = exe_int.exemption_status_name
4326                  )
4327             )
4328           )
4329     AND record_status = G_RS_IN_PROCESS
4330     AND request_id = G_REQUEST_ID;
4331 
4332     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid exemption_status';
4333     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4334       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4335     END IF;
4336 
4337     -- value to id conversion for exempt_status_code
4338     UPDATE zx_exemptions_int exe_int
4339     SET exemption_status_code = (
4340                     SELECT fndlookup.lookup_code
4341                     FROM    fnd_lookups    fndlookup
4342                     WHERE   fndlookup.lookup_type = 'ZX_EXEMPTION_STATUS'
4343                     AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
4344                     AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
4345                     AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
4346                     AND fndlookup.meaning = exe_int.exemption_status_name
4347                                 )
4348     WHERE record_status = G_RS_IN_PROCESS
4349     AND request_id = G_REQUEST_ID
4350     AND BITAND(error_number,G_ES_EXE_EXMPT_STS_INVALID) = 0
4351     AND exemption_status_code IS NULL
4352     AND exemption_status_name IS NOT NULL;
4353 
4354     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid exemption_status_code';
4355     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4356       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4357     END IF;
4358 
4359     -- validating the fields tax_regime_name snd tax_regime_code
4360     UPDATE zx_exemptions_int exe_int
4361     SET error_number  = error_number + G_ES_EXE_TAX_REG_INVALID
4362     WHERE (
4363             ( tax_regime_code IS NOT NULL
4364              AND NOT EXISTS
4365                 (
4366                     SELECT tax_regime_code
4367                       FROM zx_regimes_v
4368                      WHERE has_sub_regime_flag <> 'Y'
4369                       AND  tax_regime_code = exe_int.tax_regime_code
4370                  )
4371             )
4372            OR
4373            (     tax_regime_code IS NULL
4374              AND tax_regime_name IS NOT NULL
4375              AND NOT EXISTS
4376                 (
4377                     SELECT 1
4378                       FROM zx_regimes_v
4379                      WHERE has_sub_regime_flag <> 'Y'
4380                       AND  tax_regime_name = exe_int.tax_regime_name
4381                  )
4382             )
4383           )
4384     AND record_status = G_RS_IN_PROCESS
4385     AND request_id = G_REQUEST_ID;
4386 
4387     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid tax_regime';
4388     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4389       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4390     END IF;
4391 
4392     -- value to id conversion for tax_regime_code
4393     UPDATE zx_exemptions_int exe_int
4394     SET tax_regime_code = (
4395                             SELECT tax_regime_code
4396                               FROM zx_regimes_v
4397                              WHERE has_sub_regime_flag <> 'Y'
4398                                AND tax_regime_name  =  exe_int.tax_regime_name
4399                           )
4400     WHERE record_status = G_RS_IN_PROCESS
4401     AND request_id = G_REQUEST_ID
4402     AND BITAND(error_number,G_ES_EXE_TAX_REG_INVALID) = 0
4403     AND tax_regime_code IS NULL
4404     AND tax_regime_name IS NOT NULL;
4405 
4406     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid tax_regime_code';
4407     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4408       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4409     END IF;
4410 
4411     -- validating the fields content_owner_id snd content_owner_name
4412     UPDATE zx_exemptions_int exe_int
4413     SET error_number  = error_number + G_ES_EXE_CNT_OWN_INVALID
4414     WHERE (( content_owner_id IS NOT NULL
4415              AND NOT EXISTS
4416                 (
4417                   SELECT  1
4418                   FROM   zx_first_party_orgs_moac_v fpo,
4419                          fnd_lookups LKP,
4420                          zx_regimes_usages REG
4421                   WHERE  fpo.party_tax_profile_id <> -99
4422                    AND   lkp.lookup_type = 'ZX_PTP_PARTY_TYPE'
4423                    AND   lkp.lookup_code = fpo.party_type_code
4424                    AND   SYSDATE BETWEEN lkp.start_date_active
4425                          AND NVL(LKP.end_date_active,SYSDATE)
4426                    AND   lkp.enabled_flag = 'Y'
4427                    AND   reg.first_pty_org_id = fpo.party_tax_profile_id
4428                    AND   reg.tax_regime_code  = exe_int.tax_regime_code
4429                    AND   fpo.party_tax_profile_id = exe_int.content_owner_id
4430                  )
4431             )
4432            OR
4433            (     content_owner_id IS NULL
4434              AND content_owner_name IS NOT NULL
4435              AND NOT EXISTS
4436                 (
4437                   SELECT 1
4438                   FROM   zx_first_party_orgs_moac_v fpo,
4439                          fnd_lookups lkp,
4440                          zx_regimes_usages reg
4441                   WHERE  fpo.party_tax_profile_id <> -99
4442                    AND   lkp.lookup_type = 'ZX_PTP_PARTY_TYPE'
4443                    AND   lkp.lookup_code = fpo.party_type_code
4444                    AND   SYSDATE BETWEEN LKP.start_date_active
4445                          AND NVL(LKP.end_date_active,SYSDATE)
4446                    AND   lkp.enabled_flag = 'Y'
4447                    AND   reg.first_pty_org_id = fpo.party_tax_profile_id
4448                    AND   reg.tax_regime_code  =  exe_int.tax_regime_code
4449                    AND   fpo.party_name = exe_int.content_owner_name
4450                  )
4451             )
4452           )
4453     AND record_status = G_RS_IN_PROCESS
4454     AND request_id = G_REQUEST_ID
4455     AND BITAND(error_number,G_ES_EXE_TAX_REG_INVALID) = 0;
4456 
4457     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid content_owner';
4458     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4459       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4460     END IF;
4461 
4462     -- value to id conversion for content_owner_id
4463     UPDATE zx_exemptions_int exe_int
4464     SET content_owner_id = (
4465                               SELECT  fpo.party_tax_profile_id
4466                               FROM   zx_first_party_orgs_moac_v fpo,
4467                                      fnd_lookups lkp,
4468                                      zx_regimes_usages reg
4469                               WHERE  FPO.party_tax_profile_id <> -99
4470                                AND   lkp.lookup_type = 'ZX_PTP_PARTY_TYPE'
4471                                AND   lkp.lookup_code = fpo.party_type_code
4472                                AND   SYSDATE BETWEEN LKP.start_date_active
4473                                      AND NVL(LKP.end_date_active,SYSDATE)
4474                                AND   lkp.enabled_flag = 'Y'
4475                                AND   reg.first_pty_org_id = fpo.party_tax_profile_id
4476                                AND   reg.tax_regime_code  =  exe_int.tax_regime_code
4477                                AND   fpo.party_name       =  exe_int.content_owner_name
4478                           )
4479     WHERE record_status = G_RS_IN_PROCESS
4480     AND request_id = G_REQUEST_ID
4481     AND BITAND(error_number,G_ES_EXE_TAX_REG_INVALID+
4482                             G_ES_EXE_CNT_OWN_INVALID) = 0
4483     AND content_owner_id IS NULL
4484     AND content_owner_name IS NOT NULL;
4485 
4486     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid content_owner_id';
4487     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4488       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4489     END IF;
4490 
4491     -- validating the fields tax and tax_name
4492     UPDATE zx_exemptions_int exe_int
4493     SET error_number  = error_number + G_ES_EXE_TAX_PARAM_INVALID
4494     WHERE (( tax_code IS NOT NULL
4495              AND NOT EXISTS
4496                 (
4497                 SELECT 1
4498                 FROM zx_taxes_b ztvl,
4499                      zx_subscription_details sd
4500                 WHERE ztvl.tax_regime_code = sd.tax_regime_code
4501                 AND ztvl.content_owner_id = sd.parent_first_pty_org_id
4502                 AND (sd.view_options_code in ('NONE', 'VFC')
4503                       or
4504                        (sd.view_options_code = 'VFR'
4505                         AND not exists ( SELECT   1
4506                                           FROM zx_taxes_b b
4507                                          WHERE b.tax_regime_code = ztvl.tax_regime_code
4508                                            AND b.tax = ztvl.tax
4509                                            AND b.content_owner_id = sd.first_pty_org_id
4510                                        )
4511                        )
4512                     )
4513                 AND   ztvl.allow_exemptions_flag             = 'Y'
4514                 AND   ztvl.live_for_applicability_flag       = 'Y'
4515                 AND   ztvl.tax_regime_code = exe_int.tax_regime_code
4516                 AND   sd.first_pty_org_id = exe_int.content_owner_id
4517                 AND   ztvl.tax = exe_int.tax_code
4518                  )
4519             )
4520            OR
4521            (     tax_code IS NULL
4522              AND tax_name IS NOT NULL
4523              AND NOT EXISTS
4524                 (
4525                   SELECT 1
4526                   FROM zx_taxes_vl ztvl,
4527                        zx_subscription_details sd
4528                   WHERE ztvl.tax_regime_code = sd.tax_regime_code
4529                   AND ztvl.content_owner_id = sd.parent_first_pty_org_id
4530                   AND (sd.view_options_code in ('NONE', 'VFC')
4531                         or
4532                          (sd.view_options_code = 'VFR'
4533                           AND not exists ( SELECT   1
4534                                             FROM zx_taxes_b b
4535                                            WHERE b.tax_regime_code = ztvl.tax_regime_code
4536                                              AND b.tax = ztvl.tax
4537                                              AND b.content_owner_id = sd.first_pty_org_id
4538                                          )
4539                          )
4540                       )
4541                   AND   ztvl.allow_exemptions_flag             = 'Y'
4542                   AND   ztvl.live_for_applicability_flag       = 'Y'
4543       AND   ztvl.tax_regime_code = exe_int.tax_regime_code
4544                   AND   sd.first_pty_org_id = exe_int.content_owner_id
4545                   AND   ztvl.tax_full_name = exe_int.tax_name
4546                 )
4547             )
4548           )
4549     AND record_status = G_RS_IN_PROCESS
4550     AND request_id = G_REQUEST_ID
4551     AND BITAND(error_number,G_ES_EXE_TAX_REG_INVALID+
4552                             G_ES_EXE_CNT_OWN_INVALID) = 0;
4553 
4554     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid tax';
4555     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4556       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4557     END IF;
4558 
4559     -- value to id conversion for tax
4560     UPDATE zx_exemptions_int exe_int
4561     SET tax_code = (
4562                   SELECT ztvl.tax
4563                   FROM zx_taxes_vl ztvl,
4564                        zx_subscription_details sd
4565                   WHERE ztvl.tax_regime_code = sd.tax_regime_code
4566                   AND ztvl.content_owner_id = sd.parent_first_pty_org_id
4567                   AND (sd.view_options_code in ('NONE', 'VFC')
4568                         or
4569                          (sd.view_options_code = 'VFR'
4570                           AND not exists ( SELECT   1
4571                                             FROM zx_taxes_b b
4572                                            WHERE b.tax_regime_code = ztvl.tax_regime_code
4573                                              AND b.tax = ztvl.tax
4574                                              AND b.content_owner_id = sd.first_pty_org_id
4575                                          )
4576                          )
4577                       )
4578                   AND   ztvl.allow_exemptions_flag             = 'Y'
4579                   AND   ztvl.live_for_applicability_flag       = 'Y'
4580       AND   ztvl.tax_regime_code = exe_int.tax_regime_code
4581                   AND   sd.first_pty_org_id = exe_int.content_owner_id
4582                   AND   ztvl.tax_full_name   = exe_int.tax_name
4583                )
4584     WHERE record_status = G_RS_IN_PROCESS
4585     AND request_id = G_REQUEST_ID
4586     AND BITAND(error_number,G_ES_EXE_TAX_REG_INVALID+
4587                             G_ES_EXE_CNT_OWN_INVALID+
4588                             G_ES_EXE_TAX_PARAM_INVALID) = 0
4589     AND tax_code IS NULL
4590     AND tax_name IS NOT NULL;
4591 
4592     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid tax_code';
4593     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4594       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4595     END IF;
4596 
4597     -- validating the fields tax_status_code and tax_status_name
4598     UPDATE zx_exemptions_int exe_int
4599     SET error_number  = error_number + G_ES_EXE_TAX_STS_INVALID
4600     WHERE (( tax_status_code IS NOT NULL
4601              AND NOT EXISTS
4602                 (
4603                     SELECT 1
4604                     FROM zx_status_b zsvl,
4605                          zx_subscription_details zsd
4606                     WHERE zsvl.allow_exemptions_flag = 'Y'
4607                     AND   zsd.tax_regime_code = zsvl.tax_regime_code
4608                     AND   zsd.parent_first_pty_org_id = zsvl.content_owner_id
4609                     AND   (NVL(zsd.view_options_code,'NONE') IN ('NONE', 'VFC') OR
4610                            (NVL(zsd.view_options_code,'VFR') = 'VFR'
4611                             AND NOT EXISTS
4612                              (SELECT 1
4613                                 FROM zx_status_b b
4614                                WHERE b.tax_regime_code = zsvl.tax_regime_code
4615                                  AND b.tax = zsvl.tax
4616                                  AND b.tax_status_code = zsvl.tax_status_code
4617                                  AND b.content_owner_id = zsd.first_pty_org_id
4618                              )
4619                            )
4620                           )
4621                     AND   zsvl.tax_regime_code = exe_int.tax_regime_code
4622                     AND   zsd.first_pty_org_id = exe_int.content_owner_id
4623                     AND   zsvl.tax = exe_int.tax_code
4624                     AND   zsvl.tax_status_code = exe_int.tax_status_code
4625                  )
4626             )
4627            OR
4628            (     tax_status_code IS NULL
4629              AND tax_status_name IS NOT NULL
4630              AND NOT EXISTS
4631                 (
4632                     SELECT 1
4633                     FROM zx_status_vl zsvl,
4634                          zx_subscription_details zsd
4635                     WHERE zsvl.allow_exemptions_flag = 'Y'
4636                     AND   zsd.tax_regime_code = zsvl.tax_regime_code
4637                     AND   zsd.parent_first_pty_org_id = zsvl.content_owner_id
4638                     AND   (NVL(zsd.view_options_code,'NONE') IN ('NONE', 'VFC') OR
4639                            (NVL(zsd.view_options_code,'VFR') = 'VFR'
4640                             AND NOT EXISTS
4641                              (SELECT 1
4642                                 FROM zx_status_b b
4643                                WHERE b.tax_regime_code = zsvl.tax_regime_code
4644                                  AND b.tax = zsvl.tax
4645                                  AND b.tax_status_code = zsvl.tax_status_code
4646                                  AND b.content_owner_id = zsd.first_pty_org_id
4647                              )
4648                            )
4649                           )
4650                     AND   zsvl.tax_regime_code = exe_int.tax_regime_code
4651                     AND   zsd.first_pty_org_id = exe_int.content_owner_id
4652                     AND   zsvl.tax = exe_int.tax_code
4653                     AND   zsvl.tax_status_name = exe_int.tax_status_name
4654                  )
4655             )
4656           )
4657     AND record_status = G_RS_IN_PROCESS
4658     AND request_id = G_REQUEST_ID
4659     AND BITAND(error_number,G_ES_EXE_TAX_REG_INVALID+
4660                             G_ES_EXE_CNT_OWN_INVALID+
4661                             G_ES_EXE_TAX_PARAM_INVALID) = 0;
4662 
4663     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid tax status';
4664     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4665       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4666     END IF;
4667 
4668     -- value to id conversion for tax_status_code
4669     UPDATE zx_exemptions_int exe_int
4670     SET tax_status_code = (
4671                     SELECT zsvl.TAX_STATUS_CODE
4672                     FROM zx_status_vl zsvl,
4673                          zx_subscription_details zsd
4674                     WHERE zsvl.allow_exemptions_flag = 'y'
4675                     AND   zsd.tax_regime_code = zsvl.tax_regime_code
4676                     AND   zsd.parent_first_pty_org_id = zsvl.content_owner_id
4677                     AND   (NVL(zsd.view_options_code,'NONE') IN ('NONE', 'VFC') OR
4678                            (NVL(zsd.view_options_code,'VFR') = 'VFR'
4679                             AND NOT EXISTS
4680                              (SELECT 1
4681                                 FROM zx_status_b b
4682                                WHERE b.tax_regime_code = zsvl.tax_regime_code
4683                                  AND b.tax = zsvl.tax
4684                                  AND b.tax_status_code = zsvl.tax_status_code
4685                                  AND b.content_owner_id = zsd.first_pty_org_id
4686                              )
4687                            )
4688                           )
4689                   AND   zsvl.tax_regime_code = exe_int.tax_regime_code
4690                   AND   zsd.first_pty_org_id = exe_int.content_owner_id
4691                   AND   zsvl.tax = exe_int.tax_code
4692                   AND   zsvl.TAX_STATUS_NAME = exe_int.tax_status_name
4693                 )
4694     WHERE record_status = G_RS_IN_PROCESS
4695     AND request_id = G_REQUEST_ID
4696     AND BITAND(error_number,G_ES_EXE_TAX_REG_INVALID+
4697                             G_ES_EXE_CNT_OWN_INVALID+
4698                             G_ES_EXE_TAX_PARAM_INVALID+
4699                             G_ES_EXE_TAX_STS_INVALID) = 0
4700     AND tax_status_code IS NULL
4701     AND tax_status_name IS NOT NULL;
4702 
4703     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid tax_status_code';
4704     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4705       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4706     END IF;
4707 
4708     -- validating the fields tax_jurisdictin_code and tax_jurisdiction_name
4709     UPDATE zx_exemptions_int exe_int
4710     SET error_number  = error_number + G_ES_EXE_TAX_JUR_INVALID
4711     WHERE ( tax_jurisdiction_id IS NOT NULL
4712             OR tax_jurisdiction_name IS NOT NULL
4713           )
4714     AND record_status = G_RS_IN_PROCESS
4715     AND request_id = G_REQUEST_ID
4716     AND tax_code IS NULL;
4717 
4718     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid tax_jurisdictin';
4719     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4720       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4721     END IF;
4722 
4723     -- validating the fields tax_jurisdiction_id and tax_jurisdiction_name
4724     UPDATE zx_exemptions_int exe_int
4725     SET error_number  = error_number + G_ES_EXE_TAX_JUR_INVALID
4726     WHERE (( tax_jurisdiction_id IS NOT NULL
4727              AND NOT EXISTS
4728                 (
4729                     SELECT 1
4730                     FROM ZX_JURISDICTIONS_b
4731                     WHERE TAX_REGIME_CODE = exe_int.tax_regime_code
4732                     AND tax = exe_int.tax_code
4733                     AND tax_jurisdiction_id = exe_int.tax_jurisdiction_id
4734                 )
4735             )
4736            OR
4737            (     tax_jurisdiction_id IS NULL
4738              AND tax_jurisdiction_name IS NOT NULL
4739              AND NOT EXISTS
4740                 (
4741                     SELECT 1
4742                     FROM zx_jurisdictions_vl
4743                     WHERE tax_regime_code = exe_int.tax_regime_code
4744                     AND tax = exe_int.tax_code
4745                     AND tax_jurisdiction_name = exe_int.tax_jurisdiction_name
4746                 )
4747             )
4748           )
4749     AND record_status = G_RS_IN_PROCESS
4750     AND request_id = G_REQUEST_ID
4751     AND BITAND(error_number,G_ES_EXE_TAX_JUR_INVALID+
4752                             G_ES_EXE_TAX_REG_INVALID+
4753                             G_ES_EXE_TAX_PARAM_INVALID) = 0
4754     AND tax_code IS NOT NULL;
4755 
4756     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid tax_jurisdictin';
4757     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4758       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4759     END IF;
4760 
4761     -- value to id conversion for tax_jurisdictin_code
4762     UPDATE zx_exemptions_int exe_int
4763     SET tax_jurisdiction_id = (
4764                     SELECT tax_jurisdiction_id
4765                     FROM ZX_JURISDICTIONS_VL
4766                     WHERE TAX_REGIME_CODE = exe_int.tax_regime_code
4767                     AND tax = exe_int.tax_code
4768                     AND tax_jurisdiction_name = exe_int.tax_jurisdiction_name
4769                               )
4770     WHERE record_status = G_RS_IN_PROCESS
4771     AND request_id = G_REQUEST_ID
4772     AND BITAND(error_number,G_ES_EXE_TAX_JUR_INVALID+
4773                             G_ES_EXE_TAX_REG_INVALID+
4774                             G_ES_EXE_TAX_PARAM_INVALID) = 0
4775     AND tax_jurisdiction_id IS NULL
4776     AND tax_jurisdiction_name IS NOT NULL;
4777 
4778     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid tax_jurisdiction_id';
4779     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4780       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4781     END IF;
4782 
4783     -- validating the fields tax_rate_code and tax_rate_name
4784     UPDATE zx_exemptions_int exe_int
4785     SET error_number  = error_number + G_ES_EXE_TAX_RATE_INVALID
4786     WHERE (( tax_rate_code IS NOT NULL
4787              AND NOT EXISTS
4788                 (
4789                 SELECT 1
4790                 FROM zx_rates_b zrvl, zx_subscription_details sd
4791                 WHERE zrvl.tax_regime_code = sd.tax_regime_code
4792                 AND zrvl.content_owner_id = sd.parent_first_pty_org_id
4793                 AND (sd.view_options_code in ('NONE', 'VFC')
4794                       or
4795                        (sd.view_options_code = 'VFR'
4796                         AND not exists ( SELECT   1
4797                                            FROM zx_rates_b b
4798                                          WHERE b.tax_regime_code = zrvl.tax_regime_code
4799                                            AND b.tax = zrvl.tax
4800                                            AND b.tax_status_code = zrvl.tax_status_code
4801                                            AND b.tax_rate_code = zrvl.tax_rate_code
4802                                            AND b.content_owner_id = sd.first_pty_org_id
4803                                        )
4804                        )
4805                     )
4806                 AND   zrvl.tax_regime_code = exe_int.tax_regime_code
4807                 AND   sd.first_pty_org_id = exe_int.content_owner_id
4808                 AND   zrvl.tax = exe_int.tax_code
4809                 AND   zrvl.tax_status_code = exe_int.tax_status_code
4810                 AND   zrvl.tax_rate_code = exe_int.tax_rate_code
4811                  )
4812             )
4813            OR
4814            (     tax_rate_code IS NULL
4815              AND tax_rate_name IS NOT NULL
4816              AND NOT EXISTS
4817                 (
4818                 SELECT 1
4819                 FROM zx_rates_vl zrvl, zx_subscription_details sd
4820                 WHERE zrvl.tax_regime_code = sd.tax_regime_code
4821                 AND zrvl.content_owner_id = sd.parent_first_pty_org_id
4822                 AND (sd.view_options_code in ('NONE', 'VFC')
4823                       or
4824                        (sd.view_options_code = 'VFR'
4825                         AND not exists ( SELECT   1
4826                                           FROM zx_rates_b b
4827                                          WHERE b.tax_regime_code = zrvl.tax_regime_code
4828                                            AND b.tax = zrvl.tax
4829                                            AND b.tax_status_code = zrvl.tax_status_code
4830                                            AND b.tax_rate_code = zrvl.tax_rate_code
4831                                            AND b.content_owner_id = sd.first_pty_org_id
4832                                        )
4833                        )
4834                     )
4835                 AND   zrvl.tax_regime_code = exe_int.tax_regime_code
4836                 AND   sd.first_pty_org_id = exe_int.content_owner_id
4837                 AND   zrvl.tax = exe_int.tax_code
4838                 AND   zrvl.tax_status_code = exe_int.tax_status_code
4839                 AND   zrvl.tax_rate_name = exe_int.tax_rate_name
4840                 )
4841             )
4842           )
4843     AND record_status = G_RS_IN_PROCESS
4844     AND request_id = G_REQUEST_ID
4845     AND BITAND(error_number,G_ES_EXE_TAX_REG_INVALID+
4846                             G_ES_EXE_TAX_PARAM_INVALID+
4847                             G_ES_EXE_CNT_OWN_INVALID+
4848                             G_ES_EXE_TAX_STS_INVALID) = 0;
4849 
4850     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid tax_rate';
4851     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4852       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4853     END IF;
4854 
4855     -- value to id conversion for tax_rate_code
4856     UPDATE zx_exemptions_int exe_int
4857     SET TAX_RATE_CODE = (
4858                 SELECT zrvl.tax_rate_code
4859                 FROM zx_rates_vl zrvl, zx_subscription_details sd
4860                 WHERE zrvl.tax_regime_code = sd.tax_regime_code
4861                 AND zrvl.content_owner_id = sd.parent_first_pty_org_id
4862                 AND (sd.view_options_code in ('NONE', 'VFC')
4863                       or
4864                        (sd.view_options_code = 'VFR'
4865                         AND not exists ( SELECT   1
4866                                           FROM zx_rates_b b
4867                                          WHERE b.tax_regime_code = zrvl.tax_regime_code
4868                                            AND b.tax = zrvl.tax
4869                                            AND b.tax_status_code = zrvl.tax_status_code
4870                                            AND b.tax_rate_code = zrvl.tax_rate_code
4871                                            AND b.content_owner_id = sd.first_pty_org_id
4872                                        )
4873                        )
4874                     )
4875                 AND   zrvl.tax_regime_code = exe_int.tax_regime_code
4876                 AND   sd.first_pty_org_id = exe_int.content_owner_id
4877                 AND   zrvl.tax = exe_int.tax_code
4878                 AND   zrvl.tax_status_code = exe_int.tax_status_code
4879                 AND   zrvl.tax_rate_name = exe_int.tax_rate_name
4880                )
4881     WHERE record_status = G_RS_IN_PROCESS
4882     AND request_id = G_REQUEST_ID
4883     AND BITAND(error_number,G_ES_EXE_TAX_REG_INVALID+
4884                             G_ES_EXE_TAX_PARAM_INVALID+
4885                             G_ES_EXE_CNT_OWN_INVALID+
4886                             G_ES_EXE_TAX_STS_INVALID+
4887                             G_ES_EXE_TAX_RATE_INVALID) = 0
4888     AND TAX_RATE_CODE IS NULL
4889     AND tax_rate_name IS NOT NULL;
4890 
4891     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid tax_rate_code';
4892     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4893       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4894     END IF;
4895 
4896     -- Validate the fields apply_to_lower_levels_flag
4897     UPDATE zx_exemptions_int exe_int
4898     SET error_number = error_number + G_ES_EXE_LWR_LVL_FLG_INVALID
4899     WHERE record_status = G_RS_IN_PROCESS
4900     AND request_id = G_REQUEST_ID
4901     AND apply_to_lower_levels_flag NOT IN ('Y','N');
4902 
4903     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid apply_to_lower_levels_flag';
4904     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4905       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4906     END IF;
4907 
4908     -- Validate the fields effective_to and effective_from
4909     UPDATE zx_exemptions_int exe_int
4910     SET error_number = error_number + G_ES_EXE_DATE_RANGE_INVALID
4911     WHERE record_status = G_RS_IN_PROCESS
4912     AND request_id = G_REQUEST_ID
4913     AND effective_to IS NOT NULL
4914     AND effective_to <  effective_from;
4915 
4916     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid effective date';
4917     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4918       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4919     END IF;
4920 
4921     -- validating the fields inventory_org_id, inventory_org_name
4922     UPDATE zx_exemptions_int exe_int
4923     SET error_number = error_number + G_ES_EXE_INV_ORG_INVALID
4924     WHERE (( inventory_org_id IS NOT NULL
4925              AND NOT EXISTS
4926                 (
4927                   SELECT   1
4928                    FROM    org_organization_definitions ood,
4929                            hr_all_organization_units org,
4930                            hr_organization_information ori
4931                   WHERE    ood.organization_id = org.organization_id
4932                   AND   org.organization_id = ori.organization_id
4933                   AND   ori.org_information_context = 'CLASS'
4934                   AND   ori.org_information1 = 'INV'
4935                   AND   ori.org_information2 = 'Y'
4936                   AND EXISTS (SELECT 1
4937                                FROM mtl_parameters
4938                                WHERE master_organization_id = ood.organization_id)
4939                   AND ood.organization_id = exe_int.inventory_org_id
4940 
4941                 )
4942             )
4943            OR
4944            (     inventory_org_id IS NULL
4945              AND inventory_org_name IS NOT NULL
4946              AND NOT EXISTS
4947                 (
4948                   SELECT   1
4949                    FROM    org_organization_definitions ood,
4950                            hr_all_organization_units org,
4951                            hr_organization_information ori
4952                   WHERE    ood.organization_id = org.organization_id
4953                   AND   org.organization_id = ORI.organization_id
4954                   AND   ori.org_information_context = 'CLASS'
4955                   AND   ori.org_information1 = 'INV'
4956                   AND   ori.org_information2 = 'Y'
4957                   AND EXISTS (SELECT 1
4958                                 FROM mtl_parameters
4959                                WHERE master_organization_id = OOD.ORGANIZATION_ID
4960                              )
4961                   AND ood.organization_name = exe_int.inventory_org_name
4962                 )
4963             )
4964           )
4965     AND record_status = G_RS_IN_PROCESS
4966     AND request_id = G_REQUEST_ID;
4967 
4968     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid inventory org';
4969     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4970       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
4971     END IF;
4972 
4973     -- value to id conversion for inventory_org_id
4974     UPDATE zx_exemptions_int exe_int
4975     SET Inventory_Org_id =
4976                 (
4977                   SELECT   OOD.ORGANIZATION_ID
4978                    FROM    ORG_ORGANIZATION_DEFINITIONS OOD,
4979                            HR_ALL_ORGANIZATION_UNITS ORG,
4980                            HR_ORGANIZATION_INFORMATION ORI
4981                   WHERE    OOD.ORGANIZATION_ID = ORG.organization_id
4982                   AND   ORG.organization_id = ORI.organization_id
4983                   AND   ORI.org_information_context = 'CLASS'
4984                   AND   ORI.org_information1 = 'INV'
4985                   AND   ORI.org_information2 = 'Y'
4986                   AND EXISTS (SELECT 1
4987                                FROM mtl_parameters
4988                                WHERE master_organization_id = OOD.ORGANIZATION_ID)
4989                   AND   OOD.ORGANIZATION_NAME = exe_int.Inventory_Org_name
4990                 )
4991     WHERE record_status = G_RS_IN_PROCESS
4992     AND request_id = G_REQUEST_ID
4993     AND BITAND(error_number,G_ES_EXE_INV_ORG_INVALID) = 0
4994     AND Inventory_Org_id IS NULL
4995     AND Inventory_Org_name IS NOT NULL;
4996 
4997     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid Inventory_Org_id';
4998     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
4999       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
5000     END IF;
5001 
5002     -- validating the fields item_number, inventory_item_id
5003     UPDATE zx_exemptions_int exe_int
5004     SET error_number = error_number + G_ES_EXE_INV_ITM_INVALID
5005     WHERE (( inventory_item_id IS NOT NULL
5006              AND NOT EXISTS
5007                 (
5008                   SELECT 1
5009                     FROM MTL_SYSTEM_ITEMS_B
5010                    WHERE organization_id = exe_int.inventory_org_id
5011                      AND inventory_item_id = exe_int.inventory_item_id
5012                 )
5013             )
5014            OR
5015            (     inventory_item_id IS NULL
5016              AND item_number IS NOT NULL
5017              AND NOT EXISTS
5018                 (
5019                   SELECT 1
5020                     FROM MTL_SYSTEM_ITEMS_B_KFV
5021                    WHERE organization_id = exe_int.inventory_org_id
5022                      AND concatenated_segments = exe_int.item_number
5023                 )
5024             )
5025           )
5026     AND record_status = G_RS_IN_PROCESS
5027     AND request_id = G_REQUEST_ID
5028     AND BITAND(error_number,G_ES_EXE_INV_ORG_INVALID) = 0;
5029 
5030     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid inventory item';
5031     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5032       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
5033     END IF;
5034 
5035     -- value to id conversion for inventory_item_id
5036     UPDATE zx_exemptions_int exe_int
5037     SET inventory_item_id =
5038                 (
5039                   SELECT inventory_item_id
5040                   FROM   MTL_SYSTEM_ITEMS_B_KFV
5041                   WHERE  organization_id = exe_int.inventory_org_id
5042                   AND    concatenated_segments = exe_int.item_number
5043                 )
5044     WHERE record_status = G_RS_IN_PROCESS
5045     AND request_id = G_REQUEST_ID
5046     AND BITAND(error_number,G_ES_EXE_INV_ORG_INVALID+
5047                             G_ES_EXE_INV_ITM_INVALID) = 0
5048     AND inventory_item_id IS NULL
5049     AND item_number IS NOT NULL;
5050 
5051     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid inventory_item_id';
5052     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5053       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
5054     END IF;
5055 
5056     -- validating the fields issuing_tax_authority_id, issuing_tax_authority_name
5057     UPDATE zx_exemptions_int exe_int
5058     SET error_number = error_number + G_ES_EXE_TAX_AUT_INVALID
5059     WHERE (( issuing_tax_authority_id IS NOT NULL
5060              AND NOT EXISTS
5061                 (
5062                   SELECT  1
5063                   FROM    zx_party_tax_profile PTP,
5064                           hz_parties PTY
5065                   WHERE   PTP.party_type_code ='TAX_AUTHORITY'
5066                   AND     PTP.party_id = PTY.party_id
5067                   AND     PTP.party_tax_profile_id = exe_int.issuing_tax_authority_id
5068                 )
5069             )
5070            OR
5071            (     issuing_tax_authority_id IS NULL
5072              AND issuing_tax_authority_name IS NOT NULL
5073              AND NOT EXISTS
5074                 (
5075                   SELECT  PTY.party_name
5076                   FROM    zx_party_tax_profile PTP,
5077                           hz_parties PTY
5078                   WHERE   PTP.party_type_code ='TAX_AUTHORITY'
5079                   AND     PTP.party_id = PTY.party_id
5080                   AND     PTy.party_name = exe_int.issuing_tax_authority_name
5081                 )
5082             )
5083           )
5084     AND record_status = G_RS_IN_PROCESS
5085     AND request_id = G_REQUEST_ID;
5086 
5087     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid issuing_tax_authority';
5088     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5089       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
5090     END IF;
5091 
5092     -- value to id conversion for issuing_tax_authority_id
5093     UPDATE zx_exemptions_int exe_int
5094     SET issuing_tax_authority_id =
5095                 (
5096                   SELECT  PTP.party_tax_profile_id
5097                   FROM    zx_party_tax_profile PTP,
5098                           hz_parties PTY
5099                   WHERE   PTP.party_type_code ='TAX_AUTHORITY'
5100                   AND     PTP.party_id = PTY.party_id
5101                   AND     PTY.party_name = exe_int.issuing_tax_authority_name
5102                 )
5103     WHERE record_status = G_RS_IN_PROCESS
5104     AND request_id = G_REQUEST_ID
5105     AND BITAND(error_number,G_ES_EXE_TAX_AUT_INVALID) = 0
5106     AND issuing_tax_authority_id IS NULL
5107     AND issuing_tax_authority_name IS NOT NULL;
5108 
5109     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid issuing_tax_authority_id';
5110     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5111       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
5112     END IF;
5113 
5114     -- validating the fields exemption_type_code and exemption_type_name
5115     UPDATE zx_exemptions_int exe_int
5116     SET error_number = error_number + G_ES_EXE_EXMPT_TYP_INVALID
5117     WHERE (( exemption_type_code IS NOT NULL
5118              AND NOT EXISTS
5119                 (
5120                   SELECT 1
5121                     FROM fnd_lookups    fndlookup
5122                    WHERE fndlookup.lookup_type = 'ZX_EXEMPTION_TYPE'
5123                      AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
5124                      AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
5125                      AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
5126                      AND fndlookup.lookup_code = exe_int.exemption_type_code
5127                  )
5128             )
5129            OR
5130            (     exemption_type_code IS NULL
5131              AND exemption_type_name IS NOT NULL
5132             AND NOT EXISTS
5133                  (
5134                    SELECT 1
5135                      FROM fnd_lookups    fndlookup
5136                     WHERE fndlookup.lookup_type = 'ZX_EXEMPTION_TYPE'
5137                       AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
5138                       AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
5139                       AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
5140                       AND fndlookup.meaning = exe_int.exemption_type_name
5141                  )
5142             )
5143           )
5144     AND record_status = G_RS_IN_PROCESS
5145     AND request_id = G_REQUEST_ID;
5146 
5147     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with invalid exemption_type';
5148     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5149       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
5150     END IF;
5151 
5152     -- value to id conversion for exemption_type_code
5153     UPDATE zx_exemptions_int exe_int
5154     SET exemption_type_code = (
5155                     SELECT fndlookup.lookup_code
5156                     FROM    fnd_lookups    fndlookup
5157                     WHERE   fndlookup.lookup_type = 'ZX_EXEMPTION_TYPE'
5158                     AND NVL(fndlookup.start_date_active, SYSDATE) <= SYSDATE
5159                     AND NVL(fndlookup.end_date_active, SYSDATE)  >= SYSDATE
5160                     AND NVL(fndlookup.enabled_flag, 'N') = 'Y'
5161                     AND fndlookup.meaning = exe_int.exemption_type_name
5162                                  )
5163     WHERE record_status = G_RS_IN_PROCESS
5164     AND request_id = G_REQUEST_ID
5165     AND BITAND(error_number,G_ES_EXE_EXMPT_TYP_INVALID) = 0
5166     AND exemption_type_code IS NULL
5167     AND exemption_type_name IS NOT NULL;
5168 
5169     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Records with valid exemption_type_code';
5170     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5171       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion',G_DEBUG_STATEMENT);
5172     END IF;
5173 
5174     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5175       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ExemptValueToIdConversion','ExemptValueToIdConversion(-)');
5176     END IF;
5177 
5178   EXCEPTION
5179     WHEN OTHERS THEN
5180       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
5181       G_MSG_DATA      := SQLERRM;
5182       log_now (p_log_level => FND_FILE.LOG
5183               ,p_message   => 'ExemptValueToIdConversion'||' : '||SQLERRM
5184               );
5185       RAISE;
5186   END ExemptValueToIdConversion;
5187 
5188 
5189   ------------------------------------------------------------------------------
5190   ------------------------------------------------------------------------------
5191   ------------------------------------------------------------------------------
5192   PROCEDURE resetDFFFieldUsage IS
5193   BEGIN
5194 
5195     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5196       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'resetDFFFieldUsage','resetDFFFieldUsage(+)');
5197     END IF;
5198 
5199     g_dff_usage_record.attribute1  := G_FALSE;
5200     g_dff_usage_record.attribute2  := G_FALSE;
5201     g_dff_usage_record.attribute3  := G_FALSE;
5202     g_dff_usage_record.attribute4  := G_FALSE;
5203     g_dff_usage_record.attribute5  := G_FALSE;
5204     g_dff_usage_record.attribute6  := G_FALSE;
5205     g_dff_usage_record.attribute7  := G_FALSE;
5206     g_dff_usage_record.attribute8  := G_FALSE;
5207     g_dff_usage_record.attribute9  := G_FALSE;
5208     g_dff_usage_record.attribute10 := G_FALSE;
5209     g_dff_usage_record.attribute11 := G_FALSE;
5210     g_dff_usage_record.attribute12 := G_FALSE;
5211     g_dff_usage_record.attribute13 := G_FALSE;
5212     g_dff_usage_record.attribute14 := G_FALSE;
5213     g_dff_usage_record.attribute15 := G_FALSE;
5214 
5215     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5216       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'resetDFFFieldUsage','resetDFFFieldUsage(-)');
5217     END IF;
5218 
5219   EXCEPTION
5220     WHEN OTHERS THEN
5221       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
5222       G_MSG_DATA      := SQLERRM;
5223       log_now (p_log_level => FND_FILE.LOG
5224               ,p_message   => 'resetDFFFieldUsage : '||SQLERRM
5225               );
5226       RAISE;
5227   END resetDFFFieldUsage;
5228 
5229   FUNCTION getAttrValue (
5230       p_zx_exempt_rec     IN   zx_exemptions_int%ROWTYPE
5231      ,p_column_name       IN   VARCHAR2
5232      ) RETURN VARCHAR2 IS
5233   BEGIN
5234 
5235     IF p_column_name = 'ATTRIBUTE1' THEN
5236       g_dff_usage_record.attribute1  := G_TRUE;
5237       RETURN p_zx_exempt_rec.attribute1;
5238     ELSIF p_column_name = 'ATTRIBUTE2' THEN
5239       g_dff_usage_record.attribute2  := G_TRUE;
5240       RETURN p_zx_exempt_rec.attribute2;
5241     ELSIF p_column_name = 'ATTRIBUTE3' THEN
5242       g_dff_usage_record.attribute3  := G_TRUE;
5243       RETURN p_zx_exempt_rec.attribute3;
5244     ELSIF p_column_name = 'ATTRIBUTE4' THEN
5245       g_dff_usage_record.attribute4  := G_TRUE;
5246       RETURN p_zx_exempt_rec.attribute4;
5247     ELSIF p_column_name = 'ATTRIBUTE5' THEN
5248       g_dff_usage_record.attribute5  := G_TRUE;
5249       RETURN p_zx_exempt_rec.attribute5;
5250     ELSIF p_column_name = 'ATTRIBUTE6' THEN
5251       g_dff_usage_record.attribute6  := G_TRUE;
5252       RETURN p_zx_exempt_rec.attribute6;
5253     ELSIF p_column_name = 'ATTRIBUTE7' THEN
5254       g_dff_usage_record.attribute7  := G_TRUE;
5255       RETURN p_zx_exempt_rec.attribute7;
5256     ELSIF p_column_name = 'ATTRIBUTE8' THEN
5257       g_dff_usage_record.attribute8  := G_TRUE;
5258       RETURN p_zx_exempt_rec.attribute8;
5259     ELSIF p_column_name = 'ATTRIBUTE9' THEN
5260       g_dff_usage_record.attribute9  := G_TRUE;
5261       RETURN p_zx_exempt_rec.attribute9;
5262     ELSIF p_column_name = 'ATTRIBUTE10' THEN
5263       g_dff_usage_record.attribute10 := G_TRUE;
5264       RETURN p_zx_exempt_rec.attribute10;
5265     ELSIF p_column_name = 'ATTRIBUTE11' THEN
5266       g_dff_usage_record.attribute11 := G_TRUE;
5267       RETURN p_zx_exempt_rec.attribute11;
5268     ELSIF p_column_name = 'ATTRIBUTE12' THEN
5269       g_dff_usage_record.attribute12 := G_TRUE;
5270       RETURN p_zx_exempt_rec.attribute12;
5271     ELSIF p_column_name = 'ATTRIBUTE13' THEN
5272       g_dff_usage_record.attribute13 := G_TRUE;
5273       RETURN p_zx_exempt_rec.attribute13;
5274     ELSIF p_column_name = 'ATTRIBUTE14' THEN
5275       g_dff_usage_record.attribute14 := G_TRUE;
5276       RETURN p_zx_exempt_rec.attribute14;
5277     ELSIF p_column_name = 'ATTRIBUTE15' THEN
5278       g_dff_usage_record.attribute15 := G_TRUE;
5279       RETURN p_zx_exempt_rec.attribute15;
5280     ELSE
5281       RETURN NULL;
5282     END IF;
5283   EXCEPTION
5284     WHEN OTHERS THEN
5285       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
5286       G_MSG_DATA      := SQLERRM;
5287       log_now (p_log_level => FND_FILE.LOG
5288               ,p_message   => 'getAttrValue : '||SQLERRM
5289               );
5290       RAISE;
5291   END getAttrValue;
5292 
5293   ------------------------------------------------------------------------------
5294   ------------------------------------------------------------------------------
5295   ------------------------------------------------------------------------------
5296   PROCEDURE performDFFValidation IS
5297     l_dflex_r         fnd_dflex.dflex_r;
5298 
5299     l_dflex_dr        fnd_dflex.dflex_dr;
5300 
5301     l_global_ctx_r  fnd_dflex.context_r;
5302     l_dff_ctx_r     fnd_dflex.context_r;
5303 
5304     l_tbl_ctx_code        fnd_dflex.context_code_a;
5305     l_tbl_ctx_is_global   fnd_dflex.boolean_a;
5306 
5307     l_ctx_dr     fnd_dflex.contexts_dr;
5308 
5309     l_global_seg_dr  fnd_dflex.segments_dr;
5310     l_dff_seg_dr     fnd_dflex.segments_dr;
5311 
5312     l_std_ctx_code  fnd_descr_flex_contexts.descriptive_flex_context_code%TYPE;
5313     l_dff_ctx_code  fnd_descr_flex_contexts.descriptive_flex_context_code%TYPE;
5314 
5315     l_last_attribute_category  zx_exemptions_int.attribute_category%TYPE;
5316     l_global_data_elements     zx_exemptions_int.attribute_category%TYPE;
5317     l_global_ctx_index         NUMBER;
5318 
5319     l_count            NUMBER;
5320 
5321     CURSOR c_exempt_records IS
5322     SELECT *
5323     FROM zx_exemptions_int
5324     WHERE request_id = G_REQUEST_ID
5325     AND record_status = G_RS_IN_PROCESS
5326     ORDER BY attribute_category desc
5327     FOR UPDATE;
5328 
5329     TYPE DYNAMIC_CUR IS REF CURSOR;
5330     c_err_cursor       DYNAMIC_CUR;
5331 
5332   BEGIN
5333 
5334     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5335       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'performDFFValidation','performDFFValidation(+)');
5336     END IF;
5337 
5338     -- validate the flex field
5339     G_DEBUG_STATEMENT:= ' Validating the Flx fields';
5340     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5341       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'performDFFValidation',G_DEBUG_STATEMENT);
5342     END IF;
5343 
5344     FND_DFLEX.get_flexfield
5345         (appl_short_name  => 'ZX'
5346         ,flexfield_name   => 'ZX_EXEMPTIONS'
5347         ,flexfield        => l_dflex_r
5348         ,flexinfo         => l_dflex_dr
5349         );
5350     --
5351     -- get the contexts defined for the flex field.
5352     --
5353     FND_DFLEX.get_contexts
5354         (flexfield        => l_dflex_r
5355         ,contexts         => l_ctx_dr
5356         );
5357     resetDFFFieldUsage();
5358     l_tbl_ctx_is_global := l_ctx_dr.is_global;
5359     IF (l_tbl_ctx_is_global.COUNT > 0) THEN
5360       --
5361       -- context fields defined
5362       --
5363       FOR i IN l_tbl_ctx_is_global.FIRST .. l_tbl_ctx_is_global.LAST  LOOP
5364         l_global_ctx_index := i;
5365         EXIT WHEN l_tbl_ctx_is_global(i);
5366       END LOOP;
5367       --
5368       -- l_global_ctx_index defines where the Global DFF is located
5369       --
5370       l_dff_ctx_r.flexfield       := l_dflex_r;
5371       l_global_ctx_r.flexfield    := l_dflex_r;
5372       l_global_ctx_r.context_code := l_ctx_dr.context_code(l_global_ctx_index);
5373       l_last_attribute_category   := l_global_ctx_r.context_code;
5374       l_global_data_elements      := l_global_ctx_r.context_code;
5375 
5376       FND_DFLEX.get_segments
5377           (context           => l_global_ctx_r
5378           ,segments          => l_global_seg_dr
5379           ,enabled_only      => TRUE
5380           );
5381       --
5382       -- l_global_seg_dr will now have the segments associated to DFF
5383       --
5384       FOR cr in c_exempt_records LOOP
5385         resetDFFFieldUsage();
5386         IF NVL(cr.attribute_category,l_last_attribute_category)
5387               <>  l_last_attribute_category THEN
5388           --
5389           -- attribute category has changed get the dff record
5390           --
5391           l_tbl_ctx_code      := l_ctx_dr.context_code;
5392 
5393           FOR i IN l_tbl_ctx_code.FIRST .. l_tbl_ctx_code.LAST LOOP
5394             IF l_tbl_ctx_code(i) = cr.attribute_category THEN
5395               l_last_attribute_category := cr.attribute_category;
5396               l_dff_ctx_r.context_code := cr.attribute_category;
5397 
5398               FND_DFLEX.get_segments
5399                   (context           => l_dff_ctx_r
5400                   ,segments          => l_dff_seg_dr
5401                   ,enabled_only      => TRUE
5402                   );
5403               --
5404               -- now we obtained the Identified Segments for cr.attribute_category
5405               --
5406               EXIT; -- for loop
5407             END IF;
5408           END LOOP;
5409         END IF;
5410 
5411         --
5412         -- global segments are available at   l_global_seg_dr
5413         -- dff segments are available at      l_dff_seg_dr
5414         --
5415         FND_FLEX_DESCVAL.set_context_value(l_last_attribute_category);
5416 
5417         IF l_global_seg_dr.application_column_name.COUNT > 0 THEN
5418           FOR i IN l_global_seg_dr.application_column_name.FIRST ..
5419                     l_global_seg_dr.application_column_name.LAST  LOOP
5420 
5421             fnd_flex_descval.set_column_value
5422               (l_global_seg_dr.application_column_name(i)
5423               ,getAttrValue
5424                   (p_zx_exempt_rec => cr
5425                   ,p_column_name   => l_global_seg_dr.application_column_name(i)
5426                   )
5427               );
5428           END LOOP;
5429         END IF;
5430 
5431         IF l_global_seg_dr.application_column_name.COUNT > 0 THEN
5432           IF l_last_attribute_category <> l_global_data_elements THEN
5433             FOR i IN l_dff_seg_dr.application_column_name.FIRST ..
5434                       l_dff_seg_dr.application_column_name.LAST  LOOP
5435 
5436               fnd_flex_descval.set_column_value
5437                 (l_dff_seg_dr.application_column_name(i)
5438                 ,getAttrValue
5439                     (p_zx_exempt_rec    => cr
5440                     ,p_column_name      => l_dff_seg_dr.application_column_name(i)
5441                     )
5442                 );
5443             END LOOP;
5444           END IF;
5445         END IF;
5446         --
5447         -- calling FND routine to valide DFF columns
5448         --
5449         IF NOT FND_FLEX_DESCVAL.validate_desccols
5450                   (appl_short_name       => 'ZX'
5451                   ,desc_flex_name        => 'ZX_EXEMPTIONS'
5452               ) THEN
5453           UPDATE zx_exemptions_int
5454           SET error_number = error_number + G_ES_EXE_DFF_INVALID,
5455               prog_int_char1 = fnd_flex_descval.error_message
5456           WHERE CURRENT OF c_exempt_records;
5457         ELSE
5458           -- set to NULL all other DFF fields which are not defined
5459           UPDATE zx_exemptions_int intf
5460           SET   attribute1 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute1,NULL)
5461                 ,attribute2 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute2,NULL)
5462                 ,attribute3 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute3,NULL)
5463                 ,attribute4 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute4,NULL)
5464                 ,attribute5 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute5,NULL)
5465                 ,attribute6 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute6,NULL)
5466                 ,attribute7 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute7,NULL)
5467                 ,attribute8 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute8,NULL)
5468                 ,attribute9 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute9,NULL)
5469                 ,attribute10 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute10,NULL)
5470                 ,attribute11 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute11,NULL)
5471                 ,attribute12 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute12,NULL)
5472                 ,attribute13 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute13,NULL)
5473                 ,attribute14 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute14,NULL)
5474                 ,attribute15 = DECODE(G_DFF_USAGE_RECORD.attribute1,G_TRUE,intf.attribute15,NULL)
5475           WHERE CURRENT OF c_exempt_records;
5476         END IF;
5477       END LOOP;
5478     ELSE
5479       -- no context fields defined.
5480       -- flag all record where customer has populated data into attributes
5481       UPDATE zx_exemptions_int
5482       SET error_number = error_number + G_ES_EXE_DFF_INVALID,
5483           prog_int_char1 = 'Attributes have been populated but no Context has been defined.'
5484       WHERE  request_id = G_REQUEST_ID
5485       AND record_status = G_RS_IN_PROCESS
5486       AND (attribute1 IS NOT NULL
5487             OR
5488             attribute2 IS NOT NULL
5489             OR
5490             attribute3 IS NOT NULL
5491             OR
5492             attribute4 IS NOT NULL
5493             OR
5494             attribute5 IS NOT NULL
5495             OR
5496             attribute6 IS NOT NULL
5497             OR
5498             attribute7 IS NOT NULL
5499             OR
5500             attribute8 IS NOT NULL
5501             OR
5502             attribute9 IS NOT NULL
5503             OR
5504             attribute10 IS NOT NULL
5505             OR
5506             attribute11 IS NOT NULL
5507             OR
5508             attribute12 IS NOT NULL
5509             OR
5510             attribute13 IS NOT NULL
5511             OR
5512             attribute14 IS NOT NULL
5513             OR
5514             attribute15 IS NOT NULL
5515           );
5516 
5517       G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records flagged all record where customer has populated data into attributes';
5518       IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5519         FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'performDFFValidation',G_DEBUG_STATEMENT);
5520       END IF;
5521 
5522     END IF;
5523     --
5524     -- DFF validation is complete
5525       --
5526     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5527       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'performDFFValidation','performDFFValidation(-)');
5528     END IF;
5529 
5530   EXCEPTION
5531     WHEN OTHERS THEN
5532       IF c_exempt_records%ISOPEN THEN
5533         CLOSE c_exempt_records;
5534       END IF;
5535       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
5536       G_MSG_DATA      := SQLERRM;
5537       log_now (p_log_level => FND_FILE.LOG
5538               ,p_message   => 'performDFFValidation : '||SQLERRM
5539               );
5540       RAISE;
5541   END performDFFValidation;
5542 
5543 
5544   ------------------------------------------------------------------------------
5545   ------------------------------------------------------------------------------
5546   PROCEDURE ProcessRepCodeAssocRecord IS
5547 
5548   l_date1 DATE;
5549   l_date2 DATE;
5550   l_date3 DATE;
5551   l_date4 DATE;
5552   l_date5 DATE;
5553 
5554   BEGIN
5555 
5556     l_date1     := SYSDATE;
5557 
5558     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5559       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ProcessRepCodeAssocRecord','ProcessRepCodeAssocRecord(+)');
5560     END IF;
5561 
5562     -------------------------
5563     -- Populate default values
5564     -------------------------
5565     UPDATE zx_report_codes_assoc_int
5566     SET request_id = G_REQUEST_ID
5567        ,record_status = G_RS_IN_PROCESS
5568        ,dml_type = UPPER(dml_type)
5569        ,prog_int_char1 = NULL
5570        ,prog_int_num1 = 0
5571        ,error_number = 0
5572     WHERE NVL(record_status,G_RS_ERROR) <> G_RS_VALID
5573     AND NVL(batch_id,G_MISS_NUM) =
5574         NVL(G_BATCH_ID,NVL(batch_id,G_MISS_NUM));
5575 
5576     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records populated with default values';
5577     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5578       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRepCodeAssocRecord',G_DEBUG_STATEMENT);
5579     END IF;
5580 
5581     -------------------------
5582     -- Check Mandatory Paramters
5583     -------------------------
5584     -- party_tax_profile_id is considered in case of Update Scenario.
5585     UPDATE zx_report_codes_assoc_int
5586     SET error_number = G_ES_RCA_MAND_PARAM_MISSING
5587     WHERE request_id = G_REQUEST_ID
5588     AND record_status = G_RS_IN_PROCESS
5589     AND reporting_type_id IS NULL
5590     AND reporting_type_name IS NULL;
5591 
5592     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with Mandatory Paramters values NULL';
5593     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5594       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRepCodeAssocRecord',G_DEBUG_STATEMENT);
5595     END IF;
5596 
5597     -------------------------
5598     -- Duplicate records checking
5599     -------------------------
5600 
5601     UPDATE zx_report_codes_assoc_int  orig
5602     SET error_number = error_number + G_ES_RCA_DUP_INTF_RECORD,
5603         record_status = G_RS_ERROR
5604     WHERE request_id = G_REQUEST_ID
5605     AND record_status = G_RS_IN_PROCESS
5606     AND error_number <> G_ES_RCA_MAND_PARAM_MISSING
5607     AND EXISTS (
5608                 SELECT /*+ FIRST_ROWS(1) */ 1
5609                 FROM zx_report_codes_assoc_int dup
5610                 WHERE dup.rowid <> orig.rowid
5611                 AND dup.request_id = G_REQUEST_ID
5612                 AND dup.record_status = G_RS_IN_PROCESS
5613                 AND NVL(dup.entity_id,G_MISS_NUM)  = NVL(orig.entity_id,G_MISS_NUM)
5614                 AND dup.intf_ptp_reference  = orig.intf_ptp_reference
5615                 AND nvl(dup.reporting_type_id,G_MISS_NUM)  = nvl(orig.reporting_type_id,G_MISS_NUM)
5616                 AND nvl(dup.reporting_type_name,G_MISS_CHAR)  = nvl(orig.reporting_type_name,G_MISS_CHAR)
5617                 AND dup.effective_from  = orig.effective_from
5618                );
5619 
5620     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' Duplicate records found';
5621     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5622       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRepCodeAssocRecord',G_DEBUG_STATEMENT);
5623     END IF;
5624 
5625     -------------------------
5626     -- Value to Id Conversion
5627     -------------------------
5628 
5629     l_date2     := SYSDATE;
5630     AssocValueToIdConversion();
5631     l_date3     := SYSDATE;
5632 
5633     G_DEBUG_STATEMENT:= ' Value to ID Conversions Complete ';
5634     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5635       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRepCodeAssocRecord',G_DEBUG_STATEMENT);
5636     END IF;
5637 
5638     -------------------------
5639     --  Record level validations
5640     -------------------------
5641 
5642     -- Validation to check rca with overlapping date ranges.
5643 
5644     UPDATE zx_report_codes_assoc_int orig
5645     SET error_number = error_number + G_ES_RCA_DATE_OVERLAP
5646     WHERE orig.record_status = G_RS_IN_PROCESS
5647     AND orig.request_id = G_REQUEST_ID
5648     AND EXISTS (
5649                 SELECT /*+ FIRST_ROWS(1) */ 1
5650                 FROM zx_report_codes_assoc_int dup
5651                 WHERE dup.rowid <> orig.rowid
5652                 AND dup.request_id = G_REQUEST_ID
5653                 AND dup.record_status = G_RS_IN_PROCESS
5654                 AND BITAND(dup.error_number,G_ES_RCA_REP_TYPE_INVALID) = 0
5655                 AND dup.reporting_type_id  = orig.reporting_type_id
5656                 AND dup.intf_ptp_reference = orig.intf_ptp_reference
5657                 AND (   dup.effective_to IS NULL
5658                      OR orig.effective_from <= dup.effective_to
5659                     )
5660                 AND (   orig.effective_to IS NULL
5661                      OR orig.effective_to >= dup.effective_from
5662                     )
5663                );
5664 
5665     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' rca records with overlapping date ranges.';
5666     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5667       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRepCodeAssocRecord',G_DEBUG_STATEMENT);
5668     END IF;
5669 
5670     l_date4     := SYSDATE;
5671 
5672     -------------------------
5673     -- NO Other Validations
5674     -------------------------
5675     UPDATE zx_report_codes_assoc_int rca_int
5676     SET record_status = DECODE(error_number,0,G_RS_VALID,G_RS_ERROR)
5677     WHERE request_id = G_REQUEST_ID
5678     AND record_status = G_RS_IN_PROCESS;
5679 
5680 
5681     UPDATE zx_party_tax_profile_int ptp_int
5682     SET record_status = NULL
5683     WHERE request_id = G_REQUEST_ID
5684     AND record_status = G_RS_VALID
5685     AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
5686                 FROM zx_report_codes_assoc_int rca_int
5687                 WHERE request_id = G_REQUEST_ID
5688                 AND record_status = G_RS_ERROR
5689                 AND rca_int.intf_ptp_reference = ptp_int.intf_ptp_reference);
5690 
5691     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' ptp records with record_status updated to NULL';
5692     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5693       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'ProcessRepCodeAssocRecord',G_DEBUG_STATEMENT);
5694     END IF;
5695 
5696     l_date5     := SYSDATE;
5697 
5698     log_now (p_log_level => FND_FILE.LOG
5699             ,p_message   => '+--------------------------------------------------------------------'
5700             );
5701     log_now (p_log_level => FND_FILE.LOG
5702             ,p_message   => '|              PERF METRICS for Processing Reporting Code Assoc Records'
5703             );
5704     log_now (p_log_level => FND_FILE.LOG
5705             ,p_message   => '| Time Taken for Value to ID Conversions     '||(l_date3-l_date2)*86400||' Secs'
5706             );
5707     log_now (p_log_level => FND_FILE.LOG
5708             ,p_message   => '| Time Taken for Date Overlap Validation     '||(l_date4-l_date3)*86400||' Secs'
5709             );
5710     log_now (p_log_level => FND_FILE.LOG
5711             ,p_message   => '| Total Time Taken for RCA Record Processing '||(l_date5-l_date1)*86400||' Secs'
5712             );
5713     log_now (p_log_level => FND_FILE.LOG
5714             ,p_message   => '+--------------------------------------------------------------------'
5715             );
5716 
5717     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5718       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'ProcessRepCodeAssocRecord','ProcessRepCodeAssocRecord(-)');
5719     END IF;
5720 
5721   EXCEPTION
5722     WHEN OTHERS THEN
5723       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
5724       G_MSG_DATA      := SQLERRM;
5725       log_now (p_log_level => FND_FILE.LOG
5726               ,p_message   => 'ProcessRepCodeAssocRecord'||' : '||SQLERRM
5727               );
5728       RAISE;
5729   END ProcessRepCodeAssocRecord;
5730 
5731   ------------------------------------------------------------------------------
5732   ------------------------------------------------------------------------------
5733   ------------------------------------------------------------------------------
5734 
5735   PROCEDURE AssocValueToIdConversion  IS
5736 
5737   BEGIN
5738 
5739     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5740       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'AssocValueToIdConversion','AssocValueToIdConversion(+)');
5741     END IF;
5742 
5743     -- Field Validations
5744 
5745     -- Validate the field dml_type
5746     UPDATE zx_report_codes_assoc_int
5747     SET error_number = error_number + G_ES_RCA_TRANS_TYPE_INVALID
5748     WHERE record_status = G_RS_IN_PROCESS
5749     AND request_id = G_REQUEST_ID
5750     AND dml_type <> 'CREATE';
5751 
5752     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid dml_type found';
5753     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5754       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'AssocValueToIdConversion',G_DEBUG_STATEMENT);
5755     END IF;
5756 
5757     -- Validate the fields entity_code
5758     UPDATE zx_report_codes_assoc_int
5759     SET error_number = error_number + G_ES_RCA_ENTY_CD_INVALID
5760     WHERE record_status = G_RS_IN_PROCESS
5761     AND request_id = G_REQUEST_ID
5762     AND NVL(batch_id,G_MISS_NUM) =
5763         NVL(G_BATCH_ID,NVL(batch_id,G_MISS_NUM))
5764     AND entity_code <> 'ZX_PARTY_TAX_PROFILE';
5765 
5766     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid entity_code found';
5767     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5768       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'AssocValueToIdConversion',G_DEBUG_STATEMENT);
5769     END IF;
5770 
5771     -- Validate the fields effective_to and effective_from
5772     UPDATE zx_report_codes_assoc_int
5773     SET error_number = error_number + G_ES_RCA_DATE_RANGE_INVALID
5774     WHERE record_status = G_RS_IN_PROCESS
5775     AND request_id = G_REQUEST_ID
5776     AND effective_to IS NOT NULL
5777     AND effective_to <  effective_from;
5778 
5779     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid effective dates found';
5780     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5781       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'AssocValueToIdConversion',G_DEBUG_STATEMENT);
5782     END IF;
5783 
5784     -- validating the fields reporting_type_id and reporting_type_name
5785     UPDATE zx_report_codes_assoc_int rca_int
5786     SET error_number = error_number + G_ES_RCA_REP_TYPE_INVALID
5787     WHERE (( reporting_type_id IS NOT NULL
5788              AND NOT EXISTS
5789                 (
5790                   SELECT 1
5791                   FROM  Zx_Reporting_Types_b RepType,
5792                         Zx_Report_Types_Usages RepUsage
5793                   WHERE RepType.Reporting_Type_Id = RepUsage.Reporting_Type_Id
5794                   AND RepUsage.Enabled_Flag= 'Y'
5795                   AND SYSDATE BETWEEN RepType. EFFECTIVE_FROM
5796                               AND NVL(RepType. EFFECTIVE_TO,SYSDATE)
5797                   AND RepUsage.ENTITY_CODE = 'ZX_PARTY_TAX_PROFILE'
5798                   AND RepType.Has_Reporting_Codes_Flag = 'Y'
5799                   AND NVL(RepType.legal_message_flag, 'N') = 'N'
5800                   AND reptype.reporting_type_id = rca_int.reporting_type_id
5801                 )
5802             )
5803            OR
5804            (     reporting_type_id IS NULL
5805              AND reporting_type_name IS NOT NULL
5806              AND NOT EXISTS
5807                 (
5808                   SELECT 1
5809                   FROM  Zx_Reporting_Types_VL RepType,
5810                         Zx_Report_Types_Usages RepUsage
5811                   WHERE RepType.Reporting_Type_Id = RepUsage.Reporting_Type_Id
5812                   AND RepUsage.Enabled_Flag= 'Y'
5813                   AND SYSDATE BETWEEN RepType. EFFECTIVE_FROM
5814                               AND NVL(RepType. EFFECTIVE_TO,SYSDATE)
5815                   AND RepUsage.ENTITY_CODE = 'ZX_PARTY_TAX_PROFILE'
5816                   AND RepType.Has_Reporting_Codes_Flag = 'Y'
5817                   AND NVL(RepType.legal_message_flag, 'N') = 'N'
5818                   AND reptype.reporting_type_name = rca_int.reporting_type_name
5819                 )
5820             )
5821           )
5822     AND record_status = G_RS_IN_PROCESS
5823     AND request_id = G_REQUEST_ID;
5824 
5825     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid reporting_type found';
5826     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5827       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'AssocValueToIdConversion',G_DEBUG_STATEMENT);
5828     END IF;
5829 
5830     -- value to id conversion for reporting_type_id
5831     UPDATE zx_report_codes_assoc_int rca_int
5832     SET reporting_type_id =
5833                 (
5834                   SELECT RepType.Reporting_Type_Id
5835                   FROM  Zx_Reporting_Types_VL RepType,
5836                         Zx_Report_Types_Usages RepUsage
5837                   WHERE RepType.Reporting_Type_Id = RepUsage.Reporting_Type_Id
5838                   AND RepUsage.Enabled_Flag= 'Y'
5839                   AND SYSDATE BETWEEN RepType. EFFECTIVE_FROM
5840                               AND NVL(RepType. EFFECTIVE_TO,SYSDATE)
5841                   AND RepUsage.ENTITY_CODE = 'ZX_PARTY_TAX_PROFILE'
5842                   AND RepType.Has_Reporting_Codes_Flag = 'Y'
5843                   AND NVL(RepType.legal_message_flag, 'N') = 'N'
5844                   AND RepType.Reporting_Type_Name = rca_int.Reporting_Type_Name
5845                 )
5846     WHERE record_status = G_RS_IN_PROCESS
5847     AND request_id = G_REQUEST_ID
5848     AND BITAND(error_number,G_ES_RCA_REP_TYPE_INVALID) = 0
5849     AND reporting_type_id IS NULL
5850     AND reporting_type_name IS NOT NULL;
5851 
5852     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with valid reporting_type_id';
5853     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5854       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'AssocValueToIdConversion',G_DEBUG_STATEMENT);
5855     END IF;
5856 
5857     -- validating the fields reporting_code_id and reporting_code_name
5858     UPDATE zx_report_codes_assoc_int rca_int
5859     SET error_number = error_number + G_ES_RCA_REP_CODE_INVALID
5860     WHERE (( reporting_code_id IS NOT NULL
5861              AND NOT EXISTS
5862                 (
5863                 SELECT 1
5864                 FROM  ZX_REPORTING_CODES_b RepCode
5865                 WHERE  RepCode.Reporting_Type_Id = rca_int.Reporting_Type_Id
5866                 AND   SYSDATE BETWEEN RepCode.EFFECTIVE_FROM
5867                                   AND NVL(RepCode.EFFECTIVE_TO,SYSDATE)
5868                 AND   reporting_code_id = rca_int.reporting_code_id
5869                 )
5870             )
5871            OR
5872            (     reporting_code_id IS NULL
5873              AND reporting_code_name IS NOT NULL
5874              AND NOT EXISTS
5875                 (
5876                 SELECT 1
5877                 FROM  ZX_REPORTING_CODES_VL RepCode
5878                 WHERE  RepCode.Reporting_Type_Id = rca_int.Reporting_Type_Id
5879                 AND   SYSDATE BETWEEN RepCode.EFFECTIVE_FROM
5880                                   AND NVL(RepCode.EFFECTIVE_TO,SYSDATE)
5881                 AND   reporting_code_name = rca_int.reporting_code_name
5882                 )
5883             )
5884           )
5885     AND record_status = G_RS_IN_PROCESS
5886     AND request_id = G_REQUEST_ID
5887     AND BITAND(error_number,G_ES_RCA_REP_TYPE_INVALID) = 0;
5888 
5889     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid reporting_code found';
5890     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5891       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'AssocValueToIdConversion',G_DEBUG_STATEMENT);
5892     END IF;
5893 
5894     -- value to id conversion for reporting_code_id
5895     UPDATE zx_report_codes_assoc_int rca_int
5896     SET reporting_code_id =
5897                 (
5898                 SELECT Reporting_Code_Id
5899                 FROM  ZX_REPORTING_CODES_VL RepCode
5900                 WHERE  RepCode.Reporting_Type_Id = rca_int.Reporting_Type_Id
5901                 AND   SYSDATE BETWEEN RepCode.EFFECTIVE_FROM
5902                                   AND NVL(RepCode.EFFECTIVE_TO,SYSDATE)
5903                 AND RepCode.Reporting_Code_Name = rca_int.reporting_code_name
5904                 )
5905     WHERE record_status = G_RS_IN_PROCESS
5906     AND request_id = G_REQUEST_ID
5907     AND BITAND(error_number,G_ES_RCA_REP_TYPE_INVALID+
5908                             G_ES_RCA_REP_CODE_INVALID) = 0
5909     AND reporting_code_id IS NULL
5910     AND reporting_code_name IS NOT NULL;
5911 
5912     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records updated with valid reporting_code_id';
5913     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5914       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'AssocValueToIdConversion',G_DEBUG_STATEMENT);
5915     END IF;
5916 
5917     -- validating the fields reporting_code_char_value/reporting_code_num_value/reporting_code_date_value
5918     UPDATE zx_report_codes_assoc_int rca_int
5919     SET error_number = error_number + G_ES_RCA_REP_CODE_VAL_INVALID
5920     WHERE record_status = G_RS_IN_PROCESS
5921     AND request_id = G_REQUEST_ID
5922     AND BITAND(error_number,G_ES_RCA_REP_TYPE_INVALID+
5923                             G_ES_RCA_REP_CODE_INVALID) = 0
5924     AND NOT EXISTS (
5925                 SELECT 1
5926                 FROM ZX_REPORTING_CODES_B RepCode
5927                 WHERE RepCode.Reporting_Type_Id = rca_int.Reporting_Type_Id
5928                 AND RepCode.Reporting_Code_Id = rca_int.Reporting_Code_Id
5929                 AND NVL(reporting_code_char_value, G_MISS_CHAR) =
5930                         NVL(rca_int.reporting_code_char_value, G_MISS_CHAR)
5931                 AND NVL(reporting_code_date_value, FND_API.G_MISS_DATE) =
5932                         NVL(rca_int.reporting_code_date_value, FND_API.G_MISS_DATE)
5933                 AND NVL(reporting_code_num_value, G_MISS_NUM) =
5934                         NVL(rca_int.reporting_code_num_value, G_MISS_NUM)
5935                 AND   SYSDATE BETWEEN RepCode. EFFECTIVE_FROM
5936                               AND NVL(RepCode. EFFECTIVE_TO,SYSDATE)
5937                 );
5938 
5939     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' records with invalid reporting_code_<datatype>_value found';
5940     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5941       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'AssocValueToIdConversion',G_DEBUG_STATEMENT);
5942     END IF;
5943 
5944     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5945       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'AssocValueToIdConversion','AssocValueToIdConversion(-)');
5946     END IF;
5947 
5948   EXCEPTION
5949     WHEN OTHERS THEN
5950       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
5951       G_MSG_DATA      := SQLERRM;
5952       log_now (p_log_level => FND_FILE.LOG
5953               ,p_message   => 'AssocValueToIdConversion'||' : '||SQLERRM
5954               );
5955       RAISE;
5956   END AssocValueToIdConversion;
5957 
5958   PROCEDURE PopulateProductionTables IS
5959   BEGIN
5960 
5961     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5962       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'PopulateProductionTables','PopulateProductionTables(-)');
5963     END IF;
5964 
5965     UPDATE zx_party_tax_profile_int ptp_int
5966     SET party_tax_profile_id = zx_party_tax_profile_s.nextval
5967     WHERE record_status = G_RS_VALID
5968     AND  request_id = G_REQUEST_ID
5969     AND party_tax_profile_id is NULL
5970     AND dml_type = 'CREATE';
5971 
5972     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' ptp records updated with valid party_tax_profile_id';
5973     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5974       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PopulateProductionTables',G_DEBUG_STATEMENT);
5975     END IF;
5976 
5977     UPDATE zx_registrations_int reg_int
5978     SET party_tax_profile_id =
5979                (
5980                 SELECT party_tax_profile_id
5981                 FROM zx_party_tax_profile_int ptp_int
5982                 WHERE ptp_int.intf_ptp_reference = reg_int.intf_ptp_reference
5983                 AND ptp_int.record_status = G_RS_VALID
5984                 AND ptp_int.request_id = G_REQUEST_ID
5985                )
5986     WHERE record_status = G_RS_VALID
5987     AND  request_id = G_REQUEST_ID;
5988 
5989     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' reg records updated with valid party_tax_profile_id';
5990     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
5991       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PopulateProductionTables',G_DEBUG_STATEMENT);
5992     END IF;
5993 
5994     UPDATE zx_exemptions_int exe_int
5995     SET party_tax_profile_id =
5996                (
5997                 SELECT party_tax_profile_id
5998                 FROM zx_party_tax_profile_int ptp_int
5999                 WHERE ptp_int.intf_ptp_reference = exe_int.intf_ptp_reference
6000                 AND ptp_int.record_status = G_RS_VALID
6001                 AND ptp_int.request_id = G_REQUEST_ID
6002                )
6003     WHERE record_status = G_RS_VALID
6004     AND  request_id = G_REQUEST_ID;
6005 
6006     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' exe records updated with valid party_tax_profile_id';
6007     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
6008       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PopulateProductionTables',G_DEBUG_STATEMENT);
6009     END IF;
6010 
6011     UPDATE zx_report_codes_assoc_int rca_int
6012     SET (party_tax_profile_id,entity_id) =
6013                (
6014                 SELECT party_tax_profile_id,party_tax_profile_id
6015                 FROM zx_party_tax_profile_int ptp_int
6016                 WHERE ptp_int.intf_ptp_reference = rca_int.intf_ptp_reference
6017                 AND ptp_int.record_status = G_RS_VALID
6018                 AND ptp_int.request_id = G_REQUEST_ID
6019                )
6020     WHERE record_status = G_RS_VALID
6021     AND  request_id = G_REQUEST_ID;
6022 
6023     G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' rca records updated with valid party_tax_profile_id';
6024     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
6025       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PopulateProductionTables',G_DEBUG_STATEMENT);
6026     END IF;
6027 
6028     INSERT INTO zx_party_tax_profile(
6029               PARTY_TYPE_CODE,
6030               SUPPLIER_FLAG,
6031               CUSTOMER_FLAG,
6032               SITE_FLAG,
6033               PROCESS_FOR_APPLICABILITY_FLAG,
6034               ROUNDING_LEVEL_CODE,
6035               ROUNDING_RULE_CODE,
6036               WITHHOLDING_START_DATE,
6037               INCLUSIVE_TAX_FLAG,
6038               ALLOW_AWT_FLAG,
6039               USE_LE_AS_SUBSCRIBER_FLAG,
6040               LEGAL_ESTABLISHMENT_FLAG,
6041               FIRST_PARTY_LE_FLAG,
6042               REPORTING_AUTHORITY_FLAG,
6043               COLLECTING_AUTHORITY_FLAG,
6044               PROVIDER_TYPE_CODE,
6045               CREATE_AWT_DISTS_TYPE_CODE,
6046               CREATE_AWT_INVOICES_TYPE_CODE,
6047               TAX_CLASSIFICATION_CODE,
6048               SELF_ASSESS_FLAG,
6049               ALLOW_OFFSET_TAX_FLAG,
6050               EFFECTIVE_FROM_USE_LE,
6051               RECORD_TYPE_CODE,
6052               CREATED_BY,
6053               CREATION_DATE,
6054               LAST_UPDATED_BY,
6055               LAST_UPDATE_DATE,
6056               LAST_UPDATE_LOGIN,
6057               REQUEST_ID,
6058               PROGRAM_APPLICATION_ID,
6059               PROGRAM_ID,
6060               ATTRIBUTE1,
6061               ATTRIBUTE2,
6062               ATTRIBUTE3,
6063               ATTRIBUTE4,
6064               ATTRIBUTE5,
6065               ATTRIBUTE6,
6066               ATTRIBUTE7,
6067               ATTRIBUTE8,
6068               ATTRIBUTE9,
6069               ATTRIBUTE10,
6070               ATTRIBUTE11,
6071               ATTRIBUTE12,
6072               ATTRIBUTE13,
6073               ATTRIBUTE14,
6074               ATTRIBUTE15,
6075               ATTRIBUTE_CATEGORY,
6076               PROGRAM_LOGIN_ID,
6077               PARTY_TAX_PROFILE_ID,
6078               PARTY_ID,
6079               REP_REGISTRATION_NUMBER,
6080               OBJECT_VERSION_NUMBER,
6081               REGISTRATION_TYPE_CODE,
6082               COUNTRY_CODE,
6083               MERGED_TO_PTP_ID,
6084               MERGED_STATUS_CODE
6085     )
6086     (
6087     SELECT    PARTY_TYPE_CODE,
6088               DECODE(G_CUST_INTF_TABLE, G_INTF_CUS_TABLE_NAME,'N',
6089                                         G_INTF_SUP_TABLE_NAME,'Y',
6090                                         G_INTF_SUP_SITE_TABLE_NAME,'Y',
6091                                         NULL),           --SUPPLIER_FLAG,
6092               DECODE(G_CUST_INTF_TABLE, G_INTF_CUS_TABLE_NAME,'Y',
6093                                         G_INTF_SUP_TABLE_NAME,'N',
6094                                         G_INTF_SUP_SITE_TABLE_NAME,'N',
6095                                         NULL),           --CUSTOMER_FLAG,
6096               DECODE(PARTY_TYPE_CODE,'THIRD_PARTY_SITE','Y','N'), --SITE_FLAG,
6097               DECODE(G_CUST_INTF_TABLE, G_INTF_SUP_TABLE_NAME,process_for_applicability_flag,
6098                                         G_INTF_SUP_SITE_TABLE_NAME,process_for_applicability_flag,
6099                                         NULL), --PROCESS_FOR_APPLICABILITY_FLAG,
6100               rounding_level_code,
6101               rounding_rule_code,
6102               NULL,                 --WITHHOLDING_START_DATE,
6103               DECODE(G_CUST_INTF_TABLE, G_INTF_SUP_TABLE_NAME,inclusive_tax_flag,
6104                                         G_INTF_SUP_SITE_TABLE_NAME,inclusive_tax_flag,
6105                                         NULL), --INCLUSIVE_TAX_FLAG,
6106               NULL,                 --ALLOW_AWT_FLAG,
6107               NULL,                 --USE_LE_AS_SUBSCRIBER_FLAG,
6108               NULL,                 --LEGAL_ESTABLISHMENT_FLAG,
6109               NULL,                 --FIRST_PARTY_LE_FLAG,
6110               NULL,                 --REPORTING_AUTHORITY_FLAG,
6111               NULL,                 --COLLECTING_AUTHORITY_FLAG,
6112               NULL,                 --PROVIDER_TYPE_CODE
6113               NULL,                 --CREATE_AWT_DISTS_TYPE_CODE,
6114               NULL,                 --CREATE_AWT_INVOICES_TYPE_CODE,
6115               TAX_CLASSIFICATION_CODE,
6116               NULL,                 --SELF_ASSESS_FLAG,
6117               DECODE(G_CUST_INTF_TABLE, G_INTF_SUP_TABLE_NAME,allow_offset_tax_flag,
6118                                         G_INTF_SUP_SITE_TABLE_NAME,allow_offset_tax_flag,
6119                                         NULL), --ALLOW_OFFSET_TAX_FLAG,
6120               NULL,                 --EFFECTIVE_FROM_USE_LE,
6121               G_RECORD_TYPE_CODE,   --RECORD_TYPE_CODE,
6122               G_USER_ID,            --CREATED_BY
6123               G_SYSDATE,            --CREATION_DATE,
6124               G_USER_ID,            --LAST_UPDATED_BY
6125               G_SYSDATE,            --LAST_UPDATE_DATE
6126               G_LOGIN_ID,           --LAST_UPDATE_LOGIN
6127               G_REQUEST_ID,         --REQUEST_ID,
6128               G_PROG_APPID,         --PROGRAM_APPLICATION_ID
6129               G_PROG_ID,            --PROGRAM_ID
6130               NULL,                 --ATTRIBUTE1
6131               NULL,                 --ATTRIBUTE2
6132               NULL,                 --ATTRIBUTE3
6133               NULL,                 --ATTRIBUTE4
6134               NULL,                 --ATTRIBUTE5
6135               NULL,                 --ATTRIBUTE6
6136               NULL,                 --ATTRIBUTE7
6137               NULL,                 --ATTRIBUTE8
6138               NULL,                 --ATTRIBUTE9
6139               NULL,                 --ATTRIBUTE10
6140               NULL,                 --ATTRIBUTE11
6141               NULL,                 --ATTRIBUTE12
6142               NULL,                 --ATTRIBUTE13
6143               NULL,                 --ATTRIBUTE14
6144               NULL,                 --ATTRIBUTE15
6145               NULL,                 --ATTRIBUTE_CATEGORY
6146               G_LOGIN_ID,           --PROGRAM_LOGIN_ID
6147               PARTY_TAX_PROFILE_ID,
6148               PARTY_ID,
6149               registration_number,
6150               1,                    --OBJECT_VERSION_NUMBER,
6151               REGISTRATION_TYPE_CODE,
6152               COUNTRY_CODE,
6153               NULL,                 --MERGED_TO_PTP_ID,
6154               NULL                  --MERGED_STATUS_CODE
6155     FROM  zx_party_tax_profile_int
6156     WHERE record_status = G_RS_VALID
6157     AND request_id = G_REQUEST_ID
6158     AND error_number = 0
6159     );
6160 
6161     G_DEBUG_STATEMENT:= 'Inserted '||SQL%ROWCOUNT||' records into zx_party_tax_profile ';
6162     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
6163       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PopulateProductionTables',G_DEBUG_STATEMENT);
6164     END IF;
6165     log_now (p_log_level => FND_FILE.LOG
6166             ,p_message   => G_DEBUG_STATEMENT
6167             );
6168 
6169 
6170     INSERT INTO zx_registrations (
6171           REGISTRATION_TYPE_CODE,
6172           REGISTRATION_NUMBER,
6173           VALIDATION_RULE,
6174           ROUNDING_RULE_CODE,
6175           TAX_JURISDICTION_CODE,
6176           SELF_ASSESS_FLAG,
6177           REGISTRATION_STATUS_CODE,
6178           REGISTRATION_SOURCE_CODE,
6179           REGISTRATION_REASON_CODE,
6180           TAX,
6181           TAX_REGIME_CODE,
6182           INCLUSIVE_TAX_FLAG,
6183           HAS_TAX_EXEMPTIONS_FLAG,
6184           EFFECTIVE_FROM,
6185           EFFECTIVE_TO,
6186           REP_PARTY_TAX_NAME,
6187           DEFAULT_REGISTRATION_FLAG,
6188           BANK_ACCOUNT_NUM,
6189           LEGAL_LOCATION_ID,
6190           RECORD_TYPE_CODE,
6191           CREATED_BY,
6192           CREATION_DATE,
6193           LAST_UPDATED_BY,
6194           LAST_UPDATE_DATE,
6195           LAST_UPDATE_LOGIN,
6196           REQUEST_ID,
6197           PROGRAM_APPLICATION_ID,
6198           PROGRAM_ID,
6199           ATTRIBUTE1,
6200           ATTRIBUTE2,
6201           ATTRIBUTE3,
6202           ATTRIBUTE4,
6203           ATTRIBUTE5,
6204           ATTRIBUTE6,
6205           ATTRIBUTE7,
6206           ATTRIBUTE8,
6207           ATTRIBUTE9,
6208           ATTRIBUTE10,
6209           ATTRIBUTE11,
6210           ATTRIBUTE12,
6211           ATTRIBUTE13,
6212           ATTRIBUTE14,
6213           ATTRIBUTE15,
6214           ATTRIBUTE_CATEGORY,
6215           TAX_CLASSIFICATION_CODE,
6216           PROGRAM_LOGIN_ID,
6217           REGISTRATION_ID,
6218           TAX_AUTHORITY_ID,
6219           REP_TAX_AUTHORITY_ID,
6220           COLL_TAX_AUTHORITY_ID,
6221           PARTY_TAX_PROFILE_ID,
6222           LEGAL_REGISTRATION_ID,
6223           BANK_ID,
6224           BANK_BRANCH_ID,
6225           ACCOUNT_ID,
6226           ACCOUNT_SITE_ID,
6227           OBJECT_VERSION_NUMBER,
6228           ROUNDING_LEVEL_CODE,
6229           ACCOUNT_TYPE_CODE,
6230           MERGED_TO_REGISTRATION_ID
6231     )
6232     (SELECT REGISTRATION_TYPE_CODE,
6233           REGISTRATION_NUMBER,
6234           NULL,                 --VALIDATION_RULE
6235           ROUNDING_RULE_CODE,
6236           TAX_JURISDICTION_CODE,
6237           NULL,                 --SELF_ASSESS_FLAG
6238           REGISTRATION_STATUS_CODE,
6239           REGISTRATION_SOURCE_CODE,
6240           REGISTRATION_REASON_CODE,
6241           TAX_CODE,
6242           TAX_REGIME_CODE,
6243           INCLUSIVE_TAX_FLAG,
6244           NULL,                 --HAS_TAX_EXEMPTIONS_FLAG
6245           EFFECTIVE_FROM,
6246           EFFECTIVE_TO,
6247           NULL,                 --REP_PARTY_TAX_NAME
6248           DEFAULT_REGISTRATION_FLAG,
6249           NULL,                 --BANK_ACCOUNT_NUM
6250           LEGAL_LOCATION_ID,
6251           G_RECORD_TYPE_CODE,   --RECORD_TYPE_CODE
6252           G_USER_ID,            --CREATED_BY
6253           G_SYSDATE,            --CREATION_DATE
6254           G_USER_ID,            --LAST_UPDATED_BY
6255           G_SYSDATE,            --LAST_UPDATE_DATE
6256           G_LOGIN_ID,           --LAST_UPDATE_LOGIN
6257           G_REQUEST_ID,         --REQUEST_ID
6258           G_PROG_APPID,         --PROGRAM_APPLICATION_ID
6259           G_PROG_ID,            --PROGRAM_ID
6260           NULL,                 --ATTRIBUTE1
6261           NULL,                 --ATTRIBUTE2
6262           NULL,                 --ATTRIBUTE3
6263           NULL,                 --ATTRIBUTE4
6264           NULL,                 --ATTRIBUTE5
6265           NULL,                 --ATTRIBUTE6
6266           NULL,                 --ATTRIBUTE7
6267           NULL,                 --ATTRIBUTE8
6268           NULL,                 --ATTRIBUTE9
6269           NULL,                 --ATTRIBUTE10
6270           NULL,                 --ATTRIBUTE11
6271           NULL,                 --ATTRIBUTE12
6272           NULL,                 --ATTRIBUTE13
6273           NULL,                 --ATTRIBUTE14
6274           NULL,                 --ATTRIBUTE15
6275           NULL,                 --ATTRIBUTE_CATEGORY
6276           NULL,                 --TAX_CLASSIFICATION_CODE
6277           G_LOGIN_ID,           --PROGRAM_LOGIN_ID
6278           ZX_REGISTRATIONS_S.nextval,  --REGISTRATION_ID
6279           TAX_AUTHORITY_ID,
6280           NULL,                 --REP_TAX_AUTHORITY_ID
6281           NULL,                 --COLL_TAX_AUTHORITY_ID
6282           PARTY_TAX_PROFILE_ID,
6283           LEGAL_REGISTRATION_ID,
6284           NULL,                 --BANK_ID
6285           NULL,                 --BANK_BRANCH_ID
6286           NULL,                 --ACCOUNT_ID
6287           NULL,                 --ACCOUNT_SITE_ID
6288           1,                    --OBJECT_VERSION_NUMBER
6289           NULL,                 --ROUNDING_LEVEL_CODE
6290           NULL,                 --ACCOUNT_TYPE_CODE
6291           NULL                  --MERGED_TO_REGISTRATION_ID
6292     FROM zx_registrations_int
6293     WHERE record_status = G_RS_VALID
6294     AND request_id = G_REQUEST_ID
6295     AND error_number = 0);
6296 
6297     G_DEBUG_STATEMENT:= 'Inserted '||SQL%ROWCOUNT||' records into zx_registrations ';
6298     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
6299       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PopulateProductionTables',G_DEBUG_STATEMENT);
6300     END IF;
6301     log_now (p_log_level => FND_FILE.LOG
6302             ,p_message   => G_DEBUG_STATEMENT
6303             );
6304 
6305     INSERT INTO zx_exemptions(
6306             TAX_EXEMPTION_ID,
6307             EXEMPTION_TYPE_CODE,
6308             EXEMPTION_STATUS_CODE,
6309             TAX_REGIME_CODE,
6310             TAX_STATUS_CODE,
6311             TAX,
6312             TAX_RATE_CODE,
6313             EXEMPT_CERTIFICATE_NUMBER,
6314             EXEMPT_REASON_CODE,
6315             ISSUING_TAX_AUTHORITY_ID,
6316             EFFECTIVE_FROM,
6317             EFFECTIVE_TO,
6318             CONTENT_OWNER_ID,
6319             PRODUCT_ID,
6320             INVENTORY_ORG_ID,
6321             RATE_MODIFIER,
6322             TAX_JURISDICTION_ID,
6323             DET_FACTOR_TEMPL_CODE,
6324             RECORD_TYPE_CODE,
6325             CREATED_BY,
6326             CREATION_DATE,
6327             LAST_UPDATED_BY,
6328             LAST_UPDATE_DATE,
6329             LAST_UPDATE_LOGIN,
6330             REQUEST_ID,
6331             PROGRAM_APPLICATION_ID,
6332             PROGRAM_ID,
6333             PROGRAM_LOGIN_ID,
6334             ATTRIBUTE1,
6335             ATTRIBUTE2,
6336             ATTRIBUTE3,
6337             ATTRIBUTE4,
6338             ATTRIBUTE5,
6339             ATTRIBUTE6,
6340             ATTRIBUTE7,
6341             ATTRIBUTE8,
6342             ATTRIBUTE9,
6343             ATTRIBUTE10,
6344             ATTRIBUTE11,
6345             ATTRIBUTE12,
6346             ATTRIBUTE13,
6347             ATTRIBUTE14,
6348             ATTRIBUTE15,
6349             ATTRIBUTE_CATEGORY,
6350             APPLY_TO_LOWER_LEVELS_FLAG,
6351             OBJECT_VERSION_NUMBER,
6352             PARTY_TAX_PROFILE_ID,
6353             CUST_ACCOUNT_ID,
6354             SITE_USE_ID,
6355             DUPLICATE_EXEMPTION
6356     )
6357     (
6358     SELECT  zx_exemptions_s.nextval,    --TAX_EXEMPTION_ID,
6359             EXEMPTION_TYPE_CODE,
6360             EXEMPTION_STATUS_CODE,
6361             TAX_REGIME_CODE,
6362             TAX_STATUS_CODE,
6363             TAX_CODE,
6364             TAX_RATE_CODE,
6365             EXEMPT_CERTIFICATE_NUMBER,
6366             EXEMPT_REASON_CODE,
6367             ISSUING_TAX_AUTHORITY_ID,
6368             EFFECTIVE_FROM,
6369             EFFECTIVE_TO,
6370             CONTENT_OWNER_ID,
6371             INVENTORY_ITEM_ID,    --PRODUCT_ID,
6372             INVENTORY_ORG_ID,
6373             RATE_MODIFIER,
6374             TAX_JURISDICTION_ID,
6375             NULL,                 --DET_FACTOR_TEMPL_CODE,
6376             G_RECORD_TYPE_CODE,   --RECORD_TYPE_CODE,
6377             G_USER_ID,            --CREATED_BY
6378             G_SYSDATE,            --CREATION_DATE,
6379             G_USER_ID,            --LAST_UPDATED_BY
6380             G_SYSDATE,            --LAST_UPDATE_DATE
6381             G_LOGIN_ID,           --LAST_UPDATE_LOGIN
6382             G_REQUEST_ID,         --REQUEST_ID,
6383             G_PROG_APPID,         --PROGRAM_APPLICATION_ID,
6384             G_PROG_ID,            --PROGRAM_ID,
6385             NULL,                 --PROGRAM_LOGIN_ID,
6386             ATTRIBUTE1,
6387             ATTRIBUTE2,
6388             ATTRIBUTE3,
6389             ATTRIBUTE4,
6390             ATTRIBUTE5,
6391             ATTRIBUTE6,
6392             ATTRIBUTE7,
6393             ATTRIBUTE8,
6394             ATTRIBUTE9,
6395             ATTRIBUTE10,
6396             ATTRIBUTE11,
6397             ATTRIBUTE12,
6398             ATTRIBUTE13,
6399             ATTRIBUTE14,
6400             ATTRIBUTE15,
6401             ATTRIBUTE_CATEGORY,
6402             APPLY_TO_LOWER_LEVELS_FLAG,
6403             1,                     --OBJECT_VERSION_NUMBER,
6404             PARTY_TAX_PROFILE_ID,
6405             NULL,                 --CUST_ACCOUNT_ID,
6406             NULL,                 --SITE_USE_ID,
6407             0                     --DUPLICATE_EXEMPTION
6408     FROM zx_exemptions_int
6409     WHERE record_status = G_RS_VALID
6410     AND request_id = G_REQUEST_ID
6411     AND error_number = 0);
6412 
6413     G_DEBUG_STATEMENT:= 'Inserted '||SQL%ROWCOUNT||' records into zx_exemptions ';
6414     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
6415       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PopulateProductionTables',G_DEBUG_STATEMENT);
6416     END IF;
6417     log_now (p_log_level => FND_FILE.LOG
6418             ,p_message   => G_DEBUG_STATEMENT
6419             );
6420 
6421     INSERT INTO zx_report_codes_assoc(
6422             REPORTING_CODE_ASSOC_ID,
6423             ENTITY_CODE,
6424             ENTITY_ID,
6425             EXCEPTION_CODE,
6426             EFFECTIVE_FROM,
6427             EFFECTIVE_TO,
6428             CREATED_BY,
6429             CREATION_DATE,
6430             LAST_UPDATED_BY,
6431             LAST_UPDATE_DATE,
6432             LAST_UPDATE_LOGIN,
6433             REPORTING_CODE_CHAR_VALUE,
6434             REPORTING_CODE_DATE_VALUE,
6435             REPORTING_CODE_NUM_VALUE,
6436             REPORTING_TYPE_ID,
6437             REPORTING_CODE_ID,
6438             OBJECT_VERSION_NUMBER
6439     )
6440     (
6441     SELECT  ZX_REPORT_CODES_ASSOC_S.nextval,  --REPORTING_CODE_ASSOC_ID,
6442             ENTITY_CODE,
6443             ENTITY_ID,
6444             NULL,           --EXCEPTION_CODE,
6445             EFFECTIVE_FROM,
6446             EFFECTIVE_TO,
6447             G_USER_ID,   --CREATED_BY
6448             G_SYSDATE,   --CREATION_DATE,
6449             G_USER_ID,   --LAST_UPDATED_BY
6450             G_SYSDATE,   --LAST_UPDATE_DATE
6451             G_LOGIN_ID,  --LAST_UPDATE_LOGIN
6452             REPORTING_CODE_CHAR_VALUE,
6453             REPORTING_CODE_DATE_VALUE,
6454             REPORTING_CODE_NUM_VALUE,
6455             REPORTING_TYPE_ID,
6456             REPORTING_CODE_ID,
6457             1             --OBJECT_VERSION_NUMBER
6458     FROM zx_report_codes_assoc_int
6459     WHERE record_status = G_RS_VALID
6460     AND request_id = G_REQUEST_ID
6461     AND error_number = 0
6462     );
6463 
6464     G_DEBUG_STATEMENT:= 'Inserted '||SQL%ROWCOUNT||' records into zx_report_codes_assoc ';
6465     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
6466       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'PopulateProductionTables',G_DEBUG_STATEMENT);
6467     END IF;
6468     log_now (p_log_level => FND_FILE.LOG
6469             ,p_message   => G_DEBUG_STATEMENT
6470             );
6471 
6472     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
6473       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'PopulateProductionTables','PopulateProductionTables(-)');
6474     END IF;
6475 
6476   EXCEPTION
6477     WHEN OTHERS THEN
6478       G_RETURN_STATUS := G_CONC_RET_STS_UNEXP_ERROR;
6479       G_MSG_DATA      := SQLERRM;
6480       log_now (p_log_level => FND_FILE.LOG
6481               ,p_message   => 'PopulateProductionTables'||' : '||SQLERRM
6482               );
6483       RAISE;
6484   END PopulateProductionTables;
6485 
6486 
6487   --
6488   -- Log Error Messages
6489   --
6490   ------------------------------------------------------------------------------
6491   PROCEDURE LogErrorToTable  IS
6492     CURSOR c_ptp_errors IS
6493       SELECT *
6494       FROM zx_party_tax_profile_int
6495       WHERE request_id = G_REQUEST_ID
6496       AND record_status = G_RS_ERROR;
6497 
6498     CURSOR c_reg_errors IS
6499       SELECT ptp_int.party_type_code, ptp_int.party_id, reg_int.*
6500       FROM zx_registrations_int reg_int, zx_party_tax_profile_int ptp_int
6501       WHERE reg_int.request_id = G_REQUEST_ID
6502       AND reg_int.record_status = G_RS_ERROR
6503       AND ptp_int.intf_ptp_reference = reg_int.intf_ptp_reference
6504       AND ptp_int.request_id = reg_int.request_id;
6505 
6506     CURSOR c_exe_errors IS
6507       SELECT ptp_int.party_type_code, ptp_int.party_id, exe_int.*
6508       FROM zx_exemptions_int exe_int, zx_party_tax_profile_int ptp_int
6509       WHERE exe_int.request_id = G_REQUEST_ID
6510       AND exe_int.record_status = G_RS_ERROR
6511       AND ptp_int.intf_ptp_reference = exe_int.intf_ptp_reference
6512       AND ptp_int.request_id = exe_int.request_id;
6513 
6514     CURSOR c_rca_errors IS
6515       SELECT ptp_int.party_type_code, ptp_int.party_id, rca_int.*
6516       FROM zx_report_codes_assoc_int rca_int, zx_party_tax_profile_int ptp_int
6517       WHERE rca_int.request_id = G_REQUEST_ID
6518       AND rca_int.record_status = G_RS_ERROR
6519       AND ptp_int.intf_ptp_reference = rca_int.intf_ptp_reference
6520       AND ptp_int.request_id = rca_int.request_id;
6521 
6522     l_msg_mand_param   VARCHAR2(4000);
6523 
6524     TYPE ERR_REC_TYPE IS RECORD
6525       (
6526        intf_ptp_reference    zx_errors_int.intf_ptp_reference%TYPE
6527       ,party_type_code       zx_errors_int.party_type_code%TYPE
6528       ,message_text          zx_errors_int.message_text%TYPE
6529       ,prog_int_record_ref   zx_errors_int.prog_int_record_ref%TYPE
6530       ,party_id              zx_errors_int.party_id%TYPE
6531       );
6532 
6533     TYPE error_table_type IS TABLE OF ERR_REC_TYPE INDEX BY BINARY_INTEGER;
6534     l_error_table  error_table_type;
6535     l_rec_index    NUMBER(22);
6536     l_temp_char    zx_party_tax_profile_int.intf_ptp_reference%TYPE;
6537     l_start_number NUMBER;
6538 
6539   BEGIN
6540 
6541     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
6542       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'LogErrorToTable','LogErrorToTable(+)');
6543     END IF;
6544 
6545     UPDATE zx_party_tax_profile_int
6546     SET intf_ptp_reference = G_REQUEST_ID||'**'||ROWNUM
6547     WHERE  request_id = G_REQUEST_ID
6548       AND record_status = G_RS_ERROR
6549       AND intf_ptp_reference IS NULL;
6550 
6551     l_rec_index := 0;
6552     FOR cr in c_ptp_errors LOOP
6553       IF BITAND(cr.error_number,G_ES_PTP_MAND_PARAM_MISSING) <> 0 THEN
6554         fnd_message.set_name('ZX','ZX_INTF_MAND_VALUE_MISSING');
6555         l_rec_index := l_rec_index +1;
6556         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6557         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6558         l_error_table(l_rec_index).party_id := cr.party_id;
6559         l_error_table(l_rec_index).message_text := fnd_message.get();
6560       END IF;
6561       IF BITAND(cr.error_number,G_ES_PTP_DUP_INTF_RECORD) <> 0 THEN
6562         fnd_message.set_name('ZX','ZX_BULK_DUP_PTP_REF');
6563         l_rec_index := l_rec_index +1;
6564         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6565         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6566         l_error_table(l_rec_index).party_id := cr.party_id;
6567         l_error_table(l_rec_index).message_text := fnd_message.get();
6568       END IF;
6569       IF BITAND(cr.error_number,G_ES_PTP_TRANS_TYPE_INVALID) <> 0 THEN
6570         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6571         fnd_message.set_token('VALUE_NAME',cr.dml_type );
6572         fnd_message.set_token('COLUMN_NAME','DML_TYPE' );
6573         l_rec_index := l_rec_index +1;
6574         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6575         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6576         l_error_table(l_rec_index).party_id := cr.party_id;
6577         l_error_table(l_rec_index).message_text := fnd_message.get();
6578       END IF;
6579       IF BITAND(cr.error_number,G_ES_PTP_PARTY_TYPE_INVALID) <> 0 THEN
6580         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6581         fnd_message.set_token('VALUE_NAME',cr.party_type_code );
6582         fnd_message.set_token('COLUMN_NAME','PARTY_TYPE_CODE' );
6583         l_rec_index := l_rec_index +1;
6584         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6585         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6586         l_error_table(l_rec_index).party_id := cr.party_id;
6587         l_error_table(l_rec_index).message_text := fnd_message.get();
6588       END IF;
6589       IF BITAND(cr.error_number,G_ES_PTP_PARTY_INVALID) <> 0 THEN
6590         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6591         fnd_message.set_token('VALUE_NAME',cr.party_type_code );
6592         fnd_message.set_token('COLUMN_NAME','PARTY_TYPE_CODE' );
6593         l_rec_index := l_rec_index +1;
6594         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6595         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6596         l_error_table(l_rec_index).party_id := cr.party_id;
6597         l_error_table(l_rec_index).message_text := fnd_message.get();
6598       END IF;
6599       IF BITAND(cr.error_number,G_ES_PTP_PARTY_NAME_DUP) <> 0 THEN
6600         fnd_message.set_name('ZX','ZX_PTP_PARTY_NAME_DUP');
6601         l_rec_index := l_rec_index +1;
6602         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6603         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6604         l_error_table(l_rec_index).party_id := cr.party_id;
6605         l_error_table(l_rec_index).message_text := fnd_message.get();
6606       END IF;
6607       IF BITAND(cr.error_number,G_ES_PTP_COUNTRY_INVALID) <> 0 THEN
6608         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6609         IF cr.country_code IS NOT NULL THEN
6610           fnd_message.set_token('VALUE_NAME',cr.country_code );
6611           fnd_message.set_token('COLUMN_NAME','COUNTRY_CODE' );
6612         ELSE
6613           fnd_message.set_token('VALUE_NAME',cr.country_name );
6614           fnd_message.set_token('COLUMN_NAME','COUNTRY_NAME' );
6615         END IF;
6616         l_rec_index := l_rec_index +1;
6617         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6618         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6619         l_error_table(l_rec_index).party_id := cr.party_id;
6620         l_error_table(l_rec_index).message_text := fnd_message.get();
6621       END IF;
6622       IF BITAND(cr.error_number,G_ES_PTP_REG_NUM_INVALID) <> 0 THEN
6623         fnd_message.set_name('ZX','ZX_REG_NUM_INVALID');
6624         l_rec_index := l_rec_index +1;
6625         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6626         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6627         l_error_table(l_rec_index).party_id        := cr.party_id;
6628         l_error_table(l_rec_index).message_text    := fnd_message.get();
6629       END IF;
6630       IF BITAND(cr.error_number,G_ES_PTP_REG_TYPE_INVALID) <> 0 THEN
6631         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6632         IF cr.registration_type_code IS NOT NULL THEN
6633           fnd_message.set_token('VALUE_NAME',cr.registration_type_code );
6634           fnd_message.set_token('COLUMN_NAME','REGISTRATION_TYPE_CODE' );
6635         ELSE
6636           fnd_message.set_token('VALUE_NAME',cr.registration_type_name );
6637           fnd_message.set_token('COLUMN_NAME','REGISTRATION_TYPE_NAME' );
6638         END IF;
6639         l_rec_index := l_rec_index +1;
6640         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6641         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6642         l_error_table(l_rec_index).party_id := cr.party_id;
6643         l_error_table(l_rec_index).message_text := fnd_message.get();
6644       END IF;
6645 
6646       IF BITAND(cr.error_number,G_ES_PTP_ROUND_LEVEL_INVALID) <> 0 THEN
6647         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6648         IF cr.rounding_level_code IS NOT NULL THEN
6649           fnd_message.set_token('VALUE_NAME',cr.rounding_level_code );
6650           fnd_message.set_token('COLUMN_NAME','ROUNDING_LEVEL_CODE' );
6651         ELSE
6652           fnd_message.set_token('VALUE_NAME',cr.rounding_level_name );
6653           fnd_message.set_token('COLUMN_NAME','ROUNDING_LEVEL_NAME' );
6654         END IF;
6655         l_rec_index := l_rec_index +1;
6656         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6657         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6658         l_error_table(l_rec_index).party_id := cr.party_id;
6659         l_error_table(l_rec_index).message_text := fnd_message.get();
6660       END IF;
6661 
6662       IF BITAND(cr.error_number,G_ES_PTP_ROUND_RULE_INVALID) <> 0 THEN
6663         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6664         IF cr.rounding_rule_code IS NOT NULL THEN
6665           fnd_message.set_token('VALUE_NAME',cr.rounding_rule_code );
6666           fnd_message.set_token('COLUMN_NAME','ROUNDING_RULE_CODE' );
6667         ELSE
6668           fnd_message.set_token('VALUE_NAME',cr.rounding_rule_name );
6669           fnd_message.set_token('COLUMN_NAME','ROUNDING_RULE_NAME' );
6670         END IF;
6671         l_rec_index := l_rec_index +1;
6672         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6673         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6674         l_error_table(l_rec_index).party_id := cr.party_id;
6675         l_error_table(l_rec_index).message_text := fnd_message.get();
6676       END IF;
6677       IF BITAND(cr.error_number,G_ES_PTP_TAX_CLASS_INVALID) <> 0 THEN
6678         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6679         IF cr.tax_classification_code IS NOT NULL THEN
6680           fnd_message.set_token('VALUE_NAME',cr.tax_classification_code );
6681           fnd_message.set_token('COLUMN_NAME','TAX_CLASSIFICATION_CODE' );
6682         ELSE
6683           fnd_message.set_token('VALUE_NAME',cr.tax_classification_name );
6684           fnd_message.set_token('COLUMN_NAME','TAX_CLASSIFICATION_NAME' );
6685         END IF;
6686         l_rec_index := l_rec_index +1;
6687         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6688         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6689         l_error_table(l_rec_index).party_id := cr.party_id;
6690         l_error_table(l_rec_index).message_text := fnd_message.get();
6691       END IF;
6692       IF BITAND(cr.error_number,G_ES_PTP_INC_FLG_INVALID) <> 0 THEN
6693         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6694         fnd_message.set_token('VALUE_NAME',cr.inclusive_tax_flag );
6695         fnd_message.set_token('COLUMN_NAME','INCLUSIVE_TAX_FLAG' );
6696         l_rec_index := l_rec_index +1;
6697         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6698         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6699         l_error_table(l_rec_index).party_id := cr.party_id;
6700         l_error_table(l_rec_index).message_text := fnd_message.get();
6701       END IF;
6702       IF BITAND(cr.error_number,G_ES_PTP_APP_FLG_INVALID) <> 0 THEN
6703         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6704         fnd_message.set_token('VALUE_NAME',cr.process_for_applicability_flag );
6705         fnd_message.set_token('COLUMN_NAME','PROCESS_FOR_APPLICABILITY_FLAG' );
6706         l_rec_index := l_rec_index +1;
6707         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6708         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6709         l_error_table(l_rec_index).party_id := cr.party_id;
6710         l_error_table(l_rec_index).message_text := fnd_message.get();
6711       END IF;
6712       IF BITAND(cr.error_number,G_ES_PTP_OFF_FLG_RECORD) <> 0 THEN
6713         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6714         fnd_message.set_token('VALUE_NAME',cr.allow_offset_tax_flag );
6715         fnd_message.set_token('COLUMN_NAME','ALLOW_OFFSET_TAX_FLAG' );
6716         l_rec_index := l_rec_index +1;
6717         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6718         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6719         l_error_table(l_rec_index).party_id := cr.party_id;
6720         l_error_table(l_rec_index).message_text := fnd_message.get();
6721       END IF;
6722       IF BITAND(cr.error_number,G_ES_PTP_REG_NUM_DUP) <> 0 THEN
6723         fnd_message.set_name('ZX','ZX_BULK_DUP_REG_NUM');
6724         fnd_message.set_token('REGISTRATION_NUMBER',cr.registration_number );
6725         l_rec_index := l_rec_index +1;
6726         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6727         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6728         l_error_table(l_rec_index).party_id := cr.party_id;
6729         l_error_table(l_rec_index).message_text := fnd_message.get();
6730       END IF;
6731 
6732       FOR loop_index IN NVL(l_error_table.FIRST,0)..NVL(l_error_table.LAST,-1) LOOP
6733         INSERT INTO zx_errors_int
6734           (request_id
6735           ,error_table_name
6736           ,intf_ptp_reference
6737           ,party_type_code
6738           ,message_text
6739           ,prog_int_record_ref
6740           ,party_id
6741           )
6742         VALUES
6743           (G_REQUEST_ID
6744           ,G_INTF_PTP_TABLE_NAME
6745           ,l_error_table(loop_index).intf_ptp_reference
6746           ,l_error_table(loop_index).party_type_code
6747           ,l_error_table(loop_index).message_text
6748           ,NULL
6749           ,l_error_table(loop_index).party_id
6750           );
6751       END LOOP;
6752       l_error_table.DELETE();
6753       l_rec_index := 0;
6754     END LOOP;
6755     l_error_table.DELETE();
6756 
6757     --
6758     -- end of inserting ptp error records into zx_errors_int
6759     --
6760     --
6761     -- start of inserting errors for registration validations
6762     --
6763     l_rec_index := 0;
6764     FOR cr in c_reg_errors LOOP
6765       IF BITAND(cr.error_number,G_ES_REG_MAND_PARAM_MISSING) <> 0 THEN
6766         fnd_message.set_name('ZX','ZX_INTF_MAND_VALUE_MISSING');
6767         l_rec_index := l_rec_index +1;
6768         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6769         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6770         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6771         l_error_table(l_rec_index).party_id := cr.party_id;
6772         l_error_table(l_rec_index).message_text := fnd_message.get();
6773       END IF;
6774       IF BITAND(cr.error_number,G_ES_REG_DUP_INTF_RECORD) <> 0 THEN
6775         fnd_message.set_name('ZX','ZX_BULK_DUP_REG_REF');
6776         l_rec_index := l_rec_index +1;
6777         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6778         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6779         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6780         l_error_table(l_rec_index).party_id := cr.party_id;
6781         l_error_table(l_rec_index).message_text := fnd_message.get();
6782       END IF;
6783       IF BITAND(cr.error_number,G_ES_REG_DATE_OVERLAP) <> 0 THEN
6784         fnd_message.set_name('ZX','ZX_PERIOD_OVERLAP');
6785         l_rec_index := l_rec_index +1;
6786         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6787         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6788         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6789         l_error_table(l_rec_index).party_id := cr.party_id;
6790         l_error_table(l_rec_index).message_text := fnd_message.get();
6791       END IF;
6792       IF BITAND(cr.error_number,G_ES_REG_TRANS_TYPE_INVALID) <> 0 THEN
6793         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6794         fnd_message.set_token('VALUE_NAME',cr.dml_type );
6795         fnd_message.set_token('COLUMN_NAME','DML_TYPE' );
6796         l_rec_index := l_rec_index +1;
6797         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6798         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6799         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6800         l_error_table(l_rec_index).party_id := cr.party_id;
6801         l_error_table(l_rec_index).message_text := fnd_message.get();
6802       END IF;
6803       IF BITAND(cr.error_number,G_ES_REG_DATE_RANGE_INVALID) <> 0 THEN
6804         fnd_message.set_name('ZX','ZX_DATE_RANGE_INVALID');
6805         l_rec_index := l_rec_index +1;
6806         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6807         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6808         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6809         l_error_table(l_rec_index).party_id := cr.party_id;
6810         l_error_table(l_rec_index).message_text := fnd_message.get();
6811       END IF;
6812       IF BITAND(cr.error_number,G_ES_REG_REG_TYPE_INVALID) <> 0 THEN
6813         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6814         IF cr.registration_type_code IS NOT NULL THEN
6815           fnd_message.set_token('VALUE_NAME',cr.registration_type_code );
6816           fnd_message.set_token('COLUMN_NAME','REGISTRATION_TYPE_CODE' );
6817         ELSE
6818           fnd_message.set_token('VALUE_NAME',cr.registration_type_name );
6819           fnd_message.set_token('COLUMN_NAME','REGISTRATION_TYPE_NAME' );
6820         END IF;
6821         l_rec_index := l_rec_index +1;
6822         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6823         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6824         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6825         l_error_table(l_rec_index).party_id := cr.party_id;
6826         l_error_table(l_rec_index).message_text := fnd_message.get();
6827       END IF;
6828       IF BITAND(cr.error_number,G_ES_REG_REG_STAT_INVALID) <> 0 THEN
6829         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6830         IF cr.registration_status_code IS NOT NULL THEN
6831           fnd_message.set_token('VALUE_NAME',cr.registration_status_code );
6832           fnd_message.set_token('COLUMN_NAME','REGISTRATION_STATUS_CODE' );
6833         ELSE
6834           fnd_message.set_token('VALUE_NAME',cr.registration_status_name );
6835           fnd_message.set_token('COLUMN_NAME','REGISTRATION_STATUS_NAME' );
6836         END IF;
6837         l_rec_index := l_rec_index +1;
6838         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6839         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6840         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6841         l_error_table(l_rec_index).party_id := cr.party_id;
6842         l_error_table(l_rec_index).message_text := fnd_message.get();
6843       END IF;
6844       IF BITAND(cr.error_number,G_ES_REG_REG_SRC_INVALID) <> 0 THEN
6845         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6846         IF cr.registration_source_code IS NOT NULL THEN
6847           fnd_message.set_token('VALUE_NAME',cr.registration_source_code );
6848           fnd_message.set_token('COLUMN_NAME','REGISTRATION_SOURCE_CODE' );
6849         ELSE
6850           fnd_message.set_token('VALUE_NAME',cr.registration_source_name );
6851           fnd_message.set_token('COLUMN_NAME','REGISTRATION_SOURCE_NAME' );
6852         END IF;
6853         l_rec_index := l_rec_index +1;
6854         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6855         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6856         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6857         l_error_table(l_rec_index).party_id := cr.party_id;
6858         l_error_table(l_rec_index).message_text := fnd_message.get();
6859       END IF;
6860       IF BITAND(cr.error_number,G_ES_REG_REG_RSN_INVALID) <> 0 THEN
6861         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6862         IF cr.registration_reason_code IS NOT NULL THEN
6863           fnd_message.set_token('VALUE_NAME',cr.registration_reason_code );
6864           fnd_message.set_token('COLUMN_NAME','REGISTRATION_REASON_CODE' );
6865         ELSE
6866           fnd_message.set_token('VALUE_NAME',cr.registration_reason_name );
6867           fnd_message.set_token('COLUMN_NAME','REGISTRATION_REASON_NAME' );
6868         END IF;
6869         l_rec_index := l_rec_index +1;
6870         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6871         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6872         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6873         l_error_table(l_rec_index).party_id := cr.party_id;
6874         l_error_table(l_rec_index).message_text := fnd_message.get();
6875       END IF;
6876       IF BITAND(cr.error_number,G_ES_REG_TAX_AUT_INVALID) <> 0 THEN
6877         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6878         IF cr.tax_authority_id IS NOT NULL THEN
6879           fnd_message.set_token('VALUE_NAME',cr.tax_authority_id );
6880           fnd_message.set_token('COLUMN_NAME','TAX_AUTHORITY_ID' );
6881         ELSE
6882           fnd_message.set_token('VALUE_NAME',cr.tax_authority_name );
6883           fnd_message.set_token('COLUMN_NAME','TAX_AUTHORITY_NAME' );
6884         END IF;
6885         l_rec_index := l_rec_index +1;
6886         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6887         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6888         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6889         l_error_table(l_rec_index).party_id := cr.party_id;
6890         l_error_table(l_rec_index).message_text := fnd_message.get();
6891       END IF;
6892       IF BITAND(cr.error_number,G_ES_REG_ROUND_RULE_INVALID) <> 0 THEN
6893         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6894         IF cr.registration_type_code IS NOT NULL THEN
6895           fnd_message.set_token('VALUE_NAME',cr.rounding_rule_code );
6896           fnd_message.set_token('COLUMN_NAME','ROUNDING_RULE_CODE' );
6897         ELSE
6898           fnd_message.set_token('VALUE_NAME',cr.rounding_rule_name );
6899           fnd_message.set_token('COLUMN_NAME','ROUNDING_RULE_NAME' );
6900         END IF;
6901         l_rec_index := l_rec_index +1;
6902         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6903         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6904         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6905         l_error_table(l_rec_index).party_id := cr.party_id;
6906         l_error_table(l_rec_index).message_text := fnd_message.get();
6907       END IF;
6908       IF BITAND(cr.error_number,G_ES_REG_INC_FLG_INVALID) <> 0 THEN
6909         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6910         fnd_message.set_token('VALUE_NAME',cr.inclusive_tax_flag );
6911         fnd_message.set_token('COLUMN_NAME','INCLUSIVE_TAX_FLAG' );
6912         l_rec_index := l_rec_index +1;
6913         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6914         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6915         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6916         l_error_table(l_rec_index).party_id := cr.party_id;
6917         l_error_table(l_rec_index).message_text := fnd_message.get();
6918       END IF;
6919       IF BITAND(cr.error_number,G_ES_REG_LGL_LOC_INVALID) <> 0 THEN
6920         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6921         IF cr.legal_location_id IS NOT NULL THEN
6922           fnd_message.set_token('VALUE_NAME',cr.legal_location_id );
6923           fnd_message.set_token('COLUMN_NAME','LEGAL_LOCATION_ID' );
6924         ELSE
6925           fnd_message.set_token('VALUE_NAME',cr.legal_location_code||':'
6926                   ||cr.address_line_1||':'||cr.town_or_city||':'||cr.region_1 );
6927           fnd_message.set_token('COLUMN_NAME','LEGAL_LOCATION_CODE'||':'
6928                   ||'ADDRESS_LINE_1'||':'||'TOWN_OR_CITY'||':'||'REGION_1');
6929         END IF;
6930         l_rec_index := l_rec_index +1;
6931         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6932         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6933         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6934         l_error_table(l_rec_index).party_id := cr.party_id;
6935         l_error_table(l_rec_index).message_text := fnd_message.get();
6936       END IF;
6937       IF BITAND(cr.error_number,G_ES_REG_DEFREG_FLG_INVALID) <> 0 THEN
6938         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6939         fnd_message.set_token('VALUE_NAME',cr.default_registration_flag );
6940         fnd_message.set_token('COLUMN_NAME','DEFAULT_REGISTRATION_FLAG' );
6941         l_rec_index := l_rec_index +1;
6942         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6943         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6944         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6945         l_error_table(l_rec_index).party_id := cr.party_id;
6946         l_error_table(l_rec_index).message_text := fnd_message.get();
6947       END IF;
6948       IF BITAND(cr.error_number,G_ES_REG_TAX_REG_INVALID) <> 0 THEN
6949         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
6950         IF cr.tax_regime_code IS NOT NULL THEN
6951           fnd_message.set_token('VALUE_NAME',cr.tax_regime_code );
6952           fnd_message.set_token('COLUMN_NAME','TAX_REGIME_CODE' );
6953         ELSE
6954           fnd_message.set_token('VALUE_NAME',cr.tax_regime_name );
6955           fnd_message.set_token('COLUMN_NAME','TAX_REGIME_NAME' );
6956         END IF;
6957         l_rec_index := l_rec_index +1;
6958         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6959         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6960         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6961         l_error_table(l_rec_index).party_id := cr.party_id;
6962         l_error_table(l_rec_index).message_text := fnd_message.get();
6963       END IF;
6964       IF BITAND(cr.error_number,G_ES_REG_TAX_PARAM_INVALID) <> 0 THEN
6965         fnd_message.set_name('ZX','ZX_BULK_TAX_INVALID');
6966         IF cr.tax_code IS NOT NULL THEN
6967           fnd_message.set_token('TAX',cr.tax_code );
6968         ELSE
6969           fnd_message.set_token('TAX',cr.tax_name );
6970         END IF;
6971         IF cr.tax_regime_name IS NULL THEN
6972           fnd_message.set_token('TAX_REGIME',cr.tax_regime_code );
6973         ELSE
6974           fnd_message.set_token('TAX_REGIME',cr.tax_regime_name );
6975         END IF;
6976         l_rec_index := l_rec_index +1;
6977         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
6978         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
6979         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
6980         l_error_table(l_rec_index).party_id := cr.party_id;
6981         l_error_table(l_rec_index).message_text := fnd_message.get();
6982       END IF;
6983       IF BITAND(cr.error_number,G_ES_REG_TAX_JUR_INVALID) <> 0 THEN
6984         fnd_message.set_name('ZX','ZX_BULK_TAX_JUR_INVALID');
6985         IF cr.tax_jurisdiction_code IS NOT NULL THEN
6986           fnd_message.set_token('TAX_JURISDICTION',cr.tax_jurisdiction_code );
6987         ELSE
6988           fnd_message.set_token('TAX_JURISDICTION',cr.tax_jurisdiction_name );
6989         END IF;
6990         IF cr.tax_name IS NULL THEN
6991           fnd_message.set_token('TAX',cr.tax_code );
6992         ELSE
6993           fnd_message.set_token('TAX',cr.tax_name );
6994         END IF;
6995         IF cr.tax_regime_name IS NULL THEN
6996           fnd_message.set_token('TAX_REGIME',cr.tax_regime_code );
6997         ELSE
6998           fnd_message.set_token('TAX_REGIME',cr.tax_regime_name );
6999         END IF;
7000         l_rec_index := l_rec_index +1;
7001         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7002         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7003         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7004         l_error_table(l_rec_index).party_id := cr.party_id;
7005         l_error_table(l_rec_index).message_text := fnd_message.get();
7006       END IF;
7007       IF BITAND(cr.error_number,G_ES_REG_REG_NUM_DUP) <> 0 THEN
7008         fnd_message.set_name('ZX','ZX_BULK_DUP_REG_NUM');
7009         fnd_message.set_token('REGISTRATION_NUMBER',cr.registration_number );
7010         l_rec_index := l_rec_index +1;
7011         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7012         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7013         l_error_table(l_rec_index).party_id := cr.party_id;
7014         l_error_table(l_rec_index).message_text := fnd_message.get();
7015       END IF;
7016       IF BITAND(cr.error_number,G_ES_REG_REG_NUM_INVALID) <> 0 THEN
7017         fnd_message.set_name('ZX','ZX_REG_NUM_INVALID');
7018         l_rec_index := l_rec_index +1;
7019         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7020         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7021         l_error_table(l_rec_index).party_id := cr.party_id;
7022         l_error_table(l_rec_index).message_text := fnd_message.get();
7023       END IF;
7024       IF BITAND(cr.error_number,G_ES_REG_TAX_AUT_REQ) <> 0 THEN
7025         fnd_message.set_name('ZX','ZX_REG_TAX_AUTHORITY_REQUIRED');
7026         l_rec_index := l_rec_index +1;
7027         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7028         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7029         l_error_table(l_rec_index).party_id := cr.party_id;
7030         l_error_table(l_rec_index).message_text := fnd_message.get();
7031       END IF;
7032       IF BITAND(cr.error_number,G_ES_REG_MULT_DEF_FLAG) <> 0 THEN
7033         fnd_message.set_name('ZX','ZX_REG_MULT_DEF_REG');
7034         l_rec_index := l_rec_index +1;
7035         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7036         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7037         l_error_table(l_rec_index).party_id := cr.party_id;
7038         l_error_table(l_rec_index).message_text := fnd_message.get();
7039       END IF;
7040 
7041       FOR loop_index IN NVL(l_error_table.FIRST,0)..NVL(l_error_table.LAST,-1) LOOP
7042         INSERT INTO zx_errors_int
7043           (request_id
7044           ,error_table_name
7045           ,intf_ptp_reference
7046           ,party_type_code
7047           ,message_text
7048           ,prog_int_record_ref
7049           ,party_id
7050           )
7051         VALUES
7052           (G_REQUEST_ID
7053           ,G_INTF_REG_TABLE_NAME
7054           ,l_error_table(loop_index).intf_ptp_reference
7055           ,l_error_table(loop_index).party_type_code
7056           ,l_error_table(loop_index).message_text
7057           ,l_error_table(loop_index).prog_int_record_ref
7058           ,l_error_table(loop_index).party_id
7059           );
7060       END LOOP;
7061       l_error_table.DELETE();
7062       l_rec_index := 0;
7063 
7064     END LOOP;
7065     l_error_table.DELETE();
7066     --
7067     -- end of inserting registration error records into zx_errors_int
7068     --
7069 
7070     --
7071     -- start of inserting errors for exemption validations
7072     --
7073     l_rec_index := 0;
7074     FOR cr in c_exe_errors LOOP
7075       IF BITAND(cr.error_number,G_ES_EXE_MAND_PARAM_MISSING) <> 0 THEN
7076         fnd_message.set_name('ZX','ZX_INTF_MAND_VALUE_MISSING');
7077         l_rec_index := l_rec_index +1;
7078         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7079         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7080         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7081         l_error_table(l_rec_index).party_id := cr.party_id;
7082         l_error_table(l_rec_index).message_text := fnd_message.get();
7083       END IF;
7084       IF BITAND(cr.error_number,G_ES_EXE_TRANS_TYPE_INVALID) <> 0 THEN
7085         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7086         fnd_message.set_token('VALUE_NAME',cr.dml_type );
7087         fnd_message.set_token('COLUMN_NAME','DML_TYPE' );
7088         l_rec_index := l_rec_index +1;
7089         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7090         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7091         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7092         l_error_table(l_rec_index).party_id := cr.party_id;
7093         l_error_table(l_rec_index).message_text := fnd_message.get();
7094       END IF;
7095       IF BITAND(cr.error_number,G_ES_EXE_DATE_RANGE_INVALID) <> 0 THEN
7096         fnd_message.set_name('ZX','ZX_DATE_RANGE_INVALID');
7097         l_rec_index := l_rec_index +1;
7098         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7099         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7100         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7101         l_error_table(l_rec_index).party_id := cr.party_id;
7102         l_error_table(l_rec_index).message_text := fnd_message.get();
7103       END IF;
7104       IF BITAND(cr.error_number,G_ES_EXE_DFF_INVALID) <> 0 THEN
7105         l_rec_index := l_rec_index +1;
7106         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7107         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7108         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7109         l_error_table(l_rec_index).party_id := cr.party_id;
7110         l_error_table(l_rec_index).message_text := cr.prog_int_char1;
7111       END IF;
7112       IF BITAND(cr.error_number,G_ES_EXE_EXMPT_RSN_INVALID) <> 0 THEN
7113         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7114         IF cr.exempt_reason_code IS NOT NULL THEN
7115           fnd_message.set_token('VALUE_NAME',cr.exempt_reason_code );
7116           fnd_message.set_token('COLUMN_NAME','EXEMPT_REASON_CODE' );
7117         ELSE
7118           fnd_message.set_token('VALUE_NAME',cr.exempt_reason_name );
7119           fnd_message.set_token('COLUMN_NAME','EXEMPT_REASON_NAME' );
7120         END IF;
7121         l_rec_index := l_rec_index +1;
7122         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7123         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7124         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7125         l_error_table(l_rec_index).party_id := cr.party_id;
7126         l_error_table(l_rec_index).message_text := fnd_message.get();
7127       END IF;
7128       IF BITAND(cr.error_number,G_ES_EXE_EXMPT_STS_INVALID) <> 0 THEN
7129         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7130         IF cr.exemption_status_code IS NOT NULL THEN
7131           fnd_message.set_token('VALUE_NAME',cr.exemption_status_code );
7132           fnd_message.set_token('COLUMN_NAME','EXEMPTION_STATUS_CODE' );
7133         ELSE
7134           fnd_message.set_token('VALUE_NAME',cr.exemption_status_name );
7135           fnd_message.set_token('COLUMN_NAME','EXEMPTION_STATUS_NAME' );
7136         END IF;
7137         l_rec_index := l_rec_index +1;
7138         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7139         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7140         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7141         l_error_table(l_rec_index).party_id := cr.party_id;
7142         l_error_table(l_rec_index).message_text := fnd_message.get();
7143       END IF;
7144       IF BITAND(cr.error_number,G_ES_EXE_TAX_REG_INVALID) <> 0 THEN
7145         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7146         IF cr.tax_regime_code IS NOT NULL THEN
7147           fnd_message.set_token('VALUE_NAME',cr.tax_regime_code );
7148           fnd_message.set_token('COLUMN_NAME','TAX_REGIME_CODE' );
7149         ELSE
7150           fnd_message.set_token('VALUE_NAME',cr.tax_regime_name );
7151           fnd_message.set_token('COLUMN_NAME','TAX_REGIME_NAME' );
7152         END IF;
7153         l_rec_index := l_rec_index +1;
7154         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7155         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7156         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7157         l_error_table(l_rec_index).party_id := cr.party_id;
7158         l_error_table(l_rec_index).message_text := fnd_message.get();
7159       END IF;
7160       IF BITAND(cr.error_number,G_ES_EXE_CNT_OWN_INVALID) <> 0 THEN
7161         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7162         IF cr.content_owner_id IS NOT NULL THEN
7163           fnd_message.set_token('VALUE_NAME',cr.content_owner_id );
7164           fnd_message.set_token('COLUMN_NAME','CONTENT_OWNER_ID' );
7165         ELSE
7166           fnd_message.set_token('VALUE_NAME',cr.content_owner_name );
7167           fnd_message.set_token('COLUMN_NAME','CONTENT_OWNER_NAME' );
7168         END IF;
7169         l_rec_index := l_rec_index +1;
7170         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7171         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7172         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7173         l_error_table(l_rec_index).party_id := cr.party_id;
7174         l_error_table(l_rec_index).message_text := fnd_message.get();
7175       END IF;
7176       IF BITAND(cr.error_number,G_ES_EXE_TAX_PARAM_INVALID) <> 0 THEN
7177         fnd_message.set_name('ZX','ZX_BULK_TAX_INVALID');
7178         IF cr.tax_code IS NOT NULL THEN
7179           fnd_message.set_token('TAX',cr.tax_code );
7180         ELSE
7181           fnd_message.set_token('TAX',cr.tax_name );
7182         END IF;
7183         IF cr.tax_regime_name IS NULL THEN
7184           fnd_message.set_token('TAX_REGIME',cr.tax_regime_code );
7185         ELSE
7186           fnd_message.set_token('TAX_REGIME',cr.tax_regime_name );
7187         END IF;
7188         l_rec_index := l_rec_index +1;
7189         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7190         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7191         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7192         l_error_table(l_rec_index).party_id := cr.party_id;
7193         l_error_table(l_rec_index).message_text := fnd_message.get();
7194       END IF;
7195       IF BITAND(cr.error_number,G_ES_EXE_TAX_STS_INVALID) <> 0 THEN
7196         fnd_message.set_name('ZX','ZX_BULK_TAX_STATUS_INVALID');
7197         IF cr.tax_status_code IS NOT NULL THEN
7198           fnd_message.set_token('TAX_STATUS',cr.tax_status_code );
7199         ELSE
7200           fnd_message.set_token('TAX_STATUS',cr.tax_status_name );
7201         END IF;
7202         IF cr.tax_regime_name IS NULL THEN
7203           fnd_message.set_token('TAX_REGIME',cr.tax_regime_code );
7204         ELSE
7205           fnd_message.set_token('TAX_REGIME',cr.tax_regime_name );
7206         END IF;
7207         IF cr.tax_name IS NULL THEN
7208           fnd_message.set_token('TAX',cr.tax_code );
7209         ELSE
7210           fnd_message.set_token('TAX',cr.tax_name );
7211         END IF;
7212         l_rec_index := l_rec_index +1;
7213         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7214         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7215         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7216         l_error_table(l_rec_index).party_id := cr.party_id;
7217         l_error_table(l_rec_index).message_text := fnd_message.get();
7218       END IF;
7219       IF BITAND(cr.error_number,G_ES_EXE_TAX_JUR_INVALID) <> 0 THEN
7220         fnd_message.set_name('ZX','ZX_BULK_TAX_JUR_INVALID');
7221         IF cr.tax_jurisdiction_id IS NOT NULL THEN
7222           fnd_message.set_token('TAX_JURISDICTION',cr.tax_jurisdiction_id );
7223         ELSE
7224           fnd_message.set_token('TAX_JURISDICTION',cr.tax_jurisdiction_name );
7225         END IF;
7226         IF cr.tax_name IS NULL THEN
7227           fnd_message.set_token('TAX',cr.tax_code );
7228         ELSE
7229           fnd_message.set_token('TAX',cr.tax_name );
7230         END IF;
7231         IF cr.tax_regime_name IS NULL THEN
7232           fnd_message.set_token('TAX_REGIME',cr.tax_regime_code );
7233         ELSE
7234           fnd_message.set_token('TAX_REGIME',cr.tax_regime_name );
7235         END IF;
7236         l_rec_index := l_rec_index +1;
7237         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7238         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7239         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7240         l_error_table(l_rec_index).party_id := cr.party_id;
7241         l_error_table(l_rec_index).message_text := fnd_message.get();
7242       END IF;
7243       IF BITAND(cr.error_number,G_ES_EXE_TAX_RATE_INVALID) <> 0 THEN
7244         fnd_message.set_name('ZX','ZX_BULK_TAX_RATE_INVALID');
7245         IF cr.tax_rate_code IS NOT NULL THEN
7246           fnd_message.set_token('TAX_RATE',cr.tax_rate_code );
7247         ELSE
7248           fnd_message.set_token('TAX_RATE',cr.tax_rate_name );
7249         END IF;
7250         IF cr.tax_regime_name IS NULL THEN
7251           fnd_message.set_token('TAX_REGIME',cr.tax_regime_code );
7252         ELSE
7253           fnd_message.set_token('TAX_REGIME',cr.tax_regime_name );
7254         END IF;
7255         IF cr.tax_name IS NULL THEN
7256           fnd_message.set_token('TAX',cr.tax_code );
7257         ELSE
7258           fnd_message.set_token('TAX',cr.tax_name );
7259         END IF;
7260         IF cr.tax_status_name IS NULL THEN
7261           fnd_message.set_token('TAX_STATUS',cr.tax_status_code );
7262         ELSE
7263           fnd_message.set_token('TAX_STATUS',cr.tax_status_name );
7264         END IF;
7265         IF cr.tax_jurisdiction_name IS NULL THEN
7266           fnd_message.set_token('TAX_JURISDICTION',cr.tax_jurisdiction_id );
7267         ELSE
7268           fnd_message.set_token('TAX_JURISDICTION',cr.tax_jurisdiction_name );
7269         END IF;
7270         l_rec_index := l_rec_index +1;
7271         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7272         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7273         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7274         l_error_table(l_rec_index).party_id := cr.party_id;
7275         l_error_table(l_rec_index).message_text := fnd_message.get();
7276       END IF;
7277       IF BITAND(cr.error_number,G_ES_EXE_LWR_LVL_FLG_INVALID) <> 0 THEN
7278         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7279         fnd_message.set_token('VALUE_NAME',cr.apply_to_lower_levels_flag );
7280         fnd_message.set_token('COLUMN_NAME','APPLY_TO_LOWER_LEVELS_FLAG' );
7281         l_rec_index := l_rec_index +1;
7282         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7283         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7284         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7285         l_error_table(l_rec_index).party_id := cr.party_id;
7286         l_error_table(l_rec_index).message_text := fnd_message.get();
7287       END IF;
7288       IF BITAND(cr.error_number,G_ES_EXE_INV_ORG_INVALID) <> 0 THEN
7289         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7290         IF cr.inventory_org_id IS NOT NULL THEN
7291           fnd_message.set_token('VALUE_NAME',cr.inventory_org_id );
7292           fnd_message.set_token('COLUMN_NAME','INVENTORY_ORG_ID' );
7293         ELSE
7294           fnd_message.set_token('VALUE_NAME',cr.inventory_org_name );
7295           fnd_message.set_token('COLUMN_NAME','INVENTORY_ORG_NAME' );
7296         END IF;
7297         l_rec_index := l_rec_index +1;
7298         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7299         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7300         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7301         l_error_table(l_rec_index).party_id := cr.party_id;
7302         l_error_table(l_rec_index).message_text := fnd_message.get();
7303       END IF;
7304       IF BITAND(cr.error_number,G_ES_EXE_INV_ITM_INVALID) <> 0 THEN
7305         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7306         IF cr.inventory_item_id IS NOT NULL THEN
7307           fnd_message.set_token('VALUE_NAME',cr.inventory_item_id );
7308           fnd_message.set_token('COLUMN_NAME','inventory_item_id' );
7309         ELSE
7310           fnd_message.set_token('VALUE_NAME',cr.Item_number );
7311           fnd_message.set_token('COLUMN_NAME','ITEM_NUMBER' );
7312         END IF;
7313         l_rec_index := l_rec_index +1;
7314         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7315         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7316         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7317         l_error_table(l_rec_index).party_id := cr.party_id;
7318         l_error_table(l_rec_index).message_text := fnd_message.get();
7319       END IF;
7320       IF BITAND(cr.error_number,G_ES_EXE_TAX_AUT_INVALID) <> 0 THEN
7321         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7322         IF cr.issuing_tax_authority_id IS NOT NULL THEN
7323           fnd_message.set_token('VALUE_NAME',cr.issuing_tax_authority_id );
7324           fnd_message.set_token('COLUMN_NAME','issuing_tax_authority_id' );
7325         ELSE
7326           fnd_message.set_token('VALUE_NAME',cr.issuing_tax_authority_name );
7327           fnd_message.set_token('COLUMN_NAME','issuing_tax_authority_name' );
7328         END IF;
7329         l_rec_index := l_rec_index +1;
7330         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7331         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7332         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7333         l_error_table(l_rec_index).party_id := cr.party_id;
7334         l_error_table(l_rec_index).message_text := fnd_message.get();
7335       END IF;
7336       IF BITAND(cr.error_number,G_ES_EXE_EXMPT_TYP_INVALID) <> 0 THEN
7337         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7338         IF cr.exemption_type_code IS NOT NULL THEN
7339           fnd_message.set_token('VALUE_NAME',cr.exemption_type_code );
7340           fnd_message.set_token('COLUMN_NAME','EXEMPTION_TYPE_CODE' );
7341         ELSE
7342           fnd_message.set_token('VALUE_NAME',cr.exemption_type_name );
7343           fnd_message.set_token('COLUMN_NAME','EXEMPTION_TYPE_NAME' );
7344         END IF;
7345         l_rec_index := l_rec_index +1;
7346         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7347         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7348         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7349         l_error_table(l_rec_index).party_id := cr.party_id;
7350         l_error_table(l_rec_index).message_text := fnd_message.get();
7351       END IF;
7352       IF BITAND(cr.error_number,G_ES_EXE_DATE_OVERLAP) <> 0 THEN
7353         fnd_message.set_name('ZX','ZX_PERIOD_OVERLAP');
7354         l_rec_index := l_rec_index +1;
7355         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7356         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7357         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7358         l_error_table(l_rec_index).party_id := cr.party_id;
7359         l_error_table(l_rec_index).message_text := fnd_message.get();
7360       END IF;
7361 
7362       FOR loop_index IN NVL(l_error_table.FIRST,0)..NVL(l_error_table.LAST,-1) LOOP
7363         INSERT INTO zx_errors_int
7364           (request_id
7365           ,error_table_name
7366           ,intf_ptp_reference
7367           ,party_type_code
7368           ,message_text
7369           ,prog_int_record_ref
7370           ,party_id
7371           )
7372         VALUES
7373           (G_REQUEST_ID
7374           ,G_INTF_EXE_TABLE_NAME
7375           ,l_error_table(loop_index).intf_ptp_reference
7376           ,l_error_table(loop_index).party_type_code
7377           ,l_error_table(loop_index).message_text
7378           ,l_error_table(loop_index).prog_int_record_ref
7379           ,l_error_table(loop_index).party_id
7380           );
7381       END LOOP;
7382       l_error_table.DELETE();
7383       l_rec_index := 0;
7384     END LOOP;
7385     --
7386     -- end of inserting exemption error records into zx_errors_int
7387     --
7388     l_error_table.DELETE();
7389     --
7390     -- start of inserting errors for RCA validations
7391     --
7392     l_rec_index := 0;
7393     FOR cr in c_rca_errors LOOP
7394       IF BITAND(cr.error_number,G_ES_RCA_MAND_PARAM_MISSING) <> 0 THEN
7395         fnd_message.set_name('ZX','ZX_INTF_MAND_VALUE_MISSING');
7396         l_rec_index := l_rec_index +1;
7397         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7398         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7399         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7400         l_error_table(l_rec_index).party_id := cr.party_id;
7401         l_error_table(l_rec_index).message_text := fnd_message.get();
7402       END IF;
7403       IF BITAND(cr.error_number,G_ES_RCA_DUP_INTF_RECORD) <> 0 THEN
7404         fnd_message.set_name('ZX','ZX_BULK_DUP_RCA_REF');
7405         l_rec_index := l_rec_index +1;
7406         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7407         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7408         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7409         l_error_table(l_rec_index).party_id := cr.party_id;
7410         l_error_table(l_rec_index).message_text := fnd_message.get();
7411       END IF;
7412       IF BITAND(cr.error_number,G_ES_RCA_TRANS_TYPE_INVALID) <> 0 THEN
7413         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7414         fnd_message.set_token('VALUE_NAME',cr.dml_type );
7415         fnd_message.set_token('COLUMN_NAME','DML_TYPE' );
7416         l_rec_index := l_rec_index +1;
7417         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7418         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7419         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7420         l_error_table(l_rec_index).party_id := cr.party_id;
7421         l_error_table(l_rec_index).message_text := fnd_message.get();
7422       END IF;
7423       IF BITAND(cr.error_number,G_ES_RCA_ENTY_CD_INVALID) <> 0 THEN
7424         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7425         fnd_message.set_token('VALUE_NAME',cr.entity_code );
7426         fnd_message.set_token('COLUMN_NAME','ENTITY_CODE' );
7427         l_rec_index := l_rec_index +1;
7428         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7429         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7430         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7431         l_error_table(l_rec_index).party_id := cr.party_id;
7432         l_error_table(l_rec_index).message_text := fnd_message.get();
7433       END IF;
7434       IF BITAND(cr.error_number,G_ES_RCA_DATE_RANGE_INVALID) <> 0 THEN
7435         fnd_message.set_name('ZX','ZX_DATE_RANGE_INVALID');
7436         l_rec_index := l_rec_index +1;
7437         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7438         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7439         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7440         l_error_table(l_rec_index).party_id := cr.party_id;
7441         l_error_table(l_rec_index).message_text := fnd_message.get();
7442       END IF;
7443       IF BITAND(cr.error_number,G_ES_RCA_REP_TYPE_INVALID) <> 0 THEN
7444         fnd_message.set_name('ZX','ZX_BULK_INVALID_VALUE');
7445         IF cr.reporting_type_id IS NOT NULL THEN
7446           fnd_message.set_token('VALUE_NAME',cr.reporting_type_id );
7447           fnd_message.set_token('COLUMN_NAME','REPORTING_TYPE_ID' );
7448         ELSE
7449           fnd_message.set_token('VALUE_NAME',cr.reporting_type_name );
7450           fnd_message.set_token('COLUMN_NAME','REPORTING_TYPE_NAME' );
7451         END IF;
7452         l_rec_index := l_rec_index +1;
7453         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7454         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7455         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7456         l_error_table(l_rec_index).party_id := cr.party_id;
7457         l_error_table(l_rec_index).message_text := fnd_message.get();
7458       END IF;
7459       IF BITAND(cr.error_number,G_ES_RCA_REP_CODE_INVALID) <> 0 THEN
7460         fnd_message.set_name('ZX','ZX_BULK_RC_INVALID');
7461         IF cr.reporting_code_id IS NOT NULL THEN
7462           fnd_message.set_token('REP_CODE',cr.reporting_code_id );
7463         ELSE
7464           fnd_message.set_token('REP_CODE',cr.reporting_code_name );
7465         END IF;
7466         IF cr.reporting_type_name IS NULL THEN
7467           fnd_message.set_token('REP_TYPE',cr.reporting_type_id );
7468         ELSE
7469           fnd_message.set_token('REP_TYPE',cr.reporting_type_name );
7470         END IF;
7471         l_rec_index := l_rec_index +1;
7472         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7473         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7474         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7475         l_error_table(l_rec_index).party_id := cr.party_id;
7476         l_error_table(l_rec_index).message_text := fnd_message.get();
7477       END IF;
7478       IF BITAND(cr.error_number,G_ES_RCA_REP_CODE_VAL_INVALID) <> 0 THEN
7479         fnd_message.set_name('ZX','ZX_BULK_RV_INVALID');
7480         IF cr.reporting_code_name IS NULL THEN
7481           fnd_message.set_token('REP_CODE',cr.reporting_code_id );
7482         ELSE
7483           fnd_message.set_token('REP_CODE',cr.reporting_code_name );
7484         END IF;
7485         IF cr.reporting_code_char_value IS NOT NULL THEN
7486           fnd_message.set_token('REP_VALUE',cr.reporting_code_char_value );
7487         ELSIF cr.reporting_code_num_value IS NOT NULL THEN
7488           fnd_message.set_token('REP_VALUE',cr.reporting_code_num_value );
7489         ELSE
7490           fnd_message.set_token('REP_VALUE',cr.reporting_code_date_value );
7491         END IF;
7492         l_rec_index := l_rec_index +1;
7493         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7494         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7495         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7496         l_error_table(l_rec_index).party_id := cr.party_id;
7497         l_error_table(l_rec_index).message_text := fnd_message.get();
7498       END IF;
7499       IF BITAND(cr.error_number,G_ES_RCA_DATE_OVERLAP) <> 0 THEN
7500         fnd_message.set_name('ZX','ZX_PERIOD_OVERLAP');
7501         l_rec_index := l_rec_index +1;
7502         l_error_table(l_rec_index).intf_ptp_reference := cr.intf_ptp_reference;
7503         l_error_table(l_rec_index).party_type_code := cr.party_type_code;
7504         l_error_table(l_rec_index).prog_int_record_ref := cr.prog_int_record_ref;
7505         l_error_table(l_rec_index).party_id := cr.party_id;
7506         l_error_table(l_rec_index).message_text := fnd_message.get();
7507       END IF;
7508 
7509       FOR loop_index IN NVL(l_error_table.FIRST,0)..NVL(l_error_table.LAST,-1) LOOP
7510         INSERT INTO zx_errors_int
7511           (request_id
7512           ,error_table_name
7513           ,intf_ptp_reference
7514           ,party_type_code
7515           ,message_text
7516           ,prog_int_record_ref
7517           ,party_id
7518           )
7519         VALUES
7520           (G_REQUEST_ID
7521           ,G_INTF_RCA_TABLE_NAME
7522           ,l_error_table(loop_index).intf_ptp_reference
7523           ,l_error_table(loop_index).party_type_code
7524           ,l_error_table(loop_index).message_text
7525           ,l_error_table(loop_index).prog_int_record_ref
7526           ,l_error_table(loop_index).party_id
7527           );
7528       END LOOP;
7529       l_error_table.DELETE();
7530       l_rec_index := 0;
7531 
7532     END LOOP;
7533 
7534     --
7535     -- end of inserting RCA error records into zx_errors_int
7536     --
7537     l_error_table.DELETE();
7538 
7539     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7540       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'LogErrorToTable','LogErrorToTable(-)');
7541     END IF;
7542 
7543 
7544   EXCEPTION
7545     WHEN OTHERS THEN
7546       IF c_ptp_errors%ISOPEN THEN
7547         CLOSE c_ptp_errors;
7548       END IF;
7549       IF c_reg_errors%ISOPEN THEN
7550         CLOSE c_reg_errors;
7551       END IF;
7552       IF c_exe_errors%ISOPEN THEN
7553         CLOSE c_exe_errors;
7554       END IF;
7555       IF c_rca_errors%ISOPEN THEN
7556         CLOSE c_rca_errors;
7557       END IF;
7558       log_now (p_log_level => FND_FILE.LOG
7559               ,p_message   => 'LogErrorToTable'||' : '||SQLERRM
7560               );
7561       RAISE;
7562   END LogErrorToTable;
7563 
7564   -- ==========================================================================
7565   --                     Public Functions and Procedures
7566   -- ==========================================================================
7567 
7568   -- wrapper for handling the product specific code
7569   ---------------------------------------------------------------------------
7570   ---------------------------------------------------------------------------
7571   PROCEDURE IMPORT_WRAPPER
7572     (p_request_id                     IN             NUMBER
7573     ,p_interface_table_name           IN             VARCHAR2
7574     ,p_gather_stats                   IN             VARCHAR2
7575     ,p_validate_only                  IN             VARCHAR2
7576     ,p_sql_select_insert_ptp_intf     IN             VARCHAR2
7577     ,p_sql_from_insert_ptp_intf       IN             VARCHAR2
7578     ,p_insert_only                    IN             VARCHAR2
7579     ,p_sql_select_valid_party_id      IN             VARCHAR2
7580     ,p_sql_from_valid_party_id        IN             VARCHAR2
7581     ,p_sql_select_insert_ptp_prod     IN             VARCHAR2
7582     ,p_sql_from_insert_ptp_prod       IN             VARCHAR2
7583     ,p_commit                         IN             VARCHAR2
7584     ,p_batch_id                       IN             NUMBER
7585     ,x_return_status                  OUT NOCOPY  VARCHAR2
7586     ,x_msg_data                       OUT NOCOPY  VARCHAR2
7587     ) IS
7588 
7589     l_dynamic_sql   VARCHAR2(4000);
7590     l_date1 DATE;
7591     l_date2 DATE;
7592     l_date3 DATE;
7593     l_date4 DATE;
7594     l_date5 DATE;
7595     l_date6 DATE;
7596     l_date7 DATE;
7597     l_date8 DATE;
7598     l_date9 DATE;
7599     l_date10 DATE;
7600     l_date11 DATE;
7601     l_date12 DATE;
7602 
7603   BEGIN
7604 
7605     G_PROC_NAME:= 'IMPORT_WRAPPER';
7606     log_now (p_log_level => FND_FILE.LOG
7607             ,p_message   => G_PROC_NAME||'(+)'
7608             );
7609     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7610       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER','IMPORT_WRAPPER(+)');
7611     END IF;
7612 
7613     SetGlobals();
7614     SetProcessConstants();
7615 
7616     x_return_status := G_CONC_RET_STS_SUCCESS;
7617     G_BATCH_ID      := p_batch_id;
7618     G_REQUEST_ID    := p_request_id;
7619 
7620     ---------------------------------------
7621     -- validate mandatory API parameters
7622     ---------------------------------------
7623     IF    p_request_id IS NULL
7624        OR p_interface_table_name IS NULL
7625        OR NVL(p_gather_stats,G_MISS_CHAR)
7626                   NOT IN (G_TRUE, G_FALSE)
7627        OR NVL(p_validate_only,G_MISS_CHAR)
7628                   NOT IN (G_TRUE, G_FALSE)
7629        OR (p_validate_only IS NOT NULL AND
7630             (
7631               (     p_sql_select_insert_ptp_intf IS NULL
7632                 AND p_sql_from_insert_ptp_intf IS NOT NULL
7633               )
7634               OR
7635               (     p_sql_select_insert_ptp_intf IS NOT NULL
7636                 AND p_sql_from_insert_ptp_intf IS NULL
7637               )
7638 
7639             )
7640           )
7641        OR NVL(p_insert_only,G_MISS_CHAR)
7642                   NOT IN (G_TRUE, G_FALSE)
7643        OR (p_insert_only IS NOT NULL AND
7644             (
7645               (     p_sql_select_valid_party_id IS NULL
7646                 AND p_sql_from_valid_party_id IS NOT NULL
7647               )
7648               OR
7649               (     p_sql_select_valid_party_id IS NOT NULL
7650                 AND p_sql_from_valid_party_id IS NULL
7651               )
7652             )
7653             OR
7654             (
7655               (     p_sql_select_insert_ptp_prod IS NULL
7656                 AND p_sql_from_insert_ptp_prod IS NOT NULL
7657               )
7658               OR
7659               (     p_sql_select_insert_ptp_prod IS NOT NULL
7660                 AND p_sql_from_insert_ptp_prod IS NULL
7661               )
7662             )
7663           )
7664        OR NVL(p_commit,G_MISS_CHAR)
7665                   NOT IN (G_TRUE, G_FALSE)
7666     THEN
7667       x_return_status := G_CONC_RET_STS_ERROR;
7668       FND_MESSAGE.Set_Name('ZX', 'ZX_API_INVALID_PARAM');
7669       FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
7670       FND_MESSAGE.Set_Token('API_NAME', G_PROC_NAME);
7671       x_msg_data := FND_MESSAGE.get();
7672       RETURN;
7673     END IF;
7674 
7675     G_DEBUG_STATEMENT:= 'Completed validating mandatory API parameters';
7676     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7677       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER',G_DEBUG_STATEMENT);
7678     END IF;
7679 
7680     IF p_interface_table_name = G_CUST_INTF_TABLE THEN
7681       -- processing data specific to customers interface table of TCA
7682       l_date1    := SYSDATE;
7683       IF FND_API.TO_BOOLEAN(p_validate_only) THEN
7684         --
7685         -- insert data into ptp intf table for those records where in customer
7686         -- has populated into registration_number and country into
7687         -- ra_customers_interface_all
7688         --
7689         -- sample dynamic sql
7690         --
7691         -- INSERT INTO zx_party_tax_profile_int
7692         -- (registration_number,country_code,dml_type,intf_party_reference
7693         -- ,intf_party_site_reference,party_type_code,batch_id,request_id)
7694         ---------------------------------------------------
7695         -- p_sql_select_insert_ptp_intf is defined  below
7696         ---------------------------------------------------
7697         -- SELECT CUST_TAX_REFERENCE, country, Decode(INSERT_UPDATE_FLAG,'I','CREATE','U','UPDATE',INSERT_UPDATE_FLAG),
7698         -- Nvl(orig_system_customer_ref,orig_system_party_ref)  AS intf_party_reference, orig_system_address_ref AS intf_party_site_reference,
7699         -- CASE WHEN orig_system_party_ref IS NOT NULL THEN 'THIRD_PARTY_SITE' ELSE 'THIRD_PARTY' END AS party_type_code
7700         ---------------------------------------------------
7701         -- p_sql_select_insert_ptp_intf ends here
7702         ---------------------------------------------------
7703         -- ,-1,-2
7704         ---------------------------------------------------
7705         -- p_sql_from_insert_ptp_intf is defined  below
7706         ---------------------------------------------------
7707         -- FROM ra_customers_interface_all hz_rcia WHERE insert_update_flag = 'I' AND cust_tax_reference IS NOT NULL
7708         ---------------------------------------------------
7709         -- p_sql_from_insert_ptp_intf ends here
7710         ---------------------------------------------------
7711         -- AND NOT EXISTS
7712         -- (SELECT 1
7713         --    FROM zx_party_tax_profile_int zx_ptp_int
7714         --   WHERE zx_ptp_int.record_status IS NULL
7715         --     AND NVL(zx_ptp_int.batch_id,G_MISS_NUM) = NVL(G_BATCH_ID,NVL(zx_ptp_int.batch_id,G_MISS_NUM))
7716         --     AND Nvl(zx_ptp_int.intf_party_reference,G_MISS_CHAR) = Nvl(Nvl(hz_rcia.orig_system_customer_ref,hz_rcia.orig_system_party_ref),G_MISS_CHAR)
7717         --     AND Nvl(zx_ptp_int.intf_party_site_reference,G_MISS_CHAR) = Nvl(hz_rcia.orig_system_address_ref,G_MISS_CHAR)
7718         -- )
7719         l_date2 := SYSDATE;
7720         IF p_sql_select_insert_ptp_intf IS NOT NULL
7721           AND p_sql_from_insert_ptp_intf IS NOT NULL THEN
7722           BEGIN
7723             l_dynamic_sql := 'INSERT INTO zx_party_tax_profile_int '
7724               ||' (registration_number ,country_code ,dml_type'
7725               ||' ,intf_party_reference ,intf_party_site_reference ,party_type_code'
7726               ||' ,batch_id)'
7727               ||' '|| p_sql_select_insert_ptp_intf
7728               ||' ,:G_BATCH_ID'
7729               ||' '||p_sql_from_insert_ptp_intf
7730               ||' AND NOT EXISTS '
7731               ||' (SELECT 1 FROM zx_party_tax_profile_int zx_ptp_int'
7732               ||' WHERE NVL(zx_ptp_int.record_status,'||G_RS_ERROR||') <> '||G_RS_VALID
7733               ||' AND NVL(zx_ptp_int.batch_id,'||G_MISS_NUM||') '
7734                      ||'= '||NVL(G_BATCH_ID,G_MISS_NUM)
7735               ||' AND NVL(zx_ptp_int.intf_party_reference,'''||G_MISS_CHAR||''') '
7736                   ||' = NVL(NVL(hz_rcia.orig_system_party_ref'
7737                   ||',hz_rcia.orig_system_customer_ref),'''||G_MISS_CHAR||''')'
7738               ||' AND NVL(zx_ptp_int.intf_party_site_reference,'''||G_MISS_CHAR||''')'
7739                   ||' = NVL(hz_rcia.orig_system_address_ref,'''||G_MISS_CHAR||''')'
7740               ||')';
7741 
7742             EXECUTE IMMEDIATE l_dynamic_sql USING IN G_BATCH_ID;
7743 
7744           EXCEPTION
7745             WHEN OTHERS THEN
7746               log_now (p_log_level => FND_FILE.LOG
7747                       ,p_message   => 'Error Executing below Populate PTP Intf SQL :'||SQLERRM
7748                     );
7749               log_now (p_log_level => FND_FILE.LOG
7750                       ,p_message   => l_dynamic_sql
7751                     );
7752               G_DEBUG_STATEMENT:= 'error executing Populate PTP Intf SQL :'||SQLERRM;
7753               IF (G_DEBUG_LEVEL_EXCEPTION >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7754                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER',G_DEBUG_STATEMENT);
7755               END IF;
7756 
7757               RAISE;
7758           END;
7759           G_DEBUG_STATEMENT:= 'Completed executing Populate PTP Intf SQL ';
7760           IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7761             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER',G_DEBUG_STATEMENT);
7762           END IF;
7763         END IF;
7764 
7765         l_date3    := SYSDATE;
7766         IMPORT_PTP (
7767            p_party_intf_table_name     => p_interface_table_name
7768           ,p_commit                    => G_FALSE
7769           ,p_gather_stats              => p_gather_stats
7770           ,p_validate_only             => p_validate_only
7771           ,p_insert_only               => G_FALSE
7772           ,x_return_status             => x_return_status
7773           ,x_msg_data                  => x_msg_data
7774            );
7775         l_date4    := SYSDATE;
7776 
7777         IF x_return_status <> G_CONC_RET_STS_SUCCESS THEN
7778           RETURN;
7779         ELSE
7780           BEGIN
7781             SELECT G_CONC_RET_STS_WARNING
7782             INTO x_return_status
7783             FROM DUAL
7784             WHERE EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
7785                           FROM zx_errors_int
7786                           WHERE request_id = G_REQUEST_ID
7787                           AND ROWNUM=1);
7788           EXCEPTION
7789             WHEN OTHERS THEN
7790               x_return_status := G_CONC_RET_STS_SUCCESS;
7791           END;
7792         END IF;
7793 
7794         G_DEBUG_STATEMENT:= 'Completed Validate Mode for IMPORT_WRAPPER ';
7795         IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7796           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER',G_DEBUG_STATEMENT);
7797         END IF;
7798 
7799       END IF; -- end p_validate_only
7800       l_date5    := SYSDATE;
7801       IF FND_API.TO_BOOLEAN(p_insert_only) THEN
7802 
7803         -- sample code for p_sql_select_valid_party_id
7804         --  SELECT party_id, 'THIRD_PARTY' as party_type_code, orig_system_reference as intf_party_reference, NULL as intf_party_site_reference
7805         -- sample code for p_sql_from_valid_party_id
7806         --    FROM hz_parties
7807         --   WHERE request_id = G_REQUEST_ID
7808         --     AND .. ..
7809         l_date6    := SYSDATE;
7810         IF    p_sql_select_valid_party_id IS NOT NULL
7811           AND p_sql_from_valid_party_id IS NOT NULL THEN
7812           BEGIN
7813             l_dynamic_sql := 'MERGE INTO zx_party_tax_profile_int ptp_int'
7814                     ||' USING ('||p_sql_select_valid_party_id
7815                     ||'        '||p_sql_from_valid_party_id   ||') hz_int'
7816                     ||' ON ('
7817                     ||      ' ptp_int.request_id = '||G_REQUEST_ID
7818                     ||  ' AND ptp_int.record_status = '||G_RS_VALID
7819                     ||  ' AND ptp_int.party_type_code = hz_int.party_type_code'
7820                     ||  ' AND ptp_int.intf_party_reference = hz_int.intf_party_reference'
7821                     ||  ' AND nvl(ptp_int.intf_party_site_reference,'''||G_MISS_CHAR||''') '
7822                     ||  '   = nvl(hz_int.intf_party_site_reference,'''||G_MISS_CHAR||''') '
7823                     ||  ' )'
7824                     ||  ' WHEN MATCHED THEN UPDATE'
7825                     ||  ' SET party_id = hz_int.party_id';
7826             EXECUTE IMMEDIATE l_dynamic_sql;
7827           EXCEPTION
7828             WHEN OTHERS THEN
7829               log_now (p_log_level => FND_FILE.LOG
7830                       ,p_message   => 'Error Executing below Party ID SQL :'||SQLERRM
7831                     );
7832               log_now (p_log_level => FND_FILE.LOG
7833                       ,p_message   => l_dynamic_sql
7834                     );
7835               G_DEBUG_STATEMENT:= 'Error Executing below Party ID SQL :'||SQLERRM;
7836               IF (G_DEBUG_LEVEL_EXCEPTION >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7837                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER',G_DEBUG_STATEMENT);
7838               END IF;
7839               RAISE;
7840           END;
7841           G_DEBUG_STATEMENT:= 'Completed executing below Party ID SQL ';
7842           IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7843             FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER',G_DEBUG_STATEMENT);
7844           END IF;
7845         END IF;
7846         l_date7    := SYSDATE;
7847 
7848         UPDATE zx_party_tax_profile_int zx_ptp_int
7849         SET record_status = NULL
7850         WHERE request_id = G_REQUEST_ID
7851         AND   record_status = G_RS_VALID
7852         AND   party_id IS NULL;
7853 
7854         G_DEBUG_STATEMENT:= SQL%ROWCOUNT||' PTP records updated with record_status = NULL';
7855         IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7856           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER',G_DEBUG_STATEMENT);
7857         END IF;
7858 
7859         ResetRecStatusForChildTables();
7860 
7861         l_date8    := SYSDATE;
7862         IMPORT_PTP (
7863            p_party_intf_table_name     => p_interface_table_name
7864           ,p_commit                    => G_FALSE
7865           ,p_gather_stats              => G_FALSE
7866           ,p_validate_only             => G_FALSE
7867           ,p_insert_only               => p_insert_only
7868           ,x_return_status             => x_return_status
7869           ,x_msg_data                  => x_msg_data
7870            );
7871         l_date9    := SYSDATE;
7872 
7873         IF x_return_status <> G_CONC_RET_STS_SUCCESS THEN
7874           RETURN;
7875         END IF;
7876 
7877         BEGIN
7878           IF p_interface_table_name = G_CUST_INTF_TABLE THEN
7879             l_dynamic_sql :=
7880               ' BEGIN '||
7881               '   HZ_CUSTOMER_INT.sync_tax_reference '||
7882               '   (p_request_id      =>  :g_request_id '||
7883               '   ,x_return_status   =>  :x_return_status '||
7884               '   ,x_msg_data        =>  :x_msg_data '||
7885               '   ); '||
7886               ' END;';
7887             EXECUTE IMMEDIATE l_dynamic_sql
7888             USING IN G_REQUEST_ID,
7889                  OUT x_return_status,
7890                  OUT x_msg_data;
7891             log_now (p_log_level => FND_FILE.LOG
7892                     ,p_message   => 'Returned HZ API with status '||x_return_status||' x_msg_data'||x_msg_data
7893                     );
7894             IF x_return_status <> G_CONC_RET_STS_SUCCESS THEN
7895               RETURN;
7896             END IF;
7897           END IF;
7898         EXCEPTION
7899           WHEN OTHERS THEN
7900             IF sqlerrm LIKE '%PLS-00302%' THEN
7901               log_now (p_log_level => FND_FILE.LOG
7902                       ,p_message   => 'HZ_CUSTOMER_INT.sync_tax_reference not defined.'
7903                       );
7904             ELSE
7905               log_now (p_log_level => FND_FILE.LOG
7906                       ,p_message   => 'Error Executing hz_customer_int.sync_tax_reference API :'||SQLERRM
7907                     );
7908               log_now (p_log_level => FND_FILE.LOG
7909                       ,p_message   => l_dynamic_sql
7910                     );
7911               G_DEBUG_STATEMENT:= 'Error Executing hz_customer_int.sync_tax_reference API :'||SQLERRM;
7912               IF (G_DEBUG_LEVEL_EXCEPTION >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7913                 FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER',G_DEBUG_STATEMENT);
7914               END IF;
7915               RAISE;
7916             END IF;
7917         END;
7918         l_date10    := SYSDATE;
7919 
7920         -- sample code for p_sql_select_insert_ptp_prod
7921         --  SELECT party_id, 'THIRD_PARTY'
7922         --
7923         -- sample code for p_sql_from_insert_ptp_prod
7924         --   FROM  hz_parties hz_insert
7925         --   WHERE request_id = G_REQUEST_ID
7926         BEGIN
7927 
7928           l_dynamic_sql := 'INSERT INTO ZX_PARTY_TAX_PROFILE'
7929             ||'(party_id,party_type_code,country_code'
7930             ||',party_tax_profile_id,creation_date,created_by,last_update_date'
7931             ||',last_updated_by,last_update_login,object_version_number,request_id'
7932             ||',program_application_id,program_id,record_type_code)'
7933             || p_sql_select_insert_ptp_prod
7934             ||' ,zx_party_tax_profile_s.nextval ,:g_date1 '
7935             ||','||G_USER_ID||',:g_date2'
7936             ||','||G_USER_ID||','||G_LOGIN_ID||',1'||','||G_REQUEST_ID
7937             ||','||G_PROG_APPID||','||G_PROG_ID||','''||G_RECORD_TYPE_CODE||''''
7938             ||' '||p_sql_from_insert_ptp_prod||' '
7939             ||' AND NOT EXISTS '
7940             ||' (SELECT 1 FROM zx_party_tax_profile_int zx_ptp_int'
7941             ||' WHERE zx_ptp_int.request_id = '||G_REQUEST_ID
7942             ||' AND zx_ptp_int.party_id = hz_insert.party_id'
7943             ||' AND zx_ptp_int.party_type_code = hz_insert.party_type_code'
7944             ||')';
7945 
7946             EXECUTE IMMEDIATE l_dynamic_sql
7947             USING G_SYSDATE, G_SYSDATE;
7948         EXCEPTION
7949           WHEN OTHERS THEN
7950             log_now (p_log_level => FND_FILE.LOG
7951                     ,p_message   => 'Error Executing below Populate PTP Table SQL :'||SQLERRM
7952                   );
7953             log_now (p_log_level => FND_FILE.LOG
7954                     ,p_message   => l_dynamic_sql
7955                   );
7956             G_DEBUG_STATEMENT:= 'Error Executing below Populate PTP Table SQL :'||SQLERRM;
7957             IF (G_DEBUG_LEVEL_EXCEPTION >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7958               FND_LOG.STRING(G_DEBUG_LEVEL_EXCEPTION,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER',G_DEBUG_STATEMENT);
7959             END IF;
7960             RAISE;
7961         END;
7962         l_date11    := SYSDATE;
7963 
7964         G_DEBUG_STATEMENT:= 'Completed Insert Mode for IMPORT_WRAPPER';
7965         IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
7966           FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER',G_DEBUG_STATEMENT);
7967         END IF;
7968 
7969       END IF; -- end p_insert_only
7970       l_date12    := SYSDATE;
7971 
7972         log_now (p_log_level => FND_FILE.LOG
7973                 ,p_message   => '+--------------------------------------------------------------------'
7974                 );
7975         log_now (p_log_level => FND_FILE.LOG
7976                 ,p_message   => '|                  PERF METRICS FOR IMPORT_WRAPPER                   '
7977                 );
7978         IF FND_API.TO_BOOLEAN(p_validate_only) THEN
7979           log_now (p_log_level => FND_FILE.LOG
7980                   ,p_message   => '| Time Taken to Populate PTP Table           '||(l_date3-l_date2)*86400||' Secs'
7981                   );
7982           log_now (p_log_level => FND_FILE.LOG
7983                   ,p_message   => '| Time Taken for IMPORT_PTP API              '||(l_date4-l_date3)*86400||' Secs'
7984                   );
7985         END IF;
7986         IF FND_API.TO_BOOLEAN(p_insert_only) THEN
7987           log_now (p_log_level => FND_FILE.LOG
7988                   ,p_message   => '| Time Taken to Populate Party Id            '||(l_date7-l_date6)*86400||' Secs'
7989                   );
7990           log_now (p_log_level => FND_FILE.LOG
7991                   ,p_message   => '| Time Taken to Sync Tax Reference           '||(l_date10-l_date9)*86400||' Secs'
7992                   );
7993           log_now (p_log_level => FND_FILE.LOG
7994                   ,p_message   => '| Time Taken to Populate PTP Table           '||(l_date11-l_date10)*86400||' Secs'
7995                   );
7996           log_now (p_log_level => FND_FILE.LOG
7997                   ,p_message   => '| Time Taken for IMPORT_PTP API              '||(l_date9-l_date8)*86400||' Secs'
7998                   );
7999         END IF;
8000         log_now (p_log_level => FND_FILE.LOG
8001                 ,p_message   => '| Total Time Taken for Validation Mode       '||(l_date5-l_date1)*86400||' Secs'
8002                 );
8003         log_now (p_log_level => FND_FILE.LOG
8004                 ,p_message   => '| Total Time Taken for Insert Mode           '||(l_date12-l_date5)*86400||' Secs'
8005                 );
8006         log_now (p_log_level => FND_FILE.LOG
8007                 ,p_message   => '| Time Taken by Import Wrapper               '||(l_date12-l_date1)*86400||' Secs'
8008                 );
8009         log_now (p_log_level => FND_FILE.LOG
8010                 ,p_message   => '+--------------------------------------------------------------------'
8011                 );
8012 
8013     END IF; -- end p_interface_table_name
8014 
8015     log_now (p_log_level => FND_FILE.LOG
8016             ,p_message   => G_PROC_NAME||'(-)'
8017             );
8018     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
8019       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'IMPORT_WRAPPER','IMPORT_WRAPPER(-)');
8020     END IF;
8021 
8022   EXCEPTION
8023     WHEN OTHERS THEN
8024       x_return_status := G_CONC_RET_STS_UNEXP_ERROR;
8025       x_msg_data      := SQLERRM;
8026       log_now (p_log_level => FND_FILE.LOG
8027               ,p_message   => G_PROC_NAME||' : '||SQLERRM
8028               );
8029   END IMPORT_WRAPPER;
8030 
8031   ---------------------------------------------------------------------------
8032   ---------------------------------------------------------------------------
8033 
8034   PROCEDURE MESSAGE_WRAPPER
8035     (p_request_id                 IN             NUMBER
8036     ,p_interface_table_name       IN             VARCHAR2
8037     ,p_display_stats              IN             VARCHAR2
8038     ,p_display_messages           IN             VARCHAR2
8039     ,p_message_header_string_1    IN             VARCHAR2
8040     ,p_message_header_string_2    IN             VARCHAR2
8041     ,x_return_status                 OUT NOCOPY  VARCHAR2
8042     ,x_msg_data                      OUT NOCOPY  VARCHAR2
8043     ) IS
8044 
8045     l_message                  VARCHAR2(4000);
8046     l_std_underscore           VARCHAR2(28);
8047     l_filler_space_msg_line    VARCHAR2(84);
8048     l_msg_header_unit_length   NUMBER(2);
8049     l_tot_records_msg          VARCHAR2(80);
8050     l_exe_records_msg          VARCHAR2(80);
8051     l_count_success_records    NUMBER(10);
8052     l_count_exception_records  NUMBER(10);
8053     l_message_line1            VARCHAR2(2000);
8054     l_message_line2            VARCHAR2(2000);
8055     l_msg_ptp_table            VARCHAR2(2000);
8056     l_msg_reg_table            VARCHAR2(2000);
8057     l_msg_exe_table            VARCHAR2(2000);
8058     l_msg_rca_table            VARCHAR2(2000);
8059 
8060     CURSOR c_error_records_cust (cp_request_id IN NUMBER
8061                                 ,cp_msg_ptp_table IN VARCHAR2
8062                                 ,cp_msg_exe_table IN VARCHAR2
8063                                 ,cp_msg_reg_table IN VARCHAR2
8064                                 ,cp_msg_rca_table IN VARCHAR2
8065                                 ) IS
8066     SELECT ptp_int.intf_party_reference, ptp_int.intf_party_site_reference
8067           ,DECODE(err_int.error_table_name
8068                      ,G_INTF_PTP_TABLE_NAME,cp_msg_ptp_table
8069                      ,G_INTF_EXE_TABLE_NAME,cp_msg_exe_table
8070                      ,G_INTF_REG_TABLE_NAME,cp_msg_reg_table
8071                      ,G_INTF_RCA_TABLE_NAME,cp_msg_rca_table
8072                      ,' ') AS user_table_name
8073           ,err_int.message_text
8074     FROM zx_errors_int err_int, zx_party_tax_profile_int ptp_int
8075     WHERE err_int.request_id = G_REQUEST_ID
8076       AND err_int.request_id = ptp_int.request_id
8077       AND err_int.intf_ptp_reference = ptp_int.intf_ptp_reference
8078     ORDER BY intf_party_reference, intf_party_site_reference NULLS FIRST,
8079              DECODE(error_table_name,G_INTF_PTP_TABLE_NAME,1
8080                     ,G_INTF_EXE_TABLE_NAME,2
8081                     ,G_INTF_REG_TABLE_NAME,3
8082                     ,G_INTF_RCA_TABLE_NAME,4,5),
8083              prog_int_record_ref NULLS FIRST;
8084 
8085   l_date1 DATE;
8086   l_num1  NUMBER;
8087 
8088   BEGIN
8089 
8090     G_PROC_NAME      := 'MESSAGE_WRAPPER';
8091     log_now (p_log_level => FND_FILE.LOG
8092             ,p_message   => G_PROC_NAME||'(+)'
8093             );
8094     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
8095       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'MESSAGE_WRAPPER','MESSAGE_WRAPPER(+)');
8096     END IF;
8097 
8098     SetGlobals();
8099     SetProcessConstants();
8100 
8101     x_return_status := G_CONC_RET_STS_SUCCESS;
8102     G_REQUEST_ID    := p_request_id;
8103     l_std_underscore          := '----------------------------';
8104     l_msg_header_unit_length  := 36;
8105 
8106     ---------------------------------------
8107     -- validate mandatory API parameters
8108     ---------------------------------------
8109     IF    p_request_id IS NULL
8110        OR p_interface_table_name IS NULL
8111        OR NVL(p_display_stats,G_MISS_CHAR)
8112                   NOT IN (G_TRUE, G_FALSE)
8113        OR NVL(p_display_messages,G_MISS_CHAR)
8114                   NOT IN (G_TRUE, G_FALSE)
8115        OR (    FND_API.to_boolean(p_display_messages)
8116            AND (   p_message_header_string_1 IS NULL
8117                 OR p_message_header_string_2 IS NULL
8118                 )
8119            )
8120     THEN
8121       x_return_status := G_CONC_RET_STS_ERROR;
8122       FND_MESSAGE.Set_Name('ZX', 'ZX_API_INVALID_PARAM');
8123       FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
8124       FND_MESSAGE.Set_Token('API_NAME', G_PROC_NAME);
8125       x_msg_data := FND_MESSAGE.get();
8126       RETURN;
8127     END IF;
8128 
8129     G_DEBUG_STATEMENT:= 'Completed validating mandatory API parameters';
8130     IF (G_DEBUG_LEVEL_STATEMENT >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
8131       FND_LOG.STRING(G_DEBUG_LEVEL_STATEMENT,G_DEBUG_LOG_HEADER||'MESSAGE_WRAPPER',G_DEBUG_STATEMENT);
8132     END IF;
8133 
8134     IF FND_API.to_boolean (p_display_stats) THEN
8135       IF p_interface_table_name = G_CUST_INTF_TABLE THEN
8136 
8137         l_date1 := SYSDATE;
8138 
8139         SELECT NVL(SUM(DECODE(NVL(record_status,G_RS_ERROR),G_RS_ERROR,1,0)),0), NVL(SUM(1),0)
8140         INTO l_count_exception_records, l_count_success_records
8141         FROM zx_party_tax_profile_int
8142         WHERE request_id = G_REQUEST_ID;
8143         fnd_message.set_name('ZX','ZX_TOT_IMPORTED_RECORDS');
8144         l_tot_records_msg := fnd_message.get();
8145         fnd_message.set_name('ZX','ZX_TOT_EXCEPTION_RECORDS');
8146         l_exe_records_msg := fnd_message.get();
8147         --
8148         -- start print the summary for party tax profile
8149         --
8150         log_now (p_log_level => FND_FILE.OUTPUT
8151                 ,p_message    => G_INTF_PTP_TABLE_NAME
8152                 );
8153         log_now (p_log_level => FND_FILE.OUTPUT
8154                 ,p_message    => l_std_underscore
8155                 );
8156         log_now (p_log_level => FND_FILE.OUTPUT
8157                 ,p_message    => l_tot_records_msg||' '||l_count_success_records
8158                 );
8159         log_now (p_log_level => FND_FILE.OUTPUT
8160                 ,p_message    => l_exe_records_msg||' '||l_count_exception_records
8161                 );
8162         log_now (p_log_level => FND_FILE.OUTPUT
8163                 ,p_message    => ''
8164                 );
8165         --
8166         -- end print the summary for party tax profile
8167         --
8168         l_message_line1 := RPAD(G_INTF_REG_TABLE_NAME,l_msg_header_unit_length,' ')
8169                         || RPAD(G_INTF_EXE_TABLE_NAME,l_msg_header_unit_length,' ')
8170                         || G_INTF_RCA_TABLE_NAME;
8171 
8172         l_message_line2 := RPAD(l_std_underscore,l_msg_header_unit_length,' ')
8173                         || RPAD(l_std_underscore,l_msg_header_unit_length,' ')
8174                         || l_std_underscore;
8175         --
8176         -- start print the summary for the child records
8177         --
8178         log_now (p_log_level => FND_FILE.OUTPUT
8179                 ,p_message    => l_message_line1
8180                 );
8181         log_now (p_log_level => FND_FILE.OUTPUT
8182                 ,p_message    => l_message_line2
8183                 );
8184 
8185         SELECT NVL(SUM(DECODE(record_status,G_RS_ERROR,1,0)),0), NVL(SUM(1),0)
8186         INTO l_count_exception_records, l_count_success_records
8187         FROM zx_registrations_int
8188         WHERE request_id = G_REQUEST_ID;
8189         l_message_line1 := RPAD(l_tot_records_msg||' '||l_count_success_records
8190                                 ,l_msg_header_unit_length,' ');
8191         l_message_line2 := RPAD(l_exe_records_msg||' '||l_count_exception_records
8192                                 ,l_msg_header_unit_length,' ');
8193 
8194         SELECT NVL(SUM(DECODE(record_status,G_RS_ERROR,1,0)),0), NVL(SUM(1),0)
8195         INTO l_count_exception_records, l_count_success_records
8196         FROM zx_exemptions_int
8197         WHERE request_id = G_REQUEST_ID;
8198         l_message_line1 := l_message_line1
8199           || RPAD(l_tot_records_msg||' '||l_count_success_records,
8200                   l_msg_header_unit_length,' ');
8201         l_message_line2 := l_message_line2
8202           || RPAD(l_exe_records_msg||' '||l_count_exception_records,
8203                   l_msg_header_unit_length,' ');
8204 
8205         SELECT NVL(SUM(DECODE(record_status,G_RS_ERROR,1,0)),0), NVL(SUM(1),0)
8206         INTO l_count_exception_records, l_count_success_records
8207         FROM zx_report_codes_assoc_int
8208         WHERE request_id = G_REQUEST_ID;
8209         l_message_line1 := l_message_line1
8210                         || l_tot_records_msg||' '||l_count_success_records;
8211         l_message_line2 := l_message_line2
8212                         || l_exe_records_msg||' '||l_count_exception_records;
8213 
8214         log_now (p_log_level => FND_FILE.OUTPUT
8215                 ,p_message    => l_message_line1
8216                 );
8217         log_now (p_log_level => FND_FILE.OUTPUT
8218                 ,p_message    => l_message_line2
8219                 );
8220         log_now (p_log_level => FND_FILE.OUTPUT
8221                 ,p_message    => ''
8222                 );
8223         log_now (p_log_level => FND_FILE.LOG
8224                 ,p_message   => '+--------------------------------------------------------------------'
8225                 );
8226         log_now (p_log_level => FND_FILE.LOG
8227                 ,p_message   => '|       PERF METRICS FOR MESSAGE_WRAPPER TO DISPLAY STATISTICS       '
8228                 );
8229         log_now (p_log_level => FND_FILE.LOG
8230                 ,p_message   => '| Time Taken by Message API to display Stats '||(SYSDATE-l_date1)*86400||' Secs'
8231                 );
8232         log_now (p_log_level => FND_FILE.LOG
8233                 ,p_message   => '+--------------------------------------------------------------------'
8234                 );
8235         --
8236         -- end print the summary for the child records
8237         --
8238       END IF;  -- p_interface_table_name = G_CUST_INTF_TABLE
8239 
8240     END IF; -- p_display_stats
8241 
8242     IF FND_API.to_boolean(p_display_messages) THEN
8243 
8244       BEGIN
8245         SELECT 1
8246         INTO l_num1
8247         FROM DUAL
8248         WHERE EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
8249                         FROM zx_errors_int
8250                        WHERE request_id = G_REQUEST_ID
8251                          AND ROWNUM=1);
8252       EXCEPTION
8253         WHEN OTHERS THEN
8254           l_num1 := 0;
8255       END;
8256 
8257       IF l_num1 = 1 THEN
8258         IF p_interface_table_name = G_CUST_INTF_TABLE THEN
8259           --
8260           -- table names are not translatable items, so we hardcode them
8261           --
8262 
8263           l_date1 := SYSDATE;
8264 
8265           fnd_message.set_name('ZX','ZX_PTP_ERROR_HEADER');
8266           fnd_message.set_token('TABLE_NAME', G_INTF_PTP_TABLE_NAME);
8267           l_message_line1 := fnd_message.get();
8268 
8269           log_now (p_log_level => FND_FILE.OUTPUT
8270                   ,p_message    => l_message_line1
8271                   );
8272           log_now (p_log_level => FND_FILE.OUTPUT
8273                   ,p_message    => ''
8274                   );
8275           log_now (p_log_level => FND_FILE.OUTPUT
8276                   ,p_message    => p_message_header_string_1
8277                   );
8278           log_now (p_log_level => FND_FILE.OUTPUT
8279                   ,p_message    => p_message_header_string_2
8280                   );
8281 
8282           fnd_message.set_name('ZX','ZX_PTP_ERR_CATEGORY_NAME');
8283           l_msg_ptp_table := fnd_message.get();
8284 
8285           fnd_message.set_name('ZX','ZX_EXE_ERR_CATEGORY_NAME');
8286           l_msg_exe_table := fnd_message.get();
8287 
8288           fnd_message.set_name('ZX','ZX_REG_ERR_CATEGORY_NAME');
8289           l_msg_reg_table := fnd_message.get();
8290 
8291           fnd_message.set_name('ZX','ZX_RCA_ERR_CATEGORY_NAME');
8292           l_msg_rca_table := fnd_message.get();
8293 
8294             ---------------------------------------------
8295             -- the message format will have 4 columns
8296             -- party_reference      max 27 characters
8297             -- party_site_reference max 27 characters
8298             -- category             max 15 characters
8299             -- Filler for next line of error message = 27+1+27+1+15+1 = 72
8300             -- Error message        132-72 = 60
8301             ---------------------------------------------
8302             -- this program has some hardcoded numbers based on the above
8303             -- please do not change any of the field sizes
8304             ---------------------------------------------
8305             l_filler_space_msg_line := '                                    '
8306                                      ||'                                    ';
8307             FOR cr in c_error_records_cust(cp_request_id    => G_REQUEST_ID
8308                                           ,cp_msg_ptp_table => l_msg_ptp_table
8309                                           ,cp_msg_exe_table => l_msg_exe_table
8310                                           ,cp_msg_reg_table => l_msg_reg_table
8311                                           ,cp_msg_rca_table => l_msg_rca_table)
8312             LOOP
8313               l_message_line1 :=
8314                  RPAD(SUBSTR(cr.intf_party_reference,1,27),28,' ')||
8315                  RPAD(SUBSTR(NVL(cr.intf_party_site_reference,' '),1,27),28,' ')||
8316                  RPAD(SUBSTR(cr.user_table_name,1,15),16,' ');
8317               l_message_line2 := cr.message_text;
8318 
8319               WHILE LENGTH(l_message_line2) > 60 LOOP
8320                 l_message_line1 := l_message_line1||SUBSTR(l_message_line2,1,60);
8321 
8322                 log_now (p_log_level => FND_FILE.OUTPUT
8323                         ,p_message    => l_message_line1
8324                         );
8325                 l_message_line2 := SUBSTR(l_message_line2,61);
8326                 l_message_line1 := l_filler_space_msg_line;
8327               END LOOP;
8328               log_now (p_log_level => FND_FILE.OUTPUT
8329                       ,p_message    => l_message_line1||l_message_line2
8330                       );
8331               log_now (p_log_level => FND_FILE.OUTPUT
8332                       ,p_message    => ' '
8333                       );
8334             END LOOP;
8335 
8336           log_now (p_log_level => FND_FILE.LOG
8337                   ,p_message   => '+--------------------------------------------------------------------'
8338                   );
8339           log_now (p_log_level => FND_FILE.LOG
8340                   ,p_message   => '|       PERF METRICS FOR MESSAGE_WRAPPER TO DISPLAY ERRORS           '
8341                   );
8342           log_now (p_log_level => FND_FILE.LOG
8343                   ,p_message   => '| Time Taken by Message API to display Errors '||(SYSDATE-l_date1)*86400||' Secs'
8344                   );
8345           log_now (p_log_level => FND_FILE.LOG
8346                   ,p_message   => '+--------------------------------------------------------------------'
8347                   );
8348         END IF; --  p_interface_table_name = G_CUST_INTF_TABLE
8349       END IF; -- lnum1
8350     END IF; -- p_display_messages
8351 
8352 
8353     log_now (p_log_level => FND_FILE.LOG
8354             ,p_message   => G_PROC_NAME||'(-)'
8355             );
8356     IF (G_DEBUG_LEVEL_PROCEDURE >= G_CURRENT_DEBUG_LEVEL_SET ) THEN
8357       FND_LOG.STRING(G_DEBUG_LEVEL_PROCEDURE,G_DEBUG_LOG_HEADER||'MESSAGE_WRAPPER','MESSAGE_WRAPPER(-)');
8358     END IF;
8359 
8360   EXCEPTION
8361     WHEN OTHERS THEN
8362       IF c_error_records_cust%ISOPEN THEN
8363         CLOSE c_error_records_cust;
8364       END IF;
8365       x_return_status := G_CONC_RET_STS_UNEXP_ERROR;
8366       x_msg_data := SQLERRM;
8367       log_now (p_log_level => FND_FILE.LOG
8368               ,p_message   => G_PROC_NAME||' : '||SQLERRM
8369               );
8370   END MESSAGE_WRAPPER;
8371 
8372 
8373   END ZX_PTP_IMPORT;