Περιεχόμενο
Εισαγωγή

Με τη χρήση του API δίνεται η δυνατότητα σε ERP εφαρμογές να χρησιμοποιούν τις Υπηρεσίες Παροχής Ηλεκτρονικής έκδοσης στοιχείων της ΤΕΣΑΕ και να αυθεντικοποιούν τα παραστατικά τους.

Μπορείτε να κατεβάσετε το Postman collection με όλα τα end-points του service από εδώ.

Επιπλέον εδώ θα βρείτε το collection με παραδείγματα χρήσης των end-points

Live περιβάλλον
Live API URLhttps://e-invoicing-user-api.pegcloud.io
Για κάθε Πελάτη/Χρήστη της υπηρεσίας απαραίτητη προϋπόθεση είναι η σύναψη της σχετικής Σύμβασης και η αγορά πακέτου μονάδων Ηλεκτρονικής Τιμολόγησης. Για να ενεργοποιηθεί η πρόσβαση στην υπηρεσία e-invoicing.pegcloud.io (σύναψη σύμβασης, αρχικές ρυθμίσεις κ.α.), ακολουθήστε τα βήματα της μελέτης [e-invoicing.pegcloud.io: Έναρξη σύμβασης / Αρχικές Ρυθμίσεις].

Dev περιβάλλον
Development API URL: https://e-invoicing-api-dev.pegcloud.io
Με το Development API προσφέρεται ένα δοκιμαστικό περιβάλλον χωρίς να γίνεται ενημέρωση του myDATA. Επικοινωνήστε με το Τεχνικό Τμήμα της ΤΕΣΑΕ για να σας δοθεί πρόσβαση στο δοκιμαστικό περιβάλλον.
Σημείωση: Τα παραδείγματα των request που έχουν δημιουργηθεί για τα endpoint χρησιμοποιούν το Development API.

Οδηγίες Bearer Token - Ταυτοποίηση Χρήστη
Η ταυτοποίηση του Εγγεγραμμένου Χρήστη για τις κλήσεις του API γίνεται με μέσω του Bearer token (ή access token), το οποίο πρέπει να συμπεριλαμβάνεται στο Authorization header των request.
Ως χρήστης του API για να παράξετε το Bearer Token ακολουθείτε μια σειρά από βήματα που διασφαλίζουν την εγκυρότητα του χρήστη που εκτελεί την επικοινωνία με τον Πάροχο. Επιπλέον το access token παραμένει ενεργό για περιορισμένο χρονικό διάστημα - σε περίπτωση που απενεργοποιηθεί μπορεί να χρησιμοποιηθεί ξανά αφού πρώτα γίνει ανανέωση. Παρακάτω παρουσιάζεται συνοπτικά η ροή που θα ακολουθήσετε για την δημιουργία και ανανέωση του access token.

Το Bearer Token είναι ένας μοναδικός κωδικός πρόσβασης που χρησιμοποιείται για την εξασφάλιση της ταυτοποίησης και της ασφάλειας των συναλλαγών. Ο κάθε Εγγεγραμμένος Χρήστης είναι αποκλειστικά υπεύθυνος για την ασφάλεια των Bearer Tokens και την πρόσβαση σε αυτά. Σε περίπτωση απώλειας ή υποψίας διαρροής, ο Εγγεγραμμένος Χρήστης οφείλει να ενημερώσει ΑΜΕΣΑ την ΤΕΣΑΕ. Η ΤΕΣΑΕ διασφαλίζει ότι δεν αποκαλύπτει ή δημοσιοποιεί με κανέναν τρόπο προσωπικά δεδομένα και πληροφορίες των λογαριασμών των Εγγεγραμμένων Χρηστών.

a.Δημιουργία access token

  1. Αρχικά καλείτε το endpoint για τη δημιουργία προσωρινού κωδικού - Παραγωγή προσωρινού κωδικού (init_code)
  2. Στην απάντηση που θα λάβετε περιέχεται ο προσωρινός κωδικός μαζί με ένα url επαλήθευσης. Κάνοντας login στο url επαλήθευσης, με τα στοιχεία σύνδεσης στην υπηρεσία του e-invoicing, ενεργοποιείται ο προσωρινός κωδικός.
  3. Τέλος καλείτε το endpoint για τη δημιουργία των access και refresh tokens - Παραγωγή access και refresh token (API Token)  χρησιμοποιώντας τον ενεργοποιημένο προσωρινό κωδικό.

b.Ανανέωση access token

  1. Καλείτε το endpoint για ανανέωση του token - Ανανέωση API Token χρησιμοποιώντας το refresh token που λήφθηκε μαζί με το access token.

Διαχείριση Tokens μέσω του User Interface
Μέσω του user interface της πλατφόρμας του παρόχου (e-invoicing.pegcloud.io) μπορείτε να διαχειριστείτε τα tokens που έχουν δημιουργηθεί για το λογαριασμό σας - διασφαλίζοντας έτσι την ευελιξία και τον έλεγχο της πρόσβασης στην υπηρεσία. Αφού συνδεθείτε στην πλατφόρμα, με τα προσωπικά σας στοιχεία, μεταβαίνετε στο μενού [Λογαριασμός > API Tokens]. Από εδώ μπορείτε να δημιουργήσετε νέα token ή να διαγράψετε ήδη υπάρχουσες εγγραφές.


Παρακάτω, δίνονται λεπτομέρειες για τα endpoints του API.

Παραγωγή προσωρινού κωδικού (init_code)
URL: "https://e-invoicing-user-api.pegcloud.io/initiate-authorization/"

Το initiate-authorization είναι το πρώτο βήμα στη διαδικασία ταυτοποίησης του Εγγεγραμμένου Χρήστη για τη χρήση του API. Όταν καλείται αυτό το endpoint, δημιουργείται ένας προσωρινός κωδικός (init_code), ο οποίος χρησιμοποιείται για την έναρξη της διαδικασίας επαλήθευσης. Μαζί με τον init_code, επιστρέφεται και ένα URL, όπου ο χρήστης πρέπει να μεταβεί για να ολοκληρώσει την επαλήθευση της ταυτότητάς του.

