Nieuws

Hoe PawnCounter elke POS-export van een pandjeshuis leest

De gegevens van een pandjeshuis komen binnen als LeadsOnline-bestand, Visual FoxPro-tabel, Californische XML-aangifte of een CSV die niemand eerder heeft gezien. Zo verwerkt één reader ze allemaal.

Het lastige aan pandjeshuisanalyse is niet de analyse. Het is dat elke winkel je een ander bestand geeft, en de meeste eigenaren kunnen niet zeggen welk. Dus de eerste regel die we voor de reader van PawnCounterstelden, was dat hij de winkel nooit mag vragen wat het bestand is. Hij achterhaalt dat aan de hand van de bytes.

Het formaat herkennen

De detectie draait op de eerste 64 KB van het bestand, voordat er iets volledig wordt ingelezen. Een paar controles beslissen de meeste gevallen:

  • Een DBF-header betekent een Visual FoxPro-tabel, en zo slaat WinPawn zijn gegevens op. De naam van de tabel of, als die ontbreekt, de kolomnamen zeggen welke tabel het is: pandjes, merchandise, historie, afbetalingen.
  • Een XML-root herkent CAPSS, de Californische rapportageformaat, los van de LeadsOnline-ticket-webservice.
  • Een CSV waarvan de kop alleen de kolomnamen bevat LeadsOnline gebruikt (tickettype, ticketnummer, de velden van de klantnaam, merk van het artikel) is een LeadsOnline-export, ongeacht welk POS hem maakte.
  • Een pipe-gescheiden tekstbestand met Pawn Tracker-indeling is die van Pawn Tracker.
  • Een vuurwapenregister, een CSV met aanschaf en afstand, heeft een eigen handtekening en een eigen reader.

Elk van die regels is een handtekening die we hebben geverifieerd aan de hand van een echt voorbeeld uit dat systeem, dus de detectie is deterministisch en elke tak heeft een test. Als er geen enkele past, gaat het bestand naar de generieke lezer.

De CSV die niemand eerder heeft gezien

Pawn Wizard, PawnSnap en een dozijn kleinere systemen exporteren CSV, en geen van hen gebruikt dezelfde kolomnamen. In plaats van een adapter per leverancier koppelt de generieke lezer kolommen op betekenis: een lange lijst met aliassen, vergeleken zonder hoofdlettergevoeligheid en zonder spaties, underscores en koppeltekens, bepaalt welke kolom de kostprijs is, welke de vraagprijs, welke de datum van inname en welke de omschrijving. Een bestand dat artikelen en kosten beschrijft is voorraad; een bestand dat pandbriefjes beschrijft is een transactielogboek; sommige zijn beide, en dan worden beide geproduceerd. Kolommen die het niet kan plaatsen worden genegeerd in plaats van fataal te zijn, en alles wat het moest raden komt terug als waarschuwing die de winkel kan zien. Het hoeft het systeem niet eerder te hebben gezien, en daarom is de handleiding „Elk ander POS” een echte route en geen beleefde afwijzing.

Eén artikelmodel

Ongeacht de bron wordt elk record genormaliseerd naar dezelfde vorm: een artikel met een categorie, een omschrijving, een kostprijs, een vraagprijs, data van inname en uitgifte, en de lening of verkoop waartoe het behoort. Regels vullen in wat een formaat impliciet laat, en een herstelstap voegt tabellen samen die hetzelfde artikel verschillend beschrijven. WinPawn is de reden dat die stap bestaat: de geschiedenistabel, de enige met een gerealiseerde verkoopprijs, registreert een categorie en geen omschrijving, dus elk verkocht artikel zou binnenkomen als „Vuurwapens” of „Gereedschap”, terwijl hetzelfde artikelnummer in de merchandisetabel „Remington 870-shotgun” zegt. Het koppelen op artikelnummer geeft de verkoop zijn omschrijving terug, en daarmee de mogelijkheid om gelijk met gelijk te vergelijken. De analyses zien altijd alleen dat ene model, dus een fix in de afwaarderingslogica werkt even goed voor een WinPawn-winkel als voor een LeadsOnline-winkel.

Wat het niet kan lezen, eerlijk gezegd

Bravo, dat geen bulkexport heeft, wordt gelezen uit de rapporten die een winkel vanuit de schermen Report Preview of Ad Hoc opslaat als CSV of Excel, met de eigen kolomkoppen van Bravo (toegevoegd september 2026). PawnMaster biedt een winkel vandaag geen export waarmee wij kunnen werken. In plaats van te doen alsof, zegt de PawnMaster handleiding dat eerlijk, legt uit wat er vóór een overstap naar Bravo geëxporteerd moet worden, en bewaart die bestanden voor de dag dat er een lezer is.

Het resultaat is wat het product belooft op zijn pagina hier: houd het POS dat je hebt, stuur het bestand dat het al maakt en krijg de Profit X-Ray terug.