docs: def iter_custom_errors(catalog):
      """Realiza validaciones sin usar el jsonschema.
  
      En esta función se agregan bloques de código en python que realizan
      validaciones complicadas o imposibles de especificar usando jsonschema.
      """
  
      try:
          # chequea que no se repiten los ids de la taxonomía específica
          if "themeTaxonomy" in catalog:
              theme_ids = [theme["id"] for theme in catalog["themeTaxonomy"]]
              dups = _find_dups(theme_ids)
              if len(dups) > 0:
                  yield ce.ThemeIdRepeated(dups)
  
          # chequea que un dataset no use un theme que no exista en la taxonomía
          # TODO: hay que implementarlo
  
          # chequea que un dataset no use theme con id esté repetido en taxonomía
          # TODO: hay que implementarlo
  
          # chequea que la extensión de fileName, downloadURL y format sean
          # consistentes
          for dataset_idx, dataset in enumerate(catalog["dataset"]):
              for distribution_idx, distribution in enumerate(
                      dataset["distribution"]):
                  for attribute in ['downloadURL', 'fileName']:
                      if not format_matches_extension(distribution, attribute):
                          yield ce.ExtensionError(dataset_idx, distribution_idx,
                                                  distribution, attribute)
  
          # chequea que no haya duplicados en los downloadURL de las
          # distribuciones
          # urls = []
          # for dataset in catalog["dataset"]:
          #     urls += [distribution['downloadURL']
          #              for distribution in dataset['distribution']
          #              if distribution.get('downloadURL')]
          # dups = _find_dups(urls)
          # if len(dups) > 0:
          #     yield ce.DownloadURLRepetitionError(dups)
  
          # chequea que las URLs de las distribuciones estén operativas
          # hay que revisar
          # for distribution in catalog.distributions:
          #     url = distribution.get("downloadURL")
          #     status_code = requests.head(url).status_code
          #     if status_code != 200:
          #         yield ce.DownloadURLBrokenError(
          #             distribution.get("identifier"), url, status_code)
  
      except Exception:
          logger.exception("Error de validación.")