• Estándares de programación

  • Estándares en la BD

  • Nombres de variables

  • Nombres de archivos

  • Constantes

  • Variables Globales

  • Corchetes e identación

  • Interacción con la Base de Datos (PHP)

  • Consultas

  • Claridad del código

  • Inclusión de funciones y rutinas

  • HTML

  • Estructura de archivos

  • Nombres en las tablas

  • Campos

  • Propiedades de tablas

  • Construcción de consultas

    • Los nombres que se usen deben ser significativos.
    • Los nombres deben estar en minúsculas, excepto la primera letra de cada palabra a partir de la segunda.
    • Una variable $aa (PHP) o a1 (JS) no significan nada. No hay problema en utilizarlo si es una variable temporal que va a ser utilizada en las líneas siguientes, pero si va a ser utilizada más lejos en el programa, debe tener un nombre significativo.
  • Generales

    • Todos los nombres irán en minúscula
    • Los nombres no deben incluir números
    • Los nombres deben de representar lo que hay dentro de él

    PHP

    • Si el nombre tendrá más de dos palabras, estas irán separadas por puntos “.”. Ej. “pie.pagina.php”
    • Los archivos que contengan una o varias clases deben de empezar con el prefijo “class” seguido de un punto. Ej. “class.connection.php”

    Javascript

    • Si el nombre tendrá más de dos palabras, estas irán separadas por guiones “-“. Ej. “objetos-comunes.js”

    Además, la codificación estándar de los archivos debe ser UTF-8 sin BOM, algunos editores de texto lo llaman ANSI as UTF-8 y es equivalente.
    Esto es para evitar símbolos extraños en los textos de campos o datos ingresados en la Base de Datos.

  • Se deben evitar constantes numéricas sin mucho significado. Es conveniente definir las constantes en el código. Todos los caracteres deben estar en mayúsculas y las palabras separadas por “_”.
    Por ejemplo: PORCENTAJE_IVA

    La forma de declarar esta variable sería la siguiente:
    define('PORCENTAJE_IVA',0.13)

  • Se debe evitar el uso de variables globales ya que pueden ser modificadas erróneamente y pueden causar errores muy difíciles de identificar. Si se usan, para poder identificarlas, deben estar en mayúsculas.

    Por ejemplo: $VARIABLE_GLOBAL=1

  • La indentación es algo que ayuda a darle claridad a un programa y es INDISPENSABLE que se haga bien. Debe hacerse con “tabs” y no con espacios en blanco.

    Desarrollando casi con cualquier editor es importante asegurarse de sustituir el identado del código de espacios a “tabs” cuándo se copie y pegue código de otro lugar.

    Los corchetes de un bloque if, o switch, o for, deben ir en la misma línea de la cláusula.
    Por ejemplo, esta sería una forma apropiada de hacerlo.
    if($condicion){

  • Se debe usar el objeto de conexión principal, está ubicado en la dirección “libs/php/class.connection.php”. Este en el constructor inicializa la conexión y además tiene las funciones principales para ejecutar mantenimientos y consultas, además de las funciones para procesar los objetos que estas funciones devuelven.

    Cuando se lee un registro de una tabla usando el objeto principal de conexión, el nombre de la variable debe empezar por $row_ y luego tener el nombre de la tabla. Esto es importante para saber qué datos contiene ese array si se mezclan varias consultas a la vez

    El objeto principal se instancia de la siguiente manera:
    $conexion = new Conexion();

  • Antes de concatenar variables de PHP en cadenas String que contengan una consulta en la base de datos, se debe pasar por el filtro de escape a caracteres especiales, en el objeto de conexión. Ejemplo: $idEmpleado = $conexion->escape($_POST["id"]);

    Esto es obligación para evitar inyecciones SQL en los archivos que procesen peticiones que interactúen con la base de datos.

    Además, es necesario asegurar la codificación del String que se insertará en la base de datos.

  • Es importante que el código y que se escriban sean claros y fáciles de entender. Por eso, además de dar la explicación de que hace cada programa o función al principio, hay que tratar que las funciones quepan en una sola página y que antes de cada sección se explique qué es lo que se está haciendo. Sobre todo, cuando se usan “truquitos”, es muy importante que se explique lo que se está haciendo.

  • Las funciones externas deben incluirse sólo una vez. Para lograr este fin, se debe utilizar la función include_once($nombre_del_archivo);

    Al inicio de cada archivo que contenga funciones, se debe explicar el contenido de las mismas para poder no navegar dentro del archivo buscando alguna función.

  • Los códigos en HTML deben cumplir con unas reglas adicionales:

    • Los tags tienen que estar escritos en minúsculas. Por ejemplo <td> en vez de <TD>.
    • Los objetos html deben tener id y name, y ambos deben ser iguales. Cuando se pone sólamente el name y en IE se usa getElementById funciona (incorrectamente), pero en FireFox no. Para evitar esto se deben usar ambos.
    • Cuando hay que escribir variables de PHP dentro de un código HTML se debe tener el HTML dentro de PHP y no al revés.
    • Cuando se construye un código de php, después del tag de mayor-interrogación, debe venir la palabra php para evitar problemas de implementación.
    • El código HTML generado por un script también debe ser legible, bien estructurado e indentado. Por lo que es recomendable el uso de “/n” y “/t”.
    • Las etiquetas link para incluir archivos CSS se deben ubicar al inicio del código HTML, antes de incluir cualquier archivo javascript.
    • No se debe usar “padding” en un elemento HTML si es necesario tener un ancho o alto fijo, ya que el padding aumenta el tamaño de los elementos en algunos navegadores y en otros no.
    • No hay que incluir mucho código de estilo “inline” con el atributo style en el elemento. Si se requieren más de 2 propiedades de estilo se debe crear una clase en el mismo archivo junto con el HTML o incluirse en un archivo externo CSS.
    • Para escribir símbolos especiales se debe de usar su codificación en HTML. Por ejemplo, para escribir la palabra “día”, lo haremos usando d&iacute;a. Esto se hace para evitar símbolos extraños en los navegadores clientes, ya que ellos pueden disponer de la codificación del texto que se está visualizando.
    • Los archivos PHP que se utilicen durante la construcción de las bases de cada página (sin tomar en cuenta el cuerpo principal) se ubican dentro de “res/partes/“
    • Los archivos propios en PHP que contengan clases o configuraciones se ubican en la carpeta “libs/php/“
    • Los archivos propios en Javascript se ubican en “lib/js/custom/“
    • Los archivos que responden al FrontEnd (llamados BackEnd) se ubican en la carpeta “stores/“ y se llamarán igual que su contraparte del FrontEnd
    • Los archivos propios de CSS se ubican en “res/css/“
    • Las imágenes se ubican en “res/img/“
    • Los archivos que sirven de FrontEnd se encuentran en la carpeta raíz “/“
    • Los nombres de las tablas son representativos a lo que contienen
    • Los nombres de las tablas son en singular
    • Si es necesario más de una palabra, se debe separar por guiones bajos “_”
  • Generales

    • Los campos deben empezar con tres letras que representen a la tabla a la que pertenecen y un guión bajo. Ejemplo: emp_id
    • La PK de cada tabla debe ser llamado “id”, respetando siempre la primera regla del prefijo de las tablas.
    • Las FK de las tablas deben de tener en el nombre el texto “id” unido con el nombre de la otra tabla. Ejemplo: idmunicipio e igual que la anterior, respetando la primera regla.
    • El separador de palabras en los nombres de los campos debe ser el guión bajo “_”, en caso de ser necesario.

    Tipos de dato

    • Los campos que sean PK y FK deben ser de tipo INT con una longitud de 8
    • La longitud máxima de un campo de tipo VARCHAR es de 255. En caso de necesitar más, evaluar si aumentar la longitud o usar un tipo LONGTEXT
    • Los campos que almacenen fechas y horas, usarán el tipo DATETIME con el formato “YYYY-MM-DD HH:MM:SS”
    • Los campos que almacenen sólo fecha serán de tipo DATE y los de sólo hora serán TIME
    • Todas las tablas deben tener un campo con su fecha de creación
    • En caso de necesitar un campo de valores predefinidos, se usará el tipo ENUM y en la longitud se almacenarán los valores que puede almacenar este campo entre comillas y separados por coma. Ejemplo: Campo: emp_estado, Tipo: ENUM, Longitud: "activo","inactivo". Este es el funcionamiento de los campos de tipo ENUM en las bases de datos de MySQL.

    Relaciones

    • Los nombres de las relaciones deben estar compuestos por “FK“ unido con el nombre de la primer tabla y la segunda tabla separados por un guión bajo ““. Ejemplo: FK_empleado_cargo.
    • Los campos FK y PK deben coincidir en su tipo y su longitud, si se siguen las reglas anteriores no debería haber problema.
  • Se usará MySQL como Base de Datos relacional, por lo tanto debemos usar como motor de cada tabla InnoDB. Dependiendo del cliente MySQL que se use selecciona por defecto MyISAM, por eso es importante asegurarse que el motor por estándar en todas las tablas será InnoDB que si permite relacionarlas.

    El Collate de la Base de Datos será utf8_spanish2_ciy será el mismo en cada tabla. (Este corresponde al alfabeto español tradicional)

  • Para hacer consultas a varias tablas se deben usar JOINs entre ellas. Se debe evitar completamente hacer una consulta que una todas las tablas y luego empareje los campos foráneos y primarios.

    Si la consulta es muy grande o se va a utilizar en varios lugares a la vez, hacer una “Vista” con ella para facilitar el acceso a la misma desde varios lugares.

{"cards":[{"_id":"36af1072c4e853b72b000007","treeId":"3626f7f6000c06ece1000017","seq":1,"position":0.5,"parentId":null,"content":"# Estándares de programación"},{"_id":"36af10e8c4e853b72b000008","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36af1072c4e853b72b000007","content":"## Nombres de variables"},{"_id":"36af214bc4e853b72b000014","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36af10e8c4e853b72b000008","content":"* Los nombres que se usen deben ser significativos.\n* Los nombres deben estar en minúsculas, excepto la primera letra de cada palabra a partir de la segunda.\n* Una variable $aa (PHP) o a1 (JS) no significan nada. No hay problema en utilizarlo si es una variable temporal que va a ser utilizada en las líneas siguientes, pero si va a ser utilizada más lejos en el programa, debe tener un nombre significativo.\n"},{"_id":"36af1924c4e853b72b00000a","treeId":"3626f7f6000c06ece1000017","seq":1,"position":3,"parentId":"36af1072c4e853b72b000007","content":"## Nombres de archivos"},{"_id":"36af25b3c4e853b72b000016","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36af1924c4e853b72b00000a","content":"**Generales**\n* Todos los nombres irán en minúscula\n* Los nombres no deben incluir números\n* Los nombres deben de representar lo que hay dentro de él\n\n**PHP**\n* Si el nombre tendrá más de dos palabras, estas irán separadas por puntos \".\". Ej. \"pie.pagina.php\"\n* Los archivos que contengan una o varias clases deben de empezar con el prefijo \"class\" seguido de un punto. Ej. \"class.connection.php\"\n\n**Javascript**\n* Si el nombre tendrá más de dos palabras, estas irán separadas por guiones \"-\". Ej. \"objetos-comunes.js\"\n\n\nAdemás, la codificación estándar de los archivos debe ser **UTF-8 sin BOM**, algunos editores de texto lo llaman **ANSI as UTF-8** y es equivalente.\nEsto es para evitar símbolos extraños en los textos de campos o datos ingresados en la Base de Datos."},{"_id":"36af19fdc4e853b72b00000b","treeId":"3626f7f6000c06ece1000017","seq":1,"position":4,"parentId":"36af1072c4e853b72b000007","content":"## Constantes"},{"_id":"36b004097b727f1ff6000015","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36af19fdc4e853b72b00000b","content":"Se deben evitar constantes numéricas sin mucho significado. Es conveniente definir las constantes en el código. Todos los caracteres deben estar en mayúsculas y las palabras separadas por \"_\".\nPor ejemplo: PORCENTAJE_IVA\n\nLa forma de declarar esta variable sería la siguiente:\n`define('PORCENTAJE_IVA',0.13)`"},{"_id":"36af1a6ac4e853b72b00000c","treeId":"3626f7f6000c06ece1000017","seq":1,"position":5,"parentId":"36af1072c4e853b72b000007","content":"## Variables Globales"},{"_id":"36b032e27b727f1ff6000016","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36af1a6ac4e853b72b00000c","content":"Se debe evitar el uso de variables globales ya que pueden ser modificadas erróneamente y pueden causar errores muy difíciles de identificar. Si se usan, para poder identificarlas, deben estar en mayúsculas.\n\nPor ejemplo: `$VARIABLE_GLOBAL=1`"},{"_id":"36af1e02c4e853b72b00000e","treeId":"3626f7f6000c06ece1000017","seq":1,"position":6,"parentId":"36af1072c4e853b72b000007","content":"## Corchetes e identación"},{"_id":"36b035ce7b727f1ff6000017","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36af1e02c4e853b72b00000e","content":"La indentación es algo que ayuda a darle claridad a un programa y es INDISPENSABLE que se haga bien. Debe hacerse con \"tabs\" y no con espacios en blanco.\n\nDesarrollando casi con cualquier editor es importante asegurarse de sustituir el identado del código de espacios a \"tabs\" cuándo se copie y pegue código de otro lugar. \n\nLos corchetes de un bloque if, o switch, o for, deben ir en la misma línea de la cláusula. \nPor ejemplo, esta sería una forma apropiada de hacerlo.\n` if($condicion){ `"},{"_id":"36af189ac4e853b72b000009","treeId":"3626f7f6000c06ece1000017","seq":1,"position":6.5,"parentId":"36af1072c4e853b72b000007","content":"## Interacción con la Base de Datos (PHP)"},{"_id":"36af2226c4e853b72b000015","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36af189ac4e853b72b000009","content":"Se debe usar el objeto de conexión principal, está ubicado en la dirección \"libs/php/class.connection.php\". Este en el constructor inicializa la conexión y además tiene las funciones principales para ejecutar mantenimientos y consultas, además de las funciones para procesar los objetos que estas funciones devuelven.\n\nCuando se lee un registro de una tabla usando el objeto principal de conexión, el nombre de la variable debe empezar por $row_ y luego tener el nombre de la tabla. Esto es importante para saber qué datos contiene ese array si se mezclan varias consultas a la vez\n\nEl objeto principal se instancia de la siguiente manera:\n`$conexion = new Conexion();`"},{"_id":"36b89b193fa24fa2bd000026","treeId":"3626f7f6000c06ece1000017","seq":1,"position":6.75,"parentId":"36af1072c4e853b72b000007","content":"## Consultas"},{"_id":"36b89b6c3fa24fa2bd000027","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36b89b193fa24fa2bd000026","content":"Antes de concatenar variables de PHP en cadenas String que contengan una consulta en la base de datos, se debe pasar por el filtro de escape a caracteres especiales, en el objeto de conexión. Ejemplo: `$idEmpleado = $conexion->escape($_POST[\"id\"]);`\n\nEsto es obligación para evitar inyecciones SQL en los archivos que procesen peticiones que interactúen con la base de datos.\n\nAdemás, es necesario asegurar la codificación del String que se insertará en la base de datos."},{"_id":"36af1e7bc4e853b72b00000f","treeId":"3626f7f6000c06ece1000017","seq":1,"position":7,"parentId":"36af1072c4e853b72b000007","content":"## Claridad del código"},{"_id":"36b049df7b727f1ff6000018","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36af1e7bc4e853b72b00000f","content":"Es importante que el código y que se escriban sean claros y fáciles de entender. Por eso, además de dar la explicación de que hace cada programa o función al principio, hay que tratar que las funciones quepan en una sola página y que antes de cada sección se explique qué es lo que se está haciendo. Sobre todo, cuando se usan \"truquitos\", es muy importante que se explique lo que se está haciendo."},{"_id":"36af1f07c4e853b72b000010","treeId":"3626f7f6000c06ece1000017","seq":1,"position":8,"parentId":"36af1072c4e853b72b000007","content":"## Inclusión de funciones y rutinas"},{"_id":"36b054567b727f1ff6000019","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36af1f07c4e853b72b000010","content":"Las funciones externas deben incluirse sólo una vez. Para lograr este fin, se debe utilizar la función `include_once($nombre_del_archivo);`\n\nAl inicio de cada archivo que contenga funciones, se debe explicar el contenido de las mismas para poder no navegar dentro del archivo buscando alguna función."},{"_id":"36af1fd8c4e853b72b000011","treeId":"3626f7f6000c06ece1000017","seq":1,"position":9,"parentId":"36af1072c4e853b72b000007","content":"## HTML"},{"_id":"36b063037b727f1ff600001a","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36af1fd8c4e853b72b000011","content":"Los códigos en HTML deben cumplir con unas reglas adicionales:\n* Los tags tienen que estar escritos en minúsculas. Por ejemplo <td> en vez de <TD>.\n* Los objetos html deben tener id y name, y ambos deben ser iguales. Cuando se pone sólamente el name y en IE se usa getElementById funciona (incorrectamente), pero en FireFox no. Para evitar esto se deben usar ambos.\n* Cuando hay que escribir variables de PHP dentro de un código HTML se debe tener el HTML dentro de PHP y no al revés.\n* Cuando se construye un código de php, después del tag de mayor-interrogación, debe venir la palabra php para evitar problemas de implementación.\n* El código HTML generado por un script también debe ser legible, bien estructurado e indentado. Por lo que es recomendable el uso de \"/n\" y \"/t\".\n* Las etiquetas link para incluir archivos CSS se deben ubicar al inicio del código HTML, antes de incluir cualquier archivo javascript.\n* No se debe usar \"padding\" en un elemento HTML si es necesario tener un ancho o alto fijo, ya que el padding aumenta el tamaño de los elementos en algunos navegadores y en otros no.\n* No hay que incluir mucho código de estilo \"inline\" con el atributo style en el elemento. Si se requieren más de 2 propiedades de estilo se debe crear una clase en el mismo archivo junto con el HTML o incluirse en un archivo externo CSS.\n* Para escribir símbolos especiales se debe de usar su codificación en HTML. Por ejemplo, para escribir la palabra \"día\", lo haremos usando `d&iacute;a`. Esto se hace para evitar símbolos extraños en los navegadores clientes, ya que ellos pueden disponer de la codificación del texto que se está visualizando.\n\n"},{"_id":"36b07d477b727f1ff600001d","treeId":"3626f7f6000c06ece1000017","seq":1,"position":10,"parentId":"36af1072c4e853b72b000007","content":"## Estructura de archivos"},{"_id":"36b07dc57b727f1ff600001e","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36b07d477b727f1ff600001d","content":"* Los archivos PHP que se utilicen durante la construcción de las bases de cada página (sin tomar en cuenta el cuerpo principal) se ubican dentro de \"res/partes/\"\n* Los archivos propios en PHP que contengan clases o configuraciones se ubican en la carpeta \"libs/php/\"\n* Los archivos propios en Javascript se ubican en \"lib/js/custom/\"\n* Los archivos que responden al FrontEnd (llamados BackEnd) se ubican en la carpeta \"stores/\" y se llamarán igual que su contraparte del FrontEnd\n* Los archivos propios de CSS se ubican en \"res/css/\"\n* Las imágenes se ubican en \"res/img/\"\n* Los archivos que sirven de FrontEnd se encuentran en la carpeta raíz \"/\""},{"_id":"3626f80b000c06ece100001a","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":null,"content":"# Estándares en la BD"},{"_id":"3626f957000c06ece100001b","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"3626f80b000c06ece100001a","content":"## Nombres en las tablas"},{"_id":"36b07a557b727f1ff600001c","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"3626f957000c06ece100001b","content":"* Los nombres de las tablas son representativos a lo que contienen\n* Los nombres de las tablas son en singular\n* Si es necesario más de una palabra, se debe separar por guiones bajos \"_\""},{"_id":"36b0a55c7b727f1ff600001f","treeId":"3626f7f6000c06ece1000017","seq":1,"position":2,"parentId":"3626f80b000c06ece100001a","content":"## Campos"},{"_id":"36b0a5c07b727f1ff6000020","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36b0a55c7b727f1ff600001f","content":"**Generales**\n* Los campos deben empezar con tres letras que representen a la tabla a la que pertenecen y un guión bajo. Ejemplo: `emp_id`\n* La PK de cada tabla debe ser llamado \"id\", respetando siempre la primera regla del prefijo de las tablas.\n* Las FK de las tablas deben de tener en el nombre el texto \"id\" unido con el nombre de la otra tabla. Ejemplo: `idmunicipio` e igual que la anterior, respetando la primera regla.\n* El separador de palabras en los nombres de los campos debe ser el guión bajo \"_\", en caso de ser necesario.\n\n**Tipos de dato**\n* Los campos que sean PK y FK deben ser de tipo INT con una longitud de 8\n* La longitud máxima de un campo de tipo VARCHAR es de 255. En caso de necesitar más, evaluar si aumentar la longitud o usar un tipo LONGTEXT\n* Los campos que almacenen fechas y horas, usarán el tipo DATETIME con el formato \"YYYY-MM-DD HH:MM:SS\"\n* Los campos que almacenen sólo fecha serán de tipo DATE y los de sólo hora serán TIME\n* Todas las tablas deben tener un campo con su fecha de creación\n* En caso de necesitar un campo de valores predefinidos, se usará el tipo ENUM y en la longitud se almacenarán los valores que puede almacenar este campo entre comillas y separados por coma. Ejemplo: `Campo: emp_estado, Tipo: ENUM, Longitud: \"activo\",\"inactivo\"`. Este es el funcionamiento de los campos de tipo ENUM en las bases de datos de MySQL.\n\n**Relaciones**\n* Los nombres de las relaciones deben estar compuestos por \"FK_\" unido con el nombre de la primer tabla y la segunda tabla separados por un guión bajo \"_\". Ejemplo: FK_empleado_cargo.\n* Los campos FK y PK deben coincidir en su tipo y su longitud, si se siguen las reglas anteriores no debería haber problema."},{"_id":"36b0bc017b727f1ff6000023","treeId":"3626f7f6000c06ece1000017","seq":1,"position":2.5,"parentId":"3626f80b000c06ece100001a","content":"## Propiedades de tablas"},{"_id":"36b0be807b727f1ff6000025","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36b0bc017b727f1ff6000023","content":"Se usará MySQL como Base de Datos relacional, por lo tanto debemos usar como motor de cada tabla InnoDB. Dependiendo del cliente MySQL que se use selecciona por defecto MyISAM, por eso es importante asegurarse que el motor por estándar en todas las tablas será InnoDB que si permite relacionarlas.\n\nEl Collate de la Base de Datos será `utf8_spanish2_ci`y será el mismo en cada tabla. (Este corresponde al alfabeto español tradicional)"},{"_id":"36b0b8947b727f1ff6000021","treeId":"3626f7f6000c06ece1000017","seq":1,"position":3,"parentId":"3626f80b000c06ece100001a","content":"## Construcción de consultas"},{"_id":"36b0b8d77b727f1ff6000022","treeId":"3626f7f6000c06ece1000017","seq":1,"position":1,"parentId":"36b0b8947b727f1ff6000021","content":"Para hacer consultas a varias tablas se deben usar JOINs entre ellas. Se debe evitar completamente hacer una consulta que una todas las tablas y luego empareje los campos foráneos y primarios.\n\nSi la consulta es muy grande o se va a utilizar en varios lugares a la vez, hacer una \"Vista\" con ella para facilitar el acceso a la misma desde varios lugares."}],"tree":{"_id":"3626f7f6000c06ece1000017","name":"Estándares ASI 2","publicUrl":"estandares-asi-2"}}