Κατά την κλήση του initiate-authorization, ο χρήστης μπορεί να ορίσει ένα API Token name, το οποίο θα εμφανίζεται στην λίστα των API Tokens στο user interface, βοηθώντας στην εύκολη αναγνώριση και διαχείριση του token. Επιπλέον, μπορεί να παρέχεται και ένα redirect URL, στο οποίο ο χρήστης θα ανακατευθύνεται αυτόματα σε περίπτωση επιτυχούς επαλήθευσης από το URL της διαδικασίας. Αυτή η λειτουργία διευκολύνει την εμπειρία του χρήστη και εξασφαλίζει μια ομαλή ροή εργασιών.

Αυτή η διαδικασία εξασφαλίζει ότι μόνο εξουσιοδοτημένοι χρήστες μπορούν να αποκτήσουν πρόσβαση στο API, διασφαλίζοντας την ακεραιότητα και την ασφάλεια των συναλλαγών.

Method: GET
REQUEST
{
    "api_token_name": "String: Όνομα Token",
    "redirect_url": "String: Redirect URL"
}
RESPONSE/ HTTP response code: 200
Παραγωγή access και refresh token (API Token)
URL: "https://e-invoicing-user-api.pegcloud.io/get-token/"

Η Παραγωγή access και refresh token (API Token) είναι η διαδικασία μέσω της οποίας ο χρήστης λαμβάνει τα tokens που απαιτούνται για την πρόσβαση στο API. Για να πραγματοποιηθεί αυτή η διαδικασία, ο χρήστης καλεί το endpoint και στο πεδίο init_code, ο χρήστης πρέπει να εισάγει τον προσωρινό κωδικό που λάβει από το initiate-authorization. Εάν ο init_code είναι έγκυρος και έχει επαληθευτεί, το API επιστρέφει ένα JSON αντικείμενο που περιλαμβάνει τα access token και refresh token. Το access token χρησιμοποιείται για την ταυτοποίηση του χρήστη σε όλες τις επόμενες κλήσεις του API, ενώ το refresh token χρησιμεύει για την ανανέωση του access token όταν αυτό λήξει

Method: POST
REQUEST
{
    "init_code": "String(128): Προσωρινός κωδικός"
}
RESPONSE/ HTTP response code: 200
RESPONSE/ HTTP response code: 400
Ανανέωση API Token (refresh-token)
URL: "https://e-invoicing-user-api.pegcloud.io/refresh-token/"

Η Ανανέωση API Token είναι μια διαδικασία που επιτρέπει στον χρήστη να ανανεώσει το access token του όταν αυτό λήξει. Για να πραγματοποιηθεί αυτή η λειτουργία, ο χρήστης καλεί το endpoint, περνώντας το refresh token ως όρισμα. Εάν το refresh token είναι έγκυρο, το API επιστρέφει ένα νέο access token.

Method: POST
REQUEST
{
    "refresh_token": "String(250): Token Ανανέωσης"
}
RESPONSE/ HTTP response code: 200
RESPONSE/ HTTP response code: 400
Αποστολή/Παραλαβή Παραστατικού (invoice-data)
URL: "https://e-invoicing-user-api.pegcloud.io/invoice-data/"
Method: GET
REQUEST

Mπορεί να κληθεί με pnr01 και auth_code. Αν είναι συμπληρωμένο το auth_code, τότε η αναζήτηση γίνεται με αυτό.
Σημείωση: Για τον τρόπο που δομείτε την τιμή για το pnr01 δείτε παρακάτω στο POST.


GET /invoice-data /HTTP/1.1

Authorization: Bearer {{token}}

{
    "auth_code": "String(100): Συμβολοσειρά Αυθεντικοποίησης",
    "prn01": "String(100): External UID",
    "sn": "String(20): Serial Number Τερματικού",
    "app_code": "String(20): App Code"
}
RESPONSE/ HTTP response code: 200
RESPONSE/ HTTP response code: 400
RESPONSE/ HTTP response code: 401
Method: POST
REQUEST
POST /invoice-data /HTTP/1.1

Authorization: Bearer {{token}}
Content-Type: application/json


