尚未检测到更新。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).