Indonesia's toll roads are tendered, built and supervised by a single agency, but the record of them lived in whichever workbook was nearest to the work. We built Badan Pengatur Jalan Tol one Oracle project database instead: a row for every road, a row for every section it is delivered in, and one place where the state of the national programme can be read without assembling it first.
Badan Pengatur Jalan Tol
Delivered as a registered vendor of SMEC
Badan Pengatur Jalan Tol, the Toll Road Regulatory Agency, is the unit of Indonesia's Ministry of Public Works responsible for the country's toll roads. It was established in 2005 and works from Jakarta.
Its remit is the whole life of a toll road. BPJT tenders toll road investment through open bidding, recommends initial tariffs and subsequent adjustments to the Minister, recommends the takeover of concessions that have run their term or failed their obligations, and supervises the business entities holding those concessions against the agreements they signed, reporting back to the Minister.
That is a large number of roads to hold in mind at once. Indonesia's operational toll network has passed 3,100 kilometres across Java, Sumatra, Bali, Kalimantan and Sulawesi, roughly three quarters of it built in the decade to 2024, and every road is at a different stage in the hands of a different concessionaire. Regulating a programme of that shape is a data problem before it is anything else.
The brief was not "build us a dashboard". It was to make a figure about the programme mean the same thing in every room it is quoted in.
Each road, and often each section of a road, was tracked by whoever was closest to it. There was no single record you could open to settle where a project actually stood.
A toll road is delivered in sections that start and finish years apart. Nothing connected a section back to its road, so progress on the road as a whole had to be reassembled by hand every time it was asked for.
A programme-wide status report meant collecting files, reconciling the ones that disagreed and reformatting the result. By the time it circulated, part of it was already wrong.
When a date, a scope or a tariff had changed, the files held only the current value. There was no record of what it had been, when it moved, or who approved the move.
The project database is what we actually delivered: a normalised Oracle schema for roads, sections, concessions, milestones, progress and money. Around it sit the screens the agency works in and the reports it is obliged to produce.
The system of record: one row per road, one per section, and every fact about them dated and attributable.
Every toll road in the programme, broken into the sections it is genuinely delivered in, each with its own length, alignment reference, concession and status.
Sections roll up to roads and roads to corridors and networks, so a figure reads correctly at whatever level it is asked for rather than only at the level it was entered.
The agreement behind each road: the business entity holding it, the concession term, the obligations it carries and the milestone dates it commits to.
Planned, revised and actual dates for each stage of a section, kept side by side, so slippage shows up as a difference instead of as an opinion.
Acquisition progress recorded against the section it holds up, because on a road programme that is usually what the schedule is waiting for.
Periodic progress against plan and against contract value, stored as a dated series rather than overwritten each time a new return arrives.
Investment value, initial tariffs and later adjustments held against the road they apply to, together with the decision that set them.
Supervision entries, findings and the reports issued from them, kept with the section they concern instead of in the folder of the engineer who wrote them.
Where the agency enters, reviews and approves everything that reaches the database.
One screen for the whole programme: what is operating, under construction, in tender and in planning, with the road count and the kilometres behind each number.
Forms that refuse the impossible at the point of entry: an actual date before its start, a section longer than its road, a progress figure that goes backwards.
A submitted figure is reviewed before it becomes the official one, so a working draft never turns into a published statistic by accident.
Periodic returns from concessionaires and supervision consultants loaded from the formats they already use, validated as a batch, with rejects listed rather than quietly dropped.
Find a road, section, concession or milestone from one box, including by the different identifiers separate teams use for the same piece of road.
Who may see a figure, who may change it, who may approve it, and a stamped record of every change made after first entry.
The outputs the agency is asked for, generated from the database instead of assembled from files.
The standing status report produced on demand from current data, at section, road, corridor or national level.
Planned against actual over time, with the sections driving a delay ranked at the top rather than buried in the middle of a table.
The formats the agency has to issue on a cycle, built as templates, so a monthly pack is a run of the report rather than a week of formatting.
Every report exportable in the formats already circulated, with the underlying rows available when somebody wants to check a total.
The data model came first and took the longest. On a programme database, whatever you get wrong in the schema you pay for again in every report built on top of it.
Brought in through SMEC's transport practice, we started from the reports the agency is obliged to produce and who reads them, and worked backwards to the data those reports need, before designing anything.
Roads, sections, concessions, milestones and progress series, and the relationships between them, reviewed against real historical reports rather than against a diagram on a wall.
The register, the entry and approval screens and the import paths, built in the agency's own terminology so that a field on screen matches the word used for it in a meeting.
Existing workbooks and historical records migrated in, then every standing report rebuilt on the database and reconciled line by line against the last version produced by hand.
Acceptance testing role by role with the people who own the numbers, then training and a written procedure for the periodic update and approval cycle.
Handed over on the agency's own Oracle infrastructure, documented down to the schema, the import formats and the reporting templates, so the system does not depend on us to be understood.
The agency runs Oracle, so the database is Oracle, and the effort went into the schema and its constraints rather than into the framework sitting on top. Our founder holds Oracle certifications in Autonomous Database and Analytics Cloud, which is a large part of why this work came to us.
Progress, dates and tariffs are stored as dated entries rather than as current values, so last quarter's report can still be reproduced exactly next year.
Relationships, ranges and sequences are enforced by constraints in the database, not only by the screens above it. A bad import fails instead of landing quietly.
Any number in a report can be followed back to the return it came from, the section it belongs to and the approval that made it official.
The workbooks that each told a slightly different story about the same road are gone. There is one register, and it is the register.
Section, road, corridor and national figures all come from the same rows, so the number quoted in a meeting is the number in the report.
The recurring packs are generated from current data on demand, in the formats the agency already issues.
Planned against actual is kept as a series, so a section beginning to drift is visible while it is still weeks rather than quarters.
When a date, a scope or a tariff changed, the database says what it was, when it moved and on whose approval.
Periodic submissions from concessionaires and supervision teams are imported and validated, not rekeyed into a master sheet by someone at the end of the month.
CodeFix IT is a registered vendor of SMEC, the international engineering and consulting firm whose transport practice works on road and highway programmes across Asia. SMEC traces its origins to the Snowy Mountains Hydroelectric Scheme in Australia, has been part of the Surbana Jurong Group since 2016 and works in more than forty countries; it has been in Bangladesh since 1977 and has kept a Dhaka office since 1978. Being on their vendor register is how software work on their projects reaches us, and it is why a database for an agency in Jakarta was written by a team in Mirpur.