Here in Norway, electronic invoices are spreading, and the
solution promoted
by the Norwegian government require that invoices are sent through
one of the approved facilitators, and it is not possible to send
electronic invoices without an agreement with one of these
facilitators. This seem like a needless limitation to be able to
transfer invoice information between buyers and sellers. My preferred
solution would be to just transfer the invoice information directly
between seller and buyer, for example using SMTP, or some HTTP based
protocol like REST or SOAP. But this might also be overkill, as the
"electronic" information can be transferred using paper invoices too,
using a simple bar code. My bar code encoding of choice would be QR
codes, as this encoding can be read by any smart phone out there. The
content of the code could be anything, but I would go with
the vCard format, as
it too is supported by a lot of computer equipment these days.
The vCard format support extentions, and the invoice specific
information can be included using such extentions. For example an
invoice from SLX Debian Labs (picked because we
ask
for donations to the Debian Edu project and thus have bank account
information publicly available) for NOK 1000.00 could have these extra
fields:
X-INVOICE-NUMBER:1
X-INVOICE-AMOUNT:NOK1000.00
X-INVOICE-KID:123412341234
X-INVOICE-MSG:Donation to Debian Edu
X-BANK-ACCOUNT-NUMBER:16040884339
X-BANK-IBAN-NUMBER:NO8516040884339
X-BANK-SWIFT-NUMBER:DNBANOKKXXX
The X-BANK-ACCOUNT-NUMBER field was proposed in a stackoverflow
answer regarding
how
to put bank account information into a vCard. For payments in
Norway, either X-INVOICE-KID (payment ID) or X-INVOICE-MSG could be
used to pass on information to the seller when paying the invoice.
The complete vCard could look like this:
BEGIN:VCARD
VERSION:2.1
ORG:SLX Debian Labs Foundation
ADR;WORK:;;Gunnar Schjelderups vei 29D;OSLO;;0485;Norway
URL;WORK:http://www.linuxiskolen.no/slxdebianlabs/
EMAIL;PREF;INTERNET:sdl-styret@rt.nuug.no
REV:20130212T095000Z
X-INVOICE-NUMBER:1
X-INVOICE-AMOUNT:NOK1000.00
X-INVOICE-MSG:Donation to Debian Edu
X-BANK-ACCOUNT-NUMBER:16040884339
X-BANK-IBAN-NUMBER:NO8516040884339
X-BANK-SWIFT-NUMBER:DNBANOKKXXX
END:VCARD
The resulting QR code created using
qrencode would look
like this, and should be readable (and thus checkable) by any smart
phone, or for example the zbar
bar code reader and feed right into the approval and accounting
system.

The extension fields will most likely not show up in any normal
vCard reader, so those parts would have to go directly into a system
handling invoices. I am a bit unsure how vCards without name parts
are handled, but a simple test indicate that this work just fine.
Update 2013-02-12 11:30: Added KID to the proposal
based on feedback from Sturle Sunde.