AFAS streeft naar één geïntegreerd softwarepakket voor bedrijfsautomatisering: Profit. Daarbinnen moeten klanten op een consistente manier kunnen werken om hun doelen te bereiken. De architectuur onder Profit reflecteert deze zaken. Zo staat de database centraal en werken we zoveel mogelijk met standaard bouwblokken. Wij bieden onze software aan via de cloud, als SaaS oplossing.
AFAS streeft naar één geïntegreerd softwarepakket voor bedrijfsautomatisering: Profit. Daarbinnen moeten klanten op een consistente manier kunnen werken om hun doelen te bereiken. De architectuur onder Profit reflecteert deze zaken. Zo staat de database centraal en werken we zoveel mogelijk met standaard bouwblokken. Wij bieden onze software aan via de cloud, als SaaS oplossing.
Eén geïntegreerd product waarin we verschillende type gebruikers bedienen. Zo onderscheiden wij drie hoofdtypes, met elk hun eigen wensen.
Naast deze hoofdtypes zijn ook onze partners een belangrijker onderdeel van ons ecosysteem. Zij maken voornamelijk gebruik van de connectoren. Via de API’s kunnen ook zij data lezen en bewerken in de centrale database.
Eén geïntegreerd product waarin we verschillende type gebruikers bedienen. Zo onderscheiden wij drie hoofdtypes, met elk hun eigen wensen.
Naast deze hoofdtypes zijn ook onze partners een belangrijker onderdeel van ons ecosysteem. Zij maken voornamelijk gebruik van de connectoren. Via de API’s kunnen ook zij data lezen en bewerken in de centrale database.
Voor de verschillende type gebruikers hebben wij verschillende subsystemen ontwikkeld, die met elkaar geïntegreerd zijn doordat ze dezelfde business logica én data gebruiken. Elke subsysteem heeft weer zijn eigen architectuur die door de jaren heen ontwikkeld is. Dit zijn de 3 systemen:
Onze power-users worden bediend via een rijke Windows applicatie. Dit is een .NET WPF-applicatie die we hosted aanbieden aan onze klanten. Voor dit subsysteem maken we gebruik van een client-server. Dit proces communiceert via Named Pipes met een service proces dat op diezelfde machine draait.
Dit service proces draait onder een ander gebruikersaccount dan de client applicatie en heeft wel database toegang, dit in tegenstelling tot de .NET WPF-applicatie.
Naast de rijke Windows applicatie hebben we InSite/OutSite. Deze moderne webapplicatie biedt een gedeelte van de Profit functionaliteit aan via web, maar combineert dat met een rijk CMS-systeem. Klanten kunnen op die manier hun eigen intra-, extranet en publieke website maken. Het intranet bedoeld voor de medewerkers kan, in de eigen huisstijl, processen aanbieden als HR, ordermanagement, CRM en projectmanagement. Het extranet gedeelte, gecombineerd met de publieke website, kan gebruikt worden voor bijvoorbeeld een klantportal.
Dit systeem is ontwikkeld in .NET en TypeScript en bevat onder andere een zelfontwikkeld CMS-systeem. Het systeem is opgedeeld in een .NET-applicatie die met het publieke internet is verbonden (InSite/OutSite applicatie) en een .NET-applicatie die verbonden is met het interne netwerk (de Profit Applicatie Server, of PAS). De publiek gerichte applicatie heeft geen database toegang en kan alleen via HTTPS communiceren met de PAS.
Om te zorgen dat de publieke website ook beschikbaar is tijdens upgrades (als bijvoorbeeld de database niet beschikbaar is) worden de CMS-pagina’s niet live uit de database gelezen, maar via de Profit Update Service (PUS) gepubliceerd als statische content. Voor die onderdelen is er dus geen database connectie meer nodig.
Met AFAS Pocket bedienen wij onze non-desk users. Deze gebruikers hebben geen vaste werkplek, en hebben ook vaak geen laptop of pc. Door middel van de app kunnen zij een gericht aantal processen doorlopen op hun mobiele device. Daarnaast dient Pocket als de tweede factor voor ons authenticatieproces.
Onze mobiele app is ontwikkeld met behulp van Dart en Flutter. Door dit platform ontwikkelen wij met gemak voor zowel iOS als Android devices, maar is het ook mogelijk om de business logica van de app te doorlopen in een webbrowser. Dit laatste maakt testen makkelijker.
Voor de communicatie tussen Pocket en Profit maken wij gebruik van de infrastructuur van onze connectoren. Dit verkeer loopt niet rechtstreeks, maar via de Refinery. Dit vaste endpoint maakt het mogelijk om SSL certitficate pinning te gebruiken vanuit Pocket, zodat het verkeer tussen de app en ons systeem niet afgeluisterd kan worden.
De API’s van Profit, in de vorm van verschillende update- en getconnectoren worden gehost in een aparte .NET-applicatie. Via deze HTTP endpoints op Profit is het mogelijk voor partners en externe partijen om data uit Profit te halen of in Profit op te slaan.
Onze power-users worden bediend via een rijke Windows applicatie. Dit is een .NET WPF-applicatie die we hosted aanbieden aan onze klanten. Voor dit subsysteem maken we gebruik van een client-server. Dit proces communiceert via Named Pipes met een service proces dat op diezelfde machine draait.
Dit service proces draait onder een ander gebruikersaccount dan de client applicatie en heeft wel database toegang, dit in tegenstelling tot de .NET WPF-applicatie.
Naast de rijke Windows applicatie hebben we InSite/OutSite. Deze moderne webapplicatie biedt een gedeelte van de Profit functionaliteit aan via web, maar combineert dat met een rijk CMS-systeem. Klanten kunnen op die manier hun eigen intra-, extranet en publieke website maken. Het intranet bedoeld voor de medewerkers kan, in de eigen huisstijl, processen aanbieden als HR, ordermanagement, CRM en projectmanagement. Het extranet gedeelte, gecombineerd met de publieke website, kan gebruikt worden voor bijvoorbeeld een klantportal.
Dit systeem is ontwikkeld in .NET en TypeScript en bevat onder andere een zelfontwikkeld CMS-systeem. Het systeem is opgedeeld in een .NET-applicatie die met het publieke internet is verbonden (InSite/OutSite applicatie) en een .NET-applicatie die verbonden is met het interne netwerk (de Profit Applicatie Server, of PAS). De publiek gerichte applicatie heeft geen database toegang en kan alleen via HTTPS communiceren met de PAS.
Om te zorgen dat de publieke website ook beschikbaar is tijdens upgrades (als bijvoorbeeld de database niet beschikbaar is) worden de CMS-pagina’s niet live uit de database gelezen, maar via de Profit Update Service (PUS) gepubliceerd als statische content. Voor die onderdelen is er dus geen database connectie meer nodig.
Met AFAS Pocket bedienen wij onze non-desk users. Deze gebruikers hebben geen vaste werkplek, en hebben ook vaak geen laptop of pc. Door middel van de app kunnen zij een gericht aantal processen doorlopen op hun mobiele device. Daarnaast dient Pocket als de tweede factor voor ons authenticatieproces.
Onze mobiele app is ontwikkeld met behulp van Dart en Flutter. Door dit platform ontwikkelen wij met gemak voor zowel iOS als Android devices, maar is het ook mogelijk om de business logica van de app te doorlopen in een webbrowser. Dit laatste maakt testen makkelijker.
Voor de communicatie tussen Pocket en Profit maken wij gebruik van de infrastructuur van onze connectoren. Dit verkeer loopt niet rechtstreeks, maar via de Refinery. Dit vaste endpoint maakt het mogelijk om SSL certitficate pinning te gebruiken vanuit Pocket, zodat het verkeer tussen de app en ons systeem niet afgeluisterd kan worden.
De API’s van Profit, in de vorm van verschillende update- en getconnectoren worden gehost in een aparte .NET-applicatie. Via deze HTTP endpoints op Profit is het mogelijk voor partners en externe partijen om data uit Profit te halen of in Profit op te slaan.
Zoals duidelijk wordt vanuit de verschillende onderdelen vindt de integratie plaats in de database. Al onze subsystemen maken gebruik van dezelfde database, en lezen en schrijven dus dezelfde data. Hierdoor hebben de verschillende gebruikers hetzelfde inzicht.
Om te voorkomen dat de verschillende subsystemen andere business logica toepassen maken ze gebruik van een centrale library van business componenten. Deze componenten encapsuleren de business logica en processen van Profit.
Het Profit systeem is gericht en gebouwd om het concept van omgevingen heen. Elke omgeving (wat gelijk staat aan één klant) heeft zijn eigen database en is logisch gescheiden van de andere omgevingen.
Daarnaast werkt Profit op een metadata definitie (de MDD). In deze definitie leggen we vast wat het datamodel van Profit is. Met deze definitie kunnen we vervolgens verschillende onderdelen generiek bouwen. Zo werken alle weergaves op de definitie, en zijn dus consistent door zowel Profit als InSite/OutSite heen. Ook detail schermen zijn overal hetzelfde. Onze rapport designer en de bijhorende rapport generator kunnen we ook generiek opzetten. Op deze manier kunnen we eenmalig dit soort onderdelen bouwen, maar door de hele applicatie heen inzetten. Dit levert vanzelfsprekend eenzelfde gebruikerservaring op voor onze klanten
De architectuur van Profit is gericht op een specifieke klantomgeving. We hebben echter ook applicaties die over klantomgevingen heen werken. Een voorbeeld is ons authenticatieplatform. Gebruikers kunnen toegang hebben tot verschillende omgevingen en subsystemen, maar willen maar één keer inloggen (single sign-on). Een ander voorbeeld is onze scan- en herkenoplossing, waarbij we de herkenning van verschillende factuur-layouts willen delen over klantomgevingen heen, zodat correcties ook de herkenning van nieuwe klanten verbeteren.
Deze services zijn losse applicaties met hun eigen architectuur. Om ook bij deze services het hergebruik en de standaardisatie te maximaliseren hebben wij het Focus platform ontwikkelt
Het Focus platform voorziet in het deployen, upgraden, hosten en monitoren van applicaties (of services) op een gestandaardiseerde manier. Op deze manier maximaliseren we kennis en efficiëntie.
Elke applicatie die gebouwd wordt op het Focus platform moet voldoen aan een aantal afspraken, zodat deze gehost kan worden.
Door deze afspraken kunnen we applicaties met behulp van ons management systeem, de ClusterManager, gecontroleerd deployen, upgraden en monitoren. Ook authenticatie en autorisatie, back-ups, schaalbaarheid en redundancy worden allemaal door het platform geregeld.
Als een service gebruik maakt van Event Sourcing kunnen we daarnaast elke applicatie upgraden terwijl deze beschikbaar blijft. Ons platform ondersteunt het upgraden van applicaties via blue-green deployments, waarbij de applicatie alleen een korte tijd in read-only modus staat, maar de data altijd beschikbaar is om in te zien.
AFAS SB, onze boekhoudsoftware, is ontwikkeld op het Focus platform. Naast dat we daar gebruik maken van CQRS en Event Sourcing, maakt SB ook gebruik van een eigen ontwikkeld low-code platform. Waar Profit werkt met een MDD heeft SB een definitie die niet alleen het datamodel beschrijft, maar ook de bijhorende logica en processen. Deze definitie wordt onderhouden in onze modelleeromgeving, kortweg Studio. Met een intern ontwikkelde generator vertalen we deze definitie naar verschillende componenten in het Focus backend framework. Op deze manier kunnen onze ontwerpers niet alleen functioneel beschrijven wat de software moet gaan doen, maar regelmatig ook grote stukken zelf modelleren. De ontwikkelaars hoeven vervolgens alleen specifieke uitzonderingen die niet in het model vastgelegd kunnen worden uit te programmeren.
Onze scan- en herken oplossing heeft inmiddels miljoenen facturen herkent. Op basis van een systeem van vaste regels, gecombineerd met een zelflerend systeem herkennen we moeiteloos de inkoopfacturen van onze klanten. Ook deze service is ontwikkeld op het Focus platform.
Elke factuur wordt eerst omgezet in een structuur van rijen en kolommen van tekst, indien nodig natuurlijk nadat we via OCR de tekst uitgelezen hebben. Hierna gaat eerst onze set met vaste regels proberen zoveel mogelijk gegevens uit te lezen, denk hierbij aan KVK-nummer, BTW nummer en bedragen. Op basis van deze gegevens gaan we na of we eerder een factuur van deze organisatie hebben gezien. Als dit het geval is kijken we of we op basis van de eerdere facturen meer regels kunnen toepassen. Denk hierbij aan andere spellingen van labels of afwijkende posities. Het uiteindelijke voorstel wordt klaargezet om in zowel Profit als SB verwerkt te kunnen worden.
Ook ons AI platform is een service die ingezet wordt binnen Profit en SB. Hierbij zorgt het platform voor model toegang, het toepassen van specifieke prompts, en het inzichtelijk maken van het verbruik van onze klanten.
Het Focus platform voorziet in het deployen, upgraden, hosten en monitoren van applicaties (of services) op een gestandaardiseerde manier. Op deze manier maximaliseren we kennis en efficiëntie.
Elke applicatie die gebouwd wordt op het Focus platform moet voldoen aan een aantal afspraken, zodat deze gehost kan worden.
Door deze afspraken kunnen we applicaties met behulp van ons management systeem, de ClusterManager, gecontroleerd deployen, upgraden en monitoren. Ook authenticatie en autorisatie, back-ups, schaalbaarheid en redundancy worden allemaal door het platform geregeld.
Als een service gebruik maakt van Event Sourcing kunnen we daarnaast elke applicatie upgraden terwijl deze beschikbaar blijft. Ons platform ondersteunt het upgraden van applicaties via blue-green deployments, waarbij de applicatie alleen een korte tijd in read-only modus staat, maar de data altijd beschikbaar is om in te zien.
AFAS SB, onze boekhoudsoftware, is ontwikkeld op het Focus platform. Naast dat we daar gebruik maken van CQRS en Event Sourcing, maakt SB ook gebruik van een eigen ontwikkeld low-code platform. Waar Profit werkt met een MDD heeft SB een definitie die niet alleen het datamodel beschrijft, maar ook de bijhorende logica en processen. Deze definitie wordt onderhouden in onze modelleeromgeving, kortweg Studio. Met een intern ontwikkelde generator vertalen we deze definitie naar verschillende componenten in het Focus backend framework. Op deze manier kunnen onze ontwerpers niet alleen functioneel beschrijven wat de software moet gaan doen, maar regelmatig ook grote stukken zelf modelleren. De ontwikkelaars hoeven vervolgens alleen specifieke uitzonderingen die niet in het model vastgelegd kunnen worden uit te programmeren.
Onze scan- en herken oplossing heeft inmiddels miljoenen facturen herkent. Op basis van een systeem van vaste regels, gecombineerd met een zelflerend systeem herkennen we moeiteloos de inkoopfacturen van onze klanten. Ook deze service is ontwikkeld op het Focus platform.
Elke factuur wordt eerst omgezet in een structuur van rijen en kolommen van tekst, indien nodig natuurlijk nadat we via OCR de tekst uitgelezen hebben. Hierna gaat eerst onze set met vaste regels proberen zoveel mogelijk gegevens uit te lezen, denk hierbij aan KVK-nummer, BTW nummer en bedragen. Op basis van deze gegevens gaan we na of we eerder een factuur van deze organisatie hebben gezien. Als dit het geval is kijken we of we op basis van de eerdere facturen meer regels kunnen toepassen. Denk hierbij aan andere spellingen van labels of afwijkende posities. Het uiteindelijke voorstel wordt klaargezet om in zowel Profit als SB verwerkt te kunnen worden.
Ook ons AI platform is een service die ingezet wordt binnen Profit en SB. Hierbij zorgt het platform voor model toegang, het toepassen van specifieke prompts, en het inzichtelijk maken van het verbruik van onze klanten.
Samen met ruim 650 collega's zetten we ons elke dag in voor het succes van onze 14.000+ klanten. Wil je als ontwikkelaar ook impact maken? Van accountantskantoren tot ziekenhuizen, ze werken allemaal met AFAS. Werk mee om ons product verder uit te bouwen en het succes van meer dan 3.000.000 gebruikers te garanderen.
Bij AFAS werken we met meer dan 150 enthousiaste developers aan software. Onze 60+ engineers zijn verdeeld over 5 teams en werken met elkaar aan verschillende projecten en met verschillende technologieën. Als ontwikkelaar werk je mee om ons product verder uit te bouwen en het succes van meer dan 3.000.000 gebruikers te garanderen!