Configuración del transcodificador

Para configurar el transcodificador de Mainframe Connector, agrega la configuración requerida en un archivo JSON. Este archivo se conoce como el archivo de configuración del transcodificador. Debes definir la configuración como se especifica en la sección Configuración. Los comandos qsam encode y qsam decode usan el archivo de configuración de la transcodificación para realizar la transcodificación de datos.

En esta página, se describen las diversas formas en las que puedes configurar el transcodificador de Mainframe Connector.

Configuración

El objeto Configuration es la raíz de la configuración del Transcoder. Contiene todas las opciones de configuración del transcodificador.

Representación JSON
{
    "defaults": object (DefaultsSection),
    "field_overrides": object (FieldOverride),
    "field_suffixes": object (FieldSuffix),
    "header_records_to_skip": long,
    "record_filter_condition": string,
    "schema_validation_mode": enum (SchemaValidationMode),
    "transformations": object (Transformation)
}
Campos
defaults

object (DefaultsSection)

Especifica modificadores de campo predeterminados para los arquetipos de Cobol.

field_overrides

object (FieldOverride)

Especifica las anulaciones de campos.

field_suffixes

object (FieldSuffix)

Especifica sufijos de campo.

header_records_to_skip

long

Especifica la cantidad de primeros registros que se omitirán.

record_filter_condition

string

Especifica una condición de filtro para los registros.

El filtro se basa en un subconjunto de Common Expression Language (CEL) y admite lo siguiente:

  • Acceso a campos: Se puede hacer referencia a los campos por nombre. Para los campos anidados, usa la notación de puntos (p.ej., PARENT.CHILD).
  • Operadores de comparación: `==`, `!=`, `<`, `<=`, `>`, `>=`.
  • Operadores lógicos: `&&` (AND), `||` (OR), `!` (NOT).
  • Contención de lista: `in` (comprueba si un valor está presente en una lista).
  • Operadores aritméticos: `+`, `-`, `*`, `/`, `%`.
  • Funciones de cadena y lista:
    • size(): Devuelve la longitud de una cadena o lista.
    • contains(substring): Verifica si una cadena contiene una subcadena especificada.
    • startsWith(prefix): Verifica si una cadena comienza con un prefijo especificado.
    • endsWith(suffix): Verifica si una cadena termina con un sufijo especificado.
  • Constantes de fecha y marca de tiempo:
    • date(string): Analiza una fecha en formato ISO (AAAA-MM-DD). P. ej., date('2025-01-12').
    • date(string, format): Analiza una fecha con un formato personalizado. P. ej., date('12/01/2025', 'dd/MM/yyyy').
    • timestamp(string): Analiza una marca de tiempo en formato ISO. P. ej., timestamp('1999-05-03T02:34:00Z').
Las comparaciones y operaciones se deben realizar entre variables o constantes de los mismos tipos de datos o de tipos de datos compatibles (p.ej., comparar números de punto flotante o usar constantes de fecha/marca de tiempo para campos de fecha/marca de tiempo).

Ejemplo:

"record_filter_condition": "(ACCOUNT-GRP.DATE > date('2025-01-12') ) && ((SCORE_A + SCORE_B) > 134) && FLD-STR.startsWith('HE')"

schema_validation_mode

enum (SchemaValidationMode)

Especifica el modo de validación del esquema.

transformations

object (Transformation)

Especifica las transformaciones de campo.

DefaultsSection

El objeto DefaultsSection se puede usar para especificar modificaciones predeterminadas por tipos de COBOL. Se aplican antes de cualquier modificación de sufijo o anulación.

Representación JSON
{
    "alpha_numeric_display": object (FieldModifier),
    "binary": object (FieldModifier),
    "dbcs": object (FieldModifier),
    "hexadecimal_floating_point": object (FieldModifier),
    "national": object (FieldModifier),
    "numeric_display": object (FieldModifier),
    "packed_decimal": object (FieldModifier),
    "utf8": object (FieldModifier)
}
Campos
alpha_numeric_display

object (FieldModifier)

Especifica los valores predeterminados para los campos alfanuméricos (PIC X).

binary

object (FieldModifier)

Especifica los valores predeterminados para los campos de números binarios (COMP).

dbcs

object (FieldModifier)

Es el valor predeterminado para los campos dbcs (DISPLAY-1).

hexadecimal_floating_point

object (FieldModifier)

