← Todas las utilidades

NSDdm

Versión 26.1 (build 214) Prueba 30 días
Índice

Qué es NSDdm

nsddm lee los Data Definition Modules (ficheros .NSD) de un directorio fuser de Software AG Natural y los convierte en un JSON estructurado: metadatos del fichero, campos con formato/longitud/descriptores, índices y relaciones entre DDMs. Trabaja en dos modos excluyentes:

  • Modo generación: escanea el fuser y produce el JSON (-fuserdir obligatorio).
  • Modo consulta: interroga un JSON ya generado sin tocar el fuser (-input obligatorio).

Los nombres de ficheros y campos de los ejemplos son ficticios.

Casos de uso

1. Inventario vivo de DDMs

Generar cada noche el JSON de la librería SYSTEM y versionarlo en git: cualquier alta, baja o cambio de campo queda registrado en el historial.

nsddm -fuserdir /opt/softwareag/fuser -lib SYSTEM -outfile ddm-system.json
git add ddm-system.json && git commit -m "inventario DDM $(date +%F)"

2. Preparar una migración Adabas

Antes de migrar, listar todos los ficheros con su DBID, número y longitud para dimensionar el destino y detectar rarezas (DB 0, longitudes extremas).

nsddm -fuserdir /opt/softwareag/fuser -lib SYSTEM -outfile full.json
nsddm -input full.json -list number

3. Triaje de data masking con NSAdaMask

Localizar los campos con datos personales (DNI, IBAN, email, teléfono…) para anonimizarlos después con nsadamask. La categoría la pone la IA (-ia) o la heurística por nombre.

nsddm -input full.json -datamask

Salida típica:

[228] IV2-DATOECON-COM    NIF-TOMADOR           A  14  conf=0.95  dni
[123] IV2-CARGAS-AUT      NOMBRE-PERSONA        A  50  conf=0.95  nombre
[108] IV2-DATORECI-T      NUM-CUENTA-BCO        N  16  conf=0.95  iban

4. Análisis de impacto de un cambio

Va a cambiar el campo COD-PAIS: averigüe en qué ficheros aparece y cuál es el maestro que lo define.

nsddm -input full.json -search COD-PAIS
nsddm -input full.json -schema COD-PAIS -relations

5. Documentación navegable del modelo de datos

Combinar -schema por fichero con la columna REL (fichero padre) para dibujar el mapa de maestros y movimientos sin abrir Natural.

for f in 108 1100 228; do
  nsddm -input full.json -schema $f
done

Referencia de comandos

Modo generación

ParámetroDescripciónRequerido
-fuserdirRuta al directorio fuser de Natural (busca .NSD en <fuserdir>/<lib>/SRC/ o <fuserdir>/SRC/)
-libLibrería = subdirectorio bajo fuserdir (p. ej. SYSTEM). Por defecto SYSTEMNo
-outfileFichero JSON de salida (stdout si se omite)No
-filesFiltro por número o rango: 120, (100,200,300), (10-20,100-300), (10-20,50,100-300)No
-dbidFiltro por base de datos. "", 000, 0000 y 0 equivalen a DB 0No
-default-dbidDBID asumido para ficheros cuyo NSD no trae DBNo
-iaEnriquece con IA: descripciones, datos sensibles y relaciones (requiere -ai-key o AI_API_KEY)No
-ai-endpointEndpoint OpenAI-compatible (por defecto OpenRouter)No
-ai-keyClave de API (o variable AI_API_KEY)Con -ia
-ai-modelModelo (por defecto deepseek/deepseek-chat)No
-ai-cacheFichero de caché de respuestas IA (por defecto ai_cache.json)No

Modo consulta (-input obligatorio, incompatible con los de generación)

ParámetroDescripción
-inputJSON generado previamente
-schemaEsquema en columnas de un DDM (nombre completo/parcial o nº de fichero)
-relationsCon -schema: detalle de relaciones de cada campo (sin -schema no hace nada)
-datamaskCampos con datos sensibles: fichero, campo, formato, longitud, confianza y categoría
-searchBúsqueda parcial insensible a mayúsculas en el nombre del campo
-fnrDDMs que contienen ese número de fichero
-listFicheros ordenados por nombre de DDM (por defecto) o por número (-list number)

Comunes

ParámetroDescripción
-versionVersión, build, fecha, host y plataforma
-licenseRuta del license.key (por defecto: resolución automática)

Incompatibilidades

  • -input con flags de generación (-fuserdir, -lib, -files, -dbid, -ia…): se ignora la generación.
  • -relations sin -schema: sin efecto.
  • -ia sin -ai-key ni AI_API_KEY: error.

Ejemplos comentados

# 1. Extracción básica a stdout
nsddm -fuserdir /opt/softwareag/fuser -lib SYSTEM

# 2. Solo el fichero 120 de CUSTOMER, guardado
nsddm -fuserdir /opt/softwareag/fuser -lib CUSTOMER -files 120 -outfile c120.json

# 3. Rango + DBID combinados (comillas para que el shell no toque los paréntesis)
nsddm -fuserdir /opt/softwareag/fuser -lib ORDERS -dbid 50 \
  -files '(10-20,100-300)' -outfile orders.json

# 4. Enriquecido con IA (descripciones + sensibles + relaciones)
export AI_API_KEY="su-clave"
nsddm -fuserdir /opt/softwareag/fuser -lib SYSTEM -ia -outfile full.json
# La 2ª ejecución sobre el mismo fuser es casi instantánea (caché ai_cache.json)

# 5. Esquema de un DDM y sus relaciones
nsddm -input full.json -schema IV2-POLIZA-T
nsddm -input full.json -schema 108 -relations

# 6. ¿Dónde se usa el campo NUM-CUENTA-BCO?
nsddm -input full.json -search CUENTA

Formato de salida (resumen)

Cada fichero aporta metadata (source_file, ddm_name, db, file_number, record_type, total_fields, total_length), fields (nivel, nombre corto AA, field_name, format, length, descriptor, attributeMU/PE/GR/SD—, remark, fields hijos, source_fields, comment, más description, mask_category, mask_confidence si hubo IA) e index.

La columna REL de -schema indica el fichero padre (maestro) de la relación many_to_one —el DDM que define el dato— o ←N si el campo es padre referenciado por N ficheros. La detección del padre es determinista (nombre del concepto + descriptor + prefijo de maestro FU-/MA-/TAB-); los campos genéricos (FECHA, IMPORTE…) no generan relación.

Códigos de retorno y entorno

CódigoSignificado
0Éxito
1Error en parámetros
2Error de sistema de ficheros (directorio no encontrado, etc.)

El progreso va por stderr; las advertencias no interrumpen (archivos no procesables se saltan). Variables: AI_API_KEY (clave IA), LANG (idioma de mensajes), GOOS/GOARCH solo para compilar desde fuente (CGO_ENABLED=0 go build -o nsddm ., Go ≥ 1.24, sin dependencias).

Preguntas frecuentes

¿Puedo consultar sin acceso al fuser? Sí: genere una vez el JSON y distribuya el fichero; -input no toca el fuser.

¿Los remark con acentos salen rotos? No: los trozos de ~30 caracteres del NSD se unen y se normaliza ISO-8859-1 → UTF-8.

¿-datamask necesita IA? No: sin -ia aplica una heurística determinista por nombre (NIF, NOMBRE, IBAN, TELEFONO, EMAIL, TARJETA, IP…); con -ia la clasifica el modelo con confianza.

¿Qué DB tienen los ficheros sin campo DB? Se normalizan a 0; -dbid 0 los incluye. Con -default-dbid puede asumir otro valor al generar.

También disponible en: en