Eesti e-arve on määruses "Masintöödeldava algdokumendi juhendi kehtestamine" kirjeldatud standardile vastav struktureeritud XML tekstifail. Failis on sama info, mis tavalisel arvel, kuid masinloetavalt, nii et erinevad raamatupidamisprogrammid ja -süsteemid saavad teineteise arvetest ühtmoodi aru. Eesti e-arve formaadi arendus on täna Eesti Infotehnoloogia ja Telekommunikatsiooni Liidu e-arve toimkonnas. E-arve erinevate versioonide spetsifikatsioonid ja XML skeemid leiad allpoolt.

E-arve standard saatmist ei käsitle, kuid Eestis on selleks kujunenud operaatorid (nagu Billberry) ja operaatorvõrgustik, kes edastavad e-arve saajale registrinumbri alusel. Tehniliselt saab e-arveid edastada ka meilitsi või muude protokollide kaudu, kui osapooled nii kokku on leppinud. Lihtsam on aga e-arveid saata läbi operaatorite, sest ettevõtete raamatupidamissüsteemid kipuvad olema operaatoritega juba integreeritud. Billberryga saab näiteks e-arveid tasuta saata, olgu siis läbi veebiliidese või arvutisüsteemist läbi masinliidese (API).

Alt leiad e-arve standardi lühikirjelduse, juhuks kui soovid e-arveid ise genereerida (näiteks automatiseerida arvete saatmine e-poe või muu veebiteenuse jaoks). Raamatupidajana on sul tõenäoliselt lihtsam genereerida e-arve oma raamatupidamisprogrammiga, kuid arendajatele ei tohiks e-arve genereerimine raskusi valmistada. Arve saatmise dokumentatsiooni leiad Billberry arendajate juhiste lehelt.

E-arve XML

Nagu mainitud, on Eesti e-arve XML formaadis. E-arve XML elementidel puudub namespace, ehk erinevalt paljudest teistest XML-põhistest formaatidest pole vaja juurelemendile <E_Invoice> xmlns atribuute määrata.

E-arvel pole kahjuks standardiseeritud MIME tüüpi (nt HTTP Content-Type päise jaoks). Veebis või meiliga saates tuleks seega kasutada üldist XMLi MIME tüüpi application/xml.

Piirdudes põhifunktsionaalsusega, ei ole e-arve XMLi koostamine keeruline. Näiteks minimaalne ja vaid kohustuslike väljadega e-arve näeb välja selline:

<?xml version="1.0" encoding="UTF-8" ?>
<E_Invoice>
  <Header>
    <Version>1.2</Version>
    <Date>2021-06-18</Date>
    <FileId>aa949b90e0bd214c</FileId>
  </Header>

  <Invoice
    invoiceId="INV123456"
    regNumber="70000272"
    sellerRegnumber="70004502"
  >
    <InvoiceParties>
      <SellerParty>
        <Name>Kaitseministeerium</Name>
        <RegNumber>70004502</RegNumber>
      </SellerParty>

      <BuyerParty><Name>Rahandusministeerium</Name></BuyerParty>
    </InvoiceParties>

    <InvoiceInformation>
      <Type type="DEB" />
      <DocumentName>Arve</DocumentName>
      <InvoiceNumber>1337</InvoiceNumber>
      <InvoiceDate>2021-06-18</InvoiceDate>
    </InvoiceInformation>

    <InvoiceSumGroup>
      <TotalSum>13.37</TotalSum>
    </InvoiceSumGroup>

    <InvoiceItem>
      <InvoiceItemGroup>
        <ItemEntry>
          <Description>Üks kalakarp</Description>
        </ItemEntry>
      </InvoiceItemGroup>
    </InvoiceItem>

    <PaymentInfo>
      <Currency>EUR</Currency>
      <PaymentDescription>Invoice 1337 payment</PaymentDescription>
      <Payable>YES</Payable>
      <PayDueDate>2021-07-10</PayDueDate>
      <PaymentTotalSum>12.66</PaymentTotalSum>
      <PayerName>Rahandusministeerium</PayerName>
      <PaymentId>1337</PaymentId>
      <PayToAccount>EE909900123456789012</PayToAccount>
      <PayToName>Kaitseministeerium</PayToName>
    </PaymentInfo>
  </Invoice>

  <Footer>
    <TotalNumberInvoices>1</TotalNumberInvoices>
    <TotalAmount>12.66</TotalAmount>
  </Footer>
