---
name: describe_cron_expr
kind: function
lang: go
domain: core
version: "1.0.0"
purity: pure
signature: "func DescribeCronExpr(expr string) (string, error)"
description: "Convierte una expresion cron estandar de 5 campos en una descripcion legible en ingles, al estilo de crontab.guru. Soporta *, valores fijos, pasos (*/N), rangos (a-b), listas (a,b,c) y aliases (@daily, @hourly, etc.). Produce frases como 'At 06:00, every day', 'Every 15 minutes' o 'At 09:00, Monday through Friday'."
tags: [cron, schedule, description, human-readable, dag-engine, tooltip, parsing, scheduler]
uses_functions: [parse_cron_expr_go_core]
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [fmt, strings]
params:
  - name: expr
    desc: "expresion cron de 5 campos (minuto hora dia_mes mes dia_semana) o alias @daily/@weekly/@monthly/@yearly/@hourly; los campos soportan *, valores fijos, pasos (*/N), rangos (a-b) y listas (a,b,c)"
output: "descripcion en ingles del schedule cron; error si la expresion tiene numero de campos incorrecto o valores fuera de rango"
tested: true
tests:
  - "daily at 06:00"
  - "every 15 minutes"
  - "every hour on the hour"
  - "weekdays at 09:00"
  - "friday at 21:00"
  - "every 6 hours"
  - "first of month at 08:30"
  - "sunday at midnight"
  - "every minute"
  - "every 1 minute step"
  - "every 2 hours"
  - "multiple days of week"
  - "specific month"
  - "invalid expression - wrong field count"
  - "invalid minute value"
  - "alias @daily"
  - "alias @weekly"
  - "alias @hourly"
  - "saturday at 23:59"
  - "days 1 and 15 of month"
  - "month range June to August"
test_file_path: "functions/core/describe_cron_expr_test.go"
file_path: "functions/core/describe_cron_expr.go"
---

## Ejemplo

```go
desc, err := DescribeCronExpr("0 6 * * *")
// desc = "At 06:00, every day"

desc2, _ := DescribeCronExpr("*/15 * * * *")
// desc2 = "Every 15 minutes"

desc3, _ := DescribeCronExpr("0 9 * * 1-5")
// desc3 = "At 09:00, Monday through Friday"

desc4, _ := DescribeCronExpr("30 8 1 * *")
// desc4 = "At 08:30, on day 1 of the month"

_, err2 := DescribeCronExpr("0 6 * *")
// err2 != nil  (solo 4 campos)
```

## Cuando usarla

Cuando necesites mostrar al usuario final una descripcion legible de un schedule cron — tooltips en el frontend de dag_engine, mensajes de confirmacion antes de guardar una tarea programada, o logs de auditoria. Produce descripciones en ingles del mismo estilo que crontab.guru, pero retorna error en vez de texto crudo cuando la expresion es invalida.

## Gotchas

- Devuelve `(string, error)` aunque es pura sin I/O. El error es por input invalido (mismo patron que `ParseCronExpr`). Segun la convencion del repo, retornar error solo por validacion de input no cambia la clasificacion a `impure`.
- Para combinaciones muy especificas (ej. minuto con lista + hora con step), la descripcion es campo-a-campo y puede ser menos elegante que crontab.guru, pero siempre es correcta.
- Dias de semana: 0 y 7 ambos representan Sunday (hereda el comportamiento de `ParseCronExpr` que los normaliza a [0-6]).
- Para convertir la expresion a la lista de instantes de disparo usa `next_cron_time_go_core`. Esta funcion solo describe — no calcula tiempos.
