ΤΕκμηρίωση, για την χρήση της βιβλιοθήκης elzabdll.

Γενικά
======

Η βιβλιοθήκη έχει κατσκευασθεί με την χρήση της γλώσσας C#.net. Για να μπορείνα χρησιμοποιηθεί γενικά, έχει προβλεφθεί, να ανταποκρίνεται σε κλήσεις από
γλώσσες που χρησιμοποιούν, το περιβάλλον managed .net, και παράλληλα, να μπορούν να κληθούν και από γλώσσες που χρησιμοποιούν unmanaged code. Έχουν γίνει όλες
οι απαραίτητες ρυθμίσεις, ώστε να είναι διαθέσιμες οι συναρτήσειες σε unmanaged code. Για να μπορεί να γίνει αυτό έχει αποφευχθεί η χρήσσ pointes, που μπορεί ίσως να δημιουργήσουν 
προβλήματα, σε κάποιες γλώσσες.

Δεν χρησιμοποιήθηκε αρχείο, για την αποστολή δεδομένων για την υπογραφή, καθώς έχουν παρατηρηθεί καθυστερήσεις, ειδικά σε network drives. Οι νέες γλώσσες υποστηρίζουν
μέγεθος string 2GB, οπότε η χρήση αρχείου, είναι περριτή.

Όλες οι συναρτήσεις επιστρέφουν ένα string, που περιέχει, όλες τις πληροφορίες που χρειάζεται. Τα πεδία έχουν σαν διαχωριστικό το caret (^). Η απάντηση, περιέχει τουλάχιστον
2 πεδία. Το πρώτο είναι ο κωδικός λάθους (error Code), και ακολουθούν όσα πεδία χρειάζεται, ανάλογα με την συνάρτηση. Εάν υπάρχει λάθος, και η απάντηση πρέπει να έχει πολλά πεδία,
το string που επιστρέφεται, περιέχει μόνο τον κωδικό και την περιγραφή του λάθους.

Πεδίο 1: Error Code
===================
0: Δεν υπάρχει λάθος OK.
Θετικός αριθμός: Είναι λάθος που διαχειρίζεται και παράγει η DLL, και το επόμενο πεδίο, είναι η περιγραφή του λάθους.
Αρνητικός αριθμός: Είναι λάθος που παράγει το σύστημα, και ο απόλυτος αριθμός είναι ο αριθμός λάθους του συστήματος. Το επόμενο πεδίο, είναι η περιγραφή του λάθους που δίνει
το σύστημα.


Συναρτήσεις
=========== 

string get_ESD_Status(string esdIP)
-----------------------------------
Δεδομένα:
esdIP: Η διεύθυνση Ip, του φορολογικού μηχανισμού π.χ. "192.168.1.132"

Απάντηση:
Μας δίνει το Status της ESD. Η απάντηση είναι string, με διαχωριστικό το Caret(^), όπως αναφέρεται στα γενικά.
Πεδίο 1: Error Code
Πεδίο 2: Περιγραφή Status

string get_ESD_Id(string esdIP)
-------------------------------
Δεδομένα: 
esdIP: Η διεύθυνση Ip, του φορολογικού μηχανισμού π.χ. "192.168.1.132"

Απάντηση:
Μας δίνει το Status της ESD. Η απάντηση είναι string, με διαχωριστικό το Caret(^), όπως αναφέρεται στα γενικά.
Πεδίο 1: Error Code
Πεδίο 2: Ο σειριακός αριθμός του φορολογικού μηχανισμού.

string get_ESD_Date_Time(string esdIP)
--------------------------------------
Δεδομένα: 
esdIP: Η διεύθυνση Ip, του φορολογικού μηχανισμού π.χ. "192.168.1.132"

Απάντηση:
Μας δίνει την ημερομηνία και ώρα της συσκευής.
Πεδίο 1: Error Code
Πεδίο 2: Η ημερομηνία και ώρα με την μορφή ΗΗΜΜΕΕ/ΩΩΛΛΔΔ  

string get_ESD_LastZ_Time(string esdIP)
---------------------------------------
Δεδομένα: 
esdIP: Η διεύθυνση Ip, του φορολογικού μηχανισμού π.χ. "192.168.1.132"

Απάντηση:
Μας δίνει την ημερομηνία και ώρα της συσκευής που εκδόθηκε το τελευταίο Ζ.
Πεδίο 1: Error Code
Πεδίο 2: Η ημερομηνία και ώρα με την μορφή ΗΗΜΜΕΕ/ΩΩΛΛΔΔ  

