{
  "generado": "2026-09-14",
  "descripcion": "Mapeo de renumeracion del catalogo de reglas y antipatrones de catedra.",
  "uso": "La herramienta gaff debe reemplazar codigos viejos por los nuevos de mapa_codigos y mapear cada AP-0xXXXXh al codigo_nuevo indicado en antipatrones (ya no existen AP con codigo propio).",
  "categorias": [
    {
      "prefijo": "0x00XX",
      "nombre": "Sintaxis y formato visual",
      "directorio": "reglas/00_formato"
    },
    {
      "prefijo": "0x01XX",
      "nombre": "Nomenclatura e identificadores",
      "directorio": "reglas/01_nomenclatura"
    },
    {
      "prefijo": "0x02XX",
      "nombre": "Comentarios, documentacion y organizacion de archivos",
      "directorio": "reglas/02_documentacion"
    },
    {
      "prefijo": "0x10XX",
      "nombre": "Estructuras de control y flujo",
      "directorio": "reglas/10_control"
    },
    {
      "prefijo": "0x20XX",
      "nombre": "Funciones, contratos y modularizacion",
      "directorio": "reglas/20_funciones"
    },
    {
      "prefijo": "0x30XX",
      "nombre": "Memoria, punteros y tipos",
      "directorio": "reglas/30_memoria"
    },
    {
      "prefijo": "0x40XX",
      "nombre": "Archivos y E/S",
      "directorio": "reglas/40_archivos"
    },
    {
      "prefijo": "0x50XX",
      "nombre": "Compilacion, preprocesador y seguridad",
      "directorio": "reglas/50_seguridad"
    },
    {
      "prefijo": "0x60XX",
      "nombre": "Proceso, diseno y construccion sistematica",
      "directorio": "reglas/60_proceso"
    },
    {
      "prefijo": "0x70XX",
      "nombre": "Robustez y manejo de errores",
      "directorio": "reglas/70_robustez"
    },
    {
      "prefijo": "0x80XX",
      "nombre": "Verificacion, testing y depuracion",
      "directorio": "reglas/80_verificacion"
    }
  ],
  "reglas": [
    {
      "codigo_nuevo": "0x0001h",
      "codigo_anterior": "0x0000h",
      "tipo": "renumerada",
      "titulo": "La claridad y prolijidad son de máxima importancia",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0001h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0002h",
      "codigo_anterior": "0x0002h",
      "tipo": "renumerada",
      "titulo": "Una declaración de variable por línea",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0002h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0003h",
      "codigo_anterior": "0x0004h",
      "tipo": "renumerada",
      "titulo": "Un espacio antes y después de cada operador binario",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0003h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0004h",
      "codigo_anterior": "0x0005h",
      "tipo": "renumerada",
      "titulo": "Cada bloque debe tener una indentación de cuatro espacios respecto a su contenedor y llaves",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0004h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0005h",
      "codigo_anterior": "0x0006h",
      "tipo": "renumerada",
      "titulo": "El asterisco de los punteros debe declararse junto al identificador",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0005h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0006h",
      "codigo_anterior": "0x0009h",
      "tipo": "renumerada",
      "titulo": "Las líneas de código no deben exceder los 79 caracteres",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0006h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0007h",
      "codigo_anterior": "0x000Bh",
      "tipo": "renumerada",
      "titulo": "Las llaves deben ubicarse en líneas independientes según el estilo Allman",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0007h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0008h",
      "codigo_anterior": "0x0015h",
      "tipo": "renumerada",
      "titulo": "Alineación vertical consistente en asignaciones y declaraciones consecutivas",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0008h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0009h",
      "codigo_anterior": "0x0017h",
      "tipo": "renumerada",
      "titulo": "Espaciado consistente en declaraciones de doble puntero (tipo **var)",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0009h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x000Ah",
      "codigo_anterior": "0x0019h",
      "tipo": "renumerada",
      "titulo": "Prohibición de espacios en blanco antes de separadores de sintaxis (; y ,)",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x000Ah.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x000Bh",
      "codigo_anterior": "0x001Ah",
      "tipo": "renumerada",
      "titulo": "Prohibición de espacios en blanco alrededor de operadores de acceso a miembros (-> y .)",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x000Bh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x000Ch",
      "codigo_anterior": "0x001Bh",
      "tipo": "renumerada",
      "titulo": "Prohibición de espacios en blanco entre operadores unarios (++, --, !) y su operando",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x000Ch.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x000Dh",
      "codigo_anterior": "0x001Ch",
      "tipo": "renumerada",
      "titulo": "Espacio en blanco obligatorio tras la coma separadora en listas y argumentos",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x000Dh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x000Eh",
      "codigo_anterior": "0x001Dh",
      "tipo": "renumerada",
      "titulo": "Prohibición de espacios en blanco internos inmediatamente tras '(' o antes de ')'",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x000Eh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x000Fh",
      "codigo_anterior": "0x001Eh",
      "tipo": "renumerada",
      "titulo": "Prohibición de múltiples espacios en blanco consecutivos dentro de una línea de código",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x000Fh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0010h",
      "codigo_anterior": "0x001Fh",
      "tipo": "renumerada",
      "titulo": "Prohibición de llaves redundantes en inicialización de tipos escalares",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0010h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0011h",
      "codigo_anterior": "0x0022h",
      "tipo": "renumerada",
      "titulo": "Validador de espaciado estricto en sentencias de control",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0011h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0012h",
      "codigo_anterior": "0x0025h",
      "tipo": "renumerada",
      "titulo": "Validador de formato canónico en firmas de punteros a función",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0012h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0013h",
      "codigo_anterior": "0x0028h",
      "tipo": "renumerada",
      "titulo": "Detector de etiquetas de salto goto no alineadas al margen izquierdo",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0013h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0014h",
      "codigo_anterior": "0x0029h",
      "tipo": "renumerada",
      "titulo": "Auditor de inicialización de arreglos unidimensionales con exceso de elementos",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0014h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0015h",
      "codigo_anterior": "0x002Bh",
      "tipo": "renumerada",
      "titulo": "Validador de espaciado en listas de argumentos y llamadas a funciones",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0015h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0016h",
      "codigo_anterior": "0x002Dh",
      "tipo": "renumerada",
      "titulo": "Validador de espaciado en operadores unarios",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0016h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0017h",
      "codigo_anterior": "0x600Eh",
      "tipo": "propuesta-integrada",
      "titulo": "Agrupá sentencias relacionadas y separá bloques lógicos",
      "directorio": "00_formato",
      "archivo": "reglas/00_formato/0x0017h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0101h",
      "codigo_anterior": "0x0001h",
      "tipo": "renumerada",
      "titulo": "Los identificadores deben ser descriptivos",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0101h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0102h",
      "codigo_anterior": "0x0007h",
      "tipo": "renumerada",
      "titulo": "Los argumentos de función y las variables locales deben usar snake_case en minúsculas",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0102h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0103h",
      "codigo_anterior": "0x0008h",
      "tipo": "renumerada",
      "titulo": "Las constantes (const o #define) deben nombrarse en MAYUSCULAS_SNAKE_CASE",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0103h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0104h",
      "codigo_anterior": "0x000Ch",
      "tipo": "renumerada",
      "titulo": "Los nombres de los archivos deben usar snake_case en minúsculas (sin espacios)",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0104h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0105h",
      "codigo_anterior": "0x000Eh",
      "tipo": "renumerada",
      "titulo": "Los nombres de funciones deben usar snake_case estricto en minúsculas",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0105h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0106h",
      "codigo_anterior": "0x0012h",
      "tipo": "renumerada",
      "titulo": "Las variables globales deben ser declaradas como static o usar prefijo g_",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0106h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0107h",
      "codigo_anterior": "0x0013h",
      "tipo": "renumerada",
      "titulo": "Las macros #define deben nombrarse en MAYUSCULAS_SNAKE_CASE",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0107h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0108h",
      "codigo_anterior": "0x0014h",
      "tipo": "renumerada",
      "titulo": "Prohibición de identificadores con caracteres no ASCII (acentos, ñ)",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0108h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0109h",
      "codigo_anterior": "0x0016h",
      "tipo": "renumerada",
      "titulo": "Prohibición de identificadores que colisionen con palabras clave o tipos estándar",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0109h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x010Ah",
      "codigo_anterior": "0x0018h",
      "tipo": "renumerada",
      "titulo": "Prohibición de identificadores con prefijos reservados para el compilador (__ o _[A-Z])",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x010Ah.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x010Bh",
      "codigo_anterior": "0x0020h",
      "tipo": "renumerada",
      "titulo": "Proporcionalidad en longitud de identificadores según su alcance",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x010Bh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x010Ch",
      "codigo_anterior": "0x0026h",
      "tipo": "renumerada",
      "titulo": "Auditor de identificadores reservados con doble guion bajo o guion bajo inicial",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x010Ch.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x010Dh",
      "codigo_anterior": "0x002Ch",
      "tipo": "renumerada",
      "titulo": "Auditor de consistencia en nombres de constantes simbólicas",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x010Dh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x010Eh",
      "codigo_anterior": "0x0037h",
      "tipo": "renumerada",
      "titulo": "Prescindí de identificadores genéricos con sufijo numérico o afijos (numero1, num_1, n_a, a_n)",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x010Eh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x010Fh",
      "codigo_anterior": "0x0038h",
      "tipo": "renumerada",
      "titulo": "Prohibición de constantes numéricas mágicas en índices de arreglos",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x010Fh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0110h",
      "codigo_anterior": "0x6009h",
      "tipo": "propuesta-integrada",
      "titulo": "Los booleanos se nombran con prefijo interrogativo",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0110h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0111h",
      "codigo_anterior": "0x600Ah",
      "tipo": "propuesta-integrada",
      "titulo": "Nombrá en positivo y evitá las dobles negaciones",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0111h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0112h",
      "codigo_anterior": "0x600Bh",
      "tipo": "propuesta-integrada",
      "titulo": "Usá constantes simbólicas para todo literal con significado",
      "directorio": "01_nomenclatura",
      "archivo": "reglas/01_nomenclatura/0x0112h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0201h",
      "codigo_anterior": "0x000Ah",
      "tipo": "renumerada",
      "titulo": "Escribí comentarios que expliquen el 'porqué', no el 'qué'",
      "directorio": "02_documentacion",
      "archivo": "reglas/02_documentacion/0x0201h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0202h",
      "codigo_anterior": "0x000Dh",
      "tipo": "renumerada",
      "titulo": "No dejes código comentado (dead code) en los archivos fuente",
      "directorio": "02_documentacion",
      "archivo": "reglas/02_documentacion/0x0202h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0203h",
      "codigo_anterior": "0x000Fh",
      "tipo": "renumerada",
      "titulo": "Prescindí de comentarios obvios, redundantes o vacíos",
      "directorio": "02_documentacion",
      "archivo": "reglas/02_documentacion/0x0203h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0204h",
      "codigo_anterior": "0x0010h",
      "tipo": "renumerada",
      "titulo": "Control de longitud máxima de archivos de código (máx 500 líneas)",
      "directorio": "02_documentacion",
      "archivo": "reglas/02_documentacion/0x0204h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0205h",
      "codigo_anterior": "0x0011h",
      "tipo": "renumerada",
      "titulo": "En archivos .c la inclusión de la cabecera propia debe figurar en primer lugar",
      "directorio": "02_documentacion",
      "archivo": "reglas/02_documentacion/0x0205h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x0206h",
      "codigo_anterior": "0x0027h",
      "tipo": "renumerada",
      "titulo": "Validador de presencia de cabecera de documentación obligatoria por archivo",
      "directorio": "02_documentacion",
      "archivo": "reglas/02_documentacion/0x0206h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x1001h",
      "codigo_anterior": "0x1001h",
      "tipo": "renumerada",
      "titulo": "Todas las estructuras de control deben utilizar llaves",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1001h.md",
      "antipatrones_integrados": [
        "AP-0x1001h",
        "AP-0x1018h"
      ]
    },
    {
      "codigo_nuevo": "0x1002h",
      "codigo_anterior": "0x1002h",
      "tipo": "renumerada",
      "titulo": "Restringí el uso de break y continue; preferí lazos con bandera de control",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1002h.md",
      "antipatrones_integrados": [
        "AP-0x101Ch"
      ]
    },
    {
      "codigo_nuevo": "0x1003h",
      "codigo_anterior": "0x1003h",
      "tipo": "renumerada",
      "titulo": "Utilizá el lazo for para iteraciones con rango o contador definido y while para lazos controlados por condiciones lógicas",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1003h.md",
      "antipatrones_integrados": [
        "AP-0x1015h"
      ]
    },
    {
      "codigo_nuevo": "0x1004h",
      "codigo_anterior": "0x1004h",
      "tipo": "renumerada",
      "titulo": "Las condiciones complejas deben simplificarse o comentarse",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1004h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x1005h",
      "codigo_anterior": "0x1005h",
      "tipo": "renumerada",
      "titulo": "Reemplazá las condiciones ambiguas basadas en la 'veracidad' (truthiness) del tipo de dato",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1005h.md",
      "antipatrones_integrados": [
        "AP-0x1005h",
        "AP-0x101Ah",
        "AP-0x101Bh"
      ]
    },
    {
      "codigo_nuevo": "0x1006h",
      "codigo_anterior": "0x1006h",
      "tipo": "renumerada",
      "titulo": "No utilizar la instrucción goto",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1006h.md",
      "antipatrones_integrados": [
        "AP-0x1019h"
      ]
    },
    {
      "codigo_nuevo": "0x1007h",
      "codigo_anterior": "0x1007h",
      "tipo": "renumerada",
      "titulo": "No utilizar el operador condicional (ternario) ?:",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1007h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x1008h",
      "codigo_anterior": "0x1008h",
      "tipo": "renumerada",
      "titulo": "Toda instrucción switch debe incluir un caso default",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1008h.md",
      "antipatrones_integrados": [
        "AP-0x100Ch"
      ]
    },
    {
      "codigo_nuevo": "0x1009h",
      "codigo_anterior": "0x100Ah",
      "tipo": "renumerada",
      "titulo": "Prohibición de asignaciones simples dentro de condiciones lógicas",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1009h.md",
      "antipatrones_integrados": [
        "AP-0x100Ah"
      ]
    },
    {
      "codigo_nuevo": "0x100Ah",
      "codigo_anterior": "0x100Bh",
      "tipo": "renumerada",
      "titulo": "Prohibición de estructuras de control con cuerpo vacío (if (...);)",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x100Ah.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x100Bh",
      "codigo_anterior": "0x100Ch",
      "tipo": "renumerada",
      "titulo": "No utilices comparaciones en estilo Yoda ('CONST == variable')",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x100Bh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x100Ch",
      "codigo_anterior": "0x100Eh",
      "tipo": "renumerada",
      "titulo": "Espaciado obligatorio alrededor de operadores ternarios ('? :')",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x100Ch.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x100Dh",
      "codigo_anterior": "0x100Fh",
      "tipo": "renumerada",
      "titulo": "Prohibición de condiciones de parada compuestas complejas en lazos for",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x100Dh.md",
      "antipatrones_integrados": [
        "AP-0x100Fh",
        "AP-0x1014h"
      ]
    },
    {
      "codigo_nuevo": "0x100Eh",
      "codigo_anterior": "0x1010h",
      "tipo": "renumerada",
      "titulo": "Delimitación obligatoria con bloque de llaves en lazos do-while",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x100Eh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x100Fh",
      "codigo_anterior": "0x1011h",
      "tipo": "renumerada",
      "titulo": "Prohibición de cláusula else redundante tras sentencia de retorno anticipado",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x100Fh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x1010h",
      "codigo_anterior": "0x1012h",
      "tipo": "renumerada",
      "titulo": "Prohibición de comparaciones encadenadas no idiomáticas en C (a < b < c)",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1010h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x1011h",
      "codigo_anterior": "0x1013h",
      "tipo": "renumerada",
      "titulo": "Prohibición de saltos no estructurados goto fuera del patrón canónico de liberación de recursos",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1011h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x1012h",
      "codigo_anterior": "0x1014h",
      "tipo": "renumerada",
      "titulo": "Prohibición de expresiones de asignación dentro de estructuras de control",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1012h.md",
      "antipatrones_integrados": [
        "AP-0x1010h"
      ]
    },
    {
      "codigo_nuevo": "0x1013h",
      "codigo_anterior": "0x1016h",
      "tipo": "renumerada",
      "titulo": "Detector de expresiones booleanas complejas sin paréntesis aclaratorios",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1013h.md",
      "antipatrones_integrados": [
        "AP-0x100Eh",
        "AP-0x1016h"
      ]
    },
    {
      "codigo_nuevo": "0x1014h",
      "codigo_anterior": "0x1017h",
      "tipo": "renumerada",
      "titulo": "Detector de operadores de incremento o decremento múltiples en una misma expresión",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1014h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x1015h",
      "codigo_anterior": "0x6004h",
      "tipo": "propuesta-integrada",
      "titulo": "Limitá la profundidad de anidación a tres niveles",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1015h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x1016h",
      "codigo_anterior": "0x600Ch",
      "tipo": "propuesta-integrada",
      "titulo": "Documentá el invariante de cada lazo",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1016h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x1017h",
      "codigo_anterior": "0x600Dh",
      "tipo": "propuesta-integrada",
      "titulo": "Escribí condiciones afirmativas y directas",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1017h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x1018h",
      "codigo_anterior": "NEW_FLOAT_LOOP",
      "tipo": "promovida",
      "titulo": "No uses variables de punto flotante como control de lazo",
      "directorio": "10_control",
      "archivo": "reglas/10_control/0x1018h.md",
      "antipatrones_integrados": [
        "AP-0x100Dh"
      ]
    },
    {
      "codigo_nuevo": "0x2001h",
      "codigo_anterior": "0x2001h",
      "tipo": "renumerada",
      "titulo": "Las funciones deben usar cláusulas de guarda y retornos anticipados para reducir la anidación profunda",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2001h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2002h",
      "codigo_anterior": "0x2002h",
      "tipo": "renumerada",
      "titulo": "Las funciones no deben contener printf o scanf, a menos que ese sea su propósito explícito",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2002h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2003h",
      "codigo_anterior": "0x2003h",
      "tipo": "renumerada",
      "titulo": "Todas las funciones deben incluir documentación completa y estructurada",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2003h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2004h",
      "codigo_anterior": "0x2004h",
      "tipo": "renumerada",
      "titulo": "No se permite el uso de variables globales",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2004h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2005h",
      "codigo_anterior": "0x2005h",
      "tipo": "renumerada",
      "titulo": "Cada función debe tener una única responsabilidad (Principio de Responsabilidad Única)",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2005h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2006h",
      "codigo_anterior": "0x2007h",
      "tipo": "renumerada",
      "titulo": "Mantené el alcance de las variables al mínimo posible",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2006h.md",
      "antipatrones_integrados": [
        "AP-0x2007h"
      ]
    },
    {
      "codigo_nuevo": "0x2007h",
      "codigo_anterior": "0x2008h",
      "tipo": "renumerada",
      "titulo": "Los valores de retorno numéricos deben definirse como constantes de preprocesador o enums",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2007h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2008h",
      "codigo_anterior": "0x2009h",
      "tipo": "renumerada",
      "titulo": "Los ejercicios deben ser resueltos mediante funciones",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2008h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2009h",
      "codigo_anterior": "0x200Ah",
      "tipo": "renumerada",
      "titulo": "Los nombres de funciones y procedimientos deben usar snake_case en minúsculas",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2009h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x200Ah",
      "codigo_anterior": "0x200Bh",
      "tipo": "renumerada",
      "titulo": "Modularización: una función no debe exceder 4 parámetros de entrada",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x200Ah.md",
      "antipatrones_integrados": [
        "AP-0x200Bh"
      ]
    },
    {
      "codigo_nuevo": "0x200Bh",
      "codigo_anterior": "0x200Ch",
      "tipo": "renumerada",
      "titulo": "Prohibición de retornar la dirección de una variable local de stack",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x200Bh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x200Ch",
      "codigo_anterior": "0x200Dh",
      "tipo": "renumerada",
      "titulo": "Cada función debe tener a lo sumo un return",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x200Ch.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x200Dh",
      "codigo_anterior": "0x200Eh",
      "tipo": "renumerada",
      "titulo": "Comentarios de cierre explicativos en bloques de control extensos (> 25 líneas)",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x200Dh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x200Eh",
      "codigo_anterior": "0x200Fh",
      "tipo": "renumerada",
      "titulo": "Uso obligatorio de 'void' explícito en funciones sin parámetros",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x200Eh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x200Fh",
      "codigo_anterior": "0x2010h",
      "tipo": "renumerada",
      "titulo": "Prohibición de paréntesis superfluos en sentencia return",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x200Fh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2010h",
      "codigo_anterior": "0x2011h",
      "tipo": "renumerada",
      "titulo": "Prohibición de reasignar o modificar parámetros recibidos por valor dentro de la función",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2010h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2011h",
      "codigo_anterior": "0x2012h",
      "tipo": "renumerada",
      "titulo": "Prohibición de asignaciones múltiples a una variable sin lectura intermedia (dead store)",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2011h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2012h",
      "codigo_anterior": "0x2013h",
      "tipo": "renumerada",
      "titulo": "Tipo de retorno obligatorio 'int' en la función main()",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2012h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2013h",
      "codigo_anterior": "0x2016h",
      "tipo": "renumerada",
      "titulo": "Detector de bloques else superfluos tras sentencias terminales",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2013h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2014h",
      "codigo_anterior": "0x6003h",
      "tipo": "propuesta-integrada",
      "titulo": "Cada función debe caber en una sola idea y en 25 líneas",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2014h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2015h",
      "codigo_anterior": "0x6007h",
      "tipo": "propuesta-integrada",
      "titulo": "No dupliques lógica: extraé una función",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2015h.md",
      "antipatrones_integrados": [
        "AP-0x1017h"
      ]
    },
    {
      "codigo_nuevo": "0x2016h",
      "codigo_anterior": "0x6008h",
      "tipo": "propuesta-integrada",
      "titulo": "Escribí el contrato de la función antes de implementarla",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2016h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x2017h",
      "codigo_anterior": "NEW_RECURSION",
      "tipo": "promovida",
      "titulo": "Toda funcion recursiva debe tener un caso base explicito",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2017h.md",
      "antipatrones_integrados": [
        "AP-0x2009h",
        "AP-0x2011h"
      ]
    },
    {
      "codigo_nuevo": "0x2018h",
      "codigo_anterior": "NEW_QSORT",
      "tipo": "promovida",
      "titulo": "Los comparadores no deben usar resta sujeta a desbordamiento",
      "directorio": "20_funciones",
      "archivo": "reglas/20_funciones/0x2018h.md",
      "antipatrones_integrados": [
        "AP-0x2012h"
      ]
    },
    {
      "codigo_nuevo": "0x3001h",
      "codigo_anterior": "0x3001h",
      "tipo": "renumerada",
      "titulo": "Siempre verificá la asignación exitosa de memoria dinámica",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3001h.md",
      "antipatrones_integrados": [
        "AP-0x3001h",
        "AP-0x301Bh",
        "AP-0x301Fh",
        "AP-0x3023h",
        "AP-0x3024h",
        "AP-0x3026h",
        "AP-0x3029h"
      ]
    },
    {
      "codigo_nuevo": "0x3002h",
      "codigo_anterior": "0x3002h",
      "tipo": "renumerada",
      "titulo": "Liberá siempre la memoria dinámica y asigná NULL al puntero para mitigar punteros colgantes",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3002h.md",
      "antipatrones_integrados": [
        "AP-0x3002b",
        "AP-0x3002h",
        "AP-0x3021h",
        "AP-0x3022h",
        "AP-0x3025h"
      ]
    },
    {
      "codigo_nuevo": "0x3003h",
      "codigo_anterior": "0x3003h",
      "tipo": "renumerada",
      "titulo": "No mezcles operaciones de asignación y comparación en una sola línea",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3003h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3004h",
      "codigo_anterior": "0x3004h",
      "tipo": "renumerada",
      "titulo": "Utilizá typedef para definir tipos de estructuras con el sufijo _t",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3004h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3005h",
      "codigo_anterior": "0x3005h",
      "tipo": "renumerada",
      "titulo": "Minimizá el uso de múltiples niveles de indirección (punteros a punteros)",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3005h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3006h",
      "codigo_anterior": "0x3006h",
      "tipo": "renumerada",
      "titulo": "Documentá la propiedad de los recursos al utilizar punteros",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3006h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3007h",
      "codigo_anterior": "0x3007h",
      "tipo": "renumerada",
      "titulo": "Los argumentos de tipo puntero deben ser const siempre que la función no los modifique",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3007h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3008h",
      "codigo_anterior": "0x3008h",
      "tipo": "renumerada",
      "titulo": "Los punteros nulos deben ser inicializados y comparados con NULL, no con 0",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3008h.md",
      "antipatrones_integrados": [
        "AP-0x3008h",
        "AP-0x301Dh"
      ]
    },
    {
      "codigo_nuevo": "0x3009h",
      "codigo_anterior": "0x3009h",
      "tipo": "renumerada",
      "titulo": "Documentá explícitamente los casos en que una función puede retornar NULL",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3009h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x300Ah",
      "codigo_anterior": "0x300Ah",
      "tipo": "renumerada",
      "titulo": "Utilizá cast explícito al convertir tipos de punteros",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x300Ah.md",
      "antipatrones_integrados": [
        "AP-0x300Ah",
        "AP-0x301Ch",
        "AP-0x3020h",
        "AP-0x3028h",
        "AP-0x302Ah"
      ]
    },
    {
      "codigo_nuevo": "0x300Bh",
      "codigo_anterior": "0x300Bh",
      "tipo": "renumerada",
      "titulo": "Usá siempre sizeof en las asignaciones de memoria dinámica, prefiriendo sizeof(*ptr)",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x300Bh.md",
      "antipatrones_integrados": [
        "AP-0x3019h",
        "AP-0x301Eh",
        "AP-0x3027h"
      ]
    },
    {
      "codigo_nuevo": "0x300Ch",
      "codigo_anterior": "0x300Ch",
      "tipo": "renumerada",
      "titulo": "Verificá siempre los límites de los arreglos antes de acceder a sus elementos",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x300Ch.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x300Dh",
      "codigo_anterior": "0x300Dh",
      "tipo": "renumerada",
      "titulo": "Utilizá enum en lugar de 'números mágicos' para conjuntos de estados y valores constantes",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x300Dh.md",
      "antipatrones_integrados": [
        "AP-0x300Dh"
      ]
    },
    {
      "codigo_nuevo": "0x300Eh",
      "codigo_anterior": "0x300Eh",
      "tipo": "renumerada",
      "titulo": "Documentá explícitamente el comportamiento de las funciones al manejar punteros nulos como argumentos",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x300Eh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x300Fh",
      "codigo_anterior": "0x300Fh",
      "tipo": "renumerada",
      "titulo": "Liberá la memoria en el orden inverso a su asignación",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x300Fh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3010h",
      "codigo_anterior": "0x3010h",
      "tipo": "renumerada",
      "titulo": "Las variables que representan tamaños o índices de arreglos deben ser de tipo size_t",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3010h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3011h",
      "codigo_anterior": "0x3011h",
      "tipo": "renumerada",
      "titulo": "Si una función recibe un puntero genérico para operaciones de solo lectura, la firma de la función debe utilizar const void*",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3011h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3012h",
      "codigo_anterior": "0x3012h",
      "tipo": "renumerada",
      "titulo": "Prohibición de aritmética de punteros sobre void*",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3012h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3013h",
      "codigo_anterior": "0x3013h",
      "tipo": "renumerada",
      "titulo": "Asignación de memoria con sizeof sobre puntero en lugar del tipo apuntado",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3013h.md",
      "antipatrones_integrados": [
        "AP-0x300Fh"
      ]
    },
    {
      "codigo_nuevo": "0x3014h",
      "codigo_anterior": "0x3014h",
      "tipo": "renumerada",
      "titulo": "Prohibición de doble liberación de memoria (double free) sobre el mismo puntero",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3014h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3015h",
      "codigo_anterior": "0x3015h",
      "tipo": "renumerada",
      "titulo": "Reallocación segura: no sobreescribir el puntero original directamente",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3015h.md",
      "antipatrones_integrados": [
        "AP-0x3015h"
      ]
    },
    {
      "codigo_nuevo": "0x3016h",
      "codigo_anterior": "0x3016h",
      "tipo": "renumerada",
      "titulo": "Orden incorrecto o sospechoso de argumentos en llamadas a memset",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3016h.md",
      "antipatrones_integrados": [
        "AP-0x301Ah"
      ]
    },
    {
      "codigo_nuevo": "0x3017h",
      "codigo_anterior": "0x3017h",
      "tipo": "renumerada",
      "titulo": "Orden canónico de calificadores: 'const tipo' en lugar de 'tipo const'",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3017h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3018h",
      "codigo_anterior": "0x3018h",
      "tipo": "renumerada",
      "titulo": "Inicialización idiomática de agregados con {0} en lugar de memset inmediato",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3018h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x3019h",
      "codigo_anterior": "0x3019h",
      "tipo": "renumerada",
      "titulo": "Prohibición de comparar punteros contra constantes numéricas distintas de NULL o cero",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x3019h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x301Ah",
      "codigo_anterior": "0x301Ah",
      "tipo": "renumerada",
      "titulo": "Validador de uso idiomático de tipos booleanos estándar",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x301Ah.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x301Bh",
      "codigo_anterior": "0x100Dh",
      "tipo": "renumerada",
      "titulo": "Prohibición de casts de tipo innecesarios o redundantes",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x301Bh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x301Ch",
      "codigo_anterior": "0x0023h",
      "tipo": "renumerada",
      "titulo": "Detector de variables locales no inicializadas con modificador const",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x301Ch.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x301Dh",
      "codigo_anterior": "0x0035h",
      "tipo": "renumerada",
      "titulo": "Diseñá los Tipos de Datos Abstractos utilizando punteros opacos",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x301Dh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x301Eh",
      "codigo_anterior": "0x0036h",
      "tipo": "renumerada",
      "titulo": "Asigná NULL al puntero tras liberar un recurso opaco en el ámbito del cliente",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x301Eh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x301Fh",
      "codigo_anterior": "NEW_FLOAT_EQ",
      "tipo": "promovida",
      "titulo": "No compares numeros de punto flotante con igualdad exacta",
      "directorio": "30_memoria",
      "archivo": "reglas/30_memoria/0x301Fh.md",
      "antipatrones_integrados": [
        "AP-0x1011h"
      ]
    },
    {
      "codigo_nuevo": "0x4001h",
      "codigo_anterior": "0x4001h",
      "tipo": "renumerada",
      "titulo": "Manejá correctamente la apertura y cierre de archivos",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x4001h.md",
      "antipatrones_integrados": [
        "AP-0x400Bh"
      ]
    },
    {
      "codigo_nuevo": "0x4002h",
      "codigo_anterior": "0x4002h",
      "tipo": "renumerada",
      "titulo": "Validá los retornos de las operaciones de lectura y escritura de archivos",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x4002h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x4003h",
      "codigo_anterior": "0x4003h",
      "tipo": "renumerada",
      "titulo": "Utilizá errno, perror y strerror para reportar fallos del sistema operativo de manera precisa",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x4003h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x4004h",
      "codigo_anterior": "0x4004h",
      "tipo": "renumerada",
      "titulo": "Mantené la simetría de recursos al abrir y cerrar archivos en el mismo nivel de abstracción",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x4004h.md",
      "antipatrones_integrados": [
        "AP-0x4009h"
      ]
    },
    {
      "codigo_nuevo": "0x4005h",
      "codigo_anterior": "0x4005h",
      "tipo": "renumerada",
      "titulo": "Prescindí del uso de offsets y posiciones fijas codificadas a mano en archivos binarios sin validar sus dimensiones",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x4005h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x4006h",
      "codigo_anterior": "0x4006h",
      "tipo": "renumerada",
      "titulo": "Prohibición del antipatrón while (!feof(f)) para control de fin de archivo",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x4006h.md",
      "antipatrones_integrados": [
        "AP-0x4002h"
      ]
    },
    {
      "codigo_nuevo": "0x4007h",
      "codigo_anterior": "0x4007h",
      "tipo": "renumerada",
      "titulo": "Prohibición de rutas absolutas hardcodeadas en llamadas de archivo",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x4007h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x4008h",
      "codigo_anterior": "0x4008h",
      "tipo": "renumerada",
      "titulo": "Validación obligatoria del valor de retorno de fclose() en modo escritura",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x4008h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x4009h",
      "codigo_anterior": "0x4009h",
      "tipo": "renumerada",
      "titulo": "Prohibición de anidar llamadas a fopen() directamente dentro de funciones de E/S",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x4009h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x400Ah",
      "codigo_anterior": "0x400Ah",
      "tipo": "renumerada",
      "titulo": "Prohibición de operar sobre flujos de archivo tras haber invocado fclose() (use-after-close)",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x400Ah.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x400Bh",
      "codigo_anterior": "NEW_FFLUSH",
      "tipo": "promovida",
      "titulo": "No uses fflush(stdin); consumi el buffer con getchar()",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x400Bh.md",
      "antipatrones_integrados": [
        "AP-0x4006h"
      ]
    },
    {
      "codigo_nuevo": "0x400Ch",
      "codigo_anterior": "NEW_FORMAT",
      "tipo": "promovida",
      "titulo": "Los formatos de printf/scanf deben coincidir y no ser variables",
      "directorio": "40_archivos",
      "archivo": "reglas/40_archivos/0x400Ch.md",
      "antipatrones_integrados": [
        "AP-0x4008b",
        "AP-0x4008h"
      ]
    },
    {
      "codigo_nuevo": "0x5001h",
      "codigo_anterior": "0x5001h",
      "tipo": "renumerada",
      "titulo": "Los arreglos estáticos deben ser creados con un tamaño fijo en tiempo de compilación",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5001h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5002h",
      "codigo_anterior": "0x5002h",
      "tipo": "renumerada",
      "titulo": "Desarrollá y compilá siempre con todas las advertencias del compilador activadas",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5002h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5003h",
      "codigo_anterior": "0x5003h",
      "tipo": "renumerada",
      "titulo": "Utilizá guardas de inclusión en todos los archivos de cabecera",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5003h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5004h",
      "codigo_anterior": "0x5004h",
      "tipo": "renumerada",
      "titulo": "Todas las operaciones con cadenas deben ser seguras",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5004h.md",
      "antipatrones_integrados": [
        "AP-0x5004b",
        "AP-0x5004c",
        "AP-0x5004h"
      ]
    },
    {
      "codigo_nuevo": "0x5005h",
      "codigo_anterior": "0x5005h",
      "tipo": "renumerada",
      "titulo": "Organizá la estructura de tus archivos .c de forma estándar",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5005h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5006h",
      "codigo_anterior": "0x5006h",
      "tipo": "renumerada",
      "titulo": "Preferí fgets sobre gets y scanf para leer cadenas",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5006h.md",
      "antipatrones_integrados": [
        "AP-0x400Ah"
      ]
    },
    {
      "codigo_nuevo": "0x5007h",
      "codigo_anterior": "0x5007h",
      "tipo": "renumerada",
      "titulo": "Inclusiones redundantes o duplicadas de la misma cabecera #include",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5007h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5008h",
      "codigo_anterior": "0x5008h",
      "tipo": "renumerada",
      "titulo": "Prohibición de funciones obsoletas o inseguras (gets, atoi)",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5008h.md",
      "antipatrones_integrados": [
        "AP-0x5008h"
      ]
    },
    {
      "codigo_nuevo": "0x5009h",
      "codigo_anterior": "0x5009h",
      "tipo": "renumerada",
      "titulo": "Prohibición de división entera no intencional asignada a flotantes",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5009h.md",
      "antipatrones_integrados": [
        "AP-0x5009h"
      ]
    },
    {
      "codigo_nuevo": "0x500Ah",
      "codigo_anterior": "0x500Ah",
      "tipo": "renumerada",
      "titulo": "Protección obligatoria de parámetros en macros funcionales mediante paréntesis",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x500Ah.md",
      "antipatrones_integrados": [
        "AP-0x500Ah"
      ]
    },
    {
      "codigo_nuevo": "0x500Bh",
      "codigo_anterior": "0x500Bh",
      "tipo": "renumerada",
      "titulo": "Inclusión obligatoria de cabeceras estándar para funciones de la biblioteca C",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x500Bh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x500Ch",
      "codigo_anterior": "0x500Ch",
      "tipo": "renumerada",
      "titulo": "Prohibición de inclusión directa de archivos de código fuente C (.c)",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x500Ch.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x500Dh",
      "codigo_anterior": "0x500Dh",
      "tipo": "renumerada",
      "titulo": "Prohibición de redefinir palabras clave o tipos primitivos de C con #define",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x500Dh.md",
      "antipatrones_integrados": [
        "AP-0x0039h",
        "AP-0x500Bh"
      ]
    },
    {
      "codigo_nuevo": "0x500Eh",
      "codigo_anterior": "0x500Eh",
      "tipo": "renumerada",
      "titulo": "Prohibición de la biblioteca obsoleta y no estándar <conio.h> (getch, clrscr)",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x500Eh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x500Fh",
      "codigo_anterior": "0x5011h",
      "tipo": "renumerada",
      "titulo": "Colisión de nombres de macroguardas entre archivos de cabecera distintos",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x500Fh.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5010h",
      "codigo_anterior": "0x5012h",
      "tipo": "renumerada",
      "titulo": "Prohibición de directivas #pragma no estándar o privativas",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5010h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5011h",
      "codigo_anterior": "0x5013h",
      "tipo": "renumerada",
      "titulo": "Prohibición de declaraciones extern en archivos de implementación (.c)",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5011h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5012h",
      "codigo_anterior": "0x5014h",
      "tipo": "renumerada",
      "titulo": "Detección de inclusiones cíclicas entre archivos de cabecera",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5012h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5013h",
      "codigo_anterior": "0x5015h",
      "tipo": "renumerada",
      "titulo": "Protección obligatoria con paréntesis envolventes en expresiones de macroconstantes (#define)",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5013h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5014h",
      "codigo_anterior": "0x5016h",
      "tipo": "renumerada",
      "titulo": "Inclusión explícita obligatoria de cabeceras para funciones de biblioteca estándar",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5014h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x5015h",
      "codigo_anterior": "NEW_SYSTEM",
      "tipo": "promovida",
      "titulo": "No invoques el interprete de comandos con system() o popen()",
      "directorio": "50_seguridad",
      "archivo": "reglas/50_seguridad/0x5015h.md",
      "antipatrones_integrados": [
        "AP-0x5014h",
        "AP-0x5016h"
      ]
    },
    {
      "codigo_nuevo": "0x6001h",
      "codigo_anterior": "0x6001h",
      "tipo": "propuesta-integrada",
      "titulo": "Diseñá el algoritmo antes de escribir código en C",
      "directorio": "60_proceso",
      "archivo": "reglas/60_proceso/0x6001h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x6002h",
      "codigo_anterior": "0x6002h",
      "tipo": "propuesta-integrada",
      "titulo": "Compilá con frecuencia y resolvé el primer error antes de continuar",
      "directorio": "60_proceso",
      "archivo": "reglas/60_proceso/0x6002h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x6003h",
      "codigo_anterior": "0x6005h",
      "tipo": "propuesta-integrada",
      "titulo": "Declará cada variable lo más cerca posible de su primer uso",
      "directorio": "60_proceso",
      "archivo": "reglas/60_proceso/0x6003h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x6004h",
      "codigo_anterior": "0x6006h",
      "tipo": "propuesta-integrada",
      "titulo": "No reutilices una variable para propósitos distintos",
      "directorio": "60_proceso",
      "archivo": "reglas/60_proceso/0x6004h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x6005h",
      "codigo_anterior": "0x600Fh",
      "tipo": "propuesta-integrada",
      "titulo": "No optimices prematuramente",
      "directorio": "60_proceso",
      "archivo": "reglas/60_proceso/0x6005h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x7001h",
      "codigo_anterior": "0x0003h",
      "tipo": "renumerada",
      "titulo": "Siempre debés inicializar las variables a un valor conocido",
      "directorio": "70_robustez",
      "archivo": "reglas/70_robustez/0x7001h.md",
      "antipatrones_integrados": [
        "AP-0x0003b",
        "AP-0x0004b"
      ]
    },
    {
      "codigo_nuevo": "0x7002h",
      "codigo_anterior": "0x6010h",
      "tipo": "propuesta-integrada",
      "titulo": "Validá los datos en la frontera del programa",
      "directorio": "70_robustez",
      "archivo": "reglas/70_robustez/0x7002h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x7003h",
      "codigo_anterior": "0x6011h",
      "tipo": "propuesta-integrada",
      "titulo": "No ignores valores de retorno que pueden indicar fallo",
      "directorio": "70_robustez",
      "archivo": "reglas/70_robustez/0x7003h.md",
      "antipatrones_integrados": [
        "AP-0x2013h"
      ]
    },
    {
      "codigo_nuevo": "0x7004h",
      "codigo_anterior": "0x6012h",
      "tipo": "propuesta-integrada",
      "titulo": "No llamés exit() en funciones de biblioteca: propagá el error",
      "directorio": "70_robustez",
      "archivo": "reglas/70_robustez/0x7004h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x7005h",
      "codigo_anterior": "0x6013h",
      "tipo": "propuesta-integrada",
      "titulo": "Inicializá todos los campos de estructuras y arreglos",
      "directorio": "70_robustez",
      "archivo": "reglas/70_robustez/0x7005h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x7006h",
      "codigo_anterior": "0x6014h",
      "tipo": "propuesta-integrada",
      "titulo": "Probá explícitamente los casos borde",
      "directorio": "70_robustez",
      "archivo": "reglas/70_robustez/0x7006h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x7007h",
      "codigo_anterior": "0x6015h",
      "tipo": "propuesta-integrada",
      "titulo": "Evitá los parámetros bandera de tipo bool",
      "directorio": "70_robustez",
      "archivo": "reglas/70_robustez/0x7007h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x8001h",
      "codigo_anterior": "0x2006h",
      "tipo": "renumerada",
      "titulo": "Una aserción por cada función de prueba",
      "directorio": "80_verificacion",
      "archivo": "reglas/80_verificacion/0x8001h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x8002h",
      "codigo_anterior": "0x6016h",
      "tipo": "propuesta-integrada",
      "titulo": "Escribí al menos una prueba por cláusula del contrato",
      "directorio": "80_verificacion",
      "archivo": "reglas/80_verificacion/0x8002h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x8003h",
      "codigo_anterior": "0x6017h",
      "tipo": "propuesta-integrada",
      "titulo": "Verificá con gcc, gdb y valgrind antes de entregar",
      "directorio": "80_verificacion",
      "archivo": "reglas/80_verificacion/0x8003h.md",
      "antipatrones_integrados": []
    },
    {
      "codigo_nuevo": "0x8004h",
      "codigo_anterior": "0x6018h",
      "tipo": "propuesta-integrada",
      "titulo": "Ejecutá la lista de verificación de calidad antes de entregar",
      "directorio": "80_verificacion",
      "archivo": "reglas/80_verificacion/0x8004h.md",
      "antipatrones_integrados": []
    }
  ],
  "antipatrones": [
    {
      "codigo_anterior": "AP-0x0003b",
      "codigo_nuevo": "0x7001h",
      "accion": "integrado",
      "archivo_destino": "reglas/70_robustez/0x7001h.md"
    },
    {
      "codigo_anterior": "AP-0x0004b",
      "codigo_nuevo": "0x7001h",
      "accion": "integrado",
      "archivo_destino": "reglas/70_robustez/0x7001h.md"
    },
    {
      "codigo_anterior": "AP-0x0039h",
      "codigo_nuevo": "0x500Dh",
      "accion": "integrado",
      "archivo_destino": "reglas/50_seguridad/0x500Dh.md"
    },
    {
      "codigo_anterior": "AP-0x1001h",
      "codigo_nuevo": "0x1001h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1001h.md"
    },
    {
      "codigo_anterior": "AP-0x1005h",
      "codigo_nuevo": "0x1005h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1005h.md"
    },
    {
      "codigo_anterior": "AP-0x100Ah",
      "codigo_nuevo": "0x1009h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1009h.md"
    },
    {
      "codigo_anterior": "AP-0x100Ch",
      "codigo_nuevo": "0x1008h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1008h.md"
    },
    {
      "codigo_anterior": "AP-0x100Dh",
      "codigo_nuevo": "0x1018h",
      "accion": "promovido-a-regla",
      "archivo_destino": "reglas/10_control/0x1018h.md"
    },
    {
      "codigo_anterior": "AP-0x100Eh",
      "codigo_nuevo": "0x1013h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1013h.md"
    },
    {
      "codigo_anterior": "AP-0x100Fh",
      "codigo_nuevo": "0x100Dh",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x100Dh.md"
    },
    {
      "codigo_anterior": "AP-0x1010h",
      "codigo_nuevo": "0x1012h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1012h.md"
    },
    {
      "codigo_anterior": "AP-0x1011h",
      "codigo_nuevo": "0x301Fh",
      "accion": "promovido-a-regla",
      "archivo_destino": "reglas/30_memoria/0x301Fh.md"
    },
    {
      "codigo_anterior": "AP-0x1014h",
      "codigo_nuevo": "0x100Dh",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x100Dh.md"
    },
    {
      "codigo_anterior": "AP-0x1015h",
      "codigo_nuevo": "0x1003h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1003h.md"
    },
    {
      "codigo_anterior": "AP-0x1016h",
      "codigo_nuevo": "0x1013h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1013h.md"
    },
    {
      "codigo_anterior": "AP-0x1017h",
      "codigo_nuevo": "0x2015h",
      "accion": "integrado",
      "archivo_destino": "reglas/20_funciones/0x2015h.md"
    },
    {
      "codigo_anterior": "AP-0x1018h",
      "codigo_nuevo": "0x1001h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1001h.md"
    },
    {
      "codigo_anterior": "AP-0x1019h",
      "codigo_nuevo": "0x1006h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1006h.md"
    },
    {
      "codigo_anterior": "AP-0x101Ah",
      "codigo_nuevo": "0x1005h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1005h.md"
    },
    {
      "codigo_anterior": "AP-0x101Bh",
      "codigo_nuevo": "0x1005h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1005h.md"
    },
    {
      "codigo_anterior": "AP-0x101Ch",
      "codigo_nuevo": "0x1002h",
      "accion": "integrado",
      "archivo_destino": "reglas/10_control/0x1002h.md"
    },
    {
      "codigo_anterior": "AP-0x2007h",
      "codigo_nuevo": "0x2006h",
      "accion": "integrado",
      "archivo_destino": "reglas/20_funciones/0x2006h.md"
    },
    {
      "codigo_anterior": "AP-0x2009h",
      "codigo_nuevo": "0x2017h",
      "accion": "promovido-a-regla",
      "archivo_destino": "reglas/20_funciones/0x2017h.md"
    },
    {
      "codigo_anterior": "AP-0x200Bh",
      "codigo_nuevo": "0x200Ah",
      "accion": "integrado",
      "archivo_destino": "reglas/20_funciones/0x200Ah.md"
    },
    {
      "codigo_anterior": "AP-0x2011h",
      "codigo_nuevo": "0x2017h",
      "accion": "promovido-a-regla",
      "archivo_destino": "reglas/20_funciones/0x2017h.md"
    },
    {
      "codigo_anterior": "AP-0x2012h",
      "codigo_nuevo": "0x2018h",
      "accion": "promovido-a-regla",
      "archivo_destino": "reglas/20_funciones/0x2018h.md"
    },
    {
      "codigo_anterior": "AP-0x2013h",
      "codigo_nuevo": "0x7003h",
      "accion": "integrado",
      "archivo_destino": "reglas/70_robustez/0x7003h.md"
    },
    {
      "codigo_anterior": "AP-0x3001h",
      "codigo_nuevo": "0x3001h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3001h.md"
    },
    {
      "codigo_anterior": "AP-0x3002b",
      "codigo_nuevo": "0x3002h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3002h.md"
    },
    {
      "codigo_anterior": "AP-0x3002h",
      "codigo_nuevo": "0x3002h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3002h.md"
    },
    {
      "codigo_anterior": "AP-0x3008h",
      "codigo_nuevo": "0x3008h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3008h.md"
    },
    {
      "codigo_anterior": "AP-0x300Ah",
      "codigo_nuevo": "0x300Ah",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x300Ah.md"
    },
    {
      "codigo_anterior": "AP-0x300Dh",
      "codigo_nuevo": "0x300Dh",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x300Dh.md"
    },
    {
      "codigo_anterior": "AP-0x300Fh",
      "codigo_nuevo": "0x3013h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3013h.md"
    },
    {
      "codigo_anterior": "AP-0x3015h",
      "codigo_nuevo": "0x3015h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3015h.md"
    },
    {
      "codigo_anterior": "AP-0x3019h",
      "codigo_nuevo": "0x300Bh",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x300Bh.md"
    },
    {
      "codigo_anterior": "AP-0x301Ah",
      "codigo_nuevo": "0x3016h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3016h.md"
    },
    {
      "codigo_anterior": "AP-0x301Bh",
      "codigo_nuevo": "0x3001h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3001h.md"
    },
    {
      "codigo_anterior": "AP-0x301Ch",
      "codigo_nuevo": "0x300Ah",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x300Ah.md"
    },
    {
      "codigo_anterior": "AP-0x301Dh",
      "codigo_nuevo": "0x3008h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3008h.md"
    },
    {
      "codigo_anterior": "AP-0x301Eh",
      "codigo_nuevo": "0x300Bh",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x300Bh.md"
    },
    {
      "codigo_anterior": "AP-0x301Fh",
      "codigo_nuevo": "0x3001h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3001h.md"
    },
    {
      "codigo_anterior": "AP-0x3020h",
      "codigo_nuevo": "0x300Ah",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x300Ah.md"
    },
    {
      "codigo_anterior": "AP-0x3021h",
      "codigo_nuevo": "0x3002h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3002h.md"
    },
    {
      "codigo_anterior": "AP-0x3022h",
      "codigo_nuevo": "0x3002h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3002h.md"
    },
    {
      "codigo_anterior": "AP-0x3023h",
      "codigo_nuevo": "0x3001h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3001h.md"
    },
    {
      "codigo_anterior": "AP-0x3024h",
      "codigo_nuevo": "0x3001h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3001h.md"
    },
    {
      "codigo_anterior": "AP-0x3025h",
      "codigo_nuevo": "0x3002h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3002h.md"
    },
    {
      "codigo_anterior": "AP-0x3026h",
      "codigo_nuevo": "0x3001h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3001h.md"
    },
    {
      "codigo_anterior": "AP-0x3027h",
      "codigo_nuevo": "0x300Bh",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x300Bh.md"
    },
    {
      "codigo_anterior": "AP-0x3028h",
      "codigo_nuevo": "0x300Ah",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x300Ah.md"
    },
    {
      "codigo_anterior": "AP-0x3029h",
      "codigo_nuevo": "0x3001h",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x3001h.md"
    },
    {
      "codigo_anterior": "AP-0x302Ah",
      "codigo_nuevo": "0x300Ah",
      "accion": "integrado",
      "archivo_destino": "reglas/30_memoria/0x300Ah.md"
    },
    {
      "codigo_anterior": "AP-0x4002h",
      "codigo_nuevo": "0x4006h",
      "accion": "integrado",
      "archivo_destino": "reglas/40_archivos/0x4006h.md"
    },
    {
      "codigo_anterior": "AP-0x4006h",
      "codigo_nuevo": "0x400Bh",
      "accion": "promovido-a-regla",
      "archivo_destino": "reglas/40_archivos/0x400Bh.md"
    },
    {
      "codigo_anterior": "AP-0x4008b",
      "codigo_nuevo": "0x400Ch",
      "accion": "promovido-a-regla",
      "archivo_destino": "reglas/40_archivos/0x400Ch.md"
    },
    {
      "codigo_anterior": "AP-0x4008h",
      "codigo_nuevo": "0x400Ch",
      "accion": "promovido-a-regla",
      "archivo_destino": "reglas/40_archivos/0x400Ch.md"
    },
    {
      "codigo_anterior": "AP-0x4009h",
      "codigo_nuevo": "0x4004h",
      "accion": "integrado",
      "archivo_destino": "reglas/40_archivos/0x4004h.md"
    },
    {
      "codigo_anterior": "AP-0x400Ah",
      "codigo_nuevo": "0x5006h",
      "accion": "integrado",
      "archivo_destino": "reglas/50_seguridad/0x5006h.md"
    },
    {
      "codigo_anterior": "AP-0x400Bh",
      "codigo_nuevo": "0x4001h",
      "accion": "integrado",
      "archivo_destino": "reglas/40_archivos/0x4001h.md"
    },
    {
      "codigo_anterior": "AP-0x5004b",
      "codigo_nuevo": "0x5004h",
      "accion": "integrado",
      "archivo_destino": "reglas/50_seguridad/0x5004h.md"
    },
    {
      "codigo_anterior": "AP-0x5004c",
      "codigo_nuevo": "0x5004h",
      "accion": "integrado",
      "archivo_destino": "reglas/50_seguridad/0x5004h.md"
    },
    {
      "codigo_anterior": "AP-0x5004h",
      "codigo_nuevo": "0x5004h",
      "accion": "integrado",
      "archivo_destino": "reglas/50_seguridad/0x5004h.md"
    },
    {
      "codigo_anterior": "AP-0x5008h",
      "codigo_nuevo": "0x5008h",
      "accion": "integrado",
      "archivo_destino": "reglas/50_seguridad/0x5008h.md"
    },
    {
      "codigo_anterior": "AP-0x5009h",
      "codigo_nuevo": "0x5009h",
      "accion": "integrado",
      "archivo_destino": "reglas/50_seguridad/0x5009h.md"
    },
    {
      "codigo_anterior": "AP-0x500Ah",
      "codigo_nuevo": "0x500Ah",
      "accion": "integrado",
      "archivo_destino": "reglas/50_seguridad/0x500Ah.md"
    },
    {
      "codigo_anterior": "AP-0x500Bh",
      "codigo_nuevo": "0x500Dh",
      "accion": "integrado",
      "archivo_destino": "reglas/50_seguridad/0x500Dh.md"
    },
    {
      "codigo_anterior": "AP-0x5014h",
      "codigo_nuevo": "0x5015h",
      "accion": "promovido-a-regla",
      "archivo_destino": "reglas/50_seguridad/0x5015h.md"
    },
    {
      "codigo_anterior": "AP-0x5016h",
      "codigo_nuevo": "0x5015h",
      "accion": "promovido-a-regla",
      "archivo_destino": "reglas/50_seguridad/0x5015h.md"
    }
  ],
  "mapa_codigos": {
    "0x0000h": "0x0001h",
    "0x0001h": "0x0101h",
    "0x0002h": "0x0002h",
    "0x0003h": "0x7001h",
    "0x0004h": "0x0003h",
    "0x0005h": "0x0004h",
    "0x0006h": "0x0005h",
    "0x0007h": "0x0102h",
    "0x0008h": "0x0103h",
    "0x0009h": "0x0006h",
    "0x000Ah": "0x0201h",
    "0x000Bh": "0x0007h",
    "0x000Ch": "0x0104h",
    "0x000Dh": "0x0202h",
    "0x000Eh": "0x0105h",
    "0x000Fh": "0x0203h",
    "0x0010h": "0x0204h",
    "0x0011h": "0x0205h",
    "0x0012h": "0x0106h",
    "0x0013h": "0x0107h",
    "0x0014h": "0x0108h",
    "0x0015h": "0x0008h",
    "0x0016h": "0x0109h",
    "0x0017h": "0x0009h",
    "0x0018h": "0x010Ah",
    "0x0019h": "0x000Ah",
    "0x001Ah": "0x000Bh",
    "0x001Bh": "0x000Ch",
    "0x001Ch": "0x000Dh",
    "0x001Dh": "0x000Eh",
    "0x001Eh": "0x000Fh",
    "0x001Fh": "0x0010h",
    "0x0020h": "0x010Bh",
    "0x0022h": "0x0011h",
    "0x0023h": "0x301Ch",
    "0x0025h": "0x0012h",
    "0x0026h": "0x010Ch",
    "0x0027h": "0x0206h",
    "0x0028h": "0x0013h",
    "0x0029h": "0x0014h",
    "0x002Bh": "0x0015h",
    "0x002Ch": "0x010Dh",
    "0x002Dh": "0x0016h",
    "0x0035h": "0x301Dh",
    "0x0036h": "0x301Eh",
    "0x0037h": "0x010Eh",
    "0x0038h": "0x010Fh",
    "0x1001h": "0x1001h",
    "0x1002h": "0x1002h",
    "0x1003h": "0x1003h",
    "0x1004h": "0x1004h",
    "0x1005h": "0x1005h",
    "0x1006h": "0x1006h",
    "0x1007h": "0x1007h",
    "0x1008h": "0x1008h",
    "0x100Ah": "0x1009h",
    "0x100Bh": "0x100Ah",
    "0x100Ch": "0x100Bh",
    "0x100Dh": "0x301Bh",
    "0x100Eh": "0x100Ch",
    "0x100Fh": "0x100Dh",
    "0x1010h": "0x100Eh",
    "0x1011h": "0x100Fh",
    "0x1012h": "0x1010h",
    "0x1013h": "0x1011h",
    "0x1014h": "0x1012h",
    "0x1016h": "0x1013h",
    "0x1017h": "0x1014h",
    "0x2001h": "0x2001h",
    "0x2002h": "0x2002h",
    "0x2003h": "0x2003h",
    "0x2004h": "0x2004h",
    "0x2005h": "0x2005h",
    "0x2006h": "0x8001h",
    "0x2007h": "0x2006h",
    "0x2008h": "0x2007h",
    "0x2009h": "0x2008h",
    "0x200Ah": "0x2009h",
    "0x200Bh": "0x200Ah",
    "0x200Ch": "0x200Bh",
    "0x200Dh": "0x200Ch",
    "0x200Eh": "0x200Dh",
    "0x200Fh": "0x200Eh",
    "0x2010h": "0x200Fh",
    "0x2011h": "0x2010h",
    "0x2012h": "0x2011h",
    "0x2013h": "0x2012h",
    "0x2016h": "0x2013h",
    "0x3001h": "0x3001h",
    "0x3002h": "0x3002h",
    "0x3003h": "0x3003h",
    "0x3004h": "0x3004h",
    "0x3005h": "0x3005h",
    "0x3006h": "0x3006h",
    "0x3007h": "0x3007h",
    "0x3008h": "0x3008h",
    "0x3009h": "0x3009h",
    "0x300Ah": "0x300Ah",
    "0x300Bh": "0x300Bh",
    "0x300Ch": "0x300Ch",
    "0x300Dh": "0x300Dh",
    "0x300Eh": "0x300Eh",
    "0x300Fh": "0x300Fh",
    "0x3010h": "0x3010h",
    "0x3011h": "0x3011h",
    "0x3012h": "0x3012h",
    "0x3013h": "0x3013h",
    "0x3014h": "0x3014h",
    "0x3015h": "0x3015h",
    "0x3016h": "0x3016h",
    "0x3017h": "0x3017h",
    "0x3018h": "0x3018h",
    "0x3019h": "0x3019h",
    "0x301Ah": "0x301Ah",
    "0x4001h": "0x4001h",
    "0x4002h": "0x4002h",
    "0x4003h": "0x4003h",
    "0x4004h": "0x4004h",
    "0x4005h": "0x4005h",
    "0x4006h": "0x4006h",
    "0x4007h": "0x4007h",
    "0x4008h": "0x4008h",
    "0x4009h": "0x4009h",
    "0x400Ah": "0x400Ah",
    "0x5001h": "0x5001h",
    "0x5002h": "0x5002h",
    "0x5003h": "0x5003h",
    "0x5004h": "0x5004h",
    "0x5005h": "0x5005h",
    "0x5006h": "0x5006h",
    "0x5007h": "0x5007h",
    "0x5008h": "0x5008h",
    "0x5009h": "0x5009h",
    "0x500Ah": "0x500Ah",
    "0x500Bh": "0x500Bh",
    "0x500Ch": "0x500Ch",
    "0x500Dh": "0x500Dh",
    "0x500Eh": "0x500Eh",
    "0x5011h": "0x500Fh",
    "0x5012h": "0x5010h",
    "0x5013h": "0x5011h",
    "0x5014h": "0x5012h",
    "0x5015h": "0x5013h",
    "0x5016h": "0x5014h",
    "0x6001h": "0x6001h",
    "0x6002h": "0x6002h",
    "0x6003h": "0x2014h",
    "0x6004h": "0x1015h",
    "0x6005h": "0x6003h",
    "0x6006h": "0x6004h",
    "0x6007h": "0x2015h",
    "0x6008h": "0x2016h",
    "0x6009h": "0x0110h",
    "0x600Ah": "0x0111h",
    "0x600Bh": "0x0112h",
    "0x600Ch": "0x1016h",
    "0x600Dh": "0x1017h",
    "0x600Eh": "0x0017h",
    "0x600Fh": "0x6005h",
    "0x6010h": "0x7002h",
    "0x6011h": "0x7003h",
    "0x6012h": "0x7004h",
    "0x6013h": "0x7005h",
    "0x6014h": "0x7006h",
    "0x6015h": "0x7007h",
    "0x6016h": "0x8002h",
    "0x6017h": "0x8003h",
    "0x6018h": "0x8004h"
  },
  "mapa_antipatrones": {
    "AP-0x0003b": "0x7001h",
    "AP-0x0004b": "0x7001h",
    "AP-0x0039h": "0x500Dh",
    "AP-0x1001h": "0x1001h",
    "AP-0x1005h": "0x1005h",
    "AP-0x100Ah": "0x1009h",
    "AP-0x100Ch": "0x1008h",
    "AP-0x100Dh": "0x1018h",
    "AP-0x100Eh": "0x1013h",
    "AP-0x100Fh": "0x100Dh",
    "AP-0x1010h": "0x1012h",
    "AP-0x1011h": "0x301Fh",
    "AP-0x1014h": "0x100Dh",
    "AP-0x1015h": "0x1003h",
    "AP-0x1016h": "0x1013h",
    "AP-0x1017h": "0x2015h",
    "AP-0x1018h": "0x1001h",
    "AP-0x1019h": "0x1006h",
    "AP-0x101Ah": "0x1005h",
    "AP-0x101Bh": "0x1005h",
    "AP-0x101Ch": "0x1002h",
    "AP-0x2007h": "0x2006h",
    "AP-0x2009h": "0x2017h",
    "AP-0x200Bh": "0x200Ah",
    "AP-0x2011h": "0x2017h",
    "AP-0x2012h": "0x2018h",
    "AP-0x2013h": "0x7003h",
    "AP-0x3001h": "0x3001h",
    "AP-0x3002b": "0x3002h",
    "AP-0x3002h": "0x3002h",
    "AP-0x3008h": "0x3008h",
    "AP-0x300Ah": "0x300Ah",
    "AP-0x300Dh": "0x300Dh",
    "AP-0x300Fh": "0x3013h",
    "AP-0x3015h": "0x3015h",
    "AP-0x3019h": "0x300Bh",
    "AP-0x301Ah": "0x3016h",
    "AP-0x301Bh": "0x3001h",
    "AP-0x301Ch": "0x300Ah",
    "AP-0x301Dh": "0x3008h",
    "AP-0x301Eh": "0x300Bh",
    "AP-0x301Fh": "0x3001h",
    "AP-0x3020h": "0x300Ah",
    "AP-0x3021h": "0x3002h",
    "AP-0x3022h": "0x3002h",
    "AP-0x3023h": "0x3001h",
    "AP-0x3024h": "0x3001h",
    "AP-0x3025h": "0x3002h",
    "AP-0x3026h": "0x3001h",
    "AP-0x3027h": "0x300Bh",
    "AP-0x3028h": "0x300Ah",
    "AP-0x3029h": "0x3001h",
    "AP-0x302Ah": "0x300Ah",
    "AP-0x4002h": "0x4006h",
    "AP-0x4006h": "0x400Bh",
    "AP-0x4008b": "0x400Ch",
    "AP-0x4008h": "0x400Ch",
    "AP-0x4009h": "0x4004h",
    "AP-0x400Ah": "0x5006h",
    "AP-0x400Bh": "0x4001h",
    "AP-0x5004b": "0x5004h",
    "AP-0x5004c": "0x5004h",
    "AP-0x5004h": "0x5004h",
    "AP-0x5008h": "0x5008h",
    "AP-0x5009h": "0x5009h",
    "AP-0x500Ah": "0x500Ah",
    "AP-0x500Bh": "0x500Dh",
    "AP-0x5014h": "0x5015h",
    "AP-0x5016h": "0x5015h"
  }
}