Es el valor predeterminado para los campos de punto flotante hexadecimal (COMP-1, COMP-2).

national

object (FieldModifier)

Especifica los valores predeterminados para los campos nacionales (PIC N).

numeric_display

object (FieldModifier)

Especifica los valores predeterminados para los campos de visualización numérica (decimal con zona).

packed_decimal

object (FieldModifier)

Especifica los valores predeterminados para los campos decimales empaquetados (COMP-3).

utf8

object (FieldModifier)

Especifica los valores predeterminados para los campos UTF-8 (PIC U).

FieldModifier

Un modificador de campo te permite modificar la codificación o decodificación de un campo específico. Ten en cuenta que no todos los modificadores se pueden aplicar a todos los campos. Consulta la documentación de los modificadores específicos para obtener más información.

Representación JSON
{
    "binary": object (Binary),
    "bytes": object (Bytes),
    "chain": object (ModifierChain),
    "decode_as_null": object (DecodeAsNull),
    "encode_null_as": object (EncodeNullAs),
    "filler": object (Filler),
    "format_date": object (FormatDate),
    "format_timestamp": object (FormatTimestamp),
    "hfp": object (HFP),
    "null_if": object (NullIf),
    "null_if_empty": object (NullIfEmpty),
    "null_if_invalid": object (NullIfInvalid),
    "packed_decimal": object (PackedDecimal),
    "string": object (String),
    "varlen": object (VarLen),
    "zoned_decimal": object (ZonedDecimal)
}
Campos
binary

object (Binary)

Anula la configuración predeterminada para los campos numéricos binarios.

bytes

object (Bytes)

Trata el campo como una secuencia de bytes sin procesar, ignorando la información de tipo anterior.

chain

object (ModifierChain)

Encadena varios modificadores para que se apliquen de forma secuencial.

decode_as_null

object (DecodeAsNull)

Define cómo se deben decodificar los valores nulos.

encode_null_as

object (EncodeNullAs)

Define cómo se deben codificar los valores nulos.

filler

object (Filler)

Excluye el campo del procesamiento y el resultado.

format_date

object (FormatDate)

Asigna el formato de fecha a un campo de cadena.

format_timestamp

object (FormatTimestamp)

Asigna el formato de marca de tiempo a un campo de cadena.

hfp

object (HFP)

Interpreta el campo como un número de punto flotante hexadecimal (HFP).

null_if

object (NullIf)

Establece de forma condicional el campo como nulo según el valor de otro campo.

null_if_empty

object (NullIfEmpty)

Establece el campo como nulo si su contenido se considera vacío.

null_if_invalid

object (NullIfInvalid)

Establece el campo como nulo si se produce un error de transcodificación, lo que evita el desbordamiento de registros.

packed_decimal

object (PackedDecimal)

Anula la configuración predeterminada para los campos decimales empaquetados.

string

object (String)

Anula la configuración predeterminada para los campos de cadena.

varlen

object (VarLen)

Establece el registro como un campo de longitud variable.

zoned_decimal

object (ZonedDecimal)

Anula la configuración predeterminada para los campos decimales con zona.

Objeto binario

Ignora los modificadores anteriores y trata este campo como un número binario.

Representación JSON
{
    "signedness": enum (BinarySignedness)
}
Campos
signedness

enum (BinarySignedness)

La presencia de signo del número.

Bytes

Trata el campo como una secuencia de bytes sin procesar. Este modificador anula cualquier información de tipo anterior, lo que hace que los datos de bytes sin procesar del campo se conserven tal como están, sin una codificación de caracteres o interpretación numérica específicas. Puedes aplicar este modificador a cualquier campo, independientemente de su tipo o tamaño original.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

DecodeAsNull

Define cómo se interpretan los valores nulos durante el proceso de decodificación. Como COBOL no admite valores nulos de forma nativa, este parámetro especifica qué valores se deben tratar como nulos.

Representación JSON
{
    "hex_bytes": string,
    "values": string
}
Campos
hex_bytes

string

Es una lista de representaciones hexadecimales de un solo byte. Cuando un campo contiene repeticiones de cualquiera de estos bytes, se trata como nulo. Por ejemplo, usar FF para todos los valores altos y 00 para todos los valores bajos (vacío).

values

string

Es una lista de representaciones de cadenas. Después de la decodificación inicial del campo a su formato de cadena, si el contenido del campo coincide con cualquiera de estos valores, se tratará como nulo.

EncodeNullAs

