<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Articles on Babylon Financial Technology</title><link>https://babylon.app/articles/</link><description>Recent content in Articles on Babylon Financial Technology</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 09 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://babylon.app/articles/index.xml" rel="self" type="application/rss+xml"/><item><title>Extracting Data from a Contract Note with babylon-table</title><link>https://babylon.app/articles/extracting-data-from-a-contract-note-with-babylon-table/</link><pubDate>Thu, 09 Jul 2026 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/extracting-data-from-a-contract-note-with-babylon-table/</guid><description>&lt;p&gt;Contract notes are usually written for people, not software. This example shows how a carefully tagged PDF can do both: remain readable as a document, while allowing &lt;code&gt;babylon-table&lt;/code&gt; to extract its tables and turn formatted strings into clean transaction data.&lt;/p&gt;
&lt;p&gt;In the previous article, &lt;a href="https://babylon.app/articles/how-hard-is-it-to-create-a-pdf-contract-note/"&gt;How Hard Is It To Create a PDF Contract Note?&lt;/a&gt;, we looked at generating a clean PDF Trade Statement from broker trade email data. In another article, &lt;a href="https://babylon.app/articles/open-sourcing-babylon-table/"&gt;Open Sourcing babylon-table&lt;/a&gt;, we introduced &lt;code&gt;babylon-table&lt;/code&gt;, a small dependency-free Java library for ingesting and reshaping tabular data.&lt;/p&gt;</description></item><item><title>Open Sourcing babylon-table</title><link>https://babylon.app/articles/open-sourcing-babylon-table/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/open-sourcing-babylon-table/</guid><description>&lt;p&gt;Babylon has open-sourced &lt;code&gt;babylon-table&lt;/code&gt;, a dependency-free Java library for ingesting and reshaping tabular data. Published under the Apache License 2.0 and available on Maven Central, the module grew out of Babylon’s practical financial data work. Its most distinctive feature is a small domain-specific language (DSL) for describing table transformations in a business-readable form.&lt;/p&gt;
&lt;p&gt;In the previous article &lt;a href="https://babylon.app/articles/ai-powered-refactoring-modularising-code-with-codex-5.4/"&gt;AI-Powered Refactoring: Modularising Code with Codex 5.4&lt;/a&gt;, we described how Codex helped us restructure the Babylon codebase into a set of smaller, clearer modules.&lt;/p&gt;</description></item><item><title>How Hard Is It To Create a PDF Contract Note?</title><link>https://babylon.app/articles/how-hard-is-it-to-create-a-pdf-contract-note/</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/how-hard-is-it-to-create-a-pdf-contract-note/</guid><description>&lt;p&gt;A small experiment with Apache PDFBox turned into a useful discovery: creating a clear, structured PDF record of a trade is not especially difficult. In an afternoon, I was able to generate a landscape “Transaction Statement” from existing trade email data, include provenance information, and produce a PDF whose extracted text was almost as orderly as a data dictionary. The experiment showed how modest the technical barrier is to producing a durable, human-readable and machine-readable contract note.&lt;/p&gt;</description></item><item><title>Designing an Identifier Is Surprisingly Interesting</title><link>https://babylon.app/articles/designing-an-identifier-is-surprisingly-interesting/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/designing-an-identifier-is-surprisingly-interesting/</guid><description>&lt;p&gt;A transaction ID is a dull reference number that has to appear on a contract note, in an email, or in a support call. Who would have thought there was much to say about it? Well, there is! Babylon&amp;rsquo;s transaction ID is designed to be compact, human-facing, stable across corrections, independent of database sequences, and safe to read and type. An ID such as &lt;code&gt;78MP-R7P2-W8XY&lt;/code&gt; is short enough for real use because it uses an alphabet of letters and digits rather than plain decimal numbers: for the same number of characters, that gives us many more possibilities. But letters introduce an unexpected problem. Helpful four-character grouping can accidentally produce rude or awkward words, so care has to be taken not to issue those IDs.&lt;/p&gt;</description></item><item><title>Data Friction at EasyEquities</title><link>https://babylon.app/articles/data-friction-at-easyequities/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/data-friction-at-easyequities/</guid><description>&lt;h2 id="initial-experience-with-the-easyequities-platform"&gt;Initial Experience with the EasyEquities Platform&lt;/h2&gt;
&lt;p&gt;When we first used EasyEquities, we were puzzled that we could not find transaction confirmations anywhere within the platform. There was a Transaction History section, but it only displayed summaries of recent activity.
We eventually realised that the trade notification email is, in fact, the transaction confirmation. However, it is an email and it omits two crucial identifiers: the listing symbol (known as the alpha code on the JSE) and the ISIN. Instead, only the security description is provided.&lt;/p&gt;</description></item><item><title>AI-Powered Refactoring: Modularising Code with Codex 5.4</title><link>https://babylon.app/articles/ai-powered-refactoring-modularising-code-with-codex-5.4/</link><pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/ai-powered-refactoring-modularising-code-with-codex-5.4/</guid><description>&lt;p&gt;Refactoring a codebase into well-defined modules is one of those tasks every developer &lt;em&gt;knows&lt;/em&gt; is valuable—but rarely prioritises.&lt;/p&gt;
&lt;p&gt;It’s cognitively heavy, time-consuming, and easy to get wrong. Doing it properly requires holding a large amount of context in your head: dependencies, responsibilities, side effects, and hidden coupling.&lt;/p&gt;
&lt;p&gt;With Codex 5.4, something has genuinely changed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="a-quick-note-on-timing-and-why-this-post-exists"&gt;A quick note on timing (and why this post exists)&lt;/h2&gt;
&lt;p&gt;In my previous post, &lt;a href="https://babylon.app/articles/the-joy-of-codex/"&gt;The Joy of Codex&lt;/a&gt;, I wrote about my experience using Codex 5.3 to improve my codebase.&lt;/p&gt;</description></item><item><title>The Joy of Codex</title><link>https://babylon.app/articles/the-joy-of-codex/</link><pubDate>Sun, 22 Mar 2026 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/the-joy-of-codex/</guid><description>&lt;p&gt;Codex isn’t just writing code — it’s changing how I think about building software.&lt;/p&gt;
&lt;h2 id="what-i-mean-by-codex"&gt;What I Mean by “Codex”&lt;/h2&gt;
&lt;p&gt;When I say &lt;em&gt;Codex&lt;/em&gt;, I’m not referring to some abstract idea or historical manuscript. I mean the new &lt;a href="https://openai.com/codex/"&gt;OpenAI Codex app&lt;/a&gt; — a recently released Mac application that brings AI-assisted coding into a more direct, interactive workflow.&lt;/p&gt;
&lt;h2 id="how-i-got-started"&gt;How I Got Started&lt;/h2&gt;
&lt;p&gt;The first thing I did was simple: I pointed Codex at an existing codebase and asked it to review and summarise it.&lt;/p&gt;</description></item><item><title>Babylon Dashboard v1: From Idea to Platform</title><link>https://babylon.app/articles/babylon-dashboard-v1-from-idea-to-platform/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/babylon-dashboard-v1-from-idea-to-platform/</guid><description>&lt;p&gt;There’s a particular kind of joy and satisfaction that comes from seeing something work for the very first time.&lt;/p&gt;
&lt;p&gt;For us, that moment came when the &lt;a href="https://babylon.app/products/dashboard/"&gt;Babylon Dashboard&lt;/a&gt; greeted us with a login dialog. It sounds small—and in many ways, it is—but seeing that screen appear, knowing that authentication was wired up, the application was running end-to-end, and we could actually sign in, marked a turning point. Babylon was no longer just an idea, a set of conversations, or a backend API. It was now a real application.&lt;/p&gt;</description></item><item><title>A Semantic Inference Engine for Tabular Data</title><link>https://babylon.app/articles/semantic-inference-engine-for-tabular-data/</link><pubDate>Tue, 25 Nov 2025 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/semantic-inference-engine-for-tabular-data/</guid><description>&lt;p&gt;Brokerage accounts provide trade history data in many different tabular formats – each with its own naming quirks, column conventions, ordering, and hidden assumptions.
Yet behind this diversity lies a consistent set of trade attributes with inherent structural relationships:
quantities, prices, consideration, fees, proceeds, dates, instruments, and identifiers.
This is exactly where a semantic inference engine can shine.&lt;/p&gt;
&lt;p&gt;Our &lt;a href="https://babylon.app/api/extract/segments/from-file/"&gt;trade history extraction&lt;/a&gt; applies this approach to tabular trade data, automatically interpreting each column’s meaning regardless of format.
This allows heterogeneous CSV, Excel, or other tabular exports to be robustly transformed into a consistent, canonical trade ledger.&lt;/p&gt;</description></item><item><title>What Does NOrd (“-N”) Mean on the JSE?</title><link>https://babylon.app/articles/what-does-nord-mean-on-the-jse/</link><pubDate>Thu, 20 Nov 2025 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/what-does-nord-mean-on-the-jse/</guid><description>&lt;p&gt;If you scan JSE instrument lists, broker CSV files, or pricing feeds, you may notice that some shares end with &lt;strong&gt;“-N”&lt;/strong&gt; in their short name.&lt;br&gt;
This &lt;strong&gt;isn’t a typo or data issue&lt;/strong&gt; — the “-N” suffix indicates a specific, legacy class of reduced-vote ordinary shares known as &lt;strong&gt;N Ordinary shares&lt;/strong&gt;, or &lt;strong&gt;NOrd&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;On the Johannesburg Stock Exchange, an &lt;strong&gt;NOrd&lt;/strong&gt; share is an ordinary share that carries &lt;strong&gt;reduced voting rights&lt;/strong&gt; compared with the company’s main ordinary share class.&lt;/p&gt;</description></item><item><title>Developing the Segment Ledger Quick Entry</title><link>https://babylon.app/articles/developing-the-segment-ledger-quick-entry/</link><pubDate>Tue, 18 Nov 2025 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/developing-the-segment-ledger-quick-entry/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; We originally built a phrase-based parser for segment ledger quick entry, but it was too strict.&lt;br&gt;
Refactoring led us to anchor on the &lt;strong&gt;verb&lt;/strong&gt; in the sentence (“buy”, “sell”), allowing us to identify the &lt;strong&gt;Subject–Verb–Object (SVO)&lt;/strong&gt; structure.&lt;br&gt;
This made the parser far more flexible and capable of handling natural, messy, human descriptions — including tricky cases like “GBP”, which can be both a currency and a listing symbol!&lt;/p&gt;
&lt;p&gt;Segment ledger quick entry is a process for extracting structured data — a segment ledger entry — from unstructured data, namely a sentence typed by a human or taken from a contract note.
We’ve built this capability into our &lt;a href="https://babylon.app/api/extract/segments/from-quick-entry/"&gt;API endpoint&lt;/a&gt;:&lt;/p&gt;</description></item><item><title>When Does GBP Not Represent Sterling?</title><link>https://babylon.app/articles/lse-gbp-ticker-not-sterling/</link><pubDate>Tue, 04 Nov 2025 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/lse-gbp-ticker-not-sterling/</guid><description>On the LSE, there was a ticker GBP that represented Global Petroleum Limited. Here’s how that tripped a classifier and why context saves the day.</description></item><item><title>Rebasing Capital Gains With the gainSince Parameter</title><link>https://babylon.app/articles/rebasing-capital-gains-with-the-gain-since-parameter/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/rebasing-capital-gains-with-the-gain-since-parameter/</guid><description>&lt;p&gt;When investors move between tax jurisdictions, capital gains must be split between the period before and after the move. Babylon’s new &lt;code&gt;gainSince&lt;/code&gt; parameter makes
this possible. By specifying a date, you can recalculate gains as if every holding were rebased at that moment — automatically replacing pre-date transactions with
a single notional trade per security per account. The result is an accurate picture of gains arising &lt;strong&gt;since&lt;/strong&gt; the jurisdiction change, while preserving your original
trading history.&lt;/p&gt;</description></item><item><title>Using Excel’s Stock and Currency Data Types for Segment Ledgers and Positions</title><link>https://babylon.app/articles/using-excels-stock-and-currency-data-types-for-ledgers-and-positions/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/using-excels-stock-and-currency-data-types-for-ledgers-and-positions/</guid><description>&lt;p&gt;Excel includes two powerful but often overlooked features: the &lt;strong&gt;Stocks&lt;/strong&gt; and &lt;strong&gt;Currency&lt;/strong&gt; data types.
These allow you to pull delayed market and FX data directly into your spreadsheet — no plugins or VBA required.&lt;/p&gt;
&lt;p&gt;In this article, we’ll show how to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Activate these data types.&lt;/li&gt;
&lt;li&gt;Build a segment ledger of trades using the Babylon segment ledger format.&lt;/li&gt;
&lt;li&gt;Form positions by grouping trades with Excel’s new &lt;code&gt;GROUPBY&lt;/code&gt; function.&lt;/li&gt;
&lt;li&gt;Value positions in local currency and convert them to USD using delayed FX rates.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="example-position-segment-ledger-stock-data-south-africa.xlsx"&gt;TL;DR: download a working spreadsheet containing everything discussed below.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>The Babylon Portfolio Segment — The Ledger for a Group of Positions</title><link>https://babylon.app/articles/the-babylon-portfolio-segment-the-ledger-for-a-group-of-positions/</link><pubDate>Thu, 16 Oct 2025 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/the-babylon-portfolio-segment-the-ledger-for-a-group-of-positions/</guid><description>&lt;p&gt;A Segment is one of Babylon’s core concepts. It defines the natural partition of a portfolio, ensuring every security — and all of its trades — belong to one, and only one, Segment. This simple rule keeps capital gains and performance calculations coherent, consistent, and correct at scale.&lt;/p&gt;
&lt;p&gt;A Segment can represent a single security, an entire portfolio, or somewhere in between. Its defining rule is &lt;strong&gt;completeness&lt;/strong&gt;: if a security appears inside a Segment, all transactions for that security are included — never split across boundaries. This creates a natural and unambiguous &lt;strong&gt;partition&lt;/strong&gt; of the portfolio, where each Segment forms a self-contained ledger.&lt;/p&gt;</description></item><item><title>Enhanced Query Parameters in the Babylon API</title><link>https://babylon.app/articles/enhanced-query-parameters-in-the-babylon-api/</link><pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/enhanced-query-parameters-in-the-babylon-api/</guid><description>&lt;p&gt;Every API begins simply. A few clean endpoints, a handful of query parameters — &lt;code&gt;?symbol=AAPL&lt;/code&gt;, &lt;code&gt;?date=2025-09-01&lt;/code&gt; — and everything feels elegant.
Then the real world arrives. You need to exclude certain accounts, filter by date ranges, or select everything except one value.
Suddenly that neat equality model starts to creak.&lt;/p&gt;
&lt;p&gt;At Babylon, we wanted a way to keep the simplicity of &lt;code&gt;field=value&lt;/code&gt; while still expressing richer intent. Something compact enough for a URL,
yet powerful enough for many real-world cases.&lt;/p&gt;</description></item><item><title>ZAC, GBX, EUC and Other Misspelt Currencies</title><link>https://babylon.app/articles/zac-gbx-euc-and-other-misspelt-currencies/</link><pubDate>Fri, 10 Oct 2025 00:00:00 +0000</pubDate><guid>https://babylon.app/articles/zac-gbx-euc-and-other-misspelt-currencies/</guid><description>&lt;p&gt;In equity prices we often encounter what appear to be strange misspellings of currencies—for example, ZAC rather than ZAR, GBX rather than GBP, or EUC rather than EUR.
Why does this happen? As it turns out, they are not misspellings at all! The data provider is usually trying to express the price in &lt;strong&gt;minor units&lt;/strong&gt; of the currency.
For instance, a quote of &lt;em&gt;2,345 ZAC&lt;/em&gt; is actually a price of 2,345 South African cents, which is 23.45 ZAR. The same pattern applies to other so-called “misspellings.”&lt;/p&gt;</description></item></channel></rss>