{
    "transmission_failure": "Νumeric(1,1): Αδυναμία Επικοινωνίας Παρόχου (0: χωρίς αδυναμία επικοινωνίας, 1: με αδυναμία επικοινωνίας, default: 0)",
    "is_vat": "String(20): ΑΦΜ Εκδότη",
    "is_country": "String(3): Χώρα Εκδότη",
    "is_branch": "Νumeric(5): Αρ.Εγκατάστασης Εκδότη",
    "is_name": "String(60): Επωνυμία Εκδότη",
    "is_address": "String(100): Διεύθυνση Εκδότη",
    "is_address_num": "String(5): Αριθμός Διεύθυνσης Εκδότη",
    "is_city": "String(100): Πόλη Εκδότη",
    "is_zip": "String(20): ΤΚ Εκδότη",
    "cp_vat": "String(20): ΑΦΜ Λήπτη",
    "cp_country": "String(3): Χώρα Λήπτη",
    "cp_branch": "Νumeric(5): Αρ. Εγκατάστασης Λήπτη",
    "cp_name": "String(60): Επωνυμία Λήπτη",
    "cp_address": "String(100): Διεύθυνση Λήπτη",
    "cp_city": "String(100): Πόλη Λήπτη",
    "cp_zip": "String(20): ΤΚ Λήπτη",
    "cp_address_num": "String(5): Αριθμός Διεύθυνσης Λήπτη",
    "series": "String(20): Σειρά Παραστατικού",
    "aa": "String(20): Αρ. Παραστατικού",
    "issuedate": "Date(10): Ημερομηνία Έκδοσης",
    "issuetime": "String(8): Ώρα Έκδοσης",
    "invtype": "String(20): Κατηγορία Παραστατικού",
    "vatpaysusp": "Boolean(1): Αναστολή Καταβολής ΦΠΑ",
    "currency": "String(5): Κωδικός Νομίσματος",
    "exchrate": "Νumeric(13,5): Ισοτιμία",
    "correlinv": "String(350): Συσχετιζόμενα Παραστατικά (marks)",
    "slfpricing": "Boolean(1): Αυτοτιμολόγηση",
    "dispdate": "Date(10): Ημερομηνία Έναρξης Αποστολής",
    "disptime": "String(8): Ώρα Έναρξης",
    "vehiclenum": "String(10): Αρ.Οχήματος",
    "mvpurpose": "String(20): Σκοπός Διακίνησης",
    "fuelinvoice": "Boolean(1): Παραστατικό καυσίμων",
    "tnetvalue": "Νumeric(13,5): Σύνολο Καθαρής Αξίας",
    "tvat_am": "Νumeric(13,5): Σύνολο ΦΠΑ",
    "twthhld_am": "Νumeric(13,5): Σύνολο Παρακρατούμενων Φόρων",
    "tfees_am": "Νumeric(15,5): Σύνολο Τελών",
    "tstamp_am": "Νumeric(13,5): Σύνολο Χαρτοσήμου",
    "ttax_am": "Νumeric(13,5): Σύνολο Λοιπών Φόρων",
    "tdeduction": "Νumeric(13,5): Σύνολο Κρατήσεων",
    "tgross_val": "Νumeric(13,5): Συνολική Aξία",
    "p00": "Νumeric(1): Έσοδο/Έξοδο",
    "sn": "String(20): Serial Number Τερματικού",
    "app_code": "String(20): App Code",
    "pnr01*": "String(100): External UID",
    "einv02": [
        {
            "mydt10": "Νumeric(14): Μ.Κ. Παραστατικού",
            "mydt57_p00": "String(20): Χαρακτηρισμός Εσόδου",
            "mydt58_p00": "String(20): Χαρακτηρισμός Εξόδου",
            "mydt61_p00": "String(20): Χαρακτηρισμός Ε3 Εσοδου",
            "mydt62_p00": "String(20): Χαρακτηρισμός Ε3 Εξόδου",
            "mydt62_p01": "String(20): Χαρακτηρισμός Ε3 ΦΠΑ Εξόδου",
            "linenumber": "Νumeric(10): ΑΑ Γραμμής",
            "rectype": "Νumeric(1): Τύπος γραμμής",
            "p104": "Νumeric(1): Έσοδο/Έξοδο (1/2)",
            "quantity": "Νumeric(10,5): Ποσότητα",
            "fuelcode": "Νumeric(5): Κωδικός Καυσίμου",
            "munit": "String(20): Μονάδα Μέτρησης",
            "invdtype": "String(20): Επισήμανση mydt60",
            "netvalue": "Νumeric(10,5): Καθαρή Αξία",
            "vatcat": "String(20): Κατηγορια ΦΠΑ mydt51",
            "vatexcat": "String(20): Κατηγορια Εξαίρεσης ΦΠΑ mydt52",
            "fpavalue": "Νumeric(10,5): Αξία ΦΠΑ",
            "appid": "String(50): Αρ.Δήλωσης",
            "appdate": "Date(10): Ημ/νία Δήλωσης (YYYY-mm-dd)",
            "doy": "String(45): ΔΟΥ Δήλωσης",
            "shipid": "String(100): Στοιχεία Πλοίου",
            "discoption": "Νumeric(1): Δικαίωμα Έκπτωσης",
            "wthhldpcat": "String(20): Κατηγορία Παρακρ.Φόρου mydt53",
            "wthhld_am": "Νumeric(13,5): Ποσό Παρακράτησης Φόρου",
            "stampvalue": "Νumeric(13,5): Αξία Χαρτοσήμου",
            "stamppcat": "String(20): Κατηγορία Συντελεστή Χαρτοσήμου mydt55",
            "feestype": "String(20): Κατηγορία Συντελεστή Τελών mydt56",
            "fees_am": "Νumeric(13,5): Ποσό Τελών",
            "otaxpcat": "String(20): Κατηγορια Λοιπών Φόρων mydt54",
            "otax_am": "Νumeric(13,5): Ποσό Λοιπών Φόρων",
            "deducvalue": "Νumeric(13,5): Αξία Κρατήσεων",
            "comments": "String(350): Σχόλια",
            "taxcat": "String(10): Κατηγορία Φόρου",
            "taxtype": "String(10): Είδος Φόρου",
            "taxamount": "Νumeric(13,2): Ποσό Φόρου",
            "taxunder": "Νumeric(13,2): Υποκείμενη Αξία",
            "p105": "Νumeric(10,2): Ποσότητα Pegasus. Χρησιμοποιείται στην προβολή του παραστατικού.",
            "p106": "Memo: Περιγραφή Pegasus. Χρησιμοποιείται στην προβολή του παραστατικού.",
            "taric": "String(10): Κωδικός Taric",
            "itemcode": "String(50): Κωδικός Είδους",
            "omunit": "Νumeric(10): Πλήθος Μονάδας Μέτρησης Τεμάχια Άλλα",
            "omuntl": "String(150): Τίτλος Μονάδας Μέτρησης Τεμάχια Άλλα",
            "itemdescr": "String(350): Περιγραφή Είδους",
            "novat195": "Νumeric(1): Ένδειξη μη συμμετοχής στο ΦΠΑ (έσοδα – εκροές).",
            "ubltaxcat": "String(20): Κατηγορία Φόρου / Κράτησης (BT-95,BT-102)",
            "ublvatcat": "String(20): Κατηγορία ΦΠΑ (BT-152)",
            "ublprice": "Νumeric(16,8): Τιμή Μονάδος (BT-146)",
            "ubldisc": "Νumeric(16,8): Ποσό έκπτωσης (BT-147)",
            "ublvatexre": "String(255): Λεκτικό Εξαίρεσης ΦΠΑ (BT-120)",
            "cpvcode": "String(100): CPV code (BT-158)",
            "ublmunit": "String(5): Μονάδα μέτρησης (BT-150)"
        },
        { ... }
    ],
    "einv00": {
        "p01": "Νumeric(1): Αποστολή παραστατικού (0: Στο mail που θα γυρίσει το myDATA, 1: Στο mail που θα γυρίσει το myDATA και στο p010, default: 0).",
        "p02": "Νumeric(1): Όρισμός γλώσσας αποστολής παραστατικού με e-mail (Όρισμός γλώσσας αποστολής παραστατικού με e-mail (0:el, 1: en, default: el)",
        "p010": "String(50): e-mail αποστολής παραστατικού",
        "phone": "String(12): Τηλέφωνο SMS"
    },
    "lang": "String(3): Γλώσσα Διαχειριστικού",
    "paytype": "String(20): Τρόπος Πληρωμής",
    "payments": [
        {
            "type": "String(5): Τύπος Πληρωμής",
            "amount": "Νumeric(13,2): Ποσό Πληρωμής",
            "amount_t": "Νumeric(13,2): Ποσό Φιλοδωρήματος (για πληρωμές type 7 POS/ePOS)",
            "p_sign": "String(150): Υπογραφή Πληρωμής Παρόχου (για πληρωμές type 7 POS/ePOS)",
            "tid": "String(50): Μοναδική Ταυτότητα Πληρωμής όπως αυτή δόθηκε από το POS (για πληρωμές type 7 POS/ePOS)",
            "tidnsp": "String(20): Ταυτότητα Μέσου Πληρωμών (για πληρωμές type 7 POS/ePOS)",
            "p_info": "String(150): Πληροφορίες"
        },
        { ... }
    ],
    "einv09": [
        {
            "mydt10": "Νumeric(14): Μ.Κ. Παραστατικού",
            "type": "String(10): Τύπος (sender / receiver / mydata)",
            "vat": "String(20): ΑΦΜ",
            "country": "String(3): Χώρα",
            "branch": "Νumeric(5): Αρ.Εγκατάστασης",
            "name": "String(60): Επωνυμία",
            "address": "String(100): Διεύθυνση",
            "city": "String(100): Πόλη",
            "zip": "String(20): Τ.Κ",
            "p00": "String(6): Τύπος Οντότητας (1 - Φορολογικός Εκπρόσωπος, 2 - Διαμεσολαβητής 3 - Μεταφορέας, 4 -  Λήπτης του Αποστολέα (Πωλητή), 5 - Αποστολέας (Πωλητής), 6 - Λοιπές Συσχετιζόμενες Οντότητες)"
        },
        { ... }
    ],
    "p_notes": "Memo: Σημειώσεις",
    "spinvcat": "String(5): Ειδική Κατηγορία Παραστατικού",
    "tableaa": "String(50): AA Tραπεζιού",
    "ldstreet": "String(100): Διεύθυνση Φόρτωσης / Οδός",
    "ldnumber": "String(10): Διεύθυνση Φόρτωσης / Αριθμός",
    "ldzip": "String(20): Διεύθυνση Φόρτωσης / TK",
    "ldcity": "String(100): Διεύθυνση Φόρτωσης / Πόλη",
    "dlvstreet": "String(100): Διεύθυνση Παράδοσης / Οδός",
    "dlvnumber": "String(10): Διεύθυνση Παράδοσης / Αριθμός",
    "dlvzip": "String(20): Διεύθυνση Παράδοσης / TK",
    "dlvcity": "String(100): Διεύθυνση Παράδοσης / Πόλη",
    "ss_branch": "Νumeric(5): Εγκατάσταση έναρξης διακίνησης (Εκδότη)",
    "cs_branch": "Νumeric(5): Εγκατάσταση έναρξης διακίνησης (Λήπτη)",
    "isdlvno": "Boolean(1): Ένδειξη Παραστατικού Διακίνησης",
    "othmvpur": "String(150): Τίτλος της Λοιπής Αιτίας Διακίνησης",
    "thcoll": "Boolean(1): Ένδειξη Είσπραξης Τρίτων",
    "cp_p600": "String(100): Αρ. Παροχής Ηλ. Ρεύματος Λήπτη",
    "cp_p601": "String(100): Αριθμός επίσημου εγγράφου Λήπτη",
    "cp_p602": "String(2): Κωδ. Χώρας Έκδοσης Επίσημου Εγγράφου Λήπτη",
    "rdn": "Boolean(1): Αντίστροφη Διακίνηση",
    "rdnpur": "String(20): Αιτία Έκδοσης Αντίστροφης Διακίνησης (1: ΜΗ ΥΠΟΧΡΕΟΣ ΕΚΔΟΣΗΣ, 2: ΑΡΝΗΣΗ ΕΚΔΟΣΗΣ/ΕΚ ΠΑΡΑΔΡΟΜΗΣ ΜΗ ΕΚΔΟΣΗ, 3: ΕΝΔΟΚΟΙΝΟΤΙΚΗ ΑΠΟΚΤΗΣΗ, 4: ΑΠΟΚΤΗΣΗ ΤΡΙΤΗ ΧΩΡΑ, 5: ΑΝΤΙΣΤΡΟΦΗ ΥΠΟΧΡΕΩΣΗΣ)",
    "mconmrk": "String(350): Συνδεδεμένα Παρ/κά (marks) - χωρισμένα με κόμμα.",
    "mconauth": "String(350): Συνδεδεμένα Παρ/κά (Authentication Codes) - χωρισμένα με κόμμα.",
    "channel": "Boolean(1): Κανάλι/λια αποστολής (0: Απλά πάροχος, 2: B2G)",
    "ublinvtype": "Νumeric(3): Τύπος παραστατικού (BT-3) (πιθανές τιμές: 380, 381)",
    "ublbuyerid": "String(50): Κωδικός Αναθέτουσας Αρχής (ΒΤ-46)",
    "ublcontref": "String(50): Στοιχείο αναφοράς σύμβασης (ΒΤ-12)",
    "ublbuyeref": "String(250): Όνομα Αναθέτουσας Αρχής (BT-10)",
    "ublprojref": "String(50): Κωδικός Έργου (BT-11)",
    "ublpordref": "String(50): Αναφορά Εντολής Αγοράς (BT-13)",
    "ublsordref": "String(50): Στοιχείο αναφοράς εντολής πώλησης (BT-14)",
    "ublradvref": "String(50): Στοιχείο αναφοράς ενημέρωσης παραλαβής (BT-15)",
    "ubldadvref": "String(50): Στοιχείο Αναφοράς Δελτίου Αποστολής (BT-16)",
    "ubltendlotref": "String(50): Στοιχείο αναφοράς προσφοράς ή παρτίδας (BT-17)",
    "ublbaccref": "String(50): Στοιχείο Λογιστικής Αναφοράς Αγοραστή (BT-19)",
    "ublpayterm": "String(350): Όροι πληρωμής (BT-20)",
    "ublrelid**": "String(150): Συσχετιζόμενο παραστατικό (ΒΤ-25)",
    "ublnotetp": "String(20): Τύπος Σημείωσης (BT-21). Για πιθανές τιμές δείτε https://service.unece.org/trade/untdid/d96b/uncl/uncl4451.htm",
    "ublnote": "String(255): Σημείωση (BT-22)",
    "to_weigh": "Boolean(1): Προς Ζύγιση"
}
* pnr01: Προτείνεται η τιμή που θα συμπληρώσετε είναι ένα string όπου κάνετε concat τα παρακάτω στοιχεία και ανάμεσά τους υπάρχει το token #:
  • is_vat
  • issuedate
  • is_branch
  • invtype
  • series
  • aa
  • cp_vat
