DBA Data[Home] [Help]

PACKAGE BODY: APPS.JL_BR_SPED_DATA_EXTRACT_PKG

Source


1 PACKAGE BODY JL_BR_SPED_DATA_EXTRACT_PKG AS
2 /* $Header: jlbraseb.pls 120.11.12020000.2 2012/07/20 09:31:14 rahulkum ship $ */
3 
4    l_cc_exists_flag  number :=1;       -- cost center setup flag. it will become zero if cost center setup not done in intialize proc.
5   l_exclusive_mode  VARCHAR2(1);
6   l_estb_acts_as_company VARCHAR2(1); -- This flag explains whethere LE is acting as company or Establishment is acting as company
7                                       -- Will populate this flag with 'Y' , if accounting_type is 'CENTRALIZED' and establishment_id is not null.
8   g_state_insc_tax_regime        zx_registrations.tax_regime_code%TYPE;
9   g_state_insc_tax               zx_registrations.tax%TYPE;
10   g_municipal_insc_tax_regime    zx_registrations.tax_regime_code%TYPE;
11   g_municipal_insc_tax           zx_registrations.tax%TYPE;
12 
13   PROCEDURE register_I051(p_account_flex_value fnd_flex_values.flex_value%TYPE );
14   PROCEDURE register_I052(p_account_flex_value fnd_flex_values.flex_value%TYPE );
15   PROCEDURE register_I250(p_journal_header_id gl_je_headers.je_header_id%TYPE,
16                           p_journal_name gl_je_headers.name%TYPE,
17                           p_journal_source gl_je_headers.je_source%TYPE,
18                           p_je_category gl_je_headers.je_category%TYPE);
19 
20   PROCEDURE revert_negative_journals;
21 
22   PROCEDURE initialize( p_ledger_id                     GL_SETS_OF_BOOKS.SET_OF_BOOKS_ID%TYPE,
23                         p_chart_of_accounts_id          GL_SETS_OF_BOOKS.chart_of_accounts_id%TYPE,
24                         p_accounting_type               VARCHAR2,
25                         p_legal_entity_id                  XLE_ENTITY_PROFILES.LEGAL_ENTITY_ID%TYPE,
26                         p_establishment_id                 XLE_ETB_PROFILES.ESTABLISHMENT_ID%TYPE,
27                         p_is_special_situation          VARCHAR2,
28                         p_period_type                   VARCHAR2,
29                         p_period_name                   GL_PERIOD_STATUSES.PERIOD_NAME%TYPE,
30                         p_adjustment_period_name        GL_PERIOD_STATUSES.PERIOD_NAME%TYPE,
31                         p_start_date                    VARCHAR2,
32                         p_end_date                      VARCHAR2,
33                         p_special_situation_indicator   VARCHAR2,
34                         p_bookkeeping_type              VARCHAR2,
35                         p_participant_type              JL_BR_SPED_PARTIC_CODES.PARTICIPANT_TYPE%TYPE,
36                         p_accounting_segment_type       VARCHAR2,
37                         p_coa_mapping_id                VARCHAR2,
38                         p_balance_statement_request_id   fnd_concurrent_requests.request_id%TYPE,
39                         p_agglutination_code_source     VARCHAR2,
40                         p_income_statement_request_id    fnd_concurrent_requests.request_id%TYPE,
41                         p_journal_for_rtf               NUMBER,
42                         p_hash_code                     VARCHAR2, -- auxillary book
43                         p_acct_stmt_ident               VARCHAR2,
44                         p_acct_stmt_header              VARCHAR2,
45                         p_gen_sped_text_file            VARCHAR2,
46                         p_inscription_source            VARCHAR2,
47                         p_le_state_reg_code             VARCHAR2,
48                         p_le_municipal_reg_code          VARCHAR2,
49                         p_state_insc_tax_id                  NUMBER,
50                         p_ebtax_state_reg_code          VARCHAR2,
51                         p_municipal_insc_tax_id           NUMBER,
52                         p_ebtax_municipal_reg_code       VARCHAR2);
53 
54 PROCEDURE revert_negative_journals IS
55 
56    cursor journals_with_negative_amts is
57    select distinct field6
58      from jl_br_sped_extr_data_t a
59     where request_id = g_concurrent_request_id
60       and field1='I250'
61       and not exists (select 1
62                         from jl_br_sped_extr_data_t
63                        where request_id = g_concurrent_request_id
64                          and field4 like '%####%'
65                          and field6 = a.field6
66                          and field1='I250')
67      and substr(field4,1,1) = '-';
68 
69   cursor accts_with_negative_amts is
70   select distinct field2 na ,field3 cc
71     from jl_br_sped_extr_data_t a
72    where field1 ='I250'
73      and request_id = g_concurrent_request_id
74      and not exists (select 1
75                        from jl_br_sped_extr_data_t
76                       where request_id = g_concurrent_request_id
77                         and field1 = 'I250'
78                         and field4 like '%####%'
79                         and field2 = a.field2
80                         and field3 = a.field3)
81      and substr(field4,1,1) = '-';
82 
83  /*  TYPE journal_array IS TABLE OF journals_with_negative_amts%ROWTYPE;
84    TYPE acct_array IS TABLE OF accts_with_negative_amts%ROWTYPE;
85    journals_tab  journal_array;
86    accts_tab     acct_array; */
87 
88    TYPE journals_tab_type IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
89    TYPE naturalaccts_tab_type IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
90    TYPE costcenters_tab_type IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
91 
92    journals_tab     journals_tab_type;
93    naturalaccts_tab naturalaccts_tab_type;
94    costcenters_tab  costcenters_tab_type;
95    l_api_name                CONSTANT VARCHAR2(30) :='REVERT_NEGATIVE_JOURNALS';
96  BEGIN
97      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
98             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
99 		     G_PKG_NAME||': '||l_api_name||'()+');
100       END IF;
101 
102     --fnd_file.put_line(fnd_file.log,'in revert negative journals');
103     BEGIN
104 
105     open journals_with_negative_amts;
106     fetch journals_with_negative_amts bulk collect into journals_tab;
107     close journals_with_negative_amts;
108 
109     --fnd_file.put_line(fnd_file.log,'in revert negative journals - After journals fetch');
110     open accts_with_negative_amts;
111     fetch accts_with_negative_amts bulk collect into naturalaccts_tab,costcenters_tab;
112     close accts_with_negative_amts;
113 
114    EXCEPTION
115      WHEN OTHERS THEN
116 
117       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
118       IF g_debug_flag = 'Y' THEN
119          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
120       END IF;
121       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
122            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
123       END IF;
124       g_errbuf := 'ERROR While reverting the negative journals '||SQLERRM;
125       g_retcode := 2;
126       return;
127     END;
128 
129    --fnd_file.put_line(fnd_file.log,'in revert negative journals - After accts fetch');
130 
131     BEGIN
132 
133     update jl_br_sped_extr_data_t a
134        set field4 = trim(to_char(abs(to_number(field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')),'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')),
135            field5 = decode(field5,'C','D','D','C')
136      where field1 = 'I250'
137        and substr(field4,1,1)='-'
138        and request_id = g_concurrent_request_id
139        and not exists (select 1
140                          from jl_br_sped_extr_data_t b
141                         where a.field6 = b.field6
142                           and b.field1 = 'I250'
143                           and b.request_id = g_concurrent_request_id
144                           and b.field4 like '%###%');
145 
146 
147     --fnd_file.put_line(fnd_file.log,'in revert negative journals - After I250 update');
148     forall i in journals_tab.first .. journals_tab.last
149 
150 	update jl_br_sped_extr_data_t a                            -- need to verify
151 	   set field4 = (select trim(to_char(sum(to_number(field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')),'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))
152 	                   from jl_br_sped_extr_data_t b
153 			              where b.field1 ='I250'
154 			                and b.field6 = journals_tab(i)
155 			                and b.field5 = 'D'
156 			                and b.request_id = g_concurrent_request_id)
157    where a.field1 = 'I200'
158      and a.field2 = journals_tab(i)
159 	   and a.request_id = g_concurrent_request_id;
160 
161    --fnd_file.put_line(fnd_file.log,'in revert negative journals - After I200 update');
162    forall i in naturalaccts_tab.first .. naturalaccts_tab.last
163 
164        update jl_br_sped_extr_data_t a
165           set field6  = (select trim(to_char(nvl(sum(to_number(field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')),0),'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))
166 	                         from jl_br_sped_extr_data_t b
167 			                    where b.field1 = 'I250'
168 			                      and b.field5 = 'D'
169 			                      and b.field2 = naturalaccts_tab(i)
170 			                      and b.field3 = costcenters_tab(i)
171 			                      and b.request_id = g_concurrent_request_id),
172                field7 =(select trim(to_char(nvl(sum(to_number(field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')),0),'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))
173 	                        from jl_br_sped_extr_data_t c
174 			                   where c.field1 = 'I250'
175 			                     and c.field5 = 'C'
176 			                     and c.field2 = naturalaccts_tab(i)
177 			                     and c.field3 = costcenters_tab(i)
178                            and c.request_id = g_concurrent_request_id)
179         where a.field1 = 'I155'
180 	        and a.field2 = naturalaccts_tab(i)
181 	        and a.field3 = costcenters_tab(i)
182 	        and a.request_id = g_concurrent_request_id;
183 
184  --fnd_file.put_line(fnd_file.log,'in revert negative journals - After I155 update');
185    EXCEPTION
186    WHEN OTHERS THEN
187 
188       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
189       IF g_debug_flag = 'Y' THEN
190          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
191       END IF;
192       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
193            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
194       END IF;
195       g_errbuf := 'ERROR While updating the negative journals '||SQLERRM;
196       g_retcode := 2;
197       return;
198    END;
199 
200    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
201         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
202 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
203    END IF;
204 
205 END revert_negative_journals;
206 
207   PROCEDURE initialize( p_ledger_id                     GL_SETS_OF_BOOKS.SET_OF_BOOKS_ID%TYPE,
208                         p_chart_of_accounts_id          GL_SETS_OF_BOOKS.chart_of_accounts_id%TYPE,
209                         p_accounting_type               VARCHAR2,
210                         p_legal_entity_id                  XLE_ENTITY_PROFILES.LEGAL_ENTITY_ID%TYPE,
211                         p_establishment_id                 XLE_ETB_PROFILES.ESTABLISHMENT_ID%TYPE,
212                         p_is_special_situation          VARCHAR2,
213                         p_period_type                   VARCHAR2,
214                         p_period_name                   GL_PERIOD_STATUSES.PERIOD_NAME%TYPE,
215                         p_adjustment_period_name        GL_PERIOD_STATUSES.PERIOD_NAME%TYPE,
216                         p_start_date                    VARCHAR2,
217                         p_end_date                      VARCHAR2,
218                         p_special_situation_indicator   VARCHAR2,
219                         p_bookkeeping_type              VARCHAR2,
220                         p_participant_type              JL_BR_SPED_PARTIC_CODES.PARTICIPANT_TYPE%TYPE,
221                         p_accounting_segment_type       VARCHAR2,
222                         p_coa_mapping_id                VARCHAR2,
223                         p_balance_statement_request_id   fnd_concurrent_requests.request_id%TYPE,
224                         p_agglutination_code_source     VARCHAR2,
225                         p_income_statement_request_id    fnd_concurrent_requests.request_id%TYPE,
226                         p_journal_for_rtf               NUMBER,
227                         p_hash_code                     VARCHAR2, -- auxillary book
228                         p_acct_stmt_ident               VARCHAR2,
229                         p_acct_stmt_header              VARCHAR2,
230                         p_gen_sped_text_file            VARCHAR2,
231                         p_inscription_source            VARCHAR2,
232                         p_le_state_reg_code             VARCHAR2,
233                         p_le_municipal_reg_code          VARCHAR2,
234                         p_state_insc_tax_id                  NUMBER,
235                         p_ebtax_state_reg_code          VARCHAR2,
236                         p_municipal_insc_tax_id           NUMBER,
237                         p_ebtax_municipal_reg_code       VARCHAR2) AS
238    l_api_name                CONSTANT VARCHAR2(30) :='INITIALIZE';
239    l_icx_format_mask         VARCHAR2(30);
240    l_bsv_count               NUMBER;
241    l_le_count                NUMBER;
242    l_fsg_output_check        VARCHAR2(100);
243 
244    CURSOR bsv_cur IS SELECT jg_info_v1 from jg_zz_vat_trx_gt;  -- jg_zz_vat_trx_gt is global temparary table to store the BSVs associated to LE or Establishment.
245 
246    /* Cursor used to find the position of account and sped qualifiers */
247    CURSOR pos_qualifier_cur(p_flex_value_set_id NUMBER) IS
248 	     SELECT rownum,
249 	            value_attribute_type
250 	      FROM ( SELECT  value_attribute_type
251 	               FROM  fnd_flex_validation_qualifiers
252 	              WHERE  id_flex_code           = 'GL#'
253 	                AND  id_flex_application_id = 101
254 	                AND  flex_value_set_id      = p_flex_value_set_id
255 	          ORDER BY assignment_date, value_attribute_type) ;
256 
257 BEGIN
258       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
259             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
260 		     G_PKG_NAME||': '||l_api_name||'()+');
261       END IF;
262 
263       g_created_by            := NVL(fnd_profile.value('USER_ID'),1);
264       g_creation_date         := sysdate;
265       g_last_updated_by       := NVL(fnd_profile.value('USER_ID'),1);
266       g_last_update_date      := sysdate;
267       g_last_update_login     := 1;
268       g_concurrent_request_id := NVL(fnd_profile.value('CONC_REQUEST_ID'),1);
269 
270 
271       IF UPPER(p_accounting_type) = 'DECENTRALIZED' AND p_establishment_id IS NULL THEN
272           FND_MESSAGE.SET_NAME('JL','JLBR_SPED_DECEN_ESTB_REQ');
273           g_errbuf :=  FND_MESSAGE.GET;
274           g_retcode :=2;
275           return;
276       END IF;
277 
278 
279 
280       --check whether establishment is acting as company ?? If so Assign 'Y' to l_estb_acts_as_company variable.
281       IF p_accounting_type = 'DECENTRALIZED' OR (p_accounting_type='CENTRALIZED' AND p_establishment_id IS NULL) THEN
282   	 l_estb_acts_as_company := 'N';
283       ELSE
284          l_estb_acts_as_company := 'Y';
285 	  FND_FILE.PUT_LINE(FND_FILE.LOG,G_PKG_NAME||': '||l_api_name||'(): Establishment Acts as Company');
286       END IF;
287 
288 
289 
290       --Initializing Globals for report paramters
291 
292      g_ledger_id                       :=  p_ledger_id;
293      g_chart_of_accounts_id            :=  p_chart_of_accounts_id;
294      g_accounting_type                 :=  p_accounting_type;
295      g_legal_entity_id                 :=  p_legal_entity_id;
296      g_establishment_id                :=  p_establishment_id;
297      g_special_situation_indicator     :=  p_special_situation_indicator;
298      g_bookkeeping_type                :=  p_bookkeeping_type;
299      g_participant_type                :=  p_participant_type;
300      g_accounting_segment_type         :=  p_accounting_segment_type;
301      g_coa_mapping_id                  :=  p_coa_mapping_id;
302      g_balance_statement_request_id    :=  p_balance_statement_request_id;
303      g_agglutination_code_source       :=  p_agglutination_code_source;
304      g_income_statement_request_id     :=  p_income_statement_request_id;
305      g_journal_for_rtf                 :=  p_journal_for_rtf;
306      g_hash_code                       :=  p_hash_code;
307      g_acct_stmt_ident                 :=  p_acct_stmt_ident;
308      g_acct_stmt_header                :=  p_acct_stmt_header;
309      g_gen_sped_text_file              :=  p_gen_sped_text_file;
310      g_adjustment_period_name          :=  p_adjustment_period_name;
311      g_inscription_source              :=  p_inscription_source;
312      g_le_state_reg_code               :=  p_le_state_reg_code;
313      g_le_municipal_reg_code           :=  p_le_municipal_reg_code;
314      g_state_tax_id                    :=  p_state_insc_tax_id;
315      g_ebtax_state_reg_code            :=  p_ebtax_state_reg_code;
316      g_municipal_reg_tax_id            :=  p_municipal_insc_tax_id;
317      g_ebtax_municipal_reg_code        :=  p_ebtax_municipal_reg_code;
318 
319     -- Initializing other variables
320 
321     fnd_file.put_line(fnd_file.log,'p_coa_id:'||p_coa_mapping_id||' g_coa_id:'||g_coa_mapping_id);
322 
323       --Deriving Ledger Id to which LE is associated
324 
325 
326     /* BEGIN
327 
328          SELECT  ledger_id
329            INTO  g_ledger_id
330            FROM  gl_ledger_le_v
331           WHERE  legal_entity_id = g_legal_entity_id
332             AND  ledger_category_code='PRIMARY';
333 
334      END;  */
335 
336       IF p_period_type = '02' THEN
337       	 g_closing_period_flag :=  'Y';
338       ELSE
339          g_closing_period_flag :=  'N';
340       END IF;
341 
342       BEGIN       --Deriving Company Name. Here check is done whether establishment is acting as company or LE is acting as company.
343 
344          IF UPPER(g_accounting_type) = 'DECENTRALIZED'          -- LE acts as company
345             OR (UPPER(g_accounting_type) = 'CENTRALIZED' AND g_establishment_id IS NULL) THEN
346 
347            SELECT  name
348              INTO  g_company_name
349              FROM  xle_entity_profiles
350             WHERE  legal_entity_id = g_legal_entity_id;
351 
352          ELSE   -- Establishment acts like company
353 
354 	    SELECT  name
355 	      INTO  g_company_name
356               FROM  xle_etb_profiles
357              WHERE  establishment_id = g_establishment_id
358 	       AND  legal_entity_id  = g_legal_entity_id ;
359 
360           END IF;
361       EXCEPTION
362       WHEN NO_DATA_FOUND THEN
363          IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
364            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No company found for Legal Entity Id: '||p_legal_entity_id||'  Establishment Id :'||p_establishment_id);
365          END IF;
366           g_errbuf := 'Company Not Found ';
367           g_retcode := 2;
368           return;
369       WHEN OTHERS THEN
370            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
371                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
372                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Faied to get company Name. Legal Entity Id: '||p_legal_entity_id||'  Establishment Id :'||p_establishment_id);
373            END IF;
374           g_errbuf := 'Faied to get Company Name ';
375           g_retcode := 2;
376           return;
377      END;
378 
379     BEGIN              -- Deriving the period_set_name,currency code
380 
381          SELECT  period_set_name,currency_code,accounted_period_type
382            INTO  g_period_set_name,g_currency_code,g_accounted_period_type
383            FROM  gl_ledgers
384           WHERE  ledger_id = g_ledger_id;
385 
386          FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Period Set Name: '||g_period_set_name||', Currency Code:'||g_currency_code||', Accounted Period Type :'||g_accounted_period_type);
387 
388     EXCEPTION
389        WHEN NO_DATA_FOUND THEN
390           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
391               FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No record exists for ledger: '||g_ledger_id);
392           END IF;
393           g_errbuf := 'Error while fetching Pertiod Set Name and Currency Code ';
394           g_retcode := 2;
395           return;
396        WHEN OTHERS THEN
397            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
398                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
399                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed to get period_set_name for Ledger: '||g_ledger_id);
400            END IF;
401           g_errbuf := 'Error while fetching Pertiod Set Name and Currency Code ';
402           g_retcode := 2;
403           return;
404     END;
405 
406 
407    /*  Checking Whether the Legal entity setup is in Exclusive Mode or in Shared Mode
408         If no BSVs exists then taking it as exlusive mode. In this case filtering of transactions,balances will be
409 	done only based on Ledger_id(AS one to one relation exists between Ledger and LE. */
410     BEGIN
411 
412         SELECT  COUNT(segment_value)
413           INTO  l_bsv_count
414           FROM  GL_LEDGER_NORM_SEG_VALS
415          WHERE  ledger_id = g_ledger_id
416            AND  legal_entity_id = g_legal_entity_id
417            AND  segment_type_code = 'B';
418 
419         IF  l_bsv_count = 0 THEN
420 
421             SELECT  count(distinct legal_entity_id)
422 	            INTO  l_le_count
423               FROM  gl_ledger_le_v
424              WHERE  ledger_id = g_ledger_id
425                AND  ledger_category_code='PRIMARY' ;
426 
427             IF  l_le_count = 1 THEN
428                 l_exclusive_mode := 'Y';
429 	    ELSE
430                 g_errbuf := 'More than one LE is associated to Ledger. And No BSVs exists. So It is not possible to filter the data from LE';
431                 g_retcode := 2;
432                 return;
433             END IF;
434 
435         ELSIF l_bsv_count >0 THEN
436               l_exclusive_mode := 'N';  -- shared mode
437         END IF;
438     EXCEPTION
439           WHEN OTHERS THEN
440              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
441                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
442                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed to check whether it is exclusive mode or shared mode');
443              END IF;
444              g_errbuf := 'Failed to check whether it is exclusive mode or shared mode';
445              g_retcode := 2;
446              return;
447     END;
448 
449     IF l_exclusive_mode ='N' THEN       /* If not exclusive mode deriving the BSVs attached to either LE or Establishment
450                                            for filtering and storing in a gt table(jg_zz_vat_trx_gt) */
451 
452 	  INSERT INTO jg_zz_vat_trx_gt (jg_info_n1,
453                                         jg_info_v1)
454           SELECT  g_concurrent_request_id,
455                   segment_value
456             FROM  GL_LEDGER_NORM_SEG_VALS
457            WHERE  ledger_id = g_ledger_id
458              AND  legal_entity_id = g_legal_entity_id
459              AND  segment_type_code = 'B'
460              AND  g_establishment_id is null -- IF running in Centralized mode and only for LE
461           UNION
462           SELECT  g_concurrent_request_id,
463                   entity_name
464             FROM  xle_bsv_associations
465            WHERE  legal_parent_id =  g_legal_entity_id
466              AND  legal_construct_id = g_establishment_id
467              AND  context = 'EST_BSV_MAPPING'
468              AND  entity_type = 'BALANCING_SEGMENT_VALUE'
469              AND  legal_construct ='ESTABLISHMENT'
470              AND  g_establishment_id is not null; -- running in decentralized mode or in centralized mode for establishment(Establishment acts as company)
471 
472 
473 
474         FND_FILE.PUT(FND_FILE.LOG,'Balancing Segments associated to the Comapny are :');
475 
476 	FOR bsv_rec in bsv_cur LOOP            --To display balancing segments associated to LE or ESTB (Company)
477 
478                  FND_FILE.PUT(FND_FILE.LOG,bsv_rec.jg_info_v1||'   ');
479 
480 	END LOOP;
481 
482                  FND_FILE.PUT_LINE(FND_FILE.LOG,'   ');
483     END IF; -- End for IF l_exclusive_mode ='N'
484 
485     IF p_special_situation_indicator IS NULL THEN
486 
487         BEGIN
488 
489           SELECT  start_date, end_date
490             INTO  g_start_date,g_end_date
491             FROM  gl_periods
492            WHERE  period_name = p_period_name
493              AND  period_set_name = g_period_set_name;
494 
495            g_period_name := p_period_name;
496 
497         EXCEPTION
498           WHEN NO_DATA_FOUND THEN
499              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
500              		 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Not a valid period: '||p_period_name);
501              END IF;
502             g_errbuf := 'Not a valid period ';
503             g_retcode := 2;
504             return;
505           WHEN OTHERS THEN
506              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
507                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
508                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed to get start and end dates for '||p_period_name);
509              END IF;
510              g_errbuf := 'Failed to get start and end dates for '||p_period_name;
511              g_retcode := 2;
512              return;
513         END;
514 
515       ELSE       -- If special situation indicator not null.
516 
517          BEGIN
518 
519             l_icx_format_mask := NVL(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'RRRR/MM/DD');
520             FND_FILE.PUT_LINE(FND_FILE.LOG,'ICX Date Format Mask : '||l_icx_format_mask);
521             g_start_date := to_date(p_start_date,l_icx_format_mask);
522             g_end_date   := to_date(p_end_date,l_icx_format_mask);
523 
524             SELECT  period_name
525               INTO  g_period_name
526               FROM  gl_periods
527              WHERE  period_set_name = g_period_set_name
528                AND  period_type = g_accounted_period_type
529                AND  g_start_date BETWEEN start_date AND end_date
530                AND  g_end_date BETWEEN start_date AND end_date;
531 
532           EXCEPTION
533           WHEN NO_DATA_FOUND THEN
534             IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
535             		FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Start and end dates do not belong to same period: '||p_start_date||' '||p_end_date);
536             END IF;
537              g_errbuf := 'Start and end date do not belong to same period: '||p_start_date||' '||p_end_date;
538              g_retcode := 2;
539              return;
540           WHEN OTHERS THEN
541              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
542                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
543                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed to get period name for given start and end dates '||p_start_date||' '||p_end_date);
544 
545              END IF;
546               g_errbuf := 'Failed to get period name for given start and end date '||p_start_date||' '||p_end_date||'  '||SQLERRM;
547               g_retcode := 2;
548               return;
549           END;
550 
551       END IF; -- End for check on special situation indicator.
552 
553       IF g_adjustment_period_name IS NOT NULL THEN
554 
555        BEGIN
556           SELECT  start_date, end_date
557             INTO  g_adjustment_period_start_date,g_adjustment_period_end_date
558             FROM  gl_periods
559            WHERE  period_name = p_adjustment_period_name
560              AND  period_set_name = g_period_set_name
561              AND  adjustment_period_flag = 'Y';
562 
563         EXCEPTION
564           WHEN NO_DATA_FOUND THEN
565              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
566              		 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Not a valid period: '||p_period_name);
567              END IF;
568             g_errbuf := 'Not a valid adjustment period ';
569             g_retcode := 2;
570             return;
571           WHEN OTHERS THEN
572              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
573                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
574                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed to get start and end dates for '||p_period_name);
575              END IF;
576              g_errbuf := 'Failed to get start and end dates for adjustment period '||p_period_name;
577              g_retcode := 2;
578              return;
579         END;
580 
581       END IF;
582 
583       FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Start_date  :'||g_start_date||' End_date: '||g_end_date);
584 
585      BEGIN
586          SELECT  application_column_name      -- finding which segment column is used for balancing segment storage
587            INTO  g_bsv_segment
588            FROM  fnd_segment_attribute_values
589           WHERE  id_flex_code            = 'GL#'
590             AND  attribute_value         = 'Y'
591             AND  segment_attribute_type  = 'GL_BALANCING'
592             AND  application_id          = 101
593             AND  id_flex_num             = g_chart_of_accounts_id;
594      EXCEPTION
595           WHEN NO_DATA_FOUND THEN
596             IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
597        	        FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No balacing segment found in fnd_segment_attribute_values' );
598             END IF;
599             g_errbuf := 'No balancing segment found in fnd_segment_attribute_values for '||g_chart_of_accounts_id;
600             g_retcode := 2;
601             return;
602           WHEN OTHERS THEN
603              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
604                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
605                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed to get column used for Balancing segment');
606              END IF;
607             g_errbuf := 'Failed to get column used for Balancing segment';
608             g_retcode := 2;
609             return;
610        END;
611 
612        FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Balancing segment: '||g_bsv_segment);
613 
614      BEGIN
615          SELECT  application_column_name      -- finding which segment column is used for natural account segment storage
616            INTO  g_account_segment
617            FROM  fnd_segment_attribute_values
618           WHERE  id_flex_code            = 'GL#'
619             AND  attribute_value         = 'Y'
620             AND  segment_attribute_type  = 'GL_ACCOUNT'
621             AND  application_id          = 101
622             AND  id_flex_num             = g_chart_of_accounts_id;
623 
624        EXCEPTION
625           WHEN NO_DATA_FOUND THEN
626             IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
627               FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No Natural account segment found in fnd_segment_attribute_values' );
628             END IF;
629             g_errbuf := 'No Natural account segment found in fnd_segment_attribute_values for '||g_chart_of_accounts_id;
630             g_retcode := 2;
631             return;
632           WHEN OTHERS THEN
633              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
634                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
635                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed to get column used for Natural account');
636              END IF;
637             g_errbuf := 'Failed to get column used for Natural account';
638             g_retcode := 2;
639             return;
640      END;
641 
642        FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Natural Account segment: '||g_account_segment);
643 
644      BEGIN
645          SELECT  application_column_name      -- finding which segment column is used for cost center storage
646            INTO  g_cost_center_segment
647            FROM  fnd_segment_attribute_values
648           WHERE  id_flex_code            = 'GL#'
649             AND  attribute_value         = 'Y'
650             AND  segment_attribute_type  = 'FA_COST_CTR'
651             AND  application_id          = 101
652             AND  id_flex_num             = g_chart_of_accounts_id;
653 
654 	     FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Cost center segment: '||g_cost_center_segment);
655 
656 	   EXCEPTION
657           WHEN NO_DATA_FOUND THEN
658             IF (G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
659               FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No cost center segment found in fnd_segment_attribute_values' );
660             END IF;
661 
662 	    l_cc_exists_flag := 0; -- cost center setup doesn't exist
663             g_cost_center_segment := 'SEGMENT20'; -- To frame the dynamic query in I155,I310 assigned this column name. But we won't retrieve this column values.
664 	                                          -- If l_cc_exists_flag = 0 then we will retrieve null
665           WHEN OTHERS THEN
666              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
667                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
668                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed to get column used for cost center');
669              END IF;
670 
671 	    l_cc_exists_flag := 0;
672             g_cost_center_segment := 'SEGMENT20';
673 
674        END;
675 
676              -- Deriving value set id for Natural Accounts
677      BEGIN
678 
679          SELECT  flex_value_set_id
680            INTO  g_account_value_set_id
681            FROM  fnd_id_flex_segments
682           WHERE  id_flex_num    = g_chart_of_accounts_id
683             AND  id_flex_code   ='GL#'
684             AND  application_id = 101
685             AND  application_column_name = g_account_segment;
686 
687       EXCEPTION
688           WHEN NO_DATA_FOUND THEN
689              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
690                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No value set found for: '||g_account_segment);
691              END IF;
692             g_errbuf := 'No value set found for: '||g_account_segment;
693             g_retcode := 2;
694             return;
695           WHEN OTHERS THEN
696              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
697                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
698                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed in retrieving value set'||g_account_segment);
699              END IF;
700             g_errbuf := 'Failed in retrieving value set for'||g_account_segment;
701             g_retcode := 2;
702             return;
703      END;
704 
705      FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Value set id for Natural Account :'||g_account_value_set_id);
706 
707      -- Deriving value set id for Cost Center (only if cost center setup was done)
708 
709      IF l_cc_exists_flag <>0 THEN
710 
711      BEGIN
712 
713          SELECT  flex_value_set_id
714            INTO  g_cost_center_value_set_id
715            FROM  fnd_id_flex_segments
716           WHERE  id_flex_num    = g_chart_of_accounts_id
717             AND  id_flex_code   ='GL#'
718             AND  application_id = 101
719             AND  application_column_name = g_cost_center_segment;
720 
721           FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Value set id for Cost Center :'||g_cost_center_value_set_id);
722 
723       EXCEPTION
724           WHEN NO_DATA_FOUND THEN
725             IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
726                FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No value set found for: '||g_cost_center_segment);
727             END IF;
728 	          g_errbuf := 'No value set found for: '||g_cost_center_segment;
729             g_retcode := 2;
730             return;
731           WHEN OTHERS THEN
732              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
733                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
734                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed in retrieving value set'||g_cost_center_segment);
735              END IF;
736             g_errbuf := 'Failed in retrieving value set for'||g_cost_center_segment;
737             g_retcode := 2;
738             return;
739        END;
740 
741        END IF; -- END for IF l_cc_exists_flag <> 0
742 
743        /* Deriving the positions of 'Gl account type','Sped account type' and 'Sped Exclusion' qualifiers */
744        BEGIN
745            -- deriving sped account qualifier position
746            FOR pos_qual_rec IN pos_qualifier_cur(g_account_value_set_id)--(acct_vsetid)
747 	         LOOP
748 	             IF pos_qual_rec.value_attribute_type = 'SPED_ACCOUNT_TYPE' THEN
749 	                g_sped_qualifier_position  := pos_qual_rec.rownum;
750 	                EXIT ;
751 	             END IF;
752            END LOOP;
753 
754            --deriving account qualifier position
755            FOR pos_qual_rec IN pos_qualifier_cur(g_account_value_set_id)--(acct_vsetid)
756            LOOP
757 	            IF pos_qual_rec.value_attribute_type = 'GL_ACCOUNT_TYPE' THEN
758 	                g_account_qualifier_position := pos_qual_rec.rownum;
759 	                EXIT ;
760               END IF;
761            END LOOP;
762 
763            --deriving sped exclustion qualifier position
764            FOR pos_qual_rec IN pos_qualifier_cur(g_account_value_set_id)--(acct_vsetid)
765            LOOP
766 	            IF pos_qual_rec.value_attribute_type = 'SPED_EXCLUSION' THEN
767 	                g_exclusion_qualifier_position := pos_qual_rec.rownum;
768 	                EXIT ;
769               END IF;
770            END LOOP;
771 
772            g_exclusion_qualifier_position := nvl(g_exclusion_qualifier_position,99);
773 
774            FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Position of sped qualifier : '||g_sped_qualifier_position);
775            FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Position of account qualifier : '||g_account_qualifier_position);
776            FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Position of sped exclusion qualifier : '||g_exclusion_qualifier_position);
777 
778        EXCEPTION
779           WHEN OTHERS THEN
780              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
781                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
782                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed in retrieving value set'||g_cost_center_segment);
783              END IF;
784             g_errbuf := 'Failed in Deriving the position of account and sped qualifiers';
785             g_retcode := 2;
786             return;
787        END;
788 
789        BEGIN
790         IF p_balance_statement_request_id is not null THEN
791 
792            SELECT  argument7 -- balancesheet report_id
793              INTO  g_balance_statement_report_id
794              FROM  fnd_concurrent_requests
795             WHERE  request_id = p_balance_statement_request_id;
796         END IF;
797 
798         EXCEPTION
799           WHEN OTHERS THEN
800              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
801                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
802                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed in retrieving Balance Sheet Report ID');
803              END IF;
804        END;
805 
806       FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Balance Sheet Report Id : '||g_balance_statement_report_id);
807 
808       BEGIN
809       IF p_income_statement_request_id IS NOT NULL THEN
810            SELECT  argument7 --Income Statement report_id
811              INTO  g_income_statement_report_id
812              FROM  fnd_concurrent_requests
813            WHERE  request_id = p_income_statement_request_id;
814       END IF;
815 
816         EXCEPTION
817           WHEN OTHERS THEN
818              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
819                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
820                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed in retrieving Income Statement Report ID');
821              END IF;
822        END;
823       FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Income Statement Report Id : '||g_income_statement_report_id);
824 
825    BEGIN
826 
827      SELECT  COUNT(*)
828        INTO  g_ap_ar_auxbook_exist
829        FROM  jl_br_cinfos_books
830       WHERE  legal_entity_id = g_legal_entity_id
831         AND  ((l_estb_acts_as_company='N' AND establishment_id is null)
832 	       OR (l_estb_acts_as_company='Y' AND establishment_id = g_establishment_id))
833         AND  bookkeeping_type = 'A'
834         AND  auxiliary_book_source = 'AP/AR';
835 
836   EXCEPTION
837       WHEN OTHERS THEN
838            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
839                FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
840                FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Verifiying the auxiliary books setup availabiblity.');
841            END IF;
842   END;
843 
844   IF substr(g_bookkeeping_type,1,1) = 'A' AND g_ap_ar_auxbook_exist = 0 THEN
845       FND_FILE.PUT_LINE(FND_FILE.LOG,'Auxiliary Book is not defined for Book Source AP/AR');
846   END IF;
847 
848 
849 
850        /* BEGIN: Deriving the column type of first column in balance statement report  */
851 
852     IF g_bookkeeping_type <> 'A/R' AND g_bookkeeping_type <> 'A/B' THEN
853     IF g_balance_statement_request_id IS NOT NULL THEN
854        BEGIN
855             SELECT  amount_type
856               INTO  l_fsg_output_check
857               FROM (SELECT  r2.*
858                       FROM  fnd_concurrent_requests req,
859                             rg_reports r1,
860                             rg_report_axes_v r2
861                      WHERE  req.request_id = g_balance_statement_request_id
862                        AND  r1.report_id   = req.argument7  --arguement7 in fnd_concurrent_requests holds the report id
863                        AND  r1.column_set_id = r2.axis_set_id
864                        ORDER BY r2.sequence)
865              WHERE  ROWNUM = 1;
866 
867 	 FND_FILE.PUT_LINE(FND_FILE.LOG,'Amount Type in Balance Sheet Report is :'||l_fsg_output_check);
868 
869        EXCEPTION
870            WHEN NO_DATA_FOUND THEN
871                IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
872                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No data found for Balance sheet request Id:'||g_balance_statement_request_id);
873                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
874                END IF;
875 	   WHEN OTHERS THEN
876 	       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
877                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed to get information for Balance sheet request Id:'||g_balance_statement_request_id);
878                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
879 	       END IF;
880        END;
881 
882    END IF;    --END for IF g_balance_statement_request_id is not null
883 
884        /*Checking the amount type of first column in income statement report */
885 
886    IF g_income_statement_request_id IS NOT NULL THEN
887        BEGIN
888 
889             SELECT  amount_type
890               INTO  l_fsg_output_check
891               FROM  (SELECT  r2.*
892                        FROM  fnd_concurrent_requests req,
893                              rg_reports r1,
894                              rg_report_axes_v r2
895                       WHERE  req.request_id = g_income_statement_request_id
896                         AND  r1.report_id   = req.argument7  --arguement7 in fnd_concurrent_requests holds the report id
897                         AND  r1.column_set_id = r2.axis_set_id
898                       ORDER BY r2.sequence)
899               WHERE  ROWNUM = 1;
900 
901 	FND_FILE.PUT_LINE(FND_FILE.LOG,'Amount Type in Income Statement Report is :'||l_fsg_output_check);
902 
903        EXCEPTION
904            WHEN NO_DATA_FOUND THEN
905                IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
906                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No data found exception while trying to fetch amount type for Income Statement Report'||g_income_statement_request_id);
907                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
908                END IF;
909            WHEN OTHERS THEN
910                IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
911                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Failed to get information for Income statement request id:'||g_income_statement_request_id);
912                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
913                END IF;
914        END;
915 
916    END IF; --    End for IF g_income_statement_request_id is not null
917    END IF; --IF g_bookkeping_type <> 'A/R' AND g_bookkeeping_type <> 'A/B' THEN
918 
919    IF p_inscription_source = 'ZX' THEN
920 
921       IF p_state_insc_tax_id IS NOT NULL THEN
922 
923 	    BEGIN
924                  SELECT tax_regime_code, tax
925                    INTO g_state_insc_tax_regime,g_state_insc_tax
926                    FROM zx_taxes_b
927                   WHERE tax_id = p_state_insc_tax_id;
928 
929 	    EXCEPTION
930                WHEN OTHERS THEN
931                   IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
932                      FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error while retrieving the tax regime and tax used to create state inscription.');
933 		     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
934                   END IF;
935             END;
936 
937       END IF; -- End for IF p_state_insc_tax_id IS NOT NULL
938 
939       IF p_municipal_insc_tax_id IS NOT NULL THEN
940 
941 	    BEGIN
942                  SELECT tax_regime_code, tax
943                    INTO g_municipal_insc_tax_regime,g_municipal_insc_tax
944                    FROM zx_taxes_b
945                   WHERE tax_id = p_municipal_insc_tax_id;
946 
947 	    EXCEPTION
948                WHEN OTHERS THEN
949                   IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
950                      FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error while retrieving the tax regime and tax used to create municipal inscription.');
951 		     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
952                   END IF;
953             END;
954 
955       END IF; -- End for IF p_state_insc_tax_id IS NOT NULL
956 
957    END IF; -- End for IF p_inscription_source = 'ZX'(EBTax);
958 
959    BEGIN
960        INSERT INTO JL_BR_SPED_EXTR_PARAM
961       (REQUEST_ID,
962        LEDGER_ID,
963        LEGAL_ENTITY_ID,
964        ESTABLISHMENT_ID,
965        PERIOD_TYPE,
966        PERIOD_NAME,
967        ADJUSTMENT_PERIOD,
968        SPEC_SITU_INDIC,
969        SPEC_SITU_START_DATE,
970        SPEC_SITU_END_DATE,
971        BOOKKEEPING_TYPE,
972        ESTB_ACCT_TYPE,
973        PARTICIPANT_TYPE,
974        PARTIC_ACCT_SEGMENT,
975        CONSOL_MAP_ID,
976        BALSHEET_REP_REQUEST_ID,
977        INCMSTMT_REP_REQUEST_ID,
978        AGC_SOURCE,
979        RTF_FILE_SOURCE,
980        HAS_CODE,
981        ACCT_STMT_INDF,
982        ACCT_STMT_HEADER,
983        DATA_EXIST,
984        REPORT_MODE,
985        REGISTRATION_SOURCE,
986        XLE_STATE_INS_REG_CODE,
987        XLE_CITY_INS_REG_CODE,
988        ZX_STATE_INS_TAX_ID,
989        ZX_STATE_INS_REG_CODE,
990        ZX_CITY_INS_TAX_ID,
991        ZX_CITY_INS_REG_CODE,
992        CREATED_BY,
993        CREATION_DATE,
994        LAST_UPDATED_BY,
995        LAST_UPDATE_DATE,
996        LAST_UPDATE_LOGIN)
997        VALUES ( g_concurrent_request_id,
998                 g_ledger_id,
999                 p_legal_entity_id,
1000                 p_establishment_id,
1001 		p_period_type,
1002                 g_period_name,
1003 		p_adjustment_period_name,
1004                 p_special_situation_indicator,
1005 		g_start_date,
1006 		g_end_date,
1007                 p_bookkeeping_type,
1008                 p_accounting_type,
1009                 p_participant_type,
1010                 p_accounting_segment_type,
1011                 p_coa_mapping_id,
1012                 p_balance_statement_request_id,
1013                 p_income_statement_request_id,
1014                 p_agglutination_code_source,
1015                 p_journal_for_rtf ,  --rtf_file_soource
1016                 p_hash_code,
1017                 p_acct_stmt_ident,  --acct_stmt_indf
1018                 p_acct_stmt_header,   --acct_stmt_header
1019                 'N',
1020                 'P',    --report_mode
1021                 p_inscription_source,
1022                 p_le_state_reg_code,
1023                 p_le_municipal_reg_code,
1024                 p_state_insc_tax_id,
1025                 p_ebtax_state_reg_code,
1026                 p_municipal_insc_tax_id ,
1027                 p_ebtax_municipal_reg_code,
1028                 g_created_by,
1029                 g_creation_date,
1030                 g_last_updated_by,
1031                 g_last_update_date,
1032                 g_last_update_login
1033                );
1034 
1035         EXCEPTION
1036           WHEN OTHERS THEN
1037              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1038                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1039                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR While inserting into JL_BR_SPED_EXTR_PARAM    ');
1040              END IF;
1041             g_errbuf := 'ERROR While inserting into JL_BR_SPED_EXTR_PARAM    '||SQLERRM;
1042             g_retcode := 2;
1043             return;
1044       END;
1045 
1046       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1047        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
1048 	                  	G_PKG_NAME||': ' ||l_api_name||'()-');
1049       END IF;
1050 
1051 EXCEPTION
1052    WHEN OTHERS THEN
1053 
1054       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1055       IF g_debug_flag = 'Y' THEN
1056          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
1057       END IF;
1058       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1059            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1060       END IF;
1061       g_errbuf := 'ERROR in Intialize Procedure    '||SQLERRM;
1062       g_retcode := 2;
1063       return;
1064 
1065 
1066 
1067 END initialize;
1068 
1069 FUNCTION get_segment_value(ccid NUMBER,segment_code VARCHAR2) RETURN VARCHAR2 AS
1070 /* This function is to return the value of segment for a code_combination_id.
1071 If segment_code is segment1, then the value of segment1 for the given code_combination_id(ccid) will be returned*/
1072 segment_value  gl_code_combinations.segment1%TYPE;
1073 sqlstmt        VARCHAR2(100);
1074 l_api_name     CONSTANT VARCHAR2(30) :='GET_SEGMENT_VALUE';
1075 BEGIN
1076 
1077 
1078     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1079             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
1080 		     G_PKG_NAME||': '||l_api_name||'()+');
1081     END IF;
1082 
1083    sqlstmt := 'SELECT to_char('||segment_code||') FROM gl_code_combinations WHERE code_combination_id = :ccid';
1084 
1085    BEGIN
1086          EXECUTE IMMEDIATE sqlstmt INTO segment_value USING  ccid;
1087    EXCEPTION
1088          WHEN NO_DATA_FOUND THEN
1089               IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1090                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1091                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No '||segment_code||' value found for: '||ccid);
1092               END IF;
1093               RETURN NULL;
1094          WHEN OTHERS THEN
1095           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1096                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1097                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Faied to get '||segment_code||' value for '||ccid);
1098            END IF;
1099            RETURN NULL;
1100 
1101    END;
1102    RETURN segment_value;
1103 
1104       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1105        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
1106 	                  	G_PKG_NAME||': ' ||l_api_name||'()-');
1107       END IF;
1108 EXCEPTION
1109    WHEN OTHERS THEN
1110 
1111       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1112       IF g_debug_flag = 'Y' THEN
1113          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
1114       END IF;
1115       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1116            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1117       END IF;
1118 
1119 END get_segment_value;
1120 
1121 FUNCTION get_account_type(p_flex_Value_id  fnd_flex_values.flex_value_id%TYPE) RETURN VARCHAR2 AS
1122 /* This function returns the Account Type for flex value .
1123   For the flex value if there is sped account type other than 'Not applibale' then this function
1124   returns the corresponding sped account code, otherwise it will return account code for the
1125   GL_ACCOUNT_TYPE*/
1126 l_position_qualifier_account INTEGER;
1127 l_position_qualifier_sped    INTEGER;
1128 l_SPED_CODE                  VARCHAR2(1);
1129 l_SPED_CODE_VALUE            VARCHAR2(2);
1130 l_ACCT_CODE                  VARCHAR2(1);
1131 l_ACCT_CODE_VALUE            VARCHAR2(2);
1132 l_api_name                   CONSTANT VARCHAR2(30) :='GET_ACCOUNT_TYPE';
1133 
1134 BEGIN
1135 
1136    IF g_sped_qualifier_position IS NOT NULL THEN
1137       BEGIN
1138          SELECT DECODE(vs.flex_value, 'T', 'O', substrb( fnd_global.newline
1139 	                    ||vs.compiled_value_attributes
1140 	                    ||fnd_global.newline, instrb( fnd_global.newline
1141 	                    ||vs.compiled_value_attributes
1142 	                    ||fnd_global.newline, fnd_global.newline,1,g_sped_qualifier_position)+1, 1 ))
1143 	         INTO  l_sped_code
1144 	         FROM  fnd_flex_values vs
1145 	        WHERE  flex_value_id=p_flex_Value_id;
1146        EXCEPTION
1147          WHEN NO_DATA_FOUND THEN
1148               l_sped_code := null;
1149          WHEN OTHERS THEN
1150            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1151                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1152                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Faied to sped accounting code for: '||p_flex_value_id);
1153            END IF;
1154       END;
1155    END IF;
1156 
1157 	  IF l_sped_code IS NULL OR l_sped_code = 'N' THEN
1158 
1159         BEGIN
1160 
1161                SELECT  DECODE(vs.flex_value, 'T', 'O', substrb( fnd_global.newline
1162 	                         ||vs.compiled_value_attributes
1163 	                         ||fnd_global.newline, instrb( fnd_global.newline
1164 	                         ||vs.compiled_value_attributes
1165 	                         ||fnd_global.newline, fnd_global.newline,1,g_account_qualifier_position)+1, 1 ))
1166 	               INTO  l_acct_code
1167 	               FROM  fnd_flex_values vs
1168 	              WHERE  flex_value_id=p_flex_value_id;
1169 
1170        EXCEPTION
1171          WHEN NO_DATA_FOUND THEN
1172               l_acct_code := null;
1173          WHEN OTHERS THEN
1174            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1175                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1176                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Faied to get accounting code for: '||p_flex_value_id);
1177            END IF;
1178        END;
1179 
1180         SELECT  DECODE(l_acct_code, 'A', '01', 'L','02', 'O','03', 'E','04', 'R','04',null)
1181 	        INTO  l_acct_code_value
1182 	        FROM  DUAL;
1183 
1184      ELSE
1185 
1186         SELECT  DECODE (l_sped_code, 'C', '05', 'T','09',null)
1187           INTO  l_sped_code_value
1188           FROM  DUAL;
1189 
1190 	   END IF;
1191 
1192      RETURN NVL(l_sped_code_value,l_acct_code_value);
1193 
1194 END get_account_type;
1195 
1196 FUNCTION get_participant_code (p_je_header_id gl_je_headers.je_header_id%TYPE,
1197                                p_je_line_num gl_je_lines.je_line_num%TYPE,
1198                                p_journal_source gl_je_headers.je_source%TYPE,
1199                                p_je_line_ccid gl_je_lines.code_combination_id%TYPE,
1200                                p_third_party_id NUMBER,
1201                                p_third_party_site_id NUMBER) RETURN VARCHAR2 AS
1202 l_participant_code      jl_br_sped_partic_codes.participant_code%TYPE := NULL;
1203 l_third_party_count     NUMBER := 0;
1204 l_third_party_id        NUMBER;
1205 l_third_party_site_id   NUMBER;
1206 l_receivable_category   VARCHAR2(50);
1207 l_partic_active_flag    NUMBER := 0;
1208 l_api_name              CONSTANT VARCHAR2(30) :='GET_PARTICIPANT_CODE';
1209 
1210 BEGIN
1211     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1212             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
1213 	                                     G_PKG_NAME||': '||l_api_name||'()+');
1214     END IF;
1215 
1216 
1217     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1218          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Journal Header: '||p_je_header_id||'  Journal Line: '||p_je_line_num||'  Source'||p_journal_source);
1219          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'CCID :'||p_je_line_ccid||' Third Party Id:'||p_third_party_id||' Site Id :'||p_third_party_site_id);
1220     END IF;
1221 
1222 
1223   -- In case of Manual Journal, User can enter Participant Code at Jounral Header or Lines level GDF.
1224   --
1225 
1226    IF p_journal_source = 'Manual'  THEN
1227 
1228       BEGIN
1229 
1230           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1231                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
1232 	                                   'Manual Journal:'||p_je_header_id||'-'||p_je_line_num);
1233           END IF;
1234 
1235 
1236        SELECT  nvl(jl.global_attribute5,jh.global_attribute5)
1237          INTO  l_participant_code
1238          FROM  gl_je_headers jh
1239                ,gl_je_lines jl
1240                ,jl_br_sped_partic_codes pc
1241         WHERE  jh.je_header_id = jl.je_header_id
1242           AND  jh.je_header_id = p_je_header_id
1243           AND  jl.je_line_num  = p_je_line_num
1244           AND  pc.ledger_id = g_ledger_id
1245           AND  nvl(jl.global_attribute5,jh.global_attribute5) = pc.participant_code    --- to get the particpant code
1246           AND  ((g_participant_type in ('SUPPLIERS','CUSTOMERS','SUPPLIER_SITES','CUSTOMER_SITES') AND participant_type = g_participant_type) OR
1247                (g_participant_type = 'ACCOUNTING_FLEXFIELD_SEGMENT' AND pc.segment_type = g_accounting_segment_type) OR
1248                (g_participant_type = 'SUPPLIERS_AND_CUSTOMERS' AND participant_type = 'SUPPLIERS') OR
1249                (g_participant_type = 'SUPPLIERS_AND_CUSTOMERS' AND participant_type = 'CUSTOMERS') OR
1250                (g_participant_type = 'SUPPLIER_AND_CUSTOMER_SITES' AND participant_type = 'SUPPLIER_SITES') OR
1251                (g_participant_type = 'SUPPLIER_AND_CUSTOMER_SITES' AND participant_type = 'CUSTOMER_SITES') );
1252 
1253          EXCEPTION
1254              WHEN NO_DATA_FOUND THEN
1255                   IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1256                          FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLCODE||' '||SQLERRM);
1257                   END IF;
1258          	  l_participant_code := NULL;
1259              WHEN OTHERS THEN
1260                   IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1261                          FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLCODE||' '||SQLERRM);
1262                   END IF;
1263                   l_participant_code := NULL;
1264           END;
1265 
1266          BEGIN
1267            SELECT 1                --if no data found means, no active relation in the report period.
1268              INTO l_partic_active_flag
1269              FROM dual
1270             WHERE EXISTS ( SELECT 1 FROM jl_br_sped_partic_rel rel
1271             WHERE  rel.LEGAL_ENTITY_ID  = g_legal_entity_id
1272               AND ((l_estb_acts_as_company ='Y' AND establishment_id=g_establishment_id)
1273                    OR  (l_estb_acts_as_company='N' AND establishment_id is null))   --- Need to modify
1274               AND rel.participant_code = l_participant_code
1275               AND rel.effective_from <= g_end_date
1276               AND nvl(rel.effective_to,sysdate) >= g_start_date);
1277 
1278           EXCEPTION
1279              WHEN NO_DATA_FOUND THEN
1280                   IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1281                          FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLCODE||' '||SQLERRM);
1282                          FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Book keeping type: '||g_bookkeeping_type||'Source'||p_journal_source||'Participant_type'||g_participant_type);
1283                   END IF;
1284 		  l_participant_code := NULL;
1285              WHEN OTHERS THEN
1286                   IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1287                          FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLCODE||' '||SQLERRM);
1288                   END IF;
1289                   l_participant_code := NULL;
1290           END;
1291           RETURN   l_participant_code;
1292 
1293    ELSIF g_participant_type = 'ACCOUNTING_FLEXFIELD_SEGMENT' THEN  -- Else part for IF p_journal_source = 'Manual' OR l_journalsource_check = 1   THEN
1294      BEGIN
1295         SELECT  pc.participant_code
1296           INTO  l_participant_code
1297           FROM  jl_br_sped_partic_codes pc
1298          WHERE  pc.ledger_id = g_ledger_id
1299           AND  pc.segment_type = g_accounting_segment_type
1300              AND  get_segment_value(p_je_line_ccid,
1301                                   decode(g_accounting_segment_type,'GL_ACCOUNT',g_account_segment
1302                                                                   ,'GL_BALANCING',g_bsv_segment
1303                                                                   ,'FA_COST_CTR',g_cost_center_segment)) = pc.flex_value
1304                                                                   ---,g_estb_segment_type,g_establishment_segment)) = pc.flex_value
1305           AND  EXISTS (SELECT 1
1306                         FROM jl_br_sped_partic_rel rel
1307                       WHERE rel.LEGAL_ENTITY_ID  = g_legal_entity_id
1308                         AND ((l_estb_acts_as_company ='Y' AND establishment_id=g_establishment_id)
1309                                  OR  (l_estb_acts_as_company='N' AND establishment_id is null))   --- Need to modify
1310                        AND rel.participant_code = pc.participant_code
1311                        AND rel.effective_from <= g_end_date
1312                        AND nvl(rel.effective_to,sysdate) >= g_start_date );
1313 
1314      EXCEPTION
1315           WHEN NO_DATA_FOUND THEN
1316                IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1317                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No participant code found');
1318                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1319                END IF;
1320 	       l_participant_code := NULL;
1321           WHEN OTHERS THEN
1322                IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1323                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error while retrieving the participant code.');
1324                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1325                END IF;
1326                l_participant_code := NULL;
1327       END;
1328 
1329       RETURN  l_participant_code;
1330 
1331    END IF; --END IF for IF p_journal_source = 'Manual'  THEN
1332 
1333 
1334    IF substr(g_bookkeeping_type,1,1) = 'A' THEN
1335        --As drilldown done in I250, third_party_id and third_party_site_id are passed from I250
1336 
1337 	 l_third_party_id      := p_third_party_id;
1338          l_third_party_site_id := p_third_party_site_id;
1339 
1340 
1341    ELSE   --BK Type <> 'A'
1342 
1343       BEGIN
1344 
1345          SELECT  DISTINCT  xll.party_id , xll.party_site_id     --- NEED TO CHECK IF SAME CUSTOMER WITH DIFFERENT CUST SITE ID
1346            INTO  l_third_party_id, l_third_party_site_id
1347            FROM  gl_import_references glimp, GL_JE_LINES JL ,  xla_ae_lines xll
1348           WHERE  glimp.je_header_id  = p_je_header_id
1349             AND  glimp.je_header_id  = jl.je_header_id
1350             AND  glimp.je_line_num   = p_je_line_num
1351             AND  glimp.je_line_num   = jl.je_line_num
1352             AND  xll.ledger_id       = g_ledger_id
1353             AND  xll.gl_sl_link_id   = glimp.gl_sl_link_id
1354             AND  xll.gl_sl_link_table= glimp.gl_sl_link_table;
1355       EXCEPTION
1356          WHEN NO_DATA_FOUND THEN
1357               RETURN NULL;  --participant_code not found.
1358 	 WHEN OTHERS THEN
1359                IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1360                      FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1361                      FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Journal Header: '||p_je_header_id||'  Journal Line: '||p_je_line_num);
1362 		     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Book keeping type: '||g_bookkeeping_type||'  Source'||p_journal_source||'  Participant_type'||g_participant_type);
1363                END IF;
1364               RETURN NULL;
1365       END;
1366 
1367    END IF;
1368 
1369    IF p_journal_source = 'Payables' THEN
1370 
1371             IF g_participant_type = 'SUPPLIERS_AND_CUSTOMERS' OR g_participant_type = 'SUPPLIERS' THEN
1372 
1373                  BEGIN
1374                        SELECT  pc.participant_code
1375                          INTO  l_participant_code
1376                          FROM  jl_br_sped_partic_codes pc
1377                         WHERE  vendor_id  = l_third_party_id
1378                           AND  participant_type = 'SUPPLIERS'
1379                           AND  enabled_flag = 'Y'
1380                           AND  EXISTS (SELECT 1
1381                                          FROM jl_br_sped_partic_rel rel
1382                                         WHERE rel.participant_code = pc.participant_code
1383                                           AND legal_entity_id = g_legal_entity_id
1384                                           AND ((l_estb_acts_as_company ='Y' AND establishment_id=g_establishment_id)
1385                                                 OR (l_estb_acts_as_company='N' AND establishment_id is null))   --- Need to modify
1386                                           AND rel.effective_from <= g_end_date
1387                                           AND nvl(rel.effective_to,sysdate) >= g_start_date) ;
1388 
1389                        RETURN l_participant_code;
1390                   EXCEPTION
1391                     WHEN  NO_DATA_FOUND THEN
1392                        IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1393                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No Participant Code found '||SQLERRM);
1394                         END IF;
1395 		       RETURN NULL;  --participant_code not found.
1396 
1397                     WHEN OTHERS THEN
1398                              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1399                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1400                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Journal Header: '||p_je_header_id||'  Journal Line: '||p_je_line_num);
1401 				FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Book keeping type: '||g_bookkeeping_type||'  Source'||p_journal_source||'  Participant_type'||g_participant_type);
1402                              END IF;
1403                              RETURN NULL;
1404                   END;
1405 
1406             ELSIF g_participant_type = 'SUPPLIER_AND_CUSTOMER_SITES' OR g_participant_type = 'SUPPLIER_SITES' THEN
1407 
1408                   BEGIN
1409                       SELECT pc.participant_code
1410                         INTO l_participant_code
1411                         FROM jl_br_sped_partic_codes pc
1412                        WHERE vendor_id        = l_third_party_id
1413                          AND vendor_site_id   = l_third_party_site_id
1414                          AND participant_type = 'SUPPLIER_SITES'
1415                          AND enabled_flag = 'Y'
1416                          AND  EXISTS (SELECT 1
1417                                         FROM jl_br_sped_partic_rel rel
1418                                        WHERE rel.participant_code = pc.participant_code
1419                                          AND legal_entity_id = g_legal_entity_id
1420                                          AND ((l_estb_acts_as_company ='Y' AND establishment_id=g_establishment_id)
1421                                               OR (l_estb_acts_as_company='N' AND establishment_id is null))   --- Need to modify
1422                                          AND rel.effective_from <= g_end_date
1423                                          AND nvl(rel.effective_to,sysdate) >= g_start_date);
1424 
1425                           RETURN l_participant_code;
1426 
1427                    EXCEPTION
1428                     WHEN  NO_DATA_FOUND THEN
1429                        IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1430                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No Participant Code found '||SQLERRM);
1431                         END IF;
1432 		       RETURN NULL;  --participant_code not found.
1433                     WHEN OTHERS THEN
1434                              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1435                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1436                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Journal Header: '||p_je_header_id||'  Journal Line: '||p_je_line_num);
1437 				FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Book keeping type: '||g_bookkeeping_type||' Source'||p_journal_source||' Participant_type'||g_participant_type);
1438                              END IF;
1439                              RETURN NULL;
1440                   END;
1441 
1442             END IF; --End for p_participant_type = 'SUPPLIERS_AND_CUSTOMERS' OR p_participant_type = 'SUPPLIERS'
1443 
1444         ELSIF p_journal_source = 'Receivables' THEN
1445 
1446               IF g_participant_type = 'SUPPLIERS_AND_CUSTOMERS' OR g_participant_type = 'CUSTOMERS' THEN
1447                    BEGIN
1448                           SELECT  pc.participant_code
1449                             INTO  l_participant_code
1450                             FROM  jl_br_sped_partic_codes pc
1451                            WHERE  pc.cust_account_id  = l_third_party_id
1452                              AND  pc.participant_type = 'CUSTOMERS'
1453                              AND  EXISTS (SELECT 1
1454                                             FROM jl_br_sped_partic_rel rel
1455                                            WHERE rel.participant_code = pc.participant_code
1456                                              AND legal_entity_id = g_legal_entity_id
1457                                              AND ((l_estb_acts_as_company ='Y' AND establishment_id=g_establishment_id)
1458                                                     OR (l_estb_acts_as_company='N' AND establishment_id is null))   --- Need to modify
1459                                              AND rel.effective_from <= g_end_date
1460                                              AND nvl(rel.effective_to,sysdate) >= g_start_date);
1461 
1462                           RETURN l_participant_code;
1463                     EXCEPTION
1464                     WHEN  NO_DATA_FOUND THEN
1465                        IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1466                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No Participant Code found '||SQLERRM);
1467                         END IF;
1468 		       RETURN NULL;  --participant_code not found.
1469                     WHEN OTHERS THEN
1470                              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1471                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1472                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Journal Header: '||p_je_header_id||'  Journal Line: '||p_je_line_num);
1473 				FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Book keeping type: '||g_bookkeeping_type||'  Source'||p_journal_source||'  Participant_type'||g_participant_type);
1474                                 RETURN NULL;
1475                              END IF;
1476                   END;
1477 
1478               ELSIF g_participant_type = 'SUPPLIER_AND_CUSTOMER_SITES' OR g_participant_type = 'CUSTOMER_SITES' THEN
1479 
1480                         BEGIN
1481 
1482                              SELECT  pc.participant_code
1483                                 INTO  l_participant_code
1484                                 FROM  jl_br_sped_partic_codes pc
1485                                       ,hz_cust_site_uses_all hcsu
1486                                WHERE  hcsu.cust_acct_site_id = pc.cust_acct_site_id
1487                                 -- AND  pc.cust_account_id  = l_third_party_id
1488                                  AND  hcsu.site_use_id    = l_third_party_site_id
1489                                  AND  pc.participant_type = 'CUSTOMER_SITES'
1490                                  AND  EXISTS (SELECT 1
1491                                                 FROM jl_br_sped_partic_rel rel
1492                                                WHERE rel.participant_code = pc.participant_code
1493                                                  AND legal_entity_id = g_legal_entity_id
1494                                                  AND ((l_estb_acts_as_company ='Y' AND establishment_id=g_establishment_id)
1495                                                       OR (l_estb_acts_as_company='N' AND establishment_id is null))   --- Need to modify
1496                                                  AND rel.effective_from <= g_end_date
1497                                                  AND nvl(rel.effective_to,sysdate) >= g_start_date);
1498 
1499                               RETURN l_participant_code;
1500                        EXCEPTION
1501                           WHEN  NO_DATA_FOUND THEN
1502                               IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1503                                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No Participant Code found '||SQLERRM);
1504                                END IF;
1505 			       RETURN NULL;  --participant_code not found.
1506                           WHEN OTHERS THEN
1507                              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1508                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1509                                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Journal Header: '||p_je_header_id||'  Journal Line: '||p_je_line_num);
1510 				FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Book keeping type: '||g_bookkeeping_type||'  Source'||p_journal_source||'  Participant_type'||g_participant_type);
1511                              END IF;
1512                              RETURN NULL;
1513                        END;
1514 
1515               END IF; -- End for IF p_participant_type = 'SUPPLIERS_AND_CUSTOMERS' OR p_participant_type = 'SUPPLIERS'
1516 
1517         END IF; --End for IF p_journal_source = 'Payables'
1518 
1519       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1520        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
1521 	                  	G_PKG_NAME||': ' ||l_api_name||'()-');
1522       END IF;
1523 
1524 
1525 return l_participant_code;
1526 
1527 EXCEPTION
1528    WHEN OTHERS THEN
1529      g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1530       IF g_debug_flag = 'Y' THEN
1531          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
1532       END IF;
1533       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1534            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1535       END IF;
1536       g_errbuf := 'ERROR While deriving the participant code for journal header_id and line num '||p_je_header_id||'-'||p_je_line_num||SQLERRM;
1537       FND_FILE.PUT_LINE(FND_FILE.LOG, g_errbuf);
1538       return NULL;
1539 END get_participant_code;
1540 
1541 PROCEDURE register_0000 AS
1542   l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_0000';
1543   l_cnpj                    xle_registrations.registration_number%TYPE;
1544   l_state                   hr_locations.region_2%TYPE;
1545   l_state_inscription       xle_registrations.registration_number%TYPE;
1546   l_municipal_inscription    xle_registrations.registration_number%TYPE;
1547   l_ibge_city_code          xle_entity_profiles.le_information4%TYPE;
1548 
1549 BEGIN
1550 
1551       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1552        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
1553 	                  	G_PKG_NAME||': ' ||l_api_name||'()+');
1554       END IF;
1555 
1556     IF l_estb_acts_as_company='N' THEN  -- If LE acts as company
1557 
1558        BEGIN
1559 
1560 	   SELECT  loc.region_2, le.le_information4       --retrieve state and ibge_city_code
1561 	     INTO  l_state,l_ibge_city_code
1562 	     FROM  xle_entity_profiles le,
1563 	           xle_registrations reg,
1564                    hr_locations loc
1565             WHERE  le.legal_entity_id = g_legal_entity_id
1566               AND  reg.source_id      = le.legal_entity_id
1567               AND  reg.source_table   = 'XLE_ENTITY_PROFILES'
1568               AND  reg.identifying_flag = 'Y'
1569               AND  reg.location_id      = loc.location_id
1570 	      AND  le.transacting_entity_flag = 'Y'
1571 	      AND  rownum=1;
1572 
1573        EXCEPTION
1574          WHEN OTHERS THEN
1575                 FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving state and ibge city code');
1576 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
1577                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1578 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving state and ibge city code');
1579 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1580                 END IF;
1581        END;
1582 
1583        BEGIN       -- retrieving cnpj
1584 
1585 	   SELECT  translate(reg.registration_number,'0123456789/-.', '0123456789')
1586 	     INTO  l_cnpj
1587 	     FROM  xle_registrations reg,
1588 		   xle_jurisdictions_vl jur
1589             WHERE  reg.source_id       =  g_legal_entity_id
1590               AND  reg.source_table    = 'XLE_ENTITY_PROFILES'
1591               AND  reg.jurisdiction_id = jur.jurisdiction_id
1592               AND  jur.registration_code_le   = 'CNPJ'
1593               AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
1594               AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
1595 	      AND  rownum=1;
1596 
1597            SELECT decode(length(l_cnpj),15,substr(l_cnpj,2,14),l_cnpj) into l_cnpj from dual;
1598 
1599        EXCEPTION
1600          WHEN OTHERS THEN
1601                 FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving cnpj');
1602 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
1603                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1604 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving cnpj');
1605 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1606                 END IF;
1607        END;
1608 
1609 
1610       IF  g_inscription_source ='XLE' THEN
1611 	   BEGIN  --Retrieving state inscription
1612                SELECT  registration_number
1613                  INTO  l_state_inscription
1614                  FROM  xle_registrations reg,
1615                        xle_jurisdictions_vl jur
1616                 WHERE  reg.source_id = g_legal_entity_id
1617                   AND  reg.source_table = 'XLE_ENTITY_PROFILES'
1618                   AND  reg.jurisdiction_id = jur.jurisdiction_id
1619                   AND  jur.registration_code_le = g_le_state_reg_code
1620                   AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
1621                   AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
1622                   AND  rownum=1;
1623 
1624            EXCEPTION
1625               WHEN OTHERS THEN
1626                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1627 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving state inscription');
1628 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1629                 END IF;
1630            END;
1631 	   BEGIN   -- --Retrieving municipal inscription
1632                SELECT  registration_number
1633                  INTO  l_municipal_inscription
1634                  FROM  xle_registrations reg,
1635                        xle_jurisdictions_vl jur
1636                 WHERE  reg.source_id = g_legal_entity_id
1637                   AND  reg.source_table = 'XLE_ENTITY_PROFILES'
1638                   AND  reg.jurisdiction_id = jur.jurisdiction_id
1639                   AND  jur.registration_code_le = g_le_municipal_reg_code
1640                   AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
1641                   AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
1642                   AND  rownum =1;
1643            EXCEPTION
1644               WHEN OTHERS THEN
1645                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1646 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving municipal inscription');
1647 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1648                 END IF;
1649            END;
1650       ELSE   -- g_inscription_source ='EBTax'(ZX)
1651 
1652            BEGIN   -- retreive state inscription
1653 
1654               SELECT  reg.registration_number
1655                 INTO  l_state_inscription
1656                 FROM  zx_registrations reg,
1657                       xle_etb_profiles etb,
1658                       zx_party_tax_profile ptp
1659                WHERE  etb.legal_entity_id      = g_legal_entity_id
1660                  AND  main_establishment_flag  = 'Y'      -- will fetch the registration number of main establishment for LE in case of EBtax.
1661                  AND  TRUNC(g_start_date) >= TRUNC(NVL(main_effective_from,SYSDATE)) -- conditions to check establishment is active as main estb
1662                  AND  TRUNC(g_end_date)   <= TRUNC(NVL(main_effective_to,SYSDATE))
1663                  AND  etb.party_id             =  ptp.party_id
1664                  AND  ptp.party_tax_profile_id = reg.party_tax_profile_id
1665                  AND  ptp.party_type_code      = 'LEGAL_ESTABLISHMENT'
1666                  AND  reg.registration_type_code = g_ebtax_state_reg_code
1667                  AND  reg.tax             = g_state_insc_tax
1668                  AND  reg.tax_regime_code = g_state_insc_tax_regime
1669                  AND  rownum =1;
1670             EXCEPTION
1671                WHEN OTHERS THEN
1672        	           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1673 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error in retreiving State inscription for EBTax');
1674 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1675                    END IF;
1676 	    END;
1677 
1678            BEGIN   -- retreive municipal inscription
1679 
1680               SELECT  reg.registration_number
1681                 INTO  l_municipal_inscription
1682                 FROM  zx_registrations reg,
1683                       xle_etb_profiles etb,
1684                       zx_party_tax_profile ptp
1685                WHERE  etb.legal_entity_id      = g_legal_entity_id
1686                  AND  main_establishment_flag  = 'Y'      -- will fetch the registration number of main establishment for LE in case of EBtax.
1687                  AND  TRUNC(g_start_date) >= TRUNC(NVL(main_effective_from,SYSDATE)) -- conditions to check establishment is active as main estb
1688                  AND  TRUNC(g_end_date)   <= TRUNC(NVL(main_effective_to,SYSDATE))
1689                  AND  etb.party_id             =  ptp.party_id
1690                  AND  ptp.party_tax_profile_id = reg.party_tax_profile_id
1691                  AND  ptp.party_type_code      = 'LEGAL_ESTABLISHMENT'
1692                  AND  reg.registration_type_code = g_ebtax_municipal_reg_code
1693                  AND  reg.tax             = g_municipal_insc_tax
1694                  AND  reg.tax_regime_code = g_municipal_insc_tax_regime
1695                  AND  rownum =1;
1696             EXCEPTION
1697                WHEN OTHERS THEN
1698        	           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1699 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error in retreiving municipal inscription for EBTax');
1700 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1701                    END IF;
1702 	    END;
1703 
1704       END IF;   -- END for p_insciption_source='LE'
1705 
1706 
1707     ELSE -- Establishment acts as company
1708 
1709        BEGIN
1710                --retrieving state,ibge_city_code
1711 	   SELECT  loc.region_2, etb.etb_information4
1712 	     INTO  l_state,l_ibge_city_code
1713 	     FROM  xle_etb_profiles etb,
1714 	           xle_registrations reg,
1715                    hr_locations loc
1716             WHERE  etb.legal_entity_id  = g_legal_entity_id
1717               AND  etb.establishment_id = g_establishment_id
1718               AND  reg.source_id        = etb.establishment_id
1719               AND  reg.source_table     = 'XLE_ETB_PROFILES'
1720               AND  reg.identifying_flag = 'Y'
1721               AND  reg.location_id      = loc.location_id
1722 	      AND  rownum=1;
1723 
1724        EXCEPTION
1725          WHEN OTHERS THEN
1726                 FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving state and ibge_city_code');
1727 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
1728                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1729 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving state and ibge_city_code');
1730 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1731                 END IF;
1732        END;
1733 
1734 
1735        BEGIN
1736                --retrieving cnpj
1737 	   SELECT  translate(reg.registration_number,'0123456789/-.', '0123456789')
1738 	     INTO  l_cnpj
1739 	     FROM  xle_registrations reg,
1740                    xle_jurisdictions_vl jur
1741             WHERE  reg.source_id        = g_establishment_id
1742               AND  reg.source_table     = 'XLE_ETB_PROFILES'
1743               AND  reg.jurisdiction_id  = jur.jurisdiction_id
1744               AND  jur.registration_code_etb = 'CNPJ'
1745               AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
1746               AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
1747 	      AND  rownum=1;
1748 
1749            SELECT decode(length(l_cnpj),15,substr(l_cnpj,2,14),l_cnpj) into l_cnpj from dual;
1750 
1751        EXCEPTION
1752          WHEN OTHERS THEN
1753                 FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving cnpj');
1754 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
1755                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1756 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving cnpj');
1757 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1758                 END IF;
1759        END;
1760 
1761 
1762 
1763             --Retrieving state inscription
1764        IF  g_inscription_source ='XLE' THEN
1765 	   BEGIN
1766                SELECT  registration_number
1767                  INTO  l_state_inscription
1768                  FROM  xle_registrations reg,
1769                        xle_jurisdictions_vl jur
1770                 WHERE  reg.source_id = g_establishment_id
1771                   AND  reg.source_table = 'XLE_ETB_PROFILES'
1772                   AND  reg.jurisdiction_id = jur.jurisdiction_id
1773                   AND  jur.registration_code_etb = g_le_state_reg_code
1774                   AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
1775                   AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
1776                   AND  rownum=1;
1777 
1778            EXCEPTION
1779               WHEN OTHERS THEN
1780                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1781 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving state inscription');
1782 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1783                 END IF;
1784            END;
1785 	   BEGIN  --Retrieving municipal inscription
1786                SELECT  registration_number
1787                  INTO  l_municipal_inscription
1788                  FROM  xle_registrations reg,
1789                        xle_jurisdictions_vl jur
1790                 WHERE  reg.source_id = g_establishment_id
1791                   AND  reg.source_table = 'XLE_ETB_PROFILES'
1792                   AND  reg.jurisdiction_id = jur.jurisdiction_id
1793                   AND  jur.registration_code_etb = g_le_municipal_reg_code
1794                   AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
1795                   AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
1796                   AND  rownum=1;
1797            EXCEPTION
1798               WHEN OTHERS THEN
1799                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1800 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving municipal inscription');
1801 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1802                 END IF;
1803            END;
1804       ELSE   -- g_inscription_source ='EBTax' ('ZX')
1805 
1806             BEGIN   -- retreive state inscription
1807 
1808               SELECT  reg.registration_number
1809                 INTO  l_state_inscription
1810                 FROM  zx_registrations reg,
1811                       xle_etb_profiles etb,
1812                       zx_party_tax_profile ptp
1813                WHERE  etb.legal_entity_id      = g_legal_entity_id
1814                  AND  etb.establishment_id     = g_establishment_id
1815                  AND  etb.party_id             = ptp.party_id
1816                  AND  ptp.party_tax_profile_id = reg.party_tax_profile_id
1817                  AND  ptp.party_type_code      = 'LEGAL_ESTABLISHMENT'
1818                  AND  reg.registration_type_code = g_ebtax_state_reg_code
1819                  AND  reg.tax             = g_state_insc_tax
1820                  AND  reg.tax_regime_code = g_state_insc_tax_regime
1821                  AND  rownum =1;
1822             EXCEPTION
1823                WHEN OTHERS THEN
1824        	           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1825 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error in retreiving State inscription for EBTax');
1826 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1827                    END IF;
1828 	    END;
1829 
1830            BEGIN   -- retreive municipal inscription
1831 
1832               SELECT  reg.registration_number
1833                 INTO  l_municipal_inscription
1834                 FROM  zx_registrations reg,
1835                       xle_etb_profiles etb,
1836                       zx_party_tax_profile ptp
1837                WHERE  etb.legal_entity_id      = g_legal_entity_id
1838                  AND  etb.establishment_id     = g_establishment_id
1839                  AND  etb.party_id             = ptp.party_id
1840                  AND  ptp.party_tax_profile_id = reg.party_tax_profile_id
1841                  AND  ptp.party_type_code      = 'LEGAL_ESTABLISHMENT'
1842                  AND  reg.registration_type_code = g_ebtax_municipal_reg_code
1843                  AND  reg.tax             = g_municipal_insc_tax
1844                  AND  reg.tax_regime_code = g_municipal_insc_tax_regime
1845                  AND  rownum =1;
1846             EXCEPTION
1847                WHEN OTHERS THEN
1848        	           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1849 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error in retreiving Municipal inscription for EBTax');
1850 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1851                    END IF;
1852 	    END;
1853 
1854       END IF;   -- END for p_insciption_source='XLE'
1855 
1856 
1857     END IF;  -- End for If l_estb_acts_as_company='N'
1858 
1859     --insert company info into 0000 register.
1860     BEGIN
1861 
1862     INSERT INTO jl_br_sped_extr_data_t
1863     (request_id,
1864      block,
1865      record_seq,
1866      field1,
1867      separator1,
1868      field2,
1869      separator2,
1870      field3,
1871      separator3,
1872      field4,
1873      separator4,
1874      field5,
1875      separator5,
1876      field6,
1877      separator6,
1878      field7,
1879      separator7,
1880      field8,
1881      separator8,
1882      field9,
1883      separator9,
1884      field10,
1885      separator10,
1886      field11,
1887      separator11,
1888      created_by,
1889      creation_date,
1890      last_updated_by,
1891      last_update_date,
1892      last_update_login)
1893      VALUES (g_concurrent_request_id
1894 	     ,'0'  -- Block
1895              ,jl_br_sped_extr_data_t_s.nextval --record_seq
1896              ,'0000' -- Register (field 1)
1897              ,'|'
1898 	     ,'LECD' -- Fixed Text (field 2)
1899              ,'|'
1900 	     ,to_char(g_start_date,'ddmmyyyy') --(field 3)
1901              ,'|'
1902              ,to_char(g_end_date,'ddmmyyyy') --(field 4)
1903              ,'|'
1904 	     ,g_company_name --field 5
1905              ,'|'
1906 	     ,l_cnpj --field 6
1907              ,'|'
1908              ,SUBSTRB(l_state,1,2)
1909              ,'|'
1910              ,l_state_inscription
1911              ,'|'
1912              ,SUBSTRB(l_ibge_city_code,1,7)
1913 	     ,'|'
1914 	     ,l_municipal_inscription
1915              ,'|'
1916 	     ,g_special_situation_indicator
1917              ,'|'
1918              ,g_created_by
1919              ,g_creation_date
1920              ,g_last_updated_by
1921              ,g_last_update_date
1922              ,g_last_update_login);
1923      EXCEPTION
1924          WHEN OTHERS THEN
1925            FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Inserting data into 0000 register');
1926            FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
1927            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1928 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1929            END IF;
1930            g_errbuf := 'ERROR While inserting 0000 register '||SQLERRM;
1931            g_retcode := 2;
1932            return;
1933      END;
1934       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1935        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
1936 	                  	G_PKG_NAME||': ' ||l_api_name||'()-');
1937       END IF;
1938      EXCEPTION
1939          WHEN OTHERS THEN
1940            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1941 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Exception in 0000 register'||SQLERRM);
1942            END IF;
1943 
1944 
1945 END register_0000;
1946 
1947 PROCEDURE register_0001 AS
1948   l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_0001';
1949 
1950 BEGIN
1951 
1952    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1953        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
1954          G_PKG_NAME||': '||l_api_name||'()+');
1955    END IF;
1956 
1957      INSERT INTO jl_br_sped_extr_data_t
1958      (request_id,
1959       block,
1960       record_seq,
1961       field1,
1962       separator1,
1963       field2,
1964       separator2,
1965       created_by,
1966       creation_date,
1967       last_updated_by,
1968       last_update_date,
1969       last_update_login)
1970       VALUES(  g_concurrent_request_id,
1971               '0',     --block
1972 	            jl_br_sped_extr_data_t_s.nextval, --record_seq
1973 	            '0001',  --Register (field1)
1974               '|',
1975 	             0,-- null,--decode(count(*),0,1,0), --field2
1976               '|'
1977               ,g_created_by
1978               ,g_creation_date
1979               ,g_last_updated_by
1980               ,g_last_update_date
1981               ,g_last_update_login );
1982 
1983  --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
1984 
1985    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1986       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
1987 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
1988    END IF;
1989 
1990 EXCEPTION
1991    WHEN OTHERS THEN
1992       fnd_file.put_line(fnd_file.log,'error in 0001'||sqlcode||sqlerrm);
1993       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1994       IF g_debug_flag = 'Y' THEN
1995          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
1996       END IF;
1997       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1998            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
1999       END IF;
2000       g_errbuf := 'ERROR While inserting 0001 register '||SQLERRM;
2001       g_retcode := 2;
2002       return;
2003 
2004 END register_0001;
2005 
2006 PROCEDURE register_0007 AS
2007    l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_0007';
2008 
2009 BEGIN
2010 
2011    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2012        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
2013          G_PKG_NAME||': '||l_api_name||'()+');
2014   END IF;
2015 
2016   IF l_estb_acts_as_company = 'N' THEN   --LE acts as company
2017 
2018       INSERT INTO jl_br_sped_extr_data_t
2019       (request_id,
2020        block,
2021        record_seq,
2022        field1,
2023        separator1,
2024        field2,
2025        separator2,
2026        field3,
2027        separator3,
2028        created_by,
2029        creation_date,
2030        last_updated_by,
2031        last_update_date,
2032        last_update_login
2033        )
2034        SELECT  g_concurrent_request_id
2035                ,'0'  -- Block
2036 	       ,jl_br_sped_extr_data_t_s.nextval --record_seq
2037 	       ,'0007' -- Register (field 1)
2038                ,'|'
2039 	       ,reg.reg_information1 --field 2
2040                ,'|'
2041                ,decode(reg.reg_information1,'00',null,reg.registration_number) --field 3
2042                ,'|'
2043                ,g_created_by
2044                ,g_creation_date
2045                ,g_last_updated_by
2046                ,g_last_update_date
2047                ,g_last_update_login
2048          FROM  xle_registrations reg
2049         WHERE  reg.source_id    =  g_legal_entity_id
2050 	  AND  reg.source_table =  'XLE_ENTITY_PROFILES'
2051           AND  reg.reg_information1 IS NOT NULL
2052           AND  nvl(effective_from,to_date('01-01-1950','DD-MM-YYYY')) <= g_start_date   --effective_from column can be null in xle_registrations table.
2053           AND  (nvl(effective_to,sysdate) >= g_end_date OR effective_to IS NULL);                      -- Registration should be there for entire period.
2054 
2055     ELSE    --Establishment acts as company
2056 
2057       INSERT INTO jl_br_sped_extr_data_t
2058       (request_id,
2059        block,
2060        record_seq,
2061        field1,
2062        separator1,
2063        field2,
2064        separator2,
2065        field3,
2066        separator3,
2067        created_by,
2068        creation_date,
2069        last_updated_by,
2070        last_update_date,
2071        last_update_login
2072        )
2073        SELECT  g_concurrent_request_id
2074                ,'0'  -- Block
2075 	       ,jl_br_sped_extr_data_t_s.nextval --record_seq
2076 	       ,'0007' -- Register (field 1)
2077                ,'|'
2078 	       ,reg.reg_information1 --field 2
2079                ,'|'
2080                ,decode(reg.reg_information1,'00',null,reg.registration_number) --field 3
2081                ,'|'
2082                ,g_created_by
2083                ,g_creation_date
2084                ,g_last_updated_by
2085                ,g_last_update_date
2086                ,g_last_update_login
2087          FROM  xle_registrations reg
2088         WHERE  reg.source_id    =  g_establishment_id
2089 	  AND  reg.source_table =  'XLE_ETB_PROFILES'
2090           AND  reg.reg_information1 IS NOT NULL
2091           AND  nvl(effective_from,to_date('01-01-1950','DD-MM-YYYY')) <= g_start_date   --effective_from column can be null in xle_registrations table.
2092           AND  (nvl(effective_to,sysdate) >= g_end_date OR effective_to IS NULL);                      -- Registration should be there for entire period.
2093 
2094    END IF;   -- End for IF l_estb_acts_as_company='N'
2095 
2096  --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
2097 
2098    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2099       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
2100 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
2101    END IF;
2102 
2103 EXCEPTION
2104    WHEN OTHERS THEN
2105 
2106       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
2107       IF g_debug_flag = 'Y' THEN
2108          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
2109       END IF;
2110       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2111           FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2112       END IF;
2113       g_errbuf := 'ERROR While inserting 0007 register '||SQLERRM;
2114       g_retcode := 2;
2115       return;
2116 
2117 END register_0007;
2118 
2119 PROCEDURE register_0020 AS
2120   l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_0020';
2121   l_main_estb_flag          VARCHAR2(1);
2122   l_cnpj                    xle_registrations.registration_number%TYPE;
2123   l_state                   hr_locations.region_2%TYPE;
2124   l_state_inscription       xle_registrations.registration_number%TYPE;
2125   l_municipal_inscription    xle_registrations.registration_number%TYPE;
2126   l_ibge_city_code          xle_entity_profiles.le_information4%TYPE;
2127   l_nire                    NUMBER(20);   --check the data type
2128   l_establishment_id        xle_etb_profiles.establishment_id%TYPE;
2129   l_count                   NUMBER := 0;
2130   CURSOR  secondary_estbs_cur IS SELECT  establishment_id
2131                                    FROM  xle_etb_profiles
2132                                   WHERE  legal_entity_id = g_legal_entity_id
2133                                     --AND  main_establishment_flag='N'
2134                                    AND  establishment_id NOT IN (SELECT establishment_id
2135                                                                     FROM xle_etb_profiles
2136                                                                    WHERE legal_entity_id = g_legal_entity_id
2137                                                                      AND main_establishment_flag = 'Y'
2138                                                                      AND TRUNC(g_start_date) >= TRUNC(NVL(main_effective_from,SYSDATE))
2139                                                                      AND TRUNC(g_end_date)   <= TRUNC(NVL(main_effective_to,SYSDATE)))
2140                                   AND TRUNC(g_start_date) >= TRUNC(NVL(effective_from,SYSDATE))
2141                                   AND TRUNC(g_end_date)   <= TRUNC(NVL(effective_to,SYSDATE));
2142 
2143 BEGIN
2144 
2145    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2146       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
2147 	                   G_PKG_NAME||': ' ||l_api_name||'()+');
2148    END IF;
2149 
2150 
2151    IF UPPER(g_accounting_type) = 'CENTRALIZED' THEN
2152       RETURN;
2153    END IF;
2154 
2155    BEGIN
2156 
2157          SELECT  'Y'
2158            INTO  l_main_estb_flag
2159            FROM  xle_etb_profiles
2160           WHERE  legal_entity_id = g_legal_entity_id
2161             AND  establishment_id = g_establishment_id
2162             AND  main_establishment_flag = 'Y'
2163             AND  TRUNC(g_start_date) >= TRUNC(NVL(main_effective_from,SYSDATE))
2164             AND  TRUNC(g_end_date)   <= TRUNC(NVL(main_effective_to,SYSDATE));
2165    EXCEPTION
2166        WHEN NO_DATA_FOUND THEN
2167              l_main_estb_flag := 'N';
2168        WHEN OTHERS THEN
2169                 FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving main establishment flag');
2170                 FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
2171                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2172                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving main establishment flag');
2173 		                FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2174                 END IF;
2175    END;
2176 
2177    IF l_main_estb_flag = 'N'  THEN    -- running the report for secondary establishment. need to display LE info in 0020 register.
2178 
2179        BEGIN
2180 
2181 	   SELECT  loc.region_2, le.le_information4
2182 	     INTO  l_state,l_ibge_city_code
2183 	     FROM  xle_entity_profiles le,
2184 	           xle_registrations reg,
2185                    hr_locations loc
2186             WHERE  le.legal_entity_id = g_legal_entity_id
2187               AND  reg.source_id      = le.legal_entity_id
2188               AND  reg.source_table   = 'XLE_ENTITY_PROFILES'
2189               AND  reg.identifying_flag = 'Y'
2190               AND  reg.location_id      = loc.location_id
2191 	      AND  le.transacting_entity_flag = 'Y'
2192 	      AND  rownum = 1 ;
2193 
2194        EXCEPTION
2195          WHEN OTHERS THEN
2196                 FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving state and ibge_city_code');
2197                 FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
2198                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2199                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving state and ibge_city_code');
2200 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2201                 END IF;
2202        END;
2203 
2204        BEGIN       -- retrieving cnpj
2205 
2206 	   SELECT  translate(reg.registration_number,'0123456789/-.', '0123456789')
2207 	     INTO  l_cnpj
2208 	     FROM  xle_registrations reg,
2209 		   xle_jurisdictions_vl jur
2210             WHERE  reg.source_id       = g_legal_entity_id
2211               AND  reg.source_table    = 'XLE_ENTITY_PROFILES'
2212               AND  reg.jurisdiction_id = jur.jurisdiction_id
2213               AND  jur.registration_code_le   = 'CNPJ'
2214               AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
2215               AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
2216 	      AND  rownum=1;
2217 
2218            SELECT decode(length(l_cnpj),15,substr(l_cnpj,2,14),l_cnpj) into l_cnpj from dual;
2219 
2220        EXCEPTION
2221          WHEN OTHERS THEN
2222                 FND_FILE.PUT_LINE(FND_FILE.LOG,'Error while Retrieving cnpj of LE');
2223                 FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
2224                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2225 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving cnpj');
2226 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2227                 END IF;
2228        END;
2229 
2230        --Begin for retrieving NIRE.
2231       /* If any registration number exists with place of registration as 'NIRE' then, we need to retrieve it as 'NIRE'.
2232          otherwise, we need to retrieve the registration number with legislative category as 'COMMERCIAL_LAW'. */
2233 
2234        SELECT  count(*)
2235          INTO  l_count
2236          FROM  xle_registrations
2237         WHERE  source_id    = g_legal_entity_id
2238           AND  source_table = 'XLE_ENTITY_PROFILES'
2239           AND  UPPER(place_of_registration) = 'NIRE'
2240           AND  nvl(effective_from ,to_date('01-01-1950','DD-MM-YYYY')) <= g_start_date
2241           AND  (effective_to IS NULL OR effective_to >= g_end_date);
2242 
2243        IF l_count > 0 THEN
2244 	   BEGIN
2245                SELECT  registration_number
2246                  INTO  l_nire
2247                  FROM  xle_registrations
2248                 WHERE  source_id    = g_legal_entity_id
2249                   AND  source_table = 'XLE_ENTITY_PROFILES'
2250                   AND  UPPER(place_of_registration) = 'NIRE'
2251                   AND  nvl(effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
2252                   AND  (effective_to IS NULL OR effective_to >= g_end_date)
2253 		  AND  rownum =1;
2254 
2255            EXCEPTION
2256               WHEN OTHERS THEN
2257                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2258 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving nire using place of registration');
2259 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2260                 END IF;
2261            END;
2262        ELSE
2263 
2264 	   BEGIN
2265                SELECT  registration_number
2266                  INTO  l_nire
2267                  FROM  xle_registrations reg,
2268 		       xle_jurisdictions_vl jur
2269                 WHERE  source_id    = g_legal_entity_id
2270                   AND  source_table = 'XLE_ENTITY_PROFILES'
2271                   AND  reg.jurisdiction_id = jur.jurisdiction_id
2272                   AND  jur.legislative_cat_code = 'COMMERCIAL_LAW'
2273                   AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
2274                   AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
2275 		  AND  rownum=1;
2276 
2277            EXCEPTION
2278               WHEN OTHERS THEN
2279                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2280 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving nire using Commercial Law');
2281 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2282                 END IF;
2283            END;
2284 
2285        END IF;
2286        --End of retrieving NIRE
2287 
2288             --Retrieving state inscription
2289       IF  g_inscription_source ='XLE' THEN
2290 	   BEGIN
2291                SELECT  registration_number
2292                  INTO  l_state_inscription
2293                  FROM  xle_registrations reg,
2294                        xle_jurisdictions_vl jur
2295                 WHERE  reg.source_id = g_legal_entity_id
2296                   AND  reg.source_table = 'XLE_ENTITY_PROFILES'
2297                   AND  reg.jurisdiction_id = jur.jurisdiction_id
2298                   AND  jur.registration_code_le = g_le_state_reg_code
2299                   AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY')) <= g_start_date
2300                   AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
2301                   AND  rownum=1;
2302 
2303            EXCEPTION
2304               WHEN OTHERS THEN
2305                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2306 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving state inscription');
2307 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2308                 END IF;
2309            END;
2310 	   BEGIN   -- --Retrieving municipal inscription
2311                SELECT  registration_number
2312                  INTO  l_municipal_inscription
2313                  FROM  xle_registrations reg,
2314                        xle_jurisdictions_vl jur
2315                 WHERE  reg.source_id = g_legal_entity_id
2316                   AND  reg.source_table = 'XLE_ENTITY_PROFILES'
2317                   AND  reg.jurisdiction_id = jur.jurisdiction_id
2318                   AND  jur.registration_code_le = g_le_municipal_reg_code
2319                   AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
2320                   AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
2321                   AND  rownum =1;
2322            EXCEPTION
2323               WHEN OTHERS THEN
2324                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2325 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving municipal inscription');
2326 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2327                 END IF;
2328            END;
2329       ELSE   -- g_inscription_source ='EBTax'('ZX')
2330 
2331            BEGIN   -- retreive state inscription
2332 
2333               SELECT  reg.registration_number
2334                 INTO  l_state_inscription
2335                 FROM  zx_registrations reg,
2336                       xle_etb_profiles etb,
2337                       zx_party_tax_profile ptp
2338                WHERE  etb.legal_entity_id      = g_legal_entity_id
2339                  AND  main_establishment_flag  = 'Y'      -- will fetch the registration number of main establishment for LE in case of EBtax.
2340                  AND  TRUNC(g_start_date) >= TRUNC(NVL(main_effective_from,SYSDATE)) -- conditions to check establishment is active as main estb
2341                  AND  TRUNC(g_end_date)   <= TRUNC(NVL(main_effective_to,SYSDATE))
2342                  AND  etb.party_id             =  ptp.party_id
2343                  AND  ptp.party_tax_profile_id = reg.party_tax_profile_id
2344                  AND  ptp.party_type_code      = 'LEGAL_ESTABLISHMENT'
2345                  AND  reg.registration_type_code = g_ebtax_state_reg_code
2346                  AND  reg.tax             = g_state_insc_tax
2347                  AND  reg.tax_regime_code = g_state_insc_tax_regime
2348                  AND  rownum =1;
2349             EXCEPTION
2350                WHEN OTHERS THEN
2351        	           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2352 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error in retreiving State inscription for EBTax');
2353 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2354                    END IF;
2355 	    END;
2356 
2357            BEGIN   -- retreive municipal inscription
2358 
2359               SELECT  reg.registration_number
2360                 INTO  l_municipal_inscription
2361                 FROM  zx_registrations reg,
2362                       xle_etb_profiles etb,
2363                       zx_party_tax_profile ptp
2364                WHERE  etb.legal_entity_id      = g_legal_entity_id
2365                  AND  main_establishment_flag  = 'Y'      -- will fetch the registration number of main establishment for LE in case of EBtax.
2366                  AND  TRUNC(g_start_date) >= TRUNC(NVL(main_effective_from,SYSDATE)) -- conditions to check establishment is active as main estb
2367                  AND  TRUNC(g_end_date)   <= TRUNC(NVL(main_effective_to,SYSDATE))
2368                  AND  etb.party_id             =  ptp.party_id
2369                  AND  ptp.party_tax_profile_id = reg.party_tax_profile_id
2370                  AND  ptp.party_type_code      = 'LEGAL_ESTABLISHMENT'
2371                  AND  reg.registration_type_code = g_ebtax_municipal_reg_code
2372                  AND  reg.tax             = g_municipal_insc_tax
2373                  AND  reg.tax_regime_code = g_municipal_insc_tax_regime
2374                  AND  rownum =1;
2375             EXCEPTION
2376                WHEN OTHERS THEN
2377        	           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2378 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error in retreiving municipal inscription for EBTax');
2379 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2380                    END IF;
2381 	    END;
2382 
2383 	END IF;   -- END for p_insciption_source='XLE'
2384 
2385       BEGIN
2386 
2387 	  INSERT INTO jl_br_sped_extr_data_t
2388 	  (request_id,
2389 	   block,
2390 	   record_seq,
2391 	   field1,
2392            separator1,
2393 	   field2,
2394            separator2,
2395 	   field3,
2396            separator3,
2397            field4,
2398            separator4,
2399 	   field5,
2400            separator5,
2401 	   field6,
2402            separator6,
2403 	   field7,
2404            separator7,
2405 	   field8,
2406            separator8,
2407            created_by,
2408            creation_date,
2409            last_updated_by,
2410            last_update_date,
2411            last_update_login
2412            )
2413            VALUES(g_concurrent_request_id
2414 	          ,'0'  -- Block
2415 	          ,jl_br_sped_extr_data_t_s.nextval --record_seq
2416 	          ,'0020' -- Register (field 1)
2417                   ,'|'
2418 	          ,1 --LE
2419                   ,'|'
2420 	          ,l_cnpj --field 3
2421                   ,'|'
2422                   ,SUBSTRB(l_state,1,2) --field 4
2423                   ,'|'
2424                   ,l_state_inscription -- field 5
2425                   ,'|'
2426                   ,SUBSTRB(l_ibge_city_code,1,7)      --field6
2427                   ,'|'
2428  	          ,l_municipal_inscription  -- field 7
2429                   ,'|'
2430                   ,SUBSTRB(l_nire,11)  --field 8
2431                   ,'|'
2432                   ,g_created_by
2433                   ,g_creation_date
2434                   ,g_last_updated_by
2435                   ,g_last_update_date
2436                   ,g_last_update_login);
2437       EXCEPTION
2438 	 WHEN OTHERS THEN
2439 		FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Inserting data into 0020 register');
2440 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
2441                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2442 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2443                 END IF;
2444 		g_errbuf := 'ERROR While inserting 0020 register '||SQLERRM;
2445                 g_retcode := 2;
2446                 return;
2447       END;
2448 
2449    ELSE  -- running the report for primary establishment.Need to display all secondary establishment's info in 0020 register.
2450 
2451        FOR secondary_estb_rec in secondary_estbs_cur LOOP
2452            l_establishment_id     := secondary_estb_rec.establishment_id ;
2453            l_state                := null;
2454            l_ibge_city_code       := null;
2455            l_state_inscription    := null;
2456            l_municipal_inscription := null;
2457 	   l_cnpj                 := null;
2458 	   l_nire                 := null;
2459 
2460           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2461               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Establishment_id : '||l_establishment_id);
2462 	  END IF;
2463 
2464 	   BEGIN
2465                  --retrieving cnpj,state,ibge_city_code
2466                SELECT  loc.region_2, etb.etb_information4
2467 	         INTO  l_state,l_ibge_city_code
2468                  FROM  xle_etb_profiles etb,
2469 	               xle_registrations reg,
2470                        hr_locations loc
2471                 WHERE  etb.legal_entity_id  = g_legal_entity_id
2472                   AND  etb.establishment_id = l_establishment_id
2473                   AND  reg.source_id        = etb.establishment_id
2474                   AND  reg.source_table   = 'XLE_ETB_PROFILES'
2475                   AND  reg.identifying_flag = 'Y'
2476                   AND  reg.location_id      = loc.location_id
2477 		  AND  rownum = 1;
2478 
2479            EXCEPTION
2480            WHEN OTHERS THEN
2481                 FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving state and ibge_city_code');
2482                 FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
2483                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2484                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving state,ibge_city_code of ESTB');
2485 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2486                 END IF;
2487             END;
2488 
2489        --Begin for retrieving NIRE.
2490       /* If any registration number exists with place of registration as 'NIRE' then, we need to retrieve it as 'NIRE'.
2491          otherwise, we need to retrieve the registration number with legislative category as 'COMMERCIAL_LAW'. */
2492 
2493        SELECT  count(*)
2494          INTO  l_count
2495          FROM  xle_registrations
2496         WHERE  source_id    = l_establishment_id
2497           AND  source_table = 'XLE_ETB_PROFILES'
2498           AND  UPPER(place_of_registration) = 'NIRE'
2499           AND  nvl(effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
2500           AND  (effective_to IS NULL OR effective_to >= g_end_date);
2501 
2502        IF l_count > 0 THEN
2503 	   BEGIN
2504                SELECT  registration_number
2505                  INTO  l_nire
2506                  FROM  xle_registrations
2507                 WHERE  source_id    = l_establishment_id
2508                   AND  source_table = 'XLE_ETB_PROFILES'
2509                   AND  UPPER(place_of_registration) = 'NIRE'
2510                   AND  nvl(effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
2511                   AND  (effective_to IS NULL OR effective_to >= g_end_date)
2512 		  AND  rownum = 1;
2513 
2514            EXCEPTION
2515               WHEN OTHERS THEN
2516                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2517 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving nire using place of registration');
2518 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2519                 END IF;
2520            END;
2521        ELSE
2522 
2523 	   BEGIN
2524                SELECT  registration_number
2525                  INTO  l_nire
2526                  FROM  xle_registrations reg,
2527 		       xle_jurisdictions_vl jur
2528                 WHERE  source_id    = l_establishment_id
2529                   AND  source_table = 'XLE_ETB_PROFILES'
2530                   AND  reg.jurisdiction_id = jur.jurisdiction_id
2531                   AND  jur.legislative_cat_code = 'COMMERCIAL_LAW'
2532                   AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
2533                   AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
2534 		  AND  rownum = 1;
2535 
2536            EXCEPTION
2537               WHEN OTHERS THEN
2538                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2539 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving nire using Commercial Law');
2540 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2541                 END IF;
2542            END;
2543 
2544        END IF;
2545        --End of retrieving NIRE
2546 
2547        BEGIN
2548                --retrieving cnpj
2549 	   SELECT  translate(reg.registration_number,'0123456789/-.', '0123456789')
2550 	     INTO  l_cnpj
2551 	     FROM  xle_registrations reg,
2552                    xle_jurisdictions_vl jur
2553             WHERE  reg.source_id        = l_establishment_id
2554               AND  reg.source_table     = 'XLE_ETB_PROFILES'
2555               AND  reg.jurisdiction_id  = jur.jurisdiction_id
2556               AND  jur.registration_code_etb = 'CNPJ'
2557               AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
2558               AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
2559 	      AND  rownum=1;
2560 
2561            SELECT decode(length(l_cnpj),15,substr(l_cnpj,2,14),l_cnpj) into l_cnpj from dual;
2562 
2563        EXCEPTION
2564          WHEN OTHERS THEN
2565                 FND_FILE.PUT_LINE(FND_FILE.LOG,'Error while Retrieving cnpj of ESTB');
2566                 FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
2567                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2568                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error while Retrieving cnpj of ESTB');
2569 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2570                 END IF;
2571        END;
2572 
2573 
2574             --Retrieving state inscription
2575 
2576 	   IF  g_inscription_source ='XLE' THEN
2577 	     BEGIN
2578                 SELECT  registration_number
2579                   INTO  l_state_inscription
2580                   FROM  xle_registrations reg,
2581                         xle_jurisdictions_vl jur
2582                  WHERE  reg.source_id = l_establishment_id
2583                    AND  reg.source_table = 'XLE_ETB_PROFILES'
2584                    AND  reg.jurisdiction_id = jur.jurisdiction_id
2585                    AND  jur.registration_code_etb = g_le_state_reg_code
2586                    AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
2587                    AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
2588                    AND  rownum=1;
2589 
2590               EXCEPTION
2591                 WHEN OTHERS THEN
2592                   IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2593 		      FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving state inscription of ESTB from XLE');
2594 		      FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2595                   END IF;
2596               END;
2597 	     BEGIN  --Retrieving municipal inscription
2598                 SELECT  registration_number
2599                   INTO  l_municipal_inscription
2600                   FROM  xle_registrations reg,
2601                         xle_jurisdictions_vl jur
2602                  WHERE  reg.source_id = l_establishment_id
2603                    AND  reg.source_table = 'XLE_ETB_PROFILES'
2604                    AND  reg.jurisdiction_id = jur.jurisdiction_id
2605                    AND  jur.registration_code_etb = g_le_municipal_reg_code
2606                    AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
2607                    AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
2608                    AND  rownum=1;
2609              EXCEPTION
2610                WHEN OTHERS THEN
2611                   IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2612                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving municipal inscription of ESTB from XLE');
2613   		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2614                   END IF;
2615              END;
2616           ELSE   -- g_inscription_source ='EBTax'('ZX')
2617 
2618            BEGIN   -- retreive state inscription
2619 
2620               SELECT  reg.registration_number
2621                 INTO  l_state_inscription
2622                 FROM  zx_registrations reg,
2623                       xle_etb_profiles etb,
2624                       zx_party_tax_profile ptp
2625                WHERE  etb.legal_entity_id      = g_legal_entity_id
2626                  AND  etb.establishment_id     = l_establishment_id      -- will fetch the registration number of main establishment for LE in case of EBtax.
2627                  AND  etb.party_id             =  ptp.party_id
2628                  AND  ptp.party_tax_profile_id = reg.party_tax_profile_id
2629                  AND  ptp.party_type_code      = 'LEGAL_ESTABLISHMENT'
2630                  AND  reg.registration_type_code = g_ebtax_state_reg_code
2631                  AND  reg.tax             = g_state_insc_tax
2632                  AND  reg.tax_regime_code = g_state_insc_tax_regime
2633                  AND  rownum =1;
2634             EXCEPTION
2635                WHEN OTHERS THEN
2636        	           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2637 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error in retreiving State inscription for EBTax');
2638 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2639                    END IF;
2640 	    END;
2641 
2642            BEGIN   -- retreive municipal inscription
2643 
2644               SELECT  reg.registration_number
2645                 INTO  l_municipal_inscription
2646                 FROM  zx_registrations reg,
2647                       xle_etb_profiles etb,
2648                       zx_party_tax_profile ptp
2649                WHERE  etb.legal_entity_id      = g_legal_entity_id
2650                  AND  etb.establishment_id     = l_establishment_id      -- will fetch the registration number of main establishment for LE in case of EBtax.
2651                  AND  etb.party_id             = ptp.party_id
2652                  AND  ptp.party_tax_profile_id = reg.party_tax_profile_id
2653                  AND  ptp.party_type_code      = 'LEGAL_ESTABLISHMENT'
2654                  AND  reg.registration_type_code = g_ebtax_municipal_reg_code
2655                  AND  reg.tax             = g_municipal_insc_tax
2656                  AND  reg.tax_regime_code = g_municipal_insc_tax_regime
2657                  AND  rownum =1;
2658             EXCEPTION
2659                WHEN OTHERS THEN
2660        	           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2661 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error in retreiving municipal inscription for EBTax');
2662 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2663                    END IF;
2664 	    END;
2665 
2666           END IF;   -- END for p_insciption_source='XLE'
2667 
2668           BEGIN
2669 
2670 	      INSERT INTO jl_br_sped_extr_data_t
2671 	      (request_id,
2672 	       block,
2673                record_seq,
2674 	       field1,
2675                separator1,
2676 	       field2,
2677                separator2,
2678                field3,
2679                separator3,
2680                field4,
2681                separator4,
2682                field5,
2683                separator5,
2684                field6,
2685                separator6,
2686 	       field7,
2687                separator7,
2688                field8,
2689                separator8,
2690                created_by,
2691                creation_date,
2692                last_updated_by,
2693                last_update_date,
2694                last_update_login
2695               )
2696               VALUES(g_concurrent_request_id
2697 	             ,'0'  -- Block
2698 	             ,jl_br_sped_extr_data_t_s.nextval --record_seq
2699 	             ,'0020' -- Register (field 1)
2700                      ,'|'
2701 	             ,0  --Establishment
2702                      ,'|'
2703                      ,l_cnpj --field 3
2704                      ,'|'
2705                      ,SUBSTRB(l_state,1,2) --field 4
2706                      ,'|'
2707                      ,l_state_inscription -- field 5
2708                      ,'|'
2709                      ,SUBSTRB(l_ibge_city_code,1,7)      --field6
2710                      ,'|'
2711  	             ,l_municipal_inscription  -- field 7
2712                      ,'|'
2713                      ,SUBSTRB(l_nire,1,11)  --field 8
2714                      ,'|'
2715                      ,g_created_by
2716                      ,g_creation_date
2717                      ,g_last_updated_by
2718                      ,g_last_update_date
2719                      ,g_last_update_login);
2720             EXCEPTION
2721 	       WHEN OTHERS THEN
2722 		   FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Inserting data into 0020 register-establishments');
2723 		   FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
2724                    IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2725 		       FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2726                    END IF;
2727                    g_errbuf := 'ERROR While inserting 0020 register '||SQLERRM;
2728                    g_retcode := 2;
2729                    return;
2730            END;
2731        END LOOP;
2732 
2733    END IF; -- End for l_main_estb_flag = 'N'
2734 
2735 
2736    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2737       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
2738 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
2739    END IF;
2740 
2741 END register_0020;
2742 
2743 PROCEDURE register_0150_0180 AS
2744 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_0150_0180';
2745 l_count NUMBER;
2746 	CURSOR c_participants IS
2747 	SELECT  p.participant_code
2748 	       ,participant_name
2749 	       ,lpad(lc.meaning,5,'0') cbank_country_code
2750          ,decode(p.register_type,'2',decode(length(p.register_number),9,substrb(p.register_number,2,8)||p.register_subsidiary||p.register_digit,
2751                                                       	              p.register_number||p.register_subsidiary||p.register_digit),null) cnpj
2752 	       ,decode(p.register_type,'1',p.register_number||p.register_digit,null) cpf
2753 	       ,p.nit
2754 	       ,p.state_code
2755 	       ,p.state_inscription
2756 	       ,p.state_inscription_substitute
2757 	       ,p.ibge_city_code
2758 	       ,p.municipal_inscription
2759 	       ,p.suframa_inscription_number
2760 	  FROM jl_br_sped_partic_codes p
2761          ,fnd_lookups lc
2762    WHERE ledger_id  = g_ledger_id
2763      AND lc.lookup_type ='JLBR_CBANK_COUNTRY_CODES'
2764      AND lc.lookup_code = p.country_code
2765      AND p.enabled_flag = 'Y'
2766      AND ((g_participant_type in ('SUPPLIERS','CUSTOMERS','SUPPLIER_SITES','CUSTOMER_SITES') AND participant_type = g_participant_type) OR
2767           (g_participant_type = 'ACCOUNTING_FLEXFIELD_SEGMENT' AND p.segment_type = g_accounting_segment_type) OR
2768           (g_participant_type = 'SUPPLIERS_AND_CUSTOMERS' AND participant_type = 'SUPPLIERS') OR
2769           (g_participant_type = 'SUPPLIERS_AND_CUSTOMERS' AND participant_type = 'CUSTOMERS') OR
2770           (g_participant_type = 'SUPPLIER_AND_CUSTOMER_SITES' AND participant_type = 'SUPPLIER_SITES') OR
2771           (g_participant_type = 'SUPPLIER_AND_CUSTOMER_SITES' AND participant_type = 'CUSTOMER_SITES') )
2772      AND exists (select 1 from jl_br_sped_partic_rel rel
2773 	                 where rel.participant_code = p.participant_code
2774 			   and rel.legal_entity_id  = g_legal_entity_id
2775 			   and ((g_accounting_type='CENTRALIZED' AND ((l_estb_acts_as_company = 'Y' AND establishment_id = g_establishment_id)
2776 			                                              OR (l_estb_acts_as_company ='N' AND establishment_id is null)))
2777                                  OR
2778                                 (g_accounting_type='DECENTRALIZED' AND (establishment_id is null OR
2779                                                                         establishment_id=g_establishment_id)))
2780 	                   and rel.effective_from <= g_end_date
2781 	                   and nvl(rel.effective_to,sysdate) >= g_start_date);
2782 
2783 BEGIN
2784 
2785  IF g_bookkeeping_type <> 'B' THEN   -- 0150 and 0180 are not required for book keeping type 'B'
2786 
2787    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2788        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
2789                       G_PKG_NAME||': '||l_api_name||'()+');
2790    END IF;
2791 
2792  	For partic_record in c_participants LOOP
2793 
2794 	     INSERT INTO jl_br_sped_extr_data_t
2795 	     (request_id,
2796         block,
2797         record_seq,
2798         field1,
2799         separator1,
2800         field2,
2801         separator2,
2802         field3,
2803         separator3,
2804         field4,
2805         separator4,
2806         field5,
2807         separator5,
2808         field6,
2809         separator6,
2810         field7,
2811         separator7,
2812         field8,
2813         separator8,
2814         field9,
2815         separator9,
2816         field10,
2817         separator10,
2818         field11,
2819         separator11,
2820         field12,
2821         separator12,
2822 	field13,
2823 	separator13,
2824         created_by,
2825         creation_date,
2826         last_updated_by,
2827         last_update_date,
2828         last_update_login)
2829 	      values (g_concurrent_request_id
2830 	              ,'0'  -- Block
2831                 ,jl_br_sped_extr_data_t_s.nextval -- Record_seq
2832                 ,'0150' -- Register (field 1)
2833                 ,'|'
2834                 , partic_record.participant_code       --field 2
2835                 ,'|'
2836                 , partic_record.participant_name           --field 3
2837                 ,'|'
2838                 , partic_record.cbank_country_code     --field 4
2839                 ,'|'
2840                 , partic_record.cnpj                   --field 5
2841                 ,'|'
2842                 , partic_record.cpf                     --field 6
2843                 ,'|'
2844                 , partic_record.nit                     --field 7
2845                 ,'|'
2846                 , partic_record.state_code              --field 8
2847                 ,'|'
2848                 , partic_record.state_inscription      --field 9
2849                 ,'|'
2850 		, partic_record.state_inscription_substitute  --field10
2851 		, '|'
2852                 , partic_record.ibge_city_code         --field 11
2853                 ,'|'
2854                 , partic_record.municipal_inscription  --field 12
2855                 ,'|'
2856                 ,partic_record.suframa_inscription_number --field 13
2857                 ,'|'
2858                 ,g_created_by
2859                 ,g_creation_date
2860                 ,g_last_updated_by
2861                 ,g_last_update_date
2862                 ,g_last_update_login  );
2863 
2864 
2865       INSERT INTO jl_br_sped_extr_data_t
2866 	    (request_id,
2867        block,
2868        record_seq,
2869        field1,
2870        separator1,
2871        field2,
2872        separator2,
2873        field3,
2874        separator3,
2875        field4,
2876        separator4,
2877        created_by,
2878        creation_date,
2879        last_updated_by,
2880        last_update_date,
2881        last_update_login)
2882 	     SELECT g_concurrent_request_id
2883 	            ,'0'  -- Block
2884               ,jl_br_sped_extr_data_t_s.nextval -- Record_seq
2885               ,'0180' -- Register (field 1)
2886               ,'|'
2887               ,relationship_code  --field 2
2888               ,'|'
2889               ,to_char(effective_from,'ddmmyyyy')--field 3
2890               ,'|'
2891               ,to_char(effective_to,'ddmmyyyy')  --field 4
2892               ,'|'
2893               ,g_created_by
2894               ,g_creation_date
2895               ,g_last_updated_by
2896               ,g_last_update_date
2897               ,g_last_update_login
2898          FROM jl_br_sped_partic_rel
2899 	      WHERE participant_code = partic_record.participant_code
2900 	        AND legal_entity_id = g_legal_entity_id
2901 		AND ((l_estb_acts_as_company = 'Y' AND establishment_id = g_establishment_id)
2902 		      OR (l_estb_acts_as_company = 'N' AND establishment_id is null))
2903 	        AND effective_from <= g_end_date
2904 	        AND nvl(effective_to,sysdate) >= g_start_date ;
2905 
2906 	 END LOOP;
2907 
2908    SELECT COUNT(*) INTO l_count
2909    FROM jl_br_sped_extr_data_t
2910    WHERE request_id =g_concurrent_request_id
2911    AND block  = '0'
2912    AND field1 = '0150';
2913 
2914   -- FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): 0150 Records Inserted : '||l_count);
2915 
2916    SELECT COUNT(*) INTO l_count
2917    FROM jl_br_sped_extr_data_t
2918    WHERE request_id =g_concurrent_request_id
2919    AND block  = '0'
2920    AND field1 = '0180';
2921  --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): 0180 Records Inserted : '||l_count);
2922 
2923    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2924         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
2925 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
2926    END IF;
2927 
2928   END IF; -- End for IF g_bookkeeping_type <> 'B'
2929 
2930 EXCEPTION
2931    WHEN OTHERS THEN
2932 
2933       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
2934       IF g_debug_flag = 'Y' THEN
2935          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
2936       END IF;
2937       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2938            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2939       END IF;
2940       g_errbuf := 'ERROR While inserting 0150 and 0180 register '||SQLERRM;
2941       g_retcode := 2;
2942       return;
2943 END register_0150_0180;
2944 
2945 PROCEDURE register_0990 AS
2946 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_0990';
2947 BEGIN
2948 
2949    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2950        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
2951          G_PKG_NAME||': '||l_api_name||'()+');
2952    END IF;
2953     INSERT INTO jl_br_sped_extr_data_t
2954     (request_id,
2955     block,
2956     record_seq,
2957     field1,
2958     separator1,
2959     field2,
2960     separator2,
2961     created_by,
2962     creation_date,
2963     last_updated_by,
2964     last_update_date,
2965     last_update_login
2966     )
2967     VALUES(  g_concurrent_request_id
2968             ,'0'  -- Block
2969 	          ,jl_br_sped_extr_data_t_s.nextval -- Record_seq
2970 	          ,'0990'  -- Register (field 1)
2971             ,'|'
2972 	          ,0--,null  --count(*) -- Field 2
2973             ,'|'
2974             ,g_created_by
2975             ,g_creation_date
2976             ,g_last_updated_by
2977             ,g_last_update_date
2978             ,g_last_update_login  );
2979 
2980 --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
2981 
2982    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2983       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
2984                     G_PKG_NAME||': ' ||l_api_name||'()-');
2985 	END IF;
2986 EXCEPTION
2987    WHEN OTHERS THEN
2988 
2989       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
2990       IF g_debug_flag = 'Y' THEN
2991          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
2992       END IF;
2993       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
2994            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
2995       END IF;
2996       g_errbuf := 'ERROR While inserting 0990 register '||SQLERRM;
2997       g_retcode := 2;
2998       return;
2999 END register_0990;
3000 
3001 PROCEDURE register_I001 AS
3002 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I001';
3003 BEGIN
3004 
3005    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3006        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
3007          G_PKG_NAME||': '||l_api_name||'()+');
3008    END IF;
3009 
3010    INSERT INTO jl_br_sped_extr_data_t
3011    (request_id,
3012     block,
3013     record_seq,
3014     field1,
3015     separator1,
3016     field2,
3017     separator2,
3018     created_by,
3019     creation_date,
3020     last_updated_by,
3021     last_update_date,
3022     last_update_login)
3023     VALUES( g_concurrent_request_id,
3024             'I',     --block
3025 	    jl_br_sped_extr_data_t_s.nextval,  --Record_seq
3026 	    'I001',  --Register (field1)
3027             '|',
3028 	    0,--null,--decode(count(*),0,1,0), --field2
3029             '|'
3030             ,g_created_by
3031             ,g_creation_date
3032             ,g_last_updated_by
3033             ,g_last_update_date
3034             ,g_last_update_login );
3035 
3036   -- FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
3037 
3038    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3039       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
3040                     G_PKG_NAME||': ' ||l_api_name||'()-');
3041 	END IF;
3042 EXCEPTION
3043    WHEN OTHERS THEN
3044       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
3045       IF g_debug_flag = 'Y' THEN
3046          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
3047       END IF;
3048       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3049            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3050       END IF;
3051       g_errbuf := 'ERROR While inserting I0001 register '||SQLERRM;
3052       g_retcode := 2;
3053       return;
3054 
3055 END register_I001;
3056 
3057 PROCEDURE register_I010 AS
3058 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I010';
3059 BEGIN
3060 
3061    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3062        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
3063          G_PKG_NAME||': '||l_api_name||'()+');
3064    END IF;
3065 --	FND_FILE.PUT_LINE(FND_FILE.LOG, 'G_BOOKKEEPING_TYPE: ' ||g_bookkeeping_type);
3066 
3067 	 INSERT INTO jl_br_sped_extr_data_t
3068 	 (request_id,
3069 	  block,
3070 	  record_seq,
3071 	  field1,
3072           separator1,
3073 	  field2,
3074           separator2,
3075           field3,
3076           separator3,
3077           created_by,
3078           creation_date,
3079           last_updated_by,
3080           last_update_date,
3081           last_update_login)
3082          VALUES
3083  	  ( g_concurrent_request_id
3084 	    ,'I'  -- Block
3085 	    ,jl_br_sped_extr_data_t_s.nextval -- Record_seq
3086 	    ,'I010' -- Register (field 1)
3087             ,'|'
3088 	    ,substr(g_bookkeeping_type,1,1) -- field 2
3089             ,'|'
3090 	    ,'1.00'      --field3
3091             ,'|'
3092             ,g_created_by
3093             ,g_creation_date
3094             ,g_last_updated_by
3095             ,g_last_update_date
3096             ,g_last_update_login
3097 	   );
3098  --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
3099 
3100    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3101       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
3102                     G_PKG_NAME||': ' ||l_api_name||'()-');
3103 	END IF;
3104 EXCEPTION
3105    WHEN OTHERS THEN
3106 
3107       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
3108       IF g_debug_flag = 'Y' THEN
3109          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
3110       END IF;
3111       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3112            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3113       END IF;
3114       g_errbuf := 'ERROR While inserting I010 register '||SQLERRM;
3115       g_retcode := 2;
3116       return;
3117 END register_I010;
3118 
3119 /* This register contains Book information. This procedure won't be called for book keeping type 'G'*/
3120 PROCEDURE register_I012 AS
3121 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I012';
3122 
3123 BEGIN
3124 
3125   IF g_bookkeeping_type <> 'G' THEN
3126 
3127    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3128        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
3129          G_PKG_NAME||': '||l_api_name||'()+');
3130    END IF;
3131 
3132 	 INSERT INTO jl_br_sped_extr_data_t
3133 	 (request_id,
3134 	  block,
3135 	  record_seq,
3136 	  field1,
3137           separator1,
3138 	  field2,
3139           separator2,
3140           field3,
3141           separator3,
3142           field4,
3143           separator4,
3144           field5,
3145           separator5,
3146           created_by,
3147           creation_date,
3148           last_updated_by,
3149           last_update_date,
3150           last_update_login)
3151   	SELECT
3152 	    g_concurrent_request_id
3153 	    ,'I'  -- Block
3154 	    ,jl_br_sped_extr_data_t_s.nextval -- Record_seq
3155 	    ,'I012' -- Register (field 1)
3156             ,'|'
3157 	    ,book_number   -- field 2
3158             ,'|'
3159 	    ,book_name      --field3
3160             ,'|'
3161             ,0              --field4
3162             ,'|'
3163             ,DECODE(g_bookkeeping_type,'R',g_hash_code,'B',g_hash_code,NULL)
3164             ,'|'
3165             ,g_created_by
3166             ,g_creation_date
3167             ,g_last_updated_by
3168             ,g_last_update_date
3169             ,g_last_update_login
3170        FROM  jl_br_cinfos_books
3171       WHERE  legal_entity_id = g_legal_entity_id
3172         AND  ((l_estb_acts_as_company ='N' AND establishment_id is null)
3173               OR (l_estb_acts_as_company = 'Y' AND establishment_id=g_establishment_id))  --establishment acts as company
3174         AND  bookkeeping_type = DECODE(g_bookkeeping_type,'R','A','B','A'
3175                                                       ,'A/R','R','A/B','B')
3176         AND  ((bookkeeping_type = 'A' AND auxiliary_book_flag = 'Y')
3177               OR bookkeeping_type <> 'A');
3178 
3179    /*  If we are running the report for book keeping type is 'R' or 'B' then we will
3180         display the auxiliary books for book keeping type 'A'.
3181         If we run with book keeping type 'A/R' then display book of 'R'
3182         If we run with book keeping type 'A/B' then display book of 'B'*/
3183 
3184    -- FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
3185 
3186    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3187       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
3188                     G_PKG_NAME||': ' ||l_api_name||'()-');
3189 	  END IF;
3190   END IF;  -- End for IF g_bookkeeping_type <> 'G'
3191 EXCEPTION
3192    WHEN OTHERS THEN
3193 
3194       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
3195       IF g_debug_flag = 'Y' THEN
3196          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
3197       END IF;
3198       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3199            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3200       END IF;
3201       g_errbuf := 'ERROR While inserting I012 register '||SQLERRM;
3202       g_retcode := 2;
3203       return;
3204 END register_I012;
3205 
3206 PROCEDURE register_I015 AS
3207 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I015';
3208 l_query                   VARCHAR2(6000);
3209 
3210 BEGIN
3211 
3212  IF g_bookkeeping_type = 'G' THEN
3213   return;
3214  END IF;
3215 
3216    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3217        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
3218          G_PKG_NAME||': '||l_api_name||'()+');
3219    END IF;
3220 
3221 l_query   := 'INSERT INTO jl_br_sped_extr_data_t
3222               (request_id,
3223                block,
3224                record_seq,
3225                field1,
3226                separator1,
3227                field2,
3228                separator2,
3229                created_by,
3230 	       creation_date,
3231 	       last_updated_by,
3232                last_update_date,
3233                last_update_login
3234               )
3235               SELECT '||g_concurrent_request_id|| '
3236                      ,''I''  -- Block
3237                      ,jl_br_sped_extr_data_t_s.nextval -- record_seq
3238 		     ,''I015'' -- Register (field 1)
3239                      ,''|''
3240                      ,natural_acct
3241                      ,''|''
3242                      ,'||g_created_by||'
3243 		     ,'''||g_creation_date||'''
3244                      ,'||g_last_updated_by||'
3245                      ,'''||g_last_update_date||'''
3246 		     ,'||g_last_update_login||'
3247                 FROM (SELECT  DISTINCT  glcc.'||g_account_segment||'  natural_acct
3248 		      FROM  gl_je_headers jh
3249                             ,gl_je_lines jl
3250                             ,gl_import_references glimp
3251                             ,xla_ae_lines xll
3252                             ,xla_ae_headers xlh
3253                             ,xla_distribution_links xld
3254                             ,gl_code_combinations glcc
3255                      WHERE  jh.ledger_id = '||g_ledger_id||'
3256                        AND  jh.je_source in (''Payables'',''Receivables'')
3257                        AND  jh.je_header_id     = jl.je_header_id
3258                        AND  glimp.je_header_id  = jh.je_header_id
3259                        AND  xlh.ae_header_id    = xll.ae_header_id
3260                        AND  xlh.EVENT_ID        = xld.EVENT_ID
3261                        AND  xlh.application_id  = xll.application_id
3262 		       AND  xll.ae_header_id    = xld.ae_header_id
3263 		       AND  xll.ae_line_num     = xld.ae_line_num
3264 		       AND  xll.application_id  = xld.application_id
3265                        AND  jl.je_line_num      = glimp.je_line_num
3266                        AND  glimp.gl_sl_link_id = xll.gl_sl_link_id
3267 		       AND  glimp.gl_sl_link_table = xll.gl_sl_link_table
3268 		       AND  jl.code_combination_id = glcc.code_combination_id
3269                        AND  jh.status      = ''P''
3270                        AND  jl.status      = ''P''
3271                        AND  jh.default_effective_date between '''||g_start_date||''' and '''|| g_end_date||'''
3272                        AND  ('''||l_exclusive_mode||'''=''Y''
3273 		              OR ('''||l_exclusive_mode||'''=''N'' AND   glcc.'||g_bsv_segment||' in (select jg_info_v1 from jg_zz_vat_trx_gt)))
3274                       GROUP BY  glimp.je_header_id,glimp.je_line_num,jl.code_combination_id,glcc.'||g_account_segment||'
3275                       HAVING  count(*) >1)';
3276 
3277 
3278  --  FND_FILE.PUT_LINE(FND_FILE.LOG,'query:'||l_query);
3279 
3280    EXECUTE IMMEDIATE l_query;
3281 
3282   -- FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
3283 
3284    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3285       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
3286                     G_PKG_NAME||': ' ||l_api_name||'()-');
3287    END IF;
3288 
3289 
3290 EXCEPTION
3291    WHEN OTHERS THEN
3292       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
3293       IF g_debug_flag = 'Y' THEN
3294          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
3295       END IF;
3296       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3297            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3298       END IF;
3299       g_errbuf := 'ERROR While inserting I015 register '||SQLERRM;
3300       g_retcode := 2;
3301       return;
3302 END register_I015;
3303 
3304 PROCEDURE register_I030 AS
3305   l_api_name        CONSTANT VARCHAR2(30) :='REGISTER_I030';
3306   l_book_number     jl_br_cinfos_books.book_number%TYPE;
3307   l_book_name       jl_br_cinfos_books.book_name%TYPE;
3308   l_nire            NUMBER(11);
3309   l_cnpj            xle_registrations.registration_number%TYPE;
3310   l_registration_id xle_registrations.registration_id%TYPE;
3311   l_effective_from  DATE;
3312   l_conversion_date DATE;
3313   l_city            hr_locations.town_or_city%TYPE;
3314   l_count           NUMBER(4) :=0;
3315 
3316 BEGIN
3317 
3318    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3319       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
3320                     G_PKG_NAME||': ' ||l_api_name||'()+');
3321    END IF;
3322 
3323     IF l_estb_acts_as_company = 'N' THEN       --LE acts as company.
3324 
3325         BEGIN
3326                       --retreiving book info
3327 	   SELECT  le.effective_from,bk.book_number,bk.book_name
3328              INTO  l_effective_from,l_book_number,l_book_name
3329              FROM  xle_entity_profiles le,
3330 	           jl_br_cinfos_books bk
3331             WHERE  le.legal_entity_id = g_legal_entity_id
3332               AND  bk.legal_entity_id = le.legal_entity_id
3333               AND  bk.establishment_id IS NULL   -- need to retrive the book info of LE.
3334               AND  bookkeeping_type = substrb(g_bookkeeping_type,1,1)
3335               AND  bk.auxiliary_book_flag ='N';
3336 
3337         EXCEPTION
3338 	   WHEN OTHERS THEN
3339 	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving the Book Information');
3340 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3341                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3342 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving the Book Information');
3343 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3344                 END IF;
3345         END;
3346 
3347        --Begin for retrieving NIRE.
3348       /* If any registration number exists with place of registration as 'NIRE' then, we need to retrieve it as 'NIRE'.
3349          otherwise, we need to retrieve the registration number with legislative category as 'COMMERCIAL_LAW'. */
3350 
3351        SELECT  count(*)
3352          INTO  l_count
3353          FROM  xle_registrations
3354         WHERE  source_id    = g_legal_entity_id
3355           AND  source_table = 'XLE_ENTITY_PROFILES'
3356           AND  UPPER(place_of_registration) = 'NIRE'
3357           AND  nvl(effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
3358           AND  (effective_to IS NULL OR effective_to >= g_end_date);
3359 
3360        IF l_count > 0 THEN
3361 	   BEGIN
3362                SELECT  registration_number
3363                  INTO  l_nire
3364                  FROM  xle_registrations
3365                 WHERE  source_id    = g_legal_entity_id
3366                   AND  source_table = 'XLE_ENTITY_PROFILES'
3367                   AND  UPPER(place_of_registration) = 'NIRE'
3368                   AND  nvl(effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
3369                   AND  (effective_to IS NULL OR effective_to >= g_end_date)
3370 		  AND  rownum=1;
3371 
3372            EXCEPTION
3373               WHEN OTHERS THEN
3374 	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving nire using place of registration');
3375 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3376 		IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3377 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving nire using place of registration');
3378 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3379                 END IF;
3380            END;
3381        ELSE
3382 
3383 	   BEGIN
3384                SELECT  registration_number
3385                  INTO  l_nire
3386                  FROM  xle_registrations reg,
3387 		       xle_jurisdictions_vl jur
3388                 WHERE  source_id    = g_legal_entity_id
3389                   AND  source_table = 'XLE_ENTITY_PROFILES'
3390                   AND  reg.jurisdiction_id = jur.jurisdiction_id
3391                   AND  jur.legislative_cat_code = 'COMMERCIAL_LAW'
3392                   AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
3393                   AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
3394 		  AND  rownum=1;
3395 
3396            EXCEPTION
3397               WHEN OTHERS THEN
3398 	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving nire using Commercial Law');
3399 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3400 		IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3401 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving nire using Commercial Law');
3402 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3403                 END IF;
3404            END;
3405 
3406        END IF;
3407        --End of retrieving NIRE
3408 
3409         BEGIN
3410                      --retriving city
3411             SELECT  loc.town_or_city
3412               INTO  l_city
3413               FROM  xle_registrations reg,hr_locations_all loc
3414              WHERE  reg.source_id = g_legal_entity_id
3415                AND  reg.source_table = 'XLE_ENTITY_PROFILES'
3416                AND  reg.identifying_flag = 'Y'
3417                AND  reg.location_id =loc.location_id
3418 	       AND  rownum = 1 ;
3419 
3420 	EXCEPTION
3421 	  WHEN OTHERS THEN
3422 	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving CNPJ');
3423 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3424                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3425 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3426                 END IF;
3427         END;
3428 
3429        BEGIN       -- retrieving cnpj
3430 
3431 	   SELECT  translate(reg.registration_number,'0123456789/-.', '0123456789'),reg.registration_id
3432 	     INTO  l_cnpj,l_registration_id
3433 	     FROM  xle_registrations reg,
3434 		   xle_jurisdictions_vl jur
3435             WHERE  reg.source_id       = g_legal_entity_id
3436               AND  reg.source_table    = 'XLE_ENTITY_PROFILES'
3437               AND  reg.jurisdiction_id = jur.jurisdiction_id
3438               AND  jur.registration_code_le   = 'CNPJ'
3439               AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
3440               AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
3441 	      AND  rownum=1;
3442 
3443            SELECT decode(length(l_cnpj),15,substr(l_cnpj,2,14),l_cnpj) into l_cnpj from dual;
3444 
3445        EXCEPTION
3446          WHEN OTHERS THEN
3447 	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving cnpj');
3448 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3449                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3450 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3451                 END IF;
3452        END;
3453 
3454        l_count :=0;
3455 
3456        SELECT  count(*)
3457          INTO  l_count
3458          FROM  xle_histories his
3459         WHERE  source_table = 'XLE_REGISTRATIONS'
3460           AND  source_id    = l_registration_id
3461           AND  source_column_name = 'EFFECTIVE_FROM';
3462 
3463       IF  l_count >= 1 THEN  --  registration Effective From field was changed. so entry exists in history table.
3464 
3465 	  BEGIN
3466              SELECT  substr(source_column_value,1,11)
3467                INTO  l_conversion_date
3468                FROM  xle_histories his
3469               WHERE  source_table = 'XLE_REGISTRATIONS'
3470                 AND  source_id    = l_registration_id
3471                 AND  source_column_name = 'EFFECTIVE_FROM'
3472                 AND  effective_to IS NULL;
3473 
3474           EXCEPTION
3475              WHEN OTHERS THEN
3476  	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving conversion Date');
3477 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3478                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3479                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving conversion Date');
3480 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3481                 END IF;
3482           END;
3483 
3484       END IF;  --End for IF l_count >=1
3485 
3486     ELSE          -- Establishment acts as company.
3487 
3488 	BEGIN
3489                       --retreiving book info
3490 	   SELECT  etb.effective_from,bk.book_number,bk.book_name
3491              INTO  l_effective_from,l_book_number,l_book_name
3492              FROM  xle_etb_profiles etb,
3493 	           jl_br_cinfos_books bk
3494             WHERE  etb.legal_entity_id  = g_legal_entity_id
3495               AND  etb.establishment_id = g_establishment_id
3496               AND  bk.legal_entity_id   = etb.legal_entity_id
3497 	      AND  bk.establishment_id  = etb.establishment_id   -- need to retrive the book info of ETB.
3498               AND  bookkeeping_type = substrb(g_bookkeeping_type,1,1)
3499               AND  bk.auxiliary_book_flag ='N';
3500 
3501         EXCEPTION
3502 	   WHEN OTHERS THEN
3503 	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving the Book Information');
3504 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3505                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3506 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3507                 END IF;
3508         END;
3509 
3510        --Begin for retrieving NIRE.
3511       /* If any registration number exists with place of registration as 'NIRE' then, we need to retrieve it as 'NIRE'.
3512          otherwise, we need to retrieve the registration number with legislative category as 'COMMERCIAL_LAW'. */
3513 
3514        SELECT  count(*)
3515          INTO  l_count
3516          FROM  xle_registrations
3517         WHERE  source_id    = g_establishment_id
3518           AND  source_table = 'XLE_ETB_PROFILES'
3519           AND  UPPER(place_of_registration) = 'NIRE'
3520           AND  nvl(effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
3521           AND  (effective_to IS NULL OR effective_to >= g_end_date)	  ;
3522 
3523        IF l_count > 0 THEN
3524 	   BEGIN
3525                SELECT  registration_number
3526                  INTO  l_nire
3527                  FROM  xle_registrations
3528                 WHERE  source_id    = g_establishment_id
3529                   AND  source_table = 'XLE_ETB_PROFILES'
3530                   AND  UPPER(place_of_registration) = 'NIRE'
3531                   AND  nvl(effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
3532                   AND  (effective_to IS NULL OR effective_to >= g_end_date)
3533 		  AND  rownum = 1;
3534 
3535            EXCEPTION
3536               WHEN OTHERS THEN
3537 	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving nire using place of registration');
3538 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3539                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3540 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3541                 END IF;
3542            END;
3543        ELSE
3544 
3545 	   BEGIN
3546                SELECT  registration_number
3547                  INTO  l_nire
3548                  FROM  xle_registrations reg,
3549 		       xle_jurisdictions_vl jur
3550                 WHERE  source_id    = g_establishment_id
3551                   AND  source_table = 'XLE_ETB_PROFILES'
3552                   AND  reg.jurisdiction_id = jur.jurisdiction_id
3553                   AND  jur.legislative_cat_code = 'COMMERCIAL_LAW'
3554                   AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
3555                   AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
3556 		  AND  rownum = 1;
3557 
3558            EXCEPTION
3559               WHEN OTHERS THEN
3560 	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving nire using Commercial Law');
3561 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3562                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3563 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3564                 END IF;
3565            END;
3566 
3567        END IF;
3568        --End of retrieving NIRE
3569 
3570         BEGIN
3571                      --retriving city
3572             SELECT  loc.town_or_city
3573               INTO  l_city
3574               FROM  xle_registrations reg,hr_locations_all loc
3575              WHERE  reg.source_id = g_establishment_id
3576                AND  reg.source_table = 'XLE_ETB_PROFILES'
3577                AND  reg.identifying_flag = 'Y'
3578                AND  reg.location_id =loc.location_id
3579 	       AND  rownum = 1 ;
3580 
3581 	EXCEPTION
3582 	  WHEN OTHERS THEN
3583 	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving CNPJ');
3584 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3585                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3586 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3587                 END IF;
3588         END;
3589        BEGIN       -- retrieving cnpj
3590 
3591 	   SELECT  translate(reg.registration_number,'0123456789/-.', '0123456789'),reg.registration_id
3592 	     INTO  l_cnpj,l_registration_id
3593 	     FROM  xle_registrations reg,
3594 		   xle_jurisdictions_vl jur
3595             WHERE  reg.source_id       = g_establishment_id
3596               AND  reg.source_table    = 'XLE_ETB_PROFILES'
3597               AND  reg.jurisdiction_id = jur.jurisdiction_id
3598               AND  jur.registration_code_le   = 'CNPJ'
3599               AND  nvl(reg.effective_from,to_date('01-01-1950','DD-MM-YYYY'))  <= g_start_date
3600               AND  (reg.effective_to IS NULL OR reg.effective_to >= g_end_date)
3601 	      AND  rownum=1;
3602 
3603            SELECT decode(length(l_cnpj),15,substr(l_cnpj,2,14),l_cnpj) into l_cnpj from dual;
3604 
3605        EXCEPTION
3606          WHEN OTHERS THEN
3607 	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving cnpj');
3608 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3609                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3610 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3611                 END IF;
3612        END;
3613 
3614        l_count :=0;
3615 
3616        SELECT  count(*)
3617          INTO  l_count
3618          FROM  xle_histories his
3619         WHERE  source_table = 'XLE_REGISTRATIONS'
3620           AND  source_id    = l_registration_id
3621           AND  source_column_name = 'EFFECTIVE_FROM';
3622 
3623       IF  l_count >= 1 THEN  --  registration Effective From field was changed. so entry exists in history table.
3624 
3625 	  BEGIN
3626              SELECT  substr(source_column_value,1,11)
3627                INTO  l_conversion_date
3628                FROM  xle_histories his
3629               WHERE  source_table = 'XLE_REGISTRATIONS'
3630                 AND  source_id    = l_registration_id
3631                 AND  source_column_name = 'EFFECTIVE_FROM'
3632                 AND  effective_to IS NULL;
3633 
3634           EXCEPTION
3635              WHEN OTHERS THEN
3636  	        FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Retrieving conversion Date');
3637 		FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3638                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3639                     FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While Retrieving conversion Date');
3640 		    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3641                 END IF;
3642           END;
3643 
3644      END IF;     -- End for l_count >=1
3645 
3646     END IF; -- End for l_estb_acts_as_company='N'
3647 
3648     -- inserting data into data extract table
3649     BEGIN
3650 
3651        INSERT INTO jl_br_sped_extr_data_t
3652        (request_id,
3653         block,
3654         record_seq,
3655         field1,
3656         separator1,
3657         field2,
3658         separator2,
3659         field3,
3660         separator3,
3661         field4,
3662         separator4,
3663         field5,
3664         separator5,
3665         field6,
3666         separator6,
3667         field7,
3668         separator7,
3669         field8,
3670         separator8,
3671         field9,
3672         separator9,
3673         field10,
3674         separator10,
3675         field11,
3676         separator11,
3677         created_by,
3678         creation_date,
3679         last_updated_by,
3680         last_update_date,
3681         last_update_login)
3682   	VALUES(g_concurrent_request_id
3683 	       ,'I'  -- Block
3684 	       ,jl_br_sped_extr_data_t_s.nextval  -- record_seq
3685 	       ,'I030' -- Register (field 1)
3686                ,'|'
3687 	       ,'TERMO DE ABERTURA' -- Fixed Text (field 2)
3688                ,'|'
3689 	       ,l_book_number --(field 3)
3690                ,'|'
3691 	       ,l_book_name --(field 4)
3692                ,'|'
3693                ,null       --field5
3694                ,'|'
3695 	       ,g_company_name  --field6
3696                ,'|'
3697 	       ,SUBSTRB(l_nire,1,11) --field7
3698                ,'|'
3699                ,l_cnpj -- field8
3700                ,'|'
3701                ,to_char(l_effective_from,'DDMMYYYY') -- field9
3702                ,'|'
3703                ,to_char(l_conversion_date,'DDMMYYYY') -- field10
3704                ,'|'
3705       	       ,l_city  -- field11
3706                ,'|'
3707                ,g_created_by
3708                ,g_creation_date
3709                ,g_last_updated_by
3710                ,g_last_update_date
3711                ,g_last_update_login);
3712      EXCEPTION
3713         WHEN OTHERS THEN
3714              FND_FILE.PUT_LINE(FND_FILE.LOG,'Error While Inserting Data into I030 register');
3715              FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
3716              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3717                  FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3718              END IF;
3719              g_errbuf := 'ERROR While inserting 0000 register '||SQLERRM;
3720              g_retcode := 2;
3721              return;
3722      END;
3723    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3724       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
3725                     G_PKG_NAME||': ' ||l_api_name||'()-');
3726    END IF;
3727 
3728 END register_I030;
3729 
3730 
3731 PROCEDURE register_I050 AS
3732   l_api_name       CONSTANT VARCHAR2(30) :='REGISTER_I050';
3733 
3734   TYPE tab_fv_last_update_date IS TABLE OF
3735   fnd_flex_values.last_update_date%TYPE INDEX BY BINARY_INTEGER;
3736 
3737   TYPE tab_fv_account_type IS TABLE OF
3738   VARCHAR2(10) INDEX BY BINARY_INTEGER;
3739 
3740   TYPE tab_fv_summary_flag IS TABLE OF
3741   VARCHAR2(10) INDEX BY BINARY_INTEGER;
3742 
3743   TYPE tab_fv_value_level IS TABLE OF
3744   NUMBER INDEX BY BINARY_INTEGER;
3745 
3746   TYPE tab_fv_flex_value IS TABLE OF
3747   fnd_flex_values.flex_value%TYPE INDEX BY BINARY_INTEGER;
3748 
3749   TYPE tab_fv_flex_value_id IS TABLE OF
3750   fnd_flex_values.flex_value_id%TYPE INDEX BY BINARY_INTEGER;
3751 
3752   TYPE tab_fv_description IS TABLE OF
3753   VARCHAR2(250) INDEX BY BINARY_INTEGER;
3754 
3755   fv_last_update_date tab_fv_last_update_date;
3756   fv_id tab_fv_flex_value_id;
3757   fv_summary_flag tab_fv_summary_flag;
3758   fv_parent_value_level tab_fv_value_level;
3759   fv_parent_value tab_fv_flex_value;
3760   fv_child_value tab_fv_flex_value;
3761   fv_description tab_fv_description;
3762 
3763   l_query varchar2(6000);
3764 
3765   l_childs_exist NUMBER := 0;
3766   l_prev_level1_parent VARCHAR2(10) := '-1';
3767 
3768   l_fv_last_update_date fnd_flex_values.last_update_date%TYPE;
3769   l_fv_id fnd_flex_values.flex_value_id%TYPE;
3770   l_fv_summary_flag VARCHAR2(10);
3771   l_fv_description VARCHAR2(250);
3772 
3773 BEGIN
3774 
3775    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3776        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
3777          G_PKG_NAME||': '||l_api_name||'()+');
3778    END IF;
3779 
3780 FND_FILE.put_line(fnd_file.log,'Start Of I050');
3781 
3782    l_query := 'SELECT  V.last_update_date
3783 	              ,V.flex_value_id
3784              	      ,V.summary_flag
3785              	      ,level parent_level
3786                       ,V.parent_flex_value parent
3787                       ,V.child_flex_value  child
3788                       ,V.description
3789 	           FROM  ( SELECT b.last_update_date
3790 				 ,b.flex_value_id
3791 		                 ,b.summary_flag
3792 			         ,a.parent_flex_value
3793 				 ,b.flex_value child_flex_value
3794 				 ,b.description
3795 			    FROM  fnd_flex_value_norm_hierarchy a, -- Hierarquia compilada
3796 			         FND_FLEX_VALUES_VL b, -- Valores do segmento
3797 		                 fnd_id_flex_segments c -- Segmentos da estrutura
3798 			    WHERE  c.application_id = 101
3799 		            AND  c.id_flex_code = ''GL#''
3800 			    AND  c.id_flex_num = '||g_chart_of_accounts_id||
3801 			    ' AND c.application_column_name = '''||g_account_segment||'''
3802 			    AND  b.flex_value_set_id = '||g_account_value_set_id||
3803 			    ' AND  b.flex_value_set_id = c.flex_value_set_id
3804 			    AND  b.flex_value >= a.child_flex_value_low
3805 		            AND  b.flex_value <= a.child_flex_value_high
3806 		            AND  a.flex_value_set_id = b.flex_value_set_id
3807                             AND  nvl(DECODE(b.flex_value, ''T'', ''O'', substrb( fnd_global.newline
3808 		                    ||b.compiled_value_attributes
3809 		                    ||fnd_global.newline, instrb( fnd_global.newline
3810 		                    ||b.compiled_value_attributes
3811 		                    ||fnd_global.newline, fnd_global.newline,1,'|| g_exclusion_qualifier_position||')+1, 1 )),''N'') <> ''Y'') V
3812 	      WHERE V.summary_flag=  ''Y''
3813 		 OR  exists  (SELECT  1
3814 				  FROM  gl_code_combinations glcc
3815 		                  WHERE  glcc.chart_of_accounts_id = '||g_chart_of_accounts_id||
3816 		                  ' AND  glcc.summary_flag = ''N''
3817 		                  AND  ('''||l_exclusive_mode||'''=''Y'' OR
3818 				        ('''||l_exclusive_mode||'''=''N'' AND glcc.'||g_bsv_segment||'  in  (select jg_info_v1 from jg_zz_vat_trx_gt)))
3819 				  AND  glcc.'||g_account_segment||' =V.child_flex_value
3820 		               )
3821 	     CONNECT BY  V.parent_flex_value = PRIOR V.child_flex_value
3822 	     START WITH V.parent_flex_value IN
3823 	                  (  SELECT  b.flex_value
3824 	                       FROM  FND_FLEX_VALUES_VL b
3825 	                     WHERE  b.flex_value_set_id = '||g_account_value_set_id||
3826                        '     AND  nvl(DECODE(b.flex_value, ''T'', ''O'', substrb( fnd_global.newline
3827 		                    ||b.compiled_value_attributes
3828 		                    ||fnd_global.newline, instrb( fnd_global.newline
3829 		                    ||b.compiled_value_attributes
3830 		                    ||fnd_global.newline, fnd_global.newline,1,'|| g_exclusion_qualifier_position||')+1, 1 )),''N'') <> ''Y''
3831 	                     AND  NOT EXISTS (SELECT 1 FROM fnd_flex_value_norm_hierarchy a
3832 	                                       WHERE  a.flex_value_set_id = '||g_account_value_set_id||
3833 	                                       ' AND  b.flex_value >= a.child_flex_value_low
3834 	                                       AND  b.flex_value <= a.child_flex_value_high))';
3835 
3836    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3837        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'I050-Query',l_query);
3838    END IF;
3839 
3840 
3841 --FND_FILE.put_line(fnd_file.log,l_query);
3842 
3843    EXECUTE IMMEDIATE l_query
3844    BULK COLLECT INTO fv_last_update_date
3845 		    ,fv_id
3846  		    ,fv_summary_flag
3847 		    ,fv_parent_value_level
3848 		    ,fv_parent_value
3849 		    ,fv_child_value
3850 		    ,fv_description;
3851 
3852 	-- Deleting parent accounts which has no childs.
3853   BEGIN
3854       IF fv_id.COUNT > 0 THEN
3855 	  FOR i in 1..fv_id.LAST
3856 	  LOOP
3857 
3858 	    IF fv_summary_flag (i) = 'Y' THEN
3859 
3860 		      l_childs_exist := '-1';
3861 		      FOR j in 1..fv_id.LAST
3862 		      LOOP
3863 		       IF fv_parent_value.EXISTS(j) THEN
3864 		        IF fv_parent_value(j) = fv_child_value(i) THEN
3865 		          l_childs_exist := '1';
3866 		          EXIT;
3867 		        END If;
3868 		       END IF;
3869 		      END LOOP;
3870 
3871 		     IF l_childs_exist= '-1' and fv_id.EXISTS(i) THEN
3872 
3873 		      fv_last_update_date.DELETE(i);
3874 		      fv_id.DELETE(i);
3875 		      fv_summary_flag.DELETE(i);
3876 		      fv_parent_value_level.DELETE(i);
3877 		      fv_parent_value.DELETE(i);
3878 		      fv_child_value.DELETE(i);
3879 		      fv_description.DELETE(i);
3880 		    END IF;
3881 
3882 	     END If; --IF fv_summary_flag (i) = 'Y' THEN
3883 
3884 	  END LOOP;
3885       END IF; -- End for If fv_id.COUNT >0.
3886   EXCEPTION
3887    WHEN OTHERS THEN
3888       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
3889       IF g_debug_flag = 'Y' THEN
3890          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
3891       END IF;
3892       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3893            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3894       END IF;
3895       g_errbuf := 'ERROR While deleting the parent accounts in I050 register '||SQLERRM;
3896       g_retcode := 2;
3897       return;
3898   END;
3899   IF fv_id.COUNT > 0 THEN
3900     FOR i IN 1..fv_id.LAST
3901     LOOP
3902 
3903 	  IF fv_id.EXISTS(i) THEN
3904 
3905 	    IF fv_parent_value_level(i) = 1 and l_prev_level1_parent <> fv_parent_value(i) THEN
3906 
3907 	      l_prev_level1_parent := fv_parent_value(i);
3908 
3909 	      BEGIN
3910 
3911 		SELECT last_update_date
3912 		      ,flex_value_id
3913 	              ,summary_flag
3914 		      ,description
3915 	 	 INTO l_fv_last_update_date
3916 		      ,l_fv_id
3917 		      ,l_fv_summary_flag
3918 		      ,l_fv_description
3919 		FROM FND_FLEX_VALUES_VL
3920 		WHERE flex_value = fv_parent_value(i)
3921 		AND  flex_value_set_id = g_account_value_set_id; -- GL Account segment value set id
3922 	      EXCEPTION
3923               WHEN OTHERS THEN
3924 		      g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
3925 		      IF g_debug_flag = 'Y' THEN
3926 		         FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
3927 		      END IF;
3928 		      IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3929 			   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR in I050, While getting level 1 parent information Flex Value := '||fv_parent_value(i)||'  '||SQLERRM);
3930 		      END IF;
3931 		      g_errbuf := 'ERROR in I050, While getting level 1 parent information Flex Value := '||fv_parent_value(i)||'  '||SQLERRM;
3932 		      g_retcode := 2;
3933 		      return;
3934 	      END;
3935 
3936 
3937     	    INSERT INTO jl_br_sped_extr_data_t
3938 		       (request_id,
3939            		block,
3940 			record_seq,
3941 			field1,
3942 	                separator1,
3943 		        field2,
3944 			separator2,
3945 	                field3,
3946 		        separator3,
3947 	                field4,
3948 		        separator4,
3949 			field5,
3950 	                separator5,
3951 		        field6,
3952 			separator6,
3953 	              --field7,
3954 		        separator7,
3955 			field8,
3956 	                separator8,
3957 		        created_by,
3958 			creation_date,
3959 	                last_updated_by,
3960 		        last_update_date,
3961 			last_update_login)
3962 		VALUES( g_concurrent_request_id
3963 		       ,'I'  -- Block
3964 		       ,jl_br_sped_extr_data_t_s.nextval -- record_seq
3965 		       ,'I050' -- Register (field 1)
3966 		       ,'|'
3967 		       , to_char(l_fv_last_update_date,'DDMMYYYY')   --field 2
3968 	               ,'|'
3969 		       , JL_BR_SPED_DATA_EXTRACT_PKG.get_account_type(l_fv_id)       --field 3
3970 		       ,'|'
3971 		       , decode(l_fv_summary_flag,'N','A','S')  --field 4   summary flag has 'Y','N' values.
3972 		       ,'|'
3973 		       ,fv_parent_value_level(i)         --field 5
3974 		       ,'|'
3975 		       ,fv_parent_value(i)          --field 6
3976 		       ,'|'
3977 		    -- ,fv_parent_value(i)        --field 7
3978    	              ,'|'
3979 	              ,l_fv_description        --field 8
3980 		      ,'|'
3981 	              ,g_created_by
3982                       ,g_creation_date
3983                       ,g_last_updated_by
3984                       ,g_last_update_date
3985                       ,g_last_update_login
3986 		     );
3987 
3988               END IF; -- IF fv_parent_value_level(i) = 1 and l_prev_level1_parent <> fv_parent_value(i) THEN
3989 
3990 
3991 	    INSERT INTO jl_br_sped_extr_data_t
3992 	       (request_id,
3993 		block,
3994 	        record_seq,
3995                 field1,
3996                 separator1,
3997                 field2,
3998                 separator2,
3999                 field3,
4000                 separator3,
4001                 field4,
4002                 separator4,
4003                 field5,
4004                 separator5,
4005                 field6,
4006                 separator6,
4007                 field7,
4008                 separator7,
4009                 field8,
4010                 separator8,
4011                 created_by,
4012                 creation_date,
4013                 last_updated_by,
4014                 last_update_date,
4015                 last_update_login)
4016 		VALUES( g_concurrent_request_id
4017 		       ,'I'  -- Block
4018 		       ,jl_br_sped_extr_data_t_s.nextval -- record_seq
4019 		       ,'I050' -- Register (field 1)
4020 		       ,'|'
4021 		       , to_char(fv_last_update_date(i),'DDMMYYYY')   --field 2
4022 	               ,'|'
4023 		       , JL_BR_SPED_DATA_EXTRACT_PKG.get_account_type(fv_id(i))       --field 3
4024 		       ,'|'
4025 		       , decode(fv_summary_flag(i),'N','A','S')  --field 4   summary flag has 'Y','N' values.
4026 		       ,'|'
4027 		       ,fv_parent_value_level(i)+1         --field 5
4028 		       ,'|'
4029 		       ,fv_child_value(i)          --field 6
4030 		       ,'|'
4031 		       ,fv_parent_value(i)        --field 7
4032 	               ,'|'
4033 	              ,fv_description(i)        --field 8
4034 		      ,'|'
4035 	              ,g_created_by
4036                       ,g_creation_date
4037                       ,g_last_updated_by
4038                       ,g_last_update_date
4039                       ,g_last_update_login
4040 		     );
4041 
4042        IF fv_summary_flag(i) = 'N' THEN
4043 --FND_FILE.put_line(fnd_file.log,'Before I051'||fv_child_value(i));
4044              register_I051(fv_child_value(i));
4045 
4046             IF g_bookkeeping_type ='G' OR g_bookkeeping_type = 'R' OR g_bookkeeping_type = 'B' THEN
4047                  /* I052 is to display agglutination codes. As we get the agglutination codes
4048                   for fsg, if the fsg request ids are null then there is no need to call I052 */
4049                  IF g_balance_statement_request_id IS NOT NULL AND g_income_statement_request_id IS NOT NULL THEN
4050 	                 register_I052(fv_child_value(i));
4051                  END IF;
4052             END IF;
4053 
4054         END IF;
4055 
4056     END IF; --IF fv_id.EXISTS(i) THEN
4057 
4058   END LOOP;
4059  END IF; --  IF fv_id.COUNT > 0 THEN
4060  IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4061      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
4062                    G_PKG_NAME||': ' ||l_api_name||'()-');
4063  END IF;
4064 
4065 EXCEPTION
4066    WHEN OTHERS THEN
4067 
4068       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4069       IF g_debug_flag = 'Y' THEN
4070          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
4071       END IF;
4072       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4073            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4074       END IF;
4075       g_errbuf := 'ERROR While inserting I050 register '||SQLERRM;
4076       g_retcode := 2;
4077       return;
4078 END register_I050;
4079 
4080 PROCEDURE register_I051(p_account_flex_value fnd_flex_values.flex_value%TYPE ) AS
4081 l_institution_resp_code      VARCHAR2(250);
4082 l_referential_account        gl_cons_flex_hierarchies.parent_flex_value%TYPE;
4083 l_cnt                        NUMBER;
4084 l_api_name                   CONSTANT VARCHAR2(30) :='REGISTER_I051';
4085 BEGIN
4086 
4087 --fnd_file.put_line(fnd_file.log,'coa_id '||g_coa_mapping_id);
4088 
4089    IF g_coa_mapping_id IS NULL THEN
4090       RETURN;
4091    END IF;
4092 
4093    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4094        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
4095          G_PKG_NAME||': '||l_api_name||'()+');
4096    END IF;
4097 
4098   -- fnd_file.put_line(fnd_file.log,'Felx value :'||p_account_flex_value||'  G_coa_maping_id :'||g_coa_mapping_id);
4099 
4100    BEGIN
4101 
4102         SELECT  count(distinct parent_flex_value) into l_cnt
4103 	        FROM   gl_coa_mappings C
4104                        ,gl_cons_segment_map cm
4105 	              ,gl_cons_flex_hierarchies ch
4106 	      WHERE  c.coa_mapping_id = g_coa_mapping_id
4107 	      AND  cm.coa_mapping_id =  c.coa_mapping_id
4108 	      AND  cm.segment_map_type = 'R' --Detail Rollup Ranges
4109         AND  cm.segment_map_id = ch.segment_map_id
4110  	      AND  p_account_flex_value BETWEEN ch.child_flex_value_low AND ch.child_flex_value_high;
4111 
4112    EXCEPTION
4113        WHEN NO_DATA_FOUND THEN
4114             l_referential_account := NULL;
4115        WHEN OTHERS THEN
4116              g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4117              IF g_debug_flag = 'Y' THEN
4118                 FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
4119              END IF;
4120              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4121                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4122              END IF;
4123              g_errbuf := 'ERROR While finding Number of referential chart of accounts associated for an account in I051 register '||SQLERRM;
4124              g_retcode := 2;
4125              return;
4126 	 END;
4127 
4128    IF  l_cnt > 1 THEN
4129        FND_FILE.PUT_LINE(FND_FILE.LOG,'Consolidation is not proper. '||p_account_flex_value||' is associated with more than one referential chart of account');
4130    END IF;
4131 
4132 	 BEGIN
4133         SELECT  parent_flex_value into l_referential_account
4134 	        FROM  (SELECT ch.parent_flex_value
4135                    FROM gl_coa_mappings C
4136                         ,gl_cons_segment_map cm
4137 	                      ,gl_cons_flex_hierarchies ch
4138 	                WHERE  c.coa_mapping_id = g_coa_mapping_id
4139 	                  AND  cm.coa_mapping_id =  c.coa_mapping_id
4140 	                  AND  cm.segment_map_type = 'R' --Detail Rollup Ranges
4141                     AND  cm.segment_map_id = ch.segment_map_id
4142  	                  AND  p_account_flex_value BETWEEN ch.child_flex_value_low AND ch.child_flex_value_high
4143                  ORDER BY ch.last_update_date DESC)
4144          WHERE  ROWNUM = 1;
4145 
4146    EXCEPTION
4147        WHEN NO_DATA_FOUND THEN
4148             l_referential_account := NULL;
4149        WHEN OTHERS THEN
4150              g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4151              IF g_debug_flag = 'Y' THEN
4152                 FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
4153              END IF;
4154              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4155                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4156              END IF;
4157              g_errbuf := 'ERROR While finding referential chart of accounts mapping in I051 register '||SQLERRM;
4158              g_retcode := 2;
4159              return;
4160 	 END;
4161 
4162 --fnd_file.put_line(fnd_file.log,'l_ref_account :'||l_referential_account);
4163    BEGIN
4164 
4165 
4166 /*  GETTING ENTITY_RESP_REFERENTIAL_COA IS NOT CONFIRMED. NEED TO RECHECK AGAIN  */
4167 
4168       IF UPPER(g_accounting_type) = 'CENTRALIZED' AND g_establishment_id IS NOT NULL THEN
4169 
4170 	    SELECT  etb_information5
4171 	      INTO  l_institution_resp_code
4172 	      FROM  xle_etb_profiles
4173              WHERE  legal_entity_id  = g_legal_entity_id
4174 	       AND  establishment_id = g_establishment_id;
4175 
4176         ELSE
4177 
4178 	    SELECT  le_information5
4179 	      INTO  l_institution_resp_code
4180 	      FROM  xle_entity_profiles
4181              WHERE  legal_entity_id = g_legal_entity_id ;
4182 
4183         END IF;
4184 
4185   	EXCEPTION
4186          WHEN NO_DATA_FOUND THEN
4187              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4188                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'No Data Found for Entity_RESP_REFERENTIAL_COA -'||SQLERRM);
4189              END IF;
4190              l_institution_resp_code := NULL;  -- verify
4191          WHEN OTHERS THEN
4192              g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4193              IF g_debug_flag = 'Y' THEN
4194                 FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
4195              END IF;
4196              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4197                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4198              END IF;
4199              g_errbuf := 'ERROR While finding institution responsibility code in I051 register '||SQLERRM;
4200              g_retcode := 2;
4201              return;
4202     END;
4203 
4204  IF  l_referential_account IS NOT NULL THEN
4205 
4206 	INSERT INTO jl_br_sped_extr_data_t
4207                    (request_id,
4208                     block,
4209                     record_seq,
4210                     field1,
4211                     separator1,
4212                     field2,
4213                     separator2,
4214                     field3,
4215                     separator3,
4216 		    field4,
4217                     separator4,
4218                     created_by,
4219                     creation_date,
4220                     last_updated_by,
4221                     last_update_date,
4222                     last_update_login)
4223         VALUES (g_concurrent_request_id
4224                 ,'I'  -- Block
4225                 ,jl_br_sped_extr_data_t_s.nextval -- record_seq
4226                 ,'I051' -- Register (field 1)
4227                 ,'|'
4228                 , SUBSTR(l_institution_resp_code,1,2) --field 2
4229                 ,'|'
4230                 , NULL   --field 3
4231                 ,'|'
4232                 , l_referential_account --field 4
4233                 ,'|'
4234                 ,g_created_by
4235                 ,g_creation_date
4236                 ,g_last_updated_by
4237                 ,g_last_update_date
4238                 ,g_last_update_login
4239                );
4240 
4241 END IF; --END for IF  l_referential_account IS NOT NULL THEN
4242 
4243    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4244       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
4245                     G_PKG_NAME||': ' ||l_api_name||'()-');
4246 	END IF;
4247 EXCEPTION
4248    WHEN OTHERS THEN
4249 
4250       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4251       IF g_debug_flag = 'Y' THEN
4252          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
4253       END IF;
4254       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4255            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4256       END IF;
4257       g_errbuf := 'ERROR While inserting data into I051 register '||SQLERRM;
4258       g_retcode := 2;
4259       return;
4260 END register_I051;
4261 
4262 PROCEDURE register_I052(p_account_flex_value fnd_flex_values.flex_value%TYPE) AS
4263   l_bal_agglutination_code       rg_report_axes_v.description%TYPE;
4264 	l_income_agglutination_code    rg_report_axes_v.description%TYPE;
4265 	l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I052';
4266   sql_stmt                   VARCHAR2(5000);
4267 BEGIN
4268 
4269    IF nvl(g_closing_period_flag,'N') <> 'Y' THEN
4270 	   RETURN;
4271    END IF;
4272 
4273    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4274        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
4275          G_PKG_NAME||': '||l_api_name||'()+');
4276    END IF;
4277 
4278 
4279   /* Inserts all agglutination_codes defined for balance_statement_report_id*/
4280    sql_stmt := 'INSERT INTO jl_br_sped_extr_data_t
4281                (request_id,
4282                 block,
4283                 record_seq,
4284                 field1,
4285                 separator1,
4286                 field2,
4287                 separator2,
4288                 field3,
4289                 separator3,
4290                 created_by,
4291                 creation_date,
4292                 last_updated_by,
4293                 last_update_date,
4294                 last_update_login
4295 		)
4296                 SELECT  '||g_concurrent_request_id||'
4297                         ,''I''  -- Block
4298                         ,jl_br_sped_extr_data_t_s.nextval
4299                         ,''I052'' -- Register (field 1)
4300                         ,''|''
4301                         , NULL --field 2
4302                         ,''|''
4303                         , row_seq_ident
4304                         ,''|''
4305                         ,'||g_created_by||'
4306                         ,'''||g_creation_date||'''
4307                         ,'||g_last_updated_by||'
4308                         ,'''||g_last_update_date||'''
4309                         ,'||g_last_update_login||'
4310         	FROM
4311                      (SELECT DECODE('''||g_agglutination_code_source||''',''FSG_LINE'',to_char(r3.sequence),r3.description) row_seq_ident
4312 	                FROM   rg_reports r1
4313                                ,rg_report_axis_sets r2
4314                                ,rg_report_axes_v r3
4315                                ,rg_report_axis_contents r4
4316                        WHERE  r1.report_id   = '||g_balance_statement_report_id||'
4317                          AND  r1.row_set_id  = r2.axis_set_id
4318                          AND  r2.axis_set_id = r3.axis_set_id
4319                          AND  r3.axis_set_id = r4.axis_set_id
4320                          AND  r3.sequence = r4.axis_seq
4321                          AND  :p_account_flex_value >='||g_account_segment||'_LOW
4322                          AND  :p_account_flex_value <='|| g_account_segment||'_HIGH)';
4323 
4324 --FND_FILE.PUT_LINE(FND_FILE.LOG, sql_stmt);
4325 
4326      EXECUTE IMMEDIATE sql_stmt using p_account_flex_value,p_account_flex_value;
4327 
4328 
4329   /* Inserts all agglutination_codes defined for income_statement_report_id*/
4330     sql_stmt := 'INSERT INTO jl_br_sped_extr_data_t
4331           (request_id,
4332            block,
4333            record_seq,
4334            field1,
4335            separator1,
4336            field2,
4337            separator2,
4338            field3,
4339            separator3,
4340            created_by,
4341            creation_date,
4342            last_updated_by,
4343            last_update_date,
4344            last_update_login
4345 	 )
4346          SELECT  '||g_concurrent_request_id||'
4347                 ,''I''  -- Block
4348                 ,jl_br_sped_extr_data_t_s.nextval
4349 	        ,''I052'' -- Register (field 1)
4350                 ,''|''
4351                 , NULL --field 2
4352                 ,''|''
4353                 ,row_seq_ident
4354                 ,''|''
4355                 ,'||g_created_by||'
4356                 ,'''||g_creation_date||'''
4357                 ,'||g_last_updated_by||'
4358                 ,'''||g_last_update_date||'''
4359                 ,'||g_last_update_login||'
4360 	FROM
4361 	    (SELECT   DECODE('''||g_agglutination_code_source||''',''FSG_LINE'',to_char(r3.sequence),r3.description) row_seq_ident
4362 	       FROM   rg_reports r1
4363 	          ,rg_report_axis_sets r2
4364 	          ,rg_report_axes_v r3
4365 	          ,rg_report_axis_contents r4
4366 	   WHERE  r1.report_id   = '||g_income_statement_report_id||'
4367              AND  r1.row_set_id  = r2.axis_set_id
4368              AND  r2.axis_set_id = r3.axis_set_id
4369              AND  r3.axis_set_id = r4.axis_set_id
4370              AND  r3.sequence = r4.axis_seq
4371              AND  :p_account_flex_value >='||g_account_segment||'_LOW
4372              AND  :p_account_flex_value <='|| g_account_segment||'_HIGH)';
4373 
4374 --FND_FILE.PUT_LINE(FND_FILE.LOG, sql_stmt);
4375 
4376       EXECUTE IMMEDIATE sql_stmt using p_account_flex_value,p_account_flex_value;
4377 
4378 
4379   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4380       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
4381 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
4382    END IF;
4383 
4384 EXCEPTION
4385    WHEN OTHERS THEN
4386 
4387       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4388       IF g_debug_flag = 'Y' THEN
4389          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
4390       END IF;
4391       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4392            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4393       END IF;
4394       g_errbuf := 'ERROR While inserting data into I052 register '||SQLERRM;
4395       g_retcode := 2;
4396       return;
4397 
4398 END register_I052;
4399 
4400 PROCEDURE register_I100 AS
4401 l_api_name      CONSTANT VARCHAR2(30) :='REGISTER_I100';
4402 l_query         VARCHAR2(6000);
4403 BEGIN
4404     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4405       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
4406         G_PKG_NAME||': '||l_api_name||'()+');
4407     END IF;
4408 
4409 -- FND_FILE.PUT_LINE(FND_FILE.LOG,' in register I100');
4410 
4411  IF l_cc_exists_flag = 0 THEN
4412 
4413      RETURN;
4414 
4415  END IF;
4416 
4417 l_query  := 'INSERT INTO jl_br_sped_extr_data_t
4418     (request_id,
4419      block,
4420      record_seq,
4421      field1,
4422      separator1,
4423      field2,     separator2,
4424      field3,       separator3,
4425      field4,       separator4,
4426      created_by,         creation_date,      last_updated_by,
4427      last_update_date,
4428      last_update_login
4429      )
4430        SELECT '||g_concurrent_request_id||
4431              ',''I''  -- Block
4432                ,jl_br_sped_extr_data_t_s.nextval --record_seq
4433                ,''I100'' -- Register (field 1)
4434            ,''|''
4435              ,to_char(fv.last_update_date,''DDMMYYYY'')
4436            ,''|''
4437              ,fv.flex_value
4438            ,''|''
4439              ,fv.description
4440            ,''|''
4441            ,'||g_created_by||                    ','''||g_creation_date||''''||
4442 	   ','||g_last_updated_by||               ','''||g_last_update_date||''''||
4443 	   ','||g_last_update_login||                    ' FROM  fnd_flex_values_vl fv
4444       WHERE  fv.flex_value_set_id = '||g_cost_center_value_set_id||
4445         ' AND  EXISTS (SELECT  1
4446                        FROM  gl_code_combinations glcc
4447                       WHERE  glcc.chart_of_accounts_id = '||g_chart_of_accounts_id||
4448                          ' AND  glcc.summary_flag = ''N''
4449 			   AND  ('''||l_exclusive_mode||'''=''Y''
4450                                    OR ('''||l_exclusive_mode ||'''=''N'' AND  glcc.'||g_bsv_segment||' in (select jg_info_v1 from jg_zz_vat_trx_gt)))
4451 			   AND  glcc.'||g_cost_center_segment||' =fv.flex_value)';
4452 
4453  --     fnd_file.put_line(fnd_file.log,l_query);
4454 
4455       execute immediate l_query;
4456 
4457 --  FND_FILE.PUT_LINE(FND_FILE.LOG,' after I100');
4458 
4459 --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
4460 
4461   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4462        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
4463                       G_PKG_NAME||': ' ||l_api_name||'()-');
4464   END IF;
4465 
4466   EXCEPTION
4467   WHEN OTHERS THEN
4468           g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4469      IF g_debug_flag = 'Y' THEN
4470         FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
4471      END IF;
4472      IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4473           FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4474      END IF;
4475      g_errbuf := 'ERROR While inserting data into I100 register '||SQLERRM;
4476      g_retcode := 2;
4477      return;
4478 END register_I100;
4479 
4480 /* This register will store the period's information like start_date and end_date parameters*/
4481 
4482 PROCEDURE register_I150 AS
4483 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I150';
4484 BEGIN
4485 
4486   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4487        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
4488                       G_PKG_NAME||': ' ||l_api_name||'()+');
4489   END IF;
4490 
4491      INSERT INTO jl_br_sped_extr_data_t
4492     (request_id,
4493      block,
4494      record_seq,
4495      field1,
4496      separator1,
4497      field2,
4498      separator2,
4499      field3,
4500      separator3,
4501      created_by,
4502      creation_date,
4503      last_updated_by,
4504      last_update_date,
4505      last_update_login
4506      )
4507      VALUES (g_concurrent_request_id
4508 	         ,'I'  -- Block
4509 		       ,jl_br_sped_extr_data_t_s.nextval -- record_seq
4510 		       ,'I150' -- Register (field 1)
4511            ,'|'
4512 	         ,to_char(g_start_date,'DDMMYYYY') --filed2
4513            ,'|'
4514 	         ,to_char(g_end_date,'DDMMYYYY')   --field3
4515            ,'|'
4516            ,g_created_by
4517            ,g_creation_date
4518            ,g_last_updated_by
4519            ,g_last_update_date
4520            ,g_last_update_login
4521            );
4522 
4523 --   FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
4524 
4525   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4526       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
4527 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
4528    END IF;
4529 
4530 EXCEPTION
4531    WHEN OTHERS THEN
4532 
4533       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4534       IF g_debug_flag = 'Y' THEN
4535          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
4536       END IF;
4537       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4538            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4539       END IF;
4540       g_errbuf := 'ERROR While inserting data into I150 register '||SQLERRM;
4541       g_retcode := 2;
4542       return;
4543 END register_I150;
4544 
4545 -- field2 is for digital signature, which will be added by customer. This register is required only for bookkeeping type 'B'
4546 PROCEDURE register_I151 AS
4547 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I151';
4548 BEGIN
4549 
4550   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4551        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
4552                       G_PKG_NAME||': ' ||l_api_name||'()+');
4553   END IF;
4554 
4555      INSERT INTO jl_br_sped_extr_data_t
4556     (request_id,
4557      block,
4558      record_seq,
4559      field1,
4560      separator1,
4561      separator2,
4562      created_by,
4563      creation_date,
4564      last_updated_by,
4565      last_update_date,
4566      last_update_login
4567      )
4568      VALUES (g_concurrent_request_id
4569 	         ,'I'  -- Block
4570 		       ,jl_br_sped_extr_data_t_s.nextval -- record_seq
4571 		       ,'I151' -- Register (field 1)
4572            ,'|'
4573            ,'|'
4574            ,g_created_by
4575            ,g_creation_date
4576            ,g_last_updated_by
4577            ,g_last_update_date
4578            ,g_last_update_login
4579            );
4580 
4581 --   FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
4582 
4583   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4584       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
4585 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
4586    END IF;
4587 
4588 EXCEPTION
4589    WHEN OTHERS THEN
4590 
4591       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4592       IF g_debug_flag = 'Y' THEN
4593          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
4594       END IF;
4595       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4596            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4597       END IF;
4598       g_errbuf := 'ERROR While inserting data into I151 register '||SQLERRM;
4599       g_retcode := 2;
4600       return;
4601 END register_I151;
4602 
4603 PROCEDURE register_I155 AS
4604 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I155';
4605 l_query1                   VARCHAR2(16000);
4606 
4607 BEGIN
4608 
4609    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4610        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
4611          G_PKG_NAME||': '||l_api_name||'()+');
4612    END IF;
4613 
4614 
4615 l_query1 :=
4616 'INSERT INTO jl_br_sped_extr_data_t
4617                 (request_id,
4618                  block,
4619                  record_seq,
4620                  field1,
4621                  separator1,
4622                  field2,
4623                  separator2,
4624                  field3,
4625 	         separator3,
4626                  field4,
4627 	         separator4,
4628 	         field5,
4629                  separator5,
4630                  field6,
4631                  separator6,
4632                  field7,
4633                  separator7,
4634                  field8,
4635                  separator8,
4636                  field9,
4637                  separator9,
4638                  created_by,
4639 		 creation_date,
4640 	         last_updated_by,
4641                  last_update_date,
4642                  last_update_login
4643                  )
4644                 SELECT '||g_concurrent_request_id||
4645                        ',''I''  -- Block
4646                        ,jl_br_sped_extr_data_t_s.nextval --record_seq
4647                        ,''I155'' -- Register (field 1)
4648                        ,''|''
4649                        ,natural_acct
4650                        ,''|''
4651                        ,cost_center
4652                        ,''|''
4653                        ,begin_bal
4654                        ,''|''
4655 		       ,begin_bal_type
4656 		       ,''|''
4657 		       ,period_dr
4658 		       ,''|''
4659 		       ,period_cr
4660 		       ,''|''
4661 		       ,end_bal
4662 		       ,''|''
4663 		       ,end_bal_type
4664                       ,''|''
4665                       ,'||g_created_by||
4666 		      ','''||g_creation_date||''''||
4667                       ','||g_last_updated_by||
4668 		      ','''||g_last_update_date||''''||
4669 	              ','||g_last_update_login||
4670 	         ' FROM (SELECT  glcc.'||g_account_segment||' natural_acct
4671                            ,''|''
4672                             ,decode('||l_cc_exists_flag||',0,null,glcc.'||g_cost_center_segment||') cost_center
4673                             ,''|''
4674                             ,TRIM(TO_CHAR(ABS(NVL(SUM(DECODE(glb.period_name
4675 				 ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR,0)),0))
4676 			         ,''99999999999999990D00'',''NLS_NUMERIC_CHARACTERS = '''',.'''''')) begin_bal
4677 			    ,''|''
4678 			    ,DECODE(SIGN(NVL(SUM(DECODE(glb.period_name
4679 		                       ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR,0)),0))
4680 		                       ,1,''D'',''C'') begin_bal_type
4681 		            ,''|''
4682 		           ,TRIM(TO_CHAR(NVL(SUM(DECODE(glb.period_name,'''||g_period_name||''',PERIOD_NET_DR,0))
4683 				        +SUM(DECODE(glb.period_name,'''||g_adjustment_period_name||''',PERIOD_NET_DR,0))
4684 	                               ,0),''99999999999999990D00'',''NLS_NUMERIC_CHARACTERS = '''',.'''''')) period_dr
4685 			   ,''|''
4686 		           ,TRIM(TO_CHAR(NVL(SUM(DECODE(glb.period_name,'''||g_period_name||''',PERIOD_NET_CR,0))
4687 				      +SUM(DECODE(glb.period_name,'''||g_adjustment_period_name||''',PERIOD_NET_CR,0))
4688 	                            ,0),''99999999999999990D00'',''NLS_NUMERIC_CHARACTERS = '''',.'''''')) period_cr
4689 			   ,''|''
4690 		          ,TRIM(TO_CHAR(ABS(NVL(SUM(
4691 				    DECODE(NVL('''||g_adjustment_period_name||''',''-1'')
4692 	                              ,''-1'' , DECODE(glb.period_name
4693                                            ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4694                                             ,0)
4695 				       ,DECODE(glb.period_name,
4696 		                       '''||g_adjustment_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4697                                         ,0 )
4698 					  )
4699 	                           ),0)),''99999999999999990D00'',''NLS_NUMERIC_CHARACTERS = '''',.'''''')) end_bal
4700 			   ,''|''
4701 			      ,DECODE(SIGN(NVL(SUM(
4702 		                    DECODE(NVL('''||g_adjustment_period_name||''',''-1'')
4703 			                ,''-1'' , DECODE(glb.period_name
4704                                             ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4705                                             ,0)
4706 	                                ,DECODE(glb.period_name,
4707                                             '''||g_adjustment_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4708                                         ,0 )
4709                                   )
4710                            ),0)),1,''D'',''C'') end_bal_type
4711                  FROM  gl_balances glb
4712 	             ,gl_code_combinations glcc
4713 	  	 WHERE  period_name in('''||g_period_name||''' , '''||g_adjustment_period_name||''')
4714 		 AND  glb.ledger_id = '||g_ledger_id||
4715 		 ' AND  glb.currency_code   =  '''||g_currency_code||'''
4716 	           AND  glb.code_combination_id= glcc.code_combination_id
4717 	   	   AND  ('''||l_exclusive_mode||'''=''Y'' OR ('''||l_exclusive_mode||'''=''N'' AND glcc.'||g_bsv_segment||' in (select jg_info_v1 from jg_zz_vat_trx_gt)))  AND  glcc.summary_flag = ''N''
4718 		   AND  glb.actual_flag = ''A''
4719 		 GROUP BY  glcc.'||g_account_segment||',decode('||l_cc_exists_flag||',0,null,glcc.'||g_cost_center_segment ||')
4720 	          HAVING  NVL(SUM(DECODE(glb.period_name
4721 		   ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR,0)),0) <> 0 OR
4722 	            NVL(SUM(DECODE(glb.period_name,'''||g_period_name||''',PERIOD_NET_DR,0))
4723 		           + SUM(DECODE(glb.period_name,'''||g_adjustment_period_name||''',PERIOD_NET_DR,0)),0) <> 0 OR
4724 	            NVL(SUM(DECODE(glb.period_name,'''||g_period_name||''',PERIOD_NET_CR,0))
4725 		           +SUM(DECODE(glb.period_name,'''||g_adjustment_period_name||''',PERIOD_NET_CR,0)),0) <> 0 OR
4726 	           NVL(SUM(
4727 		           DECODE(NVL('''||g_adjustment_period_name||''',''-1'')
4728                                 ,''-1'' , DECODE(glb.period_name
4729                                             ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4730                                             ,0)
4731                                 ,DECODE(glb.period_name,
4732                                           '''||g_adjustment_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4733                                         ,0 )
4734                                   )
4735                            ),0) <> 0 )';
4736 
4737 
4738 --  fnd_file.put_line(fnd_file.log,'I155_query:'||l_query1);
4739 
4740            execute immediate  'INSERT INTO jl_br_sped_extr_data_t
4741                 (request_id,
4742                  block,
4743                  record_seq,
4744                  field1,
4745                  separator1,
4746                  field2,
4747                  separator2,
4748                  field3,
4749 	         separator3,
4750                  field4,
4751 	         separator4,
4752 	         field5,
4753                  separator5,
4754                  field6,
4755                  separator6,
4756                  field7,
4757                  separator7,
4758                  field8,
4759                  separator8,
4760                  field9,
4761                  separator9,
4762                  created_by,
4763 		 creation_date,
4764 	         last_updated_by,
4765                  last_update_date,
4766                  last_update_login
4767                  )
4768                 SELECT '||g_concurrent_request_id||
4769                        ',''I''  -- Block
4770                        ,jl_br_sped_extr_data_t_s.nextval --record_seq
4771                        ,''I155'' -- Register (field 1)
4772                        ,''|''
4773                        ,natural_acct
4774                        ,''|''
4775                        ,cost_center
4776                        ,''|''
4777                        ,begin_bal
4778                        ,''|''
4779 		       ,begin_bal_type
4780 		       ,''|''
4781 		       ,period_dr
4782 		       ,''|''
4783 		       ,period_cr
4784 		       ,''|''
4785 		       ,end_bal
4786 		       ,''|''
4787 		       ,end_bal_type
4788                       ,''|''
4789                       ,'||g_created_by||
4790 		      ','''||g_creation_date||''''||
4791                       ','||g_last_updated_by||
4792 		      ','''||g_last_update_date||''''||
4793 	              ','||g_last_update_login||
4794 	         ' FROM (SELECT  glcc.'||g_account_segment||' natural_acct
4795                            ,''|''
4796                             ,decode('||l_cc_exists_flag||',0,null,glcc.'||g_cost_center_segment||') cost_center
4797                             ,''|''
4798                             ,TRIM(TO_CHAR(ABS(NVL(SUM(DECODE(glb.period_name
4799 				 ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR,0)),0))
4800 			         ,''99999999999999990D00'',''NLS_NUMERIC_CHARACTERS = '''',.'''''')) begin_bal
4801 			    ,''|''
4802 			    ,DECODE(SIGN(NVL(SUM(DECODE(glb.period_name
4803 		                       ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR,0)),0))
4804 		                       ,1,''D'',''C'') begin_bal_type
4805 		            ,''|''
4806 		           ,TRIM(TO_CHAR(NVL(SUM(DECODE(glb.period_name,'''||g_period_name||''',PERIOD_NET_DR,0))
4807 				        +SUM(DECODE(glb.period_name,'''||g_adjustment_period_name||''',PERIOD_NET_DR,0))
4808 	                               ,0),''99999999999999990D00'',''NLS_NUMERIC_CHARACTERS = '''',.'''''')) period_dr
4809 			   ,''|''
4810 		           ,TRIM(TO_CHAR(NVL(SUM(DECODE(glb.period_name,'''||g_period_name||''',PERIOD_NET_CR,0))
4811 				      +SUM(DECODE(glb.period_name,'''||g_adjustment_period_name||''',PERIOD_NET_CR,0))
4812 	                            ,0),''99999999999999990D00'',''NLS_NUMERIC_CHARACTERS = '''',.'''''')) period_cr
4813 			   ,''|''
4814 		          ,TRIM(TO_CHAR(ABS(NVL(SUM(
4815 				    DECODE(NVL('''||g_adjustment_period_name||''',''-1'')
4816 	                              ,''-1'' , DECODE(glb.period_name
4817                                            ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4818                                             ,0)
4819 				       ,DECODE(glb.period_name,
4820 		                       '''||g_adjustment_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4821                                         ,0 )
4822 					  )
4823 	                           ),0)),''99999999999999990D00'',''NLS_NUMERIC_CHARACTERS = '''',.'''''')) end_bal
4824 			   ,''|''
4825 			      ,DECODE(SIGN(NVL(SUM(
4826 		                    DECODE(NVL('''||g_adjustment_period_name||''',''-1'')
4827 			                ,''-1'' , DECODE(glb.period_name
4828                                             ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4829                                             ,0)
4830 	                                ,DECODE(glb.period_name,
4831                                             '''||g_adjustment_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4832                                         ,0 )
4833                                   )
4834                            ),0)),1,''D'',''C'') end_bal_type
4835                  FROM  gl_balances glb
4836 	             ,gl_code_combinations glcc
4837 	  	 WHERE  period_name in('''||g_period_name||''' , '''||g_adjustment_period_name||''')
4838 		 AND  glb.ledger_id = '||g_ledger_id||
4839 		 ' AND  glb.currency_code   =  '''||g_currency_code||'''
4840 	           AND  glb.code_combination_id= glcc.code_combination_id
4841 	   	   AND  ('''||l_exclusive_mode||'''=''Y'' OR ('''||l_exclusive_mode||'''=''N'' AND glcc.'||g_bsv_segment||' in (select jg_info_v1 from jg_zz_vat_trx_gt)))
4842 		   AND  glcc.summary_flag = ''N''
4843 		   AND  glb.actual_flag = ''A''
4844 		 GROUP BY  glcc.'||g_account_segment||',decode('||l_cc_exists_flag||',0,null,glcc.'||g_cost_center_segment ||')
4845 	          HAVING  NVL(SUM(DECODE(glb.period_name
4846 		   ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR,0)),0) <> 0 OR
4847 	            NVL(SUM(DECODE(glb.period_name,'''||g_period_name||''',PERIOD_NET_DR,0))
4848 		           + SUM(DECODE(glb.period_name,'''||g_adjustment_period_name||''',PERIOD_NET_DR,0)),0) <> 0 OR
4849 	            NVL(SUM(DECODE(glb.period_name,'''||g_period_name||''',PERIOD_NET_CR,0))
4850 		           +SUM(DECODE(glb.period_name,'''||g_adjustment_period_name||''',PERIOD_NET_CR,0)),0) <> 0 OR
4851 	           NVL(SUM(
4852 		           DECODE(NVL('''||g_adjustment_period_name||''',''-1'')
4853                                 ,''-1'' , DECODE(glb.period_name
4854                                             ,'''||g_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4855                                             ,0)
4856                                 ,DECODE(glb.period_name,
4857                                           '''||g_adjustment_period_name||''',BEGIN_BALANCE_DR - BEGIN_BALANCE_CR +PERIOD_NET_DR -PERIOD_NET_CR
4858                                         ,0 )
4859                                   )
4860                            ),0) <> 0 )';
4861 
4862 
4863   -- FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
4864 
4865   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4866       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
4867 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
4868    END IF;
4869 
4870 EXCEPTION
4871    WHEN OTHERS THEN
4872 
4873       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4874       IF g_debug_flag = 'Y' THEN
4875          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
4876       END IF;
4877       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4878            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4879       END IF;
4880 	    g_errbuf := 'ERROR While inserting data into I155 register '||SQLERRM;
4881       g_retcode := 2;
4882       return;
4883 END register_I155;
4884 
4885 PROCEDURE register_I200 AS
4886    l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I200';
4887    l_period_flag VARCHAR2(1) := NULL;
4888    l_end_date DATE;
4889    l_jounrnal_flag VARCHAR2(1) := NULL;
4890    CURSOR c_journals IS
4891 	   SELECT  j.name||'-'||j.je_batch_id name
4892                   ,j.default_effective_date
4893 	          ,j.running_total_accounted_dr
4894 	          ,j.je_header_id
4895                   ,j.je_source
4896                   ,j.je_category
4897 		  ,j.period_name
4898 	    FROM  gl_je_headers j
4899 	    WHERE  j.ledger_id  = g_ledger_id
4900 	    AND  j.actual_flag = 'A'
4901 	    AND  j.status = 'P'
4902 	    AND  j.currency_code <> 'STAT'  -- filtering statistic journals. Introduced thid condition for new sped enhancement
4903             AND  j.period_name in (g_period_name,g_adjustment_period_name)
4904 	    AND  ((j.default_effective_date between g_start_date and g_end_date)
4905 	          OR (j.default_effective_date between g_adjustment_period_start_date and g_adjustment_period_end_date))
4906 	    AND   j.je_source NOT IN (SELECT  fl.lookup_code
4907                                        FROM  fnd_lookups fl
4908                                       WHERE  fl.lookup_type = 'JLBR_SPED_LEGACY_SOURCES'
4909 				      AND    fl.ENABLED_FLAG = 'Y')
4910 	    AND  EXISTS (SELECT 1
4911 	                       FROM gl_je_lines jl
4912 	                       WHERE jl.je_header_id= j.je_header_id
4913 			       AND  jl.ledger_id=g_ledger_id
4914 			       AND  (l_exclusive_mode = 'Y' OR
4915 			             (l_exclusive_mode = 'N' AND get_segment_value(jl.code_combination_id,g_bsv_segment) in (select jg_info_v1 from jg_zz_vat_trx_gt)))
4916 	                       );
4917 
4918 BEGIN
4919 
4920  IF g_bookkeeping_type = 'B' THEN
4921 	return;
4922  END IF;
4923 
4924 
4925    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4926        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
4927          G_PKG_NAME||': '||l_api_name||'()+');
4928    END IF;
4929 
4930   FOR c_journal_header in c_journals LOOP
4931 
4932     IF g_closing_period_flag = 'Y' THEN
4933 
4934 	IF g_adjustment_period_name IS NOT NULL THEN
4935 	  IF c_journal_header.period_name = g_adjustment_period_name THEN
4936    	   l_jounrnal_flag := 'E';
4937 	  ELSE
4938 	   l_jounrnal_flag := 'N';
4939 	  END IF;
4940         END IF;
4941     ELSE
4942 	l_jounrnal_flag := 'N';
4943     END IF;
4944 
4945 	INSERT INTO jl_br_sped_extr_data_t
4946 	      (request_id,
4947 	       block,
4948        	       record_seq,
4949 	       field1,
4950 	       separator1,
4951 	       field2,
4952 	       separator2,
4953 	       field3,
4954 	       separator3,
4955                field4,
4956                separator4,
4957 	       field5,
4958                separator5,
4959                created_by,
4960                creation_date,
4961                last_updated_by,
4962                last_update_date,
4963                last_update_login
4964 			 )
4965 	  VALUES (g_concurrent_request_id
4966 	       ,'I'  -- Block
4967 	       ,jl_br_sped_extr_data_t_s.nextval -- record_seq
4968 	       ,'I200' -- field 1
4969                ,'|'
4970 	       ,c_journal_header.name   --field 2
4971                ,'|'
4972 	       ,to_char(c_journal_header.default_effective_date,'DDMMYYYY') --field 3
4973                ,'|'
4974 	       ,TRIM(TO_CHAR(c_journal_header.running_total_accounted_dr,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))       --field 4
4975                ,'|'
4976                ,l_jounrnal_flag        --field 5
4977                ,'|'
4978                ,g_created_by
4979                ,g_creation_date
4980                ,g_last_updated_by
4981                ,g_last_update_date
4982                ,g_last_update_login
4983 	        );
4984 
4985              register_I250(c_journal_header.je_header_id,c_journal_header.name,c_journal_header.je_source,c_journal_header.je_category);
4986 
4987 	  END LOOP;
4988 
4989    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4990       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
4991 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
4992    END IF;
4993 
4994 
4995 EXCEPTION
4996    WHEN OTHERS THEN
4997 
4998       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4999       IF g_debug_flag = 'Y' THEN
5000          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
5001       END IF;
5002       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5003            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5004       END IF;
5005 	    g_errbuf := 'ERROR While inserting data into I200 register '||SQLERRM;
5006       g_retcode := 2;
5007       return;
5008 
5009 END register_I200;
5010 
5011 
5012 
5013 PROCEDURE register_I250(p_journal_header_id gl_je_headers.je_header_id%TYPE,
5014                         p_journal_name gl_je_headers.name%TYPE,
5015                         p_journal_source gl_je_headers.je_source%TYPE,
5016                         p_je_category gl_je_headers.je_category%TYPE) AS
5017 
5018 
5019 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I250';
5020 l_bordero_id              jl_br_ar_occurrence_docs.bordero_id%TYPE;
5021 l_cnt_bordero_id          NUMBER;
5022 l_occurrence_type         jl_br_ar_occurrence_docs.bank_occurrence_type%TYPE;
5023 l_ap_auxbook_exst         NUMBER;
5024 l_ar_auxbook_exst         NUMBER;
5025 l_description             VARCHAR2(500);
5026 BEGIN
5027 
5028 
5029    IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5030          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Journal Header : '||p_journal_header_id||' Journal Source : '||p_journal_source);
5031    END IF;
5032 
5033     IF SUBSTR(g_bookkeeping_type,1,1) <> 'A' OR (p_journal_source='Payables' AND  g_ap_ar_auxbook_exist=0)
5034                                              OR (p_journal_source='Receivables' AND  g_ap_ar_auxbook_exist=0)
5035                                              OR (p_journal_source <> 'Payables' AND  p_journal_source <> 'Receivables') THEN
5036     BEGIN
5037 
5038       -- Debit Lines
5039 
5040        INSERT INTO jl_br_sped_extr_data_t
5041        (request_id,
5042         block,
5043         record_seq,
5044          field1,
5045         separator1,
5046         field2,
5047         separator2,
5048         field3,
5049         separator3,
5050         field4,
5051         separator4,
5052         field5,
5053         separator5,
5054         field6,
5055         separator6,
5056         field7,
5057         separator7,
5058         field8,
5059         separator8,
5060         field9,
5061         separator9,
5062         created_by,
5063         creation_date,
5064         last_updated_by,
5065         last_update_date,
5066         last_update_login
5067      )
5068         SELECT  g_concurrent_request_id
5069                 ,'I'  -- Block
5070              ,jl_br_sped_extr_data_t_s.nextval -- record_seq
5071              ,'I250' -- field 1
5072                 ,'|'
5073                 ,get_segment_value(jl.code_combination_id,g_account_segment) natural_Acct
5074                 ,'|'
5075                ,decode(l_cc_exists_flag,0,null,get_segment_value(jl.code_combination_id,g_cost_center_segment)) cost_center
5076                 ,'|'
5077                ,TRIM(TO_CHAR(jl.accounted_dr,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) -- removed abs() as part of ER#11653651
5078                 ,'|'
5079                ,'D'  --,DECODE(SIGN(nvl(jl.accounted_dr,0)-nvl(jl.accounted_cr,0)),-1,'C','D')
5080                 ,'|'
5081                ,p_journal_name
5082                 ,'|'
5083                ,NULL
5084                 ,'|'
5085                ,jl.description
5086                 ,'|'
5087                ,get_participant_code(jl.je_header_id,jl.je_line_num,p_journal_source,jl.code_combination_id,NULL,NULL)
5088                 ,'|'
5089                 ,g_created_by
5090                 ,g_creation_date
5091                 ,g_last_updated_by
5092                 ,g_last_update_date
5093                 ,g_last_update_login
5094          FROM  gl_je_lines jl
5095         WHERE  jl.je_header_id = p_journal_header_id
5096           AND  jl.accounted_dr is not null
5097           AND  jl.ledger_id = g_ledger_id
5098           AND  (l_exclusive_mode='Y' OR (l_exclusive_mode='N' AND get_segment_value(jl.code_combination_id,g_bsv_segment) in (SELECT jg_info_v1 FROM jg_zz_vat_trx_gt)));  -- need to modify
5099 
5100 
5101   -- Credit Lines
5102 
5103        INSERT INTO jl_br_sped_extr_data_t
5104        (request_id,
5105         block,
5106         record_seq,
5107          field1,
5108         separator1,
5109         field2,
5110         separator2,
5111         field3,
5112         separator3,
5113         field4,
5114         separator4,
5115         field5,
5116         separator5,
5117         field6,
5118         separator6,
5119         field7,
5120         separator7,
5121         field8,
5122         separator8,
5123         field9,
5124         separator9,
5125         created_by,
5126         creation_date,
5127         last_updated_by,
5128         last_update_date,
5129         last_update_login
5130      )
5131         SELECT  g_concurrent_request_id
5132                 ,'I'  -- Block
5133              ,jl_br_sped_extr_data_t_s.nextval -- record_seq
5134              ,'I250' -- field 1
5135                 ,'|'
5136                 ,get_segment_value(jl.code_combination_id,g_account_segment) natural_Acct
5137                 ,'|'
5138                ,decode(l_cc_exists_flag,0,null,get_segment_value(jl.code_combination_id,g_cost_center_segment)) cost_center
5139                 ,'|'
5140                  ,TRIM(TO_CHAR(jl.accounted_cr,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))  --removed abs() as part of ER#11653651
5141                 ,'|'
5142                ,'C'  --,DECODE(SIGN(nvl(jl.accounted_dr,0)-nvl(jl.accounted_cr,0)),-1,'C','D')
5143                 ,'|'
5144                ,p_journal_name
5145                 ,'|'
5146                ,NULL
5147                 ,'|'
5148                ,jl.description
5149                 ,'|'
5150                ,get_participant_code(jl.je_header_id,jl.je_line_num,p_journal_source,jl.code_combination_id,NULL,NULL)
5151                 ,'|'
5152                 ,g_created_by
5153                 ,g_creation_date
5154                 ,g_last_updated_by
5155                 ,g_last_update_date
5156                 ,g_last_update_login
5157          FROM  gl_je_lines jl
5158         WHERE  jl.je_header_id = p_journal_header_id
5159           AND  jl.accounted_cr is not null
5160           AND  jl.ledger_id = g_ledger_id
5161           AND  (l_exclusive_mode='Y' OR (l_exclusive_mode='N' AND get_segment_value(jl.code_combination_id,g_bsv_segment) in (SELECT jg_info_v1 FROM jg_zz_vat_trx_gt)));  -- need to modify
5162 
5163 
5164     EXCEPTION
5165        WHEN OTHERS THEN
5166            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5167                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While inserting data into I250 register for the Header Id :'||p_journal_header_id);
5168                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5169            END IF;
5170     END;
5171     ELSE   -- If g_bookkeeping_type = 'A/R' or 'A/B' and auxiliary book exists.
5172 
5173 
5174    --Extract the detail lines by drill down to xla_ae_lines_all and xla_distributions_links table.
5175 
5176      BEGIN
5177 	    INSERT INTO jl_br_sped_extr_data_t
5178             (request_id,
5179             block,
5180             record_seq,
5181             field1,
5182             separator1,
5183             field2,
5184             separator2,
5185             field3,
5186             separator3,
5187             field4,
5188             separator4,
5189             field5,
5190             separator5,
5191             field6,
5192             separator6,
5193             field7,
5194             separator7,
5195             field8,
5196             separator8,
5197             field9,
5198             separator9,
5199             created_by,
5200             creation_date,
5201             last_updated_by,
5202             last_update_date,
5203             last_update_login
5204          )
5205           SELECT g_concurrent_request_id
5206                  , 'I' -- Block
5207                  , jl_br_sped_extr_data_t_s.nextval -- record_seq
5208                  , 'I250' -- field 1
5209     , '|'
5210     , get_segment_value(xll.code_combination_id, g_account_segment)
5211     , '|'
5212     , decode(l_cc_exists_flag, 0, NULL, get_segment_value(xll.code_combination_id, g_cost_center_segment))
5213     , '|'
5214     , TRIM(TO_CHAR(xld.UNROUNDED_ACCOUNTED_DR, '99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) --modified as part of ER#11653651
5215     , '|'
5216     , 'D'
5217     , '|'
5218     , p_journal_name
5219     , '|'
5220     , NULL
5221     , '|'
5222     , nvl(xll.description, p_journal_name || '-' || xll.ae_line_num)
5223     , '|'
5224     , get_participant_code(glimp.je_header_id, glimp.je_line_num, p_journal_source, xll.code_combination_id, xll.party_id, xll.party_site_id)
5225     , '|'
5226     , g_created_by
5227     , g_creation_date
5228     , g_last_updated_by
5229     , g_last_update_date
5230     , g_last_update_login
5231     FROM  gl_import_references glimp,
5232           xla_ae_lines xll,
5233 	  xla_ae_headers xlh,
5234 	  XLA_DISTRIBUTION_LINKS xld
5235    WHERE  glimp.je_header_id  = p_journal_header_id
5236      AND  xlh.ledger_id       = g_ledger_id
5237      AND  xlh.application_id  = xll.application_id
5238      AND  xll.gl_sl_link_id   = glimp.gl_sl_link_id
5239      AND  xll.gl_sl_link_table= glimp.gl_sl_link_table
5240      AND  xlh.ae_header_id    = xll.ae_header_id
5241      AND  xll.ae_header_id    = xld.ae_header_id
5242      AND  xll.application_id  = xld.application_id
5243      AND  xlh.EVENT_ID        = xld.EVENT_ID
5244      AND  xll.ae_line_num     = xld.ae_line_num           --p_je_line_num
5245      AND  xld.UNROUNDED_ACCOUNTED_DR IS NOT NULL
5246      AND (l_exclusive_mode='Y' OR (l_exclusive_mode='N' AND get_segment_value(xll.code_combination_id,g_bsv_segment) in (SELECT jg_info_v1 from jg_zz_vat_trx_gt)));    --- Need to modify
5247 
5248 -- inserts credit lines. added as part of ER#11653651
5249 	    INSERT INTO jl_br_sped_extr_data_t
5250             (request_id,
5251             block,
5252             record_seq,
5253             field1,
5254             separator1,
5255             field2,
5256             separator2,
5257             field3,
5258             separator3,
5259             field4,
5260             separator4,
5261             field5,
5262             separator5,
5263             field6,
5264             separator6,
5265             field7,
5266             separator7,
5267             field8,
5268             separator8,
5269             field9,
5270             separator9,
5271             created_by,
5272             creation_date,
5273             last_updated_by,
5274             last_update_date,
5275             last_update_login
5276          )
5277           SELECT g_concurrent_request_id
5278                  , 'I' -- Block
5279                  , jl_br_sped_extr_data_t_s.nextval -- record_seq
5280                  , 'I250' -- field 1
5281     , '|'
5282     , get_segment_value(xll.code_combination_id, g_account_segment)
5283     , '|'
5284     , decode(l_cc_exists_flag, 0, NULL, get_segment_value(xll.code_combination_id, g_cost_center_segment))
5285     , '|'
5286     , TRIM(TO_CHAR(xld.UNROUNDED_ACCOUNTED_CR, '99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))
5287     , '|'
5288     , 'C'
5289     , '|'
5290     , p_journal_name
5291     , '|'
5292     , NULL
5293     , '|'
5294     , nvl(xll.description, p_journal_name || '-' || xll.ae_line_num)
5295     , '|'
5296     , get_participant_code(glimp.je_header_id, glimp.je_line_num, p_journal_source, xll.code_combination_id, xll.party_id, xll.party_site_id)
5297     , '|'
5298     , g_created_by
5299     , g_creation_date
5300     , g_last_updated_by
5301     , g_last_update_date
5302     , g_last_update_login
5303     FROM  gl_import_references glimp,
5304           xla_ae_lines xll,
5305 	  xla_ae_headers xlh,
5306 	  XLA_DISTRIBUTION_LINKS xld
5307    WHERE  glimp.je_header_id  = p_journal_header_id
5308      AND  xlh.ledger_id       = g_ledger_id
5309      AND  xlh.application_id  = xll.application_id
5310      AND  xll.gl_sl_link_id   = glimp.gl_sl_link_id
5311      AND  xll.gl_sl_link_table= glimp.gl_sl_link_table
5312      AND  xlh.ae_header_id    = xll.ae_header_id
5313      AND  xll.ae_header_id    = xld.ae_header_id
5314      AND  xll.application_id  = xld.application_id
5315      AND  xlh.EVENT_ID        = xld.EVENT_ID
5316      AND  xll.ae_line_num     = xld.ae_line_num           --p_je_line_num
5317      AND  xld.UNROUNDED_ACCOUNTED_CR IS NOT NULL
5318      AND (l_exclusive_mode='Y' OR (l_exclusive_mode='N' AND get_segment_value(xll.code_combination_id,g_bsv_segment) in (SELECT jg_info_v1 from jg_zz_vat_trx_gt)));    --- Need to modify
5319 
5320    EXCEPTION
5321       WHEN OTHERS THEN
5322            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5323                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While inserting data into I250 register for the Header Id :'||p_journal_header_id);
5324                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5325            END IF;
5326    END;
5327 
5328     END IF;   --End for substr(Bookkeeping_type,1,1) <> 'A' ..
5329 
5330 END register_I250;
5331 
5332 
5333 PROCEDURE register_I300_I310 AS
5334 
5335   l_api_name               CONSTANT VARCHAR2(30) :='REGISTER_I300_I310';
5336   l_previous_date          DATE := g_start_date-1;
5337 
5338   TYPE tab_effective_date IS TABLE OF
5339   gl_je_lines.effective_date%TYPE INDEX BY BINARY_INTEGER;
5340 
5341   TYPE tab_flex_value IS TABLE OF
5342   fnd_flex_values.flex_value%TYPE INDEX BY BINARY_INTEGER;
5343 
5344   TYPE tab_num IS TABLE OF
5345   NUMBER INDEX BY BINARY_INTEGER;
5346 
5347   effective_date  tab_effective_date;
5348   natural_acct tab_flex_value;
5349   cost_center_acct tab_flex_value;
5350   accounted_dr tab_num;
5351   accounted_cr tab_num;
5352 
5353   l_query varchar2(6000);
5354   l_estb_check VARCHAR2(2000);
5355 
5356 BEGIN
5357 
5358    IF g_bookkeeping_type <> 'B' THEN
5359      return;
5360    END IF;
5361 
5362 
5363    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5364        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
5365          G_PKG_NAME||': '||l_api_name||'()+');
5366    END IF;
5367 
5368 
5369   l_query :=   ' SELECT  jl.effective_date
5370            ,glcc.'||g_account_segment||' natural_acct
5371 	   ,decode('||l_cc_exists_flag||',0,null,glcc.'||g_cost_center_segment||') cost_center_acct
5372 	   ,NVL(SUM(jl.accounted_dr),0) accounted_dr
5373            ,NVL(SUM(jl.accounted_cr),0) accounted_cr
5374      FROM  gl_je_headers jh
5375           ,gl_je_lines jl
5376       	  ,gl_code_combinations glcc
5377      WHERE  jh.ledger_id = '||g_ledger_id||'
5378       AND  jh.default_effective_date BETWEEN '''||g_start_date||''' AND '''||g_end_date||'''
5379       AND  jh.je_header_id = jl.je_header_id
5380       AND  jh.actual_flag  = ''A''
5381       AND  jh.status       = ''P''
5382       AND  jh.currency_code <> ''STAT''         -- filtering statistic journals. Introduced thid condition for new sped enhancement
5383       AND  glcc.code_combination_id = jl.code_combination_id
5384       AND  glcc.chart_of_accounts_id = '||g_chart_of_accounts_id||'
5385       AND  ('''||l_exclusive_mode||'''=''Y'' OR ('''||l_exclusive_mode||'''=''N'' AND glcc.'||g_bsv_segment||' in (select jg_info_v1 from jg_zz_vat_trx_gt)))
5386     GROUP BY jl.effective_date
5387               ,glcc.'||g_account_segment||'
5388 	      ,decode('||l_cc_exists_flag||',0,null,glcc.'||g_cost_center_segment||')
5389       ORDER BY  jl.effective_date
5390 	       ,natural_acct
5391 	       ,cost_center_acct';
5392 
5393 EXECUTE IMMEDIATE l_query
5394 BULK COLLECT INTO effective_date
5395                   ,natural_acct
5396 		  ,cost_center_acct
5397 		  ,accounted_dr
5398 		  ,accounted_cr;
5399 
5400   FOR i IN 1..effective_date.COUNT
5401     LOOP
5402 
5403           IF effective_date(i) <> l_previous_date THEN
5404 
5405 	 	           INSERT INTO jl_br_sped_extr_data_t
5406 	 		         (request_id,
5407 	 		          block,
5408                 record_seq,
5409 			          field1,
5410                 separator1,
5411 			          field2,
5412                 separator2,
5413                 created_by,
5414                 creation_date,
5415                 last_updated_by,
5416                 last_update_date,
5417                 last_update_login
5418 			         )
5419 	 		         VALUES (g_concurrent_request_id
5420 			                 ,'I'  -- Block
5421 			                 ,jl_br_sped_extr_data_t_s.nextval -- record_seq
5422 			                 ,'I300' -- field 1
5423                        ,'|'
5424                        ,to_char(effective_date(i),'DDMMYYYY')
5425                        ,'|'
5426                        ,g_created_by
5427                        ,g_creation_date
5428                        ,g_last_updated_by
5429                        ,g_last_update_date
5430                        ,g_last_update_login
5431                        );
5432 
5433 	             l_previous_date := effective_date(i);
5434            END IF;
5435 
5436  	 INSERT INTO jl_br_sped_extr_data_t
5437 	 		 (request_id,
5438 	 		  block,
5439 			  record_seq,
5440 			  field1,
5441 		          separator1,
5442 			  field2,
5443 			  separator2,
5444 			  field3,
5445 		          separator3,
5446 			  field4,
5447 		          separator4,
5448 			  field5,
5449 		          separator5,
5450 			  created_by,
5451 			  creation_date,
5452 		          last_updated_by,
5453 		          last_update_date,
5454 		          last_update_login
5455 			 )
5456 	 		 VALUES (g_concurrent_request_id
5457 			         ,'I'  -- Block
5458 			         ,jl_br_sped_extr_data_t_s.nextval --record_seq
5459 			         ,'I310' -- field 1
5460 			         ,'|'
5461 			         ,natural_acct(i)
5462 		                 ,'|'
5463 	                         ,cost_center_Acct(i)
5464 			         ,'|'
5465 	             ,TRIM(TO_CHAR(accounted_dr(i),'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))
5466 		       ,'|'
5467 	             ,TRIM(TO_CHAR(accounted_cr(i),'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))
5468 	               ,'|'
5469 		       ,g_created_by
5470 	               ,g_creation_date
5471 		       ,g_last_updated_by
5472 	               ,g_last_update_date
5473 	               ,g_last_update_login    );
5474 
5475   END LOOP;
5476 
5477    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5478       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
5479 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
5480    END IF;
5481 
5482 EXCEPTION
5483    WHEN OTHERS THEN
5484 
5485       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5486       IF g_debug_flag = 'Y' THEN
5487          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
5488       END IF;
5489       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5490            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5491       END IF;
5492       g_errbuf := 'ERROR While inserting into I300 and I310 registers '||SQLERRM;
5493       g_retcode := 2;
5494       return;
5495 END register_I300_I310;
5496 
5497 
5498 PROCEDURE register_I350 AS
5499 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I350';
5500 BEGIN
5501 
5502    IF SUBSTRB(g_bookkeeping_type,1,1) = 'A' THEN
5503        RETURN;
5504    END IF;
5505 
5506    IF nvl(g_closing_period_flag,'N') <> 'Y' THEN
5507 	   RETURN;
5508    END IF;
5509 
5510    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5511        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
5512          G_PKG_NAME||': '||l_api_name||'()+');
5513    END IF;
5514 
5515 
5516 
5517    INSERT INTO jl_br_sped_extr_data_t
5518 	 (request_id,
5519 	  block,
5520 	  record_seq,
5521 	  field1,
5522     separator1,
5523 	  field2,
5524     separator2,
5525     created_by,
5526     creation_date,
5527     last_updated_by,
5528     last_update_date,
5529     last_update_login
5530 	 )
5531    VALUES (g_concurrent_request_id
5532 				   ,'I'  -- Block
5533 				   ,jl_br_sped_extr_data_t_s.nextval -- record_seq
5534 				   ,'I350' -- field 1
5535            ,'|'
5536 	         ,to_char(g_end_date,'DDMMYYYY')
5537            ,'|'
5538            ,g_created_by
5539            ,g_creation_date
5540            ,g_last_updated_by
5541            ,g_last_update_date
5542            ,g_last_update_login    );
5543 
5544  --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
5545 
5546    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5547       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
5548 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
5549    END IF;
5550 
5551 EXCEPTION
5552    WHEN OTHERS THEN
5553 
5554       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5555       IF g_debug_flag = 'Y' THEN
5556          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
5557       END IF;
5558       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5559            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5560       END IF;
5561       g_errbuf := 'ERROR While inserting into I350 register '||SQLERRM;
5562       g_retcode := 2;
5563       return;
5564 
5565 END register_I350;
5566 
5567 PROCEDURE register_I355 AS
5568 l_api_name             CONSTANT VARCHAR2(30) :='REGISTER_I355';
5569 l_query                VARCHAR2(6000);
5570 l_estb_check           VARCHAR2(2000);
5571 
5572 BEGIN
5573 
5574 
5575    IF SUBSTRB(g_bookkeeping_type,1,1) = 'A' THEN
5576        RETURN;
5577    END IF;
5578 
5579    IF nvl(g_closing_period_flag,'N') <> 'Y' THEN
5580 	   RETURN;
5581    END IF;
5582 
5583    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5584        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
5585          G_PKG_NAME||': '||l_api_name||'()+');
5586    END IF;
5587 
5588    IF g_adjustment_period_name IS NOT NULL THEN                   -- It will be true always. so is this check require???
5589 
5590       l_query  := 'INSERT INTO jl_br_sped_extr_data_t
5591 		         (request_id,
5592 			  block,
5593 	                  record_seq,
5594 		          field1,
5595 			  separator1,
5596 	                  field2,
5597 		          separator2,
5598 	                  field3,
5599 		          separator3,
5600 			  field4,
5601 	                  separator4,
5602 		          field5,
5603 			  separator5,
5604 	                  created_by,
5605 		          creation_date,
5606 			  last_updated_by,
5607 	                  last_update_date,
5608 		          last_update_login
5609 			  )
5610 	                 SELECT  '|| g_concurrent_request_id||
5611 		                 ',''I''  Block
5612 			         ,jl_br_sped_extr_data_t_s.nextval
5613 				 ,''I355''
5614 	                         ,''|''
5615 		                 , natural_acct
5616 			         ,''|''
5617 				 ,costcenter_value
5618 	                         ,''|''
5619 		                 ,amount
5620 			         ,''|''
5621 				 ,amount_flag
5622 	                         ,''|''
5623 	                       ,'||g_created_by||
5624 		                 ','''||g_creation_date||''''||
5625 			         ','||g_last_updated_by||
5626 				 ','''||g_last_update_date||''''||
5627 	                         ','||g_last_update_login||
5628 		         ' FROM (SELECT  glcc.'||g_account_segment||' natural_acct '||                                     ',decode('||l_cc_exists_flag||',0,null,glcc.'||g_cost_center_segment||') costcenter_value'||
5629                                    ',TRIM(TO_CHAR(abs(sum(((glb.BEGIN_BALANCE_DR - glb.BEGIN_BALANCE_CR)
5630                                    + (glb.PERIOD_NET_DR - glb.PERIOD_NET_CR)))),''99999999999999990D00'',''NLS_NUMERIC_CHARACTERS = '''',.'''''')) amount
5631                                    ,DECODE(SIGN(sum((glb.BEGIN_BALANCE_DR - glb.BEGIN_BALANCE_CR)
5632                                            + (glb.PERIOD_NET_DR - glb.PERIOD_NET_CR))),1,''D'',''C'') amount_flag
5633 			          FROM  gl_balances glb
5634 	                                ,gl_code_combinations glcc
5635 		                 WHERE  glb.period_name = '''||g_period_name||''''||
5636 			         ' AND  glb.code_combination_id = glcc.code_combination_id
5637 				   AND  glb.ledger_id = '||g_ledger_id||
5638 	                         ' AND  glcc.chart_of_accounts_id = '||g_chart_of_accounts_id||
5639 		                 ' AND  glcc.account_type in (''E'',''R'')
5640 				   AND  glcc.summary_flag = ''N''
5641 				   AND  glb.actual_flag = ''A''
5642 				   AND  glb.currency_code   =  '''||g_currency_code||'''
5643 				   AND  ('''||l_exclusive_mode||'''=''Y'' OR ('''||l_exclusive_mode||'''=''N'' AND  glcc.'||g_bsv_segment||' in (select jg_info_v1 from jg_zz_vat_trx_gt)))
5644 			         GROUP BY  glcc.'||g_account_segment||',decode('||l_cc_exists_flag||',0,null,glcc.'||g_cost_center_segment||')
5645 				  HAVING sum(((glb.BEGIN_BALANCE_DR - glb.BEGIN_BALANCE_CR)
5646                                    + (glb.PERIOD_NET_DR - glb.PERIOD_NET_CR)))<>0) ';
5647 
5648  END IF;
5649 
5650 
5651    --   FND_FILE.PUT_LINE(FND_FILE.LOG,'I355 Query :'|| l_query);
5652 
5653    --   FND_FILE.PUT_LINE(FND_FILE.LOG,'Before execution of dynamic query');
5654 
5655       execute immediate l_query;
5656 
5657 --      FND_FILE.PUT_LINE(FND_FILE.LOG,'After execution of dynamic query');
5658 
5659    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5660       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
5661 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
5662    END IF;
5663 
5664 EXCEPTION
5665    WHEN OTHERS THEN
5666 
5667       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5668       IF g_debug_flag = 'Y' THEN
5669          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
5670       END IF;
5671       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5672            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5673       END IF;
5674       g_errbuf := 'ERROR While inserting data into I355 register'||SQLERRM;
5675       g_retcode := 2;
5676       return;
5677 
5678 END register_I355;
5679 
5680 PROCEDURE register_I990 AS
5681 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_I990';
5682 
5683 BEGIN
5684 
5685    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5686        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
5687          G_PKG_NAME||': '||l_api_name||'()+');
5688    END IF;
5689 
5690      INSERT INTO jl_br_sped_extr_data_t
5691      (request_id,
5692       block,
5693       record_seq,
5694       field1,
5695       separator1,
5696       field2,
5697       separator2,
5698       created_by,
5699       creation_date,
5700       last_updated_by,
5701       last_update_date,
5702       last_update_login)
5703       VALUES( g_concurrent_request_id,
5704               'I',     --block
5705 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
5706 	            'I990',  --Register (field1)
5707               '|',
5708 	            null,--count(*), --field2
5709               '|',
5710               g_created_by,
5711               g_creation_date,
5712               g_last_updated_by,
5713               g_last_update_date,
5714               g_last_update_login);
5715 
5716  --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
5717 
5718    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5719       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
5720 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
5721    END IF;
5722 
5723 EXCEPTION
5724    WHEN OTHERS THEN
5725 
5726       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5727       IF g_debug_flag = 'Y' THEN
5728          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
5729       END IF;
5730       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5731            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5732       END IF;
5733       g_errbuf := 'ERROR While inserting data into I990 registers '||SQLERRM;
5734       g_retcode := 2;
5735       return;
5736 END register_I990;
5737 
5738 PROCEDURE register_J001 AS
5739 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_J001';
5740 
5741 BEGIN
5742 
5743    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5744        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
5745          G_PKG_NAME||': '||l_api_name||'()+');
5746    END IF;
5747 
5748      INSERT INTO jl_br_sped_extr_data_t
5749      (request_id,
5750       block,
5751       record_seq,
5752       field1,
5753       separator1,
5754       field2,
5755       separator2,
5756       created_by,
5757       creation_date,
5758       last_updated_by,
5759       last_update_date,
5760       last_update_login)
5761       VALUES( g_concurrent_request_id,
5762               'J',     --block
5763 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
5764 	            'J001',  --Register (field1)
5765               '|',
5766 	            0,-- null, --decode(count(*),0,1,0), --field2
5767               '|',
5768               g_created_by,
5769               g_creation_date,
5770               g_last_updated_by,
5771               g_last_update_date,
5772               g_last_update_login );
5773 
5774  --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
5775 
5776    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5777       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
5778 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
5779    END IF;
5780 
5781 EXCEPTION
5782    WHEN OTHERS THEN
5783 
5784       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5785       IF g_debug_flag = 'Y' THEN
5786          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
5787       END IF;
5788       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5789            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5790       END IF;
5791       g_errbuf := 'ERROR While inserting data into J001 register'||SQLERRM;
5792       g_retcode := 2;
5793       return;
5794 
5795 END register_J001;
5796 
5797 PROCEDURE register_J005 AS
5798 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_J005';
5799 
5800 BEGIN
5801 
5802    IF nvl(g_closing_period_flag,'N') <> 'Y' THEN
5803 	   RETURN;
5804    END IF;
5805 
5806     IF g_acct_stmt_ident IS NULL THEN
5807        RETURN;
5808     END IF;
5809 
5810  IF  g_bookkeeping_type = 'G' OR g_bookkeeping_type = 'R' OR g_bookkeeping_type = 'B' THEN
5811 
5812    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5813        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
5814          G_PKG_NAME||': '||l_api_name||'()+');
5815    END IF;
5816 
5817      INSERT INTO jl_br_sped_extr_data_t
5818      (request_id,
5819       block,
5820       record_seq,
5821       field1,
5822       separator1,
5823       field2,
5824       separator2,
5825       field3,
5826       separator3,
5827       field4,
5828       separator4,
5829       field5,
5830       separator5,
5831       created_by,
5832       creation_date,
5833       last_updated_by,
5834       last_update_date,
5835       last_update_login)
5836       VALUES( g_concurrent_request_id,
5837               'J',     --block
5838 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
5839 	            'J005',  --Register (field1)
5840               '|',
5841 	            to_char(g_start_date,'ddmmyyyy'), --field2
5842               '|',
5843               to_char(g_end_date,'ddmmyyyy'), --field3
5844               '|',
5845               g_acct_stmt_ident,
5846               '|',
5847               decode(g_acct_stmt_ident,2,g_acct_stmt_header,null),
5848               '|',
5849               g_created_by,
5850               g_creation_date,
5851               g_last_updated_by,
5852               g_last_update_date,
5853               g_last_update_login);
5854 
5855 --   FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
5856 
5857    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5858       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
5859 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
5860    END IF;
5861 
5862  END IF;  -- END for checking on book keeping type
5863 
5864 EXCEPTION
5865    WHEN OTHERS THEN
5866 
5867       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5868       IF g_debug_flag = 'Y' THEN
5869          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
5870       END IF;
5871       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5872            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5873       END IF;
5874       g_errbuf := 'ERROR While inserting data into J001 register'||SQLERRM;
5875       g_retcode := 2;
5876       return;
5877 
5878 END register_J005;
5879 
5880 /*  register_J100 will have balance statement report information.
5881  Actually before calling this J100 register, a concurrent program will be submitted to
5882  read balance statement and income statement reports xml data. This JCP program will insert
5883  records into sped extract temparory table with some imp info like row_sequence_number(into field8),
5884  sped extract concurrent request,field1(as J100), and filed6 with amount. So by using
5885  row_sequence stored in J100 record, we need to update other fields of this register.
5886  After all Updations, update field8 as null.
5887 
5888 */
5889 PROCEDURE register_J100 AS
5890 l_api_name             CONSTANT VARCHAR2(30) :='register_J100';
5891 l_cnt                  NUMBER := 0;
5892 l_amount               NUMBER := 0;
5893 l_amount_sign          NUMBER := 0;
5894 l_format               VARCHAR2(40);
5895 l_amount_in_char       VARCHAR2(30);
5896 l_acct_type            NUMBER;
5897 l_prev_acct_type       NUMBER:= 0;
5898 l_row_set_name         rg_report_axis_sets.name%TYPE;
5899 l_row_name             rg_report_axes.description%TYPE;
5900 acct_low               NUMBER;
5901 acct_high              NUMBER;
5902 l_row_set_id           NUMBER;
5903 l_acct_axis_seq        VARCHAR2(10);
5904 l_axis_seq             VARCHAR2(10);
5905 l_calc_acct_type       VARCHAR2(10);
5906 l_icx_num_format       VARCHAR2(50);
5907 TYPE ref_cursor is REF CURSOR;
5908 acct_cur               ref_cursor;
5909 CURSOR J100_recs_by_jcp IS
5910    SELECT  field6,      -- amount
5911            field8       -- row_sequence
5912      FROM  jl_br_sped_extr_data_t
5913     WHERE  request_id = g_concurrent_request_id
5914       AND  field1     = 'J100'
5915  ORDER BY  record_seq;
5916 
5917 CURSOR  calculations_cursor IS
5918 SELECT  field8
5919   FROM  jl_br_sped_extr_data_t
5920  WHERE  request_id = g_concurrent_request_id
5921    AND  field1     = 'J100'
5922    AND  field4 IS NULL;
5923 
5924 BEGIN
5925 
5926 
5927    IF nvl(g_closing_period_flag,'N') <> 'Y' THEN
5928 	   RETURN;
5929    END IF;
5930 
5931     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5932         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
5933          G_PKG_NAME||': '||l_api_name||'()+');
5934     END IF;
5935 
5936     SELECT row_set_id
5937       INTO l_row_set_id
5938       FROM rg_reports
5939      WHERE report_id =g_balance_statement_report_id;
5940 
5941     l_icx_num_format := NVL(fnd_profile.value('ICX_NUMERIC_CHARACTERS'),',.');
5942 
5943     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5944        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
5945                        G_PKG_NAME||': ' ||l_api_name||'(): ICX Numeric Format: '||l_icx_num_format);
5946     END IF;
5947 
5948 
5949 /*    SELECT  fmt
5950       INTO  l_format
5951       FROM  (SELECT  nvl2(ra.display_format,decode(instr(ra.display_format,'.'),0,'999,999,999,999',
5952                              '999,999,999,999.9999'),'999,999,999,999.9999') fmt
5953                FROM  rg_reports r,
5954                      rg_report_axes_v ra
5955               WHERE  r.report_id =g_balance_statement_report_id
5956                 AND  r.column_set_id =ra.axis_set_id
5957            ORDER BY  ra.sequence)
5958       WHERE ROWNUM=1; */
5959 
5960   --  FND_FILE.PUT_LINE(FND_FILE.LOG,'Format of number for Balance sheet report :'||l_format);
5961 
5962     FOR J100_rec in J100_recs_by_jcp  LOOP
5963 
5964       l_amount := 0;
5965       l_amount_sign := 1;
5966 
5967    --   FND_FILE.PUT_LINE(FND_FILE.LOG,'Amount before conversion :'||J100_rec.field6);
5968 
5969       l_amount_in_char := trim(J100_rec.field6);
5970 
5971       IF l_icx_num_format = ',.' THEN  -- If the data is in 9.999,99 format changing it to 9,999.99 format
5972 
5973          l_amount_in_char := translate(l_amount_in_char,'.,',',.');
5974 
5975       END IF;
5976 
5977 
5978       IF substr(l_amount_in_char,1,1) = '<' OR substr(l_amount_in_char,1,1) = '-' THEN
5979           l_amount_sign := -1;
5980           IF substr(l_amount_in_char,1,1) = '<' THEN
5981              l_amount := to_number(substr(l_amount_in_char,2,length(l_amount_in_char)-2),'999,999,999.999999');
5982           ELSE
5983              l_amount := to_number(substr(l_amount_in_char,2,length(l_amount_in_char)-1),'999,999,999.999999');
5984           END IF;
5985        ELSE
5986              l_amount :=  to_number(l_amount_in_char,'999,999,999.999999');
5987        END IF;
5988 
5989   --   FND_FILE.PUT_LINE(FND_FILE.LOG,'Amount after conversion :'||l_amount);
5990 
5991        l_cnt := 0;
5992        SELECT  COUNT(*) -- Checking for account assignements
5993          INTO  l_cnt
5994          FROM  rg_report_axis_contents
5995 	      WHERE  axis_set_id  = l_row_set_id
5996 	      	AND  axis_seq    = J100_rec.field8;
5997 
5998       IF l_cnt > 0 THEN --account assignments exists
5999    --   FND_FILE.PUT_LINE(FND_FILE.LOG,'In acct assignments');
6000   --    FND_FILE.PUT_LINE(FND_FILE.LOG,J100_rec.field8||'  '||J100_rec.field6);
6001       l_prev_acct_type := 0;
6002 
6003       OPEN acct_cur FOR 'SELECT '||g_account_segment||'_LOW,'||g_account_segment||'_HIGH
6004                            FROM   rg_report_axis_contents
6005                            WHERE  axis_set_id ='|| l_row_set_id||
6006 		                        'AND  axis_seq ='||J100_rec.field8;
6007        LOOP
6008            FETCH acct_cur INTO acct_low,acct_high;
6009            EXIT WHEN  acct_cur%NOTFOUND;
6010 
6011            BEGIN
6012 
6013                  SELECT  DISTINCT DECODE(DECODE(vs.flex_value, 'T', 'O', substrb( fnd_global.newline
6014 	                         ||vs.compiled_value_attributes
6015 	                         ||fnd_global.newline, instrb( fnd_global.newline
6016 	                         ||vs.compiled_value_attributes
6017 	                         ||fnd_global.newline, fnd_global.newline,1,g_account_qualifier_position)+1, 1 )),'A',1,'L',2,'O',2,null)
6018                    INTO  l_acct_type
6019                    FROM  fnd_flex_values vs
6020     	            WHERE  flex_value_set_id = g_account_value_set_id
6021                     AND  flex_value  BETWEEN acct_low AND acct_high;
6022 
6023        --   FND_FILE.PUT_LINE(FND_FILE.LOG,'acct_type for axis_seq '||J100_rec.field8||' is '||l_acct_type);
6024 
6025             EXCEPTION
6026                    WHEN NO_DATA_FOUND THEN
6027                         l_acct_type := null;
6028                         FND_FILE.PUT_LINE(FND_FILE.LOG,'No Account Type found for Report Id:'||g_balance_statement_report_id||' And Axis Num :'||J100_rec.field8);
6029                    WHEN TOO_MANY_ROWS THEN --Multiple account types assigned for a account range.
6030                         l_acct_type := null;
6031                          FND_FILE.PUT_LINE(FND_FILE.LOG,'More Account Types found for Report Id:'||g_balance_statement_report_id||' And Axis Num :'||J100_rec.field8);
6032                    WHEN OTHERS THEN
6033                         l_acct_type := null;
6034                         FND_FILE.PUT_LINE(FND_FILE.LOG,'Exception occured while fetching the Acct Type for Report Id:'||g_balance_statement_report_id||' And Axis Num :'||J100_rec.field8);
6035 	                FND_FILE.PUT_LINE(FND_FILE.LOG,SQLERRM);
6036             END;
6037        --     FND_FILE.PUT_LINE(FND_FILE.LOG,'Acct low: '||acct_low||' acct high: '||acct_high);
6038 
6039            IF l_acct_type is not null THEN
6040              IF l_prev_acct_type <> l_acct_type THEN
6041       --        FND_FILE.PUT_LINE(FND_FILE.LOG,'In chk'||l_prev_acct_type||'  '||l_acct_type);
6042                   IF l_prev_acct_type = 0 THEN
6043                         l_prev_acct_type := l_acct_type;
6044                   ELSE      -- the Account type of multiple account assignments are not same.
6045                     --  l_acct_type := null;
6046                      FND_FILE.PUT_LINE(FND_FILE.LOG,'More Account Types found for Report Id:'||g_balance_statement_report_id||' And Axis Num :'||J100_rec.field8);
6047                   END IF;
6048                END IF;
6049 	         END IF;
6050         END LOOP;
6051     --    FND_FILE.PUT_LINE(FND_FILE.LOG,'acct_type : '||l_acct_type||'l_prev_acct_type : '||l_prev_acct_type);
6052         CLOSE acct_cur;
6053        ELSE /* If no account assignments exists (means if the fsg row is because of caluculation)*/
6054            l_acct_type := null;
6055            l_prev_acct_type := null;
6056        END IF;
6057 
6058 
6059      --     FND_FILE.PUT_LINE(FND_FILE.LOG,'Before Update');
6060           /*Updating J100 records for account assignments */
6061            UPDATE  jl_br_sped_extr_data_t tmp
6062               SET  (field2,  field3,separator3,
6063                    field4 ,
6064                     separator4,field5, separator5,field6,separator6,
6065                     field7, separator7) = (SELECT  --jl_br_sped_extr_data_t_s.nextval,
6066                                                     decode(g_agglutination_code_source,'FSG_LINE',to_char(r2.axis_seq),r2.description),
6067                                                     r2.number_characters_indented,
6068                                                     '|',
6069                                                     --get_account_type(get_segment_range_value(g_account_segment,r3.axis_set_id,r3.axis_seq,'LOW')),  --field4 --account qualifier for segment_low
6070                                                     nvl(l_acct_type,l_prev_acct_type),   --field4
6071                                                     '|',
6072                                                     r2.description,
6073                                                     '|',
6074                                                     TRIM(TO_CHAR(l_amount,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')),
6075 						                                        '|',
6076                                                     decode(l_amount_sign,-1,'C','D'),   --field7
6077                                                     '|'
6078                                               FROM  rg_reports r1
6079                                                     ,rg_report_axes r2
6080 	                                           WHERE  r1.report_id   = g_balance_statement_report_id
6081   	                                           AND  r1.row_set_id  = r2.axis_set_id
6082 	                                             AND  r2.axis_seq = J100_rec.field8)
6083             WHERE  request_id = g_concurrent_request_id
6084               AND  field1  = 'J100'
6085               AND  field8  = J100_rec.field8;
6086       --    FND_FILE.PUT_LINE(FND_FILE.LOG,'after Update');
6087 
6088        UPDATE  jl_br_sped_extr_data_t
6089           SET  record_seq        = jl_br_sped_extr_data_t_s.nextval,
6090            --    field8            = null,
6091 	             creation_date     = g_creation_date,
6092 	             created_by        = g_created_by,
6093 	             last_update_date  = g_last_update_date,
6094 	       last_updated_by   = g_last_updated_by,
6095 	       last_update_login = g_last_update_login
6096         WHERE  request_id = g_concurrent_request_id
6097           AND  field1     = 'J100'
6098           AND  field8     = J100_rec.field8;
6099     END LOOP;
6100 --    FND_FILE.PUT_LINE(FND_FILE.LOG,'Updating Acct Type for Calculation rows');
6101     FOR calc_rec in calculations_cursor LOOP
6102   --     FND_FILE.PUT_LINE(FND_FILE.LOG,'seq: '||calc_rec.field8);
6103        l_axis_seq := trim(calc_rec.field8);
6104 
6105        WHILE  l_axis_seq IS NOT NULL
6106        LOOP
6107        BEGIN
6108            SELECT  axis_seq_low
6109              INTO  l_acct_axis_seq
6110              FROM  rg_report_calculations
6111             WHERE  axis_set_id = l_row_set_id
6112               AND  axis_seq = l_axis_seq
6113               AND  ROWNUM < 2;
6114        EXCEPTION
6115           WHEN OTHERS THEN
6116               FND_FILE.PUT_LINE(FND_FILE.LOG,'Error while getting the acct seq for a calculation');
6117        END;
6118         --   FND_FILE.PUT_LINE(FND_FILE.LOG,'l_acct_axis_seq: '||l_acct_axis_seq);
6119             l_cnt := 0;
6120            SELECT  COUNT(*) -- Checking for account assignements
6121              INTO  l_cnt
6122              FROM  rg_report_axis_contents
6123 	          WHERE  axis_set_id =  l_row_set_id
6124 	        	  AND  axis_seq =  l_acct_axis_seq;
6125           --  FND_FILE.PUT_LINE(FND_FILE.LOG,'l_cnt: '||l_cnt);
6126 
6127            IF l_cnt >0 THEN
6128            BEGIN
6129              SELECT  trim(field4)
6130                INTO  l_calc_acct_type
6131                FROM  jl_br_sped_extr_data_t
6132               WHERE  request_id = g_concurrent_request_id
6133                 AND  field1     = 'J100'
6134                 AND  trim(field8) = trim(l_acct_axis_seq);
6135            EXCEPTION
6136              WHEN OTHERS THEN
6137               FND_FILE.PUT_LINE(FND_FILE.LOG,'Error while getting the acct type of account''s axis_seq for calculation');
6138            END;
6139 
6140          --   FND_FILE.PUT_LINE(FND_FILE.LOG,'l_calc_acct_type: '||l_calc_acct_type);
6141               UPDATE  jl_br_sped_extr_data_t
6142                  SET  field4  = l_calc_acct_type
6143                WHERE  request_id = g_concurrent_request_id
6144                  AND  field1     = 'J100'
6145                  AND  trim(field8) = trim(calc_rec.field8) ;
6146 
6147        --     FND_FILE.PUT_LINE(FND_FILE.LOG,'after Update');
6148                EXIT;
6149            ELSE
6150               l_axis_seq := trim(l_acct_axis_seq);
6151            END IF;
6152        END LOOP;
6153     END LOOP;
6154 
6155     UPDATE  jl_br_sped_extr_data_t
6156        SET  field8     =  null
6157      WHERE  request_id =  g_concurrent_request_id
6158        AND  field1 ='J100';
6159 
6160     UPDATE  jl_br_sped_extr_data_t
6161        SET  field4 = null
6162      WHERE  request_id = g_concurrent_request_id
6163        AND  field1 ='J100'
6164        AND  field4 = '0'; --field4=0 means all the accounts in the specified account assignments are of not same acct type.
6165 
6166     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6167         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
6168          G_PKG_NAME||': '||l_api_name||'()-');
6169     END IF;
6170 
6171 EXCEPTION
6172    WHEN OTHERS THEN
6173 
6174       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6175       IF g_debug_flag = 'Y' THEN
6176          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
6177       END IF;
6178       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
6179            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
6180       END IF;
6181       g_errbuf := 'ERROR While processing data Of J100 register '||SQLERRM;
6182       g_retcode := 2;
6183       return;
6184 
6185 END register_J100;
6186 
6187 PROCEDURE register_J150 AS
6188 l_api_name             CONSTANT VARCHAR2(30) :='register_J150';
6189 l_cnt                  NUMBER := 0;
6190 l_amount               NUMBER := 0;
6191 l_amount_in_char       VARCHAR2(30);
6192 l_amount_sign          NUMBER := 0;
6193 l_format               VARCHAR2(40);
6194 l_row_set_id           NUMBER;
6195 l_icx_num_format       VARCHAR2(50);
6196 TYPE ref_cursor is REF CURSOR;
6197 acct_cur               ref_cursor;
6198 CURSOR J150_recs_by_jcp IS
6199    SELECT  field5,      -- amount
6200            field8       -- row_sequence
6201      FROM  jl_br_sped_extr_data_t
6202     WHERE  request_id = g_concurrent_request_id
6203       AND  field1     = 'J150'
6204  ORDER BY  record_seq;
6205 BEGIN
6206 
6207    IF nvl(g_closing_period_flag,'N') <> 'Y' THEN
6208 	   RETURN;
6209    END IF;
6210 
6211     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6212         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
6213          G_PKG_NAME||': '||l_api_name||'()+');
6214     END IF;
6215 
6216     SELECT row_set_id
6217       INTO l_row_set_id
6218       FROM rg_reports
6219      WHERE report_id =g_income_statement_report_id;
6220 
6221     l_icx_num_format :=fnd_profile.value('ICX_NUMERIC_CHARACTERS');
6222 
6223     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6224        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
6225                        G_PKG_NAME||': ' ||l_api_name||'(): ICX Numeric Format: '||l_icx_num_format);
6226     END IF;
6227 
6228  /*   SELECT  fmt
6229       INTO  l_format
6230       FROM  (SELECT  nvl2(ra.display_format,decode(instr(ra.display_format,'.'),0,'999,999,999,999',
6231                              '999,999,999,999.9999'),'999,999,999,999.9999') fmt
6232                FROM  rg_reports r,
6233                      rg_report_axes_v ra
6234               WHERE  r.report_id =g_income_statement_report_id
6235                 AND  r.column_set_id =ra.axis_set_id
6236            ORDER BY  ra.sequence)
6237       WHERE ROWNUM=1;  */
6238 
6239 --    FND_FILE.PUT_LINE(FND_FILE.LOG,'Format of number for Income statement report :'||l_format);
6240 
6241     FOR J150_rec IN J150_recs_by_jcp LOOP
6242  --   FND_FILE.PUT_LINE(FND_FILE.LOG,'IN LOOP'||J150_rec.field8||J150_rec.field5);
6243 
6244 
6245       l_amount := 0;
6246       l_amount_sign := 1;
6247 
6248 --     FND_FILE.PUT_LINE(FND_FILE.LOG,'Amount before conversion :'||J150_rec.field5);
6249       l_amount_in_char := trim(J150_rec.field5);
6250 
6251       IF l_icx_num_format = ',.' THEN  -- If the data is in 9.999,99 format changing it to 9,999.99 format
6252 
6253          l_amount_in_char := translate(l_amount_in_char,'.,',',.');
6254 
6255       END IF;
6256 
6257       IF substr(l_amount_in_char,1,1) = '<' OR substr(l_amount_in_char,1,1) = '-' THEN
6258           l_amount_sign := -1;
6259           IF substr(l_amount_in_char,1,1) = '<' THEN
6260              l_amount := to_number(substr(l_amount_in_char,2,length(l_amount_in_char)-2),'999,999,999.999999');
6261           ELSE
6262              l_amount := to_number(substr(l_amount_in_char,2,length(l_amount_in_char)-1),'999,999,999.999999');
6263           END IF;
6264       ELSE
6265              l_amount :=  to_number(l_amount_in_char,'999,999,999.999999');
6266       END IF;
6267 
6268    --  FND_FILE.PUT_LINE(FND_FILE.LOG,'Amount after conversion :'||l_amount);
6269 
6270        l_cnt := 0;
6271        SELECT  COUNT(*) -- Checking for account assignements
6272          INTO  l_cnt
6273          FROM  rg_report_axis_contents
6274         WHERE  axis_set_id = l_row_set_id
6275        	  AND  axis_seq    = J150_rec.field8;
6276 
6277    --  FND_FILE.PUT_LINE(FND_FILE.LOG,'After cnt'||l_cnt);
6278 
6279      IF l_cnt > 0 THEN      --account assignments exists
6280 
6281     --          FND_FILE.PUT_LINE(FND_FILE.LOG,'In acct assignments');
6282     --  FND_FILE.PUT_LINE(FND_FILE.LOG,J150_rec.field8||'  '||J150_rec.field5);
6283 
6284 
6285   	   UPDATE  jl_br_sped_extr_data_t tmp
6286               SET  (field2,  field3,separator3, field4 ,separator4,field5,separator5,
6287                     field6, separator6) = (SELECT  --jl_br_sped_extr_data_t_s.nextval,
6288                                                     decode(g_agglutination_code_source,'FSG_LINE',to_char(r2.axis_seq),r2.description), --field2
6289                                                     r2.number_characters_indented,  --field3
6290                                                     '|',
6291                                                     r2.description, --field4
6292                                                     '|',
6293 						     TRIM(TO_CHAR(l_amount,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')),
6294                                                     '|',
6295                                                     decode(l_amount_sign,-1,'R','D'),     --field6
6296                                                     '|'
6297                                               FROM  rg_report_axes r2
6298 	                                     WHERE  r2.axis_set_id = l_row_set_id
6299                                                AND  r2.axis_seq =  J150_rec.field8
6300                                                AND  ROWNUM      = 1) --There may exist multiple records in rg_report_contents for a axis_set_id and axis_seq
6301             WHERE  request_id = g_concurrent_request_id
6302               AND  field1  = 'J150'
6303               AND  field8  = J150_rec.field8;
6304      --         FND_FILE.PUT_LINE(FND_FILE.LOG,'After update of account assignements');
6305 
6306       ELSE    -- If the row is of type calculations.
6307            UPDATE  jl_br_sped_extr_data_t tmp
6308               SET  (field2,  field3,separator3, field4 ,separator4,field5,separator5,
6309                     field6, separator6) = (SELECT  --jl_br_sped_extr_data_t_s.nextval,
6310                                                     decode(g_agglutination_code_source,'FSG_LINE',to_char(r2.axis_seq),r2.description), --field2
6311                                                     r2.number_characters_indented,  --field3
6312                                                     '|',
6313                                                     r2.description, --field4
6314                                                     '|',
6315 						   TRIM(TO_CHAR(l_amount,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')),
6316                                                     '|',
6317                                                     decode(l_amount_sign,-1,'P','N'), --field6
6318                                                     '|'
6319                                              FROM  rg_report_axes r2
6320 	                                    WHERE  r2.axis_set_id = l_row_set_id
6321                                               AND  r2.axis_seq = J150_rec.field8
6322                                               AND  ROWNUM      = 1) --There may exist multiple records in rg_report_calculations for a axis_set_id and axis_seq
6323             WHERE  request_id = g_concurrent_request_id
6324               AND  field1  = 'J150'
6325               AND  field8  = J150_rec.field8;
6326   --  FND_FILE.PUT_LINE(FND_FILE.LOG,'After update of calculations');
6327      END IF;
6328 
6329     UPDATE  jl_br_sped_extr_data_t
6330         SET  record_seq        = jl_br_sped_extr_data_t_s.nextval,
6331              field8            = null,
6332 	           creation_date     = g_creation_date,
6333 	           created_by        = g_created_by,
6334 	           last_update_date  = g_last_update_date,
6335              last_updated_by   = g_last_updated_by,
6336 	           last_update_login = g_last_update_login
6337       WHERE  request_id = g_concurrent_request_id
6338         AND  field1     = 'J150'
6339         AND  field8     = J150_rec.field8;
6340 
6341     END LOOP;
6342 
6343     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6344         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
6345          G_PKG_NAME||': '||l_api_name||'()-');
6346     END IF;
6347 
6348 EXCEPTION
6349    WHEN OTHERS THEN
6350 
6351       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6352       IF g_debug_flag = 'Y' THEN
6353          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
6354       END IF;
6355       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
6356            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
6357       END IF;
6358       g_errbuf := 'ERROR While processing data Of J150 register'||SQLERRM;
6359       g_retcode := 2;
6360       return;
6361 
6362 END register_J150;
6363 
6364 PROCEDURE register_J800 AS
6365 l_api_name         CONSTANT VARCHAR2(30) :='REGISTER_J800';
6366 l_file_id          fnd_attached_docs_form_vl.media_id%TYPE;
6367 l_lob_data         BLOB;
6368 l_data_length      NUMBER;
6369 l_amount_to_read   NUMBER := 255;
6370 l_data_var_raw     RAW(255);
6371 l_data_var_char    VARCHAR2(255);
6372 l_read_length      NUMBER := 1;
6373 CURSOR  file_ids_cur(p_journal_for_rtf NUMBER) IS
6374         SELECT  DISTINCT media_id file_id
6375           FROM  fnd_attached_docs_form_vl
6376          WHERE  entity_name = 'GL_JE_HEADERS'
6377            AND  pk2_value   =  p_journal_for_rtf
6378            AND  file_name like '%.txt';
6379 BEGIN
6380 
6381    IF nvl(g_closing_period_flag,'N') <> 'Y' THEN
6382 	   RETURN;
6383    END IF;
6384 
6385    IF g_journal_for_rtf IS NULL THEN
6386       RETURN;
6387    END IF;
6388 
6389 --  FND_FILE.PUT_LINE(FND_FILE.LOG,'Journal for RTF is :'||g_journal_for_rtf);
6390 
6391  IF  g_bookkeeping_type = 'G' OR g_bookkeeping_type = 'R' OR g_bookkeeping_type = 'B' THEN
6392 
6393     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6394         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
6395          G_PKG_NAME||': '||l_api_name||'()+');
6396     END IF;
6397 
6398     FOR l_file_ids_rec  IN file_ids_cur(g_journal_for_rtf) LOOP
6399 
6400     l_read_length  := 1;   --reinitializing for next file
6401 
6402      BEGIN
6403 
6404           SELECT  file_data
6405             INTO  l_lob_data
6406             FROM  FND_LOBS
6407            WHERE  file_id = l_file_ids_rec.file_id;
6408 
6409        EXCEPTION
6410        WHEN NO_DATA_FOUND THEN
6411           EXIT;
6412        WHEN OTHERS THEN
6413          g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6414          IF g_debug_flag = 'Y' THEN
6415             FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
6416          END IF;
6417          IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
6418             FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
6419          END IF;
6420       END;
6421 
6422       l_data_length := DBMS_LOB.GETLENGTH(l_lob_data);  --getting the total length of rtf file
6423 
6424     --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): Length of '||l_file_ids_rec.file_id ||' is:' ||l_data_length);
6425 
6426       WHILE (l_read_length < l_data_length )
6427       LOOP
6428 
6429          DBMS_LOB.READ(l_lob_data,l_amount_to_read,l_read_length,l_data_var_raw); --reading lob data. l_amount_to_read is IN OUT parameter.
6430 
6431          l_data_var_char := UTL_RAW.CAST_TO_VARCHAR2(TO_CHAR(l_data_var_raw));
6432 
6433          INSERT INTO jl_br_sped_extr_data_t
6434          (request_id,
6435           block,
6436           record_seq,
6437           field1,
6438           separator1,
6439           field2,
6440           separator2,
6441           field3,
6442           separator3,
6443           created_by,
6444           creation_date,
6445           last_updated_by,
6446           last_update_date,
6447           last_update_login)
6448           VALUES (g_concurrent_request_id,
6449                   'J',
6450                   jl_br_sped_extr_data_t_s.nextval,
6451                   decode(l_read_length,1,'J800',null),   --filed1
6452                   decode(l_read_length,1,'|',null),      --seperator1
6453                   l_data_var_char,                       --field2
6454                   decode(sign(l_data_length - (l_read_length + l_amount_to_read)),1,null,'|'), --separator2
6455                   decode(sign(l_data_length - (l_read_length + l_amount_to_read)),1,null,'J800FIM'), --field3
6456                   decode(sign(l_data_length - (l_read_length + l_amount_to_read)),1,null,'|'),  --separator3
6457                   g_created_by,
6458                   g_creation_date,
6459                   g_last_updated_by,
6460                   g_last_update_date,
6461                   g_last_update_login
6462                   );
6463 
6464            l_read_length := l_read_length + l_amount_to_read ;
6465 
6466       END LOOP;   -- for while
6467    END LOOP;  -- for cursor loop
6468 
6469    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6470       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
6471 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
6472    END IF;
6473 
6474  END IF; -- End for book keeping type checking
6475 
6476    EXCEPTION
6477       WHEN OTHERS THEN
6478            g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6479            IF g_debug_flag = 'Y' THEN
6480               FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
6481            END IF;
6482            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
6483                FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
6484            END IF;
6485       g_errbuf := 'ERROR While inserting data into J800 register'||SQLERRM;
6486       g_retcode := 2;
6487       return;
6488 
6489 END register_J800;
6490 
6491 
6492 PROCEDURE register_J900 AS
6493 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_J900';
6494 l_booktype_desc           VARCHAR2(80);
6495 l_book_number             NUMBER; -- change
6496 l_company_name            VARCHAR2(200);
6497 BEGIN
6498 
6499    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6500        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
6501          G_PKG_NAME||': '||l_api_name||'()+');
6502    END IF;
6503 
6504    SELECT  SUBSTR(meaning,1,80)
6505      INTO  l_booktype_desc
6506      FROM  fnd_lookups
6507     WHERE  lookup_type = 'JLBR_SPED_BOOK_TYPES'
6508       AND  lookup_code = g_bookkeeping_type;
6509 
6510     BEGIN
6511 
6512         SELECT  book_number
6513           INTO  l_book_number
6514           FROM  jl_br_cinfos_books
6515          WHERE  ((upper(g_accounting_type) = 'DECENTRALIZED' AND legal_entity_id = g_legal_entity_id AND establishment_id IS NULL)
6516                  OR (upper(g_accounting_type) = 'CENTRALIZED' AND g_establishment_id IS NULL AND legal_entity_id = g_legal_entity_id)
6517                  OR (upper(g_accounting_type) = 'CENTRALIZED' AND g_establishment_id IS NOT NULL AND legal_entity_id = g_legal_entity_id AND establishment_id=g_establishment_id))
6518            AND  bookkeeping_type = substrb(g_bookkeeping_type,1,1)
6519            AND  auxiliary_book_flag = 'N';
6520 
6521      EXCEPTION
6522           WHEN NO_DATA_FOUND THEN
6523                l_book_number := null;
6524           WHEN OTHERS THEN
6525                g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6526                IF g_debug_flag = 'Y' THEN
6527                   FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
6528                END IF;
6529                IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
6530                    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
6531                END IF;
6532       END;
6533 
6534 
6535      INSERT INTO jl_br_sped_extr_data_t
6536      (request_id,
6537       block,
6538       record_seq,
6539       field1,
6540       separator1,
6541       field2,
6542       separator2,
6543       field3,
6544       separator3,
6545       field4,
6546       separator4,
6547       field5,
6548       separator5,
6549       field6,
6550       separator6,
6551       field7,
6552       separator7,
6553       field8,
6554       separator8,
6555       created_by,
6556       creation_date,
6557       last_updated_by,
6558       last_update_date,
6559       last_update_login)
6560       VALUES (g_concurrent_request_id,
6561              'J',     --block
6562 	           jl_br_sped_extr_data_t_s.nextval,  --record_seq
6563 	           'J900',  --Register (field1)
6564              '|',
6565              'TERMO DE ENCERRAMENTO', -- field2
6566              '|',
6567              l_book_number,        --field3
6568              '|',
6569              l_booktype_desc,      -- field4
6570              '|',
6571 	     g_company_name,
6572         --     decode(upper(g_accounting_type),'DECENTRALIZED',g_legal_entity_name,NVL(g_establishment_name,g_legal_entity_name)) ,      --field5
6573              '|',
6574              null,                 --field6
6575              '|',
6576              to_char(g_start_date,'ddmmyyyy'),          --field7
6577              '|',
6578              to_char(g_end_date,'ddmmyyyy'),            --field8
6579              '|',
6580              g_created_by,
6581              g_creation_date,
6582              g_last_updated_by,
6583              g_last_update_date,
6584              g_last_update_login );
6585 
6586 
6587 --   FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
6588 
6589    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6590       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
6591 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
6592    END IF;
6593 
6594 EXCEPTION
6595    WHEN OTHERS THEN
6596 
6597       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6598       IF g_debug_flag = 'Y' THEN
6599          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
6600       END IF;
6601       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
6602            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
6603       END IF;
6604       g_errbuf := 'ERROR While inserting data into J900 register'||SQLERRM;
6605       g_retcode := 2;
6606       return;
6607 
6608 END register_J900;
6609 
6610 
6611 --J930 Logic :   (contact info)
6612 
6613 PROCEDURE register_J930 AS
6614 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_J930';
6615 BEGIN
6616 
6617    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6618        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
6619          G_PKG_NAME||': '||l_api_name||'()+');
6620    END IF;
6621 
6622    IF ((upper(g_accounting_type) = 'CENTRALIZED' AND g_establishment_id is null)  --LE is the company
6623         OR  upper(g_accounting_type) = 'DECENTRALIZED')
6624    THEN
6625 
6626        INSERT INTO jl_br_sped_extr_data_t
6627        (request_id,
6628         block,
6629         record_seq,
6630         field1,
6631         separator1,
6632         field2,
6633         separator2,
6634         field3,
6635         separator3,
6636         field4,
6637         separator4,
6638         field5,
6639         separator5,
6640         field6,
6641         separator6,
6642         created_by,
6643         creation_date,
6644         last_updated_by,
6645         last_update_date,
6646         last_update_login)
6647         select  g_concurrent_request_id,
6648 	        'J',
6649                 jl_br_sped_extr_data_t_s.nextval,
6650 		'J930',
6651 		'|',
6652 		hp.party_name,
6653 		'|',
6654                 hp.jgzz_fiscal_code,
6655 		'|',
6656                 lk.meaning,
6657 		'|',
6658 		crole.lookup_code,
6659 		'|',
6660                 hp.person_identifier,
6661 		'|',
6662 		g_created_by,
6663 		g_creation_date,
6664 		g_last_updated_by,
6665 		g_last_update_date,
6666 		g_last_update_login
6667           from  xle_entity_profiles le,
6668                 xle_contact_legal_roles crole,
6669                 hz_parties hp,
6670                 xle_lookups lk
6671          where  le.legal_entity_id =g_legal_entity_id
6672            and  le.party_id = crole.le_etb_party_id
6673            and  crole.source_table = 'XLE_ENTITY_PROFILES'
6674            and  crole.lookup_type = 'XLE_CONTACT_ROLE'
6675            and  crole.contact_party_id = hp.party_id
6676            and  lk.lookup_type = crole.lookup_type
6677            and  lk.lookup_code = crole.lookup_code;
6678 
6679     ELSE  -- means running in 'CENTRALIZED' mode and establishment acts as company
6680 
6681        INSERT INTO jl_br_sped_extr_data_t
6682        (request_id,
6683         block,
6684         record_seq,
6685         field1,
6686         separator1,
6687         field2,
6688         separator2,
6689         field3,
6690         separator3,
6691         field4,
6692         separator4,
6693         field5,
6694         separator5,
6695         field6,
6696         separator6,
6697         created_by,
6698         creation_date,
6699         last_updated_by,
6700         last_update_date,
6701         last_update_login)
6702         select  g_concurrent_request_id,
6703 	        'J',
6704                 jl_br_sped_extr_data_t_s.nextval,
6705 		'J930',
6706 		'|',
6707 		hp.party_name,
6708 		'|',
6709                 hp.jgzz_fiscal_code,
6710 		'|',
6711                 lk.meaning,
6712 		'|',
6713 		crole.lookup_code,
6714 		'|',
6715                 hp.person_identifier,
6716 		'|',
6717 		g_created_by,
6718 		g_creation_date,
6719 		g_last_updated_by,
6720 		g_last_update_date,
6721 		g_last_update_login
6722           from  xle_etb_profiles etb,
6723                 xle_contact_legal_roles crole,
6724                 hz_parties hp,
6725                 xle_lookups lk
6726          where  etb.legal_entity_id =g_legal_entity_id
6727 	   and  etb.establishment_id =g_establishment_id
6728            and  etb.party_id = crole.le_etb_party_id
6729            and  crole.source_table = 'XLE_ETB_PROFILES'
6730            and  crole.lookup_type = 'XLE_CONTACT_ROLE'
6731            and  crole.contact_party_id = hp.party_id
6732            and  lk.lookup_type = crole.lookup_type
6733            and  lk.lookup_code = crole.lookup_code;
6734 
6735          IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6736              FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
6737 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
6738          END IF;
6739    END IF;
6740 
6741 EXCEPTION
6742    WHEN OTHERS THEN
6743 
6744       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6745       IF g_debug_flag = 'Y' THEN
6746          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
6747       END IF;
6748       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
6749            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
6750       END IF;
6751       g_errbuf := 'ERROR While inserting data into J930 register'||SQLERRM;
6752       g_retcode := 2;
6753       return;
6754 
6755 END register_J930;
6756 
6757 PROCEDURE register_J990 AS
6758 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_J990';
6759 
6760 BEGIN
6761 
6762    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6763        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
6764          G_PKG_NAME||': '||l_api_name||'()+');
6765    END IF;
6766 
6767      INSERT INTO jl_br_sped_extr_data_t
6768      (request_id,
6769       block,
6770       record_seq,
6771       field1,
6772       separator1,
6773       field2,
6774       separator2,
6775       created_by,
6776       creation_date,
6777       last_updated_by,
6778       last_update_date,
6779       last_update_login)
6780       VALUES( g_concurrent_request_id,
6781               'J',     --block
6782 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
6783 	            'J990',  --Register (field1)
6784               '|',
6785 	            null, --count(*), --field2
6786               '|',
6787               g_created_by,
6788               g_creation_date,
6789               g_last_updated_by,
6790               g_last_update_date,
6791               g_last_update_login);
6792 
6793 --   FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
6794 
6795    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6796       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
6797 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
6798    END IF;
6799 
6800 EXCEPTION
6801    WHEN OTHERS THEN
6802 
6803       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6804       IF g_debug_flag = 'Y' THEN
6805          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
6806       END IF;
6807       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
6808            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
6809       END IF;
6810       g_errbuf := 'ERROR While inserting data into J990 register'||SQLERRM;
6811       g_retcode := 2;
6812       return;
6813 END register_J990;
6814 
6815 /* This procedure inserts one record through which we can identify whether data is
6816     reported for block '9' or not
6817     0- Block with data reported;
6818     1- Block without data reported  */
6819 
6820 PROCEDURE register_9001 AS
6821 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_9001';
6822 
6823 BEGIN
6824 
6825    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6826        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
6827          G_PKG_NAME||': '||l_api_name||'()+');
6828    END IF;
6829 
6830      INSERT INTO jl_br_sped_extr_data_t
6831      (request_id,
6832       block,
6833       record_seq,
6834       field1,
6835       separator1,
6836       field2,
6837       separator2,
6838       created_by,
6839       creation_date,
6840       last_updated_by,
6841       last_update_date,
6842       last_update_login)
6843       VALUES( g_concurrent_request_id,
6844               '9',     --block
6845 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
6846 	            '9001',  --Register (field1)
6847               '|',
6848 	             0,--null, --decode(count(*),0,1,0), --field2
6849               '|',
6850               g_created_by,
6851               g_creation_date,
6852               g_last_updated_by,
6853               g_last_update_date,
6854               g_last_update_login );
6855 
6856 --   FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
6857 
6858    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6859       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
6860 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
6861    END IF;
6862 
6863 EXCEPTION
6864    WHEN OTHERS THEN
6865 
6866       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6867       IF g_debug_flag = 'Y' THEN
6868          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
6869       END IF;
6870       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
6871            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
6872       END IF;
6873       g_errbuf := 'ERROR While inserting data into 9001 register'||SQLERRM;
6874       g_retcode := 2;
6875       return;
6876 
6877 END register_9001;
6878 
6879 /* This procedure will inserts one row for each register got created by this extract prg.
6880    Each row contains the details like the register_name and total number of lines
6881    created for that register */
6882 
6883 PROCEDURE register_9900 AS
6884 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_9900';
6885 
6886 BEGIN
6887 
6888    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6889        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
6890          G_PKG_NAME||': '||l_api_name||'()+');
6891    END IF;
6892 
6893      INSERT INTO jl_br_sped_extr_data_t
6894      (request_id,
6895       block,
6896       record_seq,
6897       field1,
6898       separator1,
6899       field2,
6900       separator2,
6901       field3,
6902       separator3,
6903       created_by,
6904       creation_date,
6905       last_updated_by,
6906       last_update_date,
6907       last_update_login)
6908       SELECT  g_concurrent_request_id,
6909               '9',     --block
6910 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
6911 	            '9900',  --Register (field1)
6912               '|',
6913 	            reg, --field2
6914               '|',
6915               cnt,
6916               '|',
6917               g_created_by,
6918               g_creation_date,
6919               g_last_updated_by,
6920               g_last_update_date,
6921               g_last_update_login
6922         FROM (SELECT  field1 reg,
6923                       COUNT(*) cnt
6924                 FROM  jl_br_sped_extr_data_t
6925                WHERE  request_id = g_concurrent_request_id
6926                  AND  field1 IS NOT NULL
6927                  AND  field1 <> '9001'
6928                GROUP BY field1);
6929 
6930   -- FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
6931 
6932    /*9900 register should contain the number of records for each register.
6933     At the time of call to this register_9900, records doesn't exists for 9900, 9990 and 9999 registers.
6934     So need to insert the records 9990 and 9999 registers*/
6935      INSERT INTO jl_br_sped_extr_data_t
6936      (request_id,
6937       block,
6938       record_seq,
6939       field1,
6940       separator1,
6941       field2,
6942       separator2,
6943       field3,
6944       separator3,
6945       created_by,
6946       creation_date,
6947       last_updated_by,
6948       last_update_date,
6949       last_update_login)
6950       VALUES (g_concurrent_request_id,
6951               '9',     --block
6952 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
6953 	            '9900',  --Register (field1)
6954               '|',
6955 	            '9001', --field2
6956               '|',
6957               1,
6958               '|',
6959               g_created_by,
6960               g_creation_date,
6961               g_last_updated_by,
6962               g_last_update_date,
6963               g_last_update_login );
6964 
6965      INSERT INTO jl_br_sped_extr_data_t
6966      (request_id,
6967       block,
6968       record_seq,
6969       field1,
6970       separator1,
6971       field2,
6972       separator2,
6973       field3,
6974       separator3,
6975       created_by,
6976       creation_date,
6977       last_updated_by,
6978       last_update_date,
6979       last_update_login)
6980       VALUES (g_concurrent_request_id,
6981               '9',     --block
6982 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
6983 	            '9900',  --Register (field1)
6984               '|',
6985 	            '9900', --field2
6986               '|',
6987               1,
6988               '|',
6989               g_created_by,
6990               g_creation_date,
6991               g_last_updated_by,
6992               g_last_update_date,
6993               g_last_update_login );
6994 
6995      INSERT INTO jl_br_sped_extr_data_t
6996      (request_id,
6997       block,
6998       record_seq,
6999       field1,
7000       separator1,
7001       field2,
7002       separator2,
7003       field3,
7004       separator3,
7005       created_by,
7006       creation_date,
7007       last_updated_by,
7008       last_update_date,
7009       last_update_login)
7010       VALUES (g_concurrent_request_id,
7011               '9',     --block
7012 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
7013 	            '9900',  --Register (field1)
7014               '|',
7015 	            '9990', --field2
7016               '|',
7017               1,
7018               '|',
7019               g_created_by,
7020               g_creation_date,
7021               g_last_updated_by,
7022               g_last_update_date,
7023               g_last_update_login );
7024 
7025      INSERT INTO jl_br_sped_extr_data_t
7026      (request_id,
7027       block,
7028       record_seq,
7029       field1,
7030       separator1,
7031       field2,
7032       separator2,
7033       field3,
7034       separator3,
7035       created_by,
7036       creation_date,
7037       last_updated_by,
7038       last_update_date,
7039       last_update_login)
7040       VALUES (g_concurrent_request_id,
7041               '9',     --block
7042 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
7043 	            '9900',  --Register (field1)
7044               '|',
7045 	            '9999', --field2
7046               '|',
7047               1,
7048               '|',
7049               g_created_by,
7050               g_creation_date,
7051               g_last_updated_by,
7052               g_last_update_date,
7053               g_last_update_login );
7054 
7055 
7056    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7057       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
7058 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
7059    END IF;
7060 
7061 EXCEPTION
7062    WHEN OTHERS THEN
7063 
7064       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
7065       IF g_debug_flag = 'Y' THEN
7066          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
7067       END IF;
7068       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
7069            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
7070       END IF;
7071       g_errbuf := 'ERROR While inserting data into 9900 register'||SQLERRM;
7072       g_retcode := 2;
7073       return;
7074 
7075 END register_9900;
7076 
7077 /* This register contains total number of lines generated in block '9' */
7078 PROCEDURE register_9990 AS
7079 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_9990';
7080 
7081 BEGIN
7082 
7083    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7084        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
7085          G_PKG_NAME||': '||l_api_name||'()+');
7086    END IF;
7087 
7088      INSERT INTO jl_br_sped_extr_data_t
7089      (request_id,
7090       block,
7091       record_seq,
7092       field1,
7093       separator1,
7094       field2,
7095       separator2,
7096       created_by,
7097       creation_date,
7098       last_updated_by,
7099       last_update_date,
7100       last_update_login)
7101       VALUES( g_concurrent_request_id,
7102               '9',     --block
7103 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
7104 	            '9990',  --Register (field1)
7105               '|',
7106 	            null, --count(*), --field2
7107               '|',
7108               g_created_by,
7109               g_creation_date,
7110               g_last_updated_by,
7111               g_last_update_date,
7112               g_last_update_login );
7113 
7114  --  FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
7115 
7116    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7117       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
7118 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
7119    END IF;
7120 
7121 EXCEPTION
7122    WHEN OTHERS THEN
7123 
7124       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
7125       IF g_debug_flag = 'Y' THEN
7126          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
7127       END IF;
7128       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
7129            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
7130       END IF;
7131       g_errbuf := 'ERROR While inserting data into 9990 register'||SQLERRM;
7132       g_retcode := 2;
7133       return;
7134 
7135 END register_9990;
7136 
7137 /* This register contains total number of lines generated for sped file */
7138 
7139 PROCEDURE register_9999 AS
7140 l_api_name                CONSTANT VARCHAR2(30) :='REGISTER_9999';
7141 
7142 BEGIN
7143 
7144    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7145        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
7146          G_PKG_NAME||': '||l_api_name||'()+');
7147    END IF;
7148 
7149      INSERT INTO jl_br_sped_extr_data_t
7150      (request_id,
7151       block,
7152       record_seq,
7153       field1,
7154       separator1,
7155       field2,
7156       separator2,
7157       created_by,
7158       creation_date,
7159       last_updated_by,
7160       last_update_date,
7161       last_update_login)
7162       VALUES( g_concurrent_request_id,
7163               '9',     --block
7164 	            jl_br_sped_extr_data_t_s.nextval,  --record_seq
7165 	            '9999',  --Register (field1)
7166               '|',
7167 	            null, --count(*), --field2  This field will be updated in update_register_cnt proc at the end of data extraction
7168               '|',
7169               g_created_by,
7170               g_creation_date,
7171               g_last_updated_by,
7172               g_last_update_date,
7173               g_last_update_login);
7174 
7175   -- FND_FILE.PUT_LINE(FND_FILE.LOG, G_PKG_NAME||': '||l_api_name||'(): No of Records Inserted:' ||SQL%ROWCOUNT);
7176 
7177    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7178       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
7179 	                   G_PKG_NAME||': ' ||l_api_name||'()-');
7180    END IF;
7181 
7182 EXCEPTION
7183    WHEN OTHERS THEN
7184 
7185       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
7186       IF g_debug_flag = 'Y' THEN
7187          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
7188       END IF;
7189       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
7190            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
7191       END IF;
7192       g_errbuf := 'ERROR While inserting data into 9999 register'||SQLERRM;
7193       g_retcode := 2;
7194       return;
7195 
7196 END register_9999;
7197 
7198 PROCEDURE update_register_cnt AS
7199 l_api_name                CONSTANT VARCHAR2(30) :='UPDATE_REGISTER_CNT';
7200 BEGIN
7201 
7202     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7203         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
7204         G_PKG_NAME||': '||l_api_name||'()+');
7205     END IF;
7206 
7207    /*This procedure is to update the details about number of records inserted into sped temp table.
7208     This will be called at the end of data extraction(after calling all registers) as
7209     the insertion of data will be completed at this time.
7210    */
7211 
7212     UPDATE  jl_br_sped_extr_data_t
7213        SET  field2 = (SELECT DECODE(COUNT(*),0,1,0)
7214                         FROM jl_br_sped_extr_data_t
7215                        WHERE block='0'
7216                          AND request_id = g_concurrent_request_id)
7217      WHERE  field1 = '0001'
7218        AND  request_id = g_concurrent_request_id;
7219 
7220   --  FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated 0001 register');
7221 
7222     UPDATE  jl_br_sped_extr_data_t
7223        SET  field2 = (SELECT COUNT(*)
7224                         FROM jl_br_sped_extr_data_t
7225                        WHERE block='0'
7226                          AND  request_id = g_concurrent_request_id)
7227      WHERE  field1 = '0990'
7228        AND  request_id = g_concurrent_request_id;
7229 
7230   --  FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated 0990 register');
7231 
7232     UPDATE  jl_br_sped_extr_data_t
7233        SET  field2 = (SELECT DECODE(COUNT(*),0,1,0)
7234                         FROM jl_br_sped_extr_data_t
7235                        WHERE block='I'
7236                          AND request_id = g_concurrent_request_id)
7237      WHERE  field1 = 'I001'
7238        AND  request_id = g_concurrent_request_id;
7239 
7240 --  FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated I001 register');
7241 
7242     UPDATE  jl_br_sped_extr_data_t
7243        SET  field2 = (SELECT COUNT(*)
7244                         FROM jl_br_sped_extr_data_t
7245                        WHERE block='I'
7246                          AND request_id = g_concurrent_request_id)
7247      WHERE  field1 = 'I990'
7248        AND  request_id = g_concurrent_request_id;
7249 
7250 --   FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated I990 register');
7251 
7252     UPDATE  jl_br_sped_extr_data_t
7253        SET  field2 = (SELECT DECODE(COUNT(*),0,1,0)
7254                         FROM jl_br_sped_extr_data_t
7255                        WHERE block='J'
7256                          AND request_id = g_concurrent_request_id)
7257      WHERE  field1 = 'J001'
7258        AND  request_id = g_concurrent_request_id;
7259 
7260 --     FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated J001 register');
7261 
7262     UPDATE  jl_br_sped_extr_data_t
7263        SET  field6 = (SELECT COUNT(*)
7264                         FROM jl_br_sped_extr_data_t
7265                        WHERE request_id = g_concurrent_request_id
7266                          AND field1 IS NOT NULL)
7267      WHERE  field1 = 'J900'
7268        AND  request_id = g_concurrent_request_id;
7269 
7270  --      FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated J990 register');
7271 
7272     UPDATE  jl_br_sped_extr_data_t
7273        SET  field2 = (SELECT COUNT(*)
7274                         FROM jl_br_sped_extr_data_t
7275                        WHERE block='J'
7276                          AND  request_id = g_concurrent_request_id
7277                          AND  field1 IS NOT NULL)
7278      WHERE  field1 = 'J990'
7279        AND  request_id = g_concurrent_request_id;
7280 
7281   --     FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated J990 register');
7282 
7283     UPDATE  jl_br_sped_extr_data_t
7284        SET  field2 = (SELECT DECODE(COUNT(*),0,1,0)
7285                         FROM jl_br_sped_extr_data_t
7286                        WHERE block='9'
7287                          AND request_id = g_concurrent_request_id)
7288      WHERE  field1 = '9001'
7289        AND  request_id = g_concurrent_request_id;
7290 
7291 --   FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated 9001 register');
7292 
7293     UPDATE  jl_br_sped_extr_data_t
7294        SET  field3 = (SELECT COUNT(*)
7295                         FROM jl_br_sped_extr_data_t
7296                        WHERE field1='9900'
7297                          AND request_id = g_concurrent_request_id)
7298      WHERE  field1 = '9900'
7299        AND  field2 = '9900'
7300        AND  request_id = g_concurrent_request_id;
7301 
7302 --  FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated 9900 register');
7303 
7304     UPDATE  jl_br_sped_extr_data_t
7305        SET  field2 = (SELECT COUNT(*)
7306                         FROM jl_br_sped_extr_data_t
7307                        WHERE block='9'
7308                          AND  request_id = g_concurrent_request_id)
7309      WHERE  field1 = '9990'
7310        AND  request_id = g_concurrent_request_id;
7311 
7312   --     FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated 9990 register');
7313 
7314     UPDATE  jl_br_sped_extr_data_t
7315        SET  field5 = (SELECT COUNT(*)
7316                         FROM jl_br_sped_extr_data_t
7317                        WHERE request_id = g_concurrent_request_id
7318                          AND  field1 IS NOT NULL)
7319      WHERE  field1 = 'I030'
7320        AND  request_id = g_concurrent_request_id;
7321 
7322     --   FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated I030 register');
7323 
7324     UPDATE  jl_br_sped_extr_data_t
7325        SET  field2 = (SELECT COUNT(*)
7326                         FROM jl_br_sped_extr_data_t
7327                        WHERE request_id = g_concurrent_request_id
7328                          AND field1 IS NOT NULL)
7329      WHERE  field1 = '9999'
7330        AND  request_id = g_concurrent_request_id;
7331 
7332    --   FND_FILE.PUT_LINE(FND_FILE.LOG,'Updated 9999 register');
7333 
7334     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7335         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
7336         G_PKG_NAME||': '||l_api_name||'()-');
7337     END IF;
7338 
7339 EXCEPTION
7340    WHEN OTHERS THEN
7341 
7342       g_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
7343       IF g_debug_flag = 'Y' THEN
7344          FND_FILE.PUT_LINE(FND_FILE.LOG, g_error_buffer);
7345       END IF;
7346       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
7347            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
7348       END IF;
7349 
7350 END update_register_cnt;
7351 
7352 PROCEDURE validation_before_extract AS
7353 l_cnt                    NUMBER := 0;
7354 l_prev_bk_type           VARCHAR2(3);
7355 l_journalsource_check    NUMBER := 0 ;
7356 BEGIN
7357     --BEGIN: Special situation Start and End Date vaidaion
7358     BEGIN
7359      IF g_special_situation_indicator IS NOT NULL THEN
7360 
7361           SELECT  COUNT(*)
7362             INTO  l_cnt
7363             FROM  gl_periods gp,
7364                   gl_ledgers gl
7365            WHERE  gp.period_set_name  = gl.period_set_name
7366              AND  gl.ledger_id = g_ledger_id
7367              AND  g_start_date   >=  gp.start_date
7368              AND  g_end_date     <=  gp.end_date ;
7369 
7370              IF l_cnt = 0 THEN
7371                  FND_MESSAGE.SET_NAME('JL','JLBR_SPED_SPEC_SIT_DATE_CHECK');
7372                  g_errbuf            :=  FND_MESSAGE.GET;
7373                  --g_errbuf := 'Start and End dates do not belong to same period';
7374                  g_retcode := 2;
7375                  return;
7376              END IF;
7377 
7378       END IF;
7379      EXCEPTION
7380          WHEN OTHERS THEN
7381          FND_FILE.PUT_LINE(FND_FILE.LOG, SQLCODE||' : '||SUBSTR(SQLERRM,1,80));
7382          g_errbuf :=  'Issue while validation of the special situation start and end date';
7383          g_retcode :=2;
7384          RETURN;
7385     END;
7386      --END: Special situation Start and End Date vaidaion
7387 
7388       l_cnt := 0;
7389 
7390     BEGIN      -- Begin for checking whether the report is finally submitted or not for the period?
7391 
7392       SELECT  COUNT(*)
7393         INTO  l_cnt
7394         FROM  jl_br_sped_extr_param
7395        WHERE  legal_entity_id    = g_legal_entity_id
7396          AND  bookkeeping_type   = g_bookkeeping_type
7397       	 AND  estb_acct_type     = g_accounting_type
7398          AND  ((g_establishment_id IS NOT NULL AND establishment_id  = g_establishment_id )
7399 	        OR (g_establishment_id IS NULL AND establishment_id IS NULL))
7400          AND  period_name        = g_period_name
7401          AND  report_mode in ('R','F');
7402 
7403       IF l_cnt > 0 THEN
7404          FND_MESSAGE.SET_NAME('JL','JLBR_SPED_FILE_FINAL_REPORTED');
7405          g_errbuf :=  FND_MESSAGE.GET;
7406          --g_errbuf := 'Report has been already submitted in Final Mode with this combination';
7407          g_retcode := 2;
7408          return;
7409       END IF;
7410     EXCEPTION
7411          WHEN OTHERS THEN
7412          FND_FILE.PUT_LINE(FND_FILE.LOG, SQLCODE||' : '||SUBSTR(SQLERRM,1,80));
7413          g_errbuf :=  'Erro while verification of previous report runs';
7414          g_retcode :=2;
7415          RETURN;
7416     END;   -- End for checking whether the report is finally submitted or not for the period?
7417 
7418 
7419       /* Validation for the book keeping types 'R' and 'B'.
7420          User can run the program with book keeping type 'R', only when the program already
7421          ran with book keeping type 'A/R' for the same input parameters. Same is the case with 'B'*/
7422 
7423       IF g_bookkeeping_type = 'R'  THEN
7424 
7425             BEGIN
7426 
7427                 SELECT  bookkeeping_type
7428                   INTO  l_prev_bk_type
7429                   FROM  jl_br_sped_extr_param
7430                  WHERE  legal_entity_id     = g_legal_entity_id
7431                    AND  estb_acct_type      = g_accounting_type
7432                    AND  ((g_establishment_id IS NOT NULL AND establishment_id    = g_establishment_id)
7433 		         OR (g_establishment_id IS NULL AND establishment_id IS NULL))
7434                    AND  period_name         = g_period_name
7435                    AND  nvl(CONSOL_MAP_ID,1)   = nvl(g_coa_mapping_id,1)
7436                    AND  data_exist          = 'Y'
7437                    AND  request_id          <> g_concurrent_request_id
7438                    AND  bookkeeping_type like 'A/R';
7439 
7440                EXCEPTION
7441                 WHEN NO_DATA_FOUND THEN
7442                      FND_MESSAGE.SET_NAME('JL','JLBR_SPED_BOOK_A/R_NOT_RUN');
7443                      g_errbuf :=  FND_MESSAGE.GET;
7444                      g_retcode :=2;
7445                      return;
7446                 WHEN OTHERS THEN
7447             		     FND_FILE.PUT_LINE(FND_FILE.LOG, SQLCODE||' : '||SUBSTR(SQLERRM,1,80));
7448                      g_errbuf :=  'Fialed to get book keeping type in validation_before_extract';
7449                      g_retcode :=2;
7450                      RETURN;
7451             END;
7452 
7453       END IF; -- IF g_bookkeeping_type = 'R'  THEN
7454 
7455        IF g_bookkeeping_type = 'B' THEN
7456 
7457             BEGIN
7458 
7459                 SELECT  bookkeeping_type
7460                   INTO  l_prev_bk_type
7461                   FROM  jl_br_sped_extr_param
7462                  WHERE  legal_entity_id     = g_legal_entity_id
7463                    AND  estb_acct_type      = g_accounting_type
7464                    AND  ((g_establishment_id IS NOT NULL AND establishment_id= g_establishment_id)
7465 		          OR (g_establishment_id IS NULL AND establishment_id IS NULL))
7466                    AND  period_name         = g_period_name
7467                    AND  nvl(CONSOL_MAP_ID,1)   = nvl(g_coa_mapping_id,1)
7468                    AND  data_exist          = 'Y'
7469                    AND  request_id          <> g_concurrent_request_id
7470                    AND  bookkeeping_type like 'A/B';
7471 
7472              EXCEPTION
7473                 WHEN NO_DATA_FOUND THEN
7474                      FND_MESSAGE.SET_NAME('JL','JLBR_SPED_BOOK_A/B_NOT_RUN');
7475                      g_errbuf :=  FND_MESSAGE.GET;
7476                      g_retcode :=2;
7477                      return;
7478                 WHEN OTHERS THEN
7479                     FND_FILE.PUT_LINE(FND_FILE.LOG, SQLCODE||' : '||SUBSTR(SQLERRM,1,80));
7480                     g_errbuf :=  'Fialed to get book keeping type in validation_before_extract';
7481                     g_retcode :=2;
7482                     return;
7483               END;
7484 
7485        END IF;
7486 
7487    IF g_bookkeeping_type = 'A/R' AND g_bookkeeping_type = 'A/B' THEN
7488 
7489 /*   After calling I015,I200,I250 registers, a custom procedure will called to insert the data of
7490      non oracle standard journal source's information. Customer will define their journal sources
7491      as lookup values of type 'JLBR_SPED_LEGACY_SOURCES'. So this validation check is just to
7492      confirm that user doesn't define any source which is aready defined as standard oracle journal source.
7493      If user defines any standard oracle journal source in this lookup, program will be terminated with
7494      a error message. */
7495 
7496    BEGIN
7497 
7498      l_journalsource_check := 0;
7499 
7500      SELECT 1
7501        INTO l_journalsource_check
7502        FROM fnd_lookups
7503       WHERE lookup_type = 'JLBR_SPED_LEGACY_SOURCES'
7504         AND lookup_code in ('AX Inventory','AX Payables','AX Receivables','Assets','Average Consolidation',
7505                             'Budget Journal','Carryforward','Consolidation','Conversion','Encumbrance',
7506                             'Inflation','Intercompany','Inventory','Manual','Manufacturing','MassAllocation',
7507                             'Move/Merge','Move/Merge Reversal','Other','Payables','Payroll','Personnel','Projects',
7508                             'Purchasing','Receivables','Recurring','Revaluation','Revenue','Spreadsheet','Statistical','Transfer');
7509 
7510      IF l_journalsource_check = 1 THEN
7511       --  fnd_message.set_name('JL','JLBR_SPED_OTHER_SL_SOURCE');
7512       --  fnd_file.put_line(fnd_file.log,fnd_message.get);
7513         fnd_message.set_name('JL','JLBR_SPED_OTHER_SL_SOURCE');
7514         g_errbuf  :=fnd_message.get;
7515         g_retcode :=2;
7516         RETURN;
7517      END IF;
7518 
7519    EXCEPTION
7520        WHEN NO_DATA_FOUND THEN
7521           null;
7522        WHEN OTHERS THEN
7523           FND_FILE.PUT_LINE(FND_FILE.LOG, SQLCODE||' : '||SUBSTR(SQLERRM,1,80));
7524           g_errbuf :=  'Error occurred while validating the journal sources.';
7525           g_retcode :=2;
7526           RETURN;
7527    END;
7528 
7529    END IF; --End for IF g_bookkeeping_type = 'A/R' AND g_bookkeeping_type = 'A/B' THEN
7530 
7531 END validation_before_extract;
7532 
7533 PROCEDURE validation_after_extract AS
7534 l_summary_balance1    NUMBER;
7535 l_summary_balance2    NUMBER;
7536 l_cnt                 NUMBER := 0;
7537 l_api_name            CONSTANT VARCHAR2(100) := 'VALIDATE_AFTER_EXTRACT';
7538 
7539 CURSOR valor_deb_cur IS
7540    SELECT  DISTINCT I250.field2,I250.field3 -- natural account and costcenter
7541      FROM  JL_BR_SPED_EXTR_DATA_T I155,
7542            JL_BR_SPED_EXTR_DATA_T I250
7543     WHERE  I155.request_id = g_concurrent_request_id
7544       AND  I155.field1 = 'I155'
7545       AND  I250.request_id = g_concurrent_request_id
7546       AND  I250.field1 = 'I250'
7547       AND  I155.field2 = I250.field2 -- Natural Account
7548       AND  I155.field3 = I250.field3 -- Cost Center
7549       AND  I250.field5 = 'D'  --Debit
7550       GROUP BY I250.field2,I250.field3
7551       HAVING SUM(to_number(I250.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) <>
7552              MIN(to_number(I155.field6,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''));
7553 
7554 CURSOR valor_cred_cur IS
7555     SELECT  DISTINCT I250.field2,I250.field3  -- natural account and costcenter
7556       FROM  JL_BR_SPED_EXTR_DATA_T I155,
7557             JL_BR_SPED_EXTR_DATA_T I250
7558      WHERE  I155.request_id = g_concurrent_request_id
7559        AND  I155.field1 = 'I155'
7560        AND  I250.request_id = g_concurrent_request_id
7561        AND  I250.field1 = 'I250'
7562        AND  I155.field2 = I250.field2 -- Natural Account
7563        AND  I155.field3 = I250.field3 -- Cost Center
7564        AND  I250.field5 = 'C'  --Credit
7565       GROUP BY I250.field2,I250.field3
7566     HAVING SUM(to_number(I250.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) <>
7567            MIN(to_number(I155.field7,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''));
7568 
7569 CURSOR vl_lcto_deb_cur IS
7570       SELECT  DISTINCT I250.field6  -- Journal Name
7571         FROM  JL_BR_SPED_EXTR_DATA_T I200,
7572               JL_BR_SPED_EXTR_DATA_T I250
7573        WHERE  I200.request_id = g_concurrent_request_id
7574          AND  I200.field1 = 'I200'
7575          AND  I250.request_id = g_concurrent_request_id
7576          AND  I250.field1 = 'I250'
7577          AND  I200.field2 = I250.field6 -- Jounral Name || BATCH ID
7578          AND  I250.field5 = 'D'  --Debit
7579     GROUP BY  I250.field6
7580       HAVING  SUM(to_number(I250.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) <>
7581               MIN(to_number(I200.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''));
7582 
7583 CURSOR vl_lcto_cred_cur IS
7584       SELECT  DISTINCT I250.field6  -- Journal Name
7585         INTO  l_cnt
7586         FROM  JL_BR_SPED_EXTR_DATA_T I200,
7587               JL_BR_SPED_EXTR_DATA_T I250
7588        WHERE  I200.request_id = g_concurrent_request_id
7589          AND  I200.field1 = 'I200'
7590          AND  I250.request_id = g_concurrent_request_id
7591          AND  I250.field1 = 'I250'
7592          AND  I200.field2 = I250.field6 -- Jounral Name || BATCH ID
7593          AND  I250.field5 = 'C'  --Credit
7594     GROUP BY  I250.field6
7595       HAVING  sum(to_number(I250.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) <>
7596               min(to_number(I200.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''));
7597 
7598 BEGIN
7599 
7600     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7601          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
7602 		     G_PKG_NAME||': '||l_api_name||'()+');
7603     END IF;
7604   /*When the running the report in detail mode, Check if summary mode posted data exists or not?
7605     If summary data exists warn the user. If program is run for summary mode info check if detail data exists,If exists earn the user*/
7606 
7607      l_cnt := 0;
7608 
7609            SELECT  COUNT(*)         -- Payables invoices posted in Summary mode.
7610 	     INTO  l_cnt
7611 	     FROM (SELECT jl.code_combination_id
7612                      FROM  gl_je_headers jh
7613                            ,gl_je_lines jl
7614                            ,gl_import_references glimp
7615                            ,xla_ae_lines xll
7616                            ,xla_ae_headers xlh
7617                            ,xla_distribution_links xld
7618                     WHERE  jh.ledger_id = g_ledger_id
7619                        AND  jh.je_source in ('Payables')
7620                        AND  jh.je_header_id     = jl.je_header_id
7621                        AND  glimp.je_header_id  = jh.je_header_id
7622                        AND  xlh.ae_header_id    = xll.ae_header_id
7623                        AND  xlh.EVENT_ID        = xld.EVENT_ID
7624                        AND  xlh.ae_header_id    = xld.ae_header_id
7625                        AND  jl.je_line_num      = glimp.je_line_num
7626                        AND  glimp.gl_sl_link_id = xll.gl_sl_link_id
7627 		       AND  glimp.gl_sl_link_table = xll.gl_sl_link_table
7628 		       AND  jh.status      = 'P'
7629                        AND  jl.status      = 'P'
7630                        AND  jh.default_effective_date between g_start_date and g_end_date
7631                   GROUP BY  glimp.je_header_id,glimp.je_line_num,jl.code_combination_id
7632                     HAVING  count(*) >1);
7633 
7634 
7635      IF g_bookkeeping_type = 'G'  THEN
7636            IF l_cnt > 0 THEN
7637         --      FND_FILE.PUT_LINE(FND_FILE.LOG,'There exists '||l_cnt||' journals which are posted in Summary Mode');
7638               FND_MESSAGE.SET_NAME('JL','JLBR_SPED_DATA_DETAIL_CHECK');
7639               FND_MESSAGE.SET_TOKEN('SOURCE','Payables');
7640               FND_MESSAGE.SET_TOKEN('PERIOD',g_period_name);
7641               FND_MESSAGE.SET_TOKEN('BOOKKEEPING_TYPE',g_bookkeeping_type);
7642               FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET);
7643            END IF;
7644      ELSIF g_bookkeeping_type = 'A/R' OR g_bookkeeping_type = 'A/B' OR  g_bookkeeping_type = 'R' OR g_bookkeeping_type = 'B' THEN
7645           IF l_cnt = 0 THEN
7646         --      FND_FILE.PUT_LINE(FND_FILE.LOG,'No journals were posted in Summary Mode');
7647               FND_MESSAGE.SET_NAME('JL','JLBR_SPED_DATA_SUMMARY_CHECK');
7648               FND_MESSAGE.SET_TOKEN('SOURCE','Payables');
7649               FND_MESSAGE.SET_TOKEN('PERIOD',g_period_name);
7650               FND_MESSAGE.SET_TOKEN('BOOKKEEPING_TYPE',g_bookkeeping_type);
7651               FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET);
7652           END IF;
7653      END IF;
7654 
7655      l_cnt := 0;
7656 
7657            SELECT  COUNT(*)         -- Receivables transactions posted in Summary mode.
7658 	     INTO  l_cnt
7659 	     FROM (SELECT jl.code_combination_id
7660                      FROM  gl_je_headers jh
7661                            ,gl_je_lines jl
7662                            ,gl_import_references glimp
7663                            ,xla_ae_lines xll
7664                            ,xla_ae_headers xlh
7665                            ,xla_distribution_links xld
7666                     WHERE  jh.ledger_id = g_ledger_id
7667                        AND  jh.je_source in ('Receivables')
7668                        AND  jh.je_header_id     = jl.je_header_id
7669                        AND  glimp.je_header_id  = jh.je_header_id
7670                        AND  xlh.ae_header_id    = xll.ae_header_id
7671                        AND  xlh.EVENT_ID        = xld.EVENT_ID
7672                        AND  xlh.ae_header_id    = xld.ae_header_id
7673                        AND  jl.je_line_num      = glimp.je_line_num
7674                        AND  glimp.gl_sl_link_id = xll.gl_sl_link_id
7675 		       AND  glimp.gl_sl_link_table = xll.gl_sl_link_table
7676 		       AND  jh.status      = 'P'
7677                        AND  jl.status      = 'P'
7678                        AND  jh.default_effective_date between g_start_date and g_end_date
7679                   GROUP BY  glimp.je_header_id,glimp.je_line_num,jl.code_combination_id
7680                     HAVING  count(*) >1);
7681 
7682      IF g_bookkeeping_type = 'G'  THEN
7683            IF l_cnt > 0 THEN
7684          --     FND_FILE.PUT_LINE(FND_FILE.LOG,'There exists '||l_cnt||' journals which are posted in Summary Mode');
7685               FND_MESSAGE.SET_NAME('JL','JLBR_SPED_DATA_DETAIL_CHECK');
7686               FND_MESSAGE.SET_TOKEN('SOURCE','Receivables');
7687               FND_MESSAGE.SET_TOKEN('PERIOD',g_period_name);
7688               FND_MESSAGE.SET_TOKEN('BOOKKEEPING_TYPE',g_bookkeeping_type);
7689               FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
7690               FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET);
7691            END IF;
7692      ELSIF g_bookkeeping_type = 'A/R' OR g_bookkeeping_type = 'A/B' OR  g_bookkeeping_type = 'R' OR g_bookkeeping_type = 'B' THEN
7693           IF l_cnt = 0 THEN
7694           --    FND_FILE.PUT_LINE(FND_FILE.LOG,'No journals were posted in Summary Mode');
7695               FND_MESSAGE.SET_NAME('JL','JLBR_SPED_DATA_SUMMARY_CHECK');
7696               FND_MESSAGE.SET_TOKEN('SOURCE','Receivables');
7697               FND_MESSAGE.SET_TOKEN('PERIOD',g_period_name);
7698               FND_MESSAGE.SET_TOKEN('BOOKKEEPING_TYPE',g_bookkeeping_type);
7699               FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
7700               FND_FILE.PUT_LINE(FND_FILE.OUTPUT,FND_MESSAGE.GET);
7701           END IF;
7702      END IF;
7703 
7704      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7705         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
7706                        G_PKG_NAME||': ' ||l_api_name||'(): Validation for Journal''s Posting done ');
7707      END IF;
7708 
7709   BEGIN
7710     l_cnt :=0;
7711 
7712     SELECT  COUNT(*)
7713       INTO  l_cnt
7714       FROM  jl_br_sped_extr_data_t
7715      WHERE  request_id = g_concurrent_request_id
7716        AND  field1 ='I155';
7717 
7718 IF l_cnt >0 THEN  -- Only if I155 registers exists, then check the validation rules related to that register
7719     --Validation rules for I155 register.
7720 
7721 /* validation for REGRA_VALIDACAO_SOMA_SALDO_INICIAL - Verifies if the sum of VL_SLD_INI (Register I155)
7722   is equal to zero for each period reported in the periodic balance register (Register I150)
7723   (It considers the Debit and Credit Indicator). */
7724 
7725    BEGIN
7726 
7727      l_cnt := 0;
7728 
7729 
7730 /*     SELECT  COUNT(*)
7731        INTO  l_cnt
7732        FROM  (SELECT  to_number(field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''') vl_sld_ini
7733                 FROM  JL_BR_SPED_EXTR_DATA_T
7734                WHERE  request_id = g_concurrent_request_id
7735                  AND  field1 = 'I155')
7736       WHERE   vl_sld_ini<> 0; --VL_SLD_INI    */
7737 
7738       SELECT  COUNT(*)
7739         INTO  l_cnt
7740         FROM  JL_BR_SPED_EXTR_DATA_T
7741        WHERE  request_id = g_concurrent_request_id
7742          AND  field1 = 'I155'
7743          AND  field4 <>'0,00';  --vl_sld_ini
7744 
7745 
7746     IF l_cnt > 0 THEN
7747 
7748 
7749        FND_MESSAGE.SET_NAME('JL','JLBR_SPED_SOMA_SALDO_INICIAL');
7750        INSERT INTO jl_br_sped_extr_msgs
7751        (request_id,
7752         block,
7753         register,
7754         field,
7755         message_txt,
7756         validation_rule,
7757         created_by,
7758         creation_date,
7759         last_updated_by,
7760         last_update_date,
7761         last_update_login
7762        )
7763        values (g_concurrent_request_id,
7764                'I',
7765                'I155',
7766                 4,-- 'field4',
7767                 FND_MESSAGE.GET,
7768                'REGRA_VALIDACAO_SOMA_SALDO_INICIAL'
7769                ,g_created_by
7770                ,g_creation_date
7771                ,g_last_updated_by
7772                ,g_last_update_date
7773                ,g_last_update_login );
7774 
7775     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
7776     FND_MESSAGE.SET_NAME('JL','JLBR_SPED_SOMA_SALDO_INICIAL');
7777     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'REGRA_VALIDACAO_SOMA_SALDO_INICIAL : '||FND_MESSAGE.GET);
7778 
7779     END IF;
7780 
7781      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7782         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
7783                        G_PKG_NAME||': ' ||l_api_name||'(): Validation for ''REGRA_VALIDACAO_SOMA_SALDO_INICIAL'' was completed ');
7784      END IF;
7785 
7786    EXCEPTION
7787       WHEN NO_DATA_FOUND THEN
7788          null;
7789       WHEN OTHERS THEN
7790         IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
7791            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR Occurred while validating extract data for ''REGRA_VALIDACAO_SOMA_SALDO_INICIAL'''||SQLERRM);
7792         END IF;
7793    END;
7794 
7795     /*validation for REGRA_VALIDACAO_SOMA_SALDO_FINAL - Verifies if the sum of VL_SLD_FIN (Register I155)
7796       is equal to zero for each period reported in the periodic balance register (Register I150)
7797       (It considers the  Debit and Credit Indicator). */
7798    BEGIN
7799      l_cnt := 0;
7800 
7801 /*     SELECT  COUNT(*)
7802        INTO  l_cnt
7803        FROM  (SELECT  to_number(field8,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''') vl_sld_fin
7804                 FROM  JL_BR_SPED_EXTR_DATA_T
7805                WHERE  request_id = g_concurrent_request_id
7806                  AND  field1 = 'I155')
7807       WHERE   vl_sld_fin<> 0;  */
7808 
7809      SELECT  COUNT(*)
7810        INTO  l_cnt
7811        FROM  JL_BR_SPED_EXTR_DATA_T
7812       WHERE  request_id = g_concurrent_request_id
7813         AND  field1 = 'I155'
7814         AND  field8 <>'0,00';
7815 
7816      IF l_cnt > 0 THEN
7817        FND_MESSAGE.SET_NAME('JL','JLBR_SPED_SOMA_SALDO_FINAL');
7818        INSERT INTO jl_br_sped_extr_msgs
7819        (request_id,
7820         block,
7821         register,
7822         field,
7823         message_txt,
7824         validation_rule,
7825         created_by,
7826         creation_date,
7827         last_updated_by,
7828         last_update_date,
7829         last_update_login
7830        )
7831        values (g_concurrent_request_id,
7832                'I',
7833                'I155',
7834                8,--'field8',
7835                FND_MESSAGE.GET,
7836                'REGRA_VALIDACAO_SOMA_SALDO_FINAL'
7837                ,g_created_by
7838                ,g_creation_date
7839                ,g_last_updated_by
7840                ,g_last_update_date
7841                ,g_last_update_login );
7842 
7843       FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
7844       FND_MESSAGE.SET_NAME('JL','JLBR_SPED_SOMA_SALDO_FINAL');
7845       FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'REGRA_VALIDACAO_SOMA_SALDO_FINAL : '||FND_MESSAGE.GET);
7846     END IF;
7847     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7848         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
7849                        G_PKG_NAME||': ' ||l_api_name||'(): Validation for ''REGRA_VALIDACAO_SOMA_SALDO_FINAL'' was completed ');
7850      END IF;
7851 
7852    EXCEPTION
7853       WHEN NO_DATA_FOUND THEN
7854          null;
7855       WHEN OTHERS THEN
7856         IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
7857            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR Occurred while validating extract data for ''REGRA_VALIDACAO_SOMA_SALDO_FINAL'''||SQLERRM);
7858         END IF;
7859    END;
7860 
7861 
7862     /* validation for REGRA_VALIDACAO_DEB_DIF_CRED - Verifies if the sum of VL_DEB (Register I155) is equal
7863     to the sum of VL_CRED (Register I155) for each period reported in the periodic balance register
7864    (Register I150).*/
7865 
7866    BEGIN
7867      l_cnt := 0;
7868 
7869 
7870 /*     SELECT  COUNT(*)
7871        INTO  l_cnt
7872        FROM  (SELECT  to_number(field6,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''') vl_deb,
7873                       to_number(field7,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''') vl_cred
7874                 FROM  JL_BR_SPED_EXTR_DATA_T
7875                WHERE  request_id = g_concurrent_request_id
7876                  AND  field1 = 'I155')
7877       WHERE   vl_deb <> vl_cred;  */
7878 
7879 
7880      SELECT  COUNT(*)
7881        INTO  l_cnt
7882        FROM  JL_BR_SPED_EXTR_DATA_T
7883       WHERE  request_id = g_concurrent_request_id
7884         AND  field1 = 'I155'
7885         AND  field6 <> field7;
7886 
7887     IF l_cnt > 0 THEN
7888        FND_MESSAGE.SET_NAME('JL','JLBR_SPED_DEB_DIF_CRED');
7889        INSERT INTO jl_br_sped_extr_msgs
7890        (request_id,
7891         block,
7892         register,
7893         field,
7894         message_txt,
7895         validation_rule,
7896         created_by,
7897         creation_date,
7898         last_updated_by,
7899         last_update_date,
7900         last_update_login
7901        )
7902        values (g_concurrent_request_id,
7903                'I',
7904                'I155',
7905                6,--'field6',
7906                FND_MESSAGE.GET,
7907                'REGRA_VALIDACAO_DEB_DIF_CRED'
7908                ,g_created_by
7909                ,g_creation_date
7910                ,g_last_updated_by
7911                ,g_last_update_date
7912                ,g_last_update_login );
7913     END IF;
7914 
7915     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7916         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
7917                        G_PKG_NAME||': ' ||l_api_name||'(): Validation for ''REGRA_VALIDACAO_DEB_DIF_CRED'' was completed ');
7918      END IF;
7919 
7920     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
7921     FND_MESSAGE.SET_NAME('JL','JLBR_SPED_DEB_DIF_CRED');
7922     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'REGRA_VALIDACAO_DEB_DIF_CRED : '||FND_MESSAGE.GET);
7923 
7924    EXCEPTION
7925       WHEN NO_DATA_FOUND THEN
7926          null;
7927       WHEN OTHERS THEN
7928         IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
7929            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR Occurred while validating extract data for ''REGRA_VALIDACAO_DEB_DIF_CRED'''||SQLERRM);
7930         END IF;
7931    END;
7932 
7933 END IF;  --End for check on number of records existance for I155 register.
7934 END;
7935 
7936    /* Validation for REGRA_VALIDACAO_VALOR_DEB*/
7937    /*journals total debits (month, account and cost center)  should equal to monthly balance from gl_balances */
7938   IF g_bookkeeping_type <> 'B' THEN
7939 
7940   BEGIN
7941 
7942    l_cnt := 0;
7943 
7944      select count(*) into l_cnt
7945  from (
7946    SELECT
7947           I250.field2,I250.field3,I155.field2,I155.field3
7948           ,SUM(to_number(I250.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))
7949           , MIN(to_number(I155.field6,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))
7950      FROM  JL_BR_SPED_EXTR_DATA_T I155,
7951            JL_BR_SPED_EXTR_DATA_T I250
7952     WHERE  I155.request_id = g_concurrent_request_id
7953       AND  I155.field1 = 'I155'
7954       AND  I250.request_id = g_concurrent_request_id
7955       AND  I250.field1 = 'I250'
7956       AND  I155.field2 = I250.field2 -- Natural Account
7957       AND  I155.field3 = I250.field3 -- Cost Center
7958       AND  I250.field5 = 'D'  --Debit
7959       GROUP BY I250.field2,I250.field3,I155.field2,I155.field3
7960       HAVING SUM(to_number(I250.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) <>
7961              MIN(to_number(I155.field6,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) -- sum(jounral debit lines) <> Balances debit amount
7962      );
7963 
7964     IF l_cnt > 0 THEN
7965        FND_MESSAGE.SET_NAME('JL','JLBR_SPED_VALOR_DEB');
7966        INSERT INTO jl_br_sped_extr_msgs
7967        (request_id,
7968         block,
7969         register,
7970         field,
7971         message_txt,
7972         validation_rule,
7973         created_by,
7974         creation_date,
7975         last_updated_by,
7976         last_update_date,
7977         last_update_login
7978        )
7979        values (g_concurrent_request_id,
7980                'I',
7981                'I155',
7982                 6,--'field6',
7983                 FND_MESSAGE.GET,
7984                'REGRA_VALIDACAO_VALOR_DEB'
7985                ,g_created_by
7986                ,g_creation_date
7987                ,g_last_updated_by
7988                ,g_last_update_date
7989                ,g_last_update_login );
7990 
7991        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
7992        FND_MESSAGE.SET_NAME('JL','JLBR_SPED_VALOR_DEB');
7993        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'REGRA_VALIDACAO_VALOR_DEB : '||FND_MESSAGE.GET);
7994        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'COD_CTA     COD_CCUS');
7995        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'-------     --------');
7996        FOR rec IN valor_deb_cur
7997        LOOP
7998           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,rec.field2||'     '||rec.field3);
7999        END LOOP;
8000 
8001     END IF;
8002     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8003         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
8004                        G_PKG_NAME||': ' ||l_api_name||'(): Validation for ''REGRA_VALIDACAO_VALOR_DEB'' was completed ');
8005      END IF;
8006 
8007    EXCEPTION
8008       WHEN NO_DATA_FOUND THEN
8009          null;
8010       WHEN OTHERS THEN
8011         IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
8012            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR Occurred while validating extract data for ''REGRA_VALIDACAO_VALOR_DEB'''||SQLERRM);
8013         END IF;
8014    END;
8015     /* validation for REGRA_VALIDACAO_VALOR_CRED*/
8016     /*journals total credits (month, account and cost center) should equal to monthly balance from gl_balances */
8017 
8018   BEGIN
8019     l_cnt := 0;
8020 
8021     select count(*) into l_cnt
8022  from (
8023    SELECT
8024           I250.field2,I250.field3,I155.field2,I155.field3
8025           ,SUM(to_number(I250.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))
8026           , MIN(to_number(I155.field6,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''))
8027      FROM  JL_BR_SPED_EXTR_DATA_T I155,
8028            JL_BR_SPED_EXTR_DATA_T I250
8029     WHERE  I155.request_id = g_concurrent_request_id
8030       AND  I155.field1 = 'I155'
8031       AND  I250.request_id = g_concurrent_request_id
8032       AND  I250.field1 = 'I250'
8033       AND  I155.field2 = I250.field2 -- Natural Account
8034       AND  I155.field3 = I250.field3 -- Cost Center
8035       AND  I250.field5 = 'C'  --Debit
8036       GROUP BY I250.field2,I250.field3,I155.field2,I155.field3
8037       HAVING SUM(to_number(I250.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) <>
8038              MIN(to_number(I155.field6,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) -- sum(jounral debit lines) <> Balances debit amount
8039      );
8040 
8041 
8042       IF l_cnt > 0 THEN
8043           FND_MESSAGE.SET_NAME('JL','JLBR_SPED_VALOR_CRED');
8044           INSERT INTO jl_br_sped_extr_msgs
8045           (request_id,
8046            block,
8047            register,
8048            field,
8049            message_txt,
8050            validation_rule,
8051            created_by,
8052            creation_date,
8053            last_updated_by,
8054            last_update_date,
8055            last_update_login
8056           )
8057           values (g_concurrent_request_id,
8058                   'I',
8059                   'I155',
8060                    6,--'field6',
8061                    FND_MESSAGE.GET,
8062                    'REGRA_VALIDACAO_VALOR_CRED'
8063                   ,g_created_by
8064                   ,g_creation_date
8065                   ,g_last_updated_by
8066                   ,g_last_update_date
8067                   ,g_last_update_login );
8068        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
8069        FND_MESSAGE.SET_NAME('JL','JLBR_SPED_VALOR_CRED');
8070        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'REGRA_VALIDACAO_VALOR_CRED : '||FND_MESSAGE.GET);
8071        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'COD_CTA     COD_CCUS');
8072        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'-------     --------');
8073        FOR rec IN valor_cred_cur
8074        LOOP
8075           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,rec.field2||'     '||rec.field3);
8076        END LOOP;
8077 
8078        END IF;
8079 
8080     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8081         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
8082                        G_PKG_NAME||': ' ||l_api_name||'(): Validation for ''REGRA_VALIDACAO_VALOR_CRED'' was completed ');
8083      END IF;
8084    EXCEPTION
8085       WHEN NO_DATA_FOUND THEN
8086          null;
8087       WHEN OTHERS THEN
8088         IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
8089            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR Occurred while validating extract data fpr ''REGRA_VALIDACAO_VALOR_CRED'''||SQLERRM);
8090         END IF;
8091    END;
8092 
8093 
8094   IF g_bookkeeping_type <> 'A/R' AND g_bookkeeping_type <> 'A/B' THEN
8095      /* validation rule for REGRA_VALIDACAO_VL_LCTO_DEB */
8096      /* total debit  for a journal header (from journal lines) should match running_total_accounted_dr
8097         of that journal header    */
8098 
8099     BEGIN
8100       l_cnt := 0;
8101 
8102       SELECT  count(I250.field6)  -- Journal Name
8103         INTO  l_cnt
8104         FROM  JL_BR_SPED_EXTR_DATA_T I200,
8105               JL_BR_SPED_EXTR_DATA_T I250
8106        WHERE  I200.request_id = g_concurrent_request_id
8107          AND  I200.field1 = 'I200'
8108          AND  I250.request_id = g_concurrent_request_id
8109          AND  I250.field1 = 'I250'
8110          AND  I200.field2 = I250.field6 -- Jounral Name || BATCH ID
8111          AND  I250.field5 = 'D'  --Debit
8112     GROUP BY  I250.field6
8113       HAVING  SUM(to_number(I250.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) <>
8114               MIN(to_number(I200.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''));
8115 
8116     IF l_cnt >0 THEN
8117           FND_MESSAGE.SET_NAME('JL','JLBR_SPED_VL_LCTO_DEB');
8118           INSERT INTO jl_br_sped_extr_msgs
8119           (request_id,
8120            block,
8121            register,
8122            field,
8123            message_txt,
8124            validation_rule,
8125            created_by,
8126            creation_date,
8127            last_updated_by,
8128            last_update_date,
8129            last_update_login
8130           )
8131           values (g_concurrent_request_id,
8132                   'I',
8133                   'I200',
8134                    2,--'field2',
8135                     FND_MESSAGE.GET,
8136                   'REGRA_VALIDACAO_VL_LCTO_DEB'
8137                   ,g_created_by
8138                   ,g_creation_date
8139                   ,g_last_updated_by
8140                   ,g_last_update_date
8141                   ,g_last_update_login );
8142 
8143        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
8144        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'REGRA_VALIDACAO_VL_LCTO_DEB : '||FND_MESSAGE.GET);
8145        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'JOURNAL NAME - BATCH ID');
8146        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'-----------------------');
8147        FOR rec IN vl_lcto_deb_cur
8148        LOOP
8149           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,rec.field6);
8150        END LOOP;
8151     END IF;
8152 
8153     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8154         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
8155                        G_PKG_NAME||': ' ||l_api_name||'(): Validation for ''REGRA_VALIDACAO_VL_LCTO_DEB'' was completed ');
8156      END IF;
8157 
8158    EXCEPTION
8159       WHEN NO_DATA_FOUND THEN
8160          null;
8161       WHEN OTHERS THEN
8162         IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
8163            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR Occurred while validating extract data for ''REGRA_VALIDACAO_VL_LCTO_DEB'''||SQLERRM);
8164         END IF;
8165    END;
8166        /* validation for REGRA_VALIDACAO_VL_LCTO_CRED */
8167 
8168      /* total credit  for a journal header (from journal lines) should match running_total_accounted_dr
8169         of that journal header     */
8170 
8171    BEGIN
8172       l_cnt := 0 ;
8173 
8174       SELECT  COUNT(I250.field6)-- Journal Name
8175         INTO  l_cnt
8176         FROM  JL_BR_SPED_EXTR_DATA_T I200,
8177               JL_BR_SPED_EXTR_DATA_T I250
8178        WHERE  I200.request_id = g_concurrent_request_id
8179          AND  I200.field1 = 'I200'
8180          AND  I250.request_id = g_concurrent_request_id
8181          AND  I250.field1 = 'I250'
8182          AND  I200.field2 = I250.field6 -- Jounral Name || BATCH ID
8183          AND  I250.field5 = 'C'  --Credit
8184     GROUP BY  I250.field6
8185       HAVING  sum(to_number(I250.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''')) <>
8186               min(to_number(I200.field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.'''));
8187 
8188    IF l_cnt <>0 THEN
8189           FND_MESSAGE.SET_NAME('JL','JLBR_SPED_VL_LCTO_CRED');
8190           INSERT INTO jl_br_sped_extr_msgs
8191           (request_id,
8192            block,
8193            register,
8194            field,
8195            message_txt,
8196            validation_rule,
8197            created_by,
8198            creation_date,
8199            last_updated_by,
8200            last_update_date,
8201            last_update_login
8202           )
8203           values (g_concurrent_request_id,
8204                   'I',
8205                   'I200',
8206                    2,--'field2',
8207                    FND_MESSAGE.GET,
8208                    'REGRA_VALIDACAO_VL_LCTO_CRED'
8209                    ,g_created_by
8210                    ,g_creation_date
8211                    ,g_last_updated_by
8212                    ,g_last_update_date
8213                    ,g_last_update_login );
8214 
8215        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
8216        FND_MESSAGE.SET_NAME('JL','JLBR_SPED_VL_LCTO_CRED');
8217        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'REGRA_VALIDACAO_VL_LCTO_CRED : '||FND_MESSAGE.GET);
8218        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'JOURNAL NAME - BATCH ID');
8219        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'-----------------------');
8220        FOR rec IN vl_lcto_deb_cur
8221        LOOP
8222           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,rec.field6);
8223        END LOOP;
8224 
8225        END IF;
8226 
8227        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8228         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
8229                        G_PKG_NAME||': ' ||l_api_name||'(): Validation for ''REGRA_VALIDACAO_VL_LCTO_CRED'' was completed ');
8230        END IF;
8231 
8232    EXCEPTION
8233       WHEN NO_DATA_FOUND THEN
8234          null;
8235       WHEN OTHERS THEN
8236         IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
8237            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR Occurred while validating extract data fpr ''REGRA_VALIDACAO_VL_LCTO_CRED'''||SQLERRM);
8238         END IF;
8239    END;
8240   END IF;  --END IF for g_bookkeeping_type logic
8241  END IF;   --END FOR IF g_bookkeeping_type <> 'B' THEN
8242 
8243   IF g_bookkeeping_type = 'B' THEN
8244   /* validation for REGRA_VALIDACAO_DC_BALANCETE */
8245     /*
8246     There should not be any I310 register record whose credit <> debit.
8247     I.e. credit and debit should match for each effective date
8248   */
8249   BEGIN
8250     l_cnt := 0;
8251 
8252     SELECT  COUNT(*)
8253       INTO  l_cnt
8254       FROM  JL_BR_SPED_EXTR_DATA_T
8255      WHERE  request_id = g_concurrent_request_id
8256        AND  field1 = 'I310';
8257 
8258     IF l_cnt >0 THEN
8259 
8260 /*        SELECT  COUNT(*)
8261           INTO  l_cnt
8262           FROM  (SELECT  to_number(field4,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''') deb,
8263                          to_number(field5,'99999999999999990D00','NLS_NUMERIC_CHARACTERS = '',.''') cred
8264                    FROM  JL_BR_SPED_EXTR_DATA_T
8265                   WHERE  request_id = g_concurrent_request_id
8266                     AND  field1 = 'I310')
8267          WHERE   deb <> cred;    */
8268 
8269         SELECT  COUNT(*)
8270           INTO  l_cnt
8271           FROM  JL_BR_SPED_EXTR_DATA_T
8272          WHERE  request_id = g_concurrent_request_id
8273            AND  field1 = 'I310'
8274            AND  field4 <> field5;
8275 
8276          IF l_cnt <> 0 THEN
8277              FND_MESSAGE.SET_NAME('JL','JLBR_SPED_DC_BALANCETE');
8278              INSERT INTO jl_br_sped_extr_msgs
8279              (request_id,
8280               block,
8281               register,
8282               field,
8283               message_txt,
8284               validation_rule,
8285               created_by,
8286               creation_date,
8287               last_updated_by,
8288               last_update_date,
8289               last_update_login
8290               )
8291               values (g_concurrent_request_id,
8292                      'I',
8293                      'I310',
8294                      4,--'field4',
8295                      FND_MESSAGE.GET,
8296                      'REGRA_VALIDACAO_DC_BALANCETE'
8297                      ,g_created_by
8298                      ,g_creation_date
8299                      ,g_last_updated_by
8300                      ,g_last_update_date
8301                      ,g_last_update_login );
8302           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
8303           FND_MESSAGE.SET_NAME('JL','JLBR_SPED_DC_BALANCETE');
8304           FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'REGRA_VALIDACAO_DC_BALANCETE : '||FND_MESSAGE.GET);
8305 
8306 	END IF;
8307 
8308         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8309            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
8310                        G_PKG_NAME||': ' ||l_api_name||'(): Validation for ''REGRA_VALIDACAO_DC_BALANCETE'' was completed ');
8311         END IF;
8312     END IF;
8313     EXCEPTION
8314       WHEN NO_DATA_FOUND THEN
8315          null;
8316       WHEN OTHERS THEN
8317         IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
8318            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR Occurred while validating extract data fpr ''REGRA_VALIDACAO_DC_BALANCETE'''||SQLERRM);
8319         END IF;
8320    END;
8321  END IF;  -- END FOR IF g_bookkeeping_type = 'B' THEN
8322 
8323     /* Validation for REGRA_OBRIGATORIO_ASSIN_CONTADOR  */
8324     /*It is mandatory the existence of at least one register J930
8325       whose COD_ASSIN is equal to 900 (accountant) and
8326      at least one register J930 whose COD_ASSIN is different than 900 */
8327 
8328     BEGIN
8329           l_cnt := 0;
8330 
8331           SELECT  COUNT(*)
8332             INTO  l_cnt
8333             FROM  jl_br_sped_extr_data_t
8334            WHERE  field1 = 'J930'
8335              AND  field5 = '900';
8336 
8337           IF  l_cnt < 1 THEN
8338 
8339            FND_MESSAGE.SET_NAME('JL','JLBR_SPED_ASSIN_CONTADOR');
8340 
8341            INSERT INTO jl_br_sped_extr_msgs
8342            (request_id,
8343             block,
8344             register,
8345             field,
8346             message_txt,
8347             validation_rule,
8348             created_by,
8349             creation_date,
8350             last_updated_by,
8351             last_update_date,
8352             last_update_login
8353            )
8354            VALUES (g_concurrent_request_id,
8355                    'J',
8356                    'J930',
8357                     5,--'field5',
8358                     FND_MESSAGE.GET,
8359                    'REGRA_OBRIGATORIO_ASSIN_CONTADOR'
8360                    ,g_created_by
8361                    ,g_creation_date
8362                    ,g_last_updated_by
8363                    ,g_last_update_date
8364                    ,g_last_update_login );
8365     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
8366     FND_MESSAGE.SET_NAME('JL','JLBR_SPED_ASSIN_CONTADOR');
8367     FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'REGRA_OBRIGATORIO_ASSIN_CONTADOR : '||FND_MESSAGE.GET);
8368 
8369      END IF;
8370 
8371      l_cnt := 0;
8372 
8373      SELECT  COUNT(*)
8374        INTO  l_cnt
8375        FROM  jl_br_sped_extr_data_t
8376       WHERE  field1 = 'J930'
8377         AND  field5 <> '900';
8378 
8379       IF  l_cnt < 1 THEN
8380 
8381           FND_MESSAGE.SET_NAME('JL','JLBR_SPED_ASSIN_CONTADOR');
8382           INSERT INTO jl_br_sped_extr_msgs
8383           (request_id,
8384            block,
8385            register,
8386            field,
8387            message_txt,
8388            validation_rule,
8389            created_by,
8390            creation_date,
8391            last_updated_by,
8392            last_update_date,
8393            last_update_login
8394           )
8395           values (g_concurrent_request_id,
8396                   'J',
8397                   'J930',
8398                   5,--'field5',
8399                   FND_MESSAGE.GET,
8400                   'REGRA_OBRIGATORIO_ASSIN_CONTADOR'
8401                   ,g_created_by
8402                   ,g_creation_date
8403                   ,g_last_updated_by
8404                   ,g_last_update_date
8405                   ,g_last_update_login );
8406 
8407       FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ');
8408       FND_MESSAGE.SET_NAME('JL','JLBR_SPED_ASSIN_CONTADOR');
8409       FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'REGRA_OBRIGATORIO_ASSIN_CONTADOR : '||FND_MESSAGE.GET);
8410       END IF;
8411 
8412     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8413         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
8414                        G_PKG_NAME||': ' ||l_api_name||'(): Validation for ''REGRA_OBRIGATORIO_ASSIN_CONTADOR'' was completed ');
8415     END IF;
8416 
8417   EXCEPTION
8418       WHEN NO_DATA_FOUND THEN
8419          null;
8420       WHEN OTHERS THEN
8421         IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
8422            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'ERROR Occurred while validating extract data fpr ''REGRA_OBRIGATORIO_ASSIN_CONTADOR'''||SQLERRM);
8423         END IF;
8424   END;   /* End for Validation for REGRA_OBRIGATORIO_ASSIN_CONTADOR  */
8425 
8426   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8427          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
8428 		     G_PKG_NAME||': '||l_api_name||'()-');
8429   END IF;
8430 
8431 END validation_after_extract;
8432 
8433 
8434 PROCEDURE  purge_data(p_request_id NUMBER DEFAULT NULL) AS
8435 l_request_id      NUMBER;
8436 l_api_name        CONSTANT VARCHAR2(30) := 'purge_data';
8437 BEGIN
8438    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8439        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',
8440          G_PKG_NAME||': '||l_api_name||'()+');
8441    END IF;
8442 
8443    BEGIN
8444 
8445     IF p_request_id IS NULL THEN
8446 
8447        SELECT  request_id
8448          INTO  l_request_id
8449          FROM  jl_br_sped_extr_param
8450         WHERE  legal_entity_id    =  g_legal_entity_id
8451           AND  bookkeeping_type   =  g_bookkeeping_type
8452           AND  estb_acct_type     =  g_accounting_type
8453           AND  ((g_establishment_id IS NULL AND establishment_id is NULL) OR
8454 	        (establishment_id   =  g_establishment_id  AND g_establishment_id IS NOT NULL))
8455           AND  period_name        =  g_period_name
8456           AND  request_id         <> g_concurrent_request_id
8457           AND  data_exist         =  'Y';
8458 
8459     ELSE
8460         l_request_id := p_request_id;
8461     END IF;
8462     EXCEPTION
8463        WHEN  NO_DATA_FOUND THEN
8464              l_request_id := 0;
8465        WHEN  OTHERS THEN
8466              IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
8467                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
8468                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'LE: '||g_legal_entity_id);
8469                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Book keeping type: '||g_bookkeeping_type||'ESTB'||g_establishment_id);
8470                   FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Period: '||g_period_name);
8471              END IF;
8472              --l_request_id := 0;
8473              g_errbuf := 'Error in finding the request_id to purge the data ';
8474              g_retcode := 2;
8475              return;
8476      END;
8477 
8478      IF l_request_id <> 0 THEN
8479 
8480      --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Purging data of request_id:' || l_request_id);
8481 
8482         DELETE        --purging the data as user running the extract prg for the combination which is already existing in temp table
8483           FROM jl_br_sped_extr_data_t
8484          WHERE request_id = l_request_id;
8485 
8486         UPDATE  jl_br_sped_extr_param
8487            SET  data_exist = 'N'
8488          WHERE  request_id = l_request_id;
8489 
8490      END IF;
8491 
8492    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8493        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
8494          G_PKG_NAME||': '||l_api_name||'()-');
8495    END IF;
8496 END  purge_data;
8497 
8498 
8499 PROCEDURE  main ( errbuf                          OUT NOCOPY VARCHAR2,
8500                   retcode                         OUT NOCOPY NUMBER,
8501                   p_accounting_type               VARCHAR2,
8502                   p_legal_entity_id               XLE_ENTITY_PROFILES.LEGAL_ENTITY_ID%TYPE,
8503                   p_chart_of_accounts_id          GL_SETS_OF_BOOKS.chart_of_accounts_id%TYPE,
8504 		  p_ledger_id                     GL_SETS_OF_BOOKS.SET_OF_BOOKS_ID%TYPE,
8505                   p_establishment_id              XLE_ETB_PROFILES.ESTABLISHMENT_ID%TYPE,
8506                   p_is_special_situation          VARCHAR2,
8507                   p_is_special_situation_dummy          VARCHAR2,
8508                   p_is_special_situation_dummy1          VARCHAR2,
8509 		  p_period_type                   VARCHAR2,
8510   		  p_period_type_dummy             VARCHAR2,
8511                   p_period_type_dummy1             VARCHAR2,
8512                   p_period_name                   GL_PERIOD_STATUSES.PERIOD_NAME%TYPE,
8513                   p_adjustment_period_name        GL_PERIOD_STATUSES.PERIOD_NAME%TYPE,
8514                   p_special_situation_indicator   VARCHAR2,
8515 		  p_start_date                    VARCHAR2,
8516                   p_end_date                      VARCHAR2,
8517                   p_bookkeeping_type              VARCHAR2,
8518                   p_bookkeeping_type_dummy        VARCHAR2,
8519                   p_bookkeeping_type_dummy1       VARCHAR2,
8520                   p_bookkeeping_type_dummy2       VARCHAR2,
8521                   p_participant_type              JL_BR_SPED_PARTIC_CODES.PARTICIPANT_TYPE%TYPE,
8522                   p_participant_type_dummy        JL_BR_SPED_PARTIC_CODES.PARTICIPANT_TYPE%TYPE,
8523                   p_accounting_segment_type       VARCHAR2,
8524                   p_coa_mapping_id                VARCHAR2,
8525                   p_balance_statement_request_id   fnd_concurrent_requests.request_id%TYPE,
8526                   p_income_statement_request_id    fnd_concurrent_requests.request_id%TYPE,
8527                   p_agglutination_code_source     VARCHAR2,
8528                   p_journal_for_rtf               NUMBER,
8529                   p_acct_stmt_ident               VARCHAR2,
8530                   p_acct_stmt_ident_dummy         VARCHAR2,
8531                   p_acct_stmt_header              VARCHAR2,
8532                   p_hash_code                     VARCHAR2, -- auxillary book
8533                   p_inscription_source            VARCHAR2,
8534                   p_inscription_source_dummy      VARCHAR2,
8535                   p_inscription_source_dummy1     VARCHAR2,
8536 		  p_le_state_reg_code             VARCHAR2,
8537 		  p_le_municipal_reg_code          VARCHAR2,
8538 		  p_state_tax_id                  NUMBER,
8539 		  p_ebtax_state_reg_code          VARCHAR2,
8540 		  p_municipal_reg_tax_id           NUMBER,
8541 		  p_ebtax_municipal_reg_code       VARCHAR2,
8542                   p_revert_negative_journals     VARCHAR2,
8543 		  p_gen_sped_text_file            VARCHAR2) AS
8544 
8545 l_api_name        CONSTANT VARCHAR2(30) := 'main';
8546 l_request_id      NUMBER;
8547 l_return          BOOLEAN;
8548 l_phase           varchar2(30);
8549 l_status          varchar2(30);
8550 l_dev_phase       varchar2(30);
8551 l_dev_stage       varchar2(30);
8552 l_message         varchar2(100);
8553 printable_chars   varchar2(99);
8554 non_printable_chars varchar2(35):='|';
8555 l_cnt              NUMBER;
8556 l_sequence_value   NUMBER;
8557 /*CURSOR msg_cur IS SELECT message_txt,validation_rule
8558                     FROM jl_br_sped_extr_msgs
8559                    WHERE request_id = g_concurrent_request_id  ;*/
8560 
8561 CURSOR  accts_with_invalid_jrl_amounts  IS
8562 SELECT  field2 natural_acct
8563   FROM  jl_br_sped_extr_data_t
8564  WHERE  request_id = g_concurrent_request_id
8565    AND  field4 like '%####%'
8566    AND  field1='I250';
8567 
8568 BEGIN
8569 
8570    FND_FILE.PUT_LINE(FND_FILE.LOG,'Parameter values:');
8571    FND_FILE.PUT_LINE(FND_FILE.LOG,'-------------------------------------------------------------');
8572    FND_FILE.PUT_LINE(FND_FILE.LOG,'Ledger Id   :'||p_ledger_id);
8573    FND_FILE.PUT_LINE(FND_FILE.LOG,'Chart Of Accounts Id :'||p_chart_of_accounts_id);
8574    FND_FILE.PUT_LINE(FND_FILE.LOG,'Establishment Accounting Type:'||p_accounting_type);
8575    FND_FILE.PUT_LINE(FND_FILE.LOG,'Legal Entity Id  :'||p_legal_entity_id);
8576    FND_FILE.PUT_LINE(FND_FILE.LOG,'Establishment Id :'||p_establishment_id);
8577    FND_FILE.PUT_LINE(FND_FILE.LOG,'Is Special Situation :'||p_is_special_situation);
8578    FND_FILE.PUT_LINE(FND_FILE.LOG,'Period Name :'||p_period_name);
8579    FND_FILE.PUT_LINE(FND_FILE.LOG,'Period Type :'||p_period_type);
8580    FND_FILE.PUT_LINE(FND_FILE.LOG,'01 - Regular Period, 02- Closing Period With Adjustment Period');
8581    FND_FILE.PUT_LINE(FND_FILE.LOG,'Adjustment Period :'||p_adjustment_period_name);
8582    FND_FILE.PUT_LINE(FND_FILE.LOG,'Special Situation Indicator :'||p_special_situation_indicator);
8583    FND_FILE.PUT_LINE(FND_FILE.LOG,'Period Start Date :'||p_start_date);
8584    FND_FILE.PUT_LINE(FND_FILE.LOG,'Period End Date   :'||p_end_date);
8585    FND_FILE.PUT_LINE(FND_FILE.LOG,'Book Keeping Type :'||p_bookkeeping_type);
8586    FND_FILE.PUT_LINE(FND_FILE.LOG,'Participant Type :'||p_participant_type);
8587    FND_FILE.PUT_LINE(FND_FILE.LOG,'Accounting Segment :'||p_accounting_segment_type);
8588    FND_FILE.PUT_LINE(FND_FILE.LOG,'Referential Chart Of Accounts Mapping :'||p_coa_mapping_id);
8589    FND_FILE.PUT_LINE(FND_FILE.LOG,'Balance Sheet Report Name :'||p_balance_statement_request_id);
8590    FND_FILE.PUT_LINE(FND_FILE.LOG,'Income Statement Report Name :'||p_income_statement_request_id);
8591    FND_FILE.PUT_LINE(FND_FILE.LOG,'Agglutination Code Source :'||p_agglutination_code_source);
8592    FND_FILE.PUT_LINE(FND_FILE.LOG,'Journal Source for RTF File :'||p_journal_for_rtf);
8593    FND_FILE.PUT_LINE(FND_FILE.LOG,'Hash Code :'||p_hash_code);
8594    FND_FILE.PUT_LINE(FND_FILE.LOG,'Accounting Statements Indication :'||p_acct_stmt_ident);
8595    FND_FILE.PUT_LINE(FND_FILE.LOG,'Accounting Statements Header :'||p_acct_stmt_header);
8596    FND_FILE.PUT_LINE(FND_FILE.LOG,'Generate SPED Text File :'||p_gen_sped_text_file);
8597    FND_FILE.PUT_LINE(FND_FILE.LOG,'State And Munciple Inscription Source :'||p_inscription_source);
8598    FND_FILE.PUT_LINE(FND_FILE.LOG,'Lookup Type for LE State Inscription	 :'||p_le_state_reg_code);
8599    FND_FILE.PUT_LINE(FND_FILE.LOG,'Lookup Type for LE Munciple Inscription :'||p_le_municipal_reg_code);
8600    FND_FILE.PUT_LINE(FND_FILE.LOG,'Tax Used to define State Inscription  :'||p_state_tax_id);
8601    FND_FILE.PUT_LINE(FND_FILE.LOG,'Lookup Type for EBTax State Inscription :'||p_ebtax_state_reg_code);
8602    FND_FILE.PUT_LINE(FND_FILE.LOG,'Tax Used to define Munciple Inscription :'||p_municipal_reg_tax_id);
8603    FND_FILE.PUT_LINE(FND_FILE.LOG,'Lookup Type for EBTax Munciple Inscription :'||p_ebtax_municipal_reg_code);
8604 
8605 
8606    FND_FILE.PUT_LINE(FND_FILE.LOG,'--------Parameters End-----------------------------------------');
8607 
8608 
8609 
8610    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling Initialize proc');
8611 
8612     Initialize (p_ledger_id,
8613                 p_chart_of_accounts_id,
8614                 p_accounting_type,
8615 		p_legal_entity_id,
8616 		p_establishment_id,
8617                 p_is_special_situation,
8618 		p_period_type,
8619 		p_period_name,
8620 	        p_adjustment_period_name,
8621                 p_start_date,
8622                 p_end_date,
8623                 p_special_situation_indicator,
8624                 p_bookkeeping_type,
8625                 p_participant_type,
8626                 p_accounting_segment_type,
8627                 p_coa_mapping_id,
8628                 p_balance_statement_request_id,
8629                 p_agglutination_code_source,
8630                 p_income_statement_request_id,
8631                 p_journal_for_rtf,
8632                 p_hash_code,
8633                 p_acct_stmt_ident,
8634                 p_acct_stmt_header,
8635                 p_gen_sped_text_file,
8636      		p_inscription_source,
8637      	        p_le_state_reg_code,
8638      		p_le_municipal_reg_code,
8639      		p_state_tax_id,
8640      		p_ebtax_state_reg_code,
8641      		p_municipal_reg_tax_id,
8642      		p_ebtax_municipal_reg_code
8643      );
8644 
8645     IF g_retcode = 2 THEN
8646      errbuf := g_errbuf;
8647      retcode := 2;
8648      return;
8649     END IF;
8650 
8651    FND_FILE.PUT_LINE(FND_FILE.LOG,'End of Initialize proc' );
8652  --  FND_FILE.PUT_LINE(FND_FILE.LOG,'Calling validation_before_extract proc' );
8653 
8654    validation_before_extract;
8655 
8656     IF g_retcode = 2 THEN
8657      errbuf := g_errbuf;
8658      retcode := 2;
8659      return;
8660     END IF;
8661 
8662   --  FND_FILE.PUT_LINE(FND_FILE.LOG,'END Of validation_before_extract proc' );
8663 
8664 --Start Block 0
8665  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_0000 proc');
8666      register_0000;
8667      IF g_retcode = 2 THEN
8668       errbuf := g_errbuf;
8669       retcode := 2;
8670       return;
8671      END IF;
8672  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_0001 proc');
8673      register_0001;
8674      IF g_retcode = 2 THEN
8675       errbuf := g_errbuf;
8676       retcode := 2;
8677       return;
8678      END IF;
8679   --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_0007 proc');
8680      register_0007;
8681      IF g_retcode = 2 THEN
8682       errbuf := g_errbuf;
8683       retcode := 2;
8684       return;
8685      END IF;
8686  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_0020 proc');
8687      register_0020;
8688      IF g_retcode = 2 THEN
8689       errbuf := g_errbuf;
8690       retcode := 2;
8691       return;
8692      END IF;
8693   --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_0150_0180 proc');
8694      register_0150_0180;
8695      IF g_retcode = 2 THEN
8696       errbuf := g_errbuf;
8697       retcode := 2;
8698       return;
8699      END IF;
8700   --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_0990 proc');
8701      register_0990;
8702      IF g_retcode = 2 THEN
8703       errbuf := g_errbuf;
8704       retcode := 2;
8705       return;
8706      END IF;
8707 
8708 --Start Block I
8709 
8710   --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I001 proc');
8711      register_I001;
8712      IF g_retcode = 2 THEN
8713       errbuf := g_errbuf;
8714       retcode := 2;
8715       return;
8716      END IF;
8717 
8718    --  FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I010 proc');
8719      register_I010;
8720      IF g_retcode = 2 THEN
8721       errbuf := g_errbuf;
8722       retcode := 2;
8723       return;
8724      END IF;
8725 
8726   --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I012 proc');
8727      register_I012;
8728      IF g_retcode = 2 THEN
8729       errbuf := g_errbuf;
8730       retcode := 2;
8731       return;
8732      END IF;
8733 
8734   --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I015 proc');
8735      register_I015;
8736      IF g_retcode = 2 THEN
8737       errbuf := g_errbuf;
8738       retcode := 2;
8739       return;
8740      END IF;
8741 
8742 --- custom code hook call for register I015
8743 
8744      IF  substrb(g_bookkeeping_type,1,1) <> 'G' THEN
8745 
8746         SELECT jl_br_sped_extr_data_t_s.CURRVAL INTO l_sequence_value
8747 	FROM DUAL;
8748 
8749 --      FND_FILE.PUT_LINE(FND_FILE.LOG,'Calling code hook, which populates I015 for Integrated Receiving system');
8750 --	FND_FILE.PUT_LINE(FND_FILE.LOG,'Code Hook Starting Sequence Value :'||l_sequence_value);
8751 
8752 	 IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8753 	      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME, 'Start of Code Hook register_I015');
8754          END IF;
8755 	 IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8756 	      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME, 'Code Hook register_I105 : Starting Sequence Value :'||l_sequence_value);
8757          END IF;
8758 
8759 
8760 	 JL_BR_SPED_DATA_EXTRACT_PUB.register_I015( g_retcode
8761                                                     ,g_errbuf
8762                                                     ,g_ledger_id
8763                                                     ,g_legal_entity_id
8764                                                     ,g_establishment_id
8765                                                     ,g_period_set_name
8766                                                     ,g_start_date
8767                                                     ,g_end_date
8768                                                     ,g_bsv_segment
8769                                                     ,g_account_segment
8770                                                     ,g_cost_center_segment          --can be null if the customer doesn't have the cost center setup.
8771                                                     ,g_bookkeeping_type
8772                                                     ,g_concurrent_request_id);
8773 
8774         SELECT jl_br_sped_extr_data_t_s.CURRVAL INTO l_sequence_value
8775 	FROM DUAL;
8776 
8777 --	FND_FILE.PUT_LINE(FND_FILE.LOG,'Code Hook Ending Sequence Value :'||l_sequence_value);
8778 	IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8779 	      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME, 'Code Hook register_I105 : Ending Sequence Value :'||l_sequence_value);
8780          END IF;
8781 
8782         IF g_retcode = 2 THEN
8783            FND_FILE.PUT_LINE(FND_FILE.LOG,'Error occurred in Custom package JL_BR_SPED_DATA_EXTRACT_PUB.register_I015');
8784            errbuf := g_errbuf;
8785            retcode :=2;
8786            RETURN;
8787          END IF;
8788      END IF;
8789 
8790  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I030 proc');
8791      register_I030;
8792      IF g_retcode = 2 THEN
8793       errbuf := g_errbuf;
8794       retcode := 2;
8795       return;
8796      END IF;
8797  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I050 proc');
8798 
8799      FND_FILE.PUT_LINE(FND_FILE.LOG,'before I050:'||to_char(sysdate,'DD-MON-YYYY HH:MI:SS'));
8800      register_I050;
8801      IF g_retcode = 2 THEN
8802       errbuf := g_errbuf;
8803       retcode := 2;
8804       return;
8805      END IF;
8806  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I100 proc');
8807 
8808       FND_FILE.PUT_LINE(FND_FILE.LOG,'before I100:'||to_char(sysdate,'DD-MON-YYYY HH:MI:SS'));
8809      register_I100;
8810      IF g_retcode = 2 THEN
8811       errbuf := g_errbuf;
8812       retcode := 2;
8813       return;
8814      END IF;
8815  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I150 proc');
8816       FND_FILE.PUT_LINE(FND_FILE.LOG,'before I150:'||to_char(sysdate,'DD-MON-YYYY HH:MI:SS'));
8817      register_I150;
8818      IF g_retcode = 2 THEN
8819       errbuf := g_errbuf;
8820       retcode := 2;
8821       return;
8822      END IF;
8823 
8824      IF  substrb(g_bookkeeping_type,1,1) = 'B' THEN    -- I151 register is required only for bookkeeping type 'B'
8825 
8826         FND_FILE.PUT_LINE(FND_FILE.LOG,'before I151:'||to_char(sysdate,'DD-MON-YYYY HH:MI:SS'));
8827         register_I151;
8828         IF g_retcode = 2 THEN
8829            errbuf := g_errbuf;
8830            retcode := 2;
8831            return;
8832         END IF;
8833 
8834      END IF;
8835  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I155 proc');
8836       FND_FILE.PUT_LINE(FND_FILE.LOG,'before I155:'||to_char(sysdate,'DD-MON-YYYY HH:MI:SS'));
8837      register_I155;
8838      IF g_retcode = 2 THEN
8839       errbuf := g_errbuf;
8840       retcode := 2;
8841       return;
8842      END IF;
8843  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I200 proc');
8844       FND_FILE.PUT_LINE(FND_FILE.LOG,'before I200:'||to_char(sysdate,'DD-MON-YYYY HH:MI:SS'));
8845      register_I200;
8846      IF g_retcode = 2 THEN
8847       errbuf := g_errbuf;
8848       retcode := 2;
8849       return;
8850      END IF;
8851 
8852 -- custom code hook call for register I200 and I250
8853 
8854      IF  substrb(g_bookkeeping_type,1,1) <> 'B' THEN
8855 
8856         SELECT jl_br_sped_extr_data_t_s.CURRVAL INTO l_sequence_value
8857 	FROM DUAL;
8858 
8859 --      FND_FILE.PUT_LINE(FND_FILE.LOG,'Calling code hook, which populates I200 and I250 for Integrated Receiving system');
8860 --	FND_FILE.PUT_LINE(FND_FILE.LOG,'Code Hook Starting Sequence Value :'||l_sequence_value);
8861 
8862 	 IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8863 	      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME, 'Start of Code Hook register_I200_I250');
8864          END IF;
8865 	 IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8866 	      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME, 'Code Hook register_I200_I250 Starting Sequence Value :'||l_sequence_value);
8867          END IF;
8868 
8869 
8870 	 JL_BR_SPED_DATA_EXTRACT_PUB.register_I200_I250( g_retcode
8871                                                          ,g_errbuf
8872 						         ,g_ledger_id
8873                                                          ,g_legal_entity_id
8874                                                          ,g_establishment_id
8875                                                          ,g_period_set_name
8876                                                          ,g_start_date
8877                                                          ,g_end_date
8878                                                          ,g_bsv_segment
8879                                                          ,g_account_segment
8880                                                          ,g_cost_center_segment          --can be null if the customer doesn't have the cost center setup.
8881                                                          ,g_bookkeeping_type
8882                                                          ,g_concurrent_request_id);
8883 
8884         SELECT jl_br_sped_extr_data_t_s.CURRVAL INTO l_sequence_value
8885 	FROM DUAL;
8886 
8887 --	FND_FILE.PUT_LINE(FND_FILE.LOG,'Code Hook Ending Sequence Value :'||l_sequence_value);
8888 	IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8889 	      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME, 'Code Hook register_I200_I250 Ending  Sequence Value :'||l_sequence_value);
8890          END IF;
8891 
8892         IF g_retcode = 2 THEN
8893            FND_FILE.PUT_LINE(FND_FILE.LOG,'Error occurred in Custom package JL_BR_SPED_DATA_EXTRACT_PUB.register_I200_I250');
8894            errbuf := g_errbuf;
8895            retcode :=2;
8896            RETURN;
8897          END IF;
8898      END IF;
8899 
8900 
8901  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I300_I310 proc');
8902       FND_FILE.PUT_LINE(FND_FILE.LOG,'before I300_I310:'||to_char(sysdate,'DD-MON-YYYY HH:MI:SS'));
8903      register_I300_I310;
8904      IF g_retcode = 2 THEN
8905       errbuf := g_errbuf;
8906       retcode := 2;
8907       return;
8908      END IF;
8909  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I350 proc');
8910       FND_FILE.PUT_LINE(FND_FILE.LOG,'before I350:'||to_char(sysdate,'DD-MON-YYYY HH:MI:SS'));
8911      register_I350;
8912      IF g_retcode = 2 THEN
8913       errbuf := g_errbuf;
8914       retcode := 2;
8915       return;
8916      END IF;
8917  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I355 proc');
8918       FND_FILE.PUT_LINE(FND_FILE.LOG,'before I355:'||to_char(sysdate,'DD-MON-YYYY HH:MI:SS'));
8919      register_I355;
8920      IF g_retcode = 2 THEN
8921       errbuf := g_errbuf;
8922       retcode := 2;
8923       return;
8924      END IF;
8925  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_I990 proc');
8926      register_I990;
8927      IF g_retcode = 2 THEN
8928       errbuf := g_errbuf;
8929       retcode := 2;
8930       return;
8931      END IF;
8932  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_J001 proc');
8933      register_J001;
8934      IF g_retcode = 2 THEN
8935       errbuf := g_errbuf;
8936       retcode := 2;
8937       return;
8938      END IF;
8939  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_J001 proc');
8940      register_J005;
8941      IF g_retcode = 2 THEN
8942       errbuf := g_errbuf;
8943       retcode := 2;
8944       return;
8945      END IF;
8946      IF  substr(g_bookkeeping_type,1,1) <> 'A' AND g_bookkeeping_type <> 'Z' THEN
8947 
8948        IF g_balance_statement_request_id IS NOT NULL OR g_income_statement_request_id IS NOT NULL THEN
8949            --Submit concurrent request which call the JCP to populate J100 and J150 registers.
8950            l_request_id := fnd_request.submit_request ('JL',
8951                                                        'JLBRASFS',
8952                                                        '',
8953                                                        '',
8954                                                        FALSE,
8955                                                        g_concurrent_request_id,        --arguement1
8956                                                        g_balance_statement_request_id, --arguement2
8957                                                        g_income_statement_request_id,-- Income statement Request Id
8958                                                        'Y' -- Debug flag
8959                                                        );
8960 
8961 
8962    --    FND_FILE.PUT_LINE(FND_FILE.LOG,'Request Id: '|| l_request_id);
8963          commit;
8964             --wait till the request completed.
8965        l_return  := FND_CONCURRENT.WAIT_FOR_REQUEST(    l_request_id,
8966                                                         1,                    --interval (no of secs to wait to check the status)
8967                                                         60,                   --max_wait
8968                                                         l_phase,        --  phase      OUT varchar2,
8969                                                         l_status,        -- status     OUT varchar2,
8970                                                         l_dev_phase,     -- dev_phase OUT varchar2,
8971                                                         l_dev_stage,     --dev_status OUT varchar2,
8972                                                         l_message);       --message    OUT varchar2)
8973 
8974 
8975 /* Amount column in both J100 and J150 is a required field. So we shouldn't display
8976    the FSG records with the amount as not null. so Delete those records */
8977 
8978     IF l_return  THEN
8979   --      FND_FILE.PUT_LINE(FND_FILE.LOG,  'Return Status: True');
8980    --     FND_FILE.PUT_LINE(FND_FILE.LOG, 'l_status: '||l_status);
8981 
8982 	IF l_status = 'Error' THEN  --If FSG concurrent program ended in error then error out the data extract progam
8983            errbuf := 'Brazilian Accounting SPED Financial Statements Data Extraction Program Ended in Error.';
8984            retcode := 2;
8985            purge_data(g_concurrent_request_id);
8986 	   commit;
8987            return;
8988         END IF;
8989 
8990         BEGIN
8991              SELECT count(*)
8992                INTO l_cnt
8993                FROM jl_br_sped_extr_data_t
8994               WHERE request_id = g_concurrent_request_id
8995                 AND field1 = 'J100';
8996 
8997         --     FND_FILE.PUT_LINE(FND_FILE.LOG,'cnt of rows from FSG for bal: '||l_cnt);
8998 
8999         EXCEPTION
9000          WHEN NO_DATA_FOUND THEN
9001              FND_FILE.PUT_LINE(FND_FILE.LOG,'No records found');
9002         END;
9003 
9004          DELETE  FROM  jl_br_sped_extr_data_t
9005 	           WHERE  field1 ='J100'
9006 	             AND  request_id = g_concurrent_request_id
9007 	             AND  field6 is null;
9008 
9009             DELETE  FROM  jl_br_sped_extr_data_t
9010 	           WHERE  field1 ='J150'
9011 	             AND  request_id = g_concurrent_request_id
9012 	             AND  field5 is null;
9013 
9014         BEGIN
9015              SELECT count(*)
9016                INTO l_cnt
9017                FROM jl_br_sped_extr_data_t
9018               WHERE request_id = g_concurrent_request_id
9019                 AND field1 = 'J100';
9020 
9021        --      FND_FILE.PUT_LINE(FND_FILE.LOG,'cnt of rows from FSG for bal: '||l_cnt);
9022 
9023         EXCEPTION
9024          WHEN NO_DATA_FOUND THEN
9025              FND_FILE.PUT_LINE(FND_FILE.LOG,'No records found');
9026         END;
9027 
9028          IF g_balance_statement_request_id IS NOT NULL THEN
9029        --     FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_J100 proc');
9030             register_J100;
9031             IF g_retcode = 2 THEN
9032                errbuf := g_errbuf;
9033                retcode := 2;
9034                purge_data(g_concurrent_request_id);
9035 	       commit;
9036                return;
9037             END IF;
9038          END IF;
9039          IF g_income_statement_request_id IS NOT NULL THEN
9040        --     FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_J150 proc');
9041             register_J150;
9042             IF g_retcode = 2 THEN
9043                errbuf := g_errbuf;
9044                retcode := 2;
9045                purge_data(g_concurrent_request_id);
9046 	       commit;
9047                return;
9048             END IF;
9049          END IF;
9050 
9051     --  ELSE
9052       --  FND_FILE.PUT_LINE(FND_FILE.LOG , 'Return Status: False');
9053       END IF;
9054 
9055        END IF;  -- End for check on FSG request Ids.
9056 
9057      END IF; -- End for check on book_keeping_type.
9058 
9059   --   FND_FILE.PUT_LINE(FND_FILE.LOG,'End Of FSG registers');
9060 
9061  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_J800 proc');
9062      register_J800;
9063      IF g_retcode = 2 THEN
9064       errbuf := g_errbuf;
9065       retcode := 2;
9066       purge_data(g_concurrent_request_id);
9067       commit;
9068       return;
9069      END IF;
9070  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_J900 proc');
9071      register_J900;
9072      IF g_retcode = 2 THEN
9073       errbuf := g_errbuf;
9074       retcode := 2;
9075       purge_data(g_concurrent_request_id);
9076       commit;
9077       return;
9078      END IF;
9079  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_J930 proc');
9080      register_J930;
9081      IF g_retcode = 2 THEN
9082       errbuf := g_errbuf;
9083       retcode := 2;
9084       purge_data(g_concurrent_request_id);
9085       commit;
9086       return;
9087      END IF;
9088   --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_J990 proc');
9089      register_J990;
9090      IF g_retcode = 2 THEN
9091         errbuf := g_errbuf;
9092         retcode := 2;
9093         purge_data(g_concurrent_request_id);
9094 	commit;
9095         return;
9096      END IF;
9097   --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_9001 proc');
9098      register_9001;
9099      IF g_retcode = 2 THEN
9100         errbuf := g_errbuf;
9101         retcode := 2;
9102         purge_data(g_concurrent_request_id);
9103 	commit;
9104         return;
9105      END IF;
9106   --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_9900 proc');
9107      register_9900;
9108      IF g_retcode = 2 THEN
9109         errbuf := g_errbuf;
9110         retcode := 2;
9111         purge_data(g_concurrent_request_id);
9112 	commit;
9113         return;
9114      END IF;
9115  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_9990 proc');
9116      register_9990;
9117      IF g_retcode = 2 THEN
9118         errbuf := g_errbuf;
9119         retcode := 2;
9120         purge_data(g_concurrent_request_id);
9121 	commit;
9122         return;
9123      END IF;
9124   --   FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling register_9999 proc');
9125      register_9999;
9126      IF g_retcode = 2 THEN
9127         errbuf := g_errbuf;
9128         retcode := 2;
9129         purge_data(g_concurrent_request_id);
9130 	commit;
9131         return;
9132      END IF;
9133     /* SPED table fields shouldn't contain Non pritable and pipe symbol.
9134        So need to remove non Printable characters. */
9135 
9136      printable_chars      := null;
9137      non_printable_chars  := '|';
9138 
9139      for i in 0 .. 31 loop  --ASCII characters 0 to 31 are non printable characters
9140          non_printable_chars:= non_printable_chars||fnd_global.local_chr(i);
9141      end loop;
9142      for i in 32 .. 123 loop -- printable characters
9143          printable_chars := printable_chars||fnd_global.local_chr(i);
9144      end loop;
9145 
9146      /*ASCII characters 32 to 126 are printable characters. But as we even want to remove pipe,don't include chr(124) */
9147 
9148      printable_chars := printable_chars||fnd_global.local_chr(125)||fnd_global.local_chr(126);
9149 
9150  --   FND_FILE.PUT_LINE(FND_FILE.LOG,'Removing non printable characters');
9151 
9152      UPDATE  jl_br_sped_extr_data_t
9153         SET  field2  = translate(field2, printable_chars|| non_printable_chars, printable_chars),
9154              field3  = translate(field3, printable_chars|| non_printable_chars, printable_chars),
9155              field4  = translate(field4, printable_chars|| non_printable_chars, printable_chars),
9156              field5  = translate(field5, printable_chars|| non_printable_chars, printable_chars),
9157              field6  = translate(field6, printable_chars|| non_printable_chars, printable_chars),
9158              field7  = translate(field7, printable_chars|| non_printable_chars, printable_chars),
9159              field8  = translate(field8, printable_chars|| non_printable_chars, printable_chars),
9160              field9  = translate(field9, printable_chars|| non_printable_chars, printable_chars),
9161              field10 = translate(field10, printable_chars|| non_printable_chars, printable_chars),
9162              field11 = translate(field11, printable_chars|| non_printable_chars, printable_chars),
9163              field12 = translate(field12, printable_chars|| non_printable_chars, printable_chars),
9164              field13 = translate(field13, printable_chars|| non_printable_chars, printable_chars),
9165              field14 = translate(field14, printable_chars|| non_printable_chars, printable_chars),
9166              field15 = translate(field15, printable_chars|| non_printable_chars, printable_chars)
9167       WHERE  request_id = g_concurrent_request_id;
9168 
9169       IF g_bookkeeping_type <> 'B' AND p_revert_negative_journals = 'Y' THEN
9170       --  FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling revert_negative_journals proc');
9171          revert_negative_journals;
9172       END IF;
9173 
9174  --  FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling update_register_cnt proc');
9175        update_register_cnt;
9176 
9177 
9178 
9179  --    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Calling validation_after_extract proc');
9180      validation_after_extract;
9181      IF g_retcode = 2 THEN
9182         errbuf := g_errbuf;
9183         retcode := 2;
9184         purge_data(g_concurrent_request_id);
9185 	commit;
9186         return;
9187      END IF;
9188 
9189  --    FND_FILE.PUT_LINE(FND_FILE.LOG,'Calling purge_data proc');
9190      purge_data;
9191      IF g_retcode = 2 THEN
9192         errbuf := g_errbuf;
9193         retcode := 2;
9194         purge_data(g_concurrent_request_id);
9195 	commit;
9196         return;
9197      END IF;
9198 
9199 
9200     BEGIN
9201     FND_FILE.PUT_LINE(FND_FILE.LOG,'');
9202        FOR accts_rec in  accts_with_invalid_jrl_amounts LOOP
9203 
9204             FND_MESSAGE.SET_NAME('JL','JL_BR_SPED_INVALID_AMOUNTS');
9205             FND_MESSAGE.SET_TOKEN('COD_CTA',accts_rec.natural_acct);
9206             FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MESSAGE.GET);
9207 
9208        END LOOP;
9209 
9210     EXCEPTION
9211       WHEN OTHERS THEN
9212          IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
9213                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
9214                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,'Error While displaying the accounts that has one or more journal entries with more than 19 digits');
9215               END IF;
9216     END;
9217 
9218 
9219       UPDATE  JL_BR_SPED_EXTR_PARAM    -- After successfull data extraction, updating the data_exist column in Parameter's table.
9220         SET  data_exist = 'Y'
9221       WHERE  request_id = g_concurrent_request_id;
9222 
9223 
9224       IF p_gen_sped_text_file = 'Y' THEN
9225      /* p_gen_sped_text_file is a parameter which indicates whether to generate text file
9226         or not. So if the paramter value is 'Y' then submit request for text file generation program. */
9227 
9228       l_request_id := fnd_request.submit_request ('JL',
9229                                     'JLBRASTF',
9230                                     '',
9231                                     '',
9232                                     FALSE,
9233                                   --  g_ledger_id,
9234                                     g_concurrent_request_id, -- request Id of data extract program
9235                                     'P' -- preliminary mode
9236                                    );
9237 
9238  --    FND_FILE.PUT_LINE(FND_FILE.LOG,'Request Id: '|| l_request_id);
9239 
9240        END IF;  -- End for check on p_gen_sped_text_file.
9241      RETURN;
9242 
9243 END main;
9244 
9245 END JL_BR_SPED_DATA_EXTRACT_PKG;
9246