Σημείωση:
Μετά την αποστολή των δεδομένων στην ΑΑΔΕ, γίνεται ενημέρωση της ώρας του μηχανισμού, με την ώρα που έχει ο διακομιστής της ΑΑΔΕ. 
Η DLL, τα ελέγχει όλα αυτά, και επιστρέφει λάθος, ανάλογα με την περίπτωση, όταν ζητηθεί υπογραφή. Για να απλοποιηθεί ο κώδικας, και να μην έχουμε ανακυκλώσεις με ελέγχους λαθών,
δίδονται αυτές οι δύο συναρτήσεις, για να κάνει τους ελέγχους η εφαρμογή, εάν είναι επιθυμητό.

Εάν η διαφορά ώρας, είναι μεγαλύτερη από 30 λεπτά, πρέπει να εμφανιστει μήνυμα "Καλέστε τεχνικό". Εάν η διαφορά ώρας είναι μικρότερη από 30 λεπτά έχουμε:

1. Η ώρα τελευταίου Ζ, είναι μεταγενέστερη της ώρας της συσκευής, πρέπει η εφαρμογή να περιμένει, μέχρι η ώρα να φτάσει την ώρα του προηγόύμενου Z.
2. H ώρα τελευταίου Ζ, είναι προγενέστερη της ώρας της συσκευής, οπότε μπορούν να δοθούν δεδομένα για υπογραφή.