για παράδειγμα: 094420307#20230203#0#1.1#ΤΠ-ΔΑ#123#
Προσοχή, το pnr01 δεν πρέπει να ξεκινάει με το πρόθεμα "einvoicing_pegcloud_io"
** ublrelid: Αν το πεδίο έχει τιμή τότε δεν λαμβάνεται υπόψη η τιμή του πεδίου "correlinv". Αν δώστε τιμή και στα δυο πεδία τότε και τα δύο θα πρέπει να αναφέρονται στο ίδιο παραστατικό.
RESPONSE/ HTTP response code: 200
RESPONSE/ HTTP response code: 400
RESPONSE/ HTTP response code: 401
Δημιουργία Υπογραφής (create-payment-signature)
URL: "https://e-invoicing-user-api.pegcloud.io/create-payment-signature/"
Method: POST
REQUEST
POST /create-payment-signature /HTTP/1.1

Authorization: Bearer {{token}}

{
    "pos_protocol*": "String: Πρωτόκολλο POS",
    "tidnsp": "String(20): Ταυτότητα Μέσου Πληρωμών (TID)",
    "amount": "Νumeric(13,2): Ποσό Πληρωμής",
    "mark**": "String(50): Μοναδικός Αριθμός (ΜΑΡΚ)",
    "issue_date": "Date: Ημερομηνία Έκδοσης (YYYY-MM-DD)",
    "issuer_vat": "String(20): ΑΦΜ Εκδότη",
    "issuer_branch": "Νumeric(5): Αρ.Εγκατάστασης Εκδότη",
    "invtype": "String(5): Κατηγορία Παραστατικού (π.χ. για ένα Τιμολόγιο Πώλησης, πρέπει να δώσετε τον κωδικό 1.1)",
    "series": "String(150): Σειρά Παρ/κού",
    "aa": "String(20): Αρ.Παρ/κού (Ο αριθμός παραστατικού είναι υποχρεωτικός μόνο στην περίπτωση που το παραστατικό έχει ήδη καταχωρηθεί)",
    "invoice_net_value": "Νumeric(13,2): Σύνολο Καθαρής Αξίας",
    "invoice_vat_value": "Νumeric(13,2): Σύνολο ΦΠΑ",
    "invoice_total_value": "Νumeric(13,2): Συνολική Αξία"
}
* pos_protocol:
Τα πρωτόκολλα αναλυτικά, βρίσκονται στο επίσημο site της ΑΑΔΕ εδώ.
Πιθανές Τιμές pos_protocol:
 0 : Mellon (EFTPOS-WebECR 2.5 7)
 1 : EDPS (Json Protocol)
 2 : Viva (Οnline Cloud API)
 3 : Cardlink (ecr2eftdll.6.3.0)
 4 : Euronet (EFTPOS-WebECR 2.5 7)
 5 : Neosoft (NEOSOFT WEB/CPR)
 6 : INSS(INSS Cloud 1.0.3)
