# Architectuur

Deze pagina legt de technische architectuur van WCPOS uit voor ontwikkelaars en gevorderde gebruikers.

## Tweedelig systeem[​](#two-part-system "Directe link naar Tweedelig systeem")

WCPOS is ontworpen als een tweedelig systeem:

1. **PHP-plug-in:** Gehost op je server, dit is een relatief kleine plug-in die de [WooCommerce REST API](/nl/reference/wc-rest-api.md) uitbreidt.

2. **JavaScript-client:** Deze draait lokaal in je browser of de desktop-app, en later in iOS- en Android-apps.

Je kunt het zien als twee aparte werelden:

* De *PHP-wereld* is waar databeheer plaatsvindt met behulp van WordPress en WooCommerce.
* De *JavaScript-wereld* repliceert je WooCommerce-winkel lokaal, geoptimaliseerd voor snel zoeken en offlinegebruik.

SVG not found

## Gegevenssynchronisatie[​](#data-synchronization "Directe link naar Gegevenssynchronisatie")

Gegevens worden opgehaald uit WooCommerce via de [WooCommerce REST API](https://woocommerce.github.io/woocommerce-rest-api-docs/). Dit betekent dat de POS elk product, elke variatie, productcategorie, klant, belastingtarief en meer moet downloaden om ze lokaal op te slaan.

Hoewel dit aanvankelijk tijdrovend kan zijn, zijn ze na het downloaden onmiddellijk beschikbaar zonder dat ze voortdurend van de server hoeven te worden opgehaald.

### Wat wordt er gesynchroniseerd?[​](#what-gets-synced "Directe link naar Wat wordt er gesynchroniseerd?")

* Producten en variaties
* Productcategorieën en tags
* Klanten
* Belastingtarieven en belastingklassen
* Betaalgateways (voor het afrekenen)
* Bestellingen (voor de bestelgeschiedenis in Pro)

### Synchronisatiestrategie[​](#sync-strategy "Directe link naar Synchronisatiestrategie")

WCPOS gebruikt een incrementele synchronisatiestrategie:

1. **Initiële synchronisatie:** Downloadt alle gegevens bij de eerste keer laden
2. **Incrementele updates:** Haalt alleen wijzigingen op sinds de laatste synchronisatie
3. **Achtergrondsynchronisatie:** Controleert periodiek op updates
4. **Handmatige synchronisatie:** Gebruiker kan op elk moment een synchronisatie starten

## Voor- en nadelen van de architectuur[​](#architecture-pros-and-cons "Directe link naar Voor- en nadelen van de architectuur")

| Goed 😊                                                                  | Slecht 😟                                                   |
| ------------------------------------------------------------------------ | ----------------------------------------------------------- |
| Zoeken in lokale gegevens is direct                                      | Gegevens gesynchroniseerd houden is een uitdaging           |
| Gecachte gegevens offline beschikbaar                                    | Beperkt door de WooCommerce REST API                        |
| Mogelijkheid om betere native apps te maken voor desktop, iOS en Android | WordPress-thema's en hooks kunnen de POS-app niet aanpassen |

## Lokale database[​](#local-database "Directe link naar Lokale database")

De JavaScript-client slaat gegevens op in IndexedDB, een browsergebaseerde database. Dit biedt:

* **Persistentie:** Gegevens blijven behouden na herstart van de browser
* **Prestaties:** Snelle query's zonder netwerklatentie
* **Offline bladeren:** Gecachte gegevens blijven toegankelijk zonder internet

## Afrekenarchitectuur[​](#checkout-architecture "Directe link naar Afrekenarchitectuur")

Het afrekenproces gebruikt een iframe/webview die de WooCommerce Order Pay-pagina laadt. Deze aanpak:

* **Maakt gebruik van bestaande betaalgateways:** Elke WooCommerce-betaalgateway kan in de POS werken
* **Handhaaft de beveiliging:** Betalingsverwerking verloopt via de veilige infrastructuur van WooCommerce
* **Vermindert complexiteit:** Geen noodzaak om integraties van betaalgateways opnieuw te implementeren

## API-uitbreidingen[​](#api-extensions "Directe link naar API-uitbreidingen")

De PHP-plug-in breidt de WooCommerce REST API uit met extra endpoints voor POS-specifieke functionaliteit. Zie [WooCommerce REST API](/nl/reference/wc-rest-api.md) voor details.
