---
name: slugify_obsidian_name
kind: function
lang: py
domain: obsidian
version: "1.0.0"
purity: pure
signature: "def slugify_obsidian_name(name: str) -> str"
description: "Convierte un nombre o titulo a un slug kebab-case estable: transliteracion Unicode (NFKD + descarte de combining marks, mapeo explicito de ñ/Ñ -> n), minusculas, colapsa cualquier secuencia de caracteres no [a-z0-9] a un solo guion, y strip de guiones en los bordes. Sin guiones dobles. Deterministica, pura, sin I/O. Util para migrar notas de Obsidian a nombres de archivo/identificadores estables."
tags: [obsidian, slug, kebab-case, transliterate, unicode, normalize, migrate]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: ["re", "unicodedata"]
params:
  - name: name
    desc: "Nombre o titulo arbitrario (puede llevar acentos, mayusculas, espacios y simbolos). P.ej. el titulo de una nota de Obsidian que se quiere convertir en slug estable."
output: "String con el slug kebab-case: solo caracteres [a-z0-9-], sin guiones al inicio/fin ni guiones dobles. Cadena vacia si name no contiene ningun caracter slugificable."
tested: true
tests:
  - "acentos y espacios"
  - "enye se mapea a n"
  - "mezcla mayusculas y acentos"
  - "simbolos y dobles separadores"
  - "string vacio"
  - "solo simbolos devuelve vacio"
test_file_path: "python/functions/obsidian/slugify_obsidian_name_test.py"
file_path: "python/functions/obsidian/slugify_obsidian_name.py"
---

## Ejemplo

```python
slugify_obsidian_name("Enmanuel Gutiérrez Pérez")   # "enmanuel-gutierrez-perez"
slugify_obsidian_name("Jose manuel camaño castro")  # "jose-manuel-camano-castro"
slugify_obsidian_name("DNI de María del Mar")       # "dni-de-maria-del-mar"
slugify_obsidian_name("  raro__nombre!! ")          # "raro-nombre"
```

## Cuando usarla

Usala al migrar o extraer subgrafos de notas de Obsidian cuando necesites un
identificador estable a partir de un titulo: renombrar archivos `.md`, generar
claves de un mapa de equivalencias `titulo -> slug`, o crear nombres de carpeta
deterministas. Es pura, asi que sirve igual de bien para indexar, ordenar o
comparar nombres normalizados sin tocar disco.

## Gotchas

- Mapea `ñ`/`Ñ` -> `n` explicitamente porque `NFKD` NO descompone la enye en
  `n` + tilde (la cedilla queda como combining mark sobre la `n` base ya
  formada). Otros idiomas con letras especiales (ß, ø, đ) NO se transliteran:
  caen bajo el colapso de no-`[a-z0-9]` y desaparecen. Si necesitas soportarlas,
  amplia `_TRANSLIT_MAP`.
- Dos titulos distintos pueden colisionar en el mismo slug (`"Mi Nota!"` y
  `"Mi  Nota"` -> `"mi-nota"`). Si el slug debe ser unico en un vault, anade un
  desambiguador (sufijo numerico) por fuera de esta funcion.
- No preserva ningun caracter no ASCII: emojis, ideogramas CJK, cirilico, etc.
  se descartan. Un titulo formado solo por esos caracteres devuelve `""`.