** mark: Ο Μοναδικός Αριθμός (Μ.Αρ.Κ.), συμπληρώνεται μόνο στην περίπτωση που το παραστατικό έχει ήδη καταχωρηθεί. Προσοχή, το παραστατικό αυτό, πρέπει να έχει καταχωρηθεί στο e-invoicing.pegcloud.io. Αν είχε π.χ. καταχωρηθεί παλαιότερα με άλλον πάροχο ή απευθείας με myDATA, δεν μπορείτε να εκδώσετε Υποργαφή Πληρωμής, Αν υπάρξει τέτοια περίπτωση, θα πρέπει να εκδώσετε συσχετισμένη Απόδειξη Είσπραξης (8.4). Αν το παραστατικό αυτό είναι υπό έκδοση, τότε στο ΜΑΡΚ, θα πρέπει να δώσετε 0.
RESPONSE/ HTTP response code: 200
RESPONSE/ HTTP response code: 400
RESPONSE/ HTTP response code: 401
Ενημέρωση υφιστάμενου παραστατικού με νέα πληρωμή (invoice-update)
URL: "https://e-invoicing-user-api.pegcloud.io/invoice-update/"

Η κλήση αυτή, μπορεί να χρησιμοποιηθεί μόνο για πληρωμές με πιστωτική κάρτα, τύπου 7. 

Method: POST
REQUEST
POST /invoice-update /HTTP/1.1

Authorization: Bearer {{token}}

{
    "amount": "Νumeric(13,2): Ποσό Πληρωμής",
    "amount_t": "Νumeric(13,2): Ποσό Φιλοδωρήματος",
    "type": "String(5): Τύπος Πληρωμής",
    "p_sign": "String(150): Υπογραφή Πληρωμής Παρόχου",
    "tid": "String(50): Μοναδική Ταυτότητα Πληρωμής",
    "p_info": "String(150): Πληροφορίες"
}
RESPONSE/ HTTP response code: 200
RESPONSE/ HTTP response code: 400
RESPONSE/ HTTP response code: 401
Ακύρωση Δελτίου Αποστολής (cancel-delivery-note)
URL: "https://e-invoicing-user-api.pegcloud.io/cancel-delivery-note/"
Method: POST
REQUEST
{
    "mark": "String(50): Μ.Αρ.Κ."
}
RESPONSE/ HTTP response code: 200
RESPONSE/ HTTP response code: 400
RESPONSE/ HTTP response code: 401
Διασύνδεση με EFT/POS

