This presentation describes the development of a financial middleware that internationally connects several ERP systems (Navision and SAP) to a cloud-based invoicing solution.
The world of financial ERP integration is a curious landscape, with high-tech startup hilltops, dotting vast valleys which are seemingly still celebrating the discovery of the wheel. An added complexity is that every financial valley and hilltop has their own language and idea of what constitutes an "invoice" or "order". Combined with communication roads often being closed, integration can be a challenge indeed.
This presentation describes the development of a financial middleware that internationally connects several ERP systems (Navision and SAP) to a cloud-based invoicing solution. Both the invoicing service and the ERP systems pose integration challenges, due to a combination of API mismatches and stability issues. Still, a goal of this middleware was to provide added value by having a useful financial representation across all countries.
A solution was found in careful application of existing data model standards for electronic business documents (UBL), forming an Anti-Corruption Layer as known from Domain-Driven Design, which allows the middleware to present a more straightforward, and reliable, integration target than the invoicing service can. This also allowed for an increased separation of concerns, allowing integration decisions for the ERP systems to reside in different components.
The middleware is developed in Scala, using Akka and ZIO as underlying frameworks, exposing a streaming REST API. It is demonstrated how ZIO's advanced type system has helped prevent classes of errors. Kafka is used as intermediary storage. The system running in production processes over 1000 invoices per day across 6 countries.
In this talk, we will start with the basics, understanding what build caching is and why it can be a bit tricky to handle in real projects.
In this talk, we’ll show first the different techniques we can use to apply constraints is our domains. Then, we’ll present Iron, its features, extensions, and integrations. We’ll finish by showcasing a fully integrated constraint-enforcing app.
In this talk, I will cover three key concepts that emerged from reflecting on this past year of learning: making mistakes, helping others to help you and finding community.
In this talk, I will show how you can use ScalaPy to leverage an excellent NLP library like Spacy, minimizing your discomfort of using Python, and enhancing your comfort with Scala 3 for the remaining parts of your application.
In this session, I will guide you through two recent additions to Ox that I helped implement: channel operators and retries.