docs: def _count_fields_recursive(dataset, fields):
      """Cuenta la información de campos optativos/recomendados/requeridos
      desde 'fields', y cuenta la ocurrencia de los mismos en 'dataset'.
  
      Args:
          dataset (dict): diccionario con claves a ser verificadas.
          fields (dict): diccionario con los campos a verificar en dataset
              como claves, y 'optativo', 'recomendado', o 'requerido' como
              valores. Puede tener objetios anidados pero no arrays.
  
      Returns:
          dict: diccionario con las claves 'recomendado', 'optativo',
              'requerido', 'recomendado_total', 'optativo_total',
              'requerido_total', con la cantidad como valores.
      """
  
      key_count = {
          'recomendado': 0,
          'optativo': 0,
          'requerido': 0,
          'total_optativo': 0,
          'total_recomendado': 0,
          'total_requerido': 0
      }
  
      for k, v in fields.items():
          # Si la clave es un diccionario se implementa recursivamente el
          # mismo algoritmo
          if isinstance(v, dict):
              # dataset[k] puede ser o un dict o una lista, ej 'dataset' es
              # list, 'publisher' no. Si no es lista, lo metemos en una.
              # Si no es ninguno de los dos, dataset[k] es inválido
              # y se pasa un diccionario vacío para poder comparar
              elements = dataset.get(k)
              if not isinstance(elements, (list, dict)):
                  elements = [{}]
  
              if isinstance(elements, dict):
                  elements = [dataset[k].copy()]
              for element in elements:
                  # Llamada recursiva y suma del resultado al nuestro
                  result = _count_fields_recursive(element, v)
                  for key in result:
                      key_count[key] += result[key]
          # Es un elemento normal (no iterable), se verifica si está en
          # dataset o no. Se suma 1 siempre al total de su tipo
          else:
              # total_requerido, total_recomendado, o total_optativo
              key_count['total_' + v] += 1
  
              if k in dataset:
                  key_count[v] += 1
  
      return key_count