/** * Die Aufrufe der Rechnungs-API — Kunden, Rechnungen, Gutschriften, Dateien. * * Jede Funktion nimmt den Transport als ersten Parameter und ist einzeln * importierbar; die Fassade [createInvoiceApi] bindet ihn nur einmal. * * **Geprueft wird hier nichts Fachliches.** Die Anfrage geht unveraendert an * das Backend, das sie gegen denselben Vertrag prueft (`vertrag.ts`) und einen * Formfehler als `validation` mit `errors[]` zurueckgibt — zwei Pruefungen * hiessen zwei Wahrheiten, von denen eine veraltet. * * **Nicht automatisch wiederholen.** Wer nach einem Zeitlimit erneut * ausstellt, tut das mit **demselben** `idempotencyKey`: dann kommt die schon * ausgestellte Rechnung zurueck (`replayed: true`) statt einer zweiten. * Jeder Aufruf mit Wirkung (ausstellen, stornieren, gutschreiben, Zahlung * nachtragen, Kunde anlegen oder aendern) meldet nach Zeitlimit, Netzfehler, * HTTP 5xx oder unlesbarer Antwort `outcome: 'unknown'`: er kann gewirkt * haben. Mit Schluessel denselben Schluessel erneut senden, ohne Schluessel * (`updateCustomer`, `createCustomer` ohne) erst nachlesen. Lesen und der * Probelauf (`previewInvoice`) bleiben `'rejected'`. * * Nach dem Senden wird nichts hart gecastet: fehlt ein zugesagtes Feld, wirft * der Aufruf `KasseneckValidationError` mit `scope:'response'`. */ import type { InternerBinaerTransport, InternerTransport } from '../client/aufrufe.js'; import { type EInvoiceFormat, type InvoiceLanguage } from './vertrag.js'; import type { Brand, CancelInvoiceRequest, CancelResult, CreditNoteRequest, CreditNoteResult, Customer, CustomerInput, CustomerPage, CustomerSearch, InvoiceDetail, InvoiceListQuery, InvoicePage, InvoiceSetupStatus, InvoiceXml, IssueInvoiceRequest, IssueResult, PreviewResult, RecordPaymentRequest, RecordPaymentResult } from './typen.js'; export declare function createCustomer(transport: InternerTransport, customer: CustomerInput, options?: { idempotencyKey?: string; }): Promise; export declare function getCustomer(transport: InternerTransport, ref: { customerId: string; } | { externalId: string; }): Promise; export declare function updateCustomer(transport: InternerTransport, customerId: string, patch: Partial): Promise; export declare function searchCustomers(transport: InternerTransport, search: CustomerSearch): Promise; export declare function issueInvoice(transport: InternerTransport, request: IssueInvoiceRequest): Promise; /** * Probelauf von `issueInvoice`: dieselbe Anfrage wird geprueft und gerechnet * wie beim Ausstellen, aber nichts festgeschrieben. Die Antwort nennt Summen, * Steuerfall, Sprache, Marke und die Hinweise — oder scheitert mit demselben * Fehlercode, mit dem das Ausstellen scheitern wuerde. * * Der `idempotencyKey` wird nicht verbraucht: dieselbe Anfrage laesst sich * danach unveraendert ausstellen. Verbindlich ist das Ausstellen — zwischen * Probelauf und Ausstellen kann sich der Kunde oder das Konto aendern. */ export declare function previewInvoice(transport: InternerTransport, request: IssueInvoiceRequest): Promise; export declare function cancelInvoice(transport: InternerTransport, request: CancelInvoiceRequest): Promise; export declare function createCreditNote(transport: InternerTransport, request: CreditNoteRequest): Promise; export declare function getInvoice(transport: InternerTransport, ref: { invoiceId: string; } | { number: string; }): Promise; export declare function listInvoices(transport: InternerTransport, query?: InvoiceListQuery): Promise; /** * Darf dieses Konto ueber die API ausstellen, und was fehlt noch? Laeuft auch * ohne Freigabe und vor der Live-Freischaltung — genau dann braucht man die * Antwort. Vor dem ersten `issueInvoice` aufrufen und `missing` anzeigen. */ export declare function getInvoiceSetupStatus(transport: InternerTransport): Promise; /** * Das PDF der Rechnung (bei Gutschriften: der Gutschrift), mit eingebetteter * Factur-X-Datei. Mit `language` in der anderen Sprache als der Rechnung kommt * eine **Uebersetzungskopie**: dieselbe Nummer, auf jeder Seite als Uebersetzung * gekennzeichnet, ohne eingebettete E-Rechnung — keine eigene Rechnung. */ export declare function getInvoicePdf(binaryTransport: InternerBinaerTransport, invoiceId: string, options?: { language?: InvoiceLanguage; }): Promise; /** * Eine Zahlung nachtragen, die nach dem Ausstellen eingetroffen ist * (Ueberweisung, Teilzahlung). Der `idempotencyKey` ist Pflicht: ohne ihn * bucht ein Wiederholungslauf nach einem Zeitlimit eine zweite Zahlung. * * Bei `method: 'cash'` wird die Zahlung gebucht und die Antwort traegt * zusaetzlich `notice` — eine Barzahlung ist ein Barumsatz und braucht einen * Beleg (§ 132a BAO), den dieser Vermerk nicht ersetzt. */ export declare function recordInvoicePayment(transport: InternerTransport, request: RecordPaymentRequest): Promise; /** Die Marken des Kontos — die Kennung geht als `brandId` in `issueInvoice`. */ export declare function listBrands(transport: InternerTransport): Promise; /** * Die E-Rechnung samt Format und Dateiname, genau wie der Server sie schickt. * Sie kommt im gewohnten Umschlag (`data.xml`) und nicht als rohe Datei: so * bleibt ein fachlicher Fehler (`einvoice_incomplete` mit `missing[]`) ein * gewoehnlicher Fehler. Den Dateinamen nicht selbst bauen, sondern * `filename` nehmen (`invoice-.xml`). */ export declare function getInvoiceXml(transport: InternerTransport, invoiceId: string, format?: EInvoiceFormat): Promise;