Job Title: Building credit portfolio analytics with Claude Code
Title: BI Developer (DWH and dashboards), working with Claude Code
Description: DWH marts, semantic layer and dashboards for portfolio and risks for financial development institutions. Remote, project-based, 20–40 hours per month, hourly pay.
Selection Process
-
Complete a Mini-Project
Risk summary for a synthetic portfolio: marts in Postgres, semantic model, dashboard on Vega-Lite. About 3–4 hours, with Claude Code.
2. ### Fill out the Questionnaire
Five questions and a link to the repository — 20–30 minutes.
3. ### Interview
We will invite the best candidates for a conversation with the manager. Everyone will receive a response.
Responsibilities
- DWH marts in PostgreSQL and Vertica: from raw extracts to reporting.v_* views
- Semantic layer (YAML models: dimensions and measures) and dashboards on Vega-Lite
- Config instead of code: a new report is a view and a specification, and each number is reconciled with the source
Candidate Profile
- Confident SQL in PostgreSQL and experience in mart modeling
- You work with Claude Code daily and know where not to trust it
- Plus: Vega-Lite, credit risk, IFRS 9, banking reporting
- Remote, 20–40 hours per month, hourly pay.
Mini-Project: Credit Portfolio Risk Summary
Create a risk summary for a synthetic credit portfolio using our working stack: PostgreSQL, semantic model in YAML, and a dashboard on Vega-Lite. Work with Claude Code or another AI agent — this is part of the task. Estimated time — 3–4 hours.
Data (buttons below): portfolio.csv — two monthly portfolio snapshots, as of 09.01.2026 and 10.01.2026; fx.csv — daily exchange rates to tenge. The principal_outstanding amount is in the loan currency.
Definitions:
- portfolio — sum of principal_outstanding in tenge at the exchange rate on the snapshot date, excluding written-off loans;
- PAR30 and PAR90 — portfolio share with overdue payments over 30 and over 90 days, respectively;
- NPL — portfolio share with overdue payments over 90 days or restructured loans;
- provisions — balance × rate: 1% for overdue up to 30 days, 10% for 31–90 days, 50% for NPL;
- concentration — share of the ten largest groups of connected borrowers (group_id) in the portfolio.
What to do:
- PostgreSQL (docker run postgres:16 is sufficient locally): load CSV into the raw schema and create views in the reporting schema — a cleaned mart and metrics for both dates with changes from 09.01. Scripts are idempotent: CREATE OR REPLACE VIEW, re-running does not break anything.
- Semantic model — YAML file on top of the mart: source, dimensions, and measures. Format as ours: model, source: reporting.v_..., dimensions (name, column, type, label), measures (name, column, type: sum/avg/count, format, label).
- Dashboard on Vega-Lite: metrics, dynamics, breakdowns by industry and program. Specs — JSON files in the repository plus a static HTML page via vega-embed that renders them.
- README: how to run, final figures for both dates, three conclusions for the risk committee.
- CLAUDE.md (or equivalent) of the AI you worked with, and a brief note: where the AI made mistakes and what you corrected.
What to submit (in the questionnaire below):
- link to a public repository with SQL, YAML model, Vega-Lite specs, and README;
- screenshot of the dashboard in README;
- briefly: how you verified that the numbers are correct.
Download portfolio.csv
Download fx.csv
Questionnaire