Σύμφωνα με την νομοθεσία Α.1155 /09-10-2023, εισάγεται μια νέα διαδικασία για τη λειτουργία των EFT/POS συσκευών. Από εδώ και στο εξής, τα EFT/POS θα είναι κλειδωμένα και δεν θα επιτρέπεται η χειροκίνητη εισαγωγή ποσών από τους χρήστες. Αντί αυτού, το ERP σύστημα θα αναλαμβάνει να δίνει τις εντολές στο POS για είσπραξη, επιστροφή χρημάτων ή οποιαδήποτε άλλη συναλλαγή. Δείτε αναλυτικά στο site της ΑΑΔΕ: aade.gr: Διασύνδεση POS - Ταμειακών Συστημάτων. 

Οι NSP (πάροχοι μέσων πληρωμών) έχουν υλοποιήσει διάφορα πρωτόκολλα επικοινωνίας τα οποία μπορείτε να δείτε αναλυτικά εδώ: Πρωτόκολλα /Τεκμηρίωση για διασύνδεση με βάση την Α.1155/2023 . Τα πρωτόκολλα επικοινωνίας, ορίζουν τον τρόπο με τον οποίο, μπορεί ένα ERP, να δώσει μία εντολή π.χ. για εκκίνηση ενός sale, στο POS. Έχουν δοκιμαστεί με πάροχο e-invoicing.pegcloud.io και τις Pegasus Web App & Pegasus ERP εφαρμογές μας, τα πρωτόκολλα NSP όπως φαίνονται εδώ: Pegasus Web App και Διασύνδεση EFT POS.

Δημιουργία Υπογραφής Πληρωμής
Σύμφωνα με την νομοθεσία Α.1155 /09-10-2023, κάθε εντολή που θα δοθεί π.χ. για εκκίνηση ενός sale, στο POS, θα πρέπει να συνοδεύεται από την αντίστοιχη Υπογραφή Πληρωμής. Η Υπογραφή αυτή, παράγεται από το  e-invoicing.pegcloud.io , με την χρήση του API call create-payment-signature Μπορεί να δημιουργηθεί υπογραφή για ένα ήδη εκδομένο παραστατικό (Ετεροχρονισμένη Πληρωμή) είτε για ένα παραστατικό που εκδίδεται τώρα, δηλαδή είναι "Υπό Έκδοση" (Ταυτόχρονη Πληρωμή με Έκδοση Παραστατικού). Ισχύει ότι κάθε Υπογραφή Πληρωμής, θα πρέπει να συσχετιστεί με ένα παραστατικό.  

Ταυτόχρονη Πληρωμή με Έκδοση Παραστατικού
Εφόσον μία ταυτόχρονη πληρωμή ολοκληρωθεί επιτυχώς στο EFT/POS, κατά την αποστολή του παραστατικού στον πάροχο με την κλήση του API call invoice-data, θα πρέπει να συμπληρωθεί το object payments με τιις διάφορες πληρωμές του παραστατικού. Στην περίπτωση της πληρωμής με κάρτα, ο τύπος πληρωμής είναι ο 7, και συμπληρώνονται τα πεδία:

  • amount: Το πραγατικό ποσό που πκηρώθηκε στο EFT/POS. Μπορεί να είναι μικρότερο ή ίσο του ποσού για το οποίο εκδόθηκε υπογραφή πληρωμής.
  • amount_t: Το ποσό του φιλοδωρήματος (tip)
  • p_sign: Υπογραφή πληρωμής όπως εκδόθηκε από την create-payment-signature.
  • tid: Μοναδική Ταυτότητα Πληρωμής όπως επιστρέφεται από το EFT/POS
  • tidnsp: Ταυτότητα Μέσου Πληρωμών (δηλαδή το Terminal ID, το ID του EFT/POS)

Στην περίπτωση που μία Υπογραφή για ένα "Υπό Έκδοση", δεν συσχετιστεί με το παραστατικό της (στις επόμενες 24 ώρες) π.χ. γιατί τελικά δεν καταχωρήθηκε το παραστατικό, το e-invoicing.pegcloud.io, αναφέρει τις υπογραφές αυτές στο myDATA.

Ετεροχρονισμένη πληρωμή μετά την Έκδοση Παραστατικού
Στην περίπτωση που το παραστατικό είχε εκδοθεί επί πιστώσει, αλλά πληρώνεται μερικώς ή πλήρως σε δεύτερο χρόνο, τότε, θα πρέπει να γίνει κλήση του API call invoice-update. 
Η κλήση αυτή, μπορεί να χρησιμοποιηθεί μόνο για πληρωμές με πιστωτική κάρτα, τύπου 7 και συμπληρώνονται τα πεδία:

  • amount: Το πραγατικό ποσό που πκηρώθηκε στο EFT/POS. Μπορεί να είναι μικρότερο ή ίσο του ποσού για το οποίο εκδόθηκε υπογραφή πληρωμής.
  • amount_t: Το ποσό του φιλοδωρήματος (tip)
  • p_sign: Υπογραφή πληρωμής όπως εκδόθηκε από την create-payment-signature.
  • tid: Μοναδική Ταυτότητα Πληρωμής όπως επιστρέφεται από το EFT/POS
  • tidnsp: Ταυτότητα Μέσου Πληρωμών (δηλαδή το Terminal ID, το ID του EFT/POS)

Απόδειξη Είσπραξης POS (8.4) - Απόδειξη Επιστροφής POS (8.5)
Με την έκδοση 1.0.8 του myDATA, έχουν δημιουργηθεί δύο νέα παραστατικά, η Απόδειξη Είσπραξης POS (8.4) και η Απόδειξη Επιστροφής POS (8.5). Ο Τύπος Παραστατικού Απόδειξη Είσπραξης POS(8.4) δεν ακυρώνεται, επομένως, στην περίπτωση επιστροφής μίας πληρωμής Απόδειξης Είσπραξης POS (8.4), εκδίδεται Απόδειξη Επιστροφής POS (8.5) με την οποία συσχετίζεται. 