string get_Signature(string esdIP, string pathABC, string signatureText, string eData) 
--------------------------------------------------------------------------------------
Δεδομένα:
esdIP: Η διεύθυνση Ip, του φορολογικού μηχανισμού π.χ. "192.168.1.132"
PathABC: Ο φάκελος ABC που θα δημιουργθηθούν τα αρχεία _a, _b, _e. (θα δημιουργθηθούν, μέσα σε υποφάκελο που είναι ο σειριακός αριθμός και ο αριθμός Ζ. Π.χ. "c:\PathABC"
signatureText: Το κείμενο προς υπογραφή σε ένα μεγάλο string που περιέχει όλο το κείμενο. Όλες οι σύγχρονες γλώσσες δέχοντα μήκος string 2GB.
eData: Τα δεδομένα, για την υπογραφή του αρχείου _e. Μπαίνουν στην σειρά με διαχωριστικό το (;). Απαιτούνται 17 πεδία
	Π.χ.
	AFM_publisher;AFMRecipient;CustomerID;InvoiceType;Seira;InvoiceNo;NET_A;NET_B;NET_C;NET_D;NET_E;VAT_A;VAT_B;VAT_C;VAT_D;Total;Currency
	

Απάντηση:
Πεδίο 1: Error Code 
Πεδίο 2: Υπογραφή του κειμένου που αφορά τα δεδομένα του signatureText.
Πεδίο 3: Υπογραφή του κειμένου που αφορά τα δεδομένα eData.
Πεδίο 4. Η πλήρης διαδρομή που αποθηκεύθηκαν τα αρχεία _a, _b, _e. Π.χ. C:\PathABC\GRT99000004\Z19

string issueZReport(string esdIP, string PathABC, string aadeServerUrl, string aadeAESKey)
------------------------------------------------------------------------------------
Δεδομένα:
esdIP: Η διεύθυνση Ip, του φορολογικού μηχανισμού π.χ. "192.168.1.132"
PathABC: Ο φάκελος ABC που θα δημιουργθηθούν τα αρχεία _c, _d. (είναι ίδιος που δίνουμε για την υπογραφή). Π.χ. "c:\PathABC"
aadeServerUrl: Η διεύθυνση URL της ΑΑΔΕ. Π.χ. https://56.09.04.55
aadeAESKey: Το κλειδί AES που δίνεται στον χρήστη για την υποβολή των δεδομένων.

Απάντηση:
Πεδία 1: Error code
Πεδίο 2: Περιγραφή λάθους ή "Εκκίνηση διαδικασίας αποστολής".

Σημείωση 1: Σε περίπτωση λάθους, δεν χρειάζεται, να το ξαναστείλουμε, απλά την επόμενη φορά το DLL, θα ενημερωθεί, ότι λείπει κάποιο Z, και θα τα ξαναστείλει με το επόμενο Ζ.

Σημείωση 2: Η αποστολή τρέχει σε δικό της thread, και τελειώνει. Ολόκληρη η διαδικασία καταγράφεται στο aade.log, που δημιουργείται στον ίδιο φάκελλο που βρίσκεται η εφαρμογή.



string getReportFmToDates(string PathABC, string esdID, string fmDate, string toDate, string parastCode, string reportPath)
---------------------------------------------------------------------------------------------------------------------------
Δεδομένα:
PathABC¨Ο φάκελος ABC που περιέχει τα αρχεία _a, _b κ.λ.π.
esdID: Ο σειριακός αριθμός της μηχανής
fmDate: Από ημερομηνία, με την μορφή (YYYYmmdd) Π.Χ. 20190910
toDate: Έως ημερομηνία, με την μορφή (YYYYmmdd) Π.Χ. 20191006
parastCode: Ο ζητούμενος κωδικός παραστατικού της ΑΑΔΕ ή 00 που σημαίνει όλα τα παραστατικά.
reportPath: Ο πλήρης φάκελος και το όνομα αρχειου που θα περιέχει την αναφορά (CSV)

Απάντηση:
Πεδία 1: Error code
Πεδία 2: OK ή περιγραφή του λάθους

string getReportFmToZno(string PathABC, string esdID, string fmZno, string toZno, string parastCode, string reportPath)
-----------------------------------------------------------------------------------------------------------------------
Δεδομένα:
PathABC¨Ο φάκελος ABC που περιέχει τα αρχεία _a, _b κ.λ.π.
esdID: Ο σειριακός αριθμός της μηχανής
fmZno: Από αριθμό Z. Π.χ. "4" (προτιμάται string για να μην υπάρχει πρόβλημα με τον τρόπο φύλαξης των ακεραίων σε κάθε γλώσσα)
toZno: Έως αριθμό Z. Π.χ. "15"
parastCode: Ο ζητούμενος κωδικός παραστατικού της ΑΑΔΕ ή 00 που σημαίνει όλα τα παραστατικά.
reportPath: Ο πλήρης φάκελος και το όνομα αρχειου που θα περιέχει την αναφορά (CSV)


Απάντηση:
Πεδία 1: Error code
Πεδία 2:  OK ή περιγραφή του λάθους.


Error Codes:
0 	OK
4	Ο εκτυπωτής της ΕΑΦΔΣΣ χρειάζεται συντήρηση. Επικοινωνία με την τεχνική υποστήριξη
14	Busy
20  Απαιτείται έκδοση Ζ
23  Η ΕΑΦΔΣΣ χρησιμοποιείται από το πληκτρολόγιο
24  Γεμάτη ημέρα. Απαιτείται έκδοση Ζ
25  Τέλος χαρτιού στην ΕΑΦΔΣΣ. Προσθέστε χαρτί και πιέστε OK
27	Η ΦΜ δεν λειτουργεί. Επικοινωνία με την τεχνική υποστήριξη
28 	Η ΕΑΦΔΣΣ χρειάζεται συντήρηση. Επικοινωνία με την τεχνική υποστήριξη
29	Η ΦΜ γέμισε. Επικοινωνία με την τεχνική υποστήριξη
32  Πρόβλημα στην εσωτερική μπαταρία. Επικοινωνία με την τεχνική υποστήριξη
34  Η συσκευή δεν έχει γίνει reset.
35 	Εσωτερικό πρόβλημα RTC. Επικοινωνία με την τεχνική υποστήριξη
37 	Μη αναμενόμενη απάντηση από την ΕΑΦΔΣΣ


801 Λάθος αριθμός παραμέτρων στην απάντηση της ΕΑΦΔΣΣ.

901	Λάθος αριθμός παραμέτρων στην γραμμή e. Απαιτούνται 17 παράμετροι και βρέθηκαν ...
902	Λάθος απάντηση ημερομηνίας/ώρας από την συσκευή
903	Διαφορά ώρας μεγαλύτερη από 30 λεπτά, καλέστε τεχνικό
904 Υπάρχει μεταγενέστερη έκδοση Ζ.
905 Δεν βρέθηκαν εγγραφές για την αναφορά


Το recovery, μετά από reset τεχνικού γίνεται με την εφαρμογή που συμπεριλαμβάνεται doRecovery.exe

Η κλήση είναι πολύ απλή:

doRecovery [esdID] [PathABC]



