Multi-site restaurant operator · Integration
When the POS moved to the cloud and the old sales feed broke, we rebuilt the nightly export into the ERP in two days.
- 2 daysto rebuild the feed on the cloud API
- 2reconciliation checks on every revenue-centre row
- Nightlyexport, upload and reconciliation email
Before
The operator's daily sales feed into SAP came from separate on-premise exporters, one for each country. Each read the POS database directly and hard-coded payment types into SQL, so adding a payment method meant editing a config file.
Moving to Oracle Simphony Cloud removed direct database access and broke the feed. It had to be rebuilt on the cloud API without changing the file layout SAP imports.
What we built
- A secure API client
- Signs in to the Simphony Cloud BI API, keeps its tokens fresh, and fetches restaurants in parallel within a set limit.
- Reconciliation checks
- Net sales plus tax, and the tendered total, must each match the closed-check total within 0.05. Each country can stop the export on a failure or just warn.
- Payment types mapped as data
- A mapping table replaces the hard-coded SQL, seeded once from the old exporters' settings, so a new payment method no longer needs a code change.
- The file SAP already expects
- Pipe-delimited files with each country's date format and prefix, uploaded over SFTP with retries.
- Run history and re-runs
- A reconciliation email after every run, an audit record with totals, and an admin page to re-run a country, date or set of restaurants.
Integration
The same file for SAP, with a new source underneath
- existing systemOracle Simphony Clouddaily sales and tender totals
- we builtExport servicevalidate, map, write the file
- existing systemSAPinbound folder
| System | Direction | Method | What flows |
|---|---|---|---|
| Oracle Simphony Cloud BI API | in | REST · OpenID Connect with PKCE | Daily operations, tender and menu-item totals per location |
| SAP | out | SFTP | Pipe-delimited daily sales and tender file per country |
| out | SMTP over TLS | Run status and reconciliation totals | |
| Legacy exporters | in (once) | Settings read at first start | Payment-type-to-column mappings from the old SQL |
next case studyAn AI analyst over live point-of-sale data
Read it →