Εκδίδεται Απόδειξη Είσπραξης POS(8.4) στις παρακάτω περιπτώσεις:

  • Προείσπραξη: Είσπαξη με EFT/POS πριν από την έκδοση του σχετικού/ων Παραστατικού/ων
  • Είσπραξη με EFT/POS για ένα παραστατικό που δεν είχε εκδοθεί με το e-invoicing.pegcloud.io (π.χ. είχε εκδοθεί με myDATA ή με άλλον πάροχο)
  • Είσπραξημε EFT/POS για πολλαπλά παραστατικά, που έχουν ήδη καταχωρηθεί

Η αποστολή του παραστατικού στον πάροχο γίνεται με την κλήση του API call invoice-data. 

Με βάση τους επιτρεπτούς χαρακτηρισμούς, ο επιτρεπτός χαρακτηρισμός για τα 8.4 και 8.5 μόνο η category1_95 [Λοιπά Πληροφοριακά Στοιχεία Εσόδων (+) / (-)].
Ο χαρακτηρισμός ΦΠΑ είναι κατηγορία 8 [Άνευ ΦΠΑ]

Με βάση την Α.1155 /09-10-2023 "Σε κάθε περίπτωση, οι αποδείξεις είσπραξης ή τα αντίστοιχα λογιστικά αρχεία που δημιουργούνται αντιστοιχίζονται με παραστατικά (τιμολόγια, αποδείξεις λιανικής πώλησης) που εκδίδονται μεταγενέστερα της πληρωμής για την ολοκλήρωση των συναλλαγών αυτών. Στην περίπτωση που οι αποδείξεις είσπραξης που εκδόθηκαν ή τα κατάλληλα λογιστικά αρχεία που δημιουργήθηκαν δεν συσχετιστούν με τιμολόγια ή αποδείξεις λιανικής πώλησης έως την υποβολή της δήλωσης φορολογίας εισοδήματος της χρήσης που αφορούν, τα σχετικά ποσά που αντιστοιχούν σε αυτές, προστίθενται στον ετήσιο κύκλο εργασιών της οντότητας. Εφόσον οι εν λόγω αποδείξεις είσπραξης τιμολογηθούν την επόμενη χρήση, για την τρέχουσα νοούνται ως έσοδα επόμενων χρήσεων."

Επομένως, θα πρέπει τα 8.4 και τα 8.5 να συσχετιστούν με τα παραστατικά τα οποία αφορά η πληρωμή. Με την έκδοση 1.0.9 του myDATA, δόθηκε η δυνατότητα συσχετισμού ενός παραστατικού με πολλαπλά ΜΑΡΚ για τη διασύνδεση των 8.4 και 8.5. Στο e-invoicing.pegcloud.io μπορείτε να τα δώσετε στο πεδίο mconmrk, χωρισμένα με κόμμα(,). 

Απώλεια Διασύνδεσης

Σε περίπτωση αδυναμίας διασύνδεσης με το e-Invoicing, μπορείτε να παράξετε ένα temporary QRCode και να το εκτυπώσετε στο παραστατικό σας. Όσο το παραστατικό δεν έχει σταλεί στο e-Invoicing, το QRCode οδηγεί σε μία σελίδα με υπόδειξη ότι το QRcode είναι προσωρινό και το παραστατικό δεν έχει πάρει συμβολοσειρά αυθεντικοποίησης.Όταν επανέλθει η επικοινωνία με το e-Invoicing και στην περίπτωση που το παραστατικό έλαβε συμβολοσειρά αυθεντικοποίησης επιτυχώς - το QRCode θα προβάλει πλέον το παραστατικό. Διαφορετικά θα εμφανίζει μήνυμα λάθους.

Για την παραγωγή του QRCode χρησιμοποιείτε το σύνδεσμο:

https://e-invoicing.pegcloud.io/pegasus/einv02/search_invoice01.php?temp_code={temp_code}&user_vat={User VAT}&issuer_vat={Issuer Vat}&issue_date={Issuer Date(Ymd}&issuer_branch={Issuer Branch}&invoice_type={Invoice Type}&series={Series}&aa={AA}

όπου το temp_code παράγεται με concatenation των παρακάτω χωρισμένα με το σύμβολο ";" και κρυπτογραφημένα με τον αλγόριθμο sha256:

  1. Issuer Vat
  2. Issue Date (Ymd)
  3. Issuer Branch
  4. Invoice Type
  5. Series
  6. AA
  7. User VAT
  8. Username σύνδεσης στο e-invoicing.pegcloud.io

Παράδειγμα:

string: 094420307;20230309;0;1.1;ΤΠ-ΔΑ;26;094420307;customer_demo
hashed value: d6c9158c2086366ee5e66f2f5a3aeddeb0e07beffc6e6b29cb6fbb61de2d7680

ΠΡΟΣΟΧΗ: το hash value πρέπει να είναι με μικρά γράμματα.

Λειτουργία Εστίασης με Δελτία Παραγγελίας

Στην έκδοση 1.0.9 του myDATA, ενσωματώθηκε το Δελτία Παραγγελίας Εστίασης: Έκδοση 1.0.9 myDATA. Η σχετική απόφαση: Α1126/2024Το Δελτίο Παραγγελίας αφορά στο παραστατικό με invtype 8.6 του myDATA. Ένα δελτίο παραγγελίας πρέπει να "κλείσει" ή και να ακυρωθεί εντός 24 ωρών. Αν μείνουν ανοιχτά Δελτία, ο Πάροχος δεν δέχεται άλλα παραστατικά.