</E_Invoice>

Lae minimaalse e-arve XML alla

Detailsema e-arve spetsifikatsiooni ja XML-skeemi leiad lehe lõpust, kuid tutvustuseks vaatame läbi e-arve erinevad osad ning levinumad elemendid, mida tõenäoliselt läheb kõigil e-arvetel tarvis.

Oluline on meeles pidada, et e-arve XML skeem määrab elementidele kindla järjekorra. Olgugi, et eksisteerib vaid üks operaator, kes järjestust kontrollib, tasub seda kindluse mõttes järgida. Parimal juhul saad vigast arvet saates kohe veateate. Halvimal juhul läheb e-arve mõne operaatori või raamatupidamisteenuse süsteemis lihtsalt kaduma.

E-arve fail (<E_Invoice>)

E-arve XMLi juurelemendiks on <E_Invoice>, mida edaspidi kutsun "e-arve failiks", et eristada seda individuaalsetest arvest. Arved (<Invoice> elemendid) asuvad juurelemendi sees, päise <Header> ja jaluse <Footer> vahel. E-arveid ehk <Invoice> elemente võib olla üks või enam, kuid töötlemise lihtsustamiseks tasub piirduda ühega. Igas situatsioonis ei pruugi olla mitme arve importimine toetatud.

Päis ja jalus genereeritakse e-arve edastuse käigus tavaliselt operaatorite poolt uuesti, nii et ei tasu loota, selles leiduv info saajani jõuab.

Päis (<Header>)

Päises on kohustuslikud vaid kolm välja — e-arve standardi versioon, faili genereerimise kuupäev ja faili identifikaator. Viimane on teoorias duplikaatfailide tuvastamiseks, kuid nagu mainitud, operaatorid genereerivad päise edasi saates uuesti ja sellega ka <FileId>. Kuigi kõige uuem e-arve standard kannab versiooninumbrit 1.2.EN, tuleb e-arve faili versiooniks määrata 1.2.

<Header>
  <Version>1.2</Version>
  <Date>2021-06-18</Date>
  <FileId>aa949b90e0bd214c</FileId>
</Header>

Faili identifikaatori pikkus on piiratud 20 tähemärgiga, nii et UUID kasutamine juhuslikuks identifikaatoriks pole võimalik. Kuna operaator genereerib e-arvet edasi saates e-arve faili ja identifikaatori uuesti, siis ei pea ka muretsema, et esialgne identifikaator oleks maailmas unikaalne. Tavaliselt kontrollivad süsteemid e-arve faili unikaalsust saatja kontekstis — erinevad saatjad võivad kasutada samu faili identifikaatoreid.

Üks vabatahtlik väli, mida soovitan päisele juurde lisada, on <AppId> — e-arve genereerinud rakenduse/süsteemi nimi ja versioon. Nii saab vajaduse korral hiljem välja selgitada, mis tarkvara arve genereeris.

<AppId>Moneybooks v1.35</AppId>

Olgugi, et täna ei pruugi kõik operaatorid <AppId>-d alles hoida, tasub ta arve failile lisada olukordadeks, kus e-arve liigub väljaspool operaatoritevõrgustikku või läbi operaatorite, mis tunnust säilitavad. Billberry näiteks edastab e-arve esialguse <AppId> ka teistele operaatoritele.

E-arve (<Invoice>)

Arveid võib e-arve failis olla üks või enam. Iga arve saaja ja müüja registrinumber on märgitud <Invoice> elemendi atribuudina — vastavalt regNumber ja sellerRegnumber. Nende põhjal kontrollivad operaatorid edastusõigust ja suunavad arve saajani. Arve saaja ei pruugi alati olla ostja — näiteks kui arve läheb raamatupidamisfirmale. Arve identifikaator invoiceId peaks olema e-arve faili sees unikaalne, kuid unikaalsus väljaspoole ühte faili ei tundu olevat operaatorite või süsteemide poolt nõutud.

<Invoice
  invoiceId="INV123456"
  regNumber="70000272"
  sellerRegnumber="70004502"
>

Osapoolte kontaktandmed

