Skip to main content

opencashflow

Motor de proyección de flujo de caja: modelos SQLAlchemy, engine de cálculo y schemas Pydantic. Agnóstico de framework web, de autenticación y de ledger — es una librería, no una aplicación.

Modela una planilla financiera como sección → fila → celda, donde cada fila declara una regla de proyección (constant, previous_period, sum_rows, percent_of_row, entre otras) y cada celda puede exponer un valor proyectado y, por separado, un valor real (actual_value/accrued_value/paid_value) que la aplicación consumidora es responsable de poblar. Overrides manuales son inmutables y auditables (nunca se actualizan, se reemplazan). Ver docs/model.md para el glosario completo del dominio.

Instalación

pip install "opencashflow @ git+https://github.com/LuisLopezMunoz/opencashflow.git@v0.1.0"

(Todavía no está publicado en PyPI — instalar directamente desde el repositorio.)

Esto también instala el comando opencashflow (equivalente a python -m opencashflow.cli) -- una CLI standalone, independiente de cualquier app consumidora (sin ledger, sin auth multiusuario), útil para probar la librería o correr el demo de abajo.

Demo en un minuto

opencashflow seed --user-id 1 --months 12 --base-period 2026-01
opencashflow rows --sheet-id 1
opencashflow doctor --sheet-id 1
opencashflow show --sheet-id 1

Esto crea (en una base SQLite descartable, ./opencashflow-demo.db por defecto) una planilla de ejemplo realista -- un hogar chileno con ingresos, gastos fijos/variables, impuestos, financiamiento y un saldo acumulado -- lista sus filas y reglas, y por último muestra la matriz calculada como tabla. (--cards/--bridge -- tarjetas de crédito con parseo de PDF de banco y financiamiento puente -- son de las pocas cosas que se quedan del lado de una app consumidora real; el modelo básico de tarjeta y creditcard list/edit/cupo/map sí son parte de esta CLI standalone. Ver docs/model.md, secciones "CLI genérico" y "Tarjetas de crédito".)

El mismo ejemplo vive como archivo declarativo en docs/examples/hogar-chileno.yaml -- una planilla completa (secciones → filas → reglas) en un solo documento YAML, generado con sheet export y reimportable con sheet import:

opencashflow sheet import --file docs/examples/hogar-chileno.yaml --user-id 1
opencashflow sheet export --sheet-id 1   # -- lo mismo, de vuelta a YAML, a stdout

Ver docs/model.md, sección "Sheet spec", para el formato completo (los 6 tipos de regla soportados, cómo se referencian filas por nombre, sheet import/export). Nota: el spec captura la ESTRUCTURA de una planilla (secciones, filas, reglas) -- no overrides manuales por celda, que es justamente lo que distingue al ejemplo de arriba (generado con seed, que sí aplica un par de overrides realistas de calendario) del mismo ejemplo reimportado desde el YAML (que empieza sin ellos).

Uso mínimo (desde Python)

Este paquete no crea usuarios ni conexiones a base de datos por ti — trae tu propia Session de SQLAlchemy y tu propio user_id (un entero simple, sin relación con ningún modelo de usuario: ver "Ownership" en docs/model.md).

from datetime import datetime

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from opencashflow.engine import compute_sheet
from opencashflow.models import Base, CashflowSheet, SheetRow, SheetSection
from opencashflow.periods import generate_periods

engine = create_engine("sqlite:///example.db")
Base.metadata.create_all(bind=engine)
db = sessionmaker(bind=engine)()

sheet = CashflowSheet(user_id=1, name="Mi flujo de caja", currency="CLP",
                       horizon_months=6, base_period=datetime(2026, 1, 1))
db.add(sheet)
db.flush()
generate_periods(sheet, db)

section = SheetSection(sheet_id=sheet.id, name="Ingresos", section_type="income")
db.add(section)
db.flush()

row = SheetRow(section_id=section.id, name="Sueldo",
               default_projection_rule={"type": "constant", "value": 1_500_000})
db.add(row)
db.commit()

result = compute_sheet(sheet.id, db)

Para un ejemplo completo y realista (una planilla de hogar chileno con las cuatro reglas de proyección, saldo acumulado y overrides de calendario), ver opencashflow.seed.seed_sheet().

Desarrollo

pip install -e ".[dev]"
pytest tests/ -v

Licencia

Apache 2.0 — ver LICENSE.

Metadata

Release files for opencashflow 0.11.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for opencashflow 0.11.0
File Size Uploaded
opencashflow-0.11.0.tar.gz 140.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for opencashflow 0.11.0
File Interpreter ABI Platform
opencashflow-0.11.0-py3-none-any.whl Python 3 none any Details

Total release size: 243.1 kB

Release files / opencashflow-0.11.0.tar.gz

Download URL opencashflow-0.11.0.tar.gz
Size 140.1 kB
Tags Source
SHA-256 checksum
How to use checksums
93931d8d2667f68ca4d0010db1fc5c1ebcf87aec0e5b42fab8f18a89b05e0665
BLAKE2b-256 checksum
How to use checksums
cbd922b12e7a93f1c0259887a8c6085015299fac1963b05765cd844014bd27e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.

Transparency log

Release files / opencashflow-0.11.0-py3-none-any.whl

Download URL opencashflow-0.11.0-py3-none-any.whl
Size 103.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b46ebbc25755a4e69b3dbf098b28e249a2fe53d574c27bacc3c36c6124347223
BLAKE2b-256 checksum
How to use checksums
25bc4c7c7aa298313dcaefed032fd25f2e9f64d8fcda7bd80719a23b9db79f0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.

Transparency log

Release history Release notifications | RSS feed

0.16.0

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.13.0

2 release files

This release

0.11.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page