|
EULA (Nederlands)
Installatie
Bestanden
(Multi) users
Voorkeuren (preferences)
Verplichte KvK/CoC nummerinvoer
Nieuwe versie instellen
Facturen aan UBL_Writer aanbieden
Seller in JSON
Buyer in JSON
Invoiceheader in JSON
Invoiceline in JSON
Installatie:
- Download de zip van DemoVersion
- Na het uitpakken heb je 3 bestanden:
- UBL_Writer (Huidige versie 1.256)
- UBL_Data
- Example_Invoicing
De bestanden
Het bestand Example_Invoicing bevat uitsluitend een voorbeeld dat laat zien hoe je jouw
eigen systeem geschikt kunt maken en kunt koppelen aan UBL_Writer. In de scripts vind je
toelichting op de werking, maar dit bestand maakt geen onderdeel uit van UBL_Writer. Je
kunt het daarom zonder problemen negeren.
UBL_Writer gebruikt het bestand UBL_Data voor het opslaan van alle gegevens, inclusief
de licentie-informatie. Dit databestand is volledig open, maar de veldnamen in de
bestaande tabellen en de structuur daarvan worden door UBL_Writer gebruikt.
Je kunt naar wens tabellen, velden, relaties enzovoort toevoegen, zolang je de
bestaande structuur intact laat. Bij toekomstige updates blijft dit bestand altijd
behouden. In enkele tabellen zijn kolomnamen gereserveerd (zoals Spare_01, Spare_02,
enzovoort). Tijdens een update kan het voorkomen dat je wordt gevraagd een dergelijke
kolomnaam te wijzigen, omdat deze wordt gebruikt voor nieuwe functionaliteit.
Als alternatief kun je ervoor kiezen om de nieuwste versie van UBL_Data te gebruiken,
maar in dat geval zul je je eigen aanpassingen daarin opnieuw moeten opnemen. Het is aan
jou om te bepalen welke werkwijze het handigst is.
Multiuser/sharing en gebruikersbeheer
Zowel UBL_Writer als UBL_Data zijn klaar om te worden geshared. Beide bestanden
bevatten de gebruikers: 'admin' en 'user', beiden hebben het wachtwoord: 'qwerty2025'.
Het is zeer raadzaam om voor deze wachtwoorden iets anders in te stellen (een must indien jouw server
bereikbaar is vanaf internet).
Het bestand UBL_Data is voor de gebruiker admin volledig toegankelijk.
In UBL_Writer (waar "the magic" plaatsvindt) is de toegang met [Full Access] echter
verwijderd. Je kunt hier de 'extended privileges' in security wijzigen.
In de 'Security/Beveiliging' van UBL_Writer kan je wachtwoorden niet wijzigen
gebruik daarvoor het menu 'Change Password.../Wijzig wachtwoord...' in het menu 'File/Bestand':

