Lexware-php-api: Unterschied zwischen den Versionen

Aus Baebeca Solutions GmbH - Wiki
Zur Navigation springen Zur Suche springen
Slu (Diskussion | Beiträge)
Slu (Diskussion | Beiträge)
 
(99 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= Übersicht & Informationen =
= Übersicht =


PHP Client für [https://www.awin1.com/awclick.php?gid=368497&mid=13787&awinaffid=635216&linkid=2440770&clickref= Lexoffice] REST API
PHP Client für [https://www.baebeca.de/lexware office.lexware.de] API (ehemals lexoffice.de)


Wir lieben Automatisierung und die nahtlose Verzahnung von Systemen!
* [https://github.com/Baebeca-Solutions/lexware-php-api Github]
* [https://wiki.baebeca.de/index.php?title=lexware-php-api Wiki (Dokumentation)]
* [https://www.baebeca.de/softwareentwicklung/lexware-php-client/ Projektseite]
* [https://packagist.org/packages/baebeca/lexware-php-api Packagist]
* [https://developers.lexware.io Lexware Office API-Dokumentation]


[https://www.awin1.com/awclick.php?gid=368497&mid=13787&awinaffid=635216&linkid=2440770&clickref= Lexoffice] stellt seinen Kunden eine öffentliche API-Schnittstelle zur Verfügung über die bestehende Systeme integriert oder Prozesse automatisiert werden können.<br>
[[Datei:Lexware-Office-Logo.png||link=https://www.baebeca.de/lexware]]
Für diesen Ansatz haben wir einen PHP-Client entwickelt und stellen diesen kostenfrei zur Verfügung.


Alle weiteren Informationen finden Sie auf unserer [https://www.baebeca.de/softwareentwicklung/projekte/lexoffice-php-client/ Projektseite].
== Composer ==


== Baebeca Solutions bei lexoffice.de ==
=== CLI ===
* Lexoffice [https://www.lexoffice.de/partner/public-api/ Public API Partner]
composer require baebeca/lexware-php-api:~2.0
* Lexoffice [https://www.lexoffice.de/partner/public-api/integrationspartner/ Integrationspartner]
* Offizielle Lexoffice [https://developers.lexoffice.io/docs/ API-Dokumentation]


[[Datei:Lexoffice logo.png||link=https://www.awin1.com/cread.php?s=2440752&v=13787&q=368492&r=635216]]
=== composer.json ===
<syntaxhighlight lang="json">
{
  "require": {
    "baebeca/lexware-php-api": "~2.0",
  }
}
</syntaxhighlight>


== Download ==
== Support ==
Die aktuelle Version können Sie jeweils in unserem Github Repository herunterladen: https://github.com/Baebeca-Solutions/lexoffice-php-api
An wen kann ich mich wenden, wenn ich Probleme oder Fragen habe?<br>
Für diese Frage ist entscheidend, ob du eine Nutzungslizenz erworben hast oder die freie Variante benutzt.
 
* Wenn eine Nutzungslizenz vorhanden ist, kannst du jederzeit ein Ticket bei uns öffnen:
** E-Mail: support@baebeca.de
** Telefon: 02261-8161691
* Wenn du die freie Version benutzt, kannst du einen [https://github.com/Baebeca-Solutions/lexware-php-api/issues Github issue] öffnen.


== Lizenz ==
== Lizenz ==
Unsere Software wurde unter der "GNU Affero General Public License v3.0" Lizenz veröffentlicht.  
Dieses Projekt steht unter der "GNU AGPLv3 Lizenz".
Dies bedeutet, dass Sie unsere Software gerne in Ihren Projekten und Produkten nutzen dürfen,
 
solange Sie Ihr Projekt dann ebenso Quelloffen unter den in der Lizenz genannten Rahmenbedingungen
Du darfst den Code frei verwenden, verändern und weiterverbreiten, **sofern deine Software ebenfalls quelloffen und veröffentlicht wird** (AGPLv3-konform).
zur Verfügung stellen.


Wenn Sie Ihre Lösung nicht veröffentlichen möchten, Support benötigen, individuelle
=== Kommerzielle / Closed-Source Nutzung ===
Erweiterungen benötigen oder dieses Projekt einfach Unterstützen möchten, können Sie für 99,- EUR/Netto eine lifetime Nutzungslizenz erhalten. Setzten Sie sich diesbezüglich bitte kurz mit uns in [https://www.baebeca.de/softwareentwicklung/projekte/lexoffice-php-client/ Verbindung].


== Support ==
Die Verwendung in '''kommerziellen''' oder '''Closed-Source'''-Projekten ist '''nicht ohne eine kommerzielle Lizenz gestattet'''.
An wen kann ich mich wenden, wenn ich Probleme oder Fragen habe?<br>
 
Für diese Frage ist entscheidend, ob Sie eine Nutzungslizenz für unsere lexoffice-php-api erworben haben oder die kostenlose Variante nutzen.
Bitte kontaktiere uns unter '''support@baebeca.de''', um eine Lizenz zu 199,-/netto/einmalig zu erwerben.
Siehe dazu alle Infos: [https://github.com/Baebeca-Solutions/lexware-php-api/blob/php-8.4/LICENSE-commercial_DE.md Kommerzielle Lizenzbedingungen]
 
== Lexware Office API Account erstellen ==
Erstellen Sie in Ihrem [https://www.baebeca.de/lexware Lexware Office Account] einen API Key.
 
Einstellungen :: Erweiterungen :: Lexware Office Public API :: "Schlüssel neu erstellen"
 
== Mehrwertsteuersenkung - Konjunkturpaket 01.07.2020 - 31.12.2020 ==
* https://office.lexware.de/mehrwertsteuer-rest-api
* https://developers.lexware.io/docs/#faq-valid-tax-rates
 
== One-Stop-Shop (OSS) ab 01.07.2021 ==
* Für den Voucher-Import reicht es aus die Methode get_needed_voucher_booking_id() zu nutzen.
* https://help.lexware.de/de-form/articles/5207137-one-stop-shop-eu-regelung-belege-an-privatpersonen-im-eu-ausland


* Sofern eine Nutzungslizenz vorhanden ist, können sich jederzeit per Mail an [mailto:support@baebeca.de support@baebeca.de] wenden und erhalten vorrangigen Support.
== Rate-Limit ==
* Wenn Sie die kostenlose Version nutzen bitten wir Sie auf Github einen [https://github.com/Baebeca-Solutions/lexoffice-php-api/issues issue] zu erstellen.
Lexware Office hat ein Rate-Limit von 2 Anfragen pro Sekunde. Siehe dazu: https://developers.lexware.io/docs/#api-rate-limits


== Lexoffice API Account erstellen ==
Dieses Rate-Limit wird automatisch erkannt und der Request wird nach einem Sleep von "Sekunden * Anzahl Versuche" erneut abgesetzt.
Erstellen Sie in Ihrem [https://www.awin1.com/awclick.php?gid=368497&mid=13787&awinaffid=635216&linkid=2440770&clickref= Lexoffice Account] einen API Key.
Mithilfe von <code>$lexware->configure_rate_limit(bool $repeat = true, int $seconds_to_sleep = 1, int $max_tries = 10): void</code> kann man das Verhalten parametrisieren.


Einstellungen :: Erweiterungen :: lexoffice Public API :: "Schlüssel neu erstellen"
Zusätzlich besteht die Möglichkeit via <code>configure_rate_limit_callable(callable $callback = null) : void</code> eine Callbackfunktion mitzugeben, die jedes Mal getriggert wird, wenn ein Rate-Limit getroffen wurde. Es wird dann ein bool Parameter mitgegeben ob der Aufruf noch einmal versucht wird.


= Klasse einbinden =
= Klasse einbinden =
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
// include the class file, check the correct folder
<?php
require_once (__DIR__.'/lexoffice-php-api.php');
require __DIR__.'/vendor/autoload.php';
   
use \Baebeca\LexwareApi;
// initiate client with your settings
use \Baebeca\LexwareException;
$lexoffice = new lexoffice_client(array(
 
  'api_key' => 'xyz',
$lexware = new LexwareApi([
));
    'api_key' => 'my-api-key'
</syntaxhighlight>  
]);
</syntaxhighlight>
== Start Parameter ==
== Start Parameter ==
;api_key [string]
;api_key [string]
:API Schlüssel
:API Schlüssel
;callback [string]
;callback [string]
:Ihre Standard Callback URL für Webhooks von Lexoffice   
:Ihre Standard Callback URL für Webhooks von Lexware Office
;ssl_verify [bool] (default true)
;ssl_verify [bool] (default true)
:Soll die SSL verbindung zu Lexoffice validiert werden
:Soll die SSL verbindung zu Lexware Office validiert werden
 
== Error handling ==
<syntaxhighlight lang="php">
<?php
// catch errors
try {
    $invoices = $lexware->get_last_invoices(-5);
}
catch (LexwareException $e) {
    var_dump($e->getMessage());
    print_r($e->getError());
}
</syntaxhighlight>


= Methoden =
= Methoden =
Zeile 64: Zeile 104:


=== Account abfragen ===
=== Account abfragen ===
<syntaxhighlight lang="php">$lexoffice->get_profile() : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->get_profile() : object</syntaxhighlight>


Beispiel Rückgabe:
Beispiel Rückgabe:
Zeile 89: Zeile 129:


=== Rechnung abfragen ===
=== Rechnung abfragen ===
<syntaxhighlight lang="php">$lexoffice->get_invoice( string $uuid ) : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->get_invoice( string $uuid ) : object</syntaxhighlight>
;uuid
;uuid
:Die eindeutige uuid des Eintrages der abgefragt werden soll
:Die eindeutige uuid des Eintrages der abgefragt werden soll


=== Alle Rechnungen abfragen ===
=== Alle Rechnungen abfragen ===
<syntaxhighlight lang="php">$lexoffice->get_invoices_all() : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->get_invoices_all() : object</syntaxhighlight>
 
=== Die letzten n Rechnungen abfragen ===
<syntaxhighlight lang="php">$lexware->get_last_invoices(int $count) : object</syntaxhighlight>


=== Rechnung PDF herunterladen ===
=== Rechnung PDF herunterladen ===
<syntaxhighlight lang="php">$lexoffice->get_invoice_pdf( string $uuid, string $filename) : bool</syntaxhighlight>
 
'''legacy function - will be removed in futere releases, use ''get_pdf($type, $uuid, $filename)'' instead'''
 
<syntaxhighlight lang="php">$lexware->get_invoice_pdf( string $uuid, string $filename) : bool</syntaxhighlight>
;uuid
;uuid
:Die eindeutige uuid des Eintrages der abgefragt werden soll
:Die eindeutige uuid des Eintrages der abgefragt werden soll
;filename
;filename
:Der lokale Dateiname an dem das PDF abgelegt werden soll
:Der lokale Dateiname an dem das PDF abgelegt werden soll. Sofern es sich um eine E-Rechnung handelt wird auch die XML Datei heruntergeladen und mit dem Zusatz ".xml" abgelegt.


=== Rechnung anlegen ===
=== Rechnung anlegen ===
<syntaxhighlight lang="php">$lexoffice->create_invoice( array $data [, bool $finalized = false ] ) : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->create_invoice( array $data [, bool $finalized = false, string $precedingSalesVoucherId= '' ] ) : object</syntaxhighlight>
;data
:Ein Array der Rechnungsdaten nach der nötigen [https://developers.lexware.io/docs/#lexware-api-documentation Lexware Office Formatierung]
:Beispiel
<syntaxhighlight lang="php">
array(
    'voucherDate' => date(DATE_RFC3339_EXTENDED),
    'introduction' => 'Einleitungstext',
    'remark' => "Fußzeile\r\nMehrzeilig",
    'address' => array(
    #'contactId' => '<id>',
    'name' => 'Frau Jane Doe',
    'street' => 'Str. 1',
    'zip' => '12345',
    'city' => 'Stadt',
    'countryCode' => 'DE',
      ),
      'lineItems' => array(
      array(
      'type' => 'custom',
      'name' => 'Produktname',
      'description' => 'Beschreibung',
      'quantity' => 1,
      'unitName' => 'Stück',
      'unitPrice' => array(
      'currency' => 'EUR',
      'netAmount' => 10.99,
          'taxRatePercentage' => 19,
      ),
      #'discountPercentage' => 0,
      ),
      ),
      'totalPrice' => array(
      'currency' => 'EUR',
      #'totalDiscountAbsolute' => 0,
      #'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      'taxType' => 'net',
      ),
      'shippingConditions' => array(
      'shippingDate' => date('Y-m-d').'T00:00:01.000+02:00',
      'shippingType' => 'delivery',
      ),
      'paymentConditions' => array(
      'paymentTermLabel' => 'Vorkasse',
      'paymentTermDuration' => 1,
      ),
    )
</syntaxhighlight>
; finalized
: Entscheidet ob die Rechnungfertiggestellt werden soll.
; precedingSalesVoucherId
: Eine Lexware Office UUID eines Belegs für den eine Rechnung erstellt wird.
 
== Serienrechnungen ==
 
=== Serienrechnung abfragen ===
 
<syntaxhighlight lang="php">$lexware->get_recurring_template( string $uuid ) : object</syntaxhighlight>
;uuid
:Die eindeutige uuid des Eintrages der abgefragt werden soll
 
=== Alle Serienrechnungen abfragen ===
 
<syntaxhighlight lang="php">$lexware->get_recurring_templates_all() : object</syntaxhighlight>
 
== Gutschriften ==
 
=== Gutschrift abfragen ===
 
<syntaxhighlight lang="php">$lexware->get_creditnote( string $uuid ) : object</syntaxhighlight>
;uuid
:Die eindeutige uuid der Gutschrift die abgefragt werden soll
 
=== Gutschrift anlegen ===
 
<syntaxhighlight lang="php">$lexware->create_creditnote( array $data [, bool $finalized = false, string $precedingSalesVoucherId= '' ] ) : object</syntaxhighlight>
;data
:Ein Array der Gutschriftsdaten nach der nötigen [https://developers.lexware.io/docs/#credit-notes-endpoint-credit-notes-properties Lexware Office Formatierung]
:Beispiel
<syntaxhighlight lang="php">
array(
    'voucherDate' => date(DATE_RFC3339_EXTENDED),
    'introduction' => 'Rechnungskorrektur',
    'remark' => "Fußzeile\r\nMehrzeilig",
    'address' => array(
    #'contactId' => '<id>',
    'name' => 'Frau Jane Doe',
    'street' => 'Str. 1',
    'zip' => '12345',
    'city' => 'Stadt',
    'countryCode' => 'DE',
      ),
      'lineItems' => array(
      array(
      'type' => 'custom',
      'name' => 'Produktname',
      'description' => 'Beschreibung',
      'quantity' => 1,
      'unitName' => 'Stück',
      'unitPrice' => array(
      'currency' => 'EUR',
      'netAmount' => 10.99,
          'taxRatePercentage' => 19,
      ),
      #'discountPercentage' => 0,
      ),
      ),
      'totalPrice' => array(
      'currency' => 'EUR',
      #'totalDiscountAbsolute' => 0,
      #'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      'taxType' => 'net',
      )
    )
</syntaxhighlight>
; finalized
: Entscheidet ob die Gutschrift fertiggestellt werden soll.
; precedingSalesVoucherId
: Eine Lexware Office UUID einer offenen Rechnung für die eine Gutschrift erstellt wird.
 
== Angebote ==
 
=== Angebot abfragen ===
 
<syntaxhighlight lang="php">$lexware->get_quotation( string $uuid ) : object</syntaxhighlight>
;uuid
:Die eindeutige uuid des Angebotes das abgefragt werden soll
 
=== Angebot anlegen ===
 
<syntaxhighlight lang="php">$lexware->create_quotation( array $data [, bool $finalized = false ] ) : object</syntaxhighlight>
;data
;data
:Ein Array der Rechnungsdaten nach der nötigen [https://developers.lexoffice.io/docs/#invoices-properties Lexoffice Formatierung]
:Ein Array der Angebotsdaten nach der nötigen [https://developers.lexware.io/docs/#quotations-endpoint-quotations-properties Lexware Office Formatierung]
:Beispiel
:Beispiel
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
  array(
  array(
     'voucherDate' => substr(date('c'), 0, 19).'.000'.substr(date('c'), 19),
     'voucherDate' => substr(date('c'), 0, 19).'.000'.substr(date('c'), 19),
    'expirationDate' => substr(date('c'), 0, 19).'.000'.substr(date('c'), 19),
     'introduction' => 'Einleitungstext',
     'introduction' => 'Einleitungstext',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'remark' => "Fußzeile\r\nMehrzeilig",
Zeile 123: Zeile 304:
       'lineItems' => array(
       'lineItems' => array(
       array(
       array(
      'type' => 'custom',
      'type' => 'custom',
      'name' => 'Produktname',
      'name' => 'Produktname',
      'description' => 'Beschreibung',
      'description' => 'Beschreibung',
      'quantity' => 1,
      'quantity' => 1,
      'unitName' => 'Stück',
      'unitName' => 'Stück',
      'unitPrice' => array(
      'unitPrice' => array(
      'currency' => 'EUR',
      'currency' => 'EUR',
      'netAmount' => 10.99,
      'netAmount' => 10.99,
          'taxRatePercentage' => 19,
          'taxRatePercentage' => 19,
      ),
      ),
      #'discountPercentage' => 0,
      #'discountPercentage' => 0,
      ),
      ),
      'totalPrice' => array(
      'currency' => 'EUR',
      #'totalDiscountAbsolute' => 0,
      #'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      'taxType' => 'net',
      ),
      'shippingConditions' => [
        'shippingDate' => date(DATE_RFC3339_EXTENDED),
        'shippingType' => 'delivery',
      ],
      'paymentConditions' => [
        'paymentTermLabel' => 'Vorkasse',
        'paymentTermDuration' => 1,
      ],
)
</syntaxhighlight>
; finalized
: Entscheidet ob das ANgebot fertiggestellt werden soll.
 
== Auftragsbestätigungen ==
 
=== Auftragsbestätigung abfragen ===
 
<syntaxhighlight lang="php">$lexware->get_orderconfirmation( string $uuid ) : object</syntaxhighlight>
;uuid
:Die eindeutige uuid der Auftragsbestätigung die abgefragt werden soll
 
=== Auftragsbestätigung anlegen ===
<syntaxhighlight lang="php">$lexware->create_orderconfirmation( array $data [, bool $finalized = false, string $precedingSalesVoucherId= '' ] ) : object</syntaxhighlight>
;data
:Ein Array der Auftragbestätigungsdaten nach der nötigen [https://developers.lexware.io/docs/#lexware-api-documentation Lexware Office Formatierung]
:Beispiel
<syntaxhighlight lang="php">
array(
    'voucherDate' => date(DATE_RFC3339_EXTENDED),
    'introduction' => 'Einleitungstext',
    'remark' => "Fußzeile\r\nMehrzeilig",
    'address' => array(
    #'contactId' => '<id>',
    'name' => 'Frau Jane Doe',
    'street' => 'Str. 1',
    'zip' => '12345',
    'city' => 'Stadt',
    'countryCode' => 'DE',
      ),
      'lineItems' => array(
      array(
      'type' => 'custom',
      'name' => 'Produktname',
      'description' => 'Beschreibung',
      'quantity' => 1,
      'unitName' => 'Stück',
      'unitPrice' => array(
      'currency' => 'EUR',
      'netAmount' => 10.99,
          'taxRatePercentage' => 19,
      ),
      #'discountPercentage' => 0,
      ),
      ),
      'totalPrice' => array(
      'currency' => 'EUR',
      #'totalDiscountAbsolute' => 0,
      #'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      'taxType' => 'net',
      ),
      'shippingConditions' => array(
      'shippingDate' => date('Y-m-d').'T00:00:01.000+02:00',
      'shippingType' => 'delivery',
      ),
      'paymentConditions' => array(
      'paymentTermLabel' => 'Vorkasse',
      'paymentTermDuration' => 1,
      ),
    )
</syntaxhighlight>
 
; finalized
: Entscheidet ob die Auftragsbestätigung fertiggestellt werden soll.
; precedingSalesVoucherId
: Eine Lexware Office UUID eines Belegs für die eine Auftragsbestätigung erstellt wird.
 
== Lieferschein ==
 
=== Lieferschein abfragen ===
 
<syntaxhighlight lang="php">$lexware->get_deliverynote( string $uuid ) : object</syntaxhighlight>
;uuid
:Die eindeutige uuid des Lieferscheins der abgefragt werden soll
 
=== Lieferschein anlegen ===
<syntaxhighlight lang="php">$lexware->create_delivery_note( array $data [, bool $finalized = false, string $precedingSalesVoucherId= '' ] ) : object</syntaxhighlight>
;data
:Ein Array der Lieferscheindaten nach der nötigen [https://developers.lexware.io/docs/#delivery-notes-endpoint-delivery-notes-properties Lexware Office Formatierung]
:Beispiel
<syntaxhighlight lang="php">
array(
    'voucherDate' => date(DATE_RFC3339_EXTENDED),
    'introduction' => 'Einleitungstext',
    'remark' => "Fußzeile\r\nMehrzeilig",
    'address' => array(
    #'contactId' => '<id>',
    'name' => 'Frau Jane Doe',
    'street' => 'Str. 1',
    'zip' => '12345',
    'city' => 'Stadt',
    'countryCode' => 'DE',
      ),
      'lineItems' => array(
      array(
      'type' => 'custom',
      'name' => 'Produktname',
      'description' => 'Beschreibung',
      'quantity' => 1,
      'unitName' => 'Stück',
      'unitPrice' => array(
      'currency' => 'EUR',
      'netAmount' => 10.99,
          'taxRatePercentage' => 19,
      ),
      #'discountPercentage' => 0,
       ),
       ),
       ),
       ),
Zeile 154: Zeile 462:
     )
     )
</syntaxhighlight>
</syntaxhighlight>
; finalized
; finalized
: Entscheidet ob die Rechnung fertiggestellt werden soll.
: Entscheidet ob der Lieferschein fertiggestellt werden soll.
; precedingSalesVoucherId
: Eine Lexware Office UUID eines Belegs für den der Lieferschein erstellt wird.
 
== Mahnung ==
 
=== Mahnung abfragen ===
 
<syntaxhighlight lang="php">$lexware->get_dunning( string $uuid ) : object</syntaxhighlight>
;uuid
:Die eindeutige uuid der Mahnung welche abgefragt werden soll
 
=== Mahnung anlegen ===
<syntaxhighlight lang="php">$lexware->create_dunning( array $data, string $precedingSalesVoucherId ) : object</syntaxhighlight>
;data
:Ein Array der Mahndaten nach der nötigen [https://developers.lexware.io/docs/#dunnings-endpoint-create-a-dunning Lexware Office Formatierung]
; precedingSalesVoucherId
: Eine Lexware Office UUID einer offenen Rechnung für die eine Mahnung erstellt wird.
 
== Belege ==
 
=== Beleg anlegen ===
<syntaxhighlight lang="php">$lexware->create_voucher( array $data ) : object</syntaxhighlight>
;Paramater
;data
:Ein Array der Belegdaten nach der nötigen [https://developers.lexware.io/docs/#vouchers-endpoint-create-a-voucher Lexware Office Formatierung]
 
=== Beleg abfragen ===
<syntaxhighlight lang="php">$lexware->get_voucher( string $uuid ) : object</syntaxhighlight>
;Paramater
*uuid
**Die eindeutige uuid des Beleges der abgefragt werden soll
 
=== Belege abfragen ===
 
<syntaxhighlight lang="php">$lexware->get_vouchers( string $type = 'invoice,creditnote,orderconfirmation', string $state = 'draft,open,paid,paidoff,voided,transferred', string $archived = 'both', string $date_from = '', string $date_to = '') : object</syntaxhighlight>
;type
:Einen oder mehrere Typen von Belegen (komma getrennt) die abgefragt werden sollen
;state
:Status der Belege die abgefragt werden sollen
;archived
:"both", "true" oder "false" als String ob archivierte/nicht archivierte Belege ausgegeben werden sollen
;date_from
:Datum (Format YYYY-MM-DD) ab wann einschließlich abgefragt werden soll
;date_to
:Datum (Format YYYY-MM-DD) bis wann einschließlich abgefragt werden soll
 
=== Belegbild hochladen (nicht zugeordnet) ===
<syntaxhighlight lang="php">$lexware->upload_file($file) : object</syntaxhighlight>
;Parameter
*file
**Der Pfad zur Datei die hochgeladen werden soll
; Rückgabe
* id
** Die eindeutige Datei-ID von Lexware Office
 
;Beispiel Anfrage
<syntaxhighlight lang="php">
$lexware->upload_file(__DIR__.'/invoice.pdf');
</syntaxhighlight>
 
;Beispiel Rückgabe
<syntaxhighlight lang="php">
stdClass Object (
    [id] => 221fd5ed-5547-4bd3-b7c2-9796c1a0e4a6
)
</syntaxhighlight>
 
=== Beleg hochladen (zugeordnet) ===
<syntaxhighlight lang="php">$lexware->upload_voucher($uuid, $file) : object</syntaxhighlight>
;Parameter
*uuid
**Die ID des Beleges dem der Upload zugeordnet werden soll
*file
**Der Pfad zur Datei die hochgeladen werden soll
; Rückgabe
* id
** Die eindeutige Datei-ID von Lexware Office
 
=== Beleg Dateien herunterladen ===
<syntaxhighlight lang="php">$lexware->get_voucher_files(string $uuid, string $filename_prefix) : array</syntaxhighlight>
;Parameter
*uiui
**Die ID des Beleges dessen Dateien heruntergeladen werden sollen
*filename_prefix
** Der Dateipfad inkl. eines Dateiprefixes.
; Rückgabe
Ein Array der Dateinamen. Sofern es sich um eine E-Rechnung handelt wird sowohl die XML Datei als auch die von Lexware visualisierte PDF Rechnung heruntergeladen.
 
;Beispiel Anfrage
<syntaxhighlight lang="php">
$lexware->get_voucher_files($uuid, '/files/IN_1234');
</syntaxhighlight>
 
;Beispiel Rückgabe
<syntaxhighlight lang="php">
array (
    [0] => /files/IN_1234_1.jpg
    [1] => /files/IN_1234_2.png
    [2] => /files/IN_1234_3.pdf
)
</syntaxhighlight>


== Kontakte ==
== Kontakte ==


=== Kontakt abfragen ===
=== Kontakt abfragen ===
<syntaxhighlight lang="php">$lexoffice->get_contact( string $uuid ) : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->get_contact( string $uuid ) : object</syntaxhighlight>
;Paramater
;Paramater
*uuid
*uuid
Zeile 166: Zeile 576:


=== Kontakt suchen ===
=== Kontakt suchen ===
<syntaxhighlight lang="php">$lexoffice->search_contact( array $filter ) : object</syntaxhighlight>
Bitte beachte das Lexware Office stets eine Suche nach "contains" macht. Eine Suche nach ''hans@hans.de'' liefert einen Treffer für den Kontakt ''hans@hans.de.google.com''
<syntaxhighlight lang="php">$lexware->search_contact( array $filter, bool $respect_wildcards = false ) : object</syntaxhighlight>
;Paramater
;Paramater
*filter
*filter
Zeile 175: Zeile 586:
*** customer (true/false)
*** customer (true/false)
*** vendor (true/false)
*** vendor (true/false)
*wildcards
** Bool | Wenn ''true'' werden die Zeichen "_" (ein Zeichen) und "%" (mehrere Zeichen) als Wildcards genutzt, andernfalls im Inhalt als Zeichen erwartet.
;Beispiel Anfrage
;Beispiel Anfrage
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$request = $lexoffice->search_contact(array(
$lexware->search_contact(array(
'email' => '',
'email' => '',
'name' => 'John Doe',
'name' => 'John Doe',
'number' => '',
'number' => '',
'customer' => '',
'customer' => '',
'venodr' => '',
'vendor' => '',
));
));
</syntaxhighlight>
</syntaxhighlight>


=== Alle Kontakte abfragen ===
=== Alle Kontakte abfragen ===
<syntaxhighlight lang="php">$lexoffice->get_contacts_all() : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->get_contacts_all() : object</syntaxhighlight>


=== Kontakt anlegen ===
=== Kontakt anlegen ===
<syntaxhighlight lang="php">$lexoffice->create_contact( array $data) : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->create_contact( array $data) : object</syntaxhighlight>
==== Parameter ====
;Parameter
*data
*data
**Ein Array der Kontaktdaten nach der nötigen [https://developers.lexoffice.io/docs/#contact-properties Lexoffice Formatierung]
**Ein Array der Kontaktdaten nach der nötigen [https://developers.lexware.io/docs/#lexware-api-documentation Lexware Office Formatierung]
==== Beispiel Anfrage ====
 
;Beispiel Anfrage
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$lexoffice->create_contact(array(
$lexware->create_contact(array(
'version' => 0,
'version' => 0,
'roles' => array(
'roles' => array(
Zeile 215: Zeile 629:
'lastName' => 'Doe',
'lastName' => 'Doe',
'emailAddress' =>'support@baebeca.de',
'emailAddress' =>'support@baebeca.de',
        'phoneNumber' => '022619202930',
        'phoneNumber' => '022619202930',
)
)
),
),
Zeile 252: Zeile 666:


=== Kontakt aktualisieren ===
=== Kontakt aktualisieren ===
<syntaxhighlight lang="php">$lexoffice->update_contact( string $uuid, array $data) : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->update_contact( string $uuid, array $data) : object</syntaxhighlight>
==== Parameter ====
;Parameter
*uuid
*uuid
**Die eindeutige uuid des Eintrages der abgefragt werden soll
**Die eindeutige uuid des Eintrages der abgefragt werden soll
*data
*data
**Ein Array der Kontaktdaten nach der nötigen [https://developers.lexoffice.io/docs/#contact-properties Lexoffice Formatierung]
**Ein Array der Kontaktdaten nach der nötigen [https://developers.lexware.io/docs/#lexware-api-documentation Lexware Office Formatierung]


== Events / Webhooks ==
== Events / Webhooks ==
   
 
=== Event anlegen ===
=== Event anlegen ===
<syntaxhighlight lang="php">$lexoffice->create_event( string $event [, bool $callback = false ] ) : array|bool</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->create_event( string $event [, bool $callback = false ] ) : array|bool</syntaxhighlight>
;event
;event
:Mögliche sind alle von Lexoffice [https://developers.lexoffice.io/docs/#event-subscriptions-endpoint-event-types angebotenen Events].
:Mögliche sind alle von Lexware Office [https://developers.lexware.io/docs/#event-subscriptions-endpoint-event-types angebotenen Events].
;callback
;callback
:Die Callback URL für diesen Aufruf. Wenn keine angegeben wird, wird die Standard URL aus der initialisierung genutzt.
:Die Callback URL für diesen Aufruf. Wenn keine angegeben wird, wird die Standard URL aus der initialisierung genutzt.


=== Aktives Event abfragen ===
=== Aktives Event abfragen ===
<syntaxhighlight lang="php">$lexoffice->get_event( string $uuid ) : array</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->get_event( string $uuid ) : array</syntaxhighlight>
;uuid
;uuid
:Die eindeutige uuid des Eintrages der abgefragt werden soll
:Die eindeutige uuid des Eintrages der abgefragt werden soll


=== Alle aktiven Events abfragen ===
=== Alle aktiven Events abfragen ===
<syntaxhighlight lang="php">$lexoffice->get_events_all() : object</syntaxhighlight>
<syntaxhighlight lang="php">$lexware->get_events_all() : object</syntaxhighlight>
 
=== Event löschen ===
<syntaxhighlight lang="php">$lexware->delete_event( string $iiud ) : object</syntaxhighlight>
;uuid
:Die ID eines zuvor erstellten Events.
 
== Steuern ==
=== Kleinunternehmer ===
<syntaxhighlight lang="php">$lexware->is_tax_free_company(): bool</syntaxhighlight>
 
=== PLZ-Sonderzone prüfen (Drittgebiet) ===
<syntaxhighlight lang="php">$lexware->is_excluded_postal_zone(string $country_code, string $postal_code = ''): bool</syntaxhighlight>
Prüft ob eine PLZ innerhalb eines EU-Landes in einem umsatzsteuerlichen Sondergebiet liegt (Drittgebiet gem. § 1 Abs. 3 UStG). Diese Gebiete sind trotz EU-Ländercode vom EU-MwSt-Gebiet ausgeschlossen und müssen steuerlich wie Drittländer behandelt werden.
 
Gibt ''false'' zurück wenn keine PLZ übergeben wird.
 
Bekannte Sonderzonen (in der Property <code>$postal_vat_zones</code> hinterlegt):
{| class="wikitable"
! Land !! PLZ-Bereich !! Gebiet
|-
| DE || 27498 || Helgoland
|-
| DE || 78266 || Büsingen am Hochrhein
|-
| ES || 35000–35999 || Kanarische Inseln
|-
| ES || 38000–38999 || Kanarische Inseln
|-
| ES || 51000–51999 || Ceuta
|-
| ES || 52000–52999 || Melilla
|-
| IT || 23030 || Livigno
|-
| IT || 22060 || Campione d'Italia
|-
| GR || 63086 || Berg Athos
|-
| FI || 22000–22999 || Åland-Inseln
|}
 
;$country_code
:2-stelliger Ländercode
;$postal_code
:PLZ der Liefer-/Leistungsadresse (optional; ohne PLZ immer false)
 
=== EU - Innergemeinschaftlicher Raum ===
<syntaxhighlight lang="php">$lexware->is_european_member(string $country_code, int $date, string $postal_code = ''): bool</syntaxhighlight>
;$country_code
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum
;$postal_code
:PLZ der Liefer-/Leistungsadresse (optional). Wenn die PLZ einer bekannten Sonderzone entspricht, gibt die Methode ''false'' zurück – auch wenn das Land selbst EU-Mitglied ist.
 
=== Buchungskategorie bestimmen ===
<syntaxhighlight lang="php">$lexware->get_needed_voucher_booking_id(float $taxrate, string $country_code, int $date, bool $euopean_vatid, bool $b2b_business, bool $physical_good = true, string $postal_code = ''): string</syntaxhighlight>
;$taxrate
:Steuersatz der verwendet werden soll (Wird auf Gültigkeit geprüft)
;$country_code
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum
;$euopean_vatid
:Verfügt man über die Kunden UST-ID
;$b2b_business
:Handelt es sich um einen Endkunden oder Geschäftskunden
;$physical_good
:Wird physikalische Ware oder digitale Dienstleistung verkauft
;$postal_code
:PLZ der Liefer-/Leistungsadresse (optional). PLZ-Sonderzonen (z. B. Helgoland, Kanarische Inseln) werden automatisch wie Drittland behandelt.
 
=== Abfrage der möglichen Steuersätze ===
<syntaxhighlight lang="php">$lexware->get_taxrates(string $country_code, int $date): array</syntaxhighlight>
;$country_code
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum
 
 
=== Prüfung Steuersatz ===
<syntaxhighlight lang="php">$lexware->check_taxrate(float $taxrate, string $country_code, int $date): bool</syntaxhighlight>
;$taxrate
:Der zu prüfende Steuersatz
;$country_code
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum
 
== One-Stop-Shop (OSS) / Steuer Methoden ==
 
=== OSS Einstellungen prüfen ===
<syntaxhighlight lang="php">$lexware->is_oss_needed(string $country_code, int $date)</syntaxhighlight>
;$country_code
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum
 
=== Prüfung OSS Voucher Kategorie ===
<syntaxhighlight lang="php">$lexware->get_oss_voucher_category(string $country_code, int $date, int $booking_category = 1, float $taxrate = 0): string</syntaxhighlight>
;$country_code
:2-Stelliger Country Code des Rechnungslandes
;$date
:Timestamp Rechnungsdatum
;$booking_category
:Angabe welche Buchungskategorie genutzt werden soll
:1 => Fernverkauf
:2 => Elektronische Dienstleistung
;$taxrate
: Genutzter Steuersatz in Buchung
 
== Sonstiges ==
 
=== PDFs herunterladen ===
 
<syntaxhighlight lang="php">$lexware->get_pdf(string $type, string $uuid, string $filename): bool</syntaxhighlight>
;type
:Die Art des Beleges. Möglich Varianten sind: "invoices", "credit-notes"
;uuid
:Die eindeutige uuid des Eintrages der abgefragt werden soll
;filename
:Der lokale Dateiname an dem das PDF abgelegt werden soll
 
= Voucher Kategorien =
 
Bei zu erstellenden Vouchers, muss ein Buchungskonto angegeben werden.
; incoming
: Ausgangsbelege (eingehender Geldfluß)
; outgoing
: Eingangsbelege (ausgehender Geldfluß)
 
    private $booking_categories = [
        'incoming' => [
            // Anlagevermögen
            'c5430e38-6daa-46e7-99d5-a65fd737338f' => 'Software (135)',
            'b32709ec-08c2-4d3f-8c29-4f8da6e03541' => 'Technische Anlagen und Maschinen (400)',
            '4f01e761-d912-441f-ad1a-1c1d2d590a81' => 'KFZ (520)',
            '13efe6dc-c3a3-4d6b-a793-81a1c0d78ece' => 'LKW (540)',
            '21027249-d7c3-455f-9b27-88cfe23cb14f' => 'Sonstige Transportmittel (560)',
            '78361a84-43e6-4643-84ce-7c4925e30a7f' => 'Werkzeuge (620)',
            'd8f6b5c4-62c4-4ed8-8deb-27eb284de06d' => 'Betriebs-und Geschäftsausstattung (690)',
            'f87b5aa8-aa1f-49bb-b5af-7fc6d52c0941' => 'Ladeneinrichtung (640)',
            'fe4ed5d8-8e69-4d10-923e-525948ea34df' => 'Büroeinrichtung (650)',
            'ec2ec6e5-217f-4e59-a3bc-ebd5562c3f50' => 'Geringwertige Wirtschaftsgüter (670)',
            // Darlehen
            '4ae5384e-438e-4466-9c9f-338096abac58' => 'Darlehen (3150)',
            'b9439764-a201-4a5c-84f4-2ae20c8bd40d' => 'Aufnahme (3150)',
            '89c3d29c-5896-4747-8cbb-9e44cb269946' => 'Aufnahme Gesellschafter (3510)',
            // Einnahmen
            '8f8664a1-fd86-11e1-a21f-0800200c9a66' => 'Einnahmen (4300, 4400, 4200)',
            '8f8664a0-fd86-11e1-a21f-0800200c9a66' => 'Dienstleistung (4300, 4400, 4200)',
            '8f8664a4-fd86-11e1-a21f-0800200c9a66' => 'Honorar/Gage (4300, 4400, 4200)',
            '8f8664a5-fd86-11e1-a21f-0800200c9a66' => 'Geräteverleih (4300, 4400, 4200)',
            '8f8664a6-fd86-11e1-a21f-0800200c9a66' => 'Prämien (4300, 4400, 4200)',
            '8f8664a7-fd86-11e1-a21f-0800200c9a66' => 'Provisionsumätze (4569, 4560, 4576, 4566)',
            '8f8664a8-fd86-11e1-a21f-0800200c9a66' => 'Warenverkäufe (4300, 4400, 4200)',
            '8f8664a9-fd86-11e1-a21f-0800200c9a66' => 'Wartung (4300, 4400, 4200)',
            '8f8664a3-fd86-11e1-a21f-0800200c9a66' => 'Erlösminderungen (4710, 4720, 4700)',
            'e188b015-58e0-4182-8419-96ba15cbb166' => 'Photovoltaikanlagen (4290)',
            'be32ceb3-684a-485e-b628-4bcc748bac4b' => 'Bauleistungen §13b (4337)',
            '380a20cb-d04c-426e-b49c-84c22adfa362' => 'Fremdleistungen §13b (4336)',
            'f5c7fee8-f184-4e7a-ab04-8f7e7ad6c207' => 'Einnahmen als Kleinunternehmer (4184)',
            '7a1efa0e-6283-4cbf-9583-8e88d3ba5960' => 'Einnahmen als Kleinunternehmer (bis 2025) (4185)',
            '9075a4e3-66de-4795-a016-3889feca0d20' => 'Innergemeinschaftliche Lieferung (4125)',
            'ef5b1a6e-f690-4004-9a19-91276348894f' => 'Dienstleistungen an Drittländer (4338)',
            '93d24c20-ea84-424e-a731-5e1b78d1e6a9' => 'Ausfuhrlieferungen an Drittländer (4120)',
            '7c112b66-0565-479c-bc18-5845e080880a' => 'Fernverkauf (4315, 4310)',
            'd73b880f-c24a-41ea-a862-18d90e1c3d82' => 'Elektronische Dienstleistungen (4449, 4450)',
            '4ebd965a-7126-416c-9d8c-a5c9366ee473' => 'Fernverkauf in EU-Land steuerpflichtig (4320)',
            '7ecea006-844c-4c98-a02d-aa3142640dd5' => 'Elektronische Dienstleistung in EU-Land steuerpflichtig (4331)',
            // Kapital
            'f06dd343-53ec-4e6a-8680-e812d526dae1' => 'Stammakapital (2900)',
            // Privat
            '5461e150-10d7-492f-968d-33413ff63a53' => 'Privat (2180)',
            'cfddcc54-fd86-11e1-a21f-0800200c9a66' => 'Privateinlagen (2180)',
            'a520b74b-7f64-4b98-a09b-373641d56ba0' => 'Verrechnungskonto Gesellschafter (3640)',
            'bc25f5d5-c2c7-4394-b5ae-f422a779d68a' => 'Einlagen Kommanditisten (2580)',
            'ef5afd88-4a48-4582-8934-9b60fd9ad9d5' => 'Einkommensteuer (2150)',
            '6d0a1338-803c-4188-86a1-ba0b2f88e2f3' => 'Versicherungen (privat) (2200)',
            '55e8b902-671e-49a4-b4bf-7e3b6f9ad305' => 'Spenden (2250)',
            'db6c9e4f-bf42-424d-ab36-a1c0977c8375' => 'Krankheitskosten (2280)',
            // Sonstige Einnahmen
            'cfddcc50-fd86-11e1-a21f-0800200c9a66' => 'Sonstige Einnahmen (4836, 4830, 4835)',
            'cfddcc52-fd86-11e1-a21f-0800200c9a66' => 'Miete/Pacht (4836, 4200)',
            '94c21e70-fdd4-43a6-a199-c233a2b15e33' => 'Kautionen (erhalten) (3550)',
            '22d1f5fe-2112-4824-9eb4-22502ce64cf5' => 'Versicherungsentschädigungen (4970)',
            '3e031e7a-3bbb-4636-b09d-48b798434551' => 'Investitionszuschüsse (steuerpflichtig) (4975)',
            'a848c7de-d80e-453e-b2bc-0f0b0aa70462' => 'Investitionszulagen (steuerfrei) (4980)',
            '4cef8d07-b757-43eb-8dd8-da0c947800ff' => 'Mahngebühren (4839)',
            '5f1c4290-ad14-4487-b6f9-cbb2aff5efe2' => 'Zinserträge (7100)',
            'aba9020f-d0a6-47ca-ace6-03d6ed492351' => 'Rundungsdifferenzen (4840)',
            'c9eebb77-3f62-4ffa-99af-887c345a4a02' => 'Währungsumrechnung (4840)',
            'b01910ba-bcdd-4465-865e-3ffe0159f193' => 'Erstattungen Aufwendungsausgleichsgesetz (4972)',
            '27758e6b-220a-4ad4-98a0-96e1f17e2783' => 'Forderungen gegenüber Krankenkassen aus Aufwendungsausgleichsgesetz (1369)',
            // Umsatzsteuer
            'af1a07f3-8ce4-47dc-8c82-263960c2442d' => 'Umsatzsteuer-Vorauszahlungen (3820)',
            'd9bc790d-1a26-40a6-8b32-e5ef7c8b4d52' => 'Umsatzsteuer-Forderungen (1420)',
            '487ce31c-4db6-40d2-b192-3485b5ae5c6e' => 'Umsatzsteuer-Vorjahr (3841)',
            '307311b5-9139-4a46-9085-6dfed710458d' => 'Umsatzsteuererstattung aus EU-Ländern (3799)',
            // Zu prüfen
            '32b4c1d5-050f-4b80-9377-a8e98384ebee' => 'Zu prüfen (1370)',
            'eeaffbf8-d006-4c8c-b035-992817499eb4' => 'Durchlaufende Posten (1370)',
            '6656bbd4-f278-4a3d-8e22-c8543abfe906' => 'Geldtransit (1460)',
        ],
        'outgoing' => [
            // Anlagevermögen
            'aa2d19a0-43e7-4330-a579-75c962254546' => 'Software (135)',
            'e82f21da-c21b-44a0-8abb-cd805b62b231' => 'Technische Anlagen und Maschinen (400)',
            '1b029e34-70ad-4869-95da-bc9454c8650c' => 'KFZ (520)',
            '4334a658-f103-4791-810e-ffa997218766' => 'Lastkraftwagen (540)',
            '281cd301-6e13-4d27-81c2-30f896e5bf1d' => 'Sonstige Transportmittel (560)',
            '121188e5-61ec-4734-bcc2-282e4340bb33' => 'Werkzeuge (620)',
            '60a5a91b-6b4a-485e-b610-232b423a161d' => 'Betriebs-und Geschäftsausstattung (690)',
            '571e17ef-962d-4ec1-aedf-b166d876ebe1' => 'Ladeneinrichtung (640)',
            'd0d633ec-dda7-4aa3-867c-96e7a0d97477' => 'Büroeinrichtung (650)',
            '1b2d76c2-23a2-48c6-a717-7f9fecf99556' => 'Geringwertige Wirtschaftsgüter (670)',
            // Beratung
            'efa85651-fd85-11e1-a21f-0800200c9a66' => 'Beratung (6825)',
            'c5aa9395-d856-47d9-b346-27465116e584' => 'Beratung §13b (6825)',
            '576c695a-0572-41a0-980e-20ee5279ce65' => 'Beratung §13b Drittland (6825)',
            'f48154a0-fd90-11e1-a21f-0800200c9a66' => 'Rechtsanwalt (6825)',
            'f48154a1-fd90-11e1-a21f-0800200c9a66' => 'Steuerberater (6825)',
            '2bdc3fd5-3ef3-4732-b315-4fa2c1061994' => 'Buchführungskosten (6830)',
            '90999976-9851-491a-9b68-12f4078c219c' => 'Abschluss- und Prüfungskosten (6827)',
            // Beschränkt abziehbare Betriebsausgaben
            'efa82f4a-fd85-11e1-a21f-0800200c9a66' => 'Bewirtungskosten nur Mitarbeiter (6640)',
            '934adb21-fd90-11e1-a21f-0800200c9a66' => 'Bewirtungskosten mit Geschäftspartnern (6640)',
            'be378725-ff9e-4180-b72a-2effe6493bba' => 'Bewirtungskosten (nicht abziehbar) (6644)',
            '09b906eb-8e05-4ee7-88a5-8e49e6c4db72' => 'Geschenke (6610)',
            // Darlehen
            'efa85654-fd85-11e1-a21f-0800200c9a66' => 'Darlehen (3150)',
            '5921d421-fd91-11e1-a21f-0800200c9a66' => 'Tilgung (3150)',
            'eb85ea64-2097-4234-a8e3-5f28cb49f0a2' => 'Tilgung Gesellschafter (3150)',
            // Fahrzeug
            'efa82f47-fd85-11e1-a21f-0800200c9a66' => 'Fahrzeugkosten (6500)',
            '9eaf6ff0-fd89-11e1-a21f-0800200c9a66' => 'Kraftstoff/Ladestrom (6530)',
            '9eaf6ff7-fd89-11e1-a21f-0800200c9a66' => 'Fahrzeugpflege (6530)',
            '9eaf6ff1-fd89-11e1-a21f-0800200c9a66' => 'Inspektion/Reparatur (6540)',
            '9eaf6ff3-fd89-11e1-a21f-0800200c9a66' => 'Fahrzeugversicherungen (6520)',
            '9eaf6ff4-fd89-11e1-a21f-0800200c9a66' => 'Fremdfahrzeuge (6595)',
            '9eaf6ff5-fd89-11e1-a21f-0800200c9a66' => 'Stellplatz/Garagenmiete (6550)',
            '1e541b97-42de-4eb2-abe7-0e208cf46f38' => 'Mietleasing KFZ (6560)',
            '3199b01b-3a1f-3670-9e54-f2c106441a6e' => 'Mietleasing E-Fahrzeug/Fahrrad (6565)',
            '9eaf6ff8-fd89-11e1-a21f-0800200c9a66' => 'Sonstige KFZ-Kosten (6570)',
            '79e1efd6-7103-46cf-99c2-0717cc60350b' => 'Mautgebühren (6580)',
            '5597e22b-7ce8-4686-b15d-c2a6caa12d3b' => 'Kosten betriebl. Nutzung Fahrzeuge im Privatvermögen (6590)',
            // Fortbildung
            '5bc9acec-85af-48dd-a4c3-9ccc4ea6ac80' => 'Fortbildung (6821)',
            '09e90a1b-1aad-43b8-9803-b6fadffaf193' => 'Fortbildung §13b (6821)',
            '90fcbad4-d062-4877-8ca2-9b3176782f45' => 'Fortbildung §13b Drittland (6821)',
            '16d04a27-fd91-11e1-a21f-0800200c9a66' => 'Seminar/Weiterbildung (6821)',
            // Fremdleistungen
            'efa82f43-fd85-11e1-a21f-0800200c9a66' => 'Fremdleistungen (5900)',
            '205cae73-fd88-11e1-a21f-0800200c9a66' => 'Dienstleister (5900)',
            '205cae70-fd88-11e1-a21f-0800200c9a66' => 'Agenturen (5900)',
            '205cae71-fd88-11e1-a21f-0800200c9a66' => 'Freelancer/Freie Mitarbeiter (5900)',
            '205cae72-fd88-11e1-a21f-0800200c9a66' => 'Subunternehmer (5900)',
            '3ce7ec19-4828-4469-ac31-754a495cdbf1' => 'Bauleistungen §13b (5920)',
            '113476af-ac83-4bf2-941d-0daa37022945' => 'Fremdleistungen §13b (5923)',
            '6d49f842-54d9-4ebb-9c24-a25daac76203' => 'Fremdleistungen §13b Drittland (5925)',
            // Gezahlte Vorsteuer
            '3da06950-a89f-4b3f-9932-0e627cdf6a34' => 'Gezahlte Vorsteuer (1400)',
            'f1c2c983-db43-4d91-b0b1-c9d8aa89adef' => 'Einfuhrumsatzsteuer (1433)',
            // Material/Waren
            'efa82f42-fd85-11e1-a21f-0800200c9a66' => 'Material/Waren (5200)',
            '97704fd4-0e83-4c5b-a09c-1b4289644d10' => 'Materialeinkauf (5100)',
            '97938aa5-c5a7-4d31-bdac-a19209ba432e' => 'Wareneinkauf (5200)',
            'dba64b05-85f7-4359-8e83-a2556a62eeac' => 'Innergemeinschaftlicher Erwerb (5425, 5420)',
            '3085632b-dd6b-4380-9425-e5821c1c9031' => 'Bezugsnebenkosten (5800)',
            'e9905c70-fd87-11e1-a21f-0800200c9a66' => 'Aufwandsminderungen (5700)',
            // Personal
            'efa82f44-fd85-11e1-a21f-0800200c9a66' => 'Personal (6000)',
            '5bcf2ff2-fd88-11e1-a21f-0800200c9a66' => 'Löhne (6010)',
            '5bcf2ff4-fd88-11e1-a21f-0800200c9a66' => 'Prämie/Provision (6000)',
            '278d79f0-2d9a-4326-9ff7-28b666ae49ca' => 'Gehälter (6020)',
            '689092e1-cb82-4d93-8659-e9068cf97b78' => 'Geschäftsführergehälter (6027)',
            'a8f23059-48c2-4dc9-aeae-d5fb8438c476' => 'Geschäftsführergehälter GmbH-Gesellschafter (6024)',
            '5bcf2ff1-fd88-11e1-a21f-0800200c9a66' => 'Sozialabgaben (6110)',
            'ec6225a9-e6d5-40bd-89fb-0d944ea4cc98' => 'Soziale Abgaben für Minijobber (6171)',
            'ae6837dc-fc52-41b6-9539-4912df4999f8' => 'Freiwillige steuerfreie soziale Aufwendungen (6130)',
            '93793549-d846-4c55-86b8-98902a2c47f3' => 'Berufsgenossenschaft (6120)',
            '94c7de01-6898-4e2b-803a-50e442149692' => 'Vermögenswirksame Leistungen (6080)',
            '5bcf2ff0-fd88-11e1-a21f-0800200c9a66' => 'Aushilfslöhne (6030)',
            '3cea5628-7946-47e0-a3ad-d712c4440c77' => 'Löhne für Minijobs (6035)',
            '5bcf2ff3-fd88-11e1-a21f-0800200c9a66' => 'Pauschale Steuer für Aushilfen (6040)',
            '48806a21-87a2-4e4c-8ced-1857100091d4' => 'Pauschale Steuern für Minijobber (6036)',
            '8afe1a96-bb88-4740-922f-ac36dc897144' => 'Pauschale Steuer auf sonstige Bezüge (6069)',
            '7a7300b0-e588-4732-a88b-a09537bf49f4' => 'Pauschale Steuern für Gesellschafter-Geschäftsführer (6037)',
            // Privat
            'efa85653-fd85-11e1-a21f-0800200c9a66' => 'Privat (2100)',
            '16d04a25-fd91-11e1-a21f-0800200c9a66' => 'Privatentnahmen (2100)',
            '8ee022a6-6722-4d61-924c-7e50603ffd79' => 'Verrechnungskonto Gesellschafter (1307)',
            '35bfb902-6845-45aa-8f90-747226f1e632' => 'Entnahmen Kommanditisten (2500)',
            '222b6f70-fd92-11e1-a21f-0800200c9a66' => 'Einkommensteuer (2150)',
            '328a41b4-58d7-4595-8840-1b96ad398f15' => 'Versicherungen (privat) (2200)',
            '72b9ed0d-95fa-4be7-8035-1f96d28b9725' => 'Spenden (2250)',
            '800030a3-b5e8-43ef-b1a1-62046d65f1a3' => 'Krankheitskosten (2280)',
            // Raumkosten
            '2f47898b-ad5c-460b-93f2-8966c49cf6e3' => 'Raumkosten (6310)',
            'ccbd1972-fd88-11e1-a21f-0800200c9a66' => 'Miete/Pacht (6310)',
            '58b6ca5f-7d9f-4d5b-805c-6b9ec9ef4347' => 'Kautionen (geleistet) (1350)',
            'ccbd1970-fd88-11e1-a21f-0800200c9a66' => 'Heizung (6320)',
            'ccbd1973-fd88-11e1-a21f-0800200c9a66' => 'Strom, Wasser, Gas (6325)',
            'd5249d11-fd90-11e1-a21f-0800200c9a66' => 'Renovierung/Instandhaltung (6335)',
            'ccbd1974-fd88-11e1-a21f-0800200c9a66' => 'Müllgebühren (6859)',
            'c3197c22-d101-11ec-9d64-0242ac120002' => 'Sonstige Raumkosten (6345)',
            // Reisen
            'efa82f49-fd85-11e1-a21f-0800200c9a66' => 'Reisen (6670)',
            'f9f05691-fd89-11e1-a21f-0800200c9a66' => 'Fahrtkosten (6673)',
            'f9f05692-fd89-11e1-a21f-0800200c9a66' => 'Öffentliche Verkehrsmittel (6673)',
            'f9f05693-fd89-11e1-a21f-0800200c9a66' => 'Taxi (6673)',
            'f9f05690-fd89-11e1-a21f-0800200c9a66' => 'Bahn-/Flugticket, Mietwagen (6673)',
            'f9f05694-fd89-11e1-a21f-0800200c9a66' => 'Übernachtungskosten (6680)',
            '4c4f9907-0379-408a-989b-22850d2fbcdc' => 'Frühstück (6680)',
            '9fb5e4b0-94ae-47f3-804f-5ed00e4aceb6' => 'Verpflegungsmehraufwendungen (6674)',
            'cf03a2b0-f838-474f-ac5e-67adb9b830c7' => 'Reise MA (6650)',
            '3620798f-ae06-4492-b775-1c87eb99247c' => 'Fahrtkosten MA (6663)',
            '8c69c437-9841-4f7d-ae1c-2457cf6b0a57' => 'Kilometergelderstattung MA (6668)',
            'b99b667f-bfee-41b9-8ec0-cee308bdacfd' => 'Übernachtung MA (6660)',
            '353e8c93-5f69-4476-887f-d48734ee2cc7' => 'Verpflegungsmehraufw. MA (6664)',
            // Reparaturen
            'efa85650-fd85-11e1-a21f-0800200c9a66' => 'Reparaturen (6335)',
            'd5249d12-fd90-11e1-a21f-0800200c9a66' => 'Wartung (6335)',
            '50ca159d-1155-4d9a-8f79-b013943c774e' => 'Anlagen und Maschinen (6460)',
            'd854ed5f-969a-4b5f-b13a-9679648aa988' => 'Sonstige Reparaturen (6470)',
            // Sonstige Ausgaben
            '16d04a28-fd91-11e1-a21f-0800200c9a66' => 'Sonstige Ausgaben (6300)',
            'f13b89bc-d104-11ec-9d64-0242ac120002' => 'Sonstige Abgaben (6430)',
            '16d04a21-fd91-11e1-a21f-0800200c9a66' => 'Bürobedarf (6815)',
            '16d04a24-fd91-11e1-a21f-0800200c9a66' => 'Porto (6800)',
            'd5249d10-fd90-11e1-a21f-0800200c9a66' => 'Werkzeuge und Kleingeräte (6845)',
            '16d04a29-fd91-11e1-a21f-0800200c9a66' => 'Zeitschriften/Bücher (6820)',
            '934adb20-fd90-11e1-a21f-0800200c9a66' => 'Betriebliche Besprechungen (6643)',
            '16d04a26-fd91-11e1-a21f-0800200c9a66' => 'Reinigung/Reinigungsmittel (6330)',
            'ea834b8c-d104-11ec-9d64-0242ac120002' => 'Grundstücksaufwendungen (betrieblich) (6350)',
            '16d04a20-fd91-11e1-a21f-0800200c9a66' => 'Anschaffungen (6850)',
            'fb198cf9-79f2-407c-baeb-9d8aa9b98fd0' => 'Kosten der Warenabgabe (6700)',
            '26e4fa58-db12-443f-9e70-9a8081730c1c' => 'Verpackungsmaterial (6710)',
            'b49aae5f-4121-4262-b8bd-f49278b66423' => 'Lizenzen und Konzessionen (6837)',
            '587c625c-2a8b-4a0e-88a7-5e058af9f7e9' => 'Lizenzen und Konzessionen §13b (6837)',
            '6d575db0-74e8-433d-a986-27b76ea27f9e' => 'Lizenzen und Konzessionen §13b Drittland (6837)',
            '9d92c0dc-8cea-4791-ab3b-90f913101d32' => 'Wartungskosten für Hard- und Software (6495)',
            'ccbd1971-fd88-11e1-a21f-0800200c9a66' => 'Leasing für Geräte (6840)',
            '6a90d581-46ba-4b59-ba8f-e568a552e0c0' => 'Aufmerksamkeiten (6643)',
            '0af461af-02f2-7a3c-4274-dc8c9ba8f013' => 'Sachzuwendungen (6822)',
            '61b6c617-d5b6-44ee-b43a-ac97b71f1bd8' => 'Rundungsdifferenzen (6880)',
            '207833b2-59fb-4185-b7b3-52ab9b944d59' => 'Währungsumrechnung (6880)',
            // Steuern
            '9eaf6ff2-fd89-11e1-a21f-0800200c9a66' => 'KFZ-Steuer (7685)',
            '222b6f71-fd92-11e1-a21f-0800200c9a66' => 'Gewerbesteuer (7610)',
            '75c4dd86-9977-4624-bac8-620e7aa08dd2' => 'Körperschaftsteuer (7600)',
            'fcac6066-8597-4086-8544-b95c444738a2' => 'Solidaritätszuschlag (7608)',
            // Telefon/Internet
            'efa82f4b-fd85-11e1-a21f-0800200c9a66' => 'Telefon/Internet (6805)',
            'b3a1f840-fd90-11e1-a21f-0800200c9a66' => 'Festnetz (6805)',
            'b3a1f842-fd90-11e1-a21f-0800200c9a66' => 'Mobil (6805)',
            'b3a1f841-fd90-11e1-a21f-0800200c9a66' => 'Internet (6810)',
            // Umsatzsteuer-Vorauszahlungen
            '222b6f72-fd92-11e1-a21f-0800200c9a66' => 'Umsatzsteuer-Vorauszahlungen (3820)',
            'e68b1ec8-3a46-4100-890b-01bc86cf8ada' => 'Sondervorauszahlung 1/11 (3830)',
            'ebbdd0f4-3bd4-4d2e-847f-8b68314f7ef6' => 'Umsatzsteuer-Vorjahr (3841)',
            'd6472ace-832b-4c74-b136-5ceff39fdfa1' => 'Umsatzsteuerzahlung für EU-Länder (3799)',
            // Versicherungen/Beiträge
            'efa82f46-fd85-11e1-a21f-0800200c9a66' => 'Versicherungen (betrieblich) (6400)',
            'f49d88d0-fd88-11e1-a21f-0800200c9a66' => 'Betriebshaftpflicht (6400)',
            '5ce0f8a0-fd89-11e1-a21f-0800200c9a66' => 'Firmenversicherung (6400)',
            'f49d88d2-fd88-11e1-a21f-0800200c9a66' => 'Rechtschutz (6400)',
            'f49d88d3-fd88-11e1-a21f-0800200c9a66' => 'Transportversicherung (6760)',
            'f49d88d1-fd88-11e1-a21f-0800200c9a66' => 'Beiträge (6420)',
            // Werbung
            'efa82f48-fd85-11e1-a21f-0800200c9a66' => 'Werbung (6600)',
            '00d8f5f6-1d8a-40da-96ee-c53b25f37503' => 'Werbung §13b (6600)',
            'db55a5ca-8b9e-4c84-9961-dd2110f3b2b6' => 'Werbung §13b Drittland (6600)',
            'd22989b5-fd89-11e1-a21f-0800200c9a66' => 'Werbegeschenke/Sponsoring (6600)',
            'f57c7c2a-d104-11ec-9d64-0242ac120002' => 'Streuartikel (6605)',
            'd22989b0-fd89-11e1-a21f-0800200c9a66' => 'Anzeigen Print- und Online (6600)',
            'd22989b1-fd89-11e1-a21f-0800200c9a66' => 'Dekoration (6600)',
            'd22989b2-fd89-11e1-a21f-0800200c9a66' => 'Geschäftspapier/Visitenkarten (6600)',
            'd22989b3-fd89-11e1-a21f-0800200c9a66' => 'Marketing (6600)',
            'd22989b4-fd89-11e1-a21f-0800200c9a66' => 'Messekosten (6600)',
            '01d94be1-ba15-4dd8-a8e2-e1d51eaab8f9' => 'Repräsentationskosten (6630)',
            // Zinsen/Gebühren
            '16d04a22-fd91-11e1-a21f-0800200c9a66' => 'Girokontozinsen (7310)',
            '16d04a23-fd91-11e1-a21f-0800200c9a66' => 'Nebenkosten des Geldverkehrs (6855)',
            '5921d420-fd91-11e1-a21f-0800200c9a66' => 'Darlehenszinsen (7320)',
            // Zu prüfen
            '8d2e71c6-09d5-439a-a295-a9e71661afcd' => 'Zu prüfen (1370)',
            '62e21a0d-af46-4674-bfa0-60bc2607fa17' => 'Durchlaufende Posten (1370)',
            'dd56efd2-6c62-40e4-9d9e-cba7b0045911' => 'Geldtransit (1460)',
            // Zu zahlen
            'ec472a04-9712-4ebb-9c8d-981941a456e5' => 'Zu zahlen (3720)',
            '4708d50c-f3a9-4a27-98c4-d37502e3b45c' => 'Lohn-und Kirchensteuer (3730)',
            '27c9577e-9472-47cd-818e-a0cbb042bf82' => 'Sozialversicherungsbeiträge (3740)',
            'db9689f7-49d6-4f6f-9cc4-93804f7c674a' => 'Vermögensbildung (3770)',
            'fa4aadaa-8f1f-4121-99b4-bac9ad7c9bc9' => 'Verrechnung Lohn/Gehalt (3790)',
            'cd3ea3e5-b681-496b-9886-7f8a8ab0397a' => 'Nettogehälter (3720)',
            '4abd3f74-6556-48df-9581-91c689b0572f' => 'Verbindlichkeiten für Einbehaltungen von Mitarbeitern (3725)',
        ]
    ];
 
 
== One-Stop-Shop (OSS) Kategorien ==
 
# Deutsche Umsatzsteuer
Kategorie: Fernverkauf (Fernverkauf steht für Verkauf von Waren)
categoryId: 7c112b66-0565-479c-bc18-5845e080880a
Steuersätze: Es gelten die deutschen Steuersätze
 
Kategorie: Elektronische Dienstleistungen (ehemals MOSS)
categoryId: d73b880f-c24a-41ea-a862-18d90e1c3d82
Steuersätze: Es gelten die deutschen Steuersätze
 
# EU-Zielland-Steuer
Kategorie: Fernverkauf in EU-Land steuerpflichtig
categoryId: 4ebd965a-7126-416c-9d8c-a5c9366ee473
Steuersätze: Es gelten Steuersätze des Ziellandes
 
Kategorie: Elektronische Dienstleistung in EU-Land steuerpflichtig (ehemals MOSS)
categoryId: efa82f40-fd85-11e1-a21f-0800200c9a66
Steuersätze: Es gelten Steuersätze des Ziellandes
 
= Webhook Anfragen =
 
Wir liefern eine ''callback.php'' mit, die als callback URL angegeben werden kann.
Bei allen Aufrufen wird die ''X-Lxo-Signature'' überprüft und sichergestellt, dass der Aufruf wirklich von einem Lexware Office Server erstellt wurde.


= Error Handling =
= Error Handling =
Alle Methoden sollten stets in einem try/catch Block verwendet werden.<br>
Alle Methoden sollten stets in einem try/catch Block verwendet werden.<br>
Unser Client bietet eine erweiterte Execption Klasse, die via "$e->get_error()" sofern vorhanden weitere Details zur Anfrage und dem API Response zurück gibt.
Unser Client bietet eine erweiterte Execption Klasse, die via "$e->getError()" sofern vorhanden weitere Details zur Anfrage und dem API Response zurück gibt.


Beispiel: Versuch eines PDF Downloads von einer nicht fertig gestellten Rechnung
Beispiel: Versuch eines PDF Downloads von einer nicht fertig gestellten Rechnung
Zeile 284: Zeile 1.123:
<syntaxhighlight lang="php" highlight="3,7">
<syntaxhighlight lang="php" highlight="3,7">
try {
try {
     $lexoffice->get_invoice_pdf('7f0f0f7f-dd61-4bf7-a9f7-a67b0530c7e9', 'test.pdf');
     $lexware->get_invoice_pdf('7f0f0f7f-dd61-4bf7-a9f7-a67b0530c7e9', 'test.pdf');
} catch (lexoffice_exception $e) {
} catch (LexwareException $e) {
     echo $e->getMessage();
     echo $e->getMessage();
     // lexoffice-php-api: error in api request - check details via $e->get_error()
     // LexwareApi: error in api request - check details via $e->getError()
 
     print_r($e->get_error());
     print_r($e->getError());
     /*
     /*
     Array (
     Array (
         [HTTP Status] => 500
         [HTTP Status] => 500
         [Requested URI] => https://api.lexoffice.io/v1/invoices/7f0f0f7f-dd61-4bf7-a9f7-a67b0530c7e9/document
         [Requested URI] => https://api.lexware.io/v1/invoices/7f0f0f7f-dd61-4bf7-a9f7-a67b0530c7e9/document
         [Requested Payload] =>  
         [Requested Payload] =>
         [Response] => stdClass Object
         [Response] => stdClass Object
           (
           (
Zeile 308: Zeile 1.147:
}
}
</syntaxhighlight>
</syntaxhighlight>
= Upgrade-Hinweise =
== 2.3.x → 2.4.0 ==
=== Keine Breaking Changes ===
Alle bestehenden Aufrufe funktionieren ohne Anpassung weiter. Der neue <code>$postal_code</code>-Parameter ist bei allen geänderten Methoden optional und hat den Standardwert <code><nowiki>''</nowiki></code>.
=== Neue Funktion: PLZ-basierte Drittgebiet-Erkennung ===
Ab 2.4.0 können umsatzsteuerliche Sondergebiete innerhalb von EU-Ländern (z. B. Helgoland, Kanarische Inseln, Livigno) korrekt als Drittgebiet behandelt werden – sofern die PLZ der Liefer-/Leistungsadresse übergeben wird.
Neue Methode: <code>is_excluded_postal_zone(string $country_code, string $postal_code): bool</code>
Folgende drei Methoden haben einen neuen optionalen letzten Parameter <code>string $postal_code = ''</code> erhalten:
* <code>is_european_member()</code>
* <code>get_needed_voucher_booking_id()</code>
* <code>get_needed_tax_type()</code>
=== Was du in deiner Integration prüfen solltest ===
Suche in deinem Code nach Aufrufen dieser drei Methoden und prüfe ob du die PLZ der Kundenadresse als letzten Parameter ergänzen kannst:
<syntaxhighlight lang="php">
// Suche nach diesen Methodennamen:
// is_european_member(
// get_needed_voucher_booking_id(
// get_needed_tax_type(
// Vorher (weiterhin gültig):
$lexware->get_needed_voucher_booking_id($taxrate, $countryCode, $date, $hasVatId, $isB2B, $isPhysical);
// Nachher (mit PLZ – empfohlen wenn vorhanden):
$postalCode = $address['zip'] ?? '';
$lexware->get_needed_voucher_booking_id($taxrate, $countryCode, $date, $hasVatId, $isB2B, $isPhysical, $postalCode);
</syntaxhighlight>
Die PLZ muss aus der '''Lieferadresse''' des Kunden stammen (Ort der Lieferung bzw. Leistungserbringung), nicht aus der Rechnungsadresse. Wenn keine PLZ bekannt ist, einfach weglassen – das Verhalten bleibt identisch zu 2.3.x.

Aktuelle Version vom 26. Juni 2026, 23:33 Uhr

Übersicht

PHP Client für office.lexware.de API (ehemals lexoffice.de)

Composer

CLI

composer require baebeca/lexware-php-api:~2.0

composer.json

{
  "require": {
    "baebeca/lexware-php-api": "~2.0",
  }
}

Support

An wen kann ich mich wenden, wenn ich Probleme oder Fragen habe?
Für diese Frage ist entscheidend, ob du eine Nutzungslizenz erworben hast oder die freie Variante benutzt.

  • Wenn eine Nutzungslizenz vorhanden ist, kannst du jederzeit ein Ticket bei uns öffnen:
    • E-Mail: support@baebeca.de
    • Telefon: 02261-8161691
  • Wenn du die freie Version benutzt, kannst du einen Github issue öffnen.

Lizenz

Dieses Projekt steht unter der "GNU AGPLv3 Lizenz".

Du darfst den Code frei verwenden, verändern und weiterverbreiten, **sofern deine Software ebenfalls quelloffen und veröffentlicht wird** (AGPLv3-konform).

Kommerzielle / Closed-Source Nutzung

Die Verwendung in kommerziellen oder Closed-Source-Projekten ist nicht ohne eine kommerzielle Lizenz gestattet.

Bitte kontaktiere uns unter support@baebeca.de, um eine Lizenz zu 199,-/netto/einmalig zu erwerben. Siehe dazu alle Infos: Kommerzielle Lizenzbedingungen

Lexware Office API Account erstellen

Erstellen Sie in Ihrem Lexware Office Account einen API Key.

Einstellungen :: Erweiterungen :: Lexware Office Public API :: "Schlüssel neu erstellen"

Mehrwertsteuersenkung - Konjunkturpaket 01.07.2020 - 31.12.2020

One-Stop-Shop (OSS) ab 01.07.2021

Rate-Limit

Lexware Office hat ein Rate-Limit von 2 Anfragen pro Sekunde. Siehe dazu: https://developers.lexware.io/docs/#api-rate-limits

Dieses Rate-Limit wird automatisch erkannt und der Request wird nach einem Sleep von "Sekunden * Anzahl Versuche" erneut abgesetzt. Mithilfe von $lexware->configure_rate_limit(bool $repeat = true, int $seconds_to_sleep = 1, int $max_tries = 10): void kann man das Verhalten parametrisieren.

Zusätzlich besteht die Möglichkeit via configure_rate_limit_callable(callable $callback = null) : void eine Callbackfunktion mitzugeben, die jedes Mal getriggert wird, wenn ein Rate-Limit getroffen wurde. Es wird dann ein bool Parameter mitgegeben ob der Aufruf noch einmal versucht wird.

Klasse einbinden

<?php
require __DIR__.'/vendor/autoload.php';
use \Baebeca\LexwareApi;
use \Baebeca\LexwareException;

$lexware = new LexwareApi([
    'api_key' => 'my-api-key'
]);

Start Parameter

api_key [string]
API Schlüssel
callback [string]
Ihre Standard Callback URL für Webhooks von Lexware Office
ssl_verify [bool] (default true)
Soll die SSL verbindung zu Lexware Office validiert werden

Error handling

<?php
// catch errors
try {
    $invoices = $lexware->get_last_invoices(-5);
}
catch (LexwareException $e) {
    var_dump($e->getMessage());
    print_r($e->getError());
}

Methoden

Account

Account abfragen

$lexware->get_profile() : object

Beispiel Rückgabe:

{
  "organizationId": "42b1fbdd-c4e0-4bb4-8c20-1d3d0b9432e8",
  "companyName": "Testfirma GmbH",
  "created": {
    "userName": "Frau Erika Musterfrau",
    "userEmail": "erika.musterfrau@testfirma.de",
    "date": "2017-01-03T13:15:45+0100"
  },
  "connectionId": "3dea098a-fae5-4458-a85c-f97965966c25",
  "features": [
    "cashbox"
  ],
  "subscriptionStatus": "active",
  "taxType": "net",
  "isSmallBusiness": false
}

Rechnungen

Rechnung abfragen

$lexware->get_invoice( string $uuid ) : object
uuid
Die eindeutige uuid des Eintrages der abgefragt werden soll

Alle Rechnungen abfragen

$lexware->get_invoices_all() : object

Die letzten n Rechnungen abfragen

$lexware->get_last_invoices(int $count) : object

Rechnung PDF herunterladen

legacy function - will be removed in futere releases, use get_pdf($type, $uuid, $filename) instead

$lexware->get_invoice_pdf( string $uuid, string $filename) : bool
uuid
Die eindeutige uuid des Eintrages der abgefragt werden soll
filename
Der lokale Dateiname an dem das PDF abgelegt werden soll. Sofern es sich um eine E-Rechnung handelt wird auch die XML Datei heruntergeladen und mit dem Zusatz ".xml" abgelegt.

Rechnung anlegen

$lexware->create_invoice( array $data [, bool $finalized = false, string $precedingSalesVoucherId= '' ] ) : object
data
Ein Array der Rechnungsdaten nach der nötigen Lexware Office Formatierung
Beispiel
 array(
     'voucherDate' => date(DATE_RFC3339_EXTENDED),
     'introduction' => 'Einleitungstext',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'address' => array(
     	#'contactId' => '<id>',
     	'name' => 'Frau Jane Doe',
     	'street' => 'Str. 1',
     	'zip' => '12345',
     	'city' => 'Stadt',
     	'countryCode' => 'DE',
      ),
      'lineItems' => array(
      	array(
       	 	'type' => 'custom',
       	 	'name' => 'Produktname',
       	 	'description' => 'Beschreibung',
       	 	'quantity' => 1,
       	 	'unitName' => 'Stück',
       	 	'unitPrice' => array(
       	 		'currency' => 'EUR',
       	 		'netAmount' => 10.99,
           	 	'taxRatePercentage' => 19,
       	 	),
       	 	#'discountPercentage' => 0,
       	),
      ),
      'totalPrice' => array(
       	'currency' => 'EUR',
       	#'totalDiscountAbsolute' => 0,
       	#'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      	'taxType' => 'net',
      ),
      'shippingConditions' => array(
      	'shippingDate' => date('Y-m-d').'T00:00:01.000+02:00',
      	'shippingType' => 'delivery',
      ),
      'paymentConditions' => array(
      	'paymentTermLabel' => 'Vorkasse',
      	'paymentTermDuration' => 1,
      ),
    )
finalized
Entscheidet ob die Rechnungfertiggestellt werden soll.
precedingSalesVoucherId
Eine Lexware Office UUID eines Belegs für den eine Rechnung erstellt wird.

Serienrechnungen

Serienrechnung abfragen

$lexware->get_recurring_template( string $uuid ) : object
uuid
Die eindeutige uuid des Eintrages der abgefragt werden soll

Alle Serienrechnungen abfragen

$lexware->get_recurring_templates_all() : object

Gutschriften

Gutschrift abfragen

$lexware->get_creditnote( string $uuid ) : object
uuid
Die eindeutige uuid der Gutschrift die abgefragt werden soll

Gutschrift anlegen

$lexware->create_creditnote( array $data [, bool $finalized = false, string $precedingSalesVoucherId= '' ] ) : object
data
Ein Array der Gutschriftsdaten nach der nötigen Lexware Office Formatierung
Beispiel
 array(
     'voucherDate' => date(DATE_RFC3339_EXTENDED),
     'introduction' => 'Rechnungskorrektur',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'address' => array(
     	#'contactId' => '<id>',
     	'name' => 'Frau Jane Doe',
     	'street' => 'Str. 1',
     	'zip' => '12345',
     	'city' => 'Stadt',
     	'countryCode' => 'DE',
      ),
      'lineItems' => array(
      	array(
       	 	'type' => 'custom',
       	 	'name' => 'Produktname',
       	 	'description' => 'Beschreibung',
       	 	'quantity' => 1,
       	 	'unitName' => 'Stück',
       	 	'unitPrice' => array(
       	 		'currency' => 'EUR',
       	 		'netAmount' => 10.99,
           	 	'taxRatePercentage' => 19,
       	 	),
       	 	#'discountPercentage' => 0,
       	),
      ),
      'totalPrice' => array(
       	'currency' => 'EUR',
       	#'totalDiscountAbsolute' => 0,
       	#'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      	'taxType' => 'net',
      )
    )
finalized
Entscheidet ob die Gutschrift fertiggestellt werden soll.
precedingSalesVoucherId
Eine Lexware Office UUID einer offenen Rechnung für die eine Gutschrift erstellt wird.

Angebote

Angebot abfragen

$lexware->get_quotation( string $uuid ) : object
uuid
Die eindeutige uuid des Angebotes das abgefragt werden soll

Angebot anlegen

$lexware->create_quotation( array $data [, bool $finalized = false ] ) : object
data
Ein Array der Angebotsdaten nach der nötigen Lexware Office Formatierung
Beispiel
 array(
     'voucherDate' => substr(date('c'), 0, 19).'.000'.substr(date('c'), 19),
     'expirationDate' => substr(date('c'), 0, 19).'.000'.substr(date('c'), 19),
     'introduction' => 'Einleitungstext',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'address' => array(
     	#'contactId' => '<id>',
     	'name' => 'Frau Jane Doe',
     	'street' => 'Str. 1',
     	'zip' => '12345',
     	'city' => 'Stadt',
     	'countryCode' => 'DE',
      ),
      'lineItems' => array(
      	array(
       	 	'type' => 'custom',
       	 	'name' => 'Produktname',
       	 	'description' => 'Beschreibung',
       	 	'quantity' => 1,
       	 	'unitName' => 'Stück',
       	 	'unitPrice' => array(
       	 		'currency' => 'EUR',
       	 		'netAmount' => 10.99,
           	 	'taxRatePercentage' => 19,
       	 	),
       	 	#'discountPercentage' => 0,
       	),
      ),
      'totalPrice' => array(
       	'currency' => 'EUR',
       	#'totalDiscountAbsolute' => 0,
       	#'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      	'taxType' => 'net',
      ),
      'shippingConditions' => [
        'shippingDate' => date(DATE_RFC3339_EXTENDED),
        'shippingType' => 'delivery',
      ],
      'paymentConditions' => [
        'paymentTermLabel' => 'Vorkasse',
        'paymentTermDuration' => 1,
      ],
 )
finalized
Entscheidet ob das ANgebot fertiggestellt werden soll.

Auftragsbestätigungen

Auftragsbestätigung abfragen

$lexware->get_orderconfirmation( string $uuid ) : object
uuid
Die eindeutige uuid der Auftragsbestätigung die abgefragt werden soll

Auftragsbestätigung anlegen

$lexware->create_orderconfirmation( array $data [, bool $finalized = false, string $precedingSalesVoucherId= '' ] ) : object
data
Ein Array der Auftragbestätigungsdaten nach der nötigen Lexware Office Formatierung
Beispiel
 array(
     'voucherDate' => date(DATE_RFC3339_EXTENDED),
     'introduction' => 'Einleitungstext',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'address' => array(
     	#'contactId' => '<id>',
     	'name' => 'Frau Jane Doe',
     	'street' => 'Str. 1',
     	'zip' => '12345',
     	'city' => 'Stadt',
     	'countryCode' => 'DE',
      ),
      'lineItems' => array(
      	array(
       	 	'type' => 'custom',
       	 	'name' => 'Produktname',
       	 	'description' => 'Beschreibung',
       	 	'quantity' => 1,
       	 	'unitName' => 'Stück',
       	 	'unitPrice' => array(
       	 		'currency' => 'EUR',
       	 		'netAmount' => 10.99,
           	 	'taxRatePercentage' => 19,
       	 	),
       	 	#'discountPercentage' => 0,
       	),
      ),
      'totalPrice' => array(
       	'currency' => 'EUR',
       	#'totalDiscountAbsolute' => 0,
       	#'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      	'taxType' => 'net',
      ),
      'shippingConditions' => array(
      	'shippingDate' => date('Y-m-d').'T00:00:01.000+02:00',
      	'shippingType' => 'delivery',
      ),
      'paymentConditions' => array(
      	'paymentTermLabel' => 'Vorkasse',
      	'paymentTermDuration' => 1,
      ),
    )
finalized
Entscheidet ob die Auftragsbestätigung fertiggestellt werden soll.
precedingSalesVoucherId
Eine Lexware Office UUID eines Belegs für die eine Auftragsbestätigung erstellt wird.

Lieferschein

Lieferschein abfragen

$lexware->get_deliverynote( string $uuid ) : object
uuid
Die eindeutige uuid des Lieferscheins der abgefragt werden soll

Lieferschein anlegen

$lexware->create_delivery_note( array $data [, bool $finalized = false, string $precedingSalesVoucherId= '' ] ) : object
data
Ein Array der Lieferscheindaten nach der nötigen Lexware Office Formatierung
Beispiel
 array(
     'voucherDate' => date(DATE_RFC3339_EXTENDED),
     'introduction' => 'Einleitungstext',
     'remark' => "Fußzeile\r\nMehrzeilig",
     'address' => array(
     	#'contactId' => '<id>',
     	'name' => 'Frau Jane Doe',
     	'street' => 'Str. 1',
     	'zip' => '12345',
     	'city' => 'Stadt',
     	'countryCode' => 'DE',
      ),
      'lineItems' => array(
      	array(
       	 	'type' => 'custom',
       	 	'name' => 'Produktname',
       	 	'description' => 'Beschreibung',
       	 	'quantity' => 1,
       	 	'unitName' => 'Stück',
       	 	'unitPrice' => array(
       	 		'currency' => 'EUR',
       	 		'netAmount' => 10.99,
           	 	'taxRatePercentage' => 19,
       	 	),
       	 	#'discountPercentage' => 0,
       	),
      ),
      'totalPrice' => array(
       	'currency' => 'EUR',
       	#'totalDiscountAbsolute' => 0,
       	#'totalDiscountPercentage' => 0,
      ),
      'taxConditions' => array(
      	'taxType' => 'net',
      ),
      'shippingConditions' => array(
      	'shippingDate' => date('Y-m-d').'T00:00:01.000+02:00',
      	'shippingType' => 'delivery',
      ),
      'paymentConditions' => array(
      	'paymentTermLabel' => 'Vorkasse',
      	'paymentTermDuration' => 1,
      ),
    )
finalized
Entscheidet ob der Lieferschein fertiggestellt werden soll.
precedingSalesVoucherId
Eine Lexware Office UUID eines Belegs für den der Lieferschein erstellt wird.

Mahnung

Mahnung abfragen

$lexware->get_dunning( string $uuid ) : object
uuid
Die eindeutige uuid der Mahnung welche abgefragt werden soll

Mahnung anlegen

$lexware->create_dunning( array $data, string $precedingSalesVoucherId ) : object
data
Ein Array der Mahndaten nach der nötigen Lexware Office Formatierung
precedingSalesVoucherId
Eine Lexware Office UUID einer offenen Rechnung für die eine Mahnung erstellt wird.

Belege

Beleg anlegen

$lexware->create_voucher( array $data ) : object
Paramater
data
Ein Array der Belegdaten nach der nötigen Lexware Office Formatierung

Beleg abfragen

$lexware->get_voucher( string $uuid ) : object
Paramater
  • uuid
    • Die eindeutige uuid des Beleges der abgefragt werden soll

Belege abfragen

$lexware->get_vouchers( string $type = 'invoice,creditnote,orderconfirmation', string $state = 'draft,open,paid,paidoff,voided,transferred', string $archived = 'both', string $date_from = '', string $date_to = '') : object
type
Einen oder mehrere Typen von Belegen (komma getrennt) die abgefragt werden sollen
state
Status der Belege die abgefragt werden sollen
archived
"both", "true" oder "false" als String ob archivierte/nicht archivierte Belege ausgegeben werden sollen
date_from
Datum (Format YYYY-MM-DD) ab wann einschließlich abgefragt werden soll
date_to
Datum (Format YYYY-MM-DD) bis wann einschließlich abgefragt werden soll

Belegbild hochladen (nicht zugeordnet)

$lexware->upload_file($file) : object
Parameter
  • file
    • Der Pfad zur Datei die hochgeladen werden soll
Rückgabe
  • id
    • Die eindeutige Datei-ID von Lexware Office
Beispiel Anfrage
$lexware->upload_file(__DIR__.'/invoice.pdf');
Beispiel Rückgabe
stdClass Object (
    [id] => 221fd5ed-5547-4bd3-b7c2-9796c1a0e4a6
)

Beleg hochladen (zugeordnet)

$lexware->upload_voucher($uuid, $file) : object
Parameter
  • uuid
    • Die ID des Beleges dem der Upload zugeordnet werden soll
  • file
    • Der Pfad zur Datei die hochgeladen werden soll
Rückgabe
  • id
    • Die eindeutige Datei-ID von Lexware Office

Beleg Dateien herunterladen

$lexware->get_voucher_files(string $uuid, string $filename_prefix) : array
Parameter
  • uiui
    • Die ID des Beleges dessen Dateien heruntergeladen werden sollen
  • filename_prefix
    • Der Dateipfad inkl. eines Dateiprefixes.
Rückgabe

Ein Array der Dateinamen. Sofern es sich um eine E-Rechnung handelt wird sowohl die XML Datei als auch die von Lexware visualisierte PDF Rechnung heruntergeladen.

Beispiel Anfrage
$lexware->get_voucher_files($uuid, '/files/IN_1234');
Beispiel Rückgabe
array (
    [0] => /files/IN_1234_1.jpg
    [1] => /files/IN_1234_2.png
    [2] => /files/IN_1234_3.pdf
)

Kontakte

Kontakt abfragen

$lexware->get_contact( string $uuid ) : object
Paramater
  • uuid
    • Die eindeutige uuid des Eintrages der abgefragt werden soll

Kontakt suchen

Bitte beachte das Lexware Office stets eine Suche nach "contains" macht. Eine Suche nach hans@hans.de liefert einen Treffer für den Kontakt hans@hans.de.google.com

$lexware->search_contact( array $filter, bool $respect_wildcards = false ) : object
Paramater
  • filter
    • Array bestehend aus den möglichen Filtern. Mehere Filter werden mit einem UND verknüpft.
      • email (mindestens 3 Zeichen)
      • name (mindestens 3 Zeichen)
      • number
      • customer (true/false)
      • vendor (true/false)
  • wildcards
    • Bool | Wenn true werden die Zeichen "_" (ein Zeichen) und "%" (mehrere Zeichen) als Wildcards genutzt, andernfalls im Inhalt als Zeichen erwartet.
Beispiel Anfrage
$lexware->search_contact(array(
	'email' => '',
	'name' => 'John Doe',
	'number' => '',
	'customer' => '',
	'vendor' => '',
));

Alle Kontakte abfragen

$lexware->get_contacts_all() : object

Kontakt anlegen

$lexware->create_contact( array $data) : object
Parameter
Beispiel Anfrage
$lexware->create_contact(array(
	'version' => 0,
	'roles' => array(
		'customer' => array(
			'number' => '',
		),
	),
	'company' => array(
		'name' => 'Baebeca Solutions GmbH',
		'street' => 'Genklerhardt 6',
		'zip' => '51647',
		'city' => 'Gummersbach',
		'countryCode' => 'DE',
		'contactPersons' => array(
			array(
				'salutation' => 'Herr',
				'firstName' => 'Jon',
				'lastName' => 'Doe',
				'emailAddress' =>'support@baebeca.de',
        	 	'phoneNumber' => '022619202930',
			)
		),
	),
	'addresses' => array(
		'billing' => array(
			array(
				'street' => 'Genklerhardt 6',
				'zip' => '51647',
				'city' => 'Gummersbach',
				'countryCode' => 'DE',
			),
		),
		'shipping' => array(
			array(
				'street' => 'Genklerhardt 6',
				'zip' => '51647',
				'city' => 'Gummersbach',
				'countryCode' => 'DE',
			),
		),
	),
	'emailAddresses' => array(
		'business' => array(
			'support@baebeca.de'
		),
	),
	'phoneNumbers' => array(
		'business' => array(
			'022619202930'
		),
	),
	'note' => '',
));

Kontakt aktualisieren

$lexware->update_contact( string $uuid, array $data) : object
Parameter
  • uuid
    • Die eindeutige uuid des Eintrages der abgefragt werden soll
  • data

Events / Webhooks

Event anlegen

$lexware->create_event( string $event [, bool $callback = false ] ) : array|bool
event
Mögliche sind alle von Lexware Office angebotenen Events.
callback
Die Callback URL für diesen Aufruf. Wenn keine angegeben wird, wird die Standard URL aus der initialisierung genutzt.

Aktives Event abfragen

$lexware->get_event( string $uuid ) : array
uuid
Die eindeutige uuid des Eintrages der abgefragt werden soll

Alle aktiven Events abfragen

$lexware->get_events_all() : object

Event löschen

$lexware->delete_event( string $iiud ) : object
uuid
Die ID eines zuvor erstellten Events.

Steuern

Kleinunternehmer

$lexware->is_tax_free_company(): bool

PLZ-Sonderzone prüfen (Drittgebiet)

$lexware->is_excluded_postal_zone(string $country_code, string $postal_code = ''): bool

Prüft ob eine PLZ innerhalb eines EU-Landes in einem umsatzsteuerlichen Sondergebiet liegt (Drittgebiet gem. § 1 Abs. 3 UStG). Diese Gebiete sind trotz EU-Ländercode vom EU-MwSt-Gebiet ausgeschlossen und müssen steuerlich wie Drittländer behandelt werden.

Gibt false zurück wenn keine PLZ übergeben wird.

Bekannte Sonderzonen (in der Property $postal_vat_zones hinterlegt):

Land PLZ-Bereich Gebiet
DE 27498 Helgoland
DE 78266 Büsingen am Hochrhein
ES 35000–35999 Kanarische Inseln
ES 38000–38999 Kanarische Inseln
ES 51000–51999 Ceuta
ES 52000–52999 Melilla
IT 23030 Livigno
IT 22060 Campione d'Italia
GR 63086 Berg Athos
FI 22000–22999 Åland-Inseln
$country_code
2-stelliger Ländercode
$postal_code
PLZ der Liefer-/Leistungsadresse (optional; ohne PLZ immer false)

EU - Innergemeinschaftlicher Raum

$lexware->is_european_member(string $country_code, int $date, string $postal_code = ''): bool
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum
$postal_code
PLZ der Liefer-/Leistungsadresse (optional). Wenn die PLZ einer bekannten Sonderzone entspricht, gibt die Methode false zurück – auch wenn das Land selbst EU-Mitglied ist.

Buchungskategorie bestimmen

$lexware->get_needed_voucher_booking_id(float $taxrate, string $country_code, int $date, bool $euopean_vatid, bool $b2b_business, bool $physical_good = true, string $postal_code = ''): string
$taxrate
Steuersatz der verwendet werden soll (Wird auf Gültigkeit geprüft)
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum
$euopean_vatid
Verfügt man über die Kunden UST-ID
$b2b_business
Handelt es sich um einen Endkunden oder Geschäftskunden
$physical_good
Wird physikalische Ware oder digitale Dienstleistung verkauft
$postal_code
PLZ der Liefer-/Leistungsadresse (optional). PLZ-Sonderzonen (z. B. Helgoland, Kanarische Inseln) werden automatisch wie Drittland behandelt.

Abfrage der möglichen Steuersätze

$lexware->get_taxrates(string $country_code, int $date): array
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum


Prüfung Steuersatz

$lexware->check_taxrate(float $taxrate, string $country_code, int $date): bool
$taxrate
Der zu prüfende Steuersatz
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum

One-Stop-Shop (OSS) / Steuer Methoden

OSS Einstellungen prüfen

$lexware->is_oss_needed(string $country_code, int $date)
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum

Prüfung OSS Voucher Kategorie

$lexware->get_oss_voucher_category(string $country_code, int $date, int $booking_category = 1, float $taxrate = 0): string
$country_code
2-Stelliger Country Code des Rechnungslandes
$date
Timestamp Rechnungsdatum
$booking_category
Angabe welche Buchungskategorie genutzt werden soll
1 => Fernverkauf
2 => Elektronische Dienstleistung
$taxrate
Genutzter Steuersatz in Buchung

Sonstiges

PDFs herunterladen

$lexware->get_pdf(string $type, string $uuid, string $filename): bool
type
Die Art des Beleges. Möglich Varianten sind: "invoices", "credit-notes"
uuid
Die eindeutige uuid des Eintrages der abgefragt werden soll
filename
Der lokale Dateiname an dem das PDF abgelegt werden soll

Voucher Kategorien

Bei zu erstellenden Vouchers, muss ein Buchungskonto angegeben werden.

incoming
Ausgangsbelege (eingehender Geldfluß)
outgoing
Eingangsbelege (ausgehender Geldfluß)
   private $booking_categories = [
       'incoming' => [
           // Anlagevermögen
           'c5430e38-6daa-46e7-99d5-a65fd737338f' => 'Software (135)',
           'b32709ec-08c2-4d3f-8c29-4f8da6e03541' => 'Technische Anlagen und Maschinen (400)',
           '4f01e761-d912-441f-ad1a-1c1d2d590a81' => 'KFZ (520)',
           '13efe6dc-c3a3-4d6b-a793-81a1c0d78ece' => 'LKW (540)',
           '21027249-d7c3-455f-9b27-88cfe23cb14f' => 'Sonstige Transportmittel (560)',
           '78361a84-43e6-4643-84ce-7c4925e30a7f' => 'Werkzeuge (620)',
           'd8f6b5c4-62c4-4ed8-8deb-27eb284de06d' => 'Betriebs-und Geschäftsausstattung (690)',
           'f87b5aa8-aa1f-49bb-b5af-7fc6d52c0941' => 'Ladeneinrichtung (640)',
           'fe4ed5d8-8e69-4d10-923e-525948ea34df' => 'Büroeinrichtung (650)',
           'ec2ec6e5-217f-4e59-a3bc-ebd5562c3f50' => 'Geringwertige Wirtschaftsgüter (670)',
           // Darlehen
           '4ae5384e-438e-4466-9c9f-338096abac58' => 'Darlehen (3150)',
           'b9439764-a201-4a5c-84f4-2ae20c8bd40d' => 'Aufnahme (3150)',
           '89c3d29c-5896-4747-8cbb-9e44cb269946' => 'Aufnahme Gesellschafter (3510)',
           // Einnahmen
           '8f8664a1-fd86-11e1-a21f-0800200c9a66' => 'Einnahmen (4300, 4400, 4200)',
           '8f8664a0-fd86-11e1-a21f-0800200c9a66' => 'Dienstleistung (4300, 4400, 4200)',
           '8f8664a4-fd86-11e1-a21f-0800200c9a66' => 'Honorar/Gage (4300, 4400, 4200)',
           '8f8664a5-fd86-11e1-a21f-0800200c9a66' => 'Geräteverleih (4300, 4400, 4200)',
           '8f8664a6-fd86-11e1-a21f-0800200c9a66' => 'Prämien (4300, 4400, 4200)',
           '8f8664a7-fd86-11e1-a21f-0800200c9a66' => 'Provisionsumätze (4569, 4560, 4576, 4566)',
           '8f8664a8-fd86-11e1-a21f-0800200c9a66' => 'Warenverkäufe (4300, 4400, 4200)',
           '8f8664a9-fd86-11e1-a21f-0800200c9a66' => 'Wartung (4300, 4400, 4200)',
           '8f8664a3-fd86-11e1-a21f-0800200c9a66' => 'Erlösminderungen (4710, 4720, 4700)',
           'e188b015-58e0-4182-8419-96ba15cbb166' => 'Photovoltaikanlagen (4290)',
           'be32ceb3-684a-485e-b628-4bcc748bac4b' => 'Bauleistungen §13b (4337)',
           '380a20cb-d04c-426e-b49c-84c22adfa362' => 'Fremdleistungen §13b (4336)',
           'f5c7fee8-f184-4e7a-ab04-8f7e7ad6c207' => 'Einnahmen als Kleinunternehmer (4184)',
           '7a1efa0e-6283-4cbf-9583-8e88d3ba5960' => 'Einnahmen als Kleinunternehmer (bis 2025) (4185)',
           '9075a4e3-66de-4795-a016-3889feca0d20' => 'Innergemeinschaftliche Lieferung (4125)',
           'ef5b1a6e-f690-4004-9a19-91276348894f' => 'Dienstleistungen an Drittländer (4338)',
           '93d24c20-ea84-424e-a731-5e1b78d1e6a9' => 'Ausfuhrlieferungen an Drittländer (4120)',
           '7c112b66-0565-479c-bc18-5845e080880a' => 'Fernverkauf (4315, 4310)',
           'd73b880f-c24a-41ea-a862-18d90e1c3d82' => 'Elektronische Dienstleistungen (4449, 4450)',
           '4ebd965a-7126-416c-9d8c-a5c9366ee473' => 'Fernverkauf in EU-Land steuerpflichtig (4320)',
           '7ecea006-844c-4c98-a02d-aa3142640dd5' => 'Elektronische Dienstleistung in EU-Land steuerpflichtig (4331)',
           // Kapital
           'f06dd343-53ec-4e6a-8680-e812d526dae1' => 'Stammakapital (2900)',
           // Privat
           '5461e150-10d7-492f-968d-33413ff63a53' => 'Privat (2180)',
           'cfddcc54-fd86-11e1-a21f-0800200c9a66' => 'Privateinlagen (2180)',
           'a520b74b-7f64-4b98-a09b-373641d56ba0' => 'Verrechnungskonto Gesellschafter (3640)',
           'bc25f5d5-c2c7-4394-b5ae-f422a779d68a' => 'Einlagen Kommanditisten (2580)',
           'ef5afd88-4a48-4582-8934-9b60fd9ad9d5' => 'Einkommensteuer (2150)',
           '6d0a1338-803c-4188-86a1-ba0b2f88e2f3' => 'Versicherungen (privat) (2200)',
           '55e8b902-671e-49a4-b4bf-7e3b6f9ad305' => 'Spenden (2250)',
           'db6c9e4f-bf42-424d-ab36-a1c0977c8375' => 'Krankheitskosten (2280)',
           // Sonstige Einnahmen
           'cfddcc50-fd86-11e1-a21f-0800200c9a66' => 'Sonstige Einnahmen (4836, 4830, 4835)',
           'cfddcc52-fd86-11e1-a21f-0800200c9a66' => 'Miete/Pacht (4836, 4200)',
           '94c21e70-fdd4-43a6-a199-c233a2b15e33' => 'Kautionen (erhalten) (3550)',
           '22d1f5fe-2112-4824-9eb4-22502ce64cf5' => 'Versicherungsentschädigungen (4970)',
           '3e031e7a-3bbb-4636-b09d-48b798434551' => 'Investitionszuschüsse (steuerpflichtig) (4975)',
           'a848c7de-d80e-453e-b2bc-0f0b0aa70462' => 'Investitionszulagen (steuerfrei) (4980)',
           '4cef8d07-b757-43eb-8dd8-da0c947800ff' => 'Mahngebühren (4839)',
           '5f1c4290-ad14-4487-b6f9-cbb2aff5efe2' => 'Zinserträge (7100)',
           'aba9020f-d0a6-47ca-ace6-03d6ed492351' => 'Rundungsdifferenzen (4840)',
           'c9eebb77-3f62-4ffa-99af-887c345a4a02' => 'Währungsumrechnung (4840)',
           'b01910ba-bcdd-4465-865e-3ffe0159f193' => 'Erstattungen Aufwendungsausgleichsgesetz (4972)',
           '27758e6b-220a-4ad4-98a0-96e1f17e2783' => 'Forderungen gegenüber Krankenkassen aus Aufwendungsausgleichsgesetz (1369)',
           // Umsatzsteuer
           'af1a07f3-8ce4-47dc-8c82-263960c2442d' => 'Umsatzsteuer-Vorauszahlungen (3820)',
           'd9bc790d-1a26-40a6-8b32-e5ef7c8b4d52' => 'Umsatzsteuer-Forderungen (1420)',
           '487ce31c-4db6-40d2-b192-3485b5ae5c6e' => 'Umsatzsteuer-Vorjahr (3841)',
           '307311b5-9139-4a46-9085-6dfed710458d' => 'Umsatzsteuererstattung aus EU-Ländern (3799)',
           // Zu prüfen
           '32b4c1d5-050f-4b80-9377-a8e98384ebee' => 'Zu prüfen (1370)',
           'eeaffbf8-d006-4c8c-b035-992817499eb4' => 'Durchlaufende Posten (1370)',
           '6656bbd4-f278-4a3d-8e22-c8543abfe906' => 'Geldtransit (1460)',
       ],
       'outgoing' => [
           // Anlagevermögen
           'aa2d19a0-43e7-4330-a579-75c962254546' => 'Software (135)',
           'e82f21da-c21b-44a0-8abb-cd805b62b231' => 'Technische Anlagen und Maschinen (400)',
           '1b029e34-70ad-4869-95da-bc9454c8650c' => 'KFZ (520)',
           '4334a658-f103-4791-810e-ffa997218766' => 'Lastkraftwagen (540)',
           '281cd301-6e13-4d27-81c2-30f896e5bf1d' => 'Sonstige Transportmittel (560)',
           '121188e5-61ec-4734-bcc2-282e4340bb33' => 'Werkzeuge (620)',
           '60a5a91b-6b4a-485e-b610-232b423a161d' => 'Betriebs-und Geschäftsausstattung (690)',
           '571e17ef-962d-4ec1-aedf-b166d876ebe1' => 'Ladeneinrichtung (640)',
           'd0d633ec-dda7-4aa3-867c-96e7a0d97477' => 'Büroeinrichtung (650)',
           '1b2d76c2-23a2-48c6-a717-7f9fecf99556' => 'Geringwertige Wirtschaftsgüter (670)',
           // Beratung
           'efa85651-fd85-11e1-a21f-0800200c9a66' => 'Beratung (6825)',
           'c5aa9395-d856-47d9-b346-27465116e584' => 'Beratung §13b (6825)',
           '576c695a-0572-41a0-980e-20ee5279ce65' => 'Beratung §13b Drittland (6825)',
           'f48154a0-fd90-11e1-a21f-0800200c9a66' => 'Rechtsanwalt (6825)',
           'f48154a1-fd90-11e1-a21f-0800200c9a66' => 'Steuerberater (6825)',
           '2bdc3fd5-3ef3-4732-b315-4fa2c1061994' => 'Buchführungskosten (6830)',
           '90999976-9851-491a-9b68-12f4078c219c' => 'Abschluss- und Prüfungskosten (6827)',
           // Beschränkt abziehbare Betriebsausgaben
           'efa82f4a-fd85-11e1-a21f-0800200c9a66' => 'Bewirtungskosten nur Mitarbeiter (6640)',
           '934adb21-fd90-11e1-a21f-0800200c9a66' => 'Bewirtungskosten mit Geschäftspartnern (6640)',
           'be378725-ff9e-4180-b72a-2effe6493bba' => 'Bewirtungskosten (nicht abziehbar) (6644)',
           '09b906eb-8e05-4ee7-88a5-8e49e6c4db72' => 'Geschenke (6610)',
           // Darlehen
           'efa85654-fd85-11e1-a21f-0800200c9a66' => 'Darlehen (3150)',
           '5921d421-fd91-11e1-a21f-0800200c9a66' => 'Tilgung (3150)',
           'eb85ea64-2097-4234-a8e3-5f28cb49f0a2' => 'Tilgung Gesellschafter (3150)',
           // Fahrzeug
           'efa82f47-fd85-11e1-a21f-0800200c9a66' => 'Fahrzeugkosten (6500)',
           '9eaf6ff0-fd89-11e1-a21f-0800200c9a66' => 'Kraftstoff/Ladestrom (6530)',
           '9eaf6ff7-fd89-11e1-a21f-0800200c9a66' => 'Fahrzeugpflege (6530)',
           '9eaf6ff1-fd89-11e1-a21f-0800200c9a66' => 'Inspektion/Reparatur (6540)',
           '9eaf6ff3-fd89-11e1-a21f-0800200c9a66' => 'Fahrzeugversicherungen (6520)',
           '9eaf6ff4-fd89-11e1-a21f-0800200c9a66' => 'Fremdfahrzeuge (6595)',
           '9eaf6ff5-fd89-11e1-a21f-0800200c9a66' => 'Stellplatz/Garagenmiete (6550)',
           '1e541b97-42de-4eb2-abe7-0e208cf46f38' => 'Mietleasing KFZ (6560)',
           '3199b01b-3a1f-3670-9e54-f2c106441a6e' => 'Mietleasing E-Fahrzeug/Fahrrad (6565)',
           '9eaf6ff8-fd89-11e1-a21f-0800200c9a66' => 'Sonstige KFZ-Kosten (6570)',
           '79e1efd6-7103-46cf-99c2-0717cc60350b' => 'Mautgebühren (6580)',
           '5597e22b-7ce8-4686-b15d-c2a6caa12d3b' => 'Kosten betriebl. Nutzung Fahrzeuge im Privatvermögen (6590)',
           // Fortbildung
           '5bc9acec-85af-48dd-a4c3-9ccc4ea6ac80' => 'Fortbildung (6821)',
           '09e90a1b-1aad-43b8-9803-b6fadffaf193' => 'Fortbildung §13b (6821)',
           '90fcbad4-d062-4877-8ca2-9b3176782f45' => 'Fortbildung §13b Drittland (6821)',
           '16d04a27-fd91-11e1-a21f-0800200c9a66' => 'Seminar/Weiterbildung (6821)',
           // Fremdleistungen
           'efa82f43-fd85-11e1-a21f-0800200c9a66' => 'Fremdleistungen (5900)',
           '205cae73-fd88-11e1-a21f-0800200c9a66' => 'Dienstleister (5900)',
           '205cae70-fd88-11e1-a21f-0800200c9a66' => 'Agenturen (5900)',
           '205cae71-fd88-11e1-a21f-0800200c9a66' => 'Freelancer/Freie Mitarbeiter (5900)',
           '205cae72-fd88-11e1-a21f-0800200c9a66' => 'Subunternehmer (5900)',
           '3ce7ec19-4828-4469-ac31-754a495cdbf1' => 'Bauleistungen §13b (5920)',
           '113476af-ac83-4bf2-941d-0daa37022945' => 'Fremdleistungen §13b (5923)',
           '6d49f842-54d9-4ebb-9c24-a25daac76203' => 'Fremdleistungen §13b Drittland (5925)',
           // Gezahlte Vorsteuer
           '3da06950-a89f-4b3f-9932-0e627cdf6a34' => 'Gezahlte Vorsteuer (1400)',
           'f1c2c983-db43-4d91-b0b1-c9d8aa89adef' => 'Einfuhrumsatzsteuer (1433)',
           // Material/Waren
           'efa82f42-fd85-11e1-a21f-0800200c9a66' => 'Material/Waren (5200)',
           '97704fd4-0e83-4c5b-a09c-1b4289644d10' => 'Materialeinkauf (5100)',
           '97938aa5-c5a7-4d31-bdac-a19209ba432e' => 'Wareneinkauf (5200)',
           'dba64b05-85f7-4359-8e83-a2556a62eeac' => 'Innergemeinschaftlicher Erwerb (5425, 5420)',
           '3085632b-dd6b-4380-9425-e5821c1c9031' => 'Bezugsnebenkosten (5800)',
           'e9905c70-fd87-11e1-a21f-0800200c9a66' => 'Aufwandsminderungen (5700)',
           // Personal
           'efa82f44-fd85-11e1-a21f-0800200c9a66' => 'Personal (6000)',
           '5bcf2ff2-fd88-11e1-a21f-0800200c9a66' => 'Löhne (6010)',
           '5bcf2ff4-fd88-11e1-a21f-0800200c9a66' => 'Prämie/Provision (6000)',
           '278d79f0-2d9a-4326-9ff7-28b666ae49ca' => 'Gehälter (6020)',
           '689092e1-cb82-4d93-8659-e9068cf97b78' => 'Geschäftsführergehälter (6027)',
           'a8f23059-48c2-4dc9-aeae-d5fb8438c476' => 'Geschäftsführergehälter GmbH-Gesellschafter (6024)',
           '5bcf2ff1-fd88-11e1-a21f-0800200c9a66' => 'Sozialabgaben (6110)',
           'ec6225a9-e6d5-40bd-89fb-0d944ea4cc98' => 'Soziale Abgaben für Minijobber (6171)',
           'ae6837dc-fc52-41b6-9539-4912df4999f8' => 'Freiwillige steuerfreie soziale Aufwendungen (6130)',
           '93793549-d846-4c55-86b8-98902a2c47f3' => 'Berufsgenossenschaft (6120)',
           '94c7de01-6898-4e2b-803a-50e442149692' => 'Vermögenswirksame Leistungen (6080)',
           '5bcf2ff0-fd88-11e1-a21f-0800200c9a66' => 'Aushilfslöhne (6030)',
           '3cea5628-7946-47e0-a3ad-d712c4440c77' => 'Löhne für Minijobs (6035)',
           '5bcf2ff3-fd88-11e1-a21f-0800200c9a66' => 'Pauschale Steuer für Aushilfen (6040)',
           '48806a21-87a2-4e4c-8ced-1857100091d4' => 'Pauschale Steuern für Minijobber (6036)',
           '8afe1a96-bb88-4740-922f-ac36dc897144' => 'Pauschale Steuer auf sonstige Bezüge (6069)',
           '7a7300b0-e588-4732-a88b-a09537bf49f4' => 'Pauschale Steuern für Gesellschafter-Geschäftsführer (6037)',
           // Privat
           'efa85653-fd85-11e1-a21f-0800200c9a66' => 'Privat (2100)',
           '16d04a25-fd91-11e1-a21f-0800200c9a66' => 'Privatentnahmen (2100)',
           '8ee022a6-6722-4d61-924c-7e50603ffd79' => 'Verrechnungskonto Gesellschafter (1307)',
           '35bfb902-6845-45aa-8f90-747226f1e632' => 'Entnahmen Kommanditisten (2500)',
           '222b6f70-fd92-11e1-a21f-0800200c9a66' => 'Einkommensteuer (2150)',
           '328a41b4-58d7-4595-8840-1b96ad398f15' => 'Versicherungen (privat) (2200)',
           '72b9ed0d-95fa-4be7-8035-1f96d28b9725' => 'Spenden (2250)',
           '800030a3-b5e8-43ef-b1a1-62046d65f1a3' => 'Krankheitskosten (2280)',
           // Raumkosten
           '2f47898b-ad5c-460b-93f2-8966c49cf6e3' => 'Raumkosten (6310)',
           'ccbd1972-fd88-11e1-a21f-0800200c9a66' => 'Miete/Pacht (6310)',
           '58b6ca5f-7d9f-4d5b-805c-6b9ec9ef4347' => 'Kautionen (geleistet) (1350)',
           'ccbd1970-fd88-11e1-a21f-0800200c9a66' => 'Heizung (6320)',
           'ccbd1973-fd88-11e1-a21f-0800200c9a66' => 'Strom, Wasser, Gas (6325)',
           'd5249d11-fd90-11e1-a21f-0800200c9a66' => 'Renovierung/Instandhaltung (6335)',
           'ccbd1974-fd88-11e1-a21f-0800200c9a66' => 'Müllgebühren (6859)',
           'c3197c22-d101-11ec-9d64-0242ac120002' => 'Sonstige Raumkosten (6345)',
           // Reisen
           'efa82f49-fd85-11e1-a21f-0800200c9a66' => 'Reisen (6670)',
           'f9f05691-fd89-11e1-a21f-0800200c9a66' => 'Fahrtkosten (6673)',
           'f9f05692-fd89-11e1-a21f-0800200c9a66' => 'Öffentliche Verkehrsmittel (6673)',
           'f9f05693-fd89-11e1-a21f-0800200c9a66' => 'Taxi (6673)',
           'f9f05690-fd89-11e1-a21f-0800200c9a66' => 'Bahn-/Flugticket, Mietwagen (6673)',
           'f9f05694-fd89-11e1-a21f-0800200c9a66' => 'Übernachtungskosten (6680)',
           '4c4f9907-0379-408a-989b-22850d2fbcdc' => 'Frühstück (6680)',
           '9fb5e4b0-94ae-47f3-804f-5ed00e4aceb6' => 'Verpflegungsmehraufwendungen (6674)',
           'cf03a2b0-f838-474f-ac5e-67adb9b830c7' => 'Reise MA (6650)',
           '3620798f-ae06-4492-b775-1c87eb99247c' => 'Fahrtkosten MA (6663)',
           '8c69c437-9841-4f7d-ae1c-2457cf6b0a57' => 'Kilometergelderstattung MA (6668)',
           'b99b667f-bfee-41b9-8ec0-cee308bdacfd' => 'Übernachtung MA (6660)',
           '353e8c93-5f69-4476-887f-d48734ee2cc7' => 'Verpflegungsmehraufw. MA (6664)',
           // Reparaturen
           'efa85650-fd85-11e1-a21f-0800200c9a66' => 'Reparaturen (6335)',
           'd5249d12-fd90-11e1-a21f-0800200c9a66' => 'Wartung (6335)',
           '50ca159d-1155-4d9a-8f79-b013943c774e' => 'Anlagen und Maschinen (6460)',
           'd854ed5f-969a-4b5f-b13a-9679648aa988' => 'Sonstige Reparaturen (6470)',
           // Sonstige Ausgaben
           '16d04a28-fd91-11e1-a21f-0800200c9a66' => 'Sonstige Ausgaben (6300)',
           'f13b89bc-d104-11ec-9d64-0242ac120002' => 'Sonstige Abgaben (6430)',
           '16d04a21-fd91-11e1-a21f-0800200c9a66' => 'Bürobedarf (6815)',
           '16d04a24-fd91-11e1-a21f-0800200c9a66' => 'Porto (6800)',
           'd5249d10-fd90-11e1-a21f-0800200c9a66' => 'Werkzeuge und Kleingeräte (6845)',
           '16d04a29-fd91-11e1-a21f-0800200c9a66' => 'Zeitschriften/Bücher (6820)',
           '934adb20-fd90-11e1-a21f-0800200c9a66' => 'Betriebliche Besprechungen (6643)',
           '16d04a26-fd91-11e1-a21f-0800200c9a66' => 'Reinigung/Reinigungsmittel (6330)',
           'ea834b8c-d104-11ec-9d64-0242ac120002' => 'Grundstücksaufwendungen (betrieblich) (6350)',
           '16d04a20-fd91-11e1-a21f-0800200c9a66' => 'Anschaffungen (6850)',
           'fb198cf9-79f2-407c-baeb-9d8aa9b98fd0' => 'Kosten der Warenabgabe (6700)',
           '26e4fa58-db12-443f-9e70-9a8081730c1c' => 'Verpackungsmaterial (6710)',
           'b49aae5f-4121-4262-b8bd-f49278b66423' => 'Lizenzen und Konzessionen (6837)',
           '587c625c-2a8b-4a0e-88a7-5e058af9f7e9' => 'Lizenzen und Konzessionen §13b (6837)',
           '6d575db0-74e8-433d-a986-27b76ea27f9e' => 'Lizenzen und Konzessionen §13b Drittland (6837)',
           '9d92c0dc-8cea-4791-ab3b-90f913101d32' => 'Wartungskosten für Hard- und Software (6495)',
           'ccbd1971-fd88-11e1-a21f-0800200c9a66' => 'Leasing für Geräte (6840)',
           '6a90d581-46ba-4b59-ba8f-e568a552e0c0' => 'Aufmerksamkeiten (6643)',
           '0af461af-02f2-7a3c-4274-dc8c9ba8f013' => 'Sachzuwendungen (6822)',
           '61b6c617-d5b6-44ee-b43a-ac97b71f1bd8' => 'Rundungsdifferenzen (6880)',
           '207833b2-59fb-4185-b7b3-52ab9b944d59' => 'Währungsumrechnung (6880)',
           // Steuern
           '9eaf6ff2-fd89-11e1-a21f-0800200c9a66' => 'KFZ-Steuer (7685)',
           '222b6f71-fd92-11e1-a21f-0800200c9a66' => 'Gewerbesteuer (7610)',
           '75c4dd86-9977-4624-bac8-620e7aa08dd2' => 'Körperschaftsteuer (7600)',
           'fcac6066-8597-4086-8544-b95c444738a2' => 'Solidaritätszuschlag (7608)',
           // Telefon/Internet
           'efa82f4b-fd85-11e1-a21f-0800200c9a66' => 'Telefon/Internet (6805)',
           'b3a1f840-fd90-11e1-a21f-0800200c9a66' => 'Festnetz (6805)',
           'b3a1f842-fd90-11e1-a21f-0800200c9a66' => 'Mobil (6805)',
           'b3a1f841-fd90-11e1-a21f-0800200c9a66' => 'Internet (6810)',
           // Umsatzsteuer-Vorauszahlungen
           '222b6f72-fd92-11e1-a21f-0800200c9a66' => 'Umsatzsteuer-Vorauszahlungen (3820)',
           'e68b1ec8-3a46-4100-890b-01bc86cf8ada' => 'Sondervorauszahlung 1/11 (3830)',
           'ebbdd0f4-3bd4-4d2e-847f-8b68314f7ef6' => 'Umsatzsteuer-Vorjahr (3841)',
           'd6472ace-832b-4c74-b136-5ceff39fdfa1' => 'Umsatzsteuerzahlung für EU-Länder (3799)',
           // Versicherungen/Beiträge
           'efa82f46-fd85-11e1-a21f-0800200c9a66' => 'Versicherungen (betrieblich) (6400)',
           'f49d88d0-fd88-11e1-a21f-0800200c9a66' => 'Betriebshaftpflicht (6400)',
           '5ce0f8a0-fd89-11e1-a21f-0800200c9a66' => 'Firmenversicherung (6400)',
           'f49d88d2-fd88-11e1-a21f-0800200c9a66' => 'Rechtschutz (6400)',
           'f49d88d3-fd88-11e1-a21f-0800200c9a66' => 'Transportversicherung (6760)',
           'f49d88d1-fd88-11e1-a21f-0800200c9a66' => 'Beiträge (6420)',
           // Werbung
           'efa82f48-fd85-11e1-a21f-0800200c9a66' => 'Werbung (6600)',
           '00d8f5f6-1d8a-40da-96ee-c53b25f37503' => 'Werbung §13b (6600)',
           'db55a5ca-8b9e-4c84-9961-dd2110f3b2b6' => 'Werbung §13b Drittland (6600)',
           'd22989b5-fd89-11e1-a21f-0800200c9a66' => 'Werbegeschenke/Sponsoring (6600)',
           'f57c7c2a-d104-11ec-9d64-0242ac120002' => 'Streuartikel (6605)',
           'd22989b0-fd89-11e1-a21f-0800200c9a66' => 'Anzeigen Print- und Online (6600)',
           'd22989b1-fd89-11e1-a21f-0800200c9a66' => 'Dekoration (6600)',
           'd22989b2-fd89-11e1-a21f-0800200c9a66' => 'Geschäftspapier/Visitenkarten (6600)',
           'd22989b3-fd89-11e1-a21f-0800200c9a66' => 'Marketing (6600)',
           'd22989b4-fd89-11e1-a21f-0800200c9a66' => 'Messekosten (6600)',
           '01d94be1-ba15-4dd8-a8e2-e1d51eaab8f9' => 'Repräsentationskosten (6630)',
           // Zinsen/Gebühren
           '16d04a22-fd91-11e1-a21f-0800200c9a66' => 'Girokontozinsen (7310)',
           '16d04a23-fd91-11e1-a21f-0800200c9a66' => 'Nebenkosten des Geldverkehrs (6855)',
           '5921d420-fd91-11e1-a21f-0800200c9a66' => 'Darlehenszinsen (7320)',
           // Zu prüfen
           '8d2e71c6-09d5-439a-a295-a9e71661afcd' => 'Zu prüfen (1370)',
           '62e21a0d-af46-4674-bfa0-60bc2607fa17' => 'Durchlaufende Posten (1370)',
           'dd56efd2-6c62-40e4-9d9e-cba7b0045911' => 'Geldtransit (1460)',
           // Zu zahlen
           'ec472a04-9712-4ebb-9c8d-981941a456e5' => 'Zu zahlen (3720)',
           '4708d50c-f3a9-4a27-98c4-d37502e3b45c' => 'Lohn-und Kirchensteuer (3730)',
           '27c9577e-9472-47cd-818e-a0cbb042bf82' => 'Sozialversicherungsbeiträge (3740)',
           'db9689f7-49d6-4f6f-9cc4-93804f7c674a' => 'Vermögensbildung (3770)',
           'fa4aadaa-8f1f-4121-99b4-bac9ad7c9bc9' => 'Verrechnung Lohn/Gehalt (3790)',
           'cd3ea3e5-b681-496b-9886-7f8a8ab0397a' => 'Nettogehälter (3720)',
           '4abd3f74-6556-48df-9581-91c689b0572f' => 'Verbindlichkeiten für Einbehaltungen von Mitarbeitern (3725)',
       ]
   ];


One-Stop-Shop (OSS) Kategorien

  1. Deutsche Umsatzsteuer
Kategorie: Fernverkauf (Fernverkauf steht für Verkauf von Waren)
categoryId: 7c112b66-0565-479c-bc18-5845e080880a
Steuersätze: Es gelten die deutschen Steuersätze
Kategorie: Elektronische Dienstleistungen (ehemals MOSS)
categoryId: d73b880f-c24a-41ea-a862-18d90e1c3d82
Steuersätze: Es gelten die deutschen Steuersätze
  1. EU-Zielland-Steuer
Kategorie: Fernverkauf in EU-Land steuerpflichtig
categoryId: 4ebd965a-7126-416c-9d8c-a5c9366ee473
Steuersätze: Es gelten Steuersätze des Ziellandes
Kategorie: Elektronische Dienstleistung in EU-Land steuerpflichtig (ehemals MOSS)
categoryId: efa82f40-fd85-11e1-a21f-0800200c9a66
Steuersätze: Es gelten Steuersätze des Ziellandes

Webhook Anfragen

Wir liefern eine callback.php mit, die als callback URL angegeben werden kann. Bei allen Aufrufen wird die X-Lxo-Signature überprüft und sichergestellt, dass der Aufruf wirklich von einem Lexware Office Server erstellt wurde.

Error Handling

Alle Methoden sollten stets in einem try/catch Block verwendet werden.
Unser Client bietet eine erweiterte Execption Klasse, die via "$e->getError()" sofern vorhanden weitere Details zur Anfrage und dem API Response zurück gibt.

Beispiel: Versuch eines PDF Downloads von einer nicht fertig gestellten Rechnung

try {
    $lexware->get_invoice_pdf('7f0f0f7f-dd61-4bf7-a9f7-a67b0530c7e9', 'test.pdf');
} catch (LexwareException $e) {
    echo $e->getMessage();
    // LexwareApi: error in api request - check details via $e->getError()

    print_r($e->getError());
    /*
    Array (
        [HTTP Status] => 500
        [Requested URI] => https://api.lexware.io/v1/invoices/7f0f0f7f-dd61-4bf7-a9f7-a67b0530c7e9/document
        [Requested Payload] =>
        [Response] => stdClass Object
           (
                [timestamp] => 2019-11-20T17:34:53.360+01:00
                [status] => 500
                [error] => Internal Server Error
                [path] => /v1/invoices/7f0f0f7f-dd61-4bf7-a9f7-a67b0530c7e9/document
                [traceId] => f9f241666675
                [message] => A technical error has occurred that is not specified in more detail.
            )
    )
    */
}

Upgrade-Hinweise

2.3.x → 2.4.0

Keine Breaking Changes

Alle bestehenden Aufrufe funktionieren ohne Anpassung weiter. Der neue $postal_code-Parameter ist bei allen geänderten Methoden optional und hat den Standardwert ''.

Neue Funktion: PLZ-basierte Drittgebiet-Erkennung

Ab 2.4.0 können umsatzsteuerliche Sondergebiete innerhalb von EU-Ländern (z. B. Helgoland, Kanarische Inseln, Livigno) korrekt als Drittgebiet behandelt werden – sofern die PLZ der Liefer-/Leistungsadresse übergeben wird.

Neue Methode: is_excluded_postal_zone(string $country_code, string $postal_code): bool

Folgende drei Methoden haben einen neuen optionalen letzten Parameter string $postal_code = erhalten:

  • is_european_member()
  • get_needed_voucher_booking_id()
  • get_needed_tax_type()

Was du in deiner Integration prüfen solltest

Suche in deinem Code nach Aufrufen dieser drei Methoden und prüfe ob du die PLZ der Kundenadresse als letzten Parameter ergänzen kannst:

// Suche nach diesen Methodennamen:
// is_european_member(
// get_needed_voucher_booking_id(
// get_needed_tax_type(

// Vorher (weiterhin gültig):
$lexware->get_needed_voucher_booking_id($taxrate, $countryCode, $date, $hasVatId, $isB2B, $isPhysical);

// Nachher (mit PLZ – empfohlen wenn vorhanden):
$postalCode = $address['zip'] ?? '';
$lexware->get_needed_voucher_booking_id($taxrate, $countryCode, $date, $hasVatId, $isB2B, $isPhysical, $postalCode);

Die PLZ muss aus der Lieferadresse des Kunden stammen (Ort der Lieferung bzw. Leistungserbringung), nicht aus der Rechnungsadresse. Wenn keine PLZ bekannt ist, einfach weglassen – das Verhalten bleibt identisch zu 2.3.x.