Calidad de datos.
Patrón canónico de calidad de datos para cochid, periodismo2, situación y admin.
Verlo por niveles
Primero el componente, después la variación de marca y finalmente su uso dentro de una página.
Ver y copiar el código de este render
<span class="ui-sample badge badge--ok" data-quality="validado" title="Cobertura y sumas verificadas">Calidad: validado</span>Variaciones por marca y sitio
Cada cambio visible declara su autoridad; lo que permanece canónico no se vuelve a inventar en el producto.
COCHID
Autoridad: core-style/DECISIONES.md M15 y LOGOS-CANONICOS.mdCambia en esta marca
- Cuadrado azul y namebrand de tres líneas
- Azul COCHID en selección, capas y series
Permanece canónico
- Estructura y semántica comunes
- Fuentes, unidades y alternativa tabular
Compañía de Innovación de Santiago
Autoridad: CONSTITUTION.md + LOGOS-CANONICOS.mdCambia en esta marca
- Navegación y contenido propios del servicio
- Acento reservado para acciones y datos
Permanece canónico
- Mark CIS y namebrand de tres líneas
- IBM Plex Sans, foco, espaciado y anatomía
Comparación histórica recuperable
Compara la propuesta con cortes reales del repositorio. La ausencia de una muestra se declara y nunca se reconstruye de memoria.
- Estado actual
- Calidad de datos no tiene una implementación vigente demostrada; sus ejemplos son material candidato.
- Cambio propuesto
- Publicar en r19 el contrato de Calidad de datos para Patrón canónico de calidad de datos para cochid, periodismo2, situación y admin.
- Qué ocurre si respondes No
- Calidad de datos queda fuera de r19 y sus ejemplos siguen sólo como evidencia pendiente de reformulación.
Preparando comparación histórica…
Antes / r19
La comparación convierte una regla abstracta en una diferencia visible y verificable.
- Incluye fuente, período, unidad y alternativa tabular.
- Usa escalas comparables y distingue cero de ausencia.
- No encierres una cifra aislada en una tarjeta decorativa.
- No declares estados o tendencias que no provienen de datos reales.
Responsive
La misma anatomía debe conservar lectura, foco y acciones sin cortar contenido ni crear scroll horizontal en la página.
Cobertura
| Dimensión | Contrato |
|---|---|
| Propietario canónico | Sistema de diseño CIS y COCHID · core/core-style |
| Consumidores | COCHID, Periodismo2, Situación y Admin |
| Dependencias | cochid-graphs cuando corresponde |
| Estado | candidato |
Evidencia de adopción
Patrón propuesto. 0 implementaciones observadas en 0 repositorios.
La observación demuestra uso existente; la aceptación canónica sigue dependiendo de esta ficha y de su propietario.
| Dato | Resultado |
|---|---|
| Clasificación | Patrón propuesto |
| Implementaciones | 0 implementaciones observadas |
| Repositorios | Ningún repositorio observado |
| Snapshot | kit/componentes/componentes-observados.json |
Consumidores observados
El inventario conserva repositorio, archivo fuente y criterio de asociación. Observar una implementación no la convierte automáticamente en canónica.
Estados
| Estado requerido |
|---|
| con datos |
| sin datos |
| cargando |
| error |
Accesibilidad
- Conserva nombre accesible, orden de lectura y foco visible.
- Funciona a 320 px, con zoom de 200% y texto largo.
- El color nunca es la única señal de estado o acción.
- El contenido esencial permanece disponible sin JavaScript.
Código HTML
Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
<span class="ui-sample badge badge--ok" data-quality="validado" title="Cobertura y sumas verificadas">Calidad: validado</span>Código TAILWIND
Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
<span class="ui-sample badge badge--ok border border-slate-300 bg-white p-4 text-slate-950" data-quality="validado" title="Cobertura y sumas verificadas">Calidad: validado</span>Código REACT
Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
/** Niveles de calidad habituales. Otro valor de `quality` se acepta tal cual. */
export type QualityBadgeQuality = "validado" | "parcial" | "sin validar";
/** Tono de la insignia: `ok` validado, `warn` parcial o provisorio, `err` sin validar o con errores, `neutral` sin tono. */
export type QualityBadgeTone = "ok" | "warn" | "err" | "neutral";
export interface QualityBadgeProps {
/** Nivel de calidad del dato; va en `data-quality` y en el texto. */
quality?: QualityBadgeQuality | (string & {});
/** Texto visible; por defecto, `Calidad: ${quality}`. */
label?: string;
/** Qué se verificó o qué falta (atributo `title`); sólo `validado` trae uno por defecto y el texto vacío lo omite. */
detail?: string;
/** Muestra el detalle también como texto visible, después del nivel; el atributo `title` se conserva. */
showDetail?: boolean;
/** Tono de la insignia; sin valor se deduce de `quality` (validado: `ok`; parcial, provisorio: `warn`; sin validar, con errores, rechazado: `err`) y si no lo reconoce es `neutral`. */
tone?: QualityBadgeTone;
className?: string;
}
const DETALLES: Partial<Record<string, string>> = { validado: "Cobertura y sumas verificadas" };
const QUALITY_BADGE_TONOS: Partial<Record<string, QualityBadgeTone>> = {
validado: "ok",
verificado: "ok",
parcial: "warn",
provisorio: "warn",
preliminar: "warn",
"sin validar": "err",
"con errores": "err",
rechazado: "err",
};
const QUALITY_BADGE_CLASES: Record<QualityBadgeTone, string> = {
ok: "badge badge--ok",
warn: "badge badge--warn",
err: "badge badge--err",
neutral: "badge",
};
/**
* Insignia de calidad de un dato o serie (validado, parcial, sin validar) junto a cifras, tablas y gráficos.
*
* El nivel se lee en el texto y el tono lo refuerza. El detalle va en `title`; si la advertencia importa para leer la cifra, pásalo con `showDetail` para que quede a la vista.
*
* @example <QualityBadge />
* @example <QualityBadge quality="parcial" detail="15 de 16 regiones con datos" showDetail />
*/
export function QualityBadge({ quality = "validado", label, detail, showDetail = false, tone, className }: QualityBadgeProps) {
const titulo = detail ?? DETALLES[quality];
const tono = tone ?? QUALITY_BADGE_TONOS[quality.toLowerCase()] ?? "neutral";
const texto = label ?? `Calidad: ${quality}`;
const visible = showDetail && titulo ? titulo : "";
return (
<span className={[QUALITY_BADGE_CLASES[tono], className].filter(Boolean).join(" ")} data-quality={quality} title={titulo || undefined}>
{texto}
{visible ? <>{texto ? " · " : null}<span>{visible}</span></> : null}
</span>
);
}