E-arve erinevate osapoolte kontaktandmed on kirjeldatud <InvoiceParties> elemendis. Peale kohustusliku <SellerParty> ja <BuyerParty> võib seal esineda veel neli osapoolt.

<InvoiceParties>
ElementKirjeldus
<SellerParty>Müüja
<BuyerParty>Ostja
<RecipientParty>Arve saaja, kui erineb ostjast. Näiteks raamatupidamisfirma.
<DeliveryParty>Kauba sihtpunkt
<PayerParty>Arve eest tasuja
<FactorParty>Arve faktoorija

<Invoice> elemendi sellerRegnumber atribuut peaks olema võrdne <SellerParty> <RegNumber> elemendiga. <Invoice> elemendi regNumber (saaja) atribuut peaks võrduma vähemalt ühe teise <*Party> elemendi <RegNumber> elemendiga. Ilma ei pruugi mõni operaator arvet vastu võtta.

<SellerParty>
  <Name>Kaitseministeerium</Name>
  <RegNumber>70004502</RegNumber>
</SellerParty>

Peale kohustusliku <Name> ja <RegNumber> välja võivad kasulikuks osutuda ka käibemaksukohustuslase number <VATRegNumber>, kontaktandmed <ContactData> ja pangaandmed <AccountInfo>.

<SellerParty>
  <Name>Kaitseministeerium</Name>
  <RegNumber>70004502</RegNumber>
  <VATRegNumber>EE10031337</VATRegNumber>

  <ContactData>
    <PhoneNumber>+3725123456</PhoneNumber>
    <E-mailAddress>info@example.com</E-mailAddress>

    <LegalAddress>
      <PostalAddress1>Narva mnt 1</PostalAddress1>
      <City>Tallinn</City>
      <PostalCode>10123</PostalCode>
      <Country>EE</Country>
    </LegalAddress>
  </ContactData>

  <AccountInfo>
    <AccountNumber>123456789012</AccountNumber>
    <IBAN>EE909900123456789012</IBAN>
    <BIC>EEUHEE2X</BIC>
    <BankName>SEB Pank AS</BankName>
  </AccountInfo>

  <AccountInfo>
    <AccountNumber>123456789013</AccountNumber>
    <IBAN>EE909900123456789013</IBAN>
    <BIC>HABAEE2X</BIC>
    <BankName>Swedbank AS</BankName>
  </AccountInfo>
</SellerParty>

Üks pangakontonumber esineb hiljem ka <PaymentInfo> elemendis, kuid <AccountInfo> elemendis saab neid loetleda mitu — olukorras, kus müüjal on konto mitmes pangas.

Üldinfo

Peale osapooli tuleb <InvoiceInformation> element arve üldinfoga.

<InvoiceInformation>
  <Type type="DEB" />
  <DocumentName>Arve</DocumentName>
  <InvoiceNumber>1337</InvoiceNumber>
  <InvoiceDate>2021-06-18</InvoiceDate>
</InvoiceInformation>

<Type> määrab, kas tegemist on deebit- (DEB) või kreeditarvega (CRE). Kreeditarve puhul võib <Type> elemendi sisse lisada ka viite alusarvele <SourceInvoice>. Mingil põhjusel on alusarvele viitamiseks antud vaid 20 tähemärki, samas kus arve numbriks on lubatud kuni 100 tähte.

<Type type="DEB">
  <SourceInvoice>N123</SourceInvoice>
</Type>

Arve number ei pea olema vaid number, vaid võib olla vabas vormis tekst, maksimaalselt 100 tähemärgiga. Arve kuupäev on ISO 8601 formaadis ehk YYYY-MM-DD.

Arve "nimi" ehk <DocumentName> on samuti vabas vormis tekst. Mõeldud on see ilmselt eritüüpi arvete (nagu "arve-saateleht") paremaks nimetamiseks, kuid pole kindel, kas peale Billberry erinevad teenused/raamatupidamisprogrammid ka arve nime kuskil kuvavad. Enamikele piisaks arvetüübi (<Type>) määramisest, kuid kuna <DocumentName> on kohustuslik element, tasub sinna "Arve" sisestada.

Teistest lubatud väljadest on ilmselt kõige kasulikumad maksetähtaeg, viivis ja viitenumber.