Για να "κλείσει" ένα Δελτίο πρέπει να αντιστοιχιστεί όλη η καθαρή αξία και όλη η ποσότητα του με κάποιο από τα:

  • 11.1 - ΑΛΠ (Απόδειξη Λιανικής Πώλησης) για χρεωστικές συναλλαγές λιανικής
  • 11.4 - Πιστωτικό Στοιχείο Λιανικής για πιστωτικές συναλλαγές λιανικής
  • 1.1 - Τιμολόγιο Πώλησης, για χρεωστικές συναλλαγές χονδρικής
  • 5.1 - Πιστωτικό Τιμολόγιο / Συσχετιζόμενο
  • 5.2 - Πιστωτικό Τιμολόγιο για πιστωτικές συναλλαγές χονδρικής, στην περίπτωση που ζητηθεί η έκδοση τιμολογίου ή πιστωτικού με ένδειξη «Συναλλαγές Εστίασης».
    Υπάρχουν περιπτώσεις που ένα κλειστό Δελτίο παραγγελίας μπορεί να ανοίξει ξανά π.χ. αν εκδοθεί Πιστωτικό στοιχείο για το παραστατικό που το "έκλεισε".

Επιπλέον για ένα Δελτίο Παραγγελίας μπορείτε:

  • να το ακυρώσετε - σημαίνοντάς το με tcdord = 1 (TotalCancelDeliveryOrder)
  • να ακυρώσετε κάποιες γραμμές του - εκδίδοντας αντιστοιχισμένο Δελτίο Παραγγελίας 8.6 το οποίο θα έχει ως γραμμές τα είδη που πρέπει να ακυρωθούν, με την ένδειξη rectype = 7

Για την αντιστοίχιση των Δελτίων Παραγγελίας είτε με τα παραστατικά που τα κλείνουν είτε με τα Δελτία που τα ακυρώνουν χρησιμοποιείτε τα πεδία mconauth ή mconmrk. Στο mconauth ορίζετε το Authentication Code του Δελτίου Παραγγελίας. Στο mconmrk ορίζετε το Μ.Αρ.Κ. του Δελτίου Παραγγελίας. Αν πρόκειται για πολλά Δελτία Παραγγελίας συμπληρώνετε όλα τις εγγραφές χωρισμένες με κόμμα(,).

Το mconauth είναι χρήσιμο στην περίπτωση Απώλειας Διασύνδεσης του παρόχου με το myDATA. 

Για παράδειγμα, έστω ότι η επικοινωνία με την υπηρεσία του myDATA δεν είναι εφικτή και στέλνετε ένα Δελτίο Παραγγελίας στον Πάροχο το οποίο στη συνέχεια θα πρέπει να κλείσει με το αντίστοιχο ΑΛΠ. 
Αρχικά το Δελτίο Παραγγελίας δεν ενημερώνεται με MARK - ο Πάροχος εκδίδει ένα προσωρινό Authentication Code και το Δελτίο μπαίνει στην ‘ουρά’ για αποστολή στο myDATA. Εσείς μπορείτε να εκδώσετε το ΑΛΠ και να κλείσετε το Δελτίο Παραγγελίας συμπληρώνοντας το Authentication Code στο πεδίο mconauth. Το ΑΛΠ μπαίνει και αυτό στην ‘ουρά’. Ο Πάροχος αναλαμβάνει να ενημερώσει το myDATA με το Δελτίο Παραγγελίας και το ΑΛΠ όταν επανέλθει η επικοινωνία.

Μέσα από το user interface της πλατφόρμας του παρόχου (e-invoicing.pegcloud.io) μπορείτε να δείτε όλα τα εκκρεμή Δελτία Παραγγελίας μας. Για κάθε εγγραφεί καταγράφονται αναλυτικά η υπολειπόμενη αξία και ποσότητα προς κλείσιμο.

Για το κύκλωμα της Εστίασης, διακρίνονται οι παρακάτω περιπτώσεις παραστατικών. Για όλες τις περιπτώσεις η ενημέρωση του e-invoicing.pegcloud.io  γίνεται μέσω του endpoint Αποστολή/Παραλαβή Παραστατικού (invoice-data) με τη μέθοδο POST.

Δελτίο παραγγελίας

  • invtype = 8.6
  • spinvcat = 12
  • tableaa: Ο αριθμός του τραπεζιού
  • mydt57_p00: category1_95
  • mydt61_p00: κενός

Σημείωση: Το e-invoicing.pegcloud.io κρατάει μία λίστα με τα τραπέζια της επιχείρησης ώστε να μπορείτε να αναζητήσετε τα Δελτία Παραγγελίας με βάση το τραπέζι τους.

Δελτίο παραγγελίας που ακυρώνει γραμμή/γραμμές προηγούμενου δελτίου

  • invtype = 8.6
  • spinvcat = 12
  • einv02 έχει γραμμή/γραμμές ειδών με rectype = 7
  • mconauth = Το authentication code του δελτίου παραγγελίας από το οποίο ακυρώνει γραμμή/γραμμές
  • mydt57_p00: category1_95
  • mydt61_p00: κενός

Σημείωση: Ένα Δελτίο Παραγγελίας, μπορεί να έχει μόνο rectype 7 ή rectype 0. Δεν μπορεί να έχει και τα 2.

Δελτίο παραγγελίας που ακυρώνει όλο το δελτίο

  • Πρέπει να διαβιβάζεται με μια μόνο γραμμή με μηδενικές αξίες
  • invtype = 8.6
  • spinvcat = 12
  • tcdord = 1
  • mconauth = Το authentication code του δελτίου παραγγελίας που ακυρώνει. Πρέπει να είναι ακριβώς 1
  • vatCategory = 8

Παραστατικό που "κλείνει" Δελτίο παραγγελίας

  • spinvcat = 12
  • mconauth = Το authentication code του δελτίου παραγγελίας. Δεν γίνονται δεκτά Δελτία όπου tcdord = 1 ή με rectype = 7

Σημείωση 1: Παραστατικά που είναι Πιστωτικά μπορούν να έχουν μόνο ένα συνδεδεμένο Δελτίο Παραγγελίας.
Σημείωση 2: Παραστατικά που ‘κλείνουν’ πολλά Δελτία Παραγγελίας θα πρέπει να έχουν αξία ίση ή μεγαλύτερη από το σύνολο όλων των Δελτίων Παραγγελίας (που κλείνει το παραστατικό)