Εισαγωγή

ΑΑΔΕ myDATA REST API

Το invoicemaker.gr παρέχει μια εκφραστική, ευέλικτη διεπαφή που έχει αναπτυχθεί με τη χρήση της γλώσσας PHP για την επικοινωνία με την εφαρμογή myDATA της Ανεξάρτητης Αρχής Δημοσίων Εσόδων (ΑΑΔΕ). Παρέχει μια εύκολη και γρήγορη λύση για την αποστολή και λήψη παραστατικών, ακύρωση παραστατικών, χαρακτηρισμός και λήψη εσόδων και εξόδων και λήψη αναφορών ΦΠΑ.

Σε ποιούς απευθύνεται;

Το invoicemaker.gr απευθύνεται σε όλους τους φορείς που έχουν υποχρέωση να αποστέλλουν παραστατικά στην εφαρμογή myDATA της ΑΑΔΕ, όπως επιχειρήσεις, ελεύθερους επαγγελματίες, οργανισμούς και άλλους φορείς που εκδίδουν παραστατικά.

Το invoicemaker.gr απευθύνεται επίσης στους προγραμματιστές (developers) που θέλουν να ενσωματώσουν την υποστήριξη του myDATA στις εφαρμογές τους εντελώς δωρεάν.

Αν είστε ελεύθερος επαγγελματίας ή επιχείρηση και θέλετε να αποστέλλετε τιμολόγια στο myDATA, μπορείτε να εγγραφείτε στο invoicemaker.gr και να ξεκινήσετε αμέσως.

Δείτε περισσότερα

Γιατί το invoicemaker.gr;

Το invoicemaker.gr παρέχει μια εύκολη και γρήγορη λύση για την αποστολή και λήψη δεδομένων από το myDATA.

Open source

Το invoicemaker.gr είναι μια ανοικτού κώδικα λύση, που σημαίνει ότι αν είστε προγραμματιστής μπορείτε να το χρησιμοποιήσετε εντελώς δωρεάν.

Seamless integration

Το invoicemaker.gr διαχειρίζεται τη μετατροπή δεδομένων σε XML και από XML, επιτρέποντας την αποστολή και λήψη δεδομένων με τη χρήση αυτής της μορφής. Αυτό επιτρέπει την αλληλεπίδραση των δεδομένων με το myDATA με ευκολία και αξιοπιστία.

XML Structure

Η σωστή δομή και σειρά των πεδίων στο XML είναι απαραίτητες για το myDATA. Πριν από την έκδοση 4, η σειρά των πεδίων στο XML αντιστοιχούσε με τη σειρά που ο χρήστης συμπλήρωνε τα απαραίτητα πεδία. Ωστόσο, αυτό προϋποθέτει ότι ο χρήστης πρέπει να γνωρίζει εξαρχής με ποια σειρά πρέπει να συμπληρώσει τα πεδία ή να ανατρέχει συνεχώς στις οδηγίες για να εντοπίσει την απαιτούμενη κατάταξη πεδίων.

Από την έκδοση 4 και μετά, το invoicemaker.gr αναλαμβάνει αυτόματα τη σωστή δόμηση του XML, εξαλείφοντας την ανάγκη για επίπονη χειρονακτική παρέμβαση. Με αυτόν τον τρόπο, δε χρειάζεται να ανησυχείτε για τη δομή του XML ή τη σειρά των πεδίων.

Code completion

Το invoicemaker.gr παρέχει έναν πλήρη κατάλογο με όλες τις διαθέσιμες μεθόδους, τα οποία μπορείτε να χρησιμοποιήσετε για να αλληλεπιδράσετε με το myDATA. Κάθε μέθοδος είναι πλήρως τεκμηριωμένη κατά τις οδηγίες του myDATA, παρέχοντας πλήρη κατανόηση της λειτουργίας της.

invoicemaker.gr code completion example

Custom gateway

Every request is carried to the remote system by a Firebed\AadeMyData\Http\Gateway. The default GuzzleGateway talks to the AADE myDATA REST API. Register your own to route requests elsewhere (for example through an e-invoicing provider) without touching the code that builds them:

use Firebed\AadeMyData\Http\MyDataRequest;

MyDataRequest::setGateway(new MyGateway()); // implements Gateway
MyDataRequest::setGateway(null);            // back to the default

setGateway() is process-global and stays in place until it is replaced, so in a long-running worker (Octane, queue daemon) a gateway registered for one flow keeps carrying every later request in that process. When the gateway is chosen per tenant or per flow, override a single request instead and leave the global one alone:

$response = (new SendInvoices())->usingGateway(new MyGateway())->handle($invoice);

A gateway receives the request object and the XML body. For SendInvoices and SendPaymentsMethod the models are also available through SendInvoices::getInvoicesDoc() and SendPaymentsMethod::getPaymentMethodsDoc(), so a provider gateway can read attributes that never reach the myDATA XML. myDATA carries only the issue date and the line's net value, while a provider needs more, so these stay on the models and off the XML:

  • InvoiceHeader::setIssueTime('hh:mm:ss') — the issue time;
  • InvoiceDetails::setUnitPrice(3.333333) — the price per unit;
  • InvoiceDetails::setDiscount(DiscountType::PERCENTAGE, 10.0) (or DiscountType::AMOUNT) — the line discount, read back with getDiscountType() and getDiscountValue();
  • setExtraFields(['key' => 'value']) / addExtraField('key', 'value') on Invoice, InvoiceDetails and PaymentMethodDetail — free key/value pairs for the provider.