<InvoiceInformation>
ElementKirjeldus
<Type>Deebitarve või kreeditarve
<DocumentName>Arve nimi
<InvoiceNumber>Arve number
Kajastub hiljem ka <PaymentInfo> elemendis.
<PaymentReferenceNumber>Viitenumber.
Kajastub hiljem ka <PaymentInfo> elemendis.
<InvoiceDate>Arve kuupäev ISO 8601 formaadis ehk YYYY-MM-DD
<DueDate>Maksetähtaeg ISO 8601 formaadis ehk YYYY-MM-DD.
Kajastub hiljem ka <PaymentInfo> elemendis.
<FiteRatePerDay>Viiviseprotsent päevas
<Period>Arve periood. Kasulik neile, kes esitavad arveid igakuiselt.
<InvoiceInformation>
  <Type type="DEB" />
  <DocumentName>Arve</DocumentName>
  <InvoiceNumber>1337</InvoiceNumber>
  <PaymentReferenceNumber>313373</PaymentReferenceNumber>
  <InvoiceDate>2021-06-18</InvoiceDate>
  <DueDate>2021-07-10</DueDate>
  <FineRatePerDay>2</FiteRatePerDay>

  <Period>
    <StartDate>2021-05-01</StartDate>
    <EndDate>2021-05-31</EndDate>
  </Period>
</InvoiceInformation>

Summa

Arve summa, maksude ja kliendi saldoga seotud info kajastub <InvoiceSumGroup> elemendis.

<InvoiceSumGroup>
  <TotalSum>13.37</TotalSum>
</InvoiceSumGroup>

Kuigi kohustuslik on sinna lisada vaid lõppsumma <TotalSum>, tasub välja tuua ka netosumma, käibemaks ja valuuta.

<InvoiceSumGroup>
ElementKirjeldus
<Balance>Kliendi saldo
<InvoiceSum>Netosumma ehk arve ridade <ItemEntry> <ItemSum> elementide summa.
<PenaltySum>Viivise summa
<Addition>Soodustused
<VAT>Käibemaks
<TotalSum>Arve brutosumma ehk summa koos maksudega.
<TotalToPay>Tasumisele kuuluv summa. Näiteks kui klient pole tasunud ka eelmist arvet.
<Currency>Valuuta ISO 4217 standardi järgi.
<InvoiceSumGroup>
  <Balance>
    <BalanceDate>2021-06-18</BalanceDate>
    <BalanceEnd>-11.15</BalanceEnd>
  </Balance>

  <InvoiceSum>11.15</BalanceEnd>
  <PenaltySum>0.50</PenaltySum>

  <Addition>
    <AddContent>Püsikliendi soodustus</AddContent>
    <AddSum>-3.50</AddSum>
  </Addition>

  <VAT>
    <VATRate>20</VATRate>
    <VATSum>2.23</VATSum>
  </VAT>

  <TotalSum>13.37</TotalSum>
  <TotalToPay>25.02</TotalToPay>
  <Currency>EUR</Currency>
</InvoiceSumGroup>

Arve read

Arve read — müüdud kaubad või teenused — kajastuvad <InvoiceItem> elemendis asuvates gruppides <InvoiceItemGroup>.

<InvoiceItem>
  <InvoiceItemGroup>
    <ItemEntry>
      <Description>Üks kalakarp</Description>
    </ItemEntry>
  </InvoiceItemGroup>
</InvoiceItem>

Igal e-arvel peab olema vähemalt üks arve rida <ItemEntry>. Arve real on ainsaks kohustuslikuks elemendiks kirjeldus <Description>, kuid sarnaselt arve summa elemendiga, tasuks täita ka neto- ja brutohinnad.

<ItemEntry>
ElementKirjeldus
<Description>Kauba või teenuse kirjeldus
<ItemDetailInfo>Ühik, kogus ja tükihind. Võib olla mitu.
<ItemSum>Netosumma
<Addition>Soodustused
<VAT>Käibemaks
<ItemTotal>Brutosumma ehk summa koos maksudega
<ItemEntry>
  <Description>Kõnede maht</Description>

  <ItemDetailInfo>
    <ItemUnit>tk</ItemUnit>
    <ItemAmount>12</ItemAmount>
  </ItemDetailInfo>

  <ItemDetailInfo>
    <ItemUnit>sek</ItemUnit>
    <ItemAmount>15000</ItemAmount>
  </ItemDetailInfo>

  <ItemSum>9.94</ItemSum>

  <Addition>
    <AddContent>Püsikliendi soodustus</AddContent>
    <AddSum>-3.50</AddSum>
  </Addition>

  <VAT>
    <VATRate>20.00</VATRate>
    <VATSum>1.988</VATSum>
  </VAT>

  <ItemTotal>11.928</ItemTotal>