Het is zeer aanbevolen om ten minste voor de gebruiker 'admin' een eigen wachtwoord
in te stellen (maar ook voor 'user'). Daarvoor moet je dan als 'admin' (resp. als 'user') inloggen en dan het wachtwoord aanpassen
Wanneer dit is gedaan, kun je UBL_Writer en UBL_Data uploaden naar je eigen FileMaker
Server (FMServer). Bij iedere update zal je de beveiliging weer even voor jouw situatie moeten aanpassen.
Voorkeuren en licentie-instellingen (preferences)
De voorkeuren kunnen uitsluitend worden ingesteld met het 'admin'-account. In
dit onderdeel leg je onder andere de voorkeuren vast van de organisatie waarvoor je
UBL-facturen genereert.
Daarnaast vind je hier de instellingen van de licentie. Wanneer je gebruikmaakt van een
proeflicentie, kun je vanuit dit scherm eenvoudig een definitieve licentie aanschaffen. Er
is geen extra functionaliteit verborgen achter de koopfunctie: tijdens de proefperiode is
alle functionaliteit volledig beschikbaar. Na afloop van de proefperiode kun je echter geen
UBL-facturen meer produceren.
Voor het aanvragen van een proeflicentie moeten minimaal de volgende velden worden ingevuld:
CompanyName, CoCnr, VATnr en Email. Gebruik hiervoor de werkelijke bedrijfsgegevens, omdat
anders geen geldige UBL-facturen kunnen worden gegenereerd. De overige velden mogen voorlopig
leeg blijven, maar voor het aanmaken van volledig geldige UBL-facturen en voor de aanschaf
van een definitieve licentie zijn ook de adresgegevens vereist.
Verplichte invoer KvK nummer:
In Nederland is iedere ondernemer verplicht ingeschreven bij de KvK (Kamer van Koophandel).
In België is dat de KBO (Kruispuntbank van Ondernemingen, Belgische ondernemingen kunnen
hier hun BTWnummer invullen, zonder BE er voor te plaatsen)
In UBL_Writer moet dat nummer worden ingevuld i.v.m. het aanmaken van de factuur als je de
licentie besluit af te nemen.
Eerste keer instellen van een nieuwe versie
Na het downloaden open je UBL_Writer stand-alone met het account 'admin'. Stel
vervolgens voor dit account en voor het account 'user' de gewenste wachtwoorden in.
Wanneer je UBL_Writer via FileMaker Server (FMServer) gebruikt, stel dan bij de privilegesets
'maintenance' en '[data entry]' in de extended privileges de waarde fmapp in.
Nadat je deze instellingen hebt uitgevoerd, kun je UBL_Writer vervangen op de locatie waar
je het bestand normaal gebruikt.
Een factuur aan UBL_Writer aanbieden om te converteren
De werking van UBL_Writer is recht toe recht aan: de inhoud moet in JSON-formaat worden
aangeboden, tegelijk met een PDF-weergave die in het uiteindelijke UBL-document wordt
opgenomen (embedded).
Zo'n JSON ziet er uit zoals in het voorbeeld in dit document: example.json.
In de root staat 4 objecten: buyer, seller, invoice en line. de namen van de objecten en
hun inhoud zijn redelijk beschrijvend en hieronder vind je een aantal toelichtingen:
| {} (root) | object (*-verplicht) | comment |
| Seller {} |
address * | Straat/postbus plus nummer plus toevoeging (bus in BE) |
| city * | woonplaats |
| cocName * | Naam van inschrijving bij de KvK |
| creditorNumber | Indien bekend, het leveranciernummer waaronder verkoper
bij de koper bekend staat |
| email * | E-mailadres van verkoper |
| iban * | IBAN waar het factuurbedrag naartoe moet worden overgemakt |
| name * | Handelsnaam van verkoper |
| phone | Telefoonnummer |
| zip * | Postcode |
| buyer {} |
address * | Straat/postbus plus nummer plus toevoeging (bus in BE) |
| city * | woonplaats |
| cocName * | Naam van inschrijving bij de KvK |
| cocNr | Nummer van inschrijving bij de KvK (voor België gebruik het BTWnr zonder
BE er voor) |
| countryIso2 * | Landcode van het land volgens ISO3166-2. Zie ook de 'Valuelist:
Country Code' in UBL_Writer |
| debtorNumber * | Het debiteurnummer waaronder koper in uw administratie of
boekhouding staat |
| easId * | Voor NL is dit 9944 (btwnr) of 0106 (kvknr),voor BE is dit atijd 9925. Zie de
'Valuelist: ElectronicAddressScheme' in UBL_Writer |
| email * | E-mailadres van koper |
| iban | Indien bekend het IBAN van de koper, bij automatische incasso is dit verplicht |
| name * | Handelsnaam van koper |
| phone | Telefoonnummer |
| vatNr * | BTW nummer |
| zip * | Postcode |
| invoice {} |
currency * | Meestal staat hier EUR, zie ook de 'Valuelist: 'Currency Code' in
UBL_Writer |
| date * | De factuurdatum. Geef alle kalenderdata altijd op als YYYY+MM+DD, dan
is de invoer ondubbelzinnig. |
| deliveryCountryIso2 * | Ivm de BTW moet het land van levering worden opgegeven |
| deliveryDate * | Datum van levering, geef hier de datum van de eerste levering
of de factuurdatum op (YYYY+MM+DD) |
| dueDate * | De vervaldatum van de factuur (YYYY+MM+DD) |
| number * | Factuurnummer |
| paymentID (* BE) | Het betalingskenmerk. In België is dit de daar verplichte OGM code.
In UBL is deze verplicht maar voor NL bedrijven wordt er automatisch debnr / factuurnr ingevuld
indien dit veld leeg is gebleven |
| paymentMeans * | Voor een normale bankoverschrijving moet hier 30 staan, bij
contante betaling kan je ZZZ gebruiken. Zie daarvoor de keuzelijst: 'PaymentMeans' in UBL_Writer |
| paymentTerms * | De betaalvoorwaarden die je hanteert, bijvoorbeeld '15 dagen na
factuurdatum'. De verplichte 'dueDate' neem dit eigenlijk al voor zijn rekening |
| poNumber | Een purchaseOrder nummer dat door de klant is opgegeven |
| remark | Een opmerking die opde factuur kan zijn geplaatst |
| type * | 380, dit is het standaardtype UBL-factuur dat UBL_writer maakt. Er zijn
andere waarden mogelijk (zie de keuzelijst: Incoice type), maar het kan zijn dat er dan
voorwaarden en eisen gaan meespelen waarmee in UBL_Writer geen rekening is gehouden. |
| line [] |
amount * | Het product van 'quantity' en 'price' |
| buyerProject | dit kan het poNummer zijn, maar ook eennummer dat de klant per artikel
heeft opgegeven |
| desciption * | De product omschrijving, een eventueel artikelnummer kan hier naar eigen
inzicht worden toegevoegd |
| price * | De prijs (exclusief BTW) per factuureenheid (unit) van het product |
| quantity * | Aantal gefactureerde eenheden van het product |
| taxExempt (*) | Dit blijft leeg wanneer 'vatScheme'='S', in alle andere gevallen moet
hier een geldige waarde uit de keuzelijst 'TaxExemptReason' worden ingevuld |
| unit * | Een waarde uit 'UnitCode' is hier verplicht. Veel gebruikt worden 'HUR' voor
uren, 'H87' voor stuks etc. zi daarvoor de keuzelijst. |
| vatAmount * | Het a.d.h.v. 'vatPercetage' berekende BTW bedrag over 'amount'. Afronden
op 2 cijfers achter de komma |
| vatPercentage * | Het gehanteerde BTW-percentage in procentpunten |
| vatScheme * | Bij normale binnenlandse facturen wordt hier 'S' ingevuld. Voor anderwe
schema's de keuzelijst: 'Duty Category' raadplegen |
Voorbeeld van een functie om een JSON volgens de voorgaande specificatie op te bouwen
De veldnamen in deze formule zijn zoals die in 'Example_Invoicing.fmp12' worden gebruikt
Let ( [
$seller =
JSONSetElement ( "" ;
[ "address" ; Instelling::Adres ; JSONString ] ;
[ "city" ; Instelling::Plaats ; JSONString ] ;
[ "cocName" ; Instelling::Naam ; JSONString ] ;
[ "creditorNumber" ; Debiteur::Leverancier ; JSONString ] ;
[ "email" ; Instelling::Email ; JSONString ] ;
[ "iban" ; Instelling::IBAN ; JSONString ] ;
[ "name" ; Instelling::Naam ; JSONString ] ;
[ "phone" ; Instelling::Telefoon ; JSONString ] ;
[ "zip" ; Instelling::Postcode ; JSONString ]
) ;
$buyer =
JSONSetElement ( "" ;
[ "address" ; Debiteur::Adres ; JSONString ] ;
[ "city" ; Debiteur::Plaats ; JSONString ] ;
[ "cocName" ; Debiteur::Naam ; JSONString ] ;
[ "cocNr" ; Debiteur::KvKnr ; JSONString ] ;
[ "countryIso2" ; Debiteur::Landcode ; JSONString ] ;
[ "debtorNumber" ; Debiteur::Debiteurnr ; JSONString ] ;
[ "easId" ; Debiteur::EasID ; JSONString ] ;
[ "email" ; Debiteur::Email ; JSONString ] ;
[ "iban" ; Debiteur::IBAN ; JSONString ] ;
[ "name" ; Debiteur::Naam ; JSONString ] ;
[ "phone" ; Debiteur::Telefoon ; JSONString ] ;
[ "vatNr" ; Debiteur::BTWnr ; JSONString ] ;
[ "zip" ; Debiteur::Postcode ; JSONString ]
) ;
$invoice =
JSONSetElement ( "" ;
[ "currency" ; Factuur::Valuta ; JSONString ] ;
[ "date" ; Factuur::Datum ; JSONString ] ;
[ "deliveryCountryIso2" ; Factuur::LeverlandCode ; JSONString ] ;
[ "deliveryDate" ; Factuur::LeverDatum ; JSONString ] ;
[ "dueDate" ; Factuur::VervalDatum ; JSONString ] ;
[ "number" ; Factuur::Nummer ; JSONString ] ;
[ "paymentID" ; Factuur::Betalingskenmerk ; JSONString ] ;
[ "paymentMeans" ; Factuur::Betaalwijze ; JSONString ] ;
[ "paymentTerms" ; Factuur::Betaalvoorwaarden ; JSONString ] ;
[ "poNumber" ; Factuur::PoNummer ; JSONString ] ;
[ "remark" ; Factuur::Commentaar ; JSONString ] ;
[ "type" ; Factuur::TypeFactuur ; JSONString ]
) ;
$line =
While ( [
i = 0 ;
n = ValueCount ( List ( Regel::_UUID ) ) ;
l = "[]"
] ;
i $lt; n
; [
i = i + 1 ;
l =
JSONSetElement ( l ;
[ "[+]amount" ; GetNthRecord ( Regel::_cBedrag ; i ) ; JSONString ] ;
[ "[:]buyerProject" ; Factuur::PoNummer ; JSONString ] ;
[ "[:]description" ; GetNthRecord ( Regel::Omschrijving ; i ) ; JSONString ] ;
[ "[:]price" ; GetNthRecord ( Regel::Prijs ; i ) ; JSONNumber ] ;
[ "[:]quantity" ; GetNthRecord ( Regel::Aantal ; i ) ; JSONNumber ] ;
[ "[:]taxExempt" ; GetNthRecord ( Regel::BtwVrijstelling ; i ) ; JSONString ] ;
[ "[:]unit" ; GetNthRecord ( Regel::Eenheid ; i ) ; JSONString ] ;
[ "[:]vatAmount" ; GetNthRecord ( Regel::_cBtw ; i ) ; JSONNumber ] ;
[ "[:]vatPercentage"; GetNthRecord ( Regel::BtwPerc ; i ) ; JSONNumber ] ;
[ "[:]vatScheme" ; GetNthRecord ( Regel::BtwSchema ; i ) ; JSONString ]
)
] ; l )
] ;
JSONSetElement ( "" ;
[ "seller" ; $seller ; JSONObject ] ;
[ "buyer" ; $buyer ; JSONObject ] ;
[ "invoice" ; $invoice ; JSONObject ] ;
[ "line" ; $line ; JSONArray ]
)
)
|