Skip to main content

Greece — myDATA / AADE

Research and design document for the Greek fiscalization adapter (greece-mydata). Phase-1 Mediterranean cluster country (pairs with Italy SDI/DC). Approximately 700K active VAT-registered businesses. €0 certification cost — TIN-based credentials, no X.509 PKI for the API itself.

Status: Research only. No adapter code in this commit. Target crate path: rust/adapters/greece/ (candidate name greece-mydata).

1. Regulatory scope

myDATA (Mydata — Παρακολούθηση Συναλλαγών, "Transaction Tracking") is the AADE (Ανεξάρτητη Αρχή Δημοσίων Εσόδων / Independent Authority for Public Revenue) digital platform for mandatory submission of business books and invoices.

Concept (Greek)EnglishRole
ΠαραστατικάInvoices / accounting documentsSales, expenses, credit/debit notes
ΧαρακτηρισμοίClassificationsE1/E3 income/expense category tags
ΣύνοψηSummary headerAggregate VAT/total per document
Αναλυτικές ΓραμμέςDetail linesPer-line breakdown (Type B only)
MARKUnique Registration MarkAADE-issued identifier per invoice
Χαρακτηρισμός ΣυναλλαγήςTransaction classificationIncome/expense category code
ΑΦΜ (AFM)Tax Identification Number9-digit VAT/business ID

Mandatory scope:

  • All Greek-resident issuers (legal persons + sole traders / freelancers).
  • All B2B, B2G, and B2C documents that are issued under Greek VAT law (Code of Books and Records — ΚΦΔ).
  • E-invoicing is not yet legally mandatory between B2B parties but is heavily incentivised (2 yr/3 yr extended statute of limitations, accelerated VAT refunds) and is being phased into mandatory status during 2026.

Submission tiers (per AADE Specifications v1.0.10 and POL provisions):

Issuer categoryChannelWindow
Cash-register / FIM (Φορολογικός Ηλεκτρονικός Μηχανισμός) — retailReal-time via FIM-A2AAt time of issue
Accredited e-invoicing provider (Πάροχος Ηλεκτρονικής Τιμολόγησης)Provider gateway → AADEWithin 24h of issue (EOD batch typical)
ERP (own integration via REST)Direct RESTWithin 1 month of issue (B2B), EOD for retail
Manual portal entrytimologio.aade.grSame as ERP

