Devlog: 2026-04-07 — PSX LLPA Evaluation Plugin
What Happened
Wrote a PowerBuilder plugin for the PowerSeller Desktop App that calls PSX's ephemeral LLPA evaluation endpoint (ADR-099). Tom (senior developer) provided a sample JSON payload (llpa.json) showing 435 loans he wants evaluated against FNMA's LLPA grid. This plugin gives him that capability without modifying the core Desktop App.
Research Conducted
Deep-dived the existing plugin repos to understand the exact patterns:
- fnmb2b plugin — discovered Tom uses PB's native
HttpClient(not C# / .NET) for HTTP calls,JsonGenerator/JsonParserfor JSON, andpsb2b_service_urlsfor endpoint configuration - ahmratesheet plugin — studied the simpler plugin structure for the file/folder conventions
- BidMgr plugin — studied the complex plugin for database update and macro registration patterns
- Base framework (
n_cst_rate_sheet_fn) — understood the version check and plugin registration flow
What Was Built
10 PowerBuilder source export files at desktop-plugin/psxllpa/:
| File | Purpose |
|---|---|
n_cst_psxllpa.sru | Main NVO — HTTP client, JSON build/parse, rmcat_loan updates |
w_psxllpa.srw | Main window with Settings and Results tabs |
m_psxllpa.srm | Menu with Actions → Evaluate LLPAs |
uo_tab_psxllpa_settings.sru | Settings tab for PSX URL and API key |
uo_tab_psxllpa_results.sru | Results tab showing LLPA evaluation results |
d_psxllpa_settings.srd | DataWindow for psb2b_service_urls config |
d_psxllpa_request_loans.srd | DataWindow showing loans to evaluate |
d_psxllpa_results.srd | DataWindow showing LLPA results |
d_psxllpa_results_detail.srd | DataWindow for per-component detail |
psxllpa.pbg | Library group file |
How It Works
- User opens the PSX LLPA Evaluation plugin from the Desktop App
- Plugin loads loans from
rmcat_loanfor the selected Risk Manager profile - Builds a JSON payload matching Tom's
llpa.jsonformat (21 MISMO PascalCase fields per loan) - POSTs to PSX's
/api/v1/pricing/llpa-evaluationendpoint via PB's nativeHttpClient - Parses the JSON response (per-loan TotalLLPA, BasePrice, AdjustedPrice, etc.)
- UPDATEs
rmcat_loanwith the returned pricing values - Displays results in a grid for review
What Tom Needs to Do
- Copy the 10 source files to his plugin workspace
- Import into PowerBuilder IDE and compile
psxllpa.pbl - Add to the Desktop App's library list
- Configure the PSX staging URL and API key (via the Settings tab)
- Test with a Risk Manager profile
Key Technical Decisions
- Pure PowerBuilder — no C# components needed (matches fnmb2b pattern)
- Uses
psb2b_service_urlsfor endpoint configuration (same table fnmb2b uses) - Self-registers on first run via
of_update_database - JSON fields match MISMO PascalCase (aligned with PSX ADR-093)
- Response maps directly to
rmcat_loanpricing columns