# filamentos: el catalogo de carretes y huecos del CFS

Lo que sé de mis filamentos estaba repartido en varios sitios: las reglas de cada material dentro del código del verificador, un CSV con los carretes para las fichas de muestra y un JSON con lo que hay en cada hueco del CFS. Con cinco materiales ya costaba; con cuarenta carretes de seis proveedores, editar ficheros a mano no se sostiene, y una errata en un nombre pasaba sin avisar.

Ahora todo vive en un único catálogo, y lo edito con un comando que me deja elegir de listas con búsqueda en vez de escribir nombres.

## Que guarda

| Qué | Ejemplo |
|---|---|
| Proveedores | eSUN, Creality, Amazon, Soleyin |
| Materiales | eSUN PETG: tipo PETG, su preset `- ABK` y los valores que el verificador comprueba en el gcode (cama 80, boquilla 250…) |
| Carretes | `petg_esun_negro`: eSUN PETG, negro, `#000000`, texto de la ficha «PETG» |
| Huecos | T1A a T1D y EXT (el portabobinas exterior), cada uno con su carrete |
| Historial | cada cambio de carrete en un hueco, con fecha |

De ahí leen `verifica_gcode` (reglas por material y marca de cada hueco), `sube_k2` y las fichas de muestra con NFC.

## Uso

```bash
uv run --with InquirerPy python ~/3D/utilidades/filamentos.py

```

Abre un menú:

- **Cambiar el carrete de un hueco.** Lo que uso al cambiar una bobina. Eliges el hueco, buscas el carrete escribiendo parte del nombre y confirmas. Si el carrete no existe, se da de alta en el mismo paso.
- **Ver qué hay en cada hueco**, el catálogo de carretes o el historial.
- **Dar de alta un carrete o un material.** Si falta el material o el proveedor, se crea sin salir del flujo. El preset de un material nuevo se elige de la lista de presets `- ABK` que existen en Creality Print: un preset de sistema no se puede elegir.

También funciona sin menú, para scripts:

```bash
uv run --with InquirerPy python ~/3D/utilidades/filamentos.py huecos
uv run --with InquirerPy python ~/3D/utilidades/filamentos.py historial T1D
uv run --with InquirerPy python ~/3D/utilidades/filamentos.py carga T1D petg_esun_negro

```

## Lo que impide

- Declarar un hueco con un carrete que no existe, un carrete con un material que no existe o un material con un proveedor que no existe.
- Un color que no sea `#RRGGBB` o un material cuyo preset no sea `- ABK`.
- Cambiar un hueco sin ver antes qué carrete se va a guardar. El buscador puntúa mal cuando escribes varias palabras: probando, «creality lila» elegía el PLA marble, porque encontraba las letras l-i-l-a desperdigadas en su nombre. Por eso, antes de guardar, la herramienta enseña el carrete elegido con su marca, material y color, y pide confirmación. Escribir una sola palabra distintiva («lila», «esun negro») acierta a la primera.

## Donde esta

| Qué | Ruta |
|---|---|
| Comando | `~/3D/utilidades/filamentos.py` |
| Base de datos | `~/3D/databases/filamentos.db` (SQLite) |
| Código de acceso a los datos | `~/3D/utilidades/catalogo.py` |
| Datos iniciales | `~/3D/utilidades/catalogo_semilla.py` |
| Tests | `~/3D/utilidades/test_catalogo.py` |

La base de datos **no está en git**: su respaldo es Time Machine. Si se pierde, se vuelve a crear sola con los datos iniciales, que sí están versionados; lo que haya cambiado después con la herramienta, eso se pierde.