</ItemEntry>

Kuna e-arve toetab arve ridade <ItemEntry> grupeerimist, siis tuleb ka grupeerimist mittevajava arve puhul arve read siiski <InvoiceItemGroup> gruppi paigutada. Arve ridade grupeerimine on kasulik, kui on soov ühel arvel kajastada näiteks erinevate kasutajate kulutusi. Telefonifirmad grupeerivad nõnda e-arvel erinevate telefoninumbrite tehtud kulutusi — kõneminuteid, sõnumeid jne. Koos <GroupEntry> elemendiga, mis gruppi kirjeldab, näeks grupeerimine välja selliselt:

<ItemEntry>
  <InvoiceItemGroup groupId="5031337">
    <ItemEntry>
      <Description>Kõnede maht</Description>

      <ItemDetailInfo>
        <ItemUnit>tk</ItemUnit>
        <ItemAmount>12</ItemAmount>
      </ItemDetailInfo>

      <ItemDetailInfo>
        <ItemUnit>sek</ItemUnit>
        <ItemAmount>15000</ItemAmount>
      </ItemDetailInfo>

      <ItemSum>9.94</ItemSum>

      <VAT>
        <VATRate>20.00</VATRate>
        <VATSum>1.988</VATSum>
      </VAT>

      <ItemTotal>11.928</ItemTotal>
    </ItemEntry>

    <GroupEntry>
      <GroupDescription>Mobiiltelefoni number 5031337</GroupDescription>
      <GroupSum>20.32</GroupSum>
      <GroupTotal>24.384</GroupTotal>
    </GroupEntry>
  </InvoiceItemGroup>
</ItemEntry>

Iga telefoninumbri kohta on eraldi <InvoiceItemGroup> element.

Manus

E-arvele on võimalik kaasa panna ka üks manus <AttachmentFile> elemendis. Tavaliselt on see PDF arve sisuga, kuigi e-arve mõte on PDFide kasumine lõpetada.

<AttachmentFile>
  <FileName>invoice.pdf</FileName>

  <FileBase64>
    JVBERi0xLjAKMSAwIG9iajw8L1BhZ2VzIDIgMCBSPj5lbmRvYmogMiAwIG9iajw8L0tpZHNbMyAw
    IFJdL0NvdW50IDE+PmVuZG9iaiAzIDAgb2JqPDwvTWVkaWFCb3hbMCAwIDMgM10+PmVuZG9iagp0
    cmFpbGVyPDwvUm9vdCAxIDAgUj4+Cg==
  </FileBase64>
</AttachmentFile>

Kahjuks on Eestis mitu operaatorit, kes nõuavad e-arvete manustes just PDFi. Billberry üks neist ei ole ning üritab hoopis operaatoreid veenda PDFidest lahti ütlema — e-arveid kasutades on arve "tõde" XMLis ja PDFi kaasamine tekitab andmete mittevastuse riski ning on asjatu keerukus. Kel PDFe vaja, saab need genereerida oma raamatupidamisprogrammist. Panka püsimaksete jaoks saadetud e-arvete puhul PDFe näiteks ei nõuta.

Kuna operaatorite veenmine võtab aega, võib seni manusega olla loov. Kui tehnilistel põhjustel PDFi genereerida ei saa, võib ju e-arvele lisada staatilise PDFi kirjaga "Tegu on e-arvega".

Makseinfo

Viimasena on e-arvel makseinfo element <PaymentInfo>. Makseinfos on pea kõik elemendid kohustuslikud.

