Autostrade eProcurement

ASPI Tenders & Procurement Portal — Liferay ↔ Jaggaer Integration

Autostrade per l’Italia manages its tender procedures on the Jaggaer e-procurement platform (eProcurement edition). The public — supplier companies, economic operators, press — accesses tender notices, announcements and awards on the ASPI institutional portal instead.

The aspi-procurement module connects the two systems: it publishes tender information from the internal management platform on the institutional website, automatically and in near real-time. The goal is to eliminate manual data entry between the two environments, keep the portal aligned with the management platform, and comply with the classifications prescribed by Italian Legislative Decrees 36/2023 and 50/2016. Tender attachments are stored on corporate cloud storage. Synchronisation is incremental and survives system restarts, with operational control from the administration console.

How it works

The module is structured as a set of OSGi bundles on Liferay DXP, following the API / Service / Web pattern.

Automatic synchronisation from Jaggaer. A scheduled job (configurable cron, default every 5 minutes) queries the Jaggaer eProcurement REST APIs using OAuth2 client-credentials authentication. The JWT token is cached and reused until expiration, reducing authentication traffic. On each execution the job runs four phases:

    1. Tenders (Projects) — downloads new or modified tenders, filters them by type and procurement area, stores document attachments on an AWS S3 bucket.
    1. Procedures (RFX) — synchronises the individual tender procedures linked to tenders, including CIG code, amounts, award strategy and the responsible buyer.
    1. Awards (Contracts) — updates closed procedures with winner, final amount and award date. It also handles direct awards without a formal RFX.
    1. Cleanup — locally removes procedures marked as cancelled on the Jaggaer side.

The mechanism is delta-based: for every web service invoked, the timestamp of the last successful call is persisted and used as a filter on the next run. The system does not lose updates when the server is restarted or when temporary interruptions occur. A configuration flag allows a full import to be forced on first start or for a manual resync, operable via Groovy scripts on the Liferay console with no changes to code or database.

Frontend portlet. The display portlet powers the portal’s views — ongoing procedures, announcements, expired tenders, awarded procedures — with interactive filters on CIG code, tender subject, procedure type, company and date range. Queries are built in native SQL with CTEs, in order to efficiently handle deduplication of procedures and correctly map the regulatory classifications defined by the new and the previous Italian public contracts code.

Technology stack

Liferay DXP 7.3 · OSGi Declarative Services · Service Builder · Java · OkHttp3 · AWS S3 SDK · Spring NamedParameterJdbcTemplate · Liferay Scheduler Engine · PostgreSQL · OAuth2 / JWT · Jaggaer eProcurement REST APIs.

Information
Category:

Mapo Studio

Date:

February 18, 2026

Tags:

Liferay, MySQL