⚠️ Hardware constraint. Issuers in the FIM/cash-register category must use a certified ΦΗΜ device (Greece's tax-stamped fiscal printer/cash register family) for the issuing leg. Zyntem cannot fully serve this category without an ECR partner: the device itself signs the receipt with its own AADE-registered key and pushes a one-shot transmission. Our addressable market is ERP-direct, accredited-provider, and B2B/B2G e-invoicing — explicit non-goal: replace the FIM. (See §10 Open Questions.)

2. API surface

Two production environments + sandbox. All HTTPS REST/JSON envelopes around XML payloads.

EnvironmentBase URLNotes
Sandboxhttps://mydata-dev.azure-api.net/Public dev environment, free subscription via developer portal
Productionhttps://mydatapi.aade.gr/myDATA/Live, requires production AFM-bound credentials
Provider sandboxhttps://mydataapidev.aade.gr/myDataProvider/For accredited e-invoicing providers

Sources: AADE myDATA developer portal (https://mydata-dev.azure-api.net/) and AADE Production Specs v1.0.10 (https://www.aade.gr/mydata).

Core endpoints

MethodPathPurpose
POSTSendInvoicesSubmit one or more InvoicesDoc (sales invoices, retail receipts, credit/debit notes)
POSTCancelInvoiceCancel a previously transmitted invoice by MARK
GETRequestTransmittedDocsPull invoices the issuer has previously transmitted (idempotency / reconciliation)
GETRequestDocsPull invoices where the caller is the counter-party (received)
POSTSendIncomeClassificationApply income classification (E3 codes) to issued invoices
POSTSendExpensesClassificationApply expense classification (E1/E3 codes) to received invoices
POSTSendPaymentMethodReport cash/card/credit payment method per invoice
POSTSendBookKeepingEntriesSend accounting book entries for accounting-period reporting
POSTRequestMyExpensesPull received-side expenses (counter-party view)
POSTSendInvoiceCharacterizationUpdate invoiceType/category on transmitted invoices

Common query parameters for Request*Docs: mark (>=, paging cursor), dateFrom, dateTo, entityVatNumber, nextPartitionKey + nextRowKey (continuation). All collection responses paginate.

Wire format

  • Request / response body: XML, Content-Type: application/xml, Accept: application/xml.
  • All payloads are typed by AADE-published XSDs (see §4).
  • Responses (success + error) use <ResponseDoc> envelopes with <response> elements per submitted invoice.

3. Authentication

Key thesis-relevant fact: myDATA does not require X.509 client certificates. A pair of HTTP headers is sufficient. We've cross-checked this against AADE's developer portal API definition, the production specs PDF, and accredited-provider documentation — confirmed at production-grade volumes (provider TPS limits apply via Azure APIM, not certificate provisioning).

HeaderSourceMeaning
aade-user-idTaxisNet username — for ERPs the dedicated myDATA REST API user spawned via myaade.gov.gr → Manage Web Services Authentication UsersIdentifies the calling subject
Ocp-Apim-Subscription-Key (sandbox) / Subscription-Key (production)Azure APIM subscription key from AADE developer portalAuthorises the channel

Notes:

  • The aade-user-id is not the AFM. It is a TaxisNet sub-account explicitly created for API use, with its own password used to derive the subscription key.
  • Per-AFM scope: the sandbox subscription is bound to the developer's AADE account; production is bound to the issuer's AFM (or, for accredited providers, to the provider's AFM with downstream "on-behalf-of" semantics).
  • Provider on-behalf-of: when an accredited provider transmits for clients, the same headers are used and the issuer's AFM is carried in the payload (<issuer><vatNumber>). AADE separates provider-channel traffic by URL (/myDataProvider/).

Provider vs ERP path

PathHeadersEndpoint baseWho paysThroughput
Direct ERPaade-user-id of the AFM/myDATA/IssuerPer-AFM APIM quota (default modest; raise via AADE)
Accredited provideraade-user-id of the provider/myDataProvider/ProviderHigher per-AFM via provider quota; provider is liable for transmission

Zyntem's launch path is direct ERP. Becoming an accredited provider unlocks (a) higher quotas and (b) the legal-statute-of-limitations incentive for issuers, and is a deliberate Phase-2 milestone (separate licence).

4. Payload shape

Schema family

myDATA payloads are AADE-proprietary XML. They are not UBL / EN 16931 (a frequent surprise for adapters that have UBL pipelines). The root types are:

XSD rootPurposeXSD file
<InvoicesDoc>Container for one or more invoicesInvoicesDoc-v1.0.10.xsd
<RequestedDoc>Response payload for RequestDocs/RequestTransmittedDocsRequestedDoc-v1.0.10.xsd
<ResponseDoc>Per-invoice ack/error responseResponseDoc-v1.0.10.xsd
<IncomeClassificationsDoc>Income classification batchIncomeClassificationsDoc.xsd
<ExpensesClassificationsDoc>Expense classification batchExpensesClassificationsDoc.xsd
<PaymentMethodsDoc>Payment method ledgerPaymentMethodsDoc.xsd
<BookKeepingEntriesDoc>Accounting book entriesBookKeepingEntriesDoc.xsd

The shared base type is published as mydata-v1.0.10.xsd. All invoice schemas import this base.

Greek namespaces: xmlns="http://www.aade.gr/myDATA/invoice/v1.0", icls="http://www.aade.gr/myDATA/incomeClassificaton/v1.0", ecls="http://www.aade.gr/myDATA/expensesClassificaton/v1.0". (Note: Classificaton is misspelled in the official namespace URI — this is a known AADE quirk and must not be corrected in the wire format.)

<invoice> skeleton

<InvoicesDoc xmlns="http://www.aade.gr/myDATA/invoice/v1.0">
<invoice>
<issuer>
<vatNumber>123456789</vatNumber>
<country>GR</country>
<branch>0</branch>
</issuer>
<counterpart>
<vatNumber>987654321</vatNumber>
<country>GR</country>
<branch>0</branch>
</counterpart>
<invoiceHeader>
<series>A</series>
<aa>1024</aa>
<issueDate>2026-04-26</issueDate>
<invoiceType>1.1</invoiceType> <!-- See §4.1 -->
<currency>EUR</currency>
</invoiceHeader>
<paymentMethods>
<paymentMethodDetails>
<type>3</type> <!-- 3 = Cash / 5 = Card / 4 = Bank wire ... -->
<amount>124.00</amount>
</paymentMethodDetails>
</paymentMethods>
<invoiceDetails>
<lineNumber>1</lineNumber>
<netValue>100.00</netValue>
<vatCategory>1</vatCategory> <!-- 1 = 24% / 2 = 13% / 3 = 6% / 7 = 0% / 8 = sundry / 5 = exempt -->
<vatAmount>24.00</vatAmount>
<incomeClassification>
<icls:classificationType>E3_561_001</icls:classificationType>
<icls:classificationCategory>category1_3</icls:classificationCategory>
<icls:amount>100.00</icls:amount>
</incomeClassification>
</invoiceDetails>
<invoiceSummary>
<totalNetValue>100.00</totalNetValue>
<totalVatAmount>24.00</totalVatAmount>
<totalWithheldAmount>0.00</totalWithheldAmount>
<totalFeesAmount>0.00</totalFeesAmount>
<totalStampDutyAmount>0.00</totalStampDutyAmount>
<totalOtherTaxesAmount>0.00</totalOtherTaxesAmount>
<totalDeductionsAmount>0.00</totalDeductionsAmount>
<totalGrossValue>124.00</totalGrossValue>
<incomeClassification>
<icls:classificationType>E3_561_001</icls:classificationType>
<icls:classificationCategory>category1_3</icls:classificationCategory>
<icls:amount>100.00</icls:amount>
</incomeClassification>
</invoiceSummary>
</invoice>
</InvoicesDoc>

4.1 invoiceType taxonomy (subset)

CodeDescription
1.1Sales invoice (B2B / B2G)
1.2Sales invoice / intra-community supply
1.3Sales invoice / third-country export
1.4Credit invoice (associated)
1.5Credit invoice (non-associated)
1.6Self-billed sales invoice
2.1Services rendering invoice
2.2Intra-community services
2.3Third-country services
2.4Self-billed services
3.1Title of acquisition (non-tax-liable seller)
3.2Title of acquisition (paragraph 5, art. 39a)
5.1Credit note — associated
5.2Credit note — non-associated
6.1Self-billing accounting record
6.2Self-billing accounting record (returns)
7.1Contract — income
8.1Rents — income
8.2Special record — duty/levy/etc.
8.4Provider's stranded supplies
11.1AADE retail receipt (B2C cash register, FIM only)
11.2AADE simplified retail receipt
11.3AADE retail receipt — credit
11.4AADE retail receipt — sales return
11.5AADE retail receipt — invoice for services
13.1Expense — domestic / abroad — services
14.1–14.5Foreign-issuer documents
15.1Service receipt evidence
16.1Lottery winnings settlement
17.xSelf-issued / contractor documents

(Full taxonomy in mydata-v1.0.10.xsd → InvoiceType.)

4.2 vatCategory taxonomy

CodeVAT rate / meaning
124% (standard)
213% (reduced — food, hotels, certain agriculture)
36% (super-reduced — medicines, books, newspapers, theatre)
417% (mainland reduced — historical / island reduced rates)
59% (special)
64% (special)
70% (zero-rated — exports)
8"Records without VAT" (off-VAT-scope)

VAT exemption reasons (vatExemptionCategory 1–31) cover EU intra-community, exports, exempt healthcare, etc. Required when vatCategory is 7 or 8.

4.3 Classifications

Per-line and per-document classifications are mandatory for Type B. Code shape E3_xxx_yyy for income (E3 form lines) and E1/E3 for expenses. classificationCategory enumerates category1_1category1_95 and category2_1 …. Classifications can be deferred (omitted on SendInvoices, sent later via SendIncomeClassification / SendExpensesClassification).

4.4 Type A vs Type B

AspectType A — issuer-only summaryType B — full book entries
Submitting partyIssuerIssuer and counterpart (separate flows)
DetailSummary block only (<invoiceSummary>)Full line breakdown + classifications
Use caseDomestic B2C, retail, simplified receiptsB2B, B2G, expense classifications
invoiceType examples11.x, 8.x1.x, 2.x, 5.x
Can be auto-classifiedYes (income side)No (counterpart must classify expenses)
Submission windowReal-time / EODSame as A but classification can defer up to month-end

Implication for our prepare / submit flow: Type A → single submission, no counterpart wait. Type B → primary SendInvoices returns MARK, then a two-leg flow: (a) issuer's SendIncomeClassification, (b) counterpart's SendExpensesClassification. We model this as submit_primarysubmit_classification (issuer) and a passive accept for received-side classification posted by counterparts. See §10 OQ-1.

5. Ordering / sequencing

myDATA assigns identity at three layers:

  1. Issuer-side identity (we control)<series> + <aa> (αα = αύξων αριθμός, sequential number). series is alphanumeric (1-50 chars, AADE recommends short codes per branch/POS), aa is a 1-50 digit sequential per series. Series + aa MUST be unique per AFM.
  2. Submission-side identity (we control)<invoiceMark> is only present on responses; we do not send it. Our SDK generates a per-call UUID for retry-correlation but it is not transmitted.
  3. AADE identity (server returns)<MARK>: 64-bit unsigned integer, monotonically increasing per AADE, returned in <ResponseDoc> per accepted invoice. This is the audit handle for cancellations, classifications, and counter-party retrieval.

Authentication code

AADE also assigns:

  • <authenticationCode> — SHA-1(MARK + issuer AFM + transmission timestamp), used as a tamper-evidence anchor (mostly for B2C/QR purposes).
  • <UID> — issuer-side correlation UID (we may set it, otherwise AADE generates).

Cash-register stamp (FIM only)

For invoiceType 11.x submitted by a FIM device, <fuelInvoice>/<currentBalance>/<RTSTransmissionDetails> carry the device's local sequence + signature. Out of scope for Zyntem launch (see hardware constraint, §1).

Idempotency

  • AADE does NOT honour client idempotency keys. Retransmitting a series+aa returns error 408 (already submitted) or 415 (validation differs). Our adapter must maintain a local submission_status per (afm, series, aa) and avoid re-SendInvoices after a 200.
  • For network-flake recovery, query RequestTransmittedDocs?mark=<lastSeenMark> to discover whether a previously-failed POST actually persisted.

6. Submission window

Document familyHard deadline (per AADE specs §10 + POL)Practical window we target
Retail / FIM (11.x)Real-time at issue (≤ ~minutes) — FIM device pushn/a (not in Zyntem direct scope)
ERP-issued sales invoices (1.x, 2.x)End of next month (T+1 month)EOD batch (T+0) — well inside the deadline
Credit / debit notes (5.x)Same as 1.xEOD batch
Self-billing (1.6, 2.4)T+1 monthEOD batch
Expense classificationEnd of accounting periodWeekly or monthly batch
Income classificationEnd of accounting periodWeekly or monthly batch
CancellationsWithin statutory amendment window (typically same fiscal year)Best-effort same-day

Provider-channel issuers must transmit within 24 hours. If we run as accredited provider in Phase-2, our SLO becomes 24h.

7. Sandbox access

  1. Create AADE developer account at the myDATA developer portal (https://mydata-dev.azure-api.net/). The account uses a TaxisNet credential pair (developer's personal AFM is sufficient for sandbox).
  2. Subscribe to the myDATA REST API product. AADE issues a free Azure APIM subscription key (visible under "Profile → Subscriptions").
  3. Create a sandbox aade-user-id by signing in to https://www1.aade.gr/saadeapps2/bookkeeper-web/ and provisioning a "myDATA Web Services Authentication User". This is independent of the live TaxisNet identity.
  4. Headers: aade-user-id: <sandbox-user>, Ocp-Apim-Subscription-Key: <key>.
  5. First call: GET RequestTransmittedDocs?dateFrom=2026-04-01&dateTo=2026-04-26. A successful 200 with empty <RequestedDoc> confirms wiring.
  6. Sandbox AFMs: AADE provides public test AFMs (e.g., 123456789, 987654321, 094149139) — no real-PII risk.

Sandbox quota: ~60 RPM per subscription (Azure APIM default). Production quotas are negotiated per AFM.

Recorded round-trip

A canonical sandbox round-trip is captured in testdata/conformance/greece/mydata/sandbox/round-trip-b2b-td01.md (request body, headers redacted, response body). Live-credential capture is gated behind a Mayor-approved sandbox account (tracked in fi-fjm sibling). The committed example is structurally accurate but synthesised from AADE's published Postman collection — it has not yet been executed end-to-end. See §10 OQ-3.

8. Error model

AADE returns <ResponseDoc> envelopes with one <response> per submitted invoice. Each <response> carries either:

<response>
<index>1</index>
<invoiceUid>1A2B...</invoiceUid>
<invoiceMark>400000123456789</invoiceMark>
<authenticationCode>...sha1...</authenticationCode>
<statusCode>Success</statusCode>
</response>

…or:

<response>
<index>1</index>
<statusCode>ValidationError</statusCode>
<errors>
<error>
<message>VAT category and rate are not consistent</message>
<code>215</code>
</error>
</errors>
</response>

Status outcomes

statusCodeMeaningAdapter mapping
SuccessAccepted, MARK assignedSubmitted
XMLSyntaxErrorXML malformedRejectedClient (do not retry without re-build)
ValidationErrorSchema-pass, business-rule failRejectedClient (operator action)
TechnicalErrorAADE-internalRejectedTransient (retry with backoff)

Quarantined-with-warnings

Some validations return Success plus <errors> with code-class warning — the invoice is registered (MARK issued) but flagged. We map these to SubmittedWithWarnings (still acceptable, surface in dashboard; do not auto-resubmit).

Notable error codes

CodeMeaning
102Counterpart AFM not registered with AADE
138Series + aa already submitted
215VAT amount inconsistent with category × net
217Classification category not allowed for invoiceType
408Duplicate transmission (use RequestTransmittedDocs to recover MARK)
415Submitted invoice differs from previously-submitted one with same series/aa
500–599AADE technical (retryable)

A complete code table is published as Annex IV of the AADE specs PDF; mirrored at testdata/conformance/greece/mydata/sandbox/error-codes.md.

9. Crate layout (proposal)

Candidate crate name: greece-mydata, located at rust/adapters/greece/. Workspace registration: add to [workspace]/members in rust/Cargo.toml.

rust/adapters/greece/
├─ Cargo.toml
├─ src/
│ ├─ lib.rs // pub use re-exports; impls `Adapter` trait from `core`
│ ├─ config.rs // GreeceConfig: afm, branch, subscription_key, aade_user_id, env, type_a_or_b
│ ├─ client.rs // reqwest async client; auth headers; retry/backoff (TechnicalError)
│ ├─ xml/
│ │ ├─ mod.rs // serde-xml-rs envelope serialise/deserialise
│ │ ├─ invoices_doc.rs // <InvoicesDoc> + <invoice> tree
│ │ ├─ response_doc.rs // <ResponseDoc> parsing
│ │ ├─ requested_doc.rs // <RequestedDoc> parsing (for retrieval / reconciliation)
│ │ ├─ income_class.rs // <IncomeClassificationsDoc>
│ │ └─ expenses_class.rs // <ExpensesClassificationsDoc>
│ ├─ codes/
│ │ ├─ mod.rs // pub re-exports
│ │ ├─ invoice_type.rs // enum InvoiceType (1.1, 2.1, 5.1, 11.x, ...)
│ │ ├─ vat_category.rs // enum VatCategory (1..=8) + exemption reasons
│ │ ├─ payment_type.rs // enum PaymentType (1=banking, 2=card, 3=cash, ...)
│ │ └─ classification.rs // E3_xxx_yyy code enum + category enum
│ ├─ flow.rs // prepare(); submit_primary(); submit_classification(); cancel(); pull()
│ └─ errors.rs // AadeStatus enum + Code(u16) + maps to core::AdapterError
└─ tests/
├─ golden_b2c.rs // verifies XML matches testdata golden
├─ golden_b2b_service.rs
├─ golden_credit_note.rs
├─ golden_expense_class.rs
├─ golden_multi_vat.rs
└─ golden_cancellation.rs

Trait fit

The Greek flow maps cleanly onto the existing Adapter trait (core::Adapter) — proposal:

impl Adapter for GreeceMyDataAdapter {
type PrepareOut = InvoicesDoc; // Pure XML; no signature pass needed
type SubmitOut = AadeMark; // newtype around u64 MARK
type Receipt = AadeReceipt; // MARK + auth code + warnings

async fn prepare(&self, tx: &Transaction) -> Result<InvoicesDoc>;
async fn submit (&self, doc: InvoicesDoc) -> Result<AadeMark>;
async fn fetch_receipt(&self, m: AadeMark) -> Result<AadeReceipt>;
async fn cancel(&self, m: AadeMark, reason: CancelReason) -> Result<()>;
}

For Type B classification flow, we introduce Adapter::PostSubmitHook (already present for IT-DC pairing) and run SendIncomeClassification async-after SendInvoices. No new trait surface required.

Config shape

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct GreeceConfig {
pub afm: String, // 9 digits
pub branch: u16, // 0 = HQ
pub legal_name: String,
pub aade_user_id: String, // sandbox or live web-services user
pub subscription_key: SecretString, // Azure APIM key (zeroize-on-drop)
pub env: GreeceEnv, // Sandbox | Production | ProviderSandbox | ProviderProd
pub document_class: DocumentClass, // TypeA | TypeB
pub default_series: String, // Default invoice <series>
}

pub enum GreeceEnv { Sandbox, Production, ProviderSandbox, ProviderProduction }
pub enum DocumentClass { TypeA, TypeB }

Credentials loaded via the same CertStore analogue that Spain/Italy use today; for Greece the "cert store" degenerates to a kv-secret store (no X.509). This is a simplification vs. peers.

Test approach

  • Reuse existing testdata/conformance/<country>/golden/*.json + *.xml + *.meta.json triplet pattern (see Italy SDI).
  • Sandbox round-trip captured under sandbox/ and replayed via wiremock-backed integration test.

10. Open questions

IDQuestionOwnerNotes
OQ-1Type A → Type B promotion semantics: if an issuer config flips mid-month, do we replay outstanding invoices?mayor + adapter devAADE allows late classification; we likely model it as "always emit Type B and let counterpart pull"; needs alignment with core::Transaction::Metadata shape.
OQ-2Provider mode (Phase-2): becoming an accredited e-invoicing provider unlocks 24h-deadline incentives but adds liability. Schedule?mayorDecision needed before EOY 2026.
OQ-3Live-sandbox credential provisioning: who owns the mydata-dev developer account (Zyntem corp AFM vs. team account)?mayor / opsTracked under fi-fjm sibling. The committed sandbox/ file is structurally derived; replay against live sandbox is gated on this.
OQ-4FIM (11.x) coverage: do we partner with an ECR vendor (e.g., Casio, ICS, Algotech) to expose FIM-issued retail receipts via myDATA, or do we exclude retail B2C cash-register entirely and stay ERP-only?strategyHardware-constraint trade-off; Zyntem's wedge is API-first.
OQ-5Counterpart classification: when our customer is a foreign AFM (intra-EU), expense-side classification is the foreign issuer's job under their own regime — we should NOT auto-emit SendExpensesClassification. Confirm flow.adapter devCross-border treatment, AADE specs §6.
OQ-6Cancellation grace period: AADE allows cancellation by MARK only within the statutory amendment window. After window expiry, must use credit note (5.1/5.2). Confirm we surface this distinction in our cancel() API.adapter devAffects SDK error contract.
OQ-7XSD versioning: AADE bumps mydata-v*.xsd 2–3×/year (current v1.0.10, prior v1.0.9, v1.0.8). Decide pinning + upgrade cadence (likely "vendor-and-bump-via-PR").adapter devMirrors how we treat FatturaPA XSDs.
OQ-8UTF-8 vs UTF-16 wire encoding: AADE accepts both but Greek-character handling differs in escaping. Pick UTF-8 + xml-encoded entities; verify AADE round-trip preserves Σύνοψη accents.adapter devAffects line-description handling.
OQ-9Sole-trader self-employed (ελεύθερος επαγγελματίας) vs corporate AFM: same API surface, but different vatRegime codes on <invoiceHeader>. Validate matrix vs. our LegalForm enum.adapter devMinor schema mapping.
OQ-10Throughput SLOs: Azure APIM default per-subscription quota is undocumented (anecdotally ~60 RPM); raising it requires AADE ticket. Need committed numbers before quoting B2B SLAs.mayor / opsAffects pricing & batch design.

Reference URLs

AADE official:

Auxiliary:

Citations are mirrored at testdata/conformance/greece/mydata/sandbox/sources.md for traceability.


Change log

DateVersionDescriptionAuthor
2026-04-261.0Initial research document — myDATA API, AADE InvoicesDoc payload, Type A/B flow, crate layout greece-mydata, 10 open questions.dementus (Polecat)