Define cómo se representan los valores nulos durante el proceso de codificación.

Representación JSON
{
    "hex_byte": string,
    "value": string
}
Campos
hex_byte

string

Codifica esta secuencia de bytes específica (representada como una cadena hexadecimal) cuando el valor de origen sea nulo. Por ejemplo, FF para un campo de dos bytes con valores altos. Puedes aplicar esto a cualquier campo con un tamaño conocido. Los bytes se repiten para que coincidan con el tamaño del campo subyacente.

value

string

Codifica este valor específico cuando el valor de origen sea nulo. Verifica que la cadena sea válida para el tipo de campo.

Relleno

Especifica que se ignorará un campo durante el procesamiento. El campo no se decodificará de la entrada ni se codificará en la salida, y se excluirá del esquema y de la tabla de datos resultantes durante la decodificación. Puedes aplicar este modificador a cualquier campo que tenga un tamaño estático conocido.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

FormatDate

Asigna un formato de fecha a un campo de cadena o numérico con uno de los formatos admitidos. Solo puedes aplicar este modificador a los campos con tamaño. En el caso de los campos numéricos, se convierten de forma dinámica en su representación de cadena (sin incluir ningún marcador de signo) antes de aplicar el formato. Se supone que los valores de fecha son positivos; no se admiten las fechas numéricas negativas y no se podrán analizar. Durante el proceso de decodificación, se prueban los formatos en orden hasta que uno de ellos coincida con la cadena. Durante el proceso de codificación, se usa el primer formato y se ignoran los demás.

Representación JSON
{
    "formats": object (DateTimeFormat)
}
Campos
formats

object (DateTimeFormat)

Lista de formatos de fecha.

DateTimeFormat

Es el tamaño y el patrón que se usarán cuando se convierta el campo en una fecha.

Representación JSON
{
    "pattern": string,
    "size": int
}
Campos
pattern

string

Especifica el patrón del formateador de fecha. Para obtener más información sobre los patrones de formateador válidos, consulta Clase DateTimeFormatter.

Nota: Los años de dos dígitos (yy) se asignan al rango de 2000 a 2099. Por ejemplo, con el patrón MM/dd/yy, el valor 05/03/99 se decodifica como 2099-05-03.

size

int

Especifica el tamaño del campo al que se aplica este patrón.

FormatTimestamp

Asigna un formato de marca de tiempo a una cadena con uno de los formatos proporcionados. Esto solo se puede aplicar a los campos con tamaño. Durante la decodificación, los formatos se prueban en orden hasta que uno de ellos coincida con la cadena. Durante la codificación, se usará el primer formato y se ignorará el resto.

Representación JSON
{
    "formats": object (DateTimeFormat)
}
Campos
formats

object (DateTimeFormat)

Es la lista de formatos de marca de tiempo.

HFP

Establece este campo como punto flotante hexadecimal.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

ModifierChain

Especifica una cadena de modificadores para aplicar varios modificadores en serie. Los modificadores se aplican en el orden en que se especifican.

Representación JSON
{
    "modifiers": object (FieldModifier)
}
Campos
modifiers

object (FieldModifier)

Especifica la lista de modificadores que se aplicarán.

NullIf

Establece un campo como nulo si se cumple una condición. Debes especificar null_value o non_null_value, o ambos.

Para crear un campo de indicador nulo, puedes usar un FieldSuffix con un modificador de campo null_if y establecer is_inverse en true, como se muestra en los siguientes ejemplos:

Ejemplo: Indicador nulo

Para crear un campo de indicador nulo, podemos usar el modificador de campo null_if de la siguiente manera.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "?",
       "target_field": "$self"
     }
    }
   }
  ]
 }

Esto permite que todos los campos con el sufijo NID sean indicadores nulos, como se muestra en el siguiente fragmento de copybook:

 01 REC.
   02 FIELD     PIC X(10).
   02 FIELD-NID PIC X(1).

Ejemplo: Indicador nulo binario

Para crear un campo indicador nulo binary, podemos usar los modificadores de campo binary y null_if de la siguiente manera.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "modifier": {
       "binary": {}
     }
   },
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "15",
       "target_field": "$self"
     }
    }
   }
  ]
 }

Esto permite que todos los campos con el sufijo NID sean indicadores nulos de binary con el mismo copybook del ejemplo anterior.

Ejemplo: Indicador nulo de bytes

