Open Net Worth
Open Net Worth는 직접 운영하는 오픈소스 개인 AI 자산 비서로, 전체 재무를 하나의 원장에 기록하고 사용자가 제어하는 AI가 관리
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Extracto de cuenta (estilo estado de cuenta bancario) de una billetera Picash, con los datos leídos de ClickHouse y un panel para editar lo que no viene de la base: razón social, titular, cargo, salarios, fecha de ingreso, cuenta, período y notas. Se imprime a PDF desde el navegador (A4).README 전문 보기 ↗
Extracto de cuenta (estilo estado de cuenta bancario) de una billetera Picash, con los datos leídos de ClickHouse y un panel para editar lo que no viene de la base: razón social, titular, cargo, salarios, fecha de ingreso, cuenta, período y notas. Se imprime a PDF desde el navegador (A4).
public/
index.html el extracto + el panel de edición
css/extracto.css hoja A4, tema Picap, reglas de impresión
js/app.js carga de datos, resumen, saldo corrido, editor (localStorage)
assets/picap-logo.png
data/extracto_<wallet>.json snapshot opcional (ver abajo)
api/
extracto.py función serverless (Python) que consulta ClickHouse en vivo
scripts/
generar_snapshot.py genera public/data/*.json con la misma lógica que la API
| Dato | De dónde sale |
|---|---|
| Titular (nombre, documento) | passengers por passenger_id |
| Billetera y saldo actual | wallet_accounts por _id (campo balance) |
| Número de cuenta, banco, tipo | bank_accounts de la cuenta usada en el último retiro (DaviplataCashOut más reciente) |
| Movimientos | wallet_account_transactions por account_id, dedup por _id (última versión por _sdc_batched_at) |
| Valor | amount.cents / 100, con signo: positivo = abono, negativo = cargo. Nunca abs(). |
| Saldo por fila | amount_after_transaction (el saldo que registró la billetera) |
| Pagos RRHH | _type = WalletAccountTransactionBatchDispersion |
| Rechazados | status_cd = -1: se muestran tachados y no mueven saldo (el reembolso es otra transacción) |
Resumen: saldo anterior (movimientos antes de Desde), total abonos y total cargos (cantidad y valor), saldo actual, pagos RRHH (cantidad y valor), saldo en billetera hoy y último retiro. Fecha de generación es siempre el día en que se abre el extracto; el resto de los campos se editan en el panel y quedan guardados en el navegador.
Import del repo en Vercel (Framework preset: Other). No hay build: sirve
public/ como estático y api/extracto.py como función Python.
Environment Variables (Production y Preview):
| Nombre | Valor |
|---|---|
CLICKHOUSE_USER | usuario de ClickHouse |
CLICKHOUSE_PASSWORD | su clave |
CLICKHOUSE_URL | https://clickhouse.picap.io:8443 (opcional, es el default) |
CLICKHOUSE_DATABASE | picapmongoprod (opcional, es el default) |
Deploy. La página consulta /api/extracto al abrir; si las variables no
están, la API responde 503 y el front cae al snapshot de public/data/.
URL con parámetros:
https://<app>.vercel.app/?passenger=<id>&wallet=<id>&desde=2022-08-05
https://<app>.vercel.app/?wallet=<id>&fuente=snapshot # fuerza el snapshot
Genera public/data/extracto_<wallet>.json con la misma lógica que la API:
# con credenciales
CLICKHOUSE_USER=… CLICKHOUSE_PASSWORD=… \
python3 scripts/generar_snapshot.py --passenger <id> --wallet <id> --desde 2022-08-05
# sin credenciales: a partir de volcados hechos con curl
python3 scripts/generar_snapshot.py --sql --passenger <id> --wallet <id> # imprime los dos SQL
python3 scripts/generar_snapshot.py --passenger <id> --wallet <id> --desde 2022-08-05 \
--tx tx.jsonl --cabecera cabecera.jsonl
El repo es público. Un snapshot contiene movimientos reales de una persona: subirlo es una decisión consciente, no un paso automático.
Sin Node: python3 -m http.server 8000 -d public y abrir
http://localhost:8000/?fuente=snapshot. La API solo corre en Vercel
(vercel dev si se tiene el CLI).