<PaymentInfo>
  <Currency>EUR</Currency>
  <PaymentDescription>Invoice 1337 payment</PaymentDescription>
  <Payable>YES</Payable>
  <PayDueDate>2021-07-10</PayDueDate>
  <PaymentTotalSum>12.66</PaymentTotalSum>
  <PayerName>Rahandusministeerium</PayerName>
  <PaymentId>1337</PaymentId>
  <PayToAccount>EE909900123456789012</PayToAccount>
  <PayToName>Kaitseministeerium</PayToName>
</PaymentInfo>

Peale maksekorralduse kirjelduse võib kasulikuks osutuda ka viitenumber.

<PaymentInfo>
ElementKirjeldus
<Currency>Valuuta ISO 4217 standardi järgi.
<PaymentRefId>Viitenumber.
Kajastub ka <InvoiceInformation> elemendis.
<PaymentDescription>Maksekorralduse kirjeldus
Kohustuslik vaid viitenumbri puudumisel.
<Payable>Vastavalt, kas arve kuulub tasumisele, YES või NO
<PayDueDate>Kui arve kuulub tasumisele, siis tuleb täita ka maksetähtaeg ISO 8601 formaadis ehk YYYY-MM-DD.
Kajastub ka <InvoiceInformation> elemendis.
<PaymentTotalSum>Maksmisele kuuluv summa
<PayerName>Ostja nimi
<PaymentId>Arve number.
Kajastub ka <InvoiceInformation> elemendis.
<PayToAccount>Müüja pangakonto
<PayToName>Müüja nimi

<PaymentInfo> lubab lisada vaid ühe pangakonto. Kui müüjal on konto mitmes pangas, saab erinevad pangakontod välja tuua <SellerParty> <AccountInfo> elementidega, nagu ülal näites.

Pane tähele, et e-arve XML skeemis tuleb <PaymentRefId> enne <PaymentDescription> elementi, kuid PDFi näites on viitenumber peale maksekirjeldust. Siin tasub ilmselt usaldada XML skeemi.

Jalus (<Footer>)

Jalus on e-arve faili kontrolliks, sisaldades <Invoice> elementide arvu ja nende <PaymentTotalSum> elementide summat (ignoreerides valuutat).

Näiteks toodud arvel oli vaid üks <Invoice>, mille puhul tuli tasuda 12.66:

<Footer>
  <TotalNumberInvoices>1</TotalNumberInvoices>
  <TotalAmount>12.66</TotalAmount>
</Footer>

E-arve standardite spetsifikatsioonid

E-arve v1.1

Avaldati .

E-arve v1.11

Avaldati .

Erinevused v1.1-ga:

  • Lisati <AppId> element <Header> elemendile.
  • Lisati presentment atribuut <Invoice> elemendile.
  • Lisati invoiceGlobUniqId atribuut <Invoice> elemendile.
  • Lisati sellerContractId atribuut <Invoice> elemendile.
  • Lisati sellerRegnumber atribuut <Invoice> elemendile.
  • Lisati <PayToBIC> element <PaymentInfo> elemendile.

E-arve v1.2

Avaldati .

Erinevused v1.11-ga:

  • Lisati <AttachmentFile> element <Invoice> elemendile.
  • Tehti sellerRegnumber atribuut <Invoice> elemendil kohustuslikuks.
  • Tehti <RegNumber> element <SellerParty> elemendil kohustuslikuks.
  • Lisati <FactorParty> element <InvoiceParties> elemendile.
  • Muudeti <Description> elemendi tüüpi <ItemEntry> elemendis. <Description> ei tohi enam olla tühi.
  • Lisati <GLN> element <*Party> (arve osapoolte) elemendile.

E-arveldaja kohandused

Registrite ja Infosüsteemide Keskuse operaator e-arveldaja kasutab tavalise v1.2 skeemi asemel enda täiendustega skeemi, kus makseinfo väljadele on natuke konkreetsemad nõuded.

ElementKirjeldus
<PayToAccount>Peab järgima IBAN ISO 13616-1:2007 standardit.
XML skeemis on selleks regulaaravaldis.
<PayToName>1–70 tähemärki
<PayToBIC>8–11 tähemärgiline BIC ISO 9362 kood.

E-arve v1.2.EN

Avaldati .

Täiendab v1.2 standardit laiendustega (<Extension>), mis võimaldavad konverteerida Eesti e-arveid Euroopa UBL v2.1 ja UN/CEFACT Cross Industry Invoice formaatide vahel.