Para crear un campo indicador de valor nulo de bytes, podemos usar los modificadores de campo bytes y null_if de la siguiente manera. Los valores nulos y no nulos se expresan como HEX.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "modifier": {
       "bytes": {}
     }
   },
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "FF",
       "target_field": "$self"
     }
    }
   }
  ]
 }

Esto permite que todos los campos con el sufijo NID sean un indicador nulo bytes con el mismo copybook del ejemplo anterior.

Representación JSON
{
    "non_null_value": string,
    "non_null_values": string,
    "null_value": string,
    "null_values": string,
    "target_field": string
}
Campos
non_null_value

string

Cuando se especifica, si target_field no es igual a este valor, el campo no se decodifica ni se codifica, y el valor se establece en nulo.

non_null_values

string

Cuando se especifica, si target_field no es igual a ninguno de estos valores, el campo no se decodifica ni se codifica, y el valor se establece en nulo.

null_value

string

Cuando se especifica, si target_field es igual a este valor, el campo no se decodifica ni se codifica, y el valor se establece en nulo.

null_values

string

Cuando se especifica, si target_field es igual a cualquiera de estos valores, el campo no se decodifica ni se codifica, y el valor se establece en nulo.

target_field

string

Especifica el campo cuyo valor deseas verificar. El campo debe estar dentro del alcance. Para acceder a los campos anidados, puedes usar la notación de puntos (p.ej., "GRUPO.CAMPO").

NullIfEmpty

El campo se debe establecer como nulo si todos los bytes de ese campo son 0.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

NullIfInvalid

Trata el valor como nulo si falla la transcodificación. Solo puedes aplicar este modificador a los campos con tamaño. De forma predeterminada, cuando un campo no se puede decodificar, todo el registro se mueve al conjunto de datos de desbordamiento (error) y se excluye del resultado, mientras que el resto de la carga se completa con los registros válidos. Cuando configuras el modificador null_if_invalid, Mainframe Connector conserva el registro no válido y establece este campo como nulo. Úsala solo cuando quieras conservar esas filas con un valor nulo, no solo para que una carga se realice correctamente, ya que el valor predeterminado ya omite los registros incorrectos. El error se ignora y no se registra en el conjunto de datos de desbordamiento. Durante el proceso de decodificación, el valor de este campo será nulo para este registro. Durante el proceso de codificación, si no se pueden escribir los datos, todo el campo se completará con bytes nulos.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

PackedDecimal

Establece este campo en un PackedDecimal.

Representación JSON
{
    "logical_type": enum (DecimalLogicalType),
    "negative_sign_nibble": enum (PackedDecimalNegativeNibble)
}
Campos
logical_type

enum (DecimalLogicalType)

Anula el tipo lógico. De forma predeterminada, Mainframe Connector usa el tipo lógico óptimo según la precisión y la escala.

negative_sign_nibble

enum (PackedDecimalNegativeNibble)

Especifica el nibble que se usará para los signos negativos. Si bien x'B' y x'D' son signos negativos válidos, algunos sistemas o aplicaciones de mainframe pueden tener una convención que requiera uno sobre el otro.

String

Establece las diversas opciones relacionadas con la decodificación y codificación de cadenas. Solo se puede aplicar en un campo de cadena.

Representación JSON
{
    "encoding": string,
    "pad_char": string,
    "trim_suffix": boolean
}
Campos
encoding

string

Es la codificación con la que se codifica el campo.

pad_char

string

Cuando se establece, se exportan las cadenas de relleno con pad_char. Si se establece, la longitud de pad_char debe ser 1. pad_char solo afecta la codificación, la decodificación ignora pad_char.

trim_suffix

boolean

Cuando se establece como verdadero, se recortará cualquier espacio en blanco al final de la cadena. trim_suffix solo afecta la decodificación, la codificación ignora trim_suffix. Ten en cuenta que las cadenas que solo constan de espacios en blanco se convertirán en cadenas vacías.

VarLen

Representa un campo de longitud variable.

Un campo de longitud variable contiene tres partes:

  1. Es un elemento de grupo que contiene dos subcampos.
  2. Es un campo dentro del elemento de grupo que contiene la longitud de los datos de la transacción.
  3. Es un campo dentro del elemento de grupo que contiene los datos.

El nombre del campo de longitud variable será el nombre del grupo.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

ZonedDecimal

Establece varias opciones relacionadas con la codificación y decodificación de decimales con zona. Solo puedes aplicar este modificador en un campo decimal.

