Base
Base is the blockchain for global finance.
Regulation-native income evidence and debt-burden (DBR) assessment for thin-file borrowers. Runs entirely in the browser.
FinanceJavaScript · TypeScriptGitHub @hmunisbekk-droidOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Daromad — Income Evidence Engine for thin-file borrowers
Team TYS · FinTech / AI in Finance track · Partner product for MKBANK (micro and family-business lending)
Daromad turns the documents a self-employed or family-business borrower actually has — card and wallet
statements (PDF / XLSX / CSV), fiscal receipts (photos), the Soliq self-employed certificate — into:Read the full README ↗Team TYS · FinTech / AI in Finance track · Partner product for MKBANK (micro and family-business lending)
Daromad turns the documents a self-employed or family-business borrower actually has — card and wallet statements (PDF / XLSX / CSV), fiscal receipts (photos), the Soliq self-employed certificate — into:
Everything runs inside the browser: no server, no API keys, no customer byte leaves the device. The
production design serves the same bundle from the bank's own server (see docs/ARCHITECTURE.md).
deck/Daromad_TYS_deck.pptxapps/web/ Next.js 16 app (static export). All document parsing, OCR, rules, model inference, memo, audit → lib/
lib/parse/ pdf.js statement/certificate parsing, SheetJS XLSX/CSV parsing, amount/date helpers
lib/ocr/ tesseract.js receipt OCR (self-hosted worker, core and uzb+rus+eng data in public/)
lib/categorize.ts multilingual rule-based transaction categoriser + counterparty patterns
lib/features.ts 18 cash-flow features (parity-tested against ml/features.py)
lib/rules/pdn.ts DBR rule engine with clause citations
lib/risk.ts XGBoost JSON inference + one-at-a-time attributions
lib/integrity.ts integrity / plausibility checks
lib/memo.ts template memo, fact table, faithfulness verifier
lib/audit.ts SHA-256 hash-chained audit log
public/model/ model.json, feature_stats.json, metrics.json, berka_metrics.json, *_eval.json (read by the Model card page)
public/samples/ synthetic demo documents (3 borrowers + 4 tampered statements)
tests/ vitest unit tests (parity, rules, parsers, memo verifier) + Playwright e2e and evaluation scripts
synth/ synthetic data generator (archetypes → 24 months of transactions → PDF/XLSX/CSV statements, receipt photos, certificates, tampered variants)
ml/ feature spec, training (XGBoost), Berka real-data validation, exported artifacts
data/synthetic/ generated data set (summary.json committed; regenerate with one command)
docs/ ARCHITECTURE.md, DATA_SOURCES.md, MODEL_CARD.md, REGULATION_QUOTES.md, REFERENCES.md (Westminster Harvard), Daromad_project_explained.docx
deck/ defence deck (build_deck.js reads the evaluation JSON and screenshots)
.github/workflows/ci.yml tests + build on every push
cd apps/web
npm ci
npm run dev # http://localhost:3000
npm test # vitest: feature parity with Python, rule engine, parsers (incl. a real two-date-column PDF via pdf.js), memo verifier (writes public/model/categorizer_eval.json and ood_eval.json)
npm run build # static export to apps/web/out
Deploy: import the repo in Vercel with Root Directory = apps/web (framework Next.js, defaults otherwise). No environment variables are needed. Any static host works (apps/web/out).
pip install -r requirements.txt
python -m playwright install chromium # used only to render synthetic PDFs/PNGs
python -m synth.cli --out data/synthetic --n 2000 --render 60 --receipts 180 --tamper 40 --seed 42
python -m ml.train --data data/synthetic --out ml/artifacts
python -m ml.berka_validate --data data/berka --out ml/artifacts/berka_metrics.json # downloads the Berka mirror (~70 MB)
cp ml/artifacts/{model.json,feature_stats.json,metrics.json,berka_metrics.json} apps/web/public/model/
cp ml/artifacts/fixture.json apps/web/tests/fixture.json
cd apps/web && npm run build && python3 -m http.server 8787 --directory out &
python3 tests/e2e.py http://localhost:8787 /tmp/shots # smoke test + screenshots
python3 tests/ocr_eval.py http://localhost:8787 ../../data/synthetic/documents 60 public/model/ocr_eval.json
python3 tests/statement_eval.py http://localhost:8787 ../../data/synthetic 60 public/model/statement_eval.json
Open the prototype → New case → Load sample A/B/C (synthetic borrowers) or upload your own statement (any PDF with a text layer, XLSX or CSV export) and a photo of any receipt. Unknown layouts fall back to balance-chain sign inference; low-confidence OCR fields are flagged for confirmation rather than guessed. Drag the requested amount slider to watch DBR cross the 50% cap and the recommendation change. Record a decision and export the case with its audit chain.
| What | Result | Where |
|---|---|---|
| Statement parsing, 60 synthetic PDFs (2 layouts, RU/UZ labels) | row count exact on 60/60, balance chain reconciles on 60/60, ~1.6 s per 12-month PDF | public/model/statement_eval.json |
| Tamper detection (inflated inflow, deleted debit, duplicated row, window dressing) | 40/40 caught (10/10 per type); 0 false positives on the 60 clean statements | public/model/statement_eval.json |
| Unseen layouts (signed-amount RU CSV, Kirim/Chiqim XLSX, quoted EN CSV + Type column, Unicode-minus CSV, headerless CSV, Russian inflow/outflow (Приход/Расход) TSV, Payme-style wallet export with +/− type column, status column and no balance, RU bank CSV with two date columns + document-number and account columns) | 8/8 exact row counts and credit/debit totals | public/model/ood_eval.json (written by tests/ood.test.ts) |
| Two-date-column bank PDF (Дата операции / Дата проводки, № документа, 20-digit correspondent account, header and descriptions wrapped over two lines; 25 pages, 1,346 rows) | rows and totals exact, operation date kept on every row, balance chain intact | tests/pdf_layout.test.ts on tests/fixtures/statement_twodate.pdf (+ CSV twin) |
| Receipt OCR on 60 camera-augmented photos (uzb+rus+eng, in-browser) | total 95%, INN 100%, date 97%, receipt № 98%, 1.6 s each | public/model/ocr_eval.json |
| Transaction categoriser vs ground truth (10,481 synthetic lines) | 99.96% (synthetic vocabulary — will be lower on real data) | public/model/categorizer_eval.json |
| Risk model, synthetic holdout (n=500) | ROC-AUC 0.965, PR-AUC 0.76, Brier 0.042; logistic 0.963; DBR alone 0.948 | public/model/metrics.json |
| Methodology check on real anonymised bank data (Berka, 443 loans, 5-fold) | ROC-AUC 0.902 (boosted), 0.895 (logistic), 0.735 (ratio alone) | public/model/berka_metrics.json |
| Memo faithfulness | 0 unsourced numbers across a 300-scenario sweep (5 borrowers × 4 products × 5 amounts × 3 terms, incl. the family-programme exemption, the 50–100% quota band, refer/decline) | tests/engine.test.ts |
| Cost per application | zero marginal (static hosting, no API, no GPU) |
Honest caveats: the risk model is trained on a declared synthetic population (data/synthetic/summary.json);
its AUC shows the pipeline learns the declared affordability structure, not real-world performance. The categoriser
accuracy is measured on the generator's own vocabulary. Both are retrained/extended on bank data inside the
perimeter during the pilot — that is the pilot's first deliverable.
See docs/DATA_SOURCES.md for the full table and docs/REFERENCES.md for the reference list (Westminster Harvard). Summary: all borrower data is synthetic (MIT, this repo, generator
declared); the Berka/PKDD'99 data set is used only for an offline methodology check and is not redistributed;
Tesseract language data, tesseract.js, pdf.js, SheetJS, XGBoost, scikit-learn, Next.js and React are Apache-2.0/BSD/MIT;
CBU regulation texts are public legal information (lex.uz).
xlsx resolves to SheetJS CE 0.20.3 through the npm alias xlsx@npm:@e965/[email protected] (an automated, Apache-2.0 republish of the vendor build, because SheetJS stopped publishing to the npm registry at 0.18.5, which carried two advisories). npm audit --omit=dev is clean. If cdn.sheetjs.com is reachable, the official tarball is a drop-in: npm install https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz.docs/REGULATION_QUOTES.md.rules, parsers, categorizer, model) are written into every audit entry and bumped on every rule or parser change.MIT License — see LICENSE.
| — |