Datatemplate voor de verwerking van crediteurenbetalingen
Datatemplate voor de verwerking van crediteurenbetalingen
- Procesattributen voor financiële analyse
- Belangrijke activiteiten voor het volgen van betalingen
- Gedetailleerde instructies voor data-extractie uit Dynamics 365
Attributen voor de verwerking van crediteurenbetalingen
| Naam | Beschrijving | ||
|---|---|---|---|
| Activiteit Activity | De specifieke taak of statuswijziging die heeft plaatsgevonden. | ||
| Beschrijving Dit attribuut beschrijft de gebeurtenis of stap in het proces, zoals ‘Factuur aangemaakt’, ‘Factuur goedgekeurd’ of ‘Betaling geboekt’. Zo worden technische transactietypen en wijzigingen in de workflowstatus omgezet in begrijpelijke bedrijfsgebeurtenissen. In Dynamics 365 worden deze activiteiten vaak afgeleid uit een combinatie van tabelinvoegingen, zoals een nieuw record in Waarom dit belangrijk is Dit bepaalt de processtroom en de volgorde van gebeurtenissen op de proceskaart. Waar vind je dit? Afgeleid uit verschillende transactietabellen en logboeken met de workflowgeschiedenis Voorbeelden Factuur aangemaaktFactuur goedgekeurdBetaling aangemaakt | |||
| Factuurnummer InvoiceNumber | De unieke identificatiecode van de leveranciersfactuur. | ||
| Beschrijving Het factuurnummer is de vaste case-ID voor deze procesweergave. Het groepeert alle gebeurtenissen van één leveranciersfactuur, zodat je het volledige traject van ontvangst tot betaling kunt analyseren. In Microsoft Dynamics 365 komt dit meestal overeen met het veld Waarom dit belangrijk is Dit is de belangrijkste sleutel om losse activiteiten in de crediteurenadministratie aan één procesinstantie te koppelen. Waar vind je dit? Tabel: VendInvoiceJour, veld: InvoiceId Voorbeelden INV-2023-00198223344ACME-OCT-22 | |||
| Tijdstip van gebeurtenis EventTime | De timestamp waarop de activiteit plaatsvond. | ||
| Beschrijving Dit attribuut registreert de exacte datum en tijd waarop een activiteit plaatsvond. Het wordt gebruikt om gebeurtenissen chronologisch te ordenen en de tijd tussen stappen te berekenen. In Dynamics 365 komt deze waarde meestal uit Waarom dit belangrijk is Essentieel voor het berekenen van doorlooptijden en het opsporen van bottlenecks. Waar vind je dit? Systeemvelden CreatedDateTime of ModifiedDateTime in transactietabellen Voorbeelden 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Bronsysteem SourceSystem | De naam van het systeem waaruit de data afkomstig is. | ||
| Beschrijving Geeft aan uit welke software of omgeving de procesdata is gehaald. In dit geval verwijst de waarde steeds naar de Microsoft Dynamics 365-instantie. Dit is vooral handig in omgevingen met meerdere systemen, waar data uit ERP-systemen en externe scanoplossingen kan worden gecombineerd. Waarom dit belangrijk is Zorgt ervoor dat de herkomst van data in analyses met meerdere systemen kan worden gevolgd. Waar vind je dit? Vast ingesteld of geconfigureerd tijdens de extractie Voorbeelden Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Laatste data-update LastDataUpdate | De timestamp waarop de data is geëxtraheerd of vernieuwd. | ||
| Beschrijving Geeft aan hoe actueel de data voor de analyse is. Zo zie je of je naar realtime data kijkt of naar een momentopname uit een eerdere periode. Deze waarde wordt meestal gegenereerd door het ETL-proces (Extract, Transform, Load) en is doorgaans geen veld in Dynamics 365 zelf. Waarom dit belangrijk is Belangrijk voor het vertrouwen in dashboards en KPI’s. Waar vind je dit? Gegenereerd door het extractiescript Voorbeelden 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Afdeling Department | De afdeling die verantwoordelijk is voor de kosten. | ||
| Beschrijving De financiële dimensie die de interne afdeling aangeeft. In Dynamics 365 worden dimensies dynamisch opgeslagen, vaak in Dit attribuut wordt gebruikt in de weergave ‘Complexiteit van leveranciersrelaties’ om te zien welke interne afdelingen de meeste crediteurenfacturen verwerken. Waarom dit belangrijk is Maakt analyse per organisatieniveau en van verantwoordelijkheden mogelijk. Waar vind je dit? Tabel: VendInvoiceJour, veld: DefaultDimension (vereist de weergave DimensionAttributeLevelValue) Voorbeelden ITFinanciënBedrijfsvoering | |||
| Bedrijfscode CompanyCode | De identificatiecode van de juridische entiteit of dochteronderneming. | ||
| Beschrijving Geeft aan binnen welke juridische entiteit van de organisatie de factuur wordt verwerkt. In Microsoft Dynamics 365 wordt dit afgedwongen via het systeemveld Dit attribuut is belangrijk voor de analyse van de totale doorlooptijd. Zo kun je dochterondernemingen en geografische eenheden met elkaar vergelijken. Waarom dit belangrijk is Maakt vergelijkingen tussen bedrijfseenheden of landen mogelijk. Waar vind je dit? Tabel: VendInvoiceJour, veld: DataAreaId Voorbeelden USMFDEMFGBSI | |||
| Factuurbedrag InvoiceAmount | Het totale bedrag van de factuur. | ||
| Beschrijving De totale waarde van de factuur in de transactievaluta. In Dynamics 365 staat deze in velden zoals Wordt gebruikt in het dashboard voor het opsporen van het risico op dubbele betalingen, om bedragen met leveranciersgegevens te vergelijken. Waarom dit belangrijk is Belangrijk voor het analyseren van uitgaven en financiële risico’s. Waar vind je dit? Tabel: VendInvoiceJour, veld: InvoiceAmount Voorbeelden 1500.00245.5010000.00 | |||
| Factuurdatum InvoiceDate | De documentdatum op de factuur. | ||
| Beschrijving De datum die op de leveranciersfactuur staat. In Dynamics 365 is dit het veld Wordt gebruikt in de analyse ‘Doorlooptijd van begin tot eind’ om de totale levenscyclus vanuit het perspectief van de leverancier te meten. Waarom dit belangrijk is Bepaalt vanaf wanneer de ouderdom van de factuur wordt berekend. Waar vind je dit? Tabel: VendInvoiceJour, veld: InvoiceDate Voorbeelden 2023-10-012023-10-15 | |||
| Gebruikers-ID UserId | De identificatie van de gebruiker die de activiteit heeft uitgevoerd. | ||
| Beschrijving Geeft aan welke systeemgebruiker verantwoordelijk is voor een bepaalde activiteit, zoals het goedkeuren van een factuur of het boeken van een betaling. De gegevens komen uit de velden In de analyse ‘Betalingsblokkades en oorzaken van vertraging’ zie je hiermee of bepaalde medewerkers vaker blokkades veroorzaken dan anderen. Waarom dit belangrijk is Maakt analyse van het gedrag van medewerkers en functiescheiding mogelijk. Waar vind je dit? Systeemvelden CreatedBy/ModifiedBy in transactie- en historietabellen Voorbeelden jdoebeheerderworkflow_sys | |||
| Inkoopordernummer PurchaseOrderNumber | Het referentienummer van de bijbehorende inkooporder. | ||
| Beschrijving Koppelt de factuur aan het oorspronkelijke inkoopdocument. In Dynamics 365 is dit het veld Dit attribuut ondersteunt het dashboard ‘PO-match en trends in afwijkingen’, waarmee je onderscheid maakt tussen facturen met en zonder inkooporder. Waarom dit belangrijk is Essentieel voor het analyseren van het matchpercentage van inkooporders en facturen. Waar vind je dit? Tabel: VendInvoiceJour, veld: PurchId Voorbeelden PO-000455000342PO-22-998 | |||
| Leveranciersnaam VendorName | De naam van de leveranciersorganisatie. | ||
| Beschrijving De beschrijvende naam van de leverancier. In D365 verwijst de leveranciersrekening via een foreign key naar het Global Address Book ( Herkenbare namen maken de weergave ‘Complexiteit van leveranciersrelaties’ bruikbaarder en zorgen ervoor dat zakelijke gebruikers de dashboards kunnen gebruiken. Waarom dit belangrijk is Geeft context bij het leveranciersrekeningnummer. Waar vind je dit? Tabel: DirPartyTable (via VendTable), veld: Naam Voorbeelden Contoso-kantoorbenodigdhedenFabrikam-elektronicaLitware Inc. | |||
| Leveranciersrekening VendorAccount | Het unieke rekeningnummer van de leverancier. | ||
| Beschrijving De unieke identificatiecode van de leverancier in de transactie. In Dynamics 365 komt dit overeen met het veld Dit attribuut is belangrijk voor de weergave van de complexiteit van leveranciersrelaties. Zo kun je prestaties en frictie per leveranciersrelatie analyseren. Waarom dit belangrijk is Maakt het mogelijk om procesprestaties per leverancier te vergelijken. Waar vind je dit? Tabel: VendInvoiceJour, veld: InvoiceAccount of OrderAccount Voorbeelden US-101V000452001 | |||
| Vervaldatum DueDate | De datum waarop de factuur uiterlijk moet worden betaald. | ||
| Beschrijving De contractuele datum waarop de betaling uiterlijk moet zijn voldaan om boetes te voorkomen. In Dynamics 365 staat deze datum als Dit is de belangrijkste basis voor de KPI ‘Percentage op tijd betaalde facturen’ en helpt bij het prioriteren van werk in de weergave ‘Doorvoer en volume van het crediteurenproces’. Waarom dit belangrijk is De norm voor het meten van tijdige betalingen. Waar vind je dit? Tabel: VendInvoiceJour of VendTrans, veld: DueDate Voorbeelden 2023-11-302023-12-15 | |||
| Betaalmethode PaymentMethod | De manier waarop de factuur wordt betaald, bijvoorbeeld met een cheque, bankoverschrijving of EFT. | ||
| Beschrijving Geeft aan hoe het geld naar de leverancier wordt overgemaakt. In Dynamics 365 is dit het veld Dit attribuut wordt gebruikt in het dashboard ‘Doorlooptijden van betalingen’ om de efficiëntie van verschillende betalingstypen te beoordelen. Waarom dit belangrijk is Verklaart verschillen in de uitvoeringsfase van betalingen. Waar vind je dit? Tabel: VendInvoiceJour (gekoppeld aan PaymMode-gegevens) of VendTrans Voorbeelden CHEQUEACHBANKOVERSCHRIJVING | |||
| Betaling geblokkeerd IsPaymentBlocked | Geeft aan of de factuur momenteel is geblokkeerd voor betaling. | ||
| Beschrijving Een booleaanse indicator die aangeeft of de factuur in de wacht staat. In Dynamics 365 wordt deze vaak afgeleid van de status Deze indicator is de belangrijkste factor in de analyse ‘Betalingsblokkades en oorzaken van vertraging’ en brengt onderbrekingen in het proces aan het licht. Waarom dit belangrijk is Brengt directe oorzaken van vertraging en handmatige tussenkomst aan het licht. Waar vind je dit? Tabel: VendTrans, veld: Approved (omgekeerde waarde) of specifieke velden voor blokkeringen Voorbeelden truefalse | |||
| Betalingsvoorwaarden PaymentTerms | De code voor de afgesproken betalingsvoorwaarden. | ||
| Beschrijving De configuratiecode die de vervaldatums en kortingen bepaalt, bijvoorbeeld Net30. In Dynamics 365 is dit Door dit attribuut naast ‘Doorlooptijd’ te analyseren, zie je of vertragingen in het proces leiden tot overschrijding van de afgesproken voorwaarden. Waarom dit belangrijk is Geeft context bij de berekening van de vervaldatum. Waar vind je dit? Tabel: VendInvoiceJour, veld: PaymTermId Voorbeelden Net302%10Net30COD | |||
| Boekingsnummer VoucherNumber | Het boekingsnummer in het grootboek dat bij de transactie hoort. | ||
| Beschrijving De interne identificatie van de boeking in het grootboek. In Dynamics 365 koppelt het veld Hoewel dit een technisch gegeven is, helpt het bij de controle van procesverloop en compliance om boekingen terug te vinden in het grootboek en ze af te stemmen. Waarom dit belangrijk is Belangrijk voor financiële controles en afstemming. Waar vind je dit? Tabel: VendInvoiceJour, veld: LedgerVoucher Voorbeelden VOU-10023INV-ACC-992 | |||
| Datum voor betalingskorting CashDiscountDate | De uiterste datum waarop je moet betalen om korting te krijgen. | ||
| Beschrijving De deadline om korting voor vroege betaling te krijgen. In Dynamics 365 is dit Dit attribuut vormt de basis voor het dashboard ‘Resultaten van betalingskortingen’, waarmee de organisatie gemiste besparingen kan berekenen. Waarom dit belangrijk is Heeft direct invloed op de KPI voor de financiële efficiëntie van het proces. Waar vind je dit? Tabel: VendInvoiceJour of VendTrans, veld: CashDiscDate Voorbeelden 2023-10-102023-10-20 | |||
| Valuta Currency | De valutacode van de factuur. | ||
| Beschrijving De ISO-code van de valuta waarin de factuur is uitgegeven. In Dynamics 365 is dit het veld Belangrijk voor het standaardiseren van bedragen in de Activiteit-bedrag-koppeling, als bedragen in verschillende valuta moeten worden omgerekend. Waarom dit belangrijk is Nodig om financiële waarden goed te kunnen interpreteren. Waar vind je dit? Tabel: VendInvoiceJour, veld: CurrencyCode Voorbeelden USDEURGBP | |||
Activiteiten voor de verwerking van crediteurenbetalingen
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Betaling aangemaakt | Het systeem maakt het betalingsbestand aan (EFT, ISO20022) of drukt cheques af. De betalingsstatus op de journaalregel verandert in Sent of Generated. | ||
| Waarom dit belangrijk is Ondersteunt de KPI voor de vertraging tussen goedkeuring en uitvoering. Bevestigt dat de betalingsopdracht is aangemaakt. Waar vind je dit? LedgerJournalTrans.PaymentStatus verandert in Sent/Recieved. Vaak afgeleid van updates van de regel. Vastleggen Vergelijk het veld PaymentStatus voor en na Gebeurtenistype inferred | |||
| Betaling geboekt | Het betalingsjournaal wordt in het grootboek geboekt. De factuur wordt vereffend en het saldo van de leverancier wordt bijgewerkt. Hiermee is het financiële proces afgerond. | ||
| Waarom dit belangrijk is De laatste activiteit voor de gemiddelde doorlooptijd van factuur tot betaling. Bevestigt dat de boekingen voor de afname van liquide middelen zijn afgerond. Waar vind je dit? LedgerJournalTrans is geboekt. VendTrans wordt bijgewerkt om de vereffening weer te geven. De gebeurtenis is het boeken van het journaal. Vastleggen Geregistreerd wanneer transactie X wordt uitgevoerd Gebeurtenistype explicit | |||
| Betalingsjournaal aangemaakt | De factuur wordt geselecteerd en toegevoegd aan een regel in het betalingsjournaal. Dit geeft aan dat de betaling is gepland en start meestal de workflow voor de betalingscontrole. | ||
| Waarom dit belangrijk is Markeert de overgang van een betalingsverplichting naar de verwerking van een uitgaande betaling. Wordt gebruikt om de doorlooptijd van de betalingsuitvoering te meten. Waar vind je dit? LedgerJournalTrans.CreatedDateTime. De factuur is gekoppeld via het veld MarkedInvoice of via vereffeningstabellen. Vastleggen Geregistreerd bij het aanmaken van een record in LedgerJournalTrans Gebeurtenistype explicit | |||
| Factuur aangemaakt | De eerste aanmaak van een record voor een nog niet verwerkte leveranciersfactuur in het systeem. Dit markeert de invoer van de factuur in de workflow van Dynamics 365, handmatig of via het importeren van een data-entiteit. | ||
| Waarom dit belangrijk is Bepaalt de starttijd voor berekeningen van de doorlooptijd. Zo kunnen organisaties meten hoelang facturen in het systeem staan voordat ze worden verwerkt of geboekt. Waar vind je dit? De timestamp voor het aanmaken van VendInvoiceInfoTable.CreatedDateTime of VendInvoiceInfoTable.RecId. Dit betreft de kop van de openstaande leveranciersfactuur. Vastleggen Geregistreerd bij het aanmaken van een record in VendInvoiceInfoTable Gebeurtenistype explicit | |||
| Factuur geboekt | De factuur wordt in het grootboek geboekt, waardoor een verplichting in het systeem ontstaat. Het record wordt verplaatst van de tabellen voor openstaande posten naar de tabellen met geboekte transacties. | ||
| Waarom dit belangrijk is Een belangrijke mijlpaal die aangeeft dat de schuld financieel is verwerkt. Na deze activiteit kan de factuur voor betaling worden geselecteerd. Waar vind je dit? Aanmaak van een record in VendInvoiceJour en VendTrans. TransDate is de boekingsdatum. Vastleggen Geregistreerd wanneer transactie X wordt uitgevoerd Gebeurtenistype explicit | |||
| Factuur gekoppeld aan inkooporder | Het systeem koppelt de factuurregel aan een inkooporder of productontvangst. Deze activiteit geeft aan dat de factuur is gecontroleerd aan de hand van de inkooporder. | ||
| Waarom dit belangrijk is Belangrijk voor de KPI voor matching met inkooporders in één keer. Hiermee maak je onderscheid tussen verwerking zonder handmatige tussenkomst en facturen waarvoor handmatig werk nodig is. Waar vind je dit? VendInvoiceInfoLine.PurchId en VendInvoiceInfoTable.MatchStatus. Afgeleid wanneer MatchStatus verandert in Passed. Vastleggen Vergelijk het veld MatchStatus voor en na Gebeurtenistype inferred | |||
| Factuur goedgekeurd | De workflowinstantie voor de openstaande factuur krijgt de status voltooid of goedgekeurd. De factuur kan nu naar het grootboek worden geboekt. | ||
| Waarom dit belangrijk is Berekent de gemiddelde goedkeuringsdoorlooptijd. Vertragingen in deze fase kunnen ervoor zorgen dat vroegbetalingskorting misloopt. Waar vind je dit? WorkflowTrackingStatusTable.CreatedDateTime, waarbij TrackingStatus op Completed staat. Of VendInvoiceInfoTable.RequestStatus is gelijk aan Approved. Vastleggen Geregistreerd wanneer de workflowinstantie is voltooid Gebeurtenistype explicit | |||
| Betalingsblokkade ingesteld | De leverancierstransactie wordt geblokkeerd en kan daardoor niet in een betalingsvoorstel worden opgenomen. Dit gebeurt vaak handmatig bij een geschil. | ||
| Waarom dit belangrijk is Ondersteunt de analyse van betalingsblokkades en frictie. Brengt handmatige ingrepen aan het licht die de uitgaande betalingen vertragen. Waar vind je dit? De vlag VendTrans.Approved wordt op No gezet of specifieke statusvelden voor OnHold worden ingevuld. Hiervoor moeten updates van VendTrans worden bijgehouden. Vastleggen Vergelijk het statusveld voor en na Gebeurtenistype inferred | |||
| Betalingsjournaal goedgekeurd | De workflow voor het betalingsjournaal is goedgekeurd en betalingen mogen worden aangemaakt. Dit is de laatste controle voordat de bedragen voor overdracht worden klaargezet. | ||
| Waarom dit belangrijk is Maakt onderscheid tussen de administratieve voorbereiding van betalingen en de bottleneck bij de goedkeuring. Waar vind je dit? WorkflowTrackingStatusTable gekoppeld aan de ID van LedgerJournalTable (kop). Status is Completed. Vastleggen Geregistreerd wanneer de workflowinstantie is voltooid Gebeurtenistype explicit | |||
| Factuur bijgewerkt | Registreert wijzigingen aan de factuurkop of factuurregels voordat de factuur wordt geboekt. Veel updates kunnen wijzen op problemen met data-extractie of handmatige correcties tijdens de validatie. | ||
| Waarom dit belangrijk is Veel updates wijzen op herstelwerk of slechte datakwaliteit bij de bron, bijvoorbeeld door OCR-fouten. Dit ondersteunt de monitor voor herstelwerk en gegevensnauwkeurigheid. Waar vind je dit? Database-log (SysDatabaseLog) voor VendInvoiceInfoTable, als die is ingeschakeld. Anders afgeleid van wijzigingen in ModifiedDateTime bij een hoge pollingfrequentie. Vastleggen Vergelijk ModifiedDateTime in opeenvolgende extracties Gebeurtenistype inferred | |||
| Factuur ter goedkeuring ingediend | De openstaande factuur wordt ter beoordeling naar de workflow-engine gestuurd. Dit markeert de overgang van gegevensinvoer en matching naar de goedkeuringsfase. | ||
| Waarom dit belangrijk is Markeert het begin van de goedkeuringsdoorlooptijd. Essentieel voor het analyseren van de efficiëntie van interne hiërarchieën. Waar vind je dit? WorkflowTrackingStatusTable.CreatedDateTime, waarbij ContextTableId gelijk is aan de ID van VendInvoiceInfoTable en Status op Submitted staat. Vastleggen Geregistreerd wanneer de workflowinstantie wordt gestart Gebeurtenistype explicit | |||
| Factuurmatching mislukt | Bij de matching wordt een verschil gevonden tussen de factuur en de inkooporder of ontvangst, bijvoorbeeld in prijs of hoeveelheid. Vaak ligt het proces stil totdat het verschil is opgelost. | ||
| Waarom dit belangrijk is Brengt specifieke knelpunten in het matchingproces aan het licht. Ondersteunt het dashboard voor matching met inkooporders en afwijkingstrends. Waar vind je dit? VendInvoiceInfoTable.MatchStatus verandert in Failed of Discrepancy. Verschillen zijn ook zichtbaar in de matchingafwijkingen van VendInvoiceInfoLine. Vastleggen Vergelijk het veld MatchStatus voor en na Gebeurtenistype inferred | |||
Extractiegidsen
Stappen
Controleer de toegang tot de Data Management-werkruimte: Meld je aan bij je Microsoft Dynamics 365 Finance-omgeving. Ga naar Workspaces en kies Data Management. Hier stel je data-exportprojecten in.
Maak een exportproject aan: Klik op de tegel Export om een nieuw dataproject te maken. Geef het project een duidelijke naam, bijvoorbeeld ProcessMining_AP_Export. Kies bij Target data format het gewenste formaat, zoals Azure SQL DB voor BYOD of CSV voor een bestandsexport.
Voeg data-entiteiten toe: Voeg de volgende standaarddata-entiteiten één voor één aan het project toe: VendorInvoiceHeaderEntity (openstaande facturen), VendorInvoiceLineEntity (factuurregels), VendorInvoiceJournalHeaderEntity (geboekte facturen), VendorPaymentJournalLineEntity (betalingen) en WorkflowHistoryEntity (goedkeuringslogboeken). Is WorkflowHistoryEntity niet standaard beschikbaar, dan moet je mogelijk een aangepaste entiteit of een specifieke systeementiteit voor export inschakelen.
Stel filters voor entiteiten in: Klik bij elke entiteit op het filterpictogram. Beperk de data tot de relevante CompanyInfo (DataAreaId) en stel een datumbereik in voor de velden CreatedDateTime of InvoiceDate. Zo haal je alleen data op voor de gewenste analyseperiode, bijvoorbeeld de afgelopen 12 maanden.
Stel terugkerende export in: Maak een terugkerende datajob aan om het event log actueel te houden. Stel de frequentie in, bijvoorbeeld dagelijks of elk uur, en schakel waar mogelijk Incremental push in. Zo worden alleen gewijzigde records geëxporteerd en blijft de belasting van het systeem beperkt.
Voer de eerste export uit: Start het project de eerste keer handmatig door op Export now te klikken. Controleer het Execution summary om na te gaan of alle records zonder fouten zijn geëxporteerd.
Transformeer de data: Nadat de data naar Azure SQL of bestanden is geëxporteerd, gebruik je het SQL-script uit het gedeelte Query om de tabellen samen te voegen. Deze bewerking zet de verschillende entiteitsrecords om in één chronologisch event log.
Koppel de attributen: Koppel in de resulterende dataset InvoiceNumber aan Case-ID, EventTime aan Timestamp en Activity aan Activiteit, zoals vereist door de process mining-tool.
Controleer en upload de data: Voer de validatiecontroles hieronder uit om de nauwkeurigheid van de data te bevestigen. Exporteer het eindresultaat na controle als CSV- of Parquet-bestand en upload het naar ProcessMind.
Configuratie
- Entiteiten selecteren: Gebruik VendorInvoiceHeaderEntity en VendorInvoiceLineEntity voor processtappen vóór het boeken. Gebruik VendorInvoiceJournalHeaderEntity voor het officiële, geboekte document. Gebruik VendorPaymentJournalLineEntity om betalingen te volgen.
- Incremental Push: Schakel deze instelling in het Data Management-project in om na de eerste volledige export alleen nieuwe of gewijzigde records op te halen. Dit is belangrijk voor de prestaties.
- Datumbereiken: Filter op InvoiceDate >= [Start Date]. Voorkom exports zonder einddatum, want die kunnen een time-out veroorzaken.
- Bedrijfsfilter: D365 is een systeem met meerdere entiteiten. Filter altijd op DataAreaId om data van verschillende juridische entiteiten gescheiden te houden, tenzij je juist een analyse over meerdere bedrijven wilt uitvoeren.
- Workflowgeschiedenis: Standaardentiteiten voor workflowgeschiedenis kunnen veel data bevatten. Exporteer alleen geschiedenis voor typen VendInvoice om het volume beheersbaar te houden.
Voorbeeldquery sql
/*
SQL Transformation Script for D365 Finance AP Process
Assumes data is loaded into Staging tables in a SQL environment (BYOD/Data Lake)
*/
SELECT
I.InvoiceNumber AS [InvoiceNumber],
'Invoice Created' AS [Activity],
I.CreatedDateTime AS [EventTime],
I.DataAreaId AS [CompanyCode],
I.InvoiceAccount AS [VendorAccount],
I.InvoiceAmount AS [InvoiceAmount],
I.CurrencyCode AS [Currency],
'D365 FO' AS [SourceSystem],
GETDATE() AS [LastDataUpdate]
FROM Staging_VendorInvoiceHeaderEntity I
UNION ALL
/* Capture updates to invoice headers */
SELECT
I.InvoiceNumber,
'Invoice Updated',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.ModifiedDateTime > I.CreatedDateTime
UNION ALL
/* Invoice Matching Activities */
SELECT
I.InvoiceNumber,
'Invoice Matched to PO',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Matched' -- Adjust value based on system config
UNION ALL
SELECT
I.InvoiceNumber,
'Invoice Match Failed',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Failed'
UNION ALL
/* Workflow Activities */
SELECT
RelatedContext AS InvoiceNumber,
CASE
WHEN Status = 'Submitted' THEN 'Invoice Submitted for Approval'
WHEN Status = 'Approved' THEN 'Invoice Approved'
ELSE 'Workflow Activity'
END AS [Activity],
CreatedDateTime AS [EventTime],
DataAreaId,
NULL AS [VendorAccount],
NULL AS [InvoiceAmount],
NULL AS [Currency],
'D365 FO',
GETDATE()
FROM Staging_WorkflowHistoryEntity
WHERE ContextTableId = 12345 -- Replace with TableId for VendInvoiceInfoTable
AND Status IN ('Submitted', 'Approved')
UNION ALL
/* Invoice Posted */
SELECT
J.InvoiceNumber,
'Invoice Posted',
J.PostedDateTime,
J.DataAreaId,
J.InvoiceAccount,
J.InvoiceAmount,
J.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity J
UNION ALL
/* Payment Block */
SELECT
I.InvoiceNumber,
'Payment Block Applied',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity I
WHERE I.OnHold = 'Yes'
UNION ALL
/* Payment Activities */
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Created' AS [Activity],
P.CreatedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue AS [VendorAccount],
P.DebitAmount AS [InvoiceAmount],
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Approved' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Approved'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Generated' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Sent'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Posted' AS [Activity],
P.PostedDate AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.IsPosted = 'Yes' Stappen
Controleer de BYOD-verbinding: Zorg dat SQL Server Management Studio (SSMS) of een vergelijkbaar programma is geïnstalleerd en dat je verbinding kunt maken met de Azure SQL Database die is ingesteld als Bring Your Own Database (BYOD)-doel voor je Dynamics 365 Finance & Operations-omgeving.
Controleer de export van entiteiten: Ga in Dynamics 365 naar de werkruimte Data Management. Controleer of de volgende entiteiten (of de onderliggende tabellen) zijn ingesteld voor export naar de BYOD-database:
VendInvoiceInfoTable(openstaande facturen),VendInvoiceInfoLine(openstaande factuurregels),VendInvoiceJour(geboekte facturen),VendTrans(leverancierstransacties),LedgerJournalTrans(journaalregels),LedgerJournalTable(journaalkoppen) enWorkflowTrackingStatusTable(workflowgeschiedenis).Stel de exportjob in: Maak een nieuwe exportjob aan als deze tabellen nog niet worden geëxporteerd. Stel Target Data Format in op je BYOD SQL-database. Kies Incremental Push om de data actueel te houden zonder telkens alles opnieuw te exporteren. Voer de job uit om de tabellen te vullen.
Bereid de SQL-omgeving voor: Open SSMS en maak verbinding met de BYOD Azure SQL-database. Open een nieuw queryvenster.
Stel de parameters in: Zoek bovenaan het meegeleverde script naar de variabelen. Pas
@StartDateen@EndDateaan de gewenste analyseperiode aan. Wil je op een specifieke juridische entiteit filteren, pas dan de filtervoorwaarden voorDATAAREAIDaan.Voer het script uit: Voer het volledige T-SQL-script uit. Met
UNION ALLvoegt het data uit meerdere tabellen samen tot één gestandaardiseerd event log.Controleer de data: Controleer of de kolommen
InvoiceNumberenEventTimegeen lege waarden bevatten. Ga na of zowel geboekte facturen uitVendInvoiceJourals openstaande facturen uitVendInvoiceInfoTableworden weergegeven.Exporteer het resultaat: Klik met de rechtermuisknop op het resultatengrid in SSMS en kies Save Results As.... Sla het bestand op als CSV (Comma Delimited).
Maak het bestand klaar voor upload: Open de CSV in Excel of een teksteditor en controleer of de datums, indien vereist door ProcessMind, de ISO 8601-indeling hebben (YYYY-MM-DD HH:MM:SS). Als het script goed is uitgevoerd, zijn verdere bewerkingen niet nodig.
Upload naar ProcessMind: Importeer de CSV in ProcessMind en koppel de kolommen
InvoiceNumberaan Case-ID,Activityaan Activiteit enEventTimeaan Timestamp.
Configuratie
- Exportstrategie: Gebruik Incremental Push voor tabellen met veel data, zoals
LedgerJournalTransenVendTrans, om de belasting van BYOD te beperken. Gebruik Full Push alleen als je vermoedt dat de data niet consistent is. - Tijdzone: Dynamics 365 slaat data op in UTC. Het script gaat uit van UTC. Is lokale tijd nodig voor je analyse, pas dan
DATEADDtoe in het script of tijdens het importeren in ProcessMind. - Filteren op bedrijf: De kolom
DataAreaIdstaat voor de juridische entiteit. Standaard haalt het script data van alle entiteiten op. VoegWHERE DataAreaId = 'usmf'toe om op een specifieke dochteronderneming te filteren. - Workflowgeschiedenis: De tabel
WorkflowTrackingStatusTableis belangrijk voor tijdstempels van goedkeuringen. Zorg dat deze tabel in de BYOD-export is opgenomen, want standaard wordt die vaak overgeslagen. - Dataretentie: Houd rekening met opschoonroutines in D365 die voltooide workflowgeschiedenis of geboekte journaalregels kunnen verwijderen. Daardoor kan de periode waarover je process mining uitvoert korter worden.
Voorbeeldquery sql
/* T-SQL Extraction Script for D365 AP Payment Processing */
/* Tables required: VendInvoiceInfoTable, VendInvoiceInfoLine, VendInvoiceJour, VendTrans, LedgerJournalTrans, LedgerJournalTable, WorkflowTrackingStatusTable */
DECLARE @StartDate DATETIME = '2023-01-01 00:00:00';
DECLARE @EndDate DATETIME = GETDATE();
WITH RawData AS (
/* 1. Invoice Created: Pending Invoice Header Creation */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Created' AS Activity,
T1.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.CreatedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 2. Invoice Updated: Modifications to Pending Invoice */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Updated' AS Activity,
T1.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.ModifiedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.ModifiedDateTime BETWEEN @StartDate AND @EndDate
AND T1.ModifiedDateTime > T1.CreatedDateTime
UNION ALL
/* 3. Invoice Matched to PO: Line Matching Success */
SELECT
H.Num AS InvoiceNumber,
'Invoice Matched to PO' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 1 /* 1 usually denotes Matched/Passed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 4. Invoice Match Failed: Line Matching Discrepancy */
SELECT
H.Num AS InvoiceNumber,
'Invoice Match Failed' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 2 /* 2 usually denotes Failed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 5. Invoice Submitted for Approval: Workflow Submission */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Submitted for Approval' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 1 /* Submitted */
AND W.ContextTableId = 1425 /* TableId for VendInvoiceInfoTable, adjust if different in version */
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 6. Invoice Approved: Workflow Completion */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Approved' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 2 /* Completed/Approved */
AND W.ContextTableId = 1425
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 7. Invoice Posted: Creation of VendInvoiceJour */
SELECT
J.InvoiceId AS InvoiceNumber,
'Invoice Posted' AS Activity,
J.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
J.CreatedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceJour J
WHERE J.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 8. Payment Block Applied: Updated on VendTrans */
SELECT
J.InvoiceId AS InvoiceNumber,
'Payment Block Applied' AS Activity,
VT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
VT.ModifiedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendTrans VT
JOIN dbo.VendInvoiceJour J ON VT.Invoice = J.InvoiceId AND VT.AccountNum = J.InvoiceAccount AND VT.DataAreaId = J.DataAreaId
WHERE VT.Approved = 0 /* 0 indicates Not Approved/Blocked */
AND VT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 9. Payment Journal Created: Line added to Journal */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Created' AS Activity,
LJT.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.CreatedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.AccountType = 2 /* Vendor */
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 10. Payment Journal Approved: Workflow on Journal Header */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Approved' AS Activity,
LJH.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJH.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTable LJH
JOIN dbo.LedgerJournalTrans LJT ON LJH.JournalNum = LJT.JournalNum AND LJH.DataAreaId = LJT.DataAreaId
WHERE LJH.WorkflowApprovalStatus = 2 /* Approved */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJH.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 11. Payment Generated: Payment Status Changed to Sent */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Generated' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.PaymentStatus = 2 /* Sent/Generated */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 12. Payment Posted: Journal Line Posted */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Posted' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.Posted = 1 /* Posted */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
)
SELECT *
FROM RawData
WHERE InvoiceNumber IS NOT NULL AND InvoiceNumber <> ''
ORDER BY InvoiceNumber, EventTime; Klaar om te beginnen?
Gebruik deze template als basis voor een betrouwbare datafundering en begin vandaag nog met het verbeteren van je betalingsworkflows. Heb je hulp nodig bij het koppelen van specifieke Dynamics 365-tabellen? Ons team denkt met je mee.
Verbeter nu de verwerking van crediteurenbetalingen
Verkort doorlooptijden met 30 procent en voorkom vertragingen in D365.
Geen creditcard nodig. Binnen vijf minuten ingesteld.