Representación JSON
{
    "encoding": enum (ZonedDecimalEncoding),
    "logical_type": enum (DecimalLogicalType)
}
Campos
encoding

enum (ZonedDecimalEncoding)

Es la codificación con la que se codifica el campo.

logical_type

enum (DecimalLogicalType)

Especifica el tipo lógico que se usará cuando se decodifique o codifique el campo.

FieldOverride

Anula o modifica la cadena de decodificación y codificación para el campo especificado.

Representación JSON
{
    "field": string,
    "modifier": object (FieldModifier)
}
Campos
field

string

Especifica el nombre del campo al que se aplicará el modificador.

modifier

object (FieldModifier)

Especifica el modificador que se aplicará al campo coincidente.

FieldSuffix

Los sufijos de campo se aplican a todos los campos que tienen un sufijo.

Los campos coinciden si terminan con un guion (-) o un guion bajo (_) seguido del sufijo.

Los sufijos no distinguen mayúsculas de minúsculas.

El modificador FieldSuffix se aplica después del modificador FieldOverride.

Por ejemplo, el modificador definido para el sufijo NID se aplicará al campo llamado FLD-NID, pero no al campo FUNID.

Representación JSON
{
    "is_inverse": boolean,
    "modifier": object (FieldModifier),
    "suffix": string
}
Campos
is_inverse

boolean

Especifica si el modificador es un modificador de campo inverso o no. Un modificador de campo inverso aplica el modificador en otro campo que tiene el mismo nombre que el campo con el modificador, pero sin el modificador. Por ejemplo, si los campos FLD-NID y FLD existen en el mismo registro, el modificador se aplicará a FLD.

Cuando se usa un modificador de campo inverso, se puede usar el identificador especial $self siempre que se pueda usar un nombre de campo de forma tradicional para hacer referencia al campo con el sufijo.

Por ejemplo, para crear un campo de indicador nulo, puedes usar el modificador de campo null_if con is_inverse establecido en true. Consulta NullIf para obtener más información.

modifier

object (FieldModifier)

Especifica el modificador que se aplicará a los campos que coincidan.

suffix

string

El campo con este sufijo tendrá el modificador aplicado.

Transformación

Las transformaciones de vista se usan para modificar la relación entre la tabla y el archivo QSAM. Las transformaciones siempre se expresan desde el punto de vista de los datos. El concepto es similar al de las tablas de vistas en BigQuery.

Representación JSON
{
    "exclude": object (Exclude),
    "move": object (Move),
    "rename": object (Rename),
    "split": object (Split),
    "target_table": string,
    "unnest": object (Unnest)
}
Campos
exclude

object (Exclude)

move

object (Move)

rename

object (Rename)

split

object (Split)

target_table

string

Es opcional. Especifica el nombre de la tabla de destino (vista) a la que se aplicará la transformación.

De forma predeterminada, las transformaciones se aplican a la tabla principal (_main) o de forma global, según corresponda. Si tienes vistas divididas (creadas por una transformación split), puedes segmentar una tabla dividida específica por nombre.

Nota: No se puede segmentar para las transformaciones de división, y se producirá un error si se establece target_table.

unnest

object (Unnest)

Excluir

Excluye un campo de la tabla resultante, pero sigue decodificando o codificando. Esto es útil cuando no es necesario transferir el campo a la tabla, pero se requiere para la transcodificación. Por ejemplo, los campos de indicador nulo o de longitud se pueden omitir de la tabla.

Para omitir la transcodificación por completo, aplica el modificador de relleno.

Representación JSON
{
    "field": string
}
Campos
field

string

Especifica el campo que se excluirá.

Mover

Mueve un campo en el registro.

Representación JSON
{
    "field": string,
    "offset": int
}
Campos
field

string

Especifica el campo que se moverá.

offset

int

Especifica la cantidad de lugares, hacia adelante o hacia atrás, a los que se debe mover el campo.

Cambiar nombre

Cambia el nombre de uno o más campos según una coincidencia de expresión regular.

Por ejemplo, para reemplazar todos los guiones por guiones bajos, usa el siguiente formato JSON: {"find": "\\-", "replace":"_"}.

Representación JSON
{
    "find": string,
    "replace": string
}
Campos
find

string

Especifica un patrón de expresión regular de Java para identificar los campos a los que se les cambiará el nombre.

