Skip to content

Instantly share code, notes, and snippets.

@dncrht
Last active July 6, 2016 09:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dncrht/81d54c59986b95808fef5aee397dd54f to your computer and use it in GitHub Desktop.
Save dncrht/81d54c59986b95808fef5aee397dd54f to your computer and use it in GitHub Desktop.
*************************
IDENTIFICATION DIVISION.
*************************
PROGRAM-ID. PRV34915.
*****************************************************************
* *
* DEPARTAMENTO PRE-VALIDACION DE DECLARACIONES *
* DE DEL MODELO 349. EJERCICIO 2015 *
* INFORMATICA TRIBUTARIA *
* *
* NOMBRE DEL PROGRAMA : PRV34915. *
* OBJETIVO : PRE-VALIDACION SOPORTES *
* TIPO DE PROCESO : BATCH. *
* LENGUAJE : COBOL II *
* VERSION : 1.0 *
*****************************************************************
**********************
ENVIRONMENT DIVISION.
**********************
CONFIGURATION SECTION.
*----------------------
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
*---------------------
FILE-CONTROL.
*-------------
*--ENTRADA--*
SELECT CINTA ASSIGN TO CINTA
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL
FILE STATUS IS ST-CINTA.
*--SALIDA--*
SELECT SALIDA ASSIGN TO SALIDA
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL
FILE STATUS IS ST-SALIDA.
*--LISTADO DE IMPRESION--*
SELECT IMPRE ASSIGN TO IMPRE
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL
FILE STATUS IS ST-IMPRE.
DATA DIVISION.
***************
FILE SECTION.
*-------------
*-- FD PARA PRUEBAS EN DISCO
FD CINTA
LABEL RECORD STANDARD.
01 REG-CINTA.
02 REG-TIPO PIC X(01).
02 FILLER PIC X(499).
*-- FD PARA FICHERO DE SALIDA
FD SALIDA
LABEL RECORD STANDARD.
01 REG-SALIDA.
02 FILLER PIC X(828).
* ---- IMPRESORA DE DETALLE
FD IMPRE
LABEL RECORD OMITTED.
01 LINEA PIC X(132).
*------------------------
WORKING-STORAGE SECTION.
*------------------------
*-------CAMPOS DE TIPO 1-------*
*----------------------------------------------------------------*
* COPY CORRESPONDIENTE AL REGISTRO TIPO 1 DEL MODELO 349 *
* LONGITUD 500 *
*----------------------------------------------------------------*
01 CMOD3491.
02 TIPO1-COMUN.
03 MCMN-1-TIPO PIC X(1).
03 MCMN-1-IDEN.
04 MCMN-1-MOD PIC X(3).
04 MCMN-1-MOD-N REDEFINES MCMN-1-MOD PIC 9(3).
04 MCMN-1-EJER PIC X(4).
04 MCMN-1-EJER-N REDEFINES MCMN-1-EJER PIC 9(4).
04 MCMN-1-NIF PIC X(9).
03 MCMN-1-NOM PIC X(40).
03 MCMN-1-TSOP PIC X.
03 MCMN-1-RELAC.
04 MCMN-1-TFNO PIC X(9).
04 MCMN-1-TFNO-N REDEFINES MCMN-1-TFNO PIC 9(9).
04 MCMN-1-NOMREL PIC X(40).
03 MCMN-1-JUST PIC X(13).
03 MCMN-1-JUST-N REDEFINES MCMN-1-JUST PIC 9(13).
03 MCMN-1-COMPL PIC X.
03 MCMN-1-SUST PIC X.
03 MCMN-1-JUSTANT PIC X(13).
03 MCMN-1-JUSTANT-N REDEFINES MCMN-1-JUSTANT PIC 9(13).
02 TIPO1-349.
03 M349-1-PERIODO PIC X(2).
03 M349-1-TOTOPERA PIC X(9).
03 M349-1-TOTOPERA-N REDEFINES M349-1-TOTOPERA PIC 9(9).
03 M349-1-TOTIMPOPE PIC X(15).
03 M349-1-TOTIMPOPE-N REDEFINES M349-1-TOTIMPOPE PIC 9(15).
03 M349-1-TOTOPEREC PIC X(9).
03 M349-1-TOTOPEREC-N REDEFINES M349-1-TOTOPEREC PIC 9(9).
03 M349-1-TOTIMPRECT PIC X(15).
03 M349-1-TOTIMPRECT-N REDEFINES M349-1-TOTIMPRECT
PIC 9(15).
03 M349-1-INDPERIO PIC X.
02 M349-1-FILLER1 PIC X(204).
02 M349-1-NIFRPTE PIC X(9).
02 M349-1-FILLER2 PIC X(88).
02 M349-1-SELLO PIC X(13).
*-------CAMPOS DE TIPO 2-------*
*----------------------------------------------------------------*
* COPY CORRESPONDIENTE AL REGISTRO TIPO 2 DEL MODELO 349 *
* LONGITUD 500 *
*----------------------------------------------------------------*
01 CMOD3492.
03 M349-2-TIPO PIC 9(1).
03 M349-2-IDEN.
04 M349-2-MOD PIC X(3).
04 M349-2-MOD-N REDEFINES M349-2-MOD PIC 9(3).
04 M349-2-EJER PIC X(4).
04 M349-2-EJER-N REDEFINES M349-2-EJER PIC 9(4).
04 M349-2-NIF PIC X(9).
03 M349-2-FILLER PIC X(58).
03 M349-2-NIFOPERADOR.
04 M349-2-CODPAIS PIC X(2).
04 M349-2-NIFOPERA PIC X(15).
04 M349-2-NIFOPERA-N REDEFINES M349-2-NIFOPERA PIC 9(15).
03 M349-2-NOMPART PIC X(40).
03 M349-2-CLOPERAC PIC X(1).
03 M349-2-BIMPONI PIC X(13).
03 M349-2-BIMPONI-N REDEFINES M349-2-BIMPONI PIC 9(13).
03 M349-2-EJERCI PIC X(4).
03 M349-2-EJERCI-N REDEFINES M349-2-EJERCI PIC 9(4).
03 M349-2-PERIODO PIC X(2).
03 M349-2-BIRECT PIC X(13).
03 M349-2-BIRECT-N REDEFINES M349-2-BIRECT PIC 9(13).
03 M349-2-BIDECL PIC X(13).
03 M349-2-BIDECL-N REDEFINES M349-2-BIDECL PIC 9(13).
03 M349-2-FILLER PIC X(322).
01 WCMOD3492.
03 W-M349-2-TIPO PIC 9(1).
03 W-M349-2-IDEN.
04 W-M349-2-MOD PIC X(3).
04 W-M349-2-MOD-N REDEFINES W-M349-2-MOD PIC 9(3).
04 W-M349-2-EJER PIC X(4).
04 W-M349-2-EJER-N REDEFINES W-M349-2-EJER PIC 9(4).
04 W-M349-2-NIF PIC X(9).
03 W-M349-2-FILLER PIC X(58).
03 W-M349-2-NIFOPERADOR.
04 W-M349-2-CODPAIS PIC X(2).
04 W-M349-2-NIFOPERA PIC X(15).
04 W-M349-2-NIFOPERA-N REDEFINES
W-M349-2-NIFOPERA PIC 9(15).
03 W-M349-2-NOMPART PIC X(40).
03 W-M349-2-CLOPERAC PIC X(1).
03 W-M349-2-BIMPONI PIC X(13).
03 W-M349-2-BIMPONI-N REDEFINES W-M349-2-BIMPONI
PIC 9(13).
03 W-M349-2-EJERCI PIC X(4).
03 W-M349-2-EJERCI-N REDEFINES W-M349-2-EJERCI PIC 9(4).
03 W-M349-2-PERIODO PIC X(2).
03 W-M349-2-BIRECT PIC X(13).
03 W-M349-2-BIRECT-N REDEFINES W-M349-2-BIRECT PIC 9(13).
03 W-M349-2-BIDECL PIC X(13).
03 W-M349-2-BIDECL-N REDEFINES W-M349-2-BIDECL PIC 9(13).
03 W-M349-2-FILLER PIC X(322).
*-------REPLICA DE CAMPOS DE TIPO 1 PARA AUTOCORRECCION-------*
01 WCMOD3491.
*----CAMPOS COMUNES A TODOS LOS TIPOS 1----*
02 W-MCMN-1-TIPO PIC X(1).
02 W-MCMN-1-IDEN.
03 W-MCMN-1-MOD PIC X(3).
03 W-MCMN-1-MOD-N REDEFINES W-MCMN-1-MOD PIC 9(3).
03 W-MCMN-1-EJER PIC X(4).
03 W-MCMN-1-EJER-N REDEFINES W-MCMN-1-EJER PIC 9(4).
03 W-MCMN-1-NIF PIC X(9).
02 W-MCMN-1-NOM PIC X(40).
02 W-MCMN-1-TSOP PIC X.
02 W-MCMN-1-RELAC.
03 W-MCMN-1-TFNO PIC X(9).
03 W-MCMN-1-TFNO-N REDEFINES W-MCMN-1-TFNO PIC 9(9).
03 W-MCMN-1-NOMREL PIC X(40).
02 W-MCMN-1-JUST PIC X(13).
02 W-MCMN-1-JUST-N REDEFINES W-MCMN-1-JUST PIC 9(13).
02 W-MCMN-1-COMPL PIC X.
02 W-MCMN-1-SUST PIC X.
02 W-MCMN-1-JUSTANT PIC X(13).
02 W-MCMN-1-JUSTANT-N REDEFINES W-MCMN-1-JUSTANT PIC 9(13).
*----CAMPOS PARTICULARES DEL MODELO 349----*
02 W-M349-1-PERIODO PIC X(2).
02 W-M349-1-TOTOPERA PIC X(9).
02 W-M349-1-TOTOPERA-N REDEFINES W-M349-1-TOTOPERA PIC 9(9).
02 W-M349-1-TOTIMPOPE PIC X(15).
02 W-M349-1-TOTIMPOPE-N REDEFINES
W-M349-1-TOTIMPOPE PIC 9(15).
02 W-M349-1-TOTOPEREC PIC X(9).
02 W-M349-1-TOTOPEREC-N REDEFINES
W-M349-1-TOTOPEREC PIC 9(9).
02 W-M349-1-TOTIMPRECT PIC X(15).
02 W-M349-1-TOTIMPRECT-N REDEFINES
W-M349-1-TOTIMPRECT PIC 9(15).
02 W-M349-1-INDPERIO PIC X.
02 W-M349-1-FILLER PIC X(204).
02 W-M349-1-NIFRPTE PIC X(9).
02 W-M349-1-FILLER PIC X(88).
02 W-M349-1-SELLO PIC X(13).
*-----TABLAS DE ERRORES PROPIOS / INDICES USADOS / SWITCHES-----*
01 SW-YA PIC 9 VALUE 0.
01 SW-RECTIF PIC 9 VALUE 0.
*----PARA VALIDAR TIPO 1----*
01 ERRPROP1.
02 T-ERRPROP1 OCCURS 40.
03 CAMPO1 PIC 99.
03 ERROR1 PIC 99.
01 IEP1 PIC 99 VALUE 0.
*----PARA VALIDAR TIPO 2----*
01 ERRPROP2.
02 T-ERRPROP2 OCCURS 40.
03 CAMPO2 PIC 99.
03 ERROR2 PIC 99.
01 IEP2 PIC 99 VALUE 0.
*----AUXILIAR----*
01 ERRPROP-AUX.
02 T-ERRPROP-AUX OCCURS 40.
03 CAMPO PIC 99.
03 ERROR-X PIC 99.
01 IEP PIC 99 VALUE 0.
*----AUXILIAR-2--*
01 ERRPROP-AUX-2.
02 T-ERRPROP-AUX-2 OCCURS 40.
03 CAMPO-2 PIC 99.
03 ERROR-X-2 PIC 99.
01 IEP-2 PIC 99 VALUE 0.
*----AUXILIAR-TRABAJO----*
01 ERRPROP-TJO.
02 T-ERRPROP-TJO OCCURS 40.
03 CAMPO-TJO PIC 99.
03 ERROR-TJO PIC 99.
*-----TABLAS DE ERRORES ACUMULADOS / INDICES USADOS-----*
01 ERRACUM1.
02 T-ERRACUM1 OCCURS 90.
03 CAMACU1 PIC 99.
03 ERRACU1 PIC 99.
03 CONACU1 PIC 9(8).
01 IEA1 PIC 99 VALUE 0.
01 ERRACUM-IMP.
02 T-ERRACUM-IMP OCCURS 90.
03 CAMACU PIC 99.
03 ERRACU PIC 99.
03 CONACU PIC 9(8).
01 IEA PIC 99 VALUE 0.
01 ERRACUM-AUX.
02 T-ERRACUM-AUX OCCURS 90.
03 CAMACU-X PIC 99.
03 ERRACU-X PIC 99.
03 CONACU-X PIC 9(8).
01 IEAUX PIC 99 VALUE 0.
01 IMP PIC 99 VALUE 0.
*----DEFINICION DE VARIABLES-----*
01 IND-I PIC 9(3) VALUE 0.
01 TIPO-DEC PIC 9(3).
01 PRIMER-TIPO1 PIC XX VALUE 'SI'.
88 ES-PRIMER-TIPO1 VALUE 'SI'.
88 NO-PRIMER-TIPO1 VALUE 'NO'.
*-----INDICADORES-----*
01 SW-SECUENCIA PIC 9 VALUE 0.
01 SW-HAYOPERADOR PIC 9 VALUE 0.
01 SW-COLECTIVO PIC 9 VALUE 0.
01 SW-ENCONTRADO PIC 9 VALUE 0.
01 SW-COMPL PIC 9 VALUE 0.
01 SW-NOERRNIFVAC PIC 9 VALUE 0.
01 SW-REPRE PIC 9 VALUE 0.
01 SW-SUST PIC 9 VALUE 0.
01 SW-ERR07 PIC 9 VALUE 0.
01 SW-ERR06 PIC 9 VALUE 0.
01 SW-ERR10 PIC 9 VALUE 0.
01 SW-HAY09 PIC 9 VALUE 0.
01 SW-D2-TIP PIC 9 VALUE 0.
01 SW-C07T0 PIC 9 VALUE 0.
01 SW-C08T0 PIC 9 VALUE 0.
01 SW-C13T1 PIC 9 VALUE 0.
01 SW-C14T1 PIC 9 VALUE 0.
01 SW-C15T1 PIC 9 VALUE 0.
01 SW-C16T1 PIC 9 VALUE 0.
01 FIN-CINTA PIC 9 VALUE 0.
01 FIN-ERRORES PIC 9 VALUE 0.
01 NO-HAY-MAS PIC 9 VALUE 0.
01 SW-DESMARCADO PIC 9 VALUE 0.
01 SW-PROPAGACION PIC X VALUE SPACES.
*-----CONTADORES------*
01 CONT-LOWVALUES PIC 9(04) COMP VALUE 0.
01 CONTADOR PIC 9(15) VALUE 0.
01 CONTA-TIPO1-ACT PIC 9(15) VALUE 0.
01 CONTA-LINEAS PIC 9(02) VALUE 0.
01 CONTA-PAGINAS PIC 9(06) VALUE 0.
01 CONTA-TIPO1 PIC 9(15) VALUE 0.
01 CONTA-TIPO2 PIC 9(15) VALUE 0.
01 CONTADOR-NORMAL PIC 9(15) VALUE 0.
01 CONT-RECTIF PIC 9(15) VALUE 0.
*-----PARA FECHA DEL SISTEMA-----*
01 WCURRENT-DATE PIC 9(8) VALUE 0.
01 FECHA-EDIT REDEFINES WCURRENT-DATE.
02 FED-ANIO.
03 FED-SIGL PIC 9(2).
03 FED-ANO PIC 9(2).
02 FED-MES PIC 9(2).
02 FED-DIA PIC 9(2).
01 W-AAAA PIC 9(4) VALUE 0.
01 MEDIO PIC 9(4) VALUE 0.
01 FECHA-AAAA PIC 9(4) VALUE 0.
* -- AUXILIARES NIF COMUNITARIO
01 NIF-CEE-I.
02 NIF-CEROS-3I PIC X(03).
02 NIF-RESTO-I PIC X(12).
02 NIF-RESTO-IR REDEFINES NIF-RESTO-I.
04 POS-CEE-I PIC X OCCURS 12.
01 NIF-CEE-V.
02 NIF-CEROS-3V PIC X(03).
02 NIF-RESTO-V PIC X(12).
02 NIF-RESTO-VR REDEFINES NIF-RESTO-V.
04 POS-CEE-V PIC X OCCURS 12.
01 INDICE-NIF PIC 99.
01 INDICE-NIF-2 PIC 99.
*-----AUXILIARES PARA LA VALIDACION DE IMPORTES-----*
01 OPERADORES PIC 9(15) VALUE 0.
01 AUX-IMPOPE PIC 9(15) VALUE 0.
01 AUX-INMUEB PIC 9(15) VALUE 0.
01 AUX-OPERECT PIC S9(15) VALUE 0.
01 AUX-1-TOTIINMUEB PIC S9(15) VALUE 0.
01 AUX-IMPORTE PIC S9(15) VALUE 0.
01 AUX-1 PIC 9(15) VALUE 0.
01 AUX-2 PIC 9(15) VALUE 0.
01 ERROR-ISIN PIC 9 VALUE 0.
01 ERROR-PAIS PIC 9 VALUE 0.
01 SW-PAIS PIC 9 VALUE 0.
01 VER-PAIS PIC 9(3).
*-----REGISTRO DE SALIDA-----*
01 REGISTRO-SALIDA.
02 NUM-REG-SAL PIC 9(08).
02 REG-DECL-SAL PIC X(500).
02 ERRORES-PROPIOS-SAL.
03 T-ERRORES-PROPIOS-SAL OCCURS 40.
04 CAMPO-SAL PIC 99 VALUE 0.
04 ERROR-SAL PIC 99 VALUE 0.
*---OTROS---*
01 EJER-ACTUAL PIC X(4).
01 EJER-ACTUAL-N REDEFINES EJER-ACTUAL PIC 9(4).
01 MODE-ACTUAL PIC X(3).
01 MODE-ACTUAL-N REDEFINES MODE-ACTUAL PIC 9(3).
01 DECIMAL-OPER1 PIC S9(15)V99.
01 DECIMAL-OPER2 PIC S9(15)V99.
01 DECIMAL-OPER3 PIC S9(15)V99.
01 DECIMAL-OPRECT1 PIC S9(15)V99.
01 DECIMAL-OPRECT2 PIC S9(15)V99.
01 DECIMAL-OPRECT3 PIC S9(15)V99.
01 W-C-DIF4 PIC S9(11) VALUE ZEROS.
01 W-C-DIF5 PIC S9(11) VALUE ZEROS.
***************************************************
* CAMPOS PARA LA VALIDACION DEL NIF *
***************************************************
01 PROPIOS-NIF.
02 NUEVE-LETRAS.
03 OCHO-LETRAS PIC X(8).
03 FILLER REDEFINES OCHO-LETRAS.
04 PRIMERA-LETRA PIC X(1).
04 LETRAS-7 PIC X(7).
03 ULTIMA-LETRA PIC X(1).
02 ERROR-NIF PIC 9 VALUE 0.
02 ES-UN-NIF PIC 9 VALUE 0.
02 ES-UN-CIF PIC 9 VALUE 0.
01 PROPIOS-NIF-W.
02 ES-UN-NIF-W PIC 9 VALUE 0.
02 ES-UN-CIF-W PIC 9 VALUE 0.
02 ERROR-NIF-W PIC 9 VALUE 0.
01 CAMPOS-GTUCNIF.
02 TIPO-DNI PIC 9 VALUE 0.
02 TIPO-PER PIC X VALUE SPACES.
02 I01 PIC 99 VALUE 0.
02 I02 PIC 99 VALUE 0.
02 COCIENTE PIC 9(9) VALUE 0.
02 RESTO PIC 99 VALUE 0.
02 IND PIC 99 VALUE 0.
02 SW-CIFRA PIC 9 VALUE 0.
02 GRUPO-F PIC 9 VALUE 0.
02 GRUPO-J PIC 9 VALUE 0.
02 ESTADO PIC X VALUE SPACES.
02 T-IND PIC 99 VALUE ZEROS.
02 TAB01.
03 DNICIF PIC X(9).
02 TAB01R REDEFINES TAB01.
03 ELEM01 PIC X OCCURS 9 TIMES.
02 TAB01R1 REDEFINES TAB01.
03 LETCI PIC X.
03 NUMCI PIC X(7).
03 DCCI PIC X.
02 TAB01R2 REDEFINES TAB01.
03 FILLER PIC X.
03 ELEM01P PIC 9 OCCURS 7.
03 FILLER PIC X.
02 TAB01R3 REDEFINES TAB01.
03 FILLER PIC X.
03 NUMEXT PIC 9(7).
03 FILLER PIC X.
02 TAB01R4 REDEFINES TAB01.
03 FILLER PIC X.
03 NUMEXTA PIC X(8).
02 TAB01R5 REDEFINES TAB01.
03 FILLER PIC X.
03 NUMEXTP PIC 9(8).
02 TAB01R6 REDEFINES TAB01.
03 FILLER PIC X.
03 NUM-REP PIC X(8).
02 TAB01R7 REDEFINES TAB01.
03 NUMEXT-N PIC 9(8).
03 FILLER PIC X.
02 DIGCON-E.
03 DIGCON-EN PIC 9(8).
02 DIGCON-N REDEFINES DIGCON-E.
03 LETEXT-EN PIC 9.
03 NUMEXT-EN PIC 9(7).
02 TAB02.
03 ELEM02 PIC X OCCURS 9 TIMES.
02 TADCCI.
03 FILLER PIC X(20) VALUE '1234567890ABCDEFGHIJ'.
02 TADCCIR REDEFINES TADCCI.
03 TANUM PIC X OCCURS 10 TIMES.
03 TADCL PIC X OCCURS 10 TIMES.
02 TALET.
03 FILLER PIC X(23) VALUE 'TRWAGMYFPDXBNJZSQVHLCKE'.
02 TALETR REDEFINES TALET.
03 LETR PIC X OCCURS 23 TIMES.
02 TACIFRA.
03 CIFRA PIC 9 OCCURS 10 TIMES.
02 CAMPOS-AUX.
03 PRODUCT PIC 99 VALUE 0.
03 SUMATOT PIC 99 VALUE 0.
03 SUMAIMP PIC 99 VALUE 0.
03 SUMAPAR PIC 99 VALUE 0.
03 DCNUM PIC 9 VALUE 0.
03 DCLET PIC X VALUE SPACES.
02 CAMPOS-AUXR REDEFINES CAMPOS-AUX.
03 PROD1 PIC 9.
03 PROD2 PIC 9.
03 SUMT1 PIC 9.
03 SUMT2 PIC 9.
03 FILLER PIC X(6).
02 DNINUM.
03 NUMERO PIC 9(9).
*DATOS DE COMUNICACION
01 COM-GTUCNIF.
02 P1.
03 P1-DNICI PIC X(9).
03 P1-DNICIN PIC X(9).
03 P1-DC PIC X.
03 P1-TIPO PIC X.
03 P1-ESTADO PIC X.
********************FIN CAMPOS VALIDACION NIF********************
****************************************************************
* CAMPOS DE WORKING PARA LA RUTINA DE VALIDACION DE APELLI- *
* DOS Y NOMBRE -- APFINOMB -- *
****************************************************************
01 CAMPOS-APFINOMB.
02 INDI-2 PIC 9(02) VALUE 0.
02 INDICE PIC 9(02) VALUE 0.
02 DESDE PIC 9(02) VALUE 0.
02 BLANCOS PIC 9(02) VALUE 0.
02 CONTA-LETRAS PIC 9(02) VALUE 0.
02 NO-MAS-LETRAS PIC 9(01) VALUE 0.
02 PRIMERA-VEZ PIC 9(01) VALUE 0.
02 APFINOMB-NOM-AUX PIC X(40) VALUE SPACES.
*-- PARA OBTENER EL CODIGO NUMERICO EBCDIC.
02 DESTINO-C PIC 9(3) COMP.
02 FILLER REDEFINES DESTINO-C.
03 DESTINO-1 PIC X(01).
03 DESTINO-2 PIC X(01).
*-- TABLA DE TRABAJO.
02 NOMBRE-T PIC X(40).
02 FILLER REDEFINES NOMBRE-T.
03 TABLA-T OCCURS 40.
04 LETRA-T PIC X(01).
*-- PARA VOLCADO DE INFORMACION
02 APFINOMB-W-CAMPOS-PASO PIC X(90).
*--AREA DE COMUNICACION
01 COM-APFINOMB.
02 APFINOMB-W-CAMPOS-PASO.
03 APFINOMB-CAMPOS-ENTRADA.
04 APFINOMB-NOMBRE-E PIC X(40).
04 FILLER REDEFINES APFINOMB-NOMBRE-E.
05 APFINOMB-TABLA-E OCCURS 40.
06 APFINOMB-LETRA-E PIC X(01).
04 APFINOMB-OPCION-E PIC X(01).
03 APFINOMB-CAMPOS-SALIDA.
04 APFINOMB-NOMBRE-S PIC X(40).
04 FILLER REDEFINES APFINOMB-NOMBRE-S.
05 APFINOMB-TABLA-S OCCURS 40.
06 APFINOMB-LETRA-S PIC X(01).
04 APFINOMB-TRES-LETRAS-S PIC X(03).
04 FILLER REDEFINES APFINOMB-TRES-LETRAS-S.
05 APFINOMB-LETRAS3 OCCURS 3 PIC X(01).
04 APFINOMB-NUMERO-PALABRAS-S PIC 9(02).
04 APFINOMB-RETORNO-S PIC 9(02).
04 APFINOMB-VACIO PIC X(01).
*-- AUXILIARES PARA CONTAR PALABRAS DEL NOMBRE (SI ES UN C.I.)
*-- Y DAR ERROR DE FORMATO
01 CAMPOS-CONTAR-PALABRAS.
02 W-TABLA40 PIC X(40).
02 FILLER REDEFINES W-TABLA40.
03 E-TABLA40 PIC X OCCURS 40.
02 SW-NUMERO PIC 9 VALUE 0.
02 CON-PAL PIC 99 VALUE 0.
02 INDCMN PIC 99 VALUE 0.
02 SW-FORMATO PIC 9 VALUE 0.
**************FIN CAMPOS VALIDACION NOMBRE************************
******************************************************************
**************CAMPOS DE LA RUTINA VICENVAT PARA NIF COMUNITARIO **
*--
77 W-PARRAFO PIC X(40) VALUE SPACES.
77 W-LON-ENTRADA PIC S9(9) COMP.
77 W-LON-PRUEBA PIC S9(9) COMP.
77 W-NUM-CEROS PIC S9(9) COMP.
77 W-CADENA-CEROS PIC X(15) VALUE ALL '0'.
77 W-FILA PIC S9(9) VALUE 0.
77 W-COLUMNA PIC S9(9) VALUE 0.
77 W-IND PIC S9(9) VALUE 0.
*--TABLA DE POSIBLES LONGITUDES DE NVAT SEGUN PAIS--
01 F-TABLA-CODPAIS.
03 FILLER PIC X(28) VALUE 'ATBEBGCYCZDEDKEEELESFIFRGBHR'.
03 FILLER PIC X(28) VALUE 'HUIEITLTLULVMTNLPLPTROSESISK'.
01 W-TABLA-CODPAIS REDEFINES F-TABLA-CODPAIS.
03 W-COD-PAIS PIC X(2) OCCURS 28.
01 F-TABLA-MAXIND.
03 FILLER PIC X(28) VALUE '0101020103010101010101010301'.
03 FILLER PIC X(28) VALUE '0102010201010101010109010101'.
01 W-TABLA-MAXIND REDEFINES F-TABLA-MAXIND.
03 W-MAX-IND PIC 99 OCCURS 28.
01 F-TABLA-LONNVAT.
03 FILLER PIC X(20) VALUE '09999999999999999999'.
03 FILLER PIC X(20) VALUE '10999999999999999999'.
03 FILLER PIC X(20) VALUE '09109999999999999999'.
03 FILLER PIC X(20) VALUE '09999999999999999999'.
03 FILLER PIC X(20) VALUE '08091099999999999999'.
03 FILLER PIC X(20) VALUE '09999999999999999999'.
03 FILLER PIC X(20) VALUE '08999999999999999999'.
03 FILLER PIC X(20) VALUE '09999999999999999999'.
03 FILLER PIC X(20) VALUE '09999999999999999999'.
03 FILLER PIC X(20) VALUE '09999999999999999999'.
03 FILLER PIC X(20) VALUE '08999999999999999999'.
03 FILLER PIC X(20) VALUE '11999999999999999999'.
03 FILLER PIC X(20) VALUE '05091299999999999999'.
03 FILLER PIC X(20) VALUE '11999999999999999999'.
03 FILLER PIC X(20) VALUE '08999999999999999999'.
03 FILLER PIC X(20) VALUE '08099999999999999999'.
03 FILLER PIC X(20) VALUE '11999999999999999999'.
03 FILLER PIC X(20) VALUE '09129999999999999999'.
03 FILLER PIC X(20) VALUE '08999999999999999999'.
03 FILLER PIC X(20) VALUE '11999999999999999999'.
03 FILLER PIC X(20) VALUE '08999999999999999999'.
03 FILLER PIC X(20) VALUE '12999999999999999999'.
03 FILLER PIC X(20) VALUE '10999999999999999999'.
03 FILLER PIC X(20) VALUE '09999999999999999999'.
03 FILLER PIC X(20) VALUE '02030405060708091099'.
03 FILLER PIC X(20) VALUE '12999999999999999999'.
03 FILLER PIC X(20) VALUE '08999999999999999999'.
03 FILLER PIC X(20) VALUE '10999999999999999999'.
01 W-TABLA-LONNVAT REDEFINES F-TABLA-LONNVAT.
03 X-LON-NVAT OCCURS 28.
05 W-LON-NVAT PIC 99 OCCURS 10.
*-------------
*--COMMAREAS--
*-------------
*
01 PARM-OPERCEE PIC X(18).
01 RDAT-OPERCEE REDEFINES PARM-OPERCEE.
03 P-OPE-ERROR PIC S9 COMP-3.
03 P-OPE-PAIS PIC XX.
03 P-OPE-NIVA PIC X(15).
*
01 DATOS-VICENVAT.
02 E-VICENVAT.
04 E-MODO PIC X.
04 E-PAIS PIC X(2).
04 M-NVAT PIC X(15).
04 T-NVAT REDEFINES M-NVAT PIC X OCCURS 15.
02 S-VICENVAT.
04 S-CODIGO-ERROR PIC 9.
04 S-LON-NVAT PIC 99.
*--CAMPOS PARA LA IMPRESION DE LAS HOJAS RESUMEN--*
01 CAMPOS-IMPRESION.
02 C1.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(21) VALUE SPACES.
03 F PIC X(30) VALUE SPACES.
03 F PIC X(30) VALUE 'OPERACIONES INTRACOMUNITARIAS '.
03 F PIC X(26) VALUE SPACES.
03 F PIC X(10) VALUE SPACES.
02 C2.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(07) VALUE 'FECHA: '.
03 C-DIA PIC 9(02).
03 F PIC X VALUE '-'.
03 C-MES PIC 9(02).
03 F PIC X VALUE '-'.
03 C-ANIO PIC 9(04).
03 F PIC X(25) VALUE SPACES.
03 F PIC X(24) VALUE ' MODELO 349 - EJERCICIO '.
03 C-ANIOEJ PIC 9(04).
03 F PIC X(3) VALUE SPACES.
03 F PIC X(07) VALUE 'PERIODO'.
03 F PIC X(02) VALUE spaces.
03 C-PERIODO PIC X(02).
03 F PIC X(31) VALUE SPACES.
03 F PIC X(09) VALUE ' PAGINA: '.
03 C-PAGINA PIC ZZZ.ZZ9.
03 F PIC X(05) VALUE SPACES.
02 C3.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(38) VALUE SPACES.
03 F PIC X(30) VALUE ' PREVALIDACION DE SOPORTES SEG'.
03 F PIC X(30) VALUE 'UN CRITERIOS A.E.A.T. '.
03 F PIC X(33) VALUE SPACES.
02 C4.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(38) VALUE SPACES.
03 F PIC X(30) VALUE ' -----------------------------'.
03 F PIC X(30) VALUE '--------------------- '.
03 F PIC X(33) VALUE SPACES.
02 C5.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(30) VALUE 'DATOS DEL PRESENTADOR (TIPO 0)'.
03 F PIC X(101) VALUE SPACES.
02 C5-BIS.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(30) VALUE 'DATOS DEL DECLARANTE (TIPO 1) '.
03 F PIC X(101) VALUE SPACES.
02 C5-BIS-EURO.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(30) VALUE 'DATOS DEL DECLARANTE (TIPO 1) '.
03 F PIC X(63) VALUE SPACES.
03 F PIC X(08) VALUE ' EUROS'.
03 F PIC X(30) VALUE SPACES.
02 C6.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(07) VALUE ' MODELO'.
03 F PIC X(10) VALUE ' EJERCICIO'.
03 F PIC X(10) VALUE ' N.I.F. '.
03 F PIC X(30) VALUE ' APELLIDOS Y NOMBRE O RAZON '.
03 F PIC X(30) VALUE 'SOCIAL '.
03 F PIC X(43) VALUE SPACES.
02 C6-BIS.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(07) VALUE ' MODELO'.
03 F PIC X(10) VALUE ' EJERCICIO'.
03 F PIC X(10) VALUE ' N.I.F. '.
03 F PIC X(30) VALUE ' APELLIDOS Y NOMBRE O RAZON '.
03 F PIC X(15) VALUE 'SOCIAL '.
03 F PIC X(18) VALUE 'N. IDENTIFICATIVO.'.
03 F PIC X(40) VALUE SPACES.
02 C7.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(07) VALUE ' ------'.
03 F PIC X(10) VALUE ' ---------'.
03 F PIC X(10) VALUE ' -------- '.
03 F PIC X(30) VALUE ' -----------------------------'.
03 F PIC X(30) VALUE '--------- '.
03 F PIC X(43) VALUE SPACES.
02 C7-BIS.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(07) VALUE ' ------'.
03 F PIC X(10) VALUE ' ---------'.
03 F PIC X(10) VALUE ' -------- '.
03 F PIC X(30) VALUE ' -----------------------------'.
03 F PIC X(14) VALUE '--------- '.
03 F PIC X(20) VALUE '--------------------'.
03 F PIC X(39) VALUE SPACES.
02 DET1.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(04) VALUE SPACES.
03 D1-MOD PIC X(03).
03 F PIC X(05) VALUE SPACES.
03 D1-EJER PIC 9(04).
03 F PIC X(03) VALUE SPACES.
03 D1-NIF PIC X(09).
03 F PIC X(01) VALUE SPACES.
03 D1-NOM PIC X(40).
03 F PIC X(62) VALUE SPACES.
02 DET1-BIS.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(04) VALUE SPACES.
03 D1-MOD1 PIC X(03).
03 F PIC X(05) VALUE SPACES.
03 D1-EJER1 PIC 9(04).
03 F PIC X(03) VALUE SPACES.
03 D1-NIF1 PIC X(09).
03 F PIC X(01) VALUE SPACES.
03 D1-NOM1 PIC X(40).
03 F PIC X(06) VALUE SPACES.
03 D1-JUS1 PIC X(13).
03 F PIC X(45) VALUE SPACES.
02 C8.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(47) VALUE SPACES.
03 F PIC X(22) VALUE ' --- DECLARADOS ---- '.
03 F PIC X(24) VALUE ' ----- CALCULADOS ----- '.
03 F PIC X(38) VALUE SPACES.
02 C8-BIS.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(47) VALUE SPACES.
03 F PIC X(22) VALUE ' --- DECLARADOS ---- '.
03 F PIC X(22) VALUE ' --- CALCULADOS ---- '.
03 F PIC X(40) VALUE SPACES.
02 C9.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(47) VALUE SPACES.
03 F PIC X(22) VALUE ' EN REGISTRO TIPO 1 '.
03 F PIC X(20) VALUE ' ACUMULADOS TIPO 2 '.
03 F PIC X(06) VALUE SPACES.
03 F PIC X(24) VALUE ' DIFERENCIAS '.
03 F PIC X(12) VALUE SPACES.
02 C9-BIS.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(47) VALUE SPACES.
03 F PIC X(22) VALUE ' EN REGISTRO TIPO 0 '.
03 F PIC X(24) VALUE ' ACUMULADOS TIPOS 1 Y 2 '.
03 F PIC X(03) VALUE SPACES.
03 F PIC X(20) VALUE ' DIFERENCIAS '.
03 F PIC X(15) VALUE SPACES.
02 C10.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(47) VALUE SPACES.
03 F PIC X(22) VALUE ' ------------------- '.
03 F PIC X(24) VALUE ' ---------------------- '.
03 F PIC X(02) VALUE SPACES.
03 F PIC X(24) VALUE ' --------------------'.
03 F PIC X(12) VALUE SPACES.
02 C10-BIS.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(47) VALUE SPACES.
03 F PIC X(22) VALUE ' ------------------- '.
03 F PIC X(20) VALUE ' -------------------'.
03 F PIC X(06) VALUE SPACES.
03 F PIC X(20) VALUE ' -------------------'.
03 F PIC X(16) VALUE SPACES.
02 C11.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(30) VALUE 'TOTAL DE DECLARANTES .........'.
03 F PIC X(23) VALUE '...............: '.
03 C-NRET0-X PIC X(11).
03 C-NRET0 REDEFINES C-NRET0-X PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(13) VALUE SPACES.
03 C-NRET1 PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(06) VALUE SPACES.
03 C-ERR1 PIC X(01).
03 F PIC X(5) VALUE SPACES.
03 C-DIF1-X PIC X(11).
03 C-DIF1 REDEFINES C-DIF1-X PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(20) VALUE SPACES.
02 C11-BIS.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(30) VALUE 'N TOTAL OPERADORES INTRACOMUN'.
03 F PIC X(26) VALUE 'ITARIOS .......: '.
03 C-RET1-X PIC X(11).
03 C-RET1 REDEFINES C-RET1-X PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(11) VALUE SPACES.
03 C-RET2-X PIC X(11).
03 C-RET2 REDEFINES C-RET2-X PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(03) VALUE SPACES.
03 C-ERR3 PIC X(01).
03 F PIC X(11) VALUE SPACES.
03 C-DIF3-X PIC X(11).
03 C-DIF3 REDEFINES C-DIF3-X PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(16) VALUE SPACES.
02 C12.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(30) VALUE 'TOTAL PERSONAS O ENTIDADES REL'.
03 F PIC X(23) VALUE 'ACIONADAS .....: '.
03 C-NPER0-X PIC X(11).
03 C-NPER0 REDEFINES C-NPER0-X PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(13) VALUE SPACES.
03 C-NPER1 PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(06) VALUE SPACES.
03 C-ERR2 PIC X(01).
03 F PIC X(5) VALUE SPACES.
03 C-DIF2-X PIC X(11).
03 C-DIF2 REDEFINES C-DIF2-X PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(20) VALUE SPACES.
02 C12-EURO.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(30) VALUE 'IMPORTE OPERACIONES INTRACOMUN'.
03 F PIC X(17) VALUE 'ITARIAS .......: '.
03 C-IRET1-X-E PIC X(20).
03 C-IRET1-E REDEFINES C-IRET1-X-E
PIC Z.ZZZ.ZZZ.ZZZ.ZZ9,99.
03 F PIC X(02) VALUE SPACES.
03 C-IRET2-X-E PIC X(20).
03 C-IRET2-E REDEFINES C-IRET2-X-E
PIC Z.ZZZ.ZZZ.ZZZ.ZZ9,99.
03 F PIC X(03) VALUE SPACES.
03 C-ERR4-E PIC X(01).
03 F PIC X(02) VALUE SPACES.
03 C-DIF4-X-E PIC X(20).
03 C-DIF4-E REDEFINES C-DIF4-X-E
PIC Z.ZZZ.ZZZ.ZZZ.ZZ9,99.
03 F PIC X(16) VALUE SPACES.
02 C13-BIS.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(30) VALUE 'TOTAL OPERADORES INTRAC. CON R'.
03 F PIC X(26) VALUE 'ECTIFIC. ......: '.
03 C-INM1-X PIC X(11).
03 C-INM1 REDEFINES C-INM1-X PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(11) VALUE SPACES.
03 C-INM2-X PIC X(11).
03 C-INM2 REDEFINES C-INM2-X PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(03) VALUE SPACES.
03 C-ERR6 PIC X(01).
03 F PIC X(11) VALUE SPACES.
03 C-DIF6-X PIC X(11).
03 C-DIF6 REDEFINES C-DIF6-X PIC ZZZ.ZZZ.ZZ9.
03 F PIC X(16) VALUE SPACES.
02 C13-BIS2-EURO.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(29) VALUE 'IMPORTE DE LAS RECTIFICACIONE'.
03 F PIC X(18) VALUE 'S ..............: '.
03 C-IIINMUEB1-X-E PIC X(20).
03 C-IIINMUEB1-E REDEFINES C-IIINMUEB1-X-E
PIC Z.ZZZ.ZZZ.ZZZ.ZZ9,99.
03 F PIC X(02) VALUE SPACES.
03 C-IIINMUEB2-X-E PIC X(20).
03 C-IIINMUEB2-E REDEFINES C-IIINMUEB2-X-E
PIC Z.ZZZ.ZZZ.ZZZ.ZZ9,99.
03 F PIC X(03) VALUE SPACES.
03 C-ERR5-E PIC X(01).
03 F PIC X(02) VALUE SPACES.
03 C-DIF5-X-E PIC X(20).
03 C-DIF5-E REDEFINES C-DIF5-X-E
PIC Z.ZZZ.ZZZ.ZZZ.ZZ9,99.
03 F PIC X(16) VALUE SPACES.
02 C14.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(09) VALUE SPACES.
03 F PIC X(110) VALUE ALL '-'.
03 F PIC X(12) VALUE SPACES.
02 C15.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(15) VALUE SPACES.
03 F PIC X(30) VALUE ' RESUMEN DE ERRORES DETECTADOS'.
03 F PIC X(30) VALUE ' EN LOS RETENEDORES (TIPOS 1) '.
03 F PIC X(30) VALUE 'Y EN LOS DECLARADOS (TIPOS 2)'.
03 F PIC X(26) VALUE SPACES.
02 C15-BIS.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(26) VALUE SPACES.
03 F PIC X(30) VALUE ' RESUMEN DE ERRORES DETECTADOS'.
03 F PIC X(30) VALUE ' EN LA DECLARACION (TIPOS 1 Y '.
03 F PIC X(03) VALUE '2) '.
03 F PIC X(41) VALUE SPACES.
02 C16.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(11) VALUE SPACES.
03 F PIC X(27) VALUE ' CODIGO ERROR CONTADOR '.
03 F PIC X(12) VALUE SPACES.
03 F PIC X(27) VALUE ' CODIGO ERROR CONTADOR '.
03 F PIC X(12) VALUE SPACES.
03 F PIC X(27) VALUE ' CODIGO ERROR CONTADOR '.
03 F PIC X(15) VALUE SPACES.
02 C17.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(11) VALUE SPACES.
03 F PIC X(27) VALUE ' ------------ ------------'.
03 F PIC X(12) VALUE SPACES.
03 F PIC X(27) VALUE ' ------------ ------------'.
03 F PIC X(12) VALUE SPACES.
03 F PIC X(27) VALUE ' ------------ ------------'.
03 F PIC X(15) VALUE SPACES.
02 DET2.
03 F PIC X(01) VALUE SPACES.
03 F PIC X(14) VALUE SPACES.
03 D2-TIP1-X PIC X(01).
03 D2-TIP1 REDEFINES D2-TIP1-X PIC 9(01).
03 F PIC X(01) VALUE SPACES.
03 D2-ERR1.
04 D2-ERR1-CAMPO-X PIC X(02).
04 D2-ERR1-CAMPO REDEFINES D2-ERR1-CAMPO-X PIC 9(02).
04 D2-ERR1-ERROR-X PIC X(02).
04 D2-ERR1-ERROR REDEFINES D2-ERR1-ERROR-X PIC 9(02).
03 F PIC X(07) VALUE SPACES.
03 D2-CON1-X PIC X(10).
03 D2-CON1 REDEFINES D2-CON1-X PIC ZZ.ZZZ.ZZ9.
03 F PIC X(15) VALUE SPACES.
03 D2-TIP2-X PIC X(01).
03 D2-TIP2 REDEFINES D2-TIP2-X PIC 9(01).
03 F PIC X(01) VALUE SPACES.
03 D2-ERR2.
04 D2-ERR2-CAMPO-X PIC X(02).
04 D2-ERR2-CAMPO REDEFINES D2-ERR2-CAMPO-X PIC 9(02).
04 D2-ERR2-ERROR-X PIC X(02).
04 D2-ERR2-ERROR REDEFINES D2-ERR2-ERROR-X PIC 9(02).
03 F PIC X(07) VALUE SPACES.
03 D2-CON2-X PIC X(10).
03 D2-CON2 REDEFINES D2-CON2-X PIC ZZ.ZZZ.ZZ9.
03 F PIC X(15) VALUE SPACES.
03 D2-TIP3-X PIC X(01).
03 D2-TIP3 REDEFINES D2-TIP3-X PIC 9(01).
03 F PIC X(01) VALUE SPACES.
03 D2-ERR3.
04 D2-ERR3-CAMPO-X PIC X(02).
04 D2-ERR3-CAMPO REDEFINES D2-ERR3-CAMPO-X PIC 9(02).
04 D2-ERR3-ERROR-X PIC X(02).
04 D2-ERR3-ERROR REDEFINES D2-ERR3-ERROR-X PIC 9(02).
03 F PIC X(07) VALUE SPACES.
03 D2-CON3-X PIC X(10).
03 D2-CON3 REDEFINES D2-CON3-X PIC ZZ.ZZZ.ZZ9.
03 F PIC X(18) VALUE SPACES.
02 DET3.
03 F PIC X(51) VALUE SPACES.
03 F PIC X(27) VALUE '---------------------------'.
03 F PIC X(54) VALUE SPACES.
02 DET4.
03 F PIC X(51) VALUE SPACES.
03 F PIC X(27) VALUE ' DECLARACION CORRECTA '.
03 F PIC X(54) VALUE SPACES.
02 DET5.
03 F PIC X(51) VALUE SPACES.
03 F PIC X(27) VALUE ' DECLARACION ERRONEA '.
03 F PIC X(54) VALUE SPACES.
02 DET6.
03 F PIC X(51) VALUE SPACES.
03 F PIC X(27) VALUE ' PRESENTACION CORRECTA '.
03 F PIC X(54) VALUE SPACES.
02 DET7.
03 F PIC X(51) VALUE SPACES.
03 F PIC X(27) VALUE ' PRESENTACION ERRONEA '.
03 F PIC X(54) VALUE SPACES.
*---FIN CAMPOS PARA IMPRESION DE HOJAS-RESUMEN---*
*-----FILE-STATUS-----*
01 ST-CINTA PIC X(2) VALUE ZEROS.
01 ST-SALIDA PIC X(2) VALUE ZEROS.
01 ST-IMPRE PIC X(2) VALUE ZEROS.
*-------------------
PROCEDURE DIVISION.
*-------------------
INICIO.
*-------*
******************************************************************
* CAMBIAR EL CONTENIDO DE EJER-ACTUAL *
* DEPENDIENDO DEL EJERCICIO *
******************************************************************
MOVE '2015' TO EJER-ACTUAL.
MOVE '349' TO MODE-ACTUAL.
INITIALIZE ERRACUM1 ERRACUM-IMP ERRACUM-AUX
ERRPROP1 ERRPROP2 ERRPROP-AUX
ERRPROP-AUX-2 ERRPROP-TJO.
OPEN INPUT CINTA
OUTPUT SALIDA
OUTPUT IMPRE.
IF ST-CINTA NOT = '00'
DISPLAY 'ERROR AL ABRIR CINTA. ERROR: ' ST-CINTA
GO TO FIN
ELSE
IF NOT(ST-SALIDA = '00' OR '35')
DISPLAY 'ERROR AL ABRIR EL FICHERO DE SALIDA. ERROR: '
ST-SALIDA
GO TO FIN
ELSE
PERFORM LEER-CINTA THRU LEER-CINTA-E
IF FIN-CINTA = 1
DISPLAY 'FICHERO VACIO '
PERFORM FIN
END-IF
IF FIN-CINTA = 0
PERFORM PRIMER-REGISTRO THRU PRIMER-REGISTRO-E
PERFORM RESTO-REGISTROS THRU RESTO-REGISTROS-E UNTIL
FIN-CINTA = 1 OR SW-SECUENCIA = 1
ELSE
PERFORM CUADRAR-TIPO1 THRU CUADRAR-TIPO1-E
IF CAMPO1(1) NOT = 0
MOVE CONTA-TIPO1-ACT TO NUM-REG-SAL
MOVE CMOD3491 TO REG-DECL-SAL
MOVE ERRPROP1 TO ERRORES-PROPIOS-SAL
PERFORM ESCRIBIR-SALIDA
THRU ESCRIBIR-SALIDA-E
END-IF
PERFORM IMPRIMIR1 THRU IMPRIMIR1-E
END-IF
END-IF
END-IF.
FIN.
*----*
CLOSE CINTA.
CLOSE SALIDA.
CLOSE IMPRE.
DISPLAY 'TIPOS 1 PROCESADOS:....' CONTA-TIPO1.
DISPLAY 'TIPOS 2 PROCESADOS:....' CONTA-TIPO2.
STOP RUN.
LEER-CINTA.
*-----------*
MOVE SPACES TO REG-CINTA.
READ CINTA AT END MOVE 1 TO FIN-CINTA.
IF ST-CINTA NOT = '00'
IF ST-CINTA = '10'
DISPLAY 'FIN DE CINTA.'
ELSE
DISPLAY 'ERROR AL LEER CINTA. ERROR: ' ST-CINTA
GO TO FIN
END-IF
ELSE
ADD 1 TO CONTADOR.
LEER-CINTA-E.
*-------------*
EXIT.
PRIMER-REGISTRO.
*----------------*
IF REG-TIPO = '1'
PERFORM VALIDAR-TIPO1 THRU VALIDAR-TIPO1-E
ELSE
MOVE 1 TO SW-SECUENCIA
ADD 1 TO IEP1
MOVE 01 TO CAMPO1(IEP1)
MOVE 18 TO ERROR1(IEP1)
MOVE CONTADOR TO NUM-REG-SAL
MOVE REG-CINTA TO REG-DECL-SAL
MOVE ERRPROP1 TO ERRORES-PROPIOS-SAL
PERFORM ESCRIBIR-SALIDA THRU ESCRIBIR-SALIDA-E.
PRIMER-REGISTRO-E.
*------------------*
EXIT.
RESTO-REGISTROS.
*----------------*
*---------SOPORTE INDIVIDUAL---------*
EVALUATE REG-TIPO
WHEN '0'
WHEN '1'
PERFORM ERROR-SECUENCIA2
PERFORM PROPAGAR-2-AL-1
WHEN OTHER
INITIALIZE AUX-IMPOPE AUX-OPERECT ERRACUM1
PERFORM VALIDAR-TIPO2 THRU VALIDAR-TIPO2-E
UNTIL FIN-CINTA = 1 OR REG-TIPO = '1'
OR REG-TIPO = '0'
IF REG-TIPO = 1
*-----------------AVISAR DE PRESENTACION INCORRECTA-----------*
ADD 1 TO IEP1
MOVE 01 TO CAMPO1(IEP1)
MOVE 15 TO ERROR1(IEP1)
PERFORM ERROR-SECUENCIA2
PERFORM PROPAGAR-2-AL-1
ELSE
IF REG-TIPO = '0'
PERFORM ERROR-SECUENCIA2
PERFORM PROPAGAR-2-AL-1
END-IF
END-IF
END-EVALUATE
PERFORM CUADRAR-TIPO1 THRU CUADRAR-TIPO1-E
IF CAMPO1(1) NOT = 0
MOVE CONTA-TIPO1-ACT TO NUM-REG-SAL
MOVE CMOD3491 TO REG-DECL-SAL
MOVE ERRPROP1 TO ERRORES-PROPIOS-SAL
PERFORM ESCRIBIR-SALIDA THRU ESCRIBIR-SALIDA-E
END-IF
PERFORM IMPRIMIR1 THRU IMPRIMIR1-E.
RESTO-REGISTROS-E.
*------------------*
EXIT.
******************************************************************
VALIDAR-TIPO1.
*-------------*
*--GUARDAMOS EL CONTADOR ACTUAL PARA LUEGO PODER PONERLO EN EL
*--REGISTRO DE SALIDA
MOVE CONTADOR TO CONTA-TIPO1-ACT.
MOVE REG-CINTA TO CMOD3491 WCMOD3491.
*--A�ADIMOS 1 AL CONTADOR DE TIPOS 1
ADD 1 TO CONTA-TIPO1.
*--INICIALIZAMOS LA TABLA DE ERRORES PROPIOS
INITIALIZE ERRPROP1 IEP1.
*--RELLENAMOS LA TABLA DE ERRORES PROPIOS...--*
*--...DE LOS CAMPOS COMUNES
PERFORM VALIDA-COMUN-TIPO1 THRU VALIDA-COMUN-TIPO1-E.
*--...DE LOS CAMPOS PARTICULARES DEL MODELO
PERFORM VALIDA-TIPO1-349 THRU VALIDA-TIPO1-349-E.
INITIALIZE W-M349-1-TOTOPERA-N
W-M349-1-TOTIMPOPE-N
W-M349-1-TOTOPEREC-N
W-M349-1-TOTIMPRECT-N.
*--LEEMOS EL SIGUIENTE REGISTRO.
PERFORM LEER-CINTA THRU LEER-CINTA-E.
VALIDAR-TIPO1-E.
*---------------*
EXIT.
VALIDA-COMUN-TIPO1.
*-------------------*
******************************************************************
*****COPY DE LA VALIDACION DE LOS CAMPOS COMUNES DEL TIPO 1*******
******************************************************************
*----SW-COMPL: INDICADOR DE QUE COMPL ESTA A 'C'
*----SW-SUST : INDICADOR DE QUE SUST ESTA A 'S'
*----SW-ERR07: INDICADOR DE ERROR EN EL CAMPO 07
*----SW-HAY09: INDICADOR DE ERROR EN EL CAMPO 09
*----COMO SIEMPRE, LOS CAMPOS AUTOCORREGIDOS SE INICIALIZAN AL
* PRODUCIRSE UN ERROR DE TIPO 01
*----HAY QUE PASAR LAS POSICIONES 2 A 8 DEL REG TIPO 0
*----SE OBTIENE PARTE DE LA TABLA DE ERRORES PROPIOS, DEBIENDOSE
* COMPLETAR CON LA VALIDACION DE LOS CAMPOS PARTICULARES DE
* CADA MODELO.
*--BUSCAMOS LA PRIMERA OCURRENCIA VACIA DE LA TABLA--*
MOVE 0 TO SW-YA
PERFORM VARYING IEP1 FROM 1 BY 1 UNTIL IEP1 > 40 OR
SW-YA = 1
IF CAMPO1(IEP1) = 0
MOVE 1 TO SW-YA
COMPUTE IEP1 = IEP1 - 1
END-IF
END-PERFORM
COMPUTE IEP1 = IEP1 - 1.
* VALIDAMOS QUE NO VENGA NINGUN LOW-VALUES.
MOVE 0 TO TALLY.
INSPECT CMOD3491 TALLYING TALLY FOR ALL LOW-VALUES
MOVE TALLY TO CONT-LOWVALUES
IF CONT-LOWVALUES > 0
ADD 1 TO IEP1
MOVE 99 TO CAMPO1(IEP1)
MOVE 99 TO ERROR1(IEP1).
*----TIPO----*
*----HAY QUE VALIDARLO ANTES DE ENTRAR EN ESTE PARRAFO----*
*----MODELO----*
IF MCMN-1-MOD IS NOT NUMERIC
ADD 1 TO IEP1
MOVE 02 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
INITIALIZE W-MCMN-1-MOD-N
ELSE
IF MCMN-1-MOD NOT = MODE-ACTUAL AND
MCMN-1-MOD NOT = ZEROS
ADD 1 TO IEP1
MOVE 02 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF MCMN-1-MOD-N = 0
ADD 1 TO IEP1
MOVE 02 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1).
*--EJERCICIO.(VARIAR EL EJERCICIO SEGUN EL A�O)
IF MCMN-1-EJER IS NOT NUMERIC
ADD 1 TO IEP1
MOVE 03 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
INITIALIZE W-MCMN-1-EJER-N
ELSE
IF MCMN-1-EJER NOT = EJER-ACTUAL AND MCMN-1-EJER-N NOT = 0
ADD 1 TO IEP1
MOVE 03 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF MCMN-1-EJER-N = 0
ADD 1 TO IEP1
MOVE 03 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1).
*--NIF DEL DECLARANTE
IF NOT(MCMN-1-NIF = LOW-VALUES OR SPACES OR ZEROS)
INITIALIZE PROPIOS-NIF CAMPOS-GTUCNIF COM-GTUCNIF
MOVE MCMN-1-NIF TO NUEVE-LETRAS
PERFORM VALIDAR-NIF THRU VALIDAR-NIF-E
IF ERROR-NIF = 1
ADD 1 TO IEP1
MOVE 04 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
END-IF
ELSE
ADD 1 TO IEP1
MOVE 04 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1).
*--APELLIDOS Y NOMBRE/RAZON SOCIAL DEL RETENEDOR.
IF NOT(MCMN-1-NOM = SPACES OR LOW-VALUES)
MOVE MCMN-1-NOM TO APFINOMB-NOMBRE-E
PERFORM VALIDAR-NOMBRE THRU VALIDAR-NOMBRE-E
IF SW-FORMATO = 1
MOVE 0 TO SW-FORMATO
ADD 1 TO IEP1
MOVE 05 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
END-IF
ELSE
ADD 1 TO IEP1
MOVE 05 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1)
END-IF.
*-----TIPO DE SOPORTE DE PRESENTACION-----*
IF NOT(MCMN-1-TSOP = LOW-VALUES OR SPACES)
IF NOT(MCMN-1-TSOP = 'C' OR 'T')
ADD 1 TO IEP1
MOVE 06 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
END-IF
ELSE
ADD 1 TO IEP1
MOVE 06 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1).
*-----PERSONA CON LA QUE RELACIONARSE-TELEFONO-----*
*-----PERSONA CON LA QUE RELACIONARSE-APELLIDOS Y NOMBRE-----*
MOVE 0 TO SW-ERR07.
IF MCMN-1-TFNO IS NOT NUMERIC
INITIALIZE W-MCMN-1-TFNO-N
MOVE 1 TO SW-ERR07
ADD 1 TO IEP1
MOVE 07 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1).
IF NOT(MCMN-1-NOMREL = SPACES OR LOW-VALUES)
MOVE MCMN-1-NOMREL TO APFINOMB-NOMBRE-E
PERFORM PREV-APFINOMB THRU PREV-APFINOMB-E
*-----AQUI NO HACE FALTA VALIDAR-NOMBRE PORQUE NO SE CONTEMPLA
* LA POSIBILIDAD DE QUE SEA UNA PERSONA JURIDICA. BASTA CON IR
* A LA APFINOMB
IF APFINOMB-RETORNO-S NOT = 0 OR
APFINOMB-NUMERO-PALABRAS-S < 2
IF SW-ERR07 = 0
MOVE 1 TO SW-ERR07
ADD 1 TO IEP1
MOVE 07 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1).
IF SW-ERR07 = 0
IF (MCMN-1-TFNO = ZEROS) OR
(MCMN-1-NOMREL = SPACES OR LOW-VALUES)
ADD 1 TO IEP1
MOVE 07 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1).
*----NUMERO DE JUSTIFICANTE DE LA DECLARACION----*
IF ES-PRIMER-TIPO1
MOVE 'NO' TO PRIMER-TIPO1
MOVE MCMN-1-JUST-N(1:3) TO TIPO-DEC
END-IF
IF MCMN-1-JUST IS NOT NUMERIC
INITIALIZE W-MCMN-1-JUST-N
ADD 1 TO IEP1
MOVE 08 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF MCMN-1-JUST-N(1:3) NOT = '349' AND
MCMN-1-JUST-N NOT = 0
ADD 1 TO IEP1
MOVE 08 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF TIPO-DEC NOT = MCMN-1-JUST-N(1:3)
ADD 1 TO IEP1
MOVE 08 TO CAMPO1(IEP1)
MOVE 16 TO ERROR1(IEP1)
ELSE
IF MCMN-1-JUST-N = 0
ADD 1 TO IEP1
MOVE 08 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1).
*----DECLARACION COMPLEMENTARIA----*
MOVE 0 TO SW-COMPL
IF NOT(MCMN-1-COMPL = 'C' OR ' ')
ADD 1 TO IEP1
MOVE 09 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
MOVE 1 TO SW-HAY09
ELSE
IF MCMN-1-COMPL = 'C'
MOVE 1 TO SW-COMPL.
*----DECLARACION SUSTITUTIVA----*
MOVE 0 TO SW-SUST.
IF NOT(MCMN-1-SUST = 'S' OR ' ')
ADD 1 TO IEP1
MOVE 10 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF MCMN-1-SUST = 'S'
MOVE 1 TO SW-SUST
IF SW-COMPL = 1
ADD 1 TO IEP1
MOVE 09 TO CAMPO1(IEP1)
MOVE 02 TO ERROR1(IEP1)
MOVE 1 TO SW-HAY09
ADD 1 TO IEP1
MOVE 10 TO CAMPO1(IEP1)
MOVE 02 TO ERROR1(IEP1).
*----NUMERO DE JUSTIFICANTE DE LA DECLARACION ANTERIOR
IF MCMN-1-JUSTANT IS NOT NUMERIC
INITIALIZE W-MCMN-1-JUSTANT-N
ADD 1 TO IEP1
MOVE 11 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF MCMN-1-JUSTANT(1:3) NOT = '349' AND
MCMN-1-JUSTANT-N NOT = 0
ADD 1 TO IEP1
MOVE 11 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF MCMN-1-JUSTANT NOT = ZEROS AND
MCMN-1-JUSTANT = MCMN-1-JUST
ADD 1 TO IEP1
MOVE 11 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF MCMN-1-JUSTANT-N = 0
IF SW-SUST = 1
ADD 1 TO IEP1
MOVE 11 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1)
END-IF
ELSE
IF SW-COMPL = 1 OR SW-SUST = 0
IF SW-HAY09 = 0 AND SW-COMPL = 1
ADD 1 TO IEP1
MOVE 09 TO CAMPO1(IEP1)
MOVE 02 TO ERROR1(IEP1)
END-IF
ADD 1 TO IEP1
MOVE 11 TO CAMPO1(IEP1)
MOVE 02 TO ERROR1(IEP1).
VALIDA-COMUN-TIPO1-E.
*---------------------*
EXIT.
VALIDA-TIPO1-349.
*-----------------*
*----ESTAS SON LAS VALIDACIONES ESPECIFICAS DEL MODELO
*--BUSCAMOS LA PRIMERA OCURRENCIA VACIA DE LA TABLA--*
MOVE 0 TO SW-YA
PERFORM VARYING IEP1 FROM 1 BY 1 UNTIL IEP1 > 40 OR
SW-YA = 1
IF CAMPO1(IEP1) = 0
MOVE 1 TO SW-YA
COMPUTE IEP1 = IEP1 - 1
END-IF
END-PERFORM
COMPUTE IEP1 = IEP1 - 1.
INITIALIZE SW-C13T1 SW-C14T1 SW-C15T1 SW-C15T1.
IF NOT(M349-1-PERIODO = LOW-VALUES OR SPACES)
IF NOT(M349-1-PERIODO = '1T' OR '2T' OR '3T' OR '4T'
OR '0A' or '01' or '02' or '03'
OR '04' or '05' or '06' or '07'
OR '08' or '09' or '10' or '11'
OR '12')
ADD 1 TO IEP1
MOVE 12 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
END-IF
ELSE
ADD 1 TO IEP1
MOVE 12 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1).
*----TOTAL DE OPERADORES INTRACOMUNITARIOS------*
*----(AQUI NO SE VALIDA EL ERROR DE CUADRE)
MOVE 0 TO SW-C13T1.
IF M349-1-TOTOPERA NOT NUMERIC
MOVE 1 TO SW-C13T1
INITIALIZE W-M349-1-TOTOPERA-N
ADD 1 TO IEP1
MOVE 13 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF M349-1-TOTOPERA-N = ZEROS
NEXT SENTENCE
ELSE
MOVE 1 TO SW-HAYOPERADOR
IF M349-1-TOTOPERA-N > 5000000
MOVE 1 TO SW-C13T1
ADD 1 TO IEP1
MOVE 13 TO CAMPO1(IEP1)
MOVE 04 TO ERROR1(IEP1).
*----IMPORTE DE LAS OPERACIONES INTRACOMUNITARIAS----*
IF M349-1-TOTIMPOPE IS NOT NUMERIC
INITIALIZE W-M349-1-TOTIMPOPE-N
MOVE 1 TO SW-C14T1
ADD 1 TO IEP1
MOVE 14 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF M349-1-TOTIMPOPE > 1000000000000
MOVE 1 TO SW-C14T1
ADD 1 TO IEP1
MOVE 14 TO CAMPO1(IEP1)
MOVE 04 TO ERROR1(IEP1).
*----TOTAL DE OPERADORES INTRACOMUNITARIOS CON RECTIFICACIONES---*
MOVE 0 TO SW-C15T1.
IF M349-1-TOTOPEREC NOT NUMERIC
MOVE 1 TO SW-C15T1
INITIALIZE W-M349-1-TOTOPEREC-N
ADD 1 TO IEP1
MOVE 15 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF M349-1-TOTOPEREC-N = ZEROS
NEXT SENTENCE
ELSE
MOVE 1 TO SW-HAYOPERADOR
IF M349-1-TOTOPEREC-N > 5000000
MOVE 1 TO SW-C15T1
ADD 1 TO IEP1
MOVE 15 TO CAMPO1(IEP1)
MOVE 04 TO ERROR1(IEP1)
END-IF
END-IF
END-IF.
*--COMPROBAMOS SI AL MENOS UNO DE LOS DOS TIPOS DE OPERADORES
*--TIENE CONTENIDO. SI LOS DOS ESTAN VACIOS DAMOS ERROR EN
*--LOS DOS CAMPOS DE OPERADORES (SIEMPRE QUE NO SE HAYA MARCADO
*--OTRO ERROR)--*
IF SW-HAYOPERADOR = 0
IF SW-C13T1 = 0 AND SW-C15T1 = 0
ADD 1 TO IEP1
MOVE 13 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1)
ADD 1 TO IEP1
MOVE 15 TO CAMPO1(IEP1)
MOVE 03 TO ERROR1(IEP1)
END-IF
END-IF.
*----IMPORTE DE LAS RECTIFICACIONES----*
*
IF M349-1-TOTIMPRECT NOT NUMERIC
INITIALIZE W-M349-1-TOTIMPRECT-N
MOVE 1 TO SW-C16T1
ADD 1 TO IEP1
MOVE 16 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF M349-1-TOTIMPRECT > 1000000000000
MOVE 1 TO SW-C16T1
ADD 1 TO IEP1
MOVE 16 TO CAMPO1(IEP1)
MOVE 04 TO ERROR1(IEP1).
*----INDICADOR CAMBIO PERIODICIDAD EN LA OBLIGACION DE DECLARAR-*
IF NOT(M349-1-INDPERIO = SPACES)
IF M349-1-INDPERIO NOT = 'X'
ADD 1 TO IEP1
MOVE 17 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1).
*----CAMPO 18 SON ESPACIOS
*----NIF DEL REPRESENTANTE LEGAL
IF NOT(M349-1-NIFRPTE = LOW-VALUES OR SPACES OR ZEROS)
INITIALIZE PROPIOS-NIF CAMPOS-GTUCNIF COM-GTUCNIF
MOVE M349-1-NIFRPTE TO NUEVE-LETRAS
PERFORM VALIDAR-NIF THRU VALIDAR-NIF-E
IF ERROR-NIF = 1
ADD 1 TO IEP1
MOVE 19 TO CAMPO1(IEP1)
MOVE 01 TO ERROR1(IEP1)
ELSE
IF M349-1-NIFRPTE = MCMN-1-NIF
ADD 1 TO IEP1
MOVE 19 TO CAMPO1(IEP1)
MOVE 02 TO ERROR1(IEP1).
*--SI NO HA HABIDO ERRORES DE TIPO 01, INICIALIZAMOS EL AUTOCORR
IF CMOD3491 = WCMOD3491
INITIALIZE WCMOD3491.
VALIDA-TIPO1-349-E.
*-------------------*
EXIT.
******************************************************************
VALIDAR-TIPO2.
*--------------*
*--INICIALIZAMOS LA TABLA DE ERRORES PROPIOS Y SU CONTADOR
INITIALIZE ERRPROP2 IEP2.
*--A�ADIR 1 AL CONTADOR DE TIPOS 2.
ADD 1 TO CONTA-TIPO2.
MOVE REG-CINTA TO CMOD3492 WCMOD3492.
*--LLAMAMOS A LA RUTINA DE VALIDACION PROPIAMENTE DICHA:(GIRCA02S)
PERFORM VALIDAR-TIPO2-349.
*--ACUMULAMOS LOS IMPORTES DEL TIPO 2 EN EL AUTOCORR. DEL TIPO 1
*--Y A�ADIMOS UNO AL ACUMULADOR DE PERCEPTORES.
PERFORM ACUMULAR-IMPORTES.
IF CAMPO2(1) NOT = 0
MOVE CONTADOR TO NUM-REG-SAL
MOVE CMOD3492 TO REG-DECL-SAL
MOVE ERRPROP2 TO ERRORES-PROPIOS-SAL
PERFORM ESCRIBIR-SALIDA THRU ESCRIBIR-SALIDA-E
END-IF.
PERFORM PROPAGAR-2-AL-1.
PERFORM LEER-CINTA THRU LEER-CINTA-E.
VALIDAR-TIPO2-E.
*----------------*
EXIT.
******************************************************************
PROPAGAR-2-AL-1.
*----------------*
MOVE ERRPROP2 TO ERRPROP-AUX.
MOVE ERRACUM1 TO ERRACUM-AUX.
PERFORM PROPAGACION THRU PROPAGACION-E.
MOVE ERRACUM-AUX TO ERRACUM1.
ERROR-SECUENCIA2.
*-----------------*
IF CAMPO2(1) NOT = ZEROS
INITIALIZE IEP2 ERRPROP2
END-IF
MOVE 1 TO SW-SECUENCIA.
ADD 1 TO IEP2.
MOVE 01 TO CAMPO2(IEP2).
MOVE 18 TO ERROR2(IEP2).
MOVE CONTADOR TO NUM-REG-SAL.
MOVE REG-CINTA TO REG-DECL-SAL.
MOVE ERRPROP2 TO ERRORES-PROPIOS-SAL.
PERFORM ESCRIBIR-SALIDA THRU ESCRIBIR-SALIDA-E.
ERROR-SECUENCIA1.
*-----------------*
MOVE 1 TO SW-SECUENCIA.
ADD 1 TO IEP1.
MOVE 01 TO CAMPO1(IEP1).
MOVE 18 TO ERROR1(IEP1).
MOVE CONTADOR TO NUM-REG-SAL.
MOVE REG-CINTA TO REG-DECL-SAL.
MOVE ERRPROP1 TO ERRORES-PROPIOS-SAL.
PERFORM ESCRIBIR-SALIDA THRU ESCRIBIR-SALIDA-E.
******************************************************************
ACUMULAR-IMPORTES.
*------------------*(GIRCR04S)
*--ACUMULA LOS IMPORTES DEL TIPO 2 PARA AL FINAL CUADRAR CON LOS
*--DECLARADOS EN EL TIPO 1
*--TAMBIEN SUMA 1 AL NUMERO DE PERCEPTORES PARA CUADRAR CON LOS
*--DECLARADOS EN EL TIPO 1
*--DATOS A PASAR A ESTA RUTINA:
*-- *500 POSICIONES DEL TIPO 2 CORRECTO
*-- *500 POSICIONES DEL TIPO 1 AUTOCORREGIDO
*--EN WORKING DEBERA EXISTIR AUX-IMPORTE PARA CALCULOS AUXILIARES
*-- *AUX-IMPOPE : ACUMULADOR DE IMPORTES
*-- *AUX-OPERECT : ACUMULADOR DE IMPORTES RECTIFICADOS
*--
*****************
*--A�ADIMOS 1 AL ACUMULADOR DE PARTICIPES (EN TIPO 1)
IF SW-RECTIF = 0
ADD 1 TO W-M349-1-TOTOPERA-N
ELSE
ADD 1 TO W-M349-1-TOTOPEREC-N.
*---IMPORTE DE LAS OPERACIONES---*
MOVE W-M349-1-TOTIMPOPE-N TO AUX-IMPOPE
COMPUTE AUX-IMPOPE = W-M349-2-BIMPONI-N + AUX-IMPOPE
*---IMPORTE DE LAS OPERACIONES RECTIFICADAS---*
MOVE W-M349-1-TOTIMPRECT-N TO AUX-OPERECT.
COMPUTE AUX-OPERECT = W-M349-2-BIRECT-N + AUX-OPERECT
*--AHORA HACEMOS EL PASO INVERSO DEL QUE HACEMOS AL PPIO
*--ASI VAMOS ACUMULANDO LOS IMPORTES EN EL AUTOCORREGIDO
MOVE AUX-IMPOPE TO W-M349-1-TOTIMPOPE-N.
MOVE AUX-OPERECT TO W-M349-1-TOTIMPRECT-N.
*--SI NO HA HABIDO ERRORES DE TIPO 01, INICIALIZAMOS EL AUTOCORR
IF CMOD3492 = WCMOD3492
INITIALIZE WCMOD3492.
******************************************************************
VALIDAR-TIPO2-349.
*------------------*
*--PARAMETROS DE COMUNICACION:
*-- REGISTRO DE TIPO 2 (250) (CMOD3492)
*-- REGISTRO DE TIPO 2 (250)(AUTOCORR)(WCMOD3492)
*-- POSICIONES 2 A 17 REG TIPO 1
*-- TABLA DE ERRORES(CAMPO/ERROR/OC40)
*-- RESPUESTA (0:BIEN 9:MAL)
*--WORKING: ERRPROP2 :TABLA DE ERRORES PROPIOS
*-- IEP2 :INDICE PARA LA TABLA
*-- W-MCMN-1-MOD: MODELO EN TIPO 1(POS
*-- W-MCMN-1-EJER: EJERCICIO EN TIPO 1
*-- W-MCMN-1-NIF: NIF EN TIPO 1
*-- TODO LO NECESARIO PARA VALIDAR NIF Y NOMBRE
*--UTILIZA VALIDAR-NIF Y VALIDAR-NOMBRE.
*
******************************************************************
*--BUSCAMOS LA PRIMERA OCURRENCIA VACIA DE LA TABLA--*
MOVE 0 TO SW-YA
PERFORM VARYING IEP2 FROM 1 BY 1 UNTIL IEP2 > 40 OR
SW-YA = 1
IF CAMPO2(IEP2) = 0
MOVE 1 TO SW-YA
COMPUTE IEP2 = IEP2 - 1
END-IF
END-PERFORM
COMPUTE IEP2 = IEP2 - 1.
*--RELLENAMOS LA TABLA DE ERRORES PROPIOS...--*
* VALIDAMOS QUE NO VENGA NINGUN LOW-VALUES.
MOVE 0 TO TALLY.
INSPECT CMOD3492 TALLYING TALLY FOR ALL LOW-VALUES
MOVE TALLY TO CONT-LOWVALUES
IF CONT-LOWVALUES > 0
ADD 1 TO IEP2
MOVE 99 TO CAMPO2(IEP2)
MOVE 99 TO ERROR2(IEP2).
*----TIPO----*
*----VALIDACIONES DE ERROR DE SECUENCIA ANTES DE ENTRAR EN ESTE
*----PARRAFO.
*----HASTA EL CAMPO 10 SON COMUNES PARA LOS DOS TIPOS 2
IF M349-2-TIPO IS NOT NUMERIC
INITIALIZE W-M349-2-TIPO
ADD 1 TO IEP2
MOVE 01 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2)
ELSE
IF M349-2-TIPO not = '2'
ADD 1 TO IEP2
MOVE 01 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2).
MOVE 0 TO SW-RECTIF
IF CMOD3492(134:13) = SPACES OR ZEROS OR LOW-VALUES
IF (M349-2-EJERCI = SPACES OR ZEROS OR LOW-VALUES) AND
(M349-2-PERIODO = SPACES OR ZEROS OR LOW-VALUES) AND
(M349-2-BIRECT = SPACES OR ZEROS OR LOW-VALUES) AND
(M349-2-BIDECL = SPACES OR ZEROS OR LOW-VALUES)
NEXT SENTENCE
ELSE
MOVE 1 TO SW-RECTIF.
*----MODELO----*
IF M349-2-MOD NOT = MCMN-1-MOD
IF M349-2-MOD IS NOT NUMERIC
INITIALIZE W-M349-2-MOD-N
END-IF
ADD 1 TO IEP2
MOVE 02 TO CAMPO2(IEP2)
MOVE 12 TO ERROR2(IEP2).
*--EJERCICIO �
IF M349-2-EJER NOT = MCMN-1-EJER
IF M349-2-EJER IS NOT NUMERIC
INITIALIZE W-M349-2-EJER-N
END-IF
ADD 1 TO IEP2
MOVE 03 TO CAMPO2(IEP2)
MOVE 12 TO ERROR2(IEP2).
IF MCMN-1-NIF NOT = M349-2-NIF
ADD 1 TO IEP2
MOVE 04 TO CAMPO2(IEP2)
MOVE 12 TO ERROR2(IEP2).
*--LOS CAMPOS 5, 6 Y 7 NO TIENEN CONTENIDO
*--NIF DEL OPERADOR COMUNITARIO
IF M349-2-NIFOPERADOR = SPACES OR LOW-VALUES
ADD 1 TO IEP2
MOVE 08 TO CAMPO2(IEP2)
MOVE 03 TO ERROR2(IEP2)
ELSE
MOVE M349-2-CODPAIS TO E-PAIS
MOVE M349-2-NIFOPERA TO M-NVAT
PERFORM VALIDAR-NIF-VICENVAT THRU
VALIDAR-NIF-VICENVAT-E
IF (M349-2-CODPAIS NOT = 'DE' AND 'AT' AND 'BE' AND
'CY' AND 'CZ' AND 'DK' AND
'SK' AND 'SI' AND 'EE' AND
'FI' AND 'FR' AND 'EL' AND
'GB' AND 'NL' AND 'HU' AND
'IT' AND 'IE' AND 'LV' AND
'LT' AND 'LU' AND 'MT' AND
'PL' AND 'PT' AND 'SE' AND
'RO' AND 'BG' AND 'HR') OR
(M349-2-NIFOPERA (1:3) = SPACES)
ADD 1 TO IEP2
MOVE 08 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2).
*----APELLIDOS Y NOMBRE/RAZON SOCIAL DEL OPERADOR INTRAC.---*
IF M349-2-NOMPART = LOW-VALUES
ADD 1 TO IEP2
MOVE 09 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2)
ELSE
IF M349-2-NOMPART = SPACES
ADD 1 TO IEP2
MOVE 09 TO CAMPO2(IEP2)
MOVE 03 TO ERROR2(IEP2).
*----CLAVE DE OPERACION---*
IF M349-2-CLOPERAC = SPACES
ADD 1 TO IEP2
MOVE 10 TO CAMPO2(IEP2)
MOVE 03 TO ERROR2(IEP2)
ELSE
IF M349-2-CLOPERAC NOT = 'A' AND 'E' AND 'T' AND
'S' AND 'I' AND 'M' AND
'H'
ADD 1 TO IEP2
MOVE 10 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2).
*--------------------------------------------------------*
*--CAMPO PARA EL FORMATO DE OPERADOR INTRACOMUNITARIO----*
*--------------------------------------------------------*
*--IMPORTE DE LA BASE IMPONIBLE----*
IF ((M349-2-EJERCI = SPACES OR ZEROS) AND
(M349-2-PERIODO = SPACES OR ZEROS) AND
(M349-2-BIRECT = SPACES OR ZEROS) AND
(M349-2-BIDECL = SPACES OR ZEROS))
IF M349-2-BIMPONI = SPACES OR ZEROS
ADD 1 TO IEP2
MOVE 11 TO CAMPO2(IEP2)
MOVE 03 TO ERROR2(IEP2)
ELSE
IF M349-2-BIMPONI IS NOT NUMERIC
INITIALIZE W-M349-2-BIMPONI-N
ADD 1 TO IEP2
MOVE 11 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2)
ELSE
IF M349-2-BIMPONI > 0500000000000
ADD 1 TO IEP2
MOVE 11 TO CAMPO2(IEP2)
MOVE 04 TO ERROR2(IEP2).
*---------------------------------------------------------*
*--CAMPOS PARA EL FORMATO DE HOJA DE RECTIFICACIONES -----*
*---------------------------------------------------------*
*--EJERCICIO----*
IF M349-2-BIMPONI = SPACES OR ZEROS
IF M349-2-EJERCI = ZEROS OR LOW-VALUES
ADD 1 TO IEP2
MOVE 12 TO CAMPO2(IEP2)
MOVE 03 TO ERROR2(IEP2)
ELSE
IF M349-2-EJERCI IS NOT NUMERIC
ADD 1 TO IEP2
MOVE 12 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2)
ELSE
IF M349-2-EJERCI-N > M349-2-EJER-N OR
M349-2-EJERCI-N < EJER-ACTUAL-N - 11
ADD 1 TO IEP2
MOVE 12 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2)
END-IF
END-IF
END-IF
ELSE
IF NOT(M349-2-EJERCI = SPACES OR LOW-VALUES OR ZEROS)
ADD 1 TO IEP2
MOVE 12 TO CAMPO2(IEP2)
MOVE 02 TO ERROR2(IEP2).
*--PERIODO---*
IF M349-2-BIMPONI = SPACES OR ZEROS
IF M349-2-PERIODO = SPACES OR LOW-VALUES
ADD 1 TO IEP2
MOVE 13 TO CAMPO2(IEP2)
MOVE 03 TO ERROR2(IEP2)
ELSE
IF NOT(M349-2-PERIODO = '1T' OR '2T' OR '3T' OR '4T'
OR '0A' OR '01' OR '02' OR '03'
OR '04' OR '05' OR '06' OR '07'
OR '08' OR '09' OR '10' OR '11'
OR '12')
ADD 1 TO IEP2
MOVE 13 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2)
END-IF
END-IF
ELSE
IF NOT(M349-2-PERIODO = SPACES OR LOW-VALUES)
ADD 1 TO IEP2
MOVE 13 TO CAMPO2(IEP2)
MOVE 02 TO ERROR2(IEP2).
*--IMPORTE DE LA BASE IMPONIBLE RECTIFICADA ----*
IF NOT(M349-2-BIMPONI = SPACES OR ZEROS)
IF NOT(M349-2-BIRECT = SPACES OR ZEROS)
ADD 1 TO IEP2
MOVE 14 TO CAMPO2(IEP2)
MOVE 02 TO ERROR2(IEP2)
END-IF
ELSE
IF M349-2-BIRECT = ZEROS
IF M349-2-BIDECL = ZEROS OR SPACES
ADD 1 TO IEP2
MOVE 14 TO CAMPO2(IEP2)
MOVE 03 TO ERROR2(IEP2)
END-IF
ELSE
IF M349-2-BIRECT IS NOT NUMERIC
INITIALIZE W-M349-2-BIRECT-N
ADD 1 TO IEP2
MOVE 14 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2)
ELSE
IF M349-2-BIRECT > 0500000000000
ADD 1 TO IEP2
MOVE 14 TO CAMPO2(IEP2)
MOVE 04 TO ERROR2(IEP2).
*--IMPORTE DE LA BASE IMPONIBLE DECLARADA ANTERIORMENTE---*
IF NOT(M349-2-BIMPONI = SPACES OR ZEROS)
IF NOT(M349-2-BIDECL = SPACES OR ZEROS)
ADD 1 TO IEP2
MOVE 15 TO CAMPO2(IEP2)
MOVE 02 TO ERROR2(IEP2)
END-IF
ELSE
IF M349-2-BIDECL = ZEROS
IF M349-2-BIRECT = ZEROS OR SPACES
ADD 1 TO IEP2
MOVE 15 TO CAMPO2(IEP2)
MOVE 03 TO ERROR2(IEP2)
END-IF
ELSE
IF M349-2-BIDECL IS NOT NUMERIC
INITIALIZE W-M349-2-BIDECL-N
ADD 1 TO IEP2
MOVE 15 TO CAMPO2(IEP2)
MOVE 01 TO ERROR2(IEP2)
ELSE
IF M349-2-BIDECL > 0500000000000
ADD 1 TO IEP2
MOVE 15 TO CAMPO2(IEP2)
MOVE 04 TO ERROR2(IEP2).
*--- FIN DE LA VALIDACION DEL TIPO2 ---*
******************************************************************
VALIDAR-NIF.
*------------*
*COMUN PARA TODAS LAS VALIDACIONES DE NIF.
*INCLUYE LA RUTINA GTUCNIF.
*ENTRADA: NUEVE-LETRAS = NIF/CIF LEIDO
*SALIDA : ERROR-NIF : 1=FALLO 0=CORRECTO (PARA NIF Y CIF)
* ES-UN-NIF : 1=LO ES 0=NO LO ES
* ES-UN-CIF : 1=LO ES 0=NO LO ES
IF NUEVE-LETRAS = '00000001R' OR ' 1R' OR '1R '
MOVE 1 TO ERROR-NIF
GO TO VALIDAR-NIF-E.
IF PRIMERA-LETRA = 'A' OR 'B' OR 'C' OR 'D' OR 'E' OR
'F' OR 'G' OR 'H' OR 'K' OR 'L' OR
'M' OR 'P' OR 'Q' OR 'S' OR 'X' OR
'N' OR 'R' OR 'U' OR 'J' OR 'V' OR
'W' OR 'Y' OR 'Z'
MOVE NUEVE-LETRAS TO P1-DNICI
ELSE
IF ULTIMA-LETRA IS NUMERIC
MOVE NUEVE-LETRAS TO P1-DNICI
ELSE
IF OCHO-LETRAS IS NUMERIC
MOVE OCHO-LETRAS TO P1-DNICI
ELSE
MOVE 1 TO ERROR-NIF
GO TO VALIDAR-NIF-E.
PERFORM PREV-GTUCNIF.
IF P1-ESTADO = '9'
MOVE 1 TO ERROR-NIF
ELSE
IF P1-ESTADO = 'D'
MOVE 0 TO ES-UN-CIF
MOVE 1 TO ES-UN-NIF
IF ULTIMA-LETRA NOT = P1-DC
MOVE 1 TO ERROR-NIF
END-IF
ELSE
MOVE 1 TO ES-UN-CIF
MOVE 0 TO ES-UN-NIF
END-IF
END-IF.
VALIDAR-NIF-E.
*--------------*
EXIT.
PREV-GTUCNIF.
*-------------*(PRINCIPAL DE GTUCNIF)
MOVE SPACES TO P1-DNICIN P1-DC P1-ESTADO.
MOVE '9' TO P1-TIPO.
MOVE '9' TO TIPO-DNI
MOVE '9' TO ESTADO.
MOVE P1-DNICI TO TAB01.
MOVE P1-DNICI TO P1-DNICIN.
PERFORM VER-TIPO THRU
VER-TIPO-EXIT.
IF TIPO-PER = 'J'
PERFORM VER-CI THRU
VER-CI-EXIT
ELSE
IF TIPO-PER = 'F'
PERFORM VER-DNI THRU
VER-DNI-EXIT
ELSE
IF TIPO-PER = 'E'
IF TIPO-DNI = '1' OR
TIPO-DNI = '3'
PERFORM VER-EXT-ANTIGUO THRU
VER-EXT-ANTIGUO-EXIT
ELSE
IF TIPO-PER = 'E' AND TIPO-DNI = '2'
PERFORM VER-EXT-MODERNO THRU
VER-EXT-MODERNO-EXIT
ELSE
IF TIPO-PER = 'E' AND TIPO-DNI = '4'
PERFORM VER-T THRU
S-VER-T
ELSE
IF TIPO-PER = 'M'
PERFORM VER-MENOR THRU
VER-MENOR-EXIT.
MOVE TAB01 TO P1-DNICIN.
MOVE TIPO-DNI TO P1-TIPO.
MOVE ESTADO TO P1-ESTADO.
VER-TIPO.
*---------*
MOVE SPACES TO TIPO-PER.
MOVE 0 TO GRUPO-F.
MOVE 0 TO GRUPO-J.
IF ELEM01 (1) = 'A'
MOVE 'J' TO TIPO-PER
IF ELEM01 (9) IS NUMERIC
MOVE '5' TO TIPO-DNI
MOVE 1 TO GRUPO-J
GO TO VER-TIPO-EXIT
ELSE
MOVE '6' TO TIPO-DNI
MOVE 6 TO GRUPO-J
GO TO VER-TIPO-EXIT.
IF ELEM01 (1) > 'A' AND ELEM01 (1) < 'I'
MOVE 'J' TO TIPO-PER
IF ELEM01 (9) IS NUMERIC
MOVE '5' TO TIPO-DNI
MOVE 1 TO GRUPO-J
GO TO VER-TIPO-EXIT
ELSE
MOVE '6' TO TIPO-DNI
MOVE 6 TO GRUPO-J
GO TO VER-TIPO-EXIT.
IF ELEM01 (1) = 'J' OR ELEM01 (1) = 'U' OR ELEM01 (1) = 'V'
MOVE 'J' TO TIPO-PER
IF ELEM01 (9) IS NUMERIC
MOVE '5' TO TIPO-DNI
MOVE 1 TO GRUPO-J
GO TO VER-TIPO-EXIT.
IF ELEM01 (1) = 'N' OR ELEM01 (1) = 'W'
IF ELEM01 (9) IS NOT NUMERIC
MOVE 'J' TO TIPO-PER
MOVE '6' TO TIPO-DNI
MOVE 2 TO GRUPO-J
GO TO VER-TIPO-EXIT.
IF ELEM01 (1) = 'S'
MOVE 'J' TO TIPO-PER
MOVE '7' TO TIPO-DNI
MOVE 5 TO GRUPO-J
GO TO VER-TIPO-EXIT.
IF ELEM01 (1) = 'P'
MOVE 'J' TO TIPO-PER
MOVE '8' TO TIPO-DNI
MOVE 3 TO GRUPO-J
GO TO VER-TIPO-EXIT.
IF ELEM01 (1) = 'Q' OR ELEM01 (1) = 'R'
MOVE 'J' TO TIPO-PER
MOVE '8' TO TIPO-DNI
MOVE 4 TO GRUPO-J
GO TO VER-TIPO-EXIT.
IF ELEM01 (1) = 'L' OR ELEM01 (1) = 'K' OR ELEM01 (1) = 'M'
MOVE 'E' TO TIPO-PER
MOVE '2' TO TIPO-DNI
MOVE 3 TO GRUPO-F
GO TO VER-TIPO-EXIT.
IF ELEM01 (1) = 'X' OR ELEM01 (1) = 'Y' OR ELEM01 (1) = 'Z'
MOVE 'E' TO TIPO-PER
MOVE '2' TO TIPO-DNI
MOVE 2 TO GRUPO-F
GO TO VER-TIPO-EXIT.
IF ELEM01 (1) IS NUMERIC
MOVE 'F' TO TIPO-PER
MOVE '0' TO TIPO-DNI
MOVE 1 TO GRUPO-F.
VER-TIPO-EXIT.
*--------------*
EXIT.
VER-CI.
*-------*
IF NUMCI NOT NUMERIC OR NUMCI = ZEROS
GO TO VER-CI-EXIT.
PERFORM CALC-DC-CI THRU CALC-DC-CI-EXIT.
IF TIPO-DNI = '5'
IF DCCI = DCNUM
MOVE DCNUM TO P1-DC
MOVE 'C' TO ESTADO
GO TO VER-CI-EXIT.
IF TIPO-DNI = '6' OR TIPO-DNI = '7' OR TIPO-DNI = '8'
IF DCCI = DCLET
MOVE DCLET TO P1-DC
MOVE 'C' TO ESTADO
GO TO VER-CI-EXIT.
VER-CI-EXIT.
*------------*
EXIT.
VER-DNI.
*--------*
MOVE ZEROS TO TAB02.
PERFORM ALINEAR THRU ALINEAR-EXIT.
MOVE ELEM01 (I01) TO ELEM02 (I02).
MOVE TAB02 TO TAB01.
IF DNICIF NOT NUMERIC OR DNICIF = ZEROS
OR ELEM01 (1) NOT = ZEROS
GO TO VER-DNI-EXIT.
IF NUM-REP = '00000000' OR NUM-REP = '99999999'
GO TO VER-DNI-EXIT.
MOVE DNICIF TO DNINUM.
PERFORM CALC-DC-DNI THRU CALC-DC-DNI-EXIT.
MOVE DCLET TO P1-DC.
MOVE 'D' TO ESTADO.
VER-DNI-EXIT.
*-------------*
EXIT.
VER-EXT-MODERNO.
*----------------*
IF NUMCI NOT NUMERIC OR NUMCI = ZEROS
GO TO VER-EXT-MODERNO-EXIT.
MOVE 0 TO LETEXT-EN.
IF ELEM01 (1) = 'Y'
MOVE 1 TO LETEXT-EN.
IF ELEM01 (1) = 'Z'
MOVE 2 TO LETEXT-EN.
MOVE NUMEXT TO NUMEXT-EN.
MOVE DIGCON-EN TO NUMERO.
PERFORM CALC-DC-DNI THRU CALC-DC-DNI-EXIT.
IF ELEM01 (9) = DCLET
MOVE DCLET TO P1-DC
MOVE 'D' TO ESTADO.
VER-EXT-MODERNO-EXIT.
*---------------------*
EXIT.
VER-EXT-ANTIGUO.
*----------------*
MOVE ZEROS TO TAB02.
PERFORM ALINEAR THRU ALINEAR-EXIT.
MOVE ELEM01 (1) TO ELEM02 (1).
MOVE TAB02 TO TAB01.
IF NUMEXTA NOT NUMERIC OR NUMEXTA = ZEROS
GO TO VER-EXT-ANTIGUO-EXIT.
MOVE NUMEXTP TO NUMERO.
PERFORM CALC-DC-DNI THRU CALC-DC-DNI-EXIT.
MOVE DCLET TO P1-DC
MOVE 'D' TO ESTADO.
VER-EXT-ANTIGUO-EXIT.
*---------------------*
EXIT.
VER-T.
*------*
MOVE SPACES TO P1-DC ESTADO.
MOVE ZEROS TO TAB02.
PERFORM ALINEAR-T THRU S-ALINEAR-T.
IF ESTADO = '9' GO S-VER-T
ELSE MOVE 'D' TO ESTADO.
MOVE ELEM01 (1) TO ELEM02 (1).
MOVE TAB02 TO TAB01.
S-VER-T.
*--------*
EXIT.
VER-MENOR.
*----------*
IF ELEM01 (1) NOT = '0'
GO TO VER-MENOR-EXIT.
IF ELEM01 (2) NOT NUMERIC
GO TO VER-MENOR-EXIT.
IF ELEM01 (3) NOT NUMERIC
GO TO VER-MENOR-EXIT.
IF ELEM01 (5) NOT NUMERIC
GO TO VER-MENOR-EXIT.
IF ELEM01 (6) NOT NUMERIC
GO TO VER-MENOR-EXIT.
IF ELEM01 (8) NOT NUMERIC
GO TO VER-MENOR-EXIT.
IF ELEM01 (9) NOT NUMERIC
GO TO VER-MENOR-EXIT.
MOVE ' ' TO P1-DC.
MOVE 'D' TO ESTADO.
VER-MENOR-EXIT.
*---------------*
EXIT.
CALC-DC-CI.
*-----------*
MOVE ZEROS TO SUMAPAR SUMAIMP SUMATOT PRODUCT.
COMPUTE SUMAPAR = ELEM01P (2) + ELEM01P (4) + ELEM01P (6).
PERFORM SUMAIMPAR THRU S-SUMAIMPAR VARYING I01 FROM 1
BY 2 UNTIL I01 > 7.
COMPUTE SUMATOT = SUMAPAR + SUMAIMP.
COMPUTE RESTO = 10 - SUMT2.
MOVE TANUM (RESTO) TO DCNUM.
MOVE TADCL (RESTO) TO DCLET.
CALC-DC-CI-EXIT.
*----------------*
EXIT.
SUMAIMPAR.
*----------*
COMPUTE PRODUCT = ELEM01P (I01) * 2.
ADD PROD1 TO SUMAIMP.
ADD PROD2 TO SUMAIMP.
S-SUMAIMPAR.
*------------*
EXIT.
CALC-DC-DNI.
*------------*
DIVIDE NUMERO BY 23
GIVING COCIENTE REMAINDER RESTO.
ADD 1 TO RESTO.
MOVE LETR (RESTO) TO DCLET.
CALC-DC-DNI-EXIT.
*-----------------*
EXIT.
ALINEAR.
*--------*
MOVE 10 TO I01.
MOVE 9 TO I02.
ALINEAR-NUM.
*------------*
SUBTRACT 1 FROM I01.
IF I01 = 1
GO TO ALINEAR-EXIT.
IF ELEM01 (I01) = ' '
GO TO ALINEAR-NUM.
MOVE ELEM01 (I01) TO ELEM02 (I02).
SUBTRACT 1 FROM I02.
GO TO ALINEAR-NUM.
ALINEAR-EXIT.
*-------------*
EXIT.
ALINEAR-T.
*----------*
MOVE 10 TO I01.
MOVE 9 TO I02.
ALINEAR-NUM-T.
*--------------*
SUBTRACT 1 FROM I01.
IF I01 = 1
IF ELEM02 (2) = ZEROES AND ELEM02 (3) = ZEROES
AND ELEM02 (4) = ZEROES AND ELEM02 (5) = ZEROES
AND ELEM02 (6) = ZEROES AND ELEM02 (7) = ZEROES
AND ELEM02 (8) = ZEROES AND ELEM02 (9) = ZEROES
MOVE '9' TO ESTADO
GO S-ALINEAR-T
ELSE
GO S-ALINEAR-T.
IF ELEM01 (I01) = ' '
GO ALINEAR-NUM-T.
IF ELEM01 (I01) IS NUMERIC
MOVE ELEM01 (I01) TO ELEM02 (I02)
SUBTRACT 1 FROM I02
GO ALINEAR-NUM-T
ELSE
MOVE '9' TO ESTADO.
S-ALINEAR-T.
*------------*
EXIT.
******************************************************************
VALIDAR-NOMBRE.
*---------------*
*--RUTINA DE VALIDACION DE NOMBRE.
*--DATOS DE ENTRADA: APFINOMB-NOMBRE-E
*-- ES-UN-CIF=1 NOMBRE DE COMPA�IA
*-- ES-UN-CIF=0 NOMBRE DE PERSONA FISICA
*--DATOS DE SALIDA: SW-FORMATO=1 SI HAY ERROR DE FORMATO
*--DATOS DE SALIDA: SW-FORMATO=1 SI HAY ERROR DE FORMATO
MOVE APFINOMB-NOMBRE-E TO APFINOMB-NOM-AUX.
PERFORM PREV-APFINOMB THRU PREV-APFINOMB-E.
IF APFINOMB-RETORNO-S NOT = 0 OR
APFINOMB-NUMERO-PALABRAS-S < 2
IF ES-UN-CIF = 1
MOVE APFINOMB-NOM-AUX TO W-TABLA40
MOVE 0 TO CON-PAL SW-NUMERO
MOVE 1 TO INDCMN
PERFORM BUSCAR-PALABRAS THRU BUSCAR-PALABRAS-F
UNTIL INDCMN > 40
IF CON-PAL > 0 OR SW-NUMERO = 1
NEXT SENTENCE
ELSE
MOVE 1 TO SW-FORMATO
END-IF
ELSE
MOVE 1 TO SW-FORMATO
END-IF
END-IF.
VALIDAR-NOMBRE-E.
*-----------------*
EXIT.
PREV-APFINOMB.
*--------------*(PRINCIPAL DE APFINOMB)
*-- INICIALIZA LOS CAMPOS DE SALIDA/TRABAJO.
MOVE SPACES TO APFINOMB-NOMBRE-S
NOMBRE-T
APFINOMB-TRES-LETRAS-S
APFINOMB-VACIO.
MOVE 0 TO APFINOMB-NUMERO-PALABRAS-S
APFINOMB-RETORNO-S
INDI-2
DESDE
BLANCOS
CONTA-LETRAS
NO-MAS-LETRAS
PRIMERA-VEZ.
MOVE 1 TO INDICE.
*-- COMPRUEBA SI EL CAMPO DE ENTRADA VIENE VACIO.
IF APFINOMB-NOMBRE-E = SPACES OR LOW-VALUES
MOVE 9 TO APFINOMB-RETORNO-S
GO TO PREV-APFINOMB-E.
*-- REEMPLAZA LAS MINUSCULAS POR MAYUSCULAS, LAS COMAS POR ESPA-
* CIOS Y AJUSTA TODO EL CAMPO A LA IZQUIERDA.
* COMPRUEBA QUE NO HAY NUMEROS NI '*'.
MOVE 1 TO APFINOMB-NUMERO-PALABRAS-S.
PERFORM CAMB-AJUS THRU CAMB-AJUS-E UNTIL INDICE > 40.
*-- DEJA SOLO UN ESPACIO ENTRE LAS PALABRAS. CUENTA NUMERO DE
* PALABRAS Y NUMERO DE LETRAS DE LA PRIMERA PALABRA.
MOVE 1 TO INDICE.
MOVE 0 TO INDI-2 BLANCOS.
PERFORM DEJAUNBLANCO THRU DEJAUNBLANCO-E VARYING INDICE
FROM 1 BY 1 UNTIL INDICE > 40.
MOVE NOMBRE-T TO APFINOMB-NOMBRE-S.
IF APFINOMB-NUMERO-PALABRAS-S < 2 OR
CONTA-LETRAS < 2
MOVE 9 TO APFINOMB-RETORNO-S.
MOVE APFINOMB-LETRA-S (1) TO APFINOMB-LETRAS3 (1).
MOVE APFINOMB-LETRA-S (2) TO APFINOMB-LETRAS3 (2).
MOVE APFINOMB-LETRA-S (3) TO APFINOMB-LETRAS3 (3).
PREV-APFINOMB-E.
*----------------*
EXIT.
CAMB-AJUS.
*----------*(PERTENECE A APFINOMB)
*-- PRIMERO AJUSTA A LA IZQUIERDA.
IF PRIMERA-VEZ = 0
MOVE 1 TO PRIMERA-VEZ
MOVE 0 TO SW-YA
PERFORM VARYING INDICE FROM 1 BY 1
UNTIL INDICE > 40 OR
SW-YA = 1
IF APFINOMB-LETRA-E (INDICE) NOT = ' '
MOVE 1 TO SW-YA
END-IF
END-PERFORM
COMPUTE INDICE = INDICE - 1.
ADD 1 TO INDI-2.
MOVE APFINOMB-LETRA-E (INDICE) TO DESTINO-2.
MOVE LOW-VALUES TO DESTINO-1.
*-- TRANSFORMA LAS MINUSCULAS A MAYUSCULAS.
* . LOS CODIGOS EBCDIC DE LAS MAYUSCULAS = MINUSCULAS + 64
* . TRANSFORMA LAS MINUSCULAS ACENTUADAS A MAYUSCULAS:
* . TRANSFORMA LAS MINUSCULAS ACENTUADAS A MAYUSCULAS:
* � ... (69) ==> A ... (193)
* . CODIGO 160 (DEL PC) ==> # ... (123)
* . TRANSFORMA LAS , (107) POR UN ESPACIO (64).
IF DESTINO-C = 160
MOVE 123 TO DESTINO-C
MOVE DESTINO-2 TO APFINOMB-LETRA-S (INDI-2)
ELSE
IF DESTINO-C > 128 AND < 170
ADD 64 TO DESTINO-C
MOVE DESTINO-2 TO APFINOMB-LETRA-S (INDI-2)
ELSE
IF DESTINO-C = 106
MOVE 123 TO DESTINO-C
MOVE DESTINO-2 TO APFINOMB-LETRA-S (INDI-2)
ELSE
MOVE APFINOMB-LETRA-E (INDICE) TO APFINOMB-LETRA-S (INDI-2)
IF DESTINO-C = 69
MOVE 193 TO DESTINO-C
MOVE DESTINO-2 TO APFINOMB-LETRA-S (INDI-2)
ELSE
IF DESTINO-C = 81
MOVE 197 TO DESTINO-C
MOVE DESTINO-2 TO APFINOMB-LETRA-S (INDI-2)
ELSE
IF DESTINO-C = 85
MOVE 201 TO DESTINO-C
MOVE DESTINO-2 TO APFINOMB-LETRA-S (INDI-2)
ELSE
IF DESTINO-C = 206
MOVE 214 TO DESTINO-C
MOVE DESTINO-2 TO APFINOMB-LETRA-S (INDI-2)
ELSE
IF DESTINO-C = 222
MOVE 228 TO DESTINO-C
MOVE DESTINO-2 TO APFINOMB-LETRA-S (INDI-2)
ELSE
IF DESTINO-C = 107
MOVE ' ' TO APFINOMB-LETRA-S (INDI-2)
ELSE
MOVE APFINOMB-LETRA-E (INDICE) TO APFINOMB-LETRA-S (INDI-2)
IF APFINOMB-LETRA-E (INDICE) IS NUMERIC OR
APFINOMB-LETRA-E (INDICE) = '*' OR
APFINOMB-LETRA-E (INDICE) = '+'
MOVE 9 TO APFINOMB-RETORNO-S.
ADD 1 TO INDICE.
CAMB-AJUS-E.
*------------*(PERTENECE A APFINOMB)
EXIT.
DEJAUNBLANCO.
*------------*(PERTENECE A APFINOMB)
*-- SOLO CUENTA LETRAS DE LA PRIMERA PALABRA. CUANDO ENCUENTRA
* EL PRIMER BLANCO CAMBIA EL VALOR DEL SWITCH NO-MAS-LETRAS
* PARA NO SUMAR A CONTA-LETRAS.
IF APFINOMB-LETRA-S (INDICE) = ' '
ADD 1 TO BLANCOS
MOVE 1 TO NO-MAS-LETRAS
ELSE
IF BLANCOS > 0
ADD 1 TO APFINOMB-NUMERO-PALABRAS-S
MOVE 0 TO BLANCOS
IF NO-MAS-LETRAS = 0
ADD 1 TO CONTA-LETRAS
ELSE
NEXT SENTENCE
ELSE
MOVE 0 TO BLANCOS
IF NO-MAS-LETRAS = 0
ADD 1 TO CONTA-LETRAS.
*-- BLANCOS ES UN CONTADOR DE ESPACIOS. SI ES 1 MUEVE AL CAMPO
* DESTINO (LETRA-T) YA QUE TIENE QUE DEJAR UN ESPACIO ENTRE
* CADA PALABRA. SI ES 0 MUEVE CADA UNA DE LAS LETRAS AL CAMPO
* DESTINO.
* SI ES MAYOR DE UNO, NO MUEVE NADA.
IF BLANCOS > 1
NEXT SENTENCE
ELSE
ADD 1 TO INDI-2
MOVE APFINOMB-LETRA-S (INDICE) TO LETRA-T (INDI-2).
DEJAUNBLANCO-E.
*--------------*(PERTENECE A APFINOMB)
EXIT.
******************************************************************
******************************************************************
*--- RUTINAS PARA CONTAR LAS PALABRAS DEL CAMPO APELLIDOS Y NOMBRE
*--- SI ES UN C.I.
******************************************************************
BUSCAR-PALABRAS.
*---------------*
MOVE 0 TO SW-YA.
PERFORM SIG-PAL THRU SIG-PAL-F UNTIL
SW-YA = 1 OR INDCMN > 40.
IF INDCMN < 41
COMPUTE INDCMN = INDCMN - 1
END-IF.
MOVE 0 TO SW-YA.
IF INDCMN < 41
PERFORM SIG-PAL2 THRU SIG-PAL2-F UNTIL
SW-YA = 1 OR INDCMN > 40.
IF INDCMN < 41
COMPUTE INDCMN = INDCMN - 1
END-IF.
IF INDCMN < 41
ADD 1 TO INDCMN
CON-PAL.
BUSCAR-PALABRAS-F.
*------------------*
EXIT.
SIG-PAL.
*--------*
IF E-TABLA40 (INDCMN) IS NUMERIC
MOVE 1 TO SW-NUMERO.
IF E-TABLA40 (INDCMN) NOT = ' ' AND NOT = '*'
MOVE 1 TO SW-YA.
ADD 1 TO INDCMN.
SIG-PAL-F.
*----------*
EXIT.
SIG-PAL2.
*--------*
IF E-TABLA40 (INDCMN) IS NUMERIC
MOVE 1 TO SW-NUMERO.
IF E-TABLA40 (INDCMN) = ' '
MOVE 1 TO SW-YA.
ADD 1 TO INDCMN.
SIG-PAL2-F.
*----------*
EXIT.
******************************************************************
******************************************************************
PROPAGACION.
*------------*(GIRCZ01S)
*--ENTRAN: TABLA DE ERRORES PROPIOS ANTIGUA (ERRPROP-AUX-2)
* TABLA DE ERRORES PROPIOS ACTUAL (ERRPROP-AUX)
* TABLA DE ERRORES ACUMULADOS (ERRACUM-AUX)
*--SE UTILIZA UNA TABLA DE TRABAJO AUXILIAR (ERRPROP-TJO)
*--SI LA TABLA ANTIGUA VIENE CON CONTENIDO, SE DESPROPAGA,
*--SE AJUSTA LA TABLA DE ERRORES ACUMULADOS.
*--TRAS ESTO, SI VIENE CONTENIDO EN LA TABLA ACTUAL, SE PROPAGA
INITIALIZE ERRPROP-TJO.
IF CAMPO-2(1) NOT = 0
MOVE ERRPROP-AUX-2 TO ERRPROP-TJO
MOVE 'D' TO SW-PROPAGACION
PERFORM BUSCAR THRU BUSCAR-E
PERFORM AJUSTABLA THRU AJUSTABLA-E.
IF CAMPO(1) NOT = 0
MOVE ERRPROP-AUX TO ERRPROP-TJO
MOVE 'P' TO SW-PROPAGACION
PERFORM BUSCAR THRU BUSCAR-E.
PROPAGACION-E.
*--------------*
EXIT.
BUSCAR.
*-------*
MOVE 0 TO FIN-ERRORES.
PERFORM VARYING IEP FROM 1 BY 1 UNTIL FIN-ERRORES = 1
IF CAMPO-TJO(IEP) NOT = 0
PERFORM MARCAR-ACUMULADO THRU MARCAR-ACUMULADO-E
ELSE
MOVE 1 TO FIN-ERRORES
END-IF
END-PERFORM.
BUSCAR-E.
*---------*
EXIT.
MARCAR-ACUMULADO.
*-----------------*
MOVE 0 TO SW-ENCONTRADO.
PERFORM VARYING IEAUX FROM 1 BY 1 UNTIL SW-ENCONTRADO = 1
OR IEAUX > 90
IF CAMPO-TJO(IEP) = CAMACU-X(IEAUX) AND
ERROR-TJO(IEP) = ERRACU-X(IEAUX)
MOVE 1 TO SW-ENCONTRADO
IF SW-PROPAGACION = 'D'
COMPUTE CONACU-X(IEAUX) = CONACU-X(IEAUX)
ELSE
IF SW-PROPAGACION = 'P'
ADD 1 TO CONACU-X(IEAUX)
END-IF
END-IF
ELSE
IF SW-PROPAGACION = 'P'
IF CAMACU-X(IEAUX) = 0
MOVE 1 TO SW-ENCONTRADO
MOVE CAMPO-TJO(IEP) TO CAMACU-X(IEAUX)
MOVE ERROR-TJO(IEP) TO ERRACU-X(IEAUX)
MOVE 1 TO CONACU-X(IEAUX)
END-IF
END-IF
END-IF
END-PERFORM.
MARCAR-ACUMULADO-E.
*-------------------*
EXIT.
AJUSTABLA.
*----------*
*--SI SE HA DESMARCADO ALGUN ERROR, REORDENAMOS LA TABLA--*
INITIALIZE ERRACUM-IMP IEP.
PERFORM VARYING IEAUX FROM 1 BY 1 UNTIL IEAUX > 40
IF CONACU-X(IEAUX) NOT = 0
ADD 1 TO IEP
MOVE CAMACU-X(IEAUX) TO CAMACU(IEP)
MOVE ERRACU-X(IEAUX) TO ERRACU(IEP)
MOVE CONACU-X(IEAUX) TO CONACU(IEP)
END-IF
END-PERFORM.
MOVE ERRACUM-IMP TO ERRACUM-AUX.
AJUSTABLA-E.
*------------*
EXIT.
******************************************************************
CUADRAR-TIPO1.
*--------------*(GIRCR03S)
*--DATOS DE COMUNICACION:
*-- RESPUESTA : '0' BIEN '9' MAL (CICS)
*-- TABLA DE ERRORES PROPIOS DE TIPO 1
*-- TOTAL PERCEPTORES CALCULADOS
*-- TOTAL PERCEPTORES DECLARADOS
*-- TOTAL PERCEPCIONES CALCULADAS
*-- TOTAL PERCEPCIONES DECLARADAS
*-- SIGNO DE PERCEPCIONES DECLARADAS
*-- TOTAL RETENCIONES CALCULADAS
*-- TOTAL RETENCIONES DECLARADAS
*--WORKING:
*-- W-M349-1-TOTOPERA : NUMERO TOTAL DE PARTICIPES
*-- W-M349-1-TOTOPERA-N: REDEFINIR NUMERICO
*-- M349-1-TOTIMPOPE : IMPORTE DE LAS OPERACIONES
*-- M349-1-TOTIMPOPE-N : REDEFINIR NUMERICO
*-- W-M349-1-TOTOPEREC : NUMERO TOTAL DE INMUEBLES
*-- W-M349-1-TOTOPEREC-N: REDEFINIR NUMERICO
*-- W-M349-TOTIMPRECT : TOTAL INMUEBLES
*-- M349-1-TOTIMPRECT : TOTAL INMUEBLES
*-- M349-1-TOTIMPRECT-N : REDEFINIR NUMERICO
*-- IEP1 : INDICE PARA LA TABLA DE ERRORES
*-- IEP : INDICE PARA LA TABLA DE ERRORES
*-- AUXILIAR
*-- ERRPROP-AUX : TABLA DE ERRORES AUXILIAR
*-- AUX-IMPORTE : PARA OPERACIONES CON IMPORTES
*-- SW-C13T1 : INDICADOR DE ERROR EN CAMPO 12
*-- SW-C14T1 : INDICADOR DE ERROR EN CAMPO 13
*-- SW-C15T1 : INDICADOR DE ERROR EN CAMPO 14
*-- SW-C16T1 : INDICADOR DE ERROR EN CAMPO 15
*--BUSCAMOS LA PRIMERA OCURRENCIA VACIA DE LA TABLA--*
*--Y ACTIVAMOS LOS SWITCHES DE EXISTENCIA DE ERROR--*
MOVE 0 TO SW-YA
PERFORM VARYING IEP1 FROM 1 BY 1 UNTIL IEP1 > 40 OR
SW-YA = 1
IF CAMPO1(IEP1) = 13 MOVE 1 TO SW-C13T1 END-IF
IF CAMPO1(IEP1) = 14 MOVE 1 TO SW-C14T1 END-IF
IF CAMPO1(IEP1) = 15 MOVE 1 TO SW-C15T1 END-IF
IF CAMPO1(IEP1) = 16 MOVE 1 TO SW-C16T1 END-IF
IF CAMPO1(IEP1) = 0
MOVE 1 TO SW-YA
COMPUTE IEP1 = IEP1 - 1
END-IF
END-PERFORM.
COMPUTE IEP1 = IEP1 - 1.
MOVE 0 TO SW-DESMARCADO.
*--TOTAL OPERACIONES--*
IF SW-C13T1 = 0
IF M349-1-TOTOPERA IS NUMERIC
IF M349-1-TOTOPERA-N > W-M349-1-TOTOPERA-N
ADD 1 TO IEP1
MOVE 13 TO CAMPO1(IEP1)
MOVE 10 TO ERROR1(IEP1)
ELSE
IF M349-1-TOTOPERA-N < W-M349-1-TOTOPERA-N
ADD 1 TO IEP1
MOVE 13 TO CAMPO1(IEP1)
MOVE 09 TO ERROR1(IEP1)
ELSE
*--DESMARCAMOS EL ERROR SI EXISTE--*
MOVE IEP1 TO IEP
PERFORM VARYING IEP1 FROM 1 BY 1 UNTIL IEP1 > 40
IF CAMPO1(IEP1) = 13 AND (ERROR1(IEP1) = 09 OR 10)
MOVE 1 TO SW-DESMARCADO
MOVE 0 TO CAMPO1(IEP1) ERROR1(IEP1)
END-IF
END-PERFORM
MOVE IEP TO IEP1.
*--IMPORTE DE LAS OPERACIONES--*
IF SW-C14T1 = 0
IF M349-1-TOTIMPOPE-N IS NUMERIC
IF M349-1-TOTIMPOPE-N NOT = W-M349-1-TOTIMPOPE-N
ADD 1 TO IEP1
MOVE 14 TO CAMPO1(IEP1)
MOVE 11 TO ERROR1(IEP1)
ELSE
*--DESMARCAMOS EL ERROR SI EXISTE--*
MOVE IEP1 TO IEP
PERFORM VARYING IEP1 FROM 1 BY 1 UNTIL IEP1 > 40
IF CAMPO1(IEP1) = 14 AND ERROR1(IEP1) = 11
MOVE 1 TO SW-DESMARCADO
MOVE 0 TO CAMPO1(IEP1) ERROR1(IEP1)
END-IF
END-PERFORM
MOVE IEP TO IEP1.
*--TOTAL OPERACIONES RECTIFICADAS--*
IF SW-C15T1 = 0
IF M349-1-TOTOPEREC IS NUMERIC
IF M349-1-TOTOPEREC-N > W-M349-1-TOTOPEREC-N
ADD 1 TO IEP1
MOVE 15 TO CAMPO1(IEP1)
MOVE 10 TO ERROR1(IEP1)
ELSE
IF M349-1-TOTOPEREC-N < W-M349-1-TOTOPEREC-N
ADD 1 TO IEP1
MOVE 15 TO CAMPO1(IEP1)
MOVE 09 TO ERROR1(IEP1)
ELSE
*--DESMARCAMOS EL ERROR SI EXISTE--*
MOVE IEP1 TO IEP
PERFORM VARYING IEP1 FROM 1 BY 1 UNTIL IEP1 > 40
IF CAMPO1(IEP1) = 15 AND (ERROR1(IEP1) = 09 OR 10)
MOVE 1 TO SW-DESMARCADO
MOVE 0 TO CAMPO1(IEP1) ERROR1(IEP1)
END-IF
END-PERFORM
MOVE IEP TO IEP1.
*--TOTAL IMPORTE OPERAC. RECTIFICADAS ---*
IF SW-C16T1 = 0
IF M349-1-TOTIMPRECT-N IS NUMERIC
MOVE M349-1-TOTIMPRECT-N TO AUX-IMPORTE
IF W-M349-1-TOTIMPRECT-N NOT = AUX-IMPORTE
ADD 1 TO IEP1
MOVE 16 TO CAMPO1(IEP1)
MOVE 11 TO ERROR1(IEP1)
ELSE
*--DESMARCAMOS EL ERROR SI EXISTE--*
MOVE IEP1 TO IEP
PERFORM VARYING IEP1 FROM 1 BY 1 UNTIL IEP1 > 40
IF CAMPO1(IEP1) = 16 AND ERROR1(IEP1) = 11
MOVE 1 TO SW-DESMARCADO
MOVE 0 TO CAMPO1(IEP1) ERROR1(IEP1)
END-IF
END-PERFORM
MOVE IEP TO IEP1.
*--SI SE HA DESMARCADO ALGUN ERROR, REORDENAMOS LA TABLA--*
IF SW-DESMARCADO = 1
INITIALIZE ERRPROP-AUX IEP
PERFORM VARYING IEP1 FROM 1 BY 1 UNTIL IEP1 > 40
IF CAMPO1(IEP1) NOT = 0
ADD 1 TO IEP
MOVE CAMPO1(IEP1) TO CAMPO(IEP)
MOVE ERROR1(IEP1) TO ERROR-X(IEP)
END-IF
END-PERFORM
MOVE ERRPROP-AUX TO ERRPROP1.
CUADRAR-TIPO1-E.
*----------------*
EXIT.
PINTA-ERROR.
*-------------*
INITIALIZE D2-TIP1 D2-ERR1 D2-CON1
D2-TIP2 D2-ERR2 D2-CON2
D2-TIP3 D2-ERR3 D2-CON3.
IF CAMACU(IEA) NOT = 0
EVALUATE SW-D2-TIP
WHEN 0
MOVE 0 TO D2-TIP1
WHEN 1
MOVE 1 TO D2-TIP1
WHEN 2
MOVE 2 TO D2-TIP1
END-EVALUATE
MOVE CAMACU(IEA) TO D2-ERR1-CAMPO
MOVE ERRACU(IEA) TO D2-ERR1-ERROR
MOVE CONACU(IEA) TO D2-CON1
IF CAMACU(IEA + 1) NOT = 0
EVALUATE SW-D2-TIP
WHEN 0
MOVE 0 TO D2-TIP2
WHEN 1
MOVE 1 TO D2-TIP2
WHEN 2
MOVE 2 TO D2-TIP2
END-EVALUATE
MOVE CAMACU(IEA + 1) TO D2-ERR2-CAMPO
MOVE ERRACU(IEA + 1) TO D2-ERR2-ERROR
MOVE CONACU(IEA + 1) TO D2-CON2
IF CAMACU(IEA + 2) NOT = 0
EVALUATE SW-D2-TIP
WHEN 0
MOVE 0 TO D2-TIP3
WHEN 1
MOVE 1 TO D2-TIP3
WHEN 2
MOVE 2 TO D2-TIP3
END-EVALUATE
MOVE CAMACU(IEA + 2) TO D2-ERR3-CAMPO
MOVE ERRACU(IEA + 2) TO D2-ERR3-ERROR
MOVE CONACU(IEA + 2) TO D2-CON3
ELSE
MOVE 1 TO NO-HAY-MAS
END-IF
ELSE
MOVE 1 TO NO-HAY-MAS
END-IF
ELSE
MOVE 1 TO NO-HAY-MAS
END-IF.
IF CAMACU(IEA) NOT = 0
IF CAMACU(IEA + 1) = 0
MOVE SPACES TO D2-TIP2-X
MOVE SPACES TO D2-CON2-X
END-IF
IF CAMACU(IEA + 2) = 0
MOVE SPACES TO D2-TIP3-X
MOVE SPACES TO D2-CON3-X
END-IF
WRITE LINEA FROM DET2 AFTER 1
ADD 1 TO CONTA-LINEAS.
******************************************************************
IMPRIMIR1.
*----------*
ADD 1 TO CONTA-PAGINAS.
MOVE MCMN-1-MOD TO D1-MOD1.
MOVE MCMN-1-EJER TO D1-EJER1.
MOVE MCMN-1-NIF TO D1-NIF1.
MOVE MCMN-1-NOM TO D1-NOM1.
MOVE MCMN-1-JUST TO D1-JUS1.
*--- TOTAL DE OPERADORES INTRACOMUNITARIOS
IF M349-1-TOTOPERA IS NUMERIC
MOVE M349-1-TOTOPERA-N TO C-RET1
COMPUTE C-DIF3 = M349-1-TOTOPERA-N
- W-M349-1-TOTOPERA-N
IF C-DIF3-X = ' 0'
MOVE ' ' TO C-ERR3
ELSE
MOVE '*' TO C-ERR3
END-IF
ELSE
MOVE M349-1-TOTOPERA TO C-RET1-X
MOVE 0 TO C-DIF3
MOVE '*' TO C-ERR3
END-IF.
MOVE W-M349-1-TOTOPERA TO C-RET2.
*----IMPORTE OPERACIONES INTRACOMUNITARIAS
IF M349-1-TOTIMPOPE IS NUMERIC
COMPUTE DECIMAL-OPER1 = M349-1-TOTIMPOPE-N / 100
COMPUTE DECIMAL-OPER2 = W-M349-1-TOTIMPOPE-N / 100
MOVE DECIMAL-OPER1 TO C-IRET1-E
MOVE DECIMAL-OPER2 TO C-IRET2-E
COMPUTE DECIMAL-OPER3 = DECIMAL-OPER1 - DECIMAL-OPER2
*
IF DECIMAL-OPER3 = 0
MOVE SPACES TO C-ERR4-E
MOVE DECIMAL-OPER3 TO C-DIF4-E
ELSE
MOVE '*' TO C-ERR4-E
MOVE DECIMAL-OPER3 TO C-DIF4-E
END-IF
ELSE
MOVE M349-1-TOTIMPOPE TO C-IRET1-X-E
MOVE 0 TO C-DIF4-E
MOVE '*' TO C-ERR4-E
END-IF
*--- TOTAL DE OPERADORES INTRACOMUNITARIOS RECTIFICADOS
IF M349-1-TOTOPEREC IS NUMERIC
MOVE M349-1-TOTOPEREC-N TO C-INM1
COMPUTE C-DIF6 = M349-1-TOTOPEREC-N
- W-M349-1-TOTOPEREC-N
IF C-DIF6-X = ' 0'
MOVE ' ' TO C-ERR6
ELSE
MOVE '*' TO C-ERR6
END-IF
ELSE
MOVE M349-1-TOTOPEREC TO C-INM1-X
MOVE 0 TO C-DIF6
MOVE '*' TO C-ERR6
END-IF.
MOVE W-M349-1-TOTOPEREC TO C-INM2.
*----IMPORTE DE LAS OPERACIONES RECTIFICADAS
IF M349-1-TOTIMPRECT IS NUMERIC
COMPUTE DECIMAL-OPRECT1 = M349-1-TOTIMPRECT-N / 100
COMPUTE DECIMAL-OPRECT2 = W-M349-1-TOTIMPRECT-N / 100
MOVE DECIMAL-OPRECT1 TO C-IIINMUEB1-E
MOVE DECIMAL-OPRECT2 TO C-IIINMUEB2-E
COMPUTE DECIMAL-OPRECT3 = DECIMAL-OPRECT1 -
DECIMAL-OPRECT2
*
IF DECIMAL-OPRECT3 = 0
MOVE SPACES TO C-ERR5-E
MOVE DECIMAL-OPRECT3 TO C-DIF5-E
ELSE
MOVE '*' TO C-ERR5-E
MOVE DECIMAL-OPRECT3 TO C-DIF5-E
END-IF
ELSE
MOVE M349-1-TOTIMPRECT TO C-IIINMUEB1-X-E
MOVE 0 TO C-DIF5-E
MOVE '*' TO C-ERR5-E
END-IF.
PERFORM PINTAR-CABECERA THRU PINTAR-CABECERA-E.
WRITE LINEA FROM C5-BIS AFTER 2.
WRITE LINEA FROM C6-BIS AFTER 2.
WRITE LINEA FROM C7-BIS AFTER 1.
WRITE LINEA FROM DET1-BIS AFTER 1.
WRITE LINEA FROM C8-BIS AFTER 2.
WRITE LINEA FROM C9 AFTER 1.
WRITE LINEA FROM C10-BIS AFTER 1.
WRITE LINEA FROM C11-BIS AFTER 2.
WRITE LINEA FROM C12-EURO AFTER 2
WRITE LINEA FROM C13-BIS AFTER 2.
WRITE LINEA FROM C13-BIS2-EURO AFTER 2
WRITE LINEA FROM C14 AFTER 5.
WRITE LINEA FROM C15-BIS AFTER 1.
WRITE LINEA FROM C14 AFTER 1.
WRITE LINEA FROM C16 AFTER 1.
WRITE LINEA FROM C17 AFTER 1.
MOVE 1 TO CONTA-LINEAS.
MOVE 0 TO NO-HAY-MAS.
MOVE 2 TO SW-D2-TIP.
MOVE ERRACUM1 TO ERRACUM-IMP.
PERFORM PINTA-ERROR VARYING IEA FROM 1 BY 3
UNTIL NO-HAY-MAS = 1 OR IEA > 87
OR CONTA-LINEAS > 35.
IF CONTA-LINEAS NOT > 35
MOVE 0 TO NO-HAY-MAS
MOVE 1 TO SW-D2-TIP
PERFORM VARYING IMP FROM 1 BY 1 UNTIL IMP > 90
IF IMP > 40
MOVE 0 TO CAMACU(IMP)
MOVE 0 TO ERRACU(IMP)
MOVE 0 TO CONACU(IMP)
ELSE
MOVE CAMPO1(IMP) TO CAMACU(IMP)
MOVE ERROR1(IMP) TO ERRACU(IMP)
MOVE 1 TO CONACU(IMP)
END-IF
END-PERFORM
PERFORM PINTA-ERROR VARYING IEA FROM 1 BY 3
UNTIL NO-HAY-MAS = 1 OR IEA > 87
OR CONTA-LINEAS > 35.
IF CONTA-LINEAS = 1
WRITE LINEA FROM DET3 AFTER 10
WRITE LINEA FROM DET4 AFTER 1
WRITE LINEA FROM DET3 AFTER 1
ELSE
IF CONTA-LINEAS < 28
WRITE LINEA FROM DET3 AFTER 8
WRITE LINEA FROM DET5 AFTER 1
WRITE LINEA FROM DET3 AFTER 1
ELSE
WRITE LINEA FROM DET3 AFTER 2
WRITE LINEA FROM DET5 AFTER 1
WRITE LINEA FROM DET3 AFTER 1.
IMPRIMIR1-E.
*------------*
EXIT.
******************************************************************
PINTAR-CABECERA.
*----------------*
*--HAY QUE MOVER LA FECHA.
ACCEPT WCURRENT-DATE FROM DATE.
IF FED-ANO < 50
MOVE 20 TO FED-SIGL
ELSE
MOVE 19 TO FED-SIGL.
MOVE FED-ANIO TO C-ANIO.
MOVE FED-MES TO C-MES.
MOVE FED-DIA TO C-DIA.
MOVE EJER-ACTUAL TO C-ANIOEJ.
MOVE M349-1-PERIODO TO C-PERIODO
MOVE CONTA-PAGINAS TO C-PAGINA.
WRITE LINEA FROM C1 AFTER PAGE.
WRITE LINEA FROM C2 AFTER 1.
WRITE LINEA FROM C3 AFTER 1.
WRITE LINEA FROM C4 AFTER 1.
PINTAR-CABECERA-E.
*------------------*
EXIT.
******************************************************************
ESCRIBIR-SALIDA.
*----------------*
WRITE REG-SALIDA FROM REGISTRO-SALIDA.
IF ST-SALIDA NOT = '00'
DISPLAY 'ERROR AL ESCRIBIR EL FICHERO DE SALIDA. ERROR '
ST-SALIDA
GO TO FIN.
ESCRIBIR-SALIDA-E.
*------------------*
EXIT.
******************************************************************
VALIDAR-NIF-VICENVAT.
*---------------------*
MOVE 'R-VALIDAR-NVAT' TO W-PARRAFO.
*--
*--CALCULAR LONGITUD DE ENTRADA--
PERFORM VARYING W-LON-ENTRADA FROM 1 BY 1
UNTIL W-LON-ENTRADA > 15 OR
T-NVAT(W-LON-ENTRADA) = ' '
END-PERFORM.
SUBTRACT 1 FROM W-LON-ENTRADA
*--
*--BUSCAR PAIS EN TABLA--
PERFORM VARYING W-FILA FROM 1 BY 1
UNTIL W-FILA > 28 OR
W-COD-PAIS(W-FILA) = E-PAIS
END-PERFORM
IF W-FILA > 28
MOVE 1 TO S-CODIGO-ERROR
END-IF
*--
*
*--BUSCAR LONGITUD MINIMA A VALIDAR--
PERFORM VARYING W-COLUMNA FROM 1 BY 1
UNTIL W-COLUMNA > W-MAX-IND(W-FILA) OR
W-LON-NVAT(W-FILA, W-COLUMNA) >= W-LON-ENTRADA
END-PERFORM
IF W-COLUMNA > W-MAX-IND(W-FILA)
MOVE 2 TO S-CODIGO-ERROR
END-IF
MOVE 1 TO S-CODIGO-ERROR.
*
VALIDAR-NIF-VICENVAT-E.
*-----------------------*
EXIT.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment