/** Moneda por defecto del kit, igual que la del adapter. */ export declare const MONEDA_POR_DEFECTO = "COP"; /** Resuelve el locale de formato a partir del código corto de idioma. */ export declare function resolveLocale(language: string | undefined): string; /** Formateadores listos para usar en el render. */ export interface MasterDocumentFormatters { /** Locale BCP 47 efectivo, por si hace falta un `Intl` ad hoc. */ locale: string; /** * Monto con símbolo de moneda. Ver {@link createCurrencyFormatter} para la * regla: un monto entero se muestra con los decimales propios de la moneda y * uno con decimales nunca los pierde. */ formatCurrency: (value: number) => string; /** * Alias de {@link MasterDocumentFormatters.formatCurrency}, conservado por * compatibilidad: es lo que consumen las celdas de la tabla de líneas. * * Tuvo una regla propia —dejar que el CLDR de la moneda fijara el máximo de * decimales, que para COP puede ser CERO— y por eso un precio de `33,33` se * pintaba `$ 33`. Ocultar decimales capturados no es "compacto", es incorrecto, * así que hoy las dos funciones son la misma. */ formatCurrencyCompact: (value: number) => string; /** Número con 2 decimales. */ formatAmount: (value: number) => string; /** * Tasa de cambio: mínimo 2 decimales y sin recortar la precisión adicional. * * Una TRM como `4185,567` debe mostrarse completa; `formatAmount` la redondearía * a 2 decimales y falsearía el dato. */ formatRate: (value: number) => string; /** Número sin decimales forzados. */ formatNumber: (value: number) => string; /** Fecha (`Date` o `YYYY-MM-DD`) en formato medio, sin desfase de zona horaria. */ formatDate: (value: Date | string | undefined | null) => string; /** Fecha y hora en formato medio/corto. */ formatDateTime: (value: Date | string | undefined | null) => string; } /** * Formateador de moneda del kit: **nunca oculta decimales capturados**. * * ## El bug que cierra * * Los tres formateadores de moneda del kit pedían `minimumFractionDigits: 0` y * dejaban el MÁXIMO en manos del CLDR de la moneda. Para monedas que el CLDR * declara sin fracción —COP entre ellas, según la versión de ICU— ese máximo es * CERO, así que un precio capturado de `33,33` se pintaba `$ 33` y un neto de * `424,9575` se pintaba `$ 425`: la grilla de líneas y el widget de Totales * mostraban cifras que el usuario lee como un error de cálculo, no como formato. * * Peor: el resultado dependía de la versión de ICU del navegador (Node 22 resuelve * COP con 2 decimales; runtimes con datos más viejos, con 0), así que el mismo * documento se veía distinto en dos máquinas. Por eso aquí NO se deriva nada del * CLDR hacia abajo. * * ## La regla * * Siempre 2 decimales, o los de la moneda si usa más (BHD/KWD usan 3). Es la * convención contable y alinea las columnas de montos: * `$ 1.500,00` · `$ 33,33` · `$ 424,96` · `$ 505,70`. * * Redondear a 2 decimales PARA MOSTRAR es distinto de esconderlos todos: el valor * de `documentState` no se toca y las sumas siguen siendo exactas. */ export declare function createCurrencyFormatter(locale: string, currency?: string): (value: number) => string; /** * Construye los formateadores para un locale y una moneda dados. * * Función pura, para los módulos que no pueden usar un hook. Los componentes * deberían usar {@link useMasterDocumentFormatters}. */ export declare function createFormatters(locale: string, currency?: string): MasterDocumentFormatters; /** * Formateadores del idioma activo. * * @param currency Código ISO de la moneda del documento. NO se deriva del idioma. * * @example * ```tsx * const { formatCurrency, formatDate } = useMasterDocumentFormatters(); * {formatCurrency(total)} * ``` */ export declare function useMasterDocumentFormatters(currency?: string): MasterDocumentFormatters; //# sourceMappingURL=formatters.d.ts.map