npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mafesoftware/cheques

v0.1.0

Published

Cartera de cheques (propios/terceros, fisico/echeq): transicionCheque (estados y transiciones, dos vocabularios disjuntos segun tipo), proyeccionSaldoBancario (saldo bancario proyectado) y validarFechaPago/validarFechaDeposito/validarMonedaCajaValores. Nu

Downloads

158

Readme

@mafesoftware/cheques

Cartera de cheques (propios/terceros, físico/echeq): estados y transiciones, proyección de saldo bancario y validaciones de depósito — para cualquier producto de MAFE Software que maneje cheques en su tesorería. Extraído de Obriq (src/lib/dominio/cheques/).

Núcleo puro: sin DB ni framework, sin process.env. Montos en centavos (bigint), nunca number; fechas como "YYYY-MM-DD".

bun add @mafesoftware/cheques

Conceptos

  • Cheque de tercero: el que recibe tu cuenta corriente, de un cliente o de un endoso. Vive en EstadoTercero: "en_cartera" (estado inicial) → "depositado" → "acreditado" | "rechazado"; o desde "en_cartera" → "endosado" (y de ahí solo vuelve, por rechazo del endosatario, a "rechazado") | "descontado" | "custodia" (y de vuelta a "en_cartera").
  • Cheque propio: el que tu cuenta emite contra una chequera. Vive en EstadoPropio: "en_blanco" (número cargado, todavía sin entregar) → "emitido" → "debitado"; "anular" es válida desde "en_blanco" o "emitido", nunca desde "debitado" (un cheque que ya salió de la cuenta no se anula, se rebate por otra vía).
  • Los dos vocabularios son DISJUNTOS a propósito: no hay un estado compartido entre un cheque propio y uno de tercero, y transicionCheque es la única fuente de verdad de qué transición es válida en cada uno — la capa de datos de quien consume este paquete nunca decide esto a mano.

API

transicionCheque(tipo, estado, evento): Estado | Error

Sobrecargada por tipo ("tercero" → recibe/devuelve EstadoTercero, "propio" → EstadoPropio). Devuelve el estado siguiente, o un Error (nunca tira) si la transición no es válida — quien llama decide si ese Error se propaga o se traduce a { ok: false, error }.

import { transicionCheque } from '@mafesoftware/cheques';

transicionCheque('tercero', 'en_cartera', 'depositar'); // "depositado"
transicionCheque('tercero', 'acreditado', 'rechazar'); // instanceof Error
transicionCheque('propio', 'debitado', 'anular'); // instanceof Error

proyeccionSaldoBancario(saldoHoy, eventos, hasta): PuntoSaldo[]

El saldo de una cuenta bancaria proyectado hacia adelante, acumulando los cheques pendientes de cobrarse (terceros en cartera) o debitarse (propios emitidos) hasta la fecha hasta (inclusive). Un punto por cada fecha DISTINTA con algún evento, en orden cronológico; eventos posteriores a hasta no entran.

import { proyeccionSaldoBancario, type EventoCalendario } from '@mafesoftware/cheques';

const eventos: EventoCalendario[] = [
  { fecha: '2026-10-15', importe: 200_000_00n, tipo: 'tercero_a_cobrar' }, // +$2.000.000
  { fecha: '2026-11-30', importe: 50_000_00n, tipo: 'propio_a_debitar' }, // -$500.000
];

proyeccionSaldoBancario(500_000_00n, eventos, '2026-12-31');
// [
//   { fecha: '2026-10-15', saldo: 700_000_00n },
//   { fecha: '2026-11-30', saldo: 650_000_00n },
// ]

Validaciones (Resultado = { ok: true } | { ok: false; error: string })

  • validarFechaPago(fechaEmision, fechaPago, diasLimite = 360): Resultado — una fecha de pago demasiado lejos de la emisión es un plazo irrazonable para un cheque diferido. diasLimite es ajustable por si otra plaza usa otro tope.
  • validarFechaDeposito(fechaPago, fecha): Resultado — no se puede depositar antes de la fecha de pago del cheque (fecha es la fecha del depósito); ok cuando fechaPago <= fecha.
  • validarMonedaCajaValores(monedaCheque, monedaCajaValores): Resultado — un cheque en una moneda solo puede ir a una caja de valores de la MISMA moneda.
import { validarFechaPago, validarFechaDeposito, validarMonedaCajaValores } from '@mafesoftware/cheques';

validarFechaPago('2026-09-20', '2026-10-15'); // { ok: true }
validarFechaDeposito('2026-10-15', '2026-10-01'); // { ok: false, error: '...' }
validarMonedaCajaValores('USD', 'ARS'); // { ok: false, error: '...' }

validarFechaPago/validarFechaDeposito cuentan días de calendario con diasEntre de @mafesoftware/fechas-ar — un fechaEmision/fechaPago mal formado (o un calendario imposible, ej. "2026-02-30") tira ErrorFecha en vez de devolver un conteo silenciosamente incorrecto.

Lo que este paquete NO hace

No persiste nada: ni cartera, ni chequeras, ni depósitos. Cargar una chequera, emitir un número, endosar o descontar un cheque contra un banco real, y decidir en qué transacción hacerlo, es responsabilidad de cada app, sobre su propio schema — no hay una operación atómica genérica para extraer acá (a diferencia de, por ejemplo, @mafesoftware/numeradores u @mafesoftware/outbox, que sí traen un subpath /drizzle con tabla y operación). Ver src/lib/cheques/ y src/db/schema/cheques.ts en Obriq para un ejemplo completo de app que compone este motor con su propia persistencia.