El patrón se compara con el nombre completo del campo. Si el patrón coincide con cualquier parte del nombre del campo, se considera que el campo coincide.

Ejemplos:

  • "\\-" (coincide con cualquier campo que contenga un guion)
  • "^field_name$" (coincide con los campos que tienen el nombre exacto field_name)
  • "^field_(.*)$" (coincide con cualquier campo que comience con field_ y captura el resto)
  • "part_of_name" (coincide con cualquier campo que contenga part_of_name)

replace

string

Especifica el nombre nuevo de los campos que coinciden.

Los grupos de captura de la expresión regular find se pueden usar en la cadena replace con referencias inversas como $1, $2. Esto permite realizar transformaciones más complejas en función de partes del nombre del campo original.

Ejemplos:

  • "new_field_name" (reemplaza el campo por un nombre fijo)
  • "new_$1" (usa el primer grupo de captura de find)
  • "${1}_new" (sintaxis alternativa para los grupos de captura)
  • "prefix_$1_suffix" (usa un grupo de captura y agrega prefijos o sufijos)

Dividir

Representación JSON
{
    "field": string,
    "foreign_key": string,
    "primary_key": string
}
Campos
field

string

Especifica el campo que quieres dividir.

foreign_key

string

Especifica el nombre del campo que se agregará al esquema nuevo en el que se almacenará el valor de la clave primaria. Si no se especifica, se usa el nombre de la clave primaria.

primary_key

string

Especifica el nombre del campo que se usará como clave primaria.

Unnest

Anula la anidación del campo.

Representación JSON
{
    "field": string,
    "format": string
}
Campos
field

string

Especifica el campo que se desanidará

format

string

Especifica el nuevo formato del campo.

Se lanzará ${parent} con el nombre del campo que se desanidará.

En el caso de los structs no anidados, ${field} se reemplaza por el nombre del campo de structs.

En el caso de los arrays y las listas no anidados, ${index} se reemplaza por los índices del array.

Enums

BinarySignedness

Enums
SIGNED El número binario tiene signo.
UNSIGNED El número binario no tiene signo.
UNSPECIFIED Intenta deducir el signo de la cadena existente.

DecimalLogicalType

Es el tipo lógico que se usará para un campo decimal.

Enums
AUTO Usa el tipo más óptimo según la escala y la precisión.
BIG_DECIMAL Almacena el valor como un valor decimal sin límites. Esta es la opción más lenta, pero admite cualquier decimal de cualquier precisión en cualquier escala.
BIG_INTEGER Almacena el valor como un valor de número entero sin límites. Esta es la opción más lenta, pero admite cualquier número entero de cualquier precisión.
DECIMAL64 Usa 64 bits para almacenar el valor. Este modificador solo funciona para números cuya precisión sea menor o igual que 18.
LONG Usa 64 bits para almacenar el valor. Este modificador solo funciona para números cuya precisión sea menor o igual que 18 y la escala sea 0.

PackedDecimalNegativeNibble

Enums
NIBBLE_B El valor predeterminado es usar x'B'.
NIBBLE_D Usa x'D' para el nibble de signo negativo.

SchemaValidationMode

Especifica el modo de validación de esquema que se usará durante la compilación del copybook. Este modo verifica la compatibilidad con un formato de datos de destino específico.

Enums
BIG_QUERY Es el modo de validación de esquemas para la compatibilidad con BigQuery. Este modo extiende la validación predeterminada para verificar que el esquema del copybook sea compatible con los tipos de datos de BigQuery.
DEFAULT Es el modo de validación de esquemas predeterminado. Este modo verifica que los nombres de campo únicos estén en el copybook.
MYSQL Es el modo de validación de esquemas para la compatibilidad con MySQL. Este modo extiende la validación predeterminada para verificar que el esquema del copybook sea compatible con los tipos de datos de MySQL.
POSTGRES Es el modo de validación de esquemas para la compatibilidad con PostgreSQL. Este modo extiende la validación predeterminada para verificar que el esquema del copybook sea compatible con los tipos de datos de PostgreSQL.

ZonedDecimalEncoding

Especifica la codificación que se usará cuando se decodifique o codifique un campo decimal con zona.

Enums
ASCII Usa la codificación ASCII.
EBCDIC Usa la codificación EBCDIC.
UNSPECIFIED Mantén la codificación que se especifica en la cadena de modificadores. Si no se especifica ningún modificador, se usa EBCDIC.