← Τεκμηρίωση / Οδηγοί
Εισαγωγές τραπεζικών συναλλαγών και πληρωμών
Δηλώσεις camt.053, Stripe CSV, συμψηφισμός εκκαθαρίσεων PSP και προσαρμοσμένες ροές JSON.
Όλες οι εισαγωγές καταχωρίζονται ως τραπεζικές συναλλαγές σε έναν τραπεζικό λογαριασμό (bank/accounts/create). Οι συναλλαγές διαθέτουν
ένα externalId· η εκ νέου εισαγωγή του ίδιου αρχείου είναι ασφαλής, καθώς οι γραμμές των οποίων ο συνδυασμός (bankAccountId, externalId)
υπάρχει ήδη παραλείπονται και καταγράφονται στον μετρητή skipped. Οι εισαγόμενες συναλλαγές ξεκινούν με κατάσταση new
και καταχωρίζονται στο καθολικό (ledger) μόνο όταν αντιστοιχιστούν (bank/transactions/match, με τη χρήση του bank/transactions/suggest-matches
για υποψηφίους).
Η εφαρμογή ιστού (web app) παρέχει τις ίδιες εισαγωγές στην ενότητα Τράπεζα → Εισαγωγή αρχείου (μεταφόρτωση αρχείου, επιλογέας προτύπου).
Μια εσφαλμένη αντιστοίχιση αναιρείται με την εντολή bank/transactions/unmatch (Αναίρεση αντιστοίχισης στην ενότητα Τράπεζα → Συναλλαγές).
Οι καταχωρισμένες εγγραφές δεν τροποποιούνται ούτε διαγράφονται ποτέ: μια πληρωμή που αντιστοιχίστηκε σε τιμολόγιο, ή μια γραμμή που ένα πρότυπο
εισαγωγής καταχώρισε σε έναν λογαριασμό, λαμβάνει μια αντιλογιστική ημεerολογιακή εγγραφή με κάθε καταχώριση στην αντίθετη πλευρά, με ημερομηνία
date (προεπιλογή: σημερινή, και ποτέ πριν από την αρχική καταχώριση). Το εξοφλημένο ποσό και η κατάσταση πληρωμής του τιμολογίου επιστρέφουν
κατά το ποσό εκείνης της τραπεζικής γραμμής. Μια γραμμή συνδεδεμένη με εκκαθάριση παρόχου πληρωμών (PSP settlement) απλώς αποσυνδέεται, διότι η
καταχώριση εκκαθάρισης ανήκει στην παρτίδα. Η γραμμή επιστρέφει σε κατάσταση new και μπορεί να αντιστοιχιστεί ξανά. Η ημερομηνία αντιλογισμού
πρέπει να εμπίπτει σε ανοιχτή λογιστική περίοδο.
Πρότυπα εισαγωγής
Ένα πρότυπο εισαγωγής ορίζει μια πηγή δεδομένων, απαριθμεί τα πεδία που παρέχει η πηγή και αντιστοιχίζει τα πεδία που μεταφέρουν χρηματικά ποσά
σε λογαριασμούς του καθολικού. Τα πρότυπα διαχειρίζονται στην ενότητα Τράπεζα → Πρότυπα εισαγωγής και μέσω της διαδρομής
bank/import-templates/create|update|delete|get|list.
POST /v1/bank/import-templates/create
{
"name": "Stripe payments export",
"type": "stripe",
"fields": [
{ "name": "id" },
{ "name": "Created date (UTC)" },
{ "name": "Amount" },
{ "name": "Fee", "accountCode": "6800" },
{ "name": "Amount Refunded" }
],
"metaFields": ["order_id"]
}
- Η τιμή
typeείναι μία εκ τωνstripe,iso20022,bank_connectionήrevolut. - Κάθε πεδίο διαθέτει ένα
nameκαι έναν προαιρετικόaccountCode. Μόνο τα πεδία που μεταφέρουν χρηματικά ποσά δέχονται λογαριασμό: τα πεδία StripeAmount,FeeκαιAmount Refunded· το στοιχείο camt.053Ntry/Amt· η τραπεζική ροήtransaction_amount.amount. Ο λογαριασμός πρέπει να υπάρχει στο σχέδιο λογαριασμών (δημιουργήστε τον με την εντολήledger/accounts/create). - Το πεδίο
fieldsμπορεί να παραλειφθεί· σε αυτή την περίπτωση, λαμβάνει ως προεπιλογή την τυπική λίστα πεδίων του τύπου: τα ονόματα στηλών του αρχείου Payments → Export της Stripe (χωρίς τις 19 στήλεςCard …, τις οποίες η φόρμα αφήνει επίσης ανέλεγκτες από προεπιλογή), τα στοιχεία camt.053 που περιέχει κάθε δήλωση (Stmt/Id,Stmt/Acct/Id/IBAN,Stmt/Bal/…,Ntry/Amt,Ntry/CdtDbtInd,Ntry/Sts,Ntry/BookgDt), ή τα χαρακτηριστικά που επιστρέφει μια τραπεζική ροή PSD2 ανά συναλλαγή. Προσθέστε ή αφαιρέστε καταχωρίσεις ώστε να ταιριάζουν με το αρχείο σας: ο εισαγωγέας διαβάζει επίσης τα προαιρετικά στοιχεία camt.053Ntry/ValDt,Ntry/NtryRef,Ntry/AcctSvcrRef,Ntry/AddtlNtryInf,TxDtls/Refs/EndToEndId,TxDtls/Refs/TxId,TxDtls/RltdPties/Dbtr/Nm,TxDtls/RltdPties/DbtrAcct/Id/IBAN,TxDtls/RltdPties/Cdtr/Nm,TxDtls/RltdPties/CdtrAcct/Id/IBAN,TxDtls/RmtInf/UstrdκαιTxDtls/AddtlTxInf. - Ένα πεδίο
Customer Emailτης Stripe μπορεί να φέρει την τιμή"createPartner": true. Στη συνέχεια, η εισαγωγή δημιουργεί έναν πελάτη (συνεργάτη τύπου φυσικού προσώπου, με την ανάλογη σήμανση ως πελάτη) για κάθε διεύθυνση email στο αρχείο για την οποία δεν υπάρχει ήδη συνεργάτης, χρησιμοποιώντας τοCustomer Descriptionως όνομα (ή το email αν αυτό είναι κενό) και τις στήλεςCard Address …ως διεύθυνση εφόσον το αρχείο τις περιέχει. Οι υπάρχοντες συνεργάτες αντιστοιχίζονται βάσει email, χωρίς διάκριση πεζών-κεφαλαίων. Η απάντηση αναφέρει το πλήθος στο πεδίοcustomersCreated. - Το πεδίο
metaFields(μόνο για Stripe) απαριθμεί τα κλειδιά μεταδεδομένων που φέρουν οι χρεώσεις σας. Η Stripe εξάγει κάθε κλειδί ως στήλη<key> (metadata)· η λίστα είναι ελεύθερης μορφής και μπορεί να είναι μεγάλη. - Το πεδίο
invoiceItemId(μόνο για Stripe, προαιρετικό) αντιστοιχεί σε είδος καταλόγου. Όταν ορίζεται, κάθε γραμμή τιμολογίου και πιστωτικού τιμολογίου που δημιουργεί η εισαγωγή παραπέμπει σε αυτό το είδος (την καταχώρισή του και, όταν τοinvoiceVatRatePercentείναι κενό, τον συντελεστή ΦΠΑ του)· το κείμενο της γραμμής εξακολουθεί να προέρχεται από τη χρέωση. - Το πεδίο
companyMetaField(μόνο για Stripe) ορίζει ένα από αυτά τα κλειδιά ως ένδειξη εταιρείας. Όταν μια χρέωση φέρει την τιμήtrue,1,yes,company,businessήb2bσε αυτή τη στήλη, ο πελάτης που δημιουργείται για αυτήν είναι συνεργάτης τύπου εταιρείας αντί για φυσικό πρόσωπο. - Το πεδίο
invoiceMetaField(μόνο για Stripe) ορίζει ένα από αυτά τα κλειδιά, για παράδειγμα έναν αριθμό παραγγελίας, και τοinvoiceVatRatePercentορίζει τον συντελεστή ΦΠΑ για τα τιμολόγια που δημιουργούνται από αυτό. Κατά την εισαγωγή, κάθε γραμμή χρέωσης και επιστροφής χρημάτων ομαδοποιείται βάσει της τιμής αυτού του κλειδιού:- μια τιμή που ταιριάζει με ένα υπάρχον τιμολόγιο πώλησης - μια παραγγελία πώλησης της οποίας το
externalRefείναι αυτή η τιμή (ecommerce/orders/create, οποιοδήποτε κανάλι) ή ένα τιμολόγιο του οποίου τοfullNumberείναι αυτή η τιμή - συνδέει την ομάδα με αυτό το τιμολόγιο· - μια τιμή χωρίς αντίστοιχo τιμολόγιο δημιουργεί ένα νέο: συνεργάτης από το
Customer Email(δημιουργείται αν λείπει, όπως και για τοcreatePartner), μία γραμμή ανά χρέωση (Checkout Line Item SummaryήDescriptionως κείμενο, το ποσό χρέωσης ως τιμή με ΦΠΑ στοinvoiceVatRatePercent), ημερομηνία έκδοσης = η ημερομηνία της πρώτης χρέωσης, φορολογική μεταχείριση ΦΠΑ από την εταιρεία και τη χώρα της κάρτας. Το τιμολόγιο εκδίδεται και καταχωρίζεται αμέσως, και καταγράφεται μια παραγγελία πώλησης με κανάλιstripeκαι αυτή την τιμή ωςexternalRef, ώστε οι επόμενες εισαγωγές να πραγματοποιούν σύνδεση αντί για δημιουργία· - κάθε χρέωση στην ομάδα αντιστοιχίζεται στη συνέχεια στο τιμολόγιο ως πληρωμή (καταχωρίζοντας την είσπραξη)· κάθε επιστροφή χρημάτων δημιουργεί
ένα εκδοθέν πιστωτικό τιμολόγιο έναντι του τιμολογίου για το επιστραφέν ποσό και αντιστοιχίζει την επιστροφή σε αυτό.
Τα πλήθη επιστρέφονται ως
invoicesCreated,invoicesLinked,creditNotesCreatedκαιpaymentsMatched· οι ομάδες που δεν μπόρεσαν να υπολογιστούν (χωρίς email πελάτη, μεικτά νομίσματα, συνδεδεμένο τιμολόγιο που εξακολουθεί να είναι πρόχειρο ή έχει ήδη εξοφληθεί πλήρως) παρατίθενται στο πεδίοwarningsκαι παραμένουν ως τραπεζικές συναλλαγές σε κατάστασηnew. Μην αντιστοιχίζετε επίσης το πεδίοAmountσε λογαριασμό καθολικού στο ίδιο πρότυπο: μια χρέωση που αντιστοιχίζεται σε τιμολόγιο δεν καταχωρίζεται δεύτερη φορά, αλλά μια μη αντιστοιχισμένη θα καταχωριζόταν.
- μια τιμή που ταιριάζει με ένα υπάρχον τιμολόγιο πώλησης - μια παραγγελία πώλησης της οποίας το
- Τα ονόματα των προτύπων είναι μοναδικά ανά εταιρεία.
- Τα πρότυπα camt.053 και τραπεζικών συνδέσεων φέρουν τις ίδιες επιλογές, οι οποίες διαβάζονται από τη δήλωση αντί από τις στήλες της Stripe:
- Δημιουργία ελλειπόντων συνεργατών: Η επιλογή
createPartnerστη γραμμή ονόματος οφειλέτη (TxDtls/RltdPties/Dbtr/Nm, ροήdebtor.name) δημιουργεί έναν πελάτη για κάθε άγνωστο πληρωτή εισερχόμενων χρημάτων· στη γραμμή ονόματος δικαιούχου (TxDtls/RltdPties/Cdtr/Nm, ροήcreditor.name) δημιουργεί έναν προμηθευτή για κάθε άγνωστο δικαιούχο εξερχόμενων χρημάτων. Οι συνεργάτες αναγνωρίζονται βάσει IBAN (αποθηκευμένου στοpartner_bank_accounts) και στη συνέχεια βάσει ακριβούς ονόματος· ένας νέος συνεργάτης θεωρείται εταιρεία όταν το όνομα φέρει νομική μορφή (UAB, MB, SIA, GmbH, Ltd, …), διαφορετικά θεωρείται φυσικό πρόσωπο. Το πλήθος επιστρέφεται ωςcustomersCreated(εισαγωγή αρχείου) ήpartnersCreated(συγχρονισμός ροής). - Σύνδεση τιμολογίων βάσει αναφοράς: Η επιλογή
invoiceMetaFieldορισμένη σε γραμμή αιτιολογίας ή αναφοράς (TxDtls/RmtInf/Ustrd,TxDtls/RmtInf/Strd/CdtrRefInf/Ref,TxDtls/Refs/EndToEndId· ροήremittance_information,reference_number) αντιστοιχίζει κάθε νέα τραπεζική γραμμή της οποίας η αναφορά, η αιτιολογία ή η περιγραφή περιέχει τον αριθμό ενός ανοιχτού εκδοθέντος τιμολογίου πώλησης (εισερχόμενα χρήματα) ή καταχωρισμένου τιμολογίου αγοράς (εξερχόμενα χρήματα), και καταχωρίζει την πληρωμή. Όταν το IBAN του πληρωτή είναι αποθηκευμένο σε συνεργάτη, ή το όνομα του πληρωτή ισούται με το όνομα ή τον κωδικό ενός συνεργάτη, το τιμολόγιο πρέπει να ανήκει σε αυτόν τον συνεργάτη. Μια πληρωμή από άγνωστο πληρωτή συνδέεται μόνο όταν ισούται με το υπόλοιπο του τιμολογίου και ο αριθμός του τιμολογίου φέρει το πρόθεμα της σειράς του, ώστε ένας σκέτος αριθμός, όπως ένα ποσό, να μην εκλαμβάνεται ποτέ ως αναφορά. Μια πληρωμή μεγαλύτερη από το υπόλοιπο δεν συνδέεται ποτέ. Οι γραμμές που αποτυγχάνουν σε these ελέγχους παραμένουν νέες για μη αυτόματη αντιστοιχία και παρατίθενται στις προειδοποιήσεις. Με την επιλογήadvanceInvoices: true, μια μη αντιστοιχισμένη εισερχόμενη πληρωμή από γνωστό συνεργάτη δημιουργεί ένα εκδοθέν προκαταβολικό τιμολόγιο (τύποςadvance) για το ποσό με τον συντελεστή τουinvoiceVatRatePercentή τουinvoiceItemIdκαι αντιστοιχίζει την πληρωμή σε αυτό· ο συνεργάτης πρέπει να είναι γνωστός, γι' αυτό επιλέξτε επίσης τη γραμμή οφειλέτη. - Κανόνες καταχώρισης ανά κωδικό συναλλαγής: εκτός από τα
Ntry/Amt/transaction_amount.amount, η λίστα πεδίων διαθέτει γραμμές κανόνωνNtry/BkTxCd=CHRG,=INTR,=TAXE,Ntry/CdtDbtInd=DBIT,=CRDT(ροή:bank_transaction_code=…,credit_debit_indicator=…). Μια γραμμή καταχωρίζεται στον λογαριασμό του πρώτου κανόνα με τον οποίο ταιριάζει: η οικογένεια κωδικών τραπεζικής συναλλαγής, ακολουθούμενη από την κατεύθυνση και τέλος τη βασική γραμμή ποσού. Οι γραμμές κανόνων δεν ελέγχονται έναντι του αρχείου. - Συνεργάτης τραπεζικών εξόδων: Η επιλογή
createPartnerστη γραμμή κανόνα…=CHRGδημιουργεί έναν προμηθευτή με όνομα προερχόμενο από την τράπεζα (δήλωσηStmt/Acct/Svcr/FinInstnId/Nm, ή την τράπεζα της σύνδεσης, ή το όνομα του τραπεζικού λογαριασμού καθολικού) και χρεώνει κάθε επιβάρυνση στον εν λόγω συνεργάτη. - Τα πρότυπα τραπεζικών συνδέσεων επιλέγονται ανά λογαριασμό ροής με την εντολή
bank/feeds/accounts/configure(Τράπεζα → Συνδέσεις στην εφαρμογή), η οποία ορίζει επίσης το πρόγραμμα συγχρονισμούsyncSchedule(manual,daily,weekly,monthly): το API συγχρονίζει αυτόματα τους λογαριασμούς με πρόγραμμα μόλις παρέλθει η περίοδός τους. Τα πρότυπα εφαρμόζονται σε κάθεbank/feeds/sync· η απάντηση του συγχρονισμού αναφέρει στη συνέχεια επίσης τα πεδίαposted,partnersCreated,invoicesLinked,invoicesCreated,paymentsMatchedκαιwarnings.
- Δημιουργία ελλειπόντων συνεργατών: Η επιλογή
Προωθήστε το templateId στο bank/statements/import αντί για το format: ο τύπος του προτύπου επιλέγει τον αναλυτή (parser), και το αρχείο
πρέπει να περιέχει κάθε πεδίο που απαριθμείται στο πρότυπο - ένα αρχείο στο οποίο λείπει κάποιο από αυτά απορρίπτεται με κωδικό HTTP 422 και τα
ονόματα των στηλών ή στοιχείων που λείπουν. Τα πεδία μεταδεδομένων δεν απαιτείται να υπάρχουν. Τα πρότυπα τραπεζικών συνδέσεων περιγράφουν
μια ζωντανή ροή PSD2 και δεν μπορούν να χρησιμοποιηθούν για εισαγωγή αρχείου.
Ένα πρότυπο ISO 20022 διαβάζει επίσης αρχεία MT940: ένα αρχείο που ξεκινά με {1: ή :20: (ή αποστέλλεται με "format": "mt940") αναλύεται
ως MT940 και οι κανόνες αντιστοίχισης αναφορών και καταχώρισης του προτύπου εφαρμόζονται στις γραμμές του. Ο έλεγχος στοιχείων παραλείπεται για
το MT940, και οι κανόνες Ntry/BkTxCd=… δεν εφαρμόζονται ποτέ σε γραμμές MT940 διότι το MT940 δεν φέρει κωδικό τραπεζικής συναλλαγής ISO 20022·
χρησιμοποιήστε αντί αυτών τους κανόνες Ntry/CdtDbtInd=….
Ένας τραπεζικός λογαριασμός διατηρεί ένα νόμισμα. Μια δήλωση σε άλλο νόμισμα απορρίπτεται με HTTP 422 (σε ένα αρχείο camt.053 με δηλώσεις σε
διάφορα νομίσματα για το ίδιο IBAN, εισάγεται μόνο η δήλωση στο νόμισμα του λογαριασμού), το ίδιο ισχύει και για μια γραμμή που αποστέλλεται
στο bank/transactions/import με currency διαφορετικό από αυτό του λογαριασμού.
Κάθε κίνηση που προέρχεται από πεδίο το οποίο διαθέτει accountCode καταχωρίζεται κατά τον χρόνο εισαγωγής ως μία ημερολογιακή εγγραφή:
τα εισερχόμενα χρήματα χρεώνουν τον λογαριασμό καθολικού του τραπεζικού λογαριασμού και πιστώνουν τον αντιστοιχισμένο λογαριασμό· τα εξερχόμενα
χρήματα χρεώνουν τον αντιστοιχισμένο λογαριασμό και πιστώνουν τον λογαριασμό καθολικού του τραπεζικού λογαριασμού. Τα ποσά μετατρέπονται στο βασικό
νόμισμα με την ισοτιμία της ημερομηνίας της κίνησης. Η τραπεζική συναλλαγή matched στη συνέχεια σε εκείνη την ημερολογιακή εγγραφή
(matchedDocumentType = journal_transaction) και δεν προτείνεται πλέον για αντιστοίχιση τιμολογίου. Η απάντηση αναφέρει το πλήθος στο πεδίο posted.
Οι κινήσεις από μη αντιστοιχισμένα πεδία παραμένουν ως new και αντιστοιχίζονται σε τιμολόγια όπως πριν - για παράδειγμα, αντιστοιχίστε το πεδίο
Fee στον λογαριασμό εξόδων προμήθειας PSP και αφήστε το Amount αντιστοιχίαστο ώστε οι χρεώσεις να εξακολουθούν να αντιστοιχίζονται σε τιμολόγια πώλησης.
POST /v1/bank/statements/import
{
"bankAccountId": "…",
"templateId": "…",
"content": "id,Created date (UTC),Amount,…"
}
ISO 20022 camt.053 (XML ανοιχτής τραπεζικής)
Οι λιθουανικές τράπεζες (Swedbank, SEB, Luminor, Šiaulių bankas, …) σάς επιτρέπουν να κατεβάζετε κινήσεις λογαριασμών ως XML τύπου ISO 20022 camt.053 από την υπηρεσία e-banking τους - συνήθως στην ενότητα εξαγωγής/λήψης κινήσεων, με μορφή "ISO XML" ή "camt.053". Η ίδια μορφή επιστρέφεται από τα API πληροφοριών λογαριασμού PSD2.
POST /v1/bank/statements/import
{
"bankAccountId": "…",
"format": "camt053",
"content": "<?xml version=\"1.0\"…>…"
}
- Ένα αρχείο μπορεί να περιέχει πολλές δηλώσεις· το IBAN κάθε δήλωσης πρέπει να ταιριάζει με το IBAN του τραπεζικού λογαριασμού (οι δηλώσεις χωρίς IBAN, ή οι λογαριασμοί χωρίς IBAN, γίνονται δεκτοί ως έχουν).
- Οι αναφορές εγγραφών (
AcctSvcrRef/NtryRef, με εναλλακτική λύση ένα hash περιεχομένου) γίνονταιexternalId. - Η απάντηση επιστρέφει μεταδεδομένα ανά δήληση: αναγνωριστικό δήλωσης, περίοδος, υπόλοιπα έναρξης/λήξης, πλήθος συναλλαγών.
- Το όνομα του αντισυμβαλλομένου, το IBAN και ο σκοπός πληρωμής εξαγρόνται ανά εγγραφή για σκοπούς αντιστοίχισης.
Οι πληρωμές προς την αντίθετη κατεύθυνση εξάγονται ως pain.001 μέσω της διαδρομής bank/payments/export.
Revolut Business CSV
Κατεβάστε τη δήλωση συναλλαγών ενός λογαριασμού Revolut Business ως CSV και εισαγάγετε την χρησιμοποιώντας το ενσωματωμένο πρότυπο
Revolut Business (templateId: "builtin-revolut"). Κάθε εταιρεία διαθέτει αυτό το πρότυπο χωρίς να χρειάζεται να το δημιουργήσει:
η διαδρομή bank/import-templates/list-builtin το παραθέτει, η bank/import-templates/get το επιστρέφει, ενώ οι bank/import-templates/update
και bank/import-templates/delete το απορρίπτουν με κωδικό HTTP 400. Στην εφαρμογή εμφανίζεται πρώτο στην ενότητα Τράπεζα → Πρότυπα εισαγωγής·
το άνοιγμά του εμφανίζει τις ρυθμίσεις του, και η αποθήκευση δημιουργεί ένα δικό σας εταιρικό πρότυπο το οποίο μπορείτε να τροποποιήσετε.
POST /v1/bank/statements/import
{
"bankAccountId": "…",
"templateId": "builtin-revolut",
"content": "Date started (UTC),Date completed (UTC),ID,Type,State,…"
}
- Εισάγονται μόνο οι γραμμές με
State=COMPLETED. Άλλες γραμμές (για παράδειγμαPENDING) εξαιρούνται και καταμετρώνται στο πεδίοwarnings· εισάγονται με επόμενη εισαγωγή αρχείου στο οποίο έχουν ολοκληρωθεί. - Κάθε γραμμή γίνεται τραπεζική συναλλαγή με ημερομηνία από το πεδίο
Date completed (UTC), ποσό από τοTotal amount, νόμισμα από τοPayment currency, τοIDωςexternalIdκαι τηνDescriptionως περιγραφή. - Ο αντισυμβαλλόμενος για τα εξερχόμενα χρήματα είναι τα πεδία
Beneficiary nameκαιBeneficiary IBAN· για πληρωμή με κάρτα χωρίς δικαιούχο, ο έμπορος στο πεδίοDescription. Ο αντισυμβαλλόμενος για τα εισερχόμενα χρήματα είναι τα πεδίαSender nameκαιSender account. - Οι γραμμές ομαδοποιούνται ανά λογαριασμό και νόμισμα. Το πεδίο
International account numberπρέπει να ταιριάζει με το IBAN του τραπεζικού λογαριασμού και εισάγονται μόνο οι γραμμές στο νόμισμα του τραπεζικού λογαριασμού. - Για κάθε γραμμή, ο εισαγωγέας ελέγχει ότι το υπόλοιπο της προηγούμενης γραμμής συν το
Total amountισούται με τοBalance, και καταγράφει στις προειδοποιήσεις (warnings) όσες γραμμές δεν ικανοποιούν αυτή τη συνθήκη. - Το αρχείο πρέπει να περιέχει τις στήλες
Date completed (UTC),ID,Type,State,Description,Payment currency,Total amount,Reference,Sender nameκαιBeneficiary name.
Σε κάθε εισαγωγή, το ενσωματωμένο πρότυπο:
δημιουργεί έναν πελάτη για κάθε άγνωστο αποστολέα εισερχόμενων χρημάτων και έναν προμηθευτή για κάθε άγνωστο δικαιούχο ή έμπορο κάρτας εξερχόμενων χρημάτων, όπως περιγράφεται παραπάνω στην ενότητα Δημιουργία ελλειπόντων συνεργατών·
αντιστοιχίζει κάθε γραμμή της οποίας η
Referenceή ηDescriptionπεριέχει τον αριθμό ανοιχτού τιμολογίου πώλησης ή αγοράς, και καταχωρίζει την πληρωμή, εφαρμόζοντας τους ελέγχους της ενότητας Σύνδεση τιμολογίων βάσει αναφοράς παραπάνω·καταχωρίζει τις γραμμές που δεν αντιστοιχίστηκαν σε τιμολόγιο βάσει του
Typeτους, στον λογαριασμό ενός κανόνα καταχώρισης:TypeΚανόνας καταχώρισης Προεπιλεγμένος λογαριασμός Ρουμανικό σχέδιο λογαριασμών Καταχώριση FEEbank.fees6800 627 χρέωση του λογαριασμού του κανόνα, πίστωση του λογαριασμού καθολικού του τραπεζικού λογαριασμού· συνεργάτης: προμηθευτής με όνομα αντίστοιχο του τραπεζικού λογαριασμού CARD_PAYMENTbank.cardPayments6209 628 χρέωση του λογαριασμού του κανόνα, πίστωση του λογαριασμού καθολικού του τραπεζικού λογαριασμού, χωρίς ΦΠΑ TOPUPbank.topUps3010 1012 χρέωση του λογαριασμού καθολικού του τραπεζικού λογαριασμού, πίστωση του λογαριασμού του κανόνα Γραμμές άλλων τύπων, όπως
TRANSFER, παραμένουν ωςnewγια αντιστοίχιση.
Τροποποιήστε τους λογαριασμούς με την εντολή ledger/posting-rules/update· το ενσωματωμένο πρότυπο χρησιμοποιεί τους νέους λογαριασμούς από την
επόμενη εισαγωγή. Ένας κανόνας καταχώρισης δεν μπορεί να απενεργοποιηθεί: για να εισαγάγετε πληρωμές με κάρτα ή ανανεώσεις υπολοίπου (top-ups)
χωρίς να τις καταχωρίσετε, δημιουργήστε ένα εταιρικό πρότυπο τύπου revolut χωρίς τις γραμμές Type=CARD_PAYMENT ή Type=TOPUP και πραγματοποιήστε
την εισαγωγή με αυτό. Μια πληρωμή με κάρτα που καταχωρίζεται με αυτόν τον τρόπο δεν αντιστοιχίζεται στο τιμολόγιο του προμηθευτή όταν αυτό το τιμολόγιο
καταχωριστεί αργότερα· καταχωρίστε το ένα από τα δύο, όχι και τα δύο.
Ένα εταιρικό πρότυπο τύπου revolut χρησιμοποιεί τις ίδιες στήλες και μπορεί να καταχωρίζει γραμμές ανά τύπο με τις γραμμές κανόνων Type=FEE,
Type=CARD_PAYMENT, Type=TRANSFER και Type=TOPUP. Η εισαγωγή με "format": "revolut-csv" χωρίς πρότυπο εισάγει τις γραμμές χωρίς
κανένα από αυτά τα βήματα.
Stripe CSV
Εξαγωγή από τον πίνακα ελέγχου (dashboard) της Stripe - και οι δύο αναφορές είναι κατάλληλες:
- Reports → Balance → Itemized balance change from activity (προτείνεται): στήλες
balance_transaction_id, created_utc, currency, gross, fee, net, reporting_category, description. - Payments → Export: στήλες
id, Created (UTC), Amount, Fee, Currency, Description, Customer Description.
POST /v1/bank/statements/import
{
"bankAccountId": "…",
"format": "stripe-csv",
"content": "balance_transaction_id,created_utc,currency,gross,fee,net,…"
}
Δημιουργήστε έναν αποκλειστικό τραπεζικό λογαριασμό για τη Stripe (π.χ. όνομα "Stripe", λογαριασμός Γενικού Λογιστηρίου 2710 ή δικός του υπολογαριασμός)
- το υπόλοιπο της Stripe συμπεριφέρεται σαν τραπεζικός λογαριασμός: οι χρεώσεις εισρέουν, τα τέλη αφαιρούνται, οι αποδόσεις (payouts) μεταφέρουν το υπόλοιπο στον πραγματικό σας τραπεζικό λογαριασμό.
Συμπεριφορά εισαγωγής:
- Κάθε συναλλαγή υπολοίπου γίνεται μία τραπεζική συναλλαγή για το μικτό (gross) ποσό (
externalId= αναγνωριστικό συναλλαγής υπολοίπου). - Μια μη μηδενική προμήθεια (fee) γίνεται δεύτερη συναλλαγή με αντίθετο πρόσημο (
externalId=<id>:fee, αντισυμβαλλόμενος "Stripe") - ώστε οι προμήθειες να μπορούν να αντιστοιχιστούν/καταχωριστούν ως έξοδα χωριστά από τα έσοδα. Οι προμήθειες που επιστρέφονται σε επιστροφές χρημάτων εισέρχονται ως θετικά ποσά. - Οι γραμμές απόδοσης (Payout) εισάγονται ως μεμονωμένες αρνητικές συναλλαγές· αντιστοιχίστε τις με την αντίστοιχη εισερχόμενη συναλλαγή στη δήλωση του πραγματικού τραπεζικού σας λογαριασμού.
- Οι γραμμές μηδενικού ποσού παραλείπονται· η ημερομηνία λαμβάνεται από το πεδίο
created_utc(UTC). - Οι γραμμές εξαγωγής πληρωμών που δεν μετακίνησαν χρήματα παραλείπονται:
Captured = false(εγκρίσεις/καθυστερημένες εισπράξεις) καιStatusFailed/Canceled. - Μια μη μηδενική επιστροφή ποσού (Amount Refunded) γίνεται τρίτη, αρνητική συναλλαγή (
externalId=<id>:refund) με ημερομηνίαRefunded date (UTC)- ώστε οι μερικέες και πλήρεις επιστροφές χρημάτων που περιλαμβάνονται στις γραμμές πληρωμών να μην χάνονται.
Συμψηφισμός εκκαθαρίσεων PSP (αναφορές αποδόσεων Stripe)
Για την επιμερισμό μιας συνολικής απόδοσης (lump-sum payout) στις υποκείμενες παραγγελίες, επιστροφές χρημάτων, προμήθειες και αντιλογισμούς χρεώσεων (chargebacks), χρησιμοποιήστε τα τελικά σημεία (endpoints) εκκαθάρισης αντί για την απλή εισαγωγή δήλωσης. Γίνονται αποδεκτές δύο εξαγωγές από τη Stripe (εντοπίζονται αυτόματα):
- Reports → Payouts → Payout reconciliation, itemized (τύποι αναφορών
payout_reconciliation.itemized.*ήpayout_reconciliation.by_id.itemized.*)- ακριβής, μία γραμμή ανά συναλλαγή υπολοίπου· προτιμάται σε ζωντανούς λογαριασμούς (live accounts).
- Payments → Export (unified payments) - εξαγωγή σε επίπεδο χρέωσης· λειτουργεί σε λειτουργία δοκιμής/sandbox όπου η εκκαθάριση αποδόσεων
δεν είναι διαθέσιμη. Οι εισπραχθείσες χρεώσεις ομαδοποιούνται ανά αναγνωριστικό απόδοσης στη στήλη
Transfer· οι μη εισπραχθείσες/αποτυχημένες γραμμές παραλείπονται (skippedNotSettled)· ένα μη μηδενικόAmount Refundedγίνεται συνθετική γραμμή επιστροφής χρημάτων στην παρτίδα απόδοσης της χρέωσης - μια προσέγγιση, δεδομένου ότι η επιστροφή χρημάτων ενδέχεται να εκκαθαρίστηκε σε μεταγενέστερη απόδοση. Οι αναφορές αντιστοίχισης προέρχονται από το αναγνωριστικό χρέωσης, τοPaymentIntent ID, τοInvoice Number, τοClient Reference IDκαι κάθε στήλη… (metadata)(π.χ. αριθμός παραγγελίας στα μεταδεδομένα).
Ένα αρχείο CSV μπορεί να καλύπτει πολλές αποδόσεις. Η Stripe κατεβάζει την αναλυτική αναφορά ένα αρχείο ανά ενότητα (…_charge_…,
…_refund_…, …_fee_…)· εισάγετε τα όλα - οι γραμμές για μια ήδη εισαγόμενη απόδοση συγχωνεύονται στην υπάρχουσα παρτίδα (αναφέρεται στον
μετρητή updated) εφόσον δεν έχει καταχωριστεί ακόμη, και τα σύνολα της παρτίδας επανυπολογίζονται.
POST /v1/bank/settlements/import
{
"bankAccountId": "…",
"provider": "stripe",
"content": "balance_transaction_id,created_utc,…,reporting_category,…,automatic_payout_id,…"
}
- Οι γραμμές ομαδοποιούνται βάσει του
automatic_payout_idσε παρτίδες εκκαθάρισης (settlement batches) - μία παρτίδα ανά απόδοση, με σύνολα μικτού/προμήθειας/καθαρού ποσού (το άθροισμα του πεδίουnetισούται με το ποσό που πιστώνεται στην τράπεζά σας). Η εκ νέου εισαγωγή μιας απόδοσης παραλείπεται (μετρητήςskipped). Οι γραμμές που δεν έχουν αποδοθεί ακόμη σε απόδοση και οι ίδιες οι γραμμέςpayoutπαραλείπονται και καταμετρώνται χωριστά. - Κάθε γραμμή χρέωσης, επιστροφής χρημάτων ή αμφισβήτησης αντιστοιχίζεται αυτόματα σε τιμολόγιο πώλησης χρησιμοποιώντας, με τη σειρά:
το
externalRefμιας παραγγελίας ηλεκτρονικού εμπορίου (οποιαδήποτε τιμή από τα πεδίαorder_id,payment_intent_id,source_id,charge_idή οποιαδήποτε στήλη*_metadata[...]), έναν αριθμό τιμολογίουfullNumberπου εμφανίζεται σε αυτές τις στήλες, και - για επιστροφές χρημάτων και αντιλογισμούς - τοcharge_idπροηγουμένως αντιστοιχισμένης χρέωσης (από το ίδιο αρχείο ή προηγούμενες εισαγωγές). - Ελέγξτε με τις εντολές
bank/settlements/list/bank/settlements/get· διορθώστε τα εκκρεμή υπόλοιπα με την εντολήbank/settlements/match { lineId, invoiceId }(ήinvoiceId: nullγια αναίρεση αντιστοίχισης).
Η εντολή POST /v1/bank/settlements/post { id, date?, commissionPercent? } καταχωρίζει ολόκληρη την παρτίδα ως μία ισοσκελισμένη
ημερολογιακή εγγραφή και εξοφλεί τα αντιστοιχισμένα τιμολόγια (paidAmount/paymentStatus, webhooks sale_invoice.paid):
- Χρέωση του λογαριασμού Γενικού Λογιστηρίου της τράπεζας για την καθαρή απόδοση· χρέωση των προμηθειών PSP (
settlements.fees, προεπιλογή 6800) για τα παρακρατηθέντα τέλη και τις γραμμές τελών. - Πίστωση των απαιτήσεων πελατών ανά αντιστοιχισμένη χρέωση· οι επιστροφές χρημάτων και οι αντιλογισμοί αντιστρέφουν αυτή την κίνηση. Η εφαρμογή περιορίζεται στο υπόλοιπο κάθε τιμολογίου - τυχόν πλεόνασμα καταλήγει στον λογαριασμό μεταβατικών λογαριασμών (suspense account) με προειδοποίηση.
- Μη αντιστοιχισμένες χρεώσεις: με ορισμένο το
commissionPercent, επιμερίζονται σε έσοδα προμηθειών (settlements.commissionRevenue, προεπιλογή 5001) και υποχρέωση προς πωλητή (settlements.sellerPayable, προεπιλογή 4499) - η ροή της αγοράς (marketplace) όπου τα εισπραχθέντα χρήματα ανήκουν κυρίως σε πωλητές. Χωρίς αυτό, σταθμεύουν στον λογαριασμόsettlements.suspense(προεπιλογή 4440, ληφθείσες προκαταβολές). - Οι γραμμές
platform_earning(τέλη εφαρμογής Stripe Connect) καταχωρίζονται στα έσοδα προμηθειών· οι γραμμέςtransfer(αποδόσεις προς συνδεδεμένους πωλητές) μειώνουν την υποχρέωση προς τον πωλητή. - Και οι τέσσερις λογαριασμοί μπορούν να παρακαμφθούν ανά εταιρεία μέσω κανόνων καταχώρισης (
ledger/posting-rules). - Μια γραμμή της οποίας η χρέωση, η προμήθεια ή η επιστροφή χρημάτων είχε ήδη εισαχθεί σε άλλο τραπεζικό λογαριασμό από την εξαγωγή πληρωμών
της Stripe (
bank/statements/import) δεν καταχωρίζεται σε τέλη, απαιτήσεις ή μεταβατικούς λογαριασμούς. Αντί αυτού, το καθαρό ποσό (net) πιστώνεται στον λογαριασμό καθολικού αυτού του τραπεζικού λογαριασμού, ώστε ο τραπεζικός λογαριασμός Stripe να εκκαθαρίζεται απόδοση προς απόδοση. Το πεδίοsummary.clearedAmountείναι το συνολικό ποσό που μετακινήθηκε με αυτόν τον τρόπο· μια γραμμή της οποίας το ποσό διαφέρει από αυτό που διατηρεί ο εν λόγω λογαριασμός κατονομάζεται στις προειδοποιήσεις (warnings). Εάν δεν απομένει τίποτα για καταχώριση, η παρτίδα καταχωρίζεται με μηδενικόjournalTransactionId.
Οι εντολές bank/settlements/list και /get επιστρέφουν, ανά παρτίδα, τα πεδία clearedNet, clearingDifference (γραμμές απόδοσης μείον
τα ποσά που διατηρεί ο άλλος τραπεζικός λογαριασμός για αυτές· μηδέν όταν συμφωνούν) και clearingOpenCount (γραμμές με διαφορά ή μη καταχωρισμένη
κίνηση)· η εντολή /get επιστρέφει τα αντίστοιχα ανά γραμμή ως clearingBankAccountId, clearingBooked, clearingDifference και
clearingUnposted. Οι γραμμές επιστροφής χρημάτων μιας χρέωσης συγκρίνονται ομαδικά, διότι η εξαγωγή πληρωμών περιέχει μόνο το συνολικό επιστραφέν
ποσό. Μια εξαγωγή πληρωμών της Stripe που εισάγεται αφού η απόδοσή της έχει ήδη καταχωριστεί παραλείπει τις κινήσεις αυτής της απόδοσης και τις
κατονομάζει στις προειδοποιήσεις (warnings).
Ο ΦΠΑ επί της ίδιας της προμήθειας τιμολογείται χωριστά (εκδώστε τιμολόγιο προμήθειας προς τον πωλητή)· ο επιμερισμός κατανέμει απλώς τα εισπραχθέντα μετρητά.
Αποδόσεις σε άλλο νόμισμα
Το ημερολόγιο συντάσσεται πάντα στο βασικό νόμισμα της εταιρείας, αλλά μια απόδοση σε διαφορετικό νόμισμα καταχωρίζεται αυτόματα - δεν απαιτείται καμία μη αυτόματη καταχώριση:
- Η παρτίδα μετατρέπεται με την ισοτιμία της ημερομηνίας καταχώρισης (
date, με εναλλακτική λύση την ημερομηνία απόδοσης και τέλος τη σημερινή). Η ισοτιμία είναι η δική της ισοτιμία της εταιρείας για αυτό το νόμισμα (reference/exchange-rates/set) εφόσον είναι τουλάχιστον τόσο πρόσφατη όσο η επίσημη, διαφορετικά λαμβάνεται η τελευταία επίσημη ισοτιμία την ή πριν από την εν λόγω ημερομηνία. Αν δεν υπάρχει ισοτιμία την ή πριν από την ημερομηνία, η κλήση αποτυγχάνει με κωδικό 422 και υποδεικνύει τοreference/exchange-rates/sync. - Κάθε λογαριασμός μετατρέπεται με αυτή την ισοτιμία παρτίδας εκτός από τις απαιτήσεις πελατών (accounts receivable), οι οποίες τακτοποιούνται
με την ισοτιμία
fxRateστην οποία εκδόθηκε κάθε τιμολόγιο. Η διαφορά (residual) μεταξύ των δύο ισοτιμιών καταχωρίζεται στους λογαριασμούςbank.fxGain(προεπιλογή 5803) ήbank.fxLoss(προεπιλογή 6803) ως πραγματοποιηθείσα συναλλαγματική διαφορά, ώστε η ημερολογιακή εγγραφή να παραμένει ισοσκελισμένη. - Η απάντηση
summaryεπιστρέφει την ισοτιμίαfxRateπου χρησιμοποιήθηκε και την προκύπτουσα συναλλαγματική διαφοράexchangeDifference, και η παρτίδα διατηρεί την ισοτιμία με την οποία καταχωρίστηκε. Ένα αντιστοιχισμένο τιμολόγιο του οποίου το νόμισμα διαφέρει από το νόμισμα της παρτίδας δεν εξοφλείται: το ποσό του μεταφέρεται στον μεταβατικό λογαριασμό (suspense account) με προειδοποίηση. - Ένα όριο εισαγωγής παραμένει: μια μεμονωμένη απόδοση της οποίας οι γραμμές αναμιγνύουν διάφορα νομίσματα απορρίπτεται με κωδικό 422, όπως και μια εκ νέου εισαγωγή της οποίας το νόμισμα διαφέρει από την παρτίδα που είναι ήδη αποθηκευμένη για αυτή την απόδοση.
Μη αυτόματες / προσαρμοσμενες ροές
Οτιδήποτε άλλο μπορεί να αποσταλεί ως απλό JSON:
POST /v1/bank/transactions/import
{
"bankAccountId": "…",
"transactions": [
{ "date": "2026-07-01", "amount": "-25.00", "currency": "EUR",
"counterpartyName": "…", "description": "…", "externalId": "unique-ref-1" }
]
}
Παρέχετε ένα σταθερό externalId ανά συναλλαγή για να διατηρήσετε την ιδιότητα της επαναληψιμότητας (idempotency) στις εκ νέου εισαγωγές.