Skip to main content

Bexio Integration

Zeitschätzung vollumfänglich

Bei Komplettintegration in unseren "Sales Data Hub"

Arbeitspaket Aufwand Preis
Technische Analyse bexio API und API-Prototyp 16h
OAuth-/Token-Handling bexio 6h
Directus-/MySQL-Tabellen und Migrationen 8h
Generischer bexio API Client in PHP 16h
Polling, Cursor, Pagination und Retry 16h
Lookup- und Benutzer-Mappings ??? Wird im CRM über Subtabellen geregelt
Kontakte Firma ↔ Sage Accounts 20h
Kontakte Person ↔ Sage Contacts 20h
Firmen-/Personenbeziehungen 12h
Dubletten- und Konfliktlogik Kontakte ??? Regeln...
Auftragskopf bidirektional 20h
Auftragspositionen bidirektional 25h
Status-, Steuer- und Rundungsmapping Aufträge ???? müssen wir hier etwas beachten
Rechnungen → Sage Sales 16h
Lösch-/Stornoverhalten ??? allenfalls über Status
Logging, Monitoring und Fehlerbehandlung 12h
Integrations- und Regressionstests 8h
Dokumentation und Deployment 8h
Gesamtentwicklung exkl. ? 203h à CHF 125.00 CHF 25'375

Grundsätzliche Routine (Accounts, Contacts)

bexio Sage Sales Management
Kontakt vom Typ Firma Account
Kontakt vom Typ Person ohne Firmenbezug Contact, optional zusätzlicher Account „Privatkunde“
Kontakt vom Typ Person mit Firmenbezug Contact mit Verknüpfung zu Account
Lieferant Account oder Contact mit Klassifikation „Lieferant“
Kunde und Lieferant Account/Contact mit mehreren Rollen

Verarbeitungsregeln

Regel Sage Sales Management
bexio contact_type = Firma Account
bexio contact_type = Person + Firmenrelation vorhanden Sage Contact unter bestehendem Sage Account
bexio contact_type = Person + keine Firmenrelation Sage Contact, → optional technischer Account „Privatpersonen“ oder eigener B2C-Account

Feldzuordnung Bexio "Kontakte" ↔ Sage "Accounts"

bexio Kontakt vom Typ Firma ↔ Sage Account

bexio Kontakt Feld Sage Account Feld Richtung Bemerkung
id Custom Field bexio_contact_id B → S Unveränderbare technische Referenz
Sage Account-ID Mappingtabelle sage_entity_id S → Middleware Nicht zwingend als bexio-Feld verfügbar
nr accountCode / Custom Field bexio_contact_nr B ↔ S Geschäftsnummer, nicht als Primärschlüssel verwenden
contact_type_id Custom Field contact_type B → S Firma/Person
name_1 name B ↔ S Firmenname
name_2 additionalName / Custom Field B ↔ S Zusatzname oder Abteilung
address address / address1 B ↔ S Strasse und Hausnummer
postcode postalCode B ↔ S  
city city B ↔ S  
country_id country / countryId B ↔ S Lookup-Mapping erforderlich
mail email B ↔ S Firmen-E-Mail
mail_second Custom Field email_secondary B ↔ S Optional
phone_fixed phone B ↔ S  
phone_fixed_second Custom Field phone_secondary B ↔ S Optional
phone_mobile mobilePhone B ↔ S Bei Firma eventuell leer
fax fax / Custom Field B ↔ S Falls in Sage vorhanden
url website B ↔ S  
remarks comments / description B ↔ S Konfliktanfällig bei bidirektionalem Mapping
language_id language / Custom Field B ↔ S Lookup-Tabelle
user_id ownerId B ↔ S Benutzerzuordnung erforderlich
owner_id ownerId B ↔ S Bedeutung in bexio vorgängig prüfen
is_lead Account-Klassifikation / Leadstatus B ↔ S Businessregel definieren
contact_group_ids Tags / Klassifikation B ↔ S Many-to-many
contact_branch_ids Branche / Segment B ↔ S Lookup-Mapping
updated_at source_updated_at B → Middleware Grundlage für Polling
Sage Änderungszeit sage_updated_at S → Middleware Konflikterkennung
technischer Hash payload_hash intern Verhindert unnötige Updates

Zusätzliche Rollenfelder

Sage-Feld Werte
business_partner_roles Kunde, Lieferant, Interessent
is_customer Boolean
is_supplier Boolean
bexio_contact_type Firma, Person
bexio_contact_id Numerische bexio-ID
bexio_contact_nr Sichtbare bexio-Kontaktnummer

Feldzuordnung Bexio "Kontakte" ↔ Sage "Contacts"

bexio Kontakt vom Typ Person ↔ Sage Contact

bexio Kontakt Feld Sage Contact Feld Richtung Bemerkung
id Custom Field bexio_contact_id B → S Technische Referenz
Sage Contact-ID Mappingtabelle S → Middleware  
nr Custom Field bexio_contact_nr B ↔ S Keine technische ID
name_1 lastName B ↔ S Zuordnung anhand effektiver bexio-Nutzung prüfen
name_2 firstName B ↔ S Kann je Datenpflege umgekehrt verwendet sein
salutation_id salutation B ↔ S Lookup erforderlich
salutation_form Custom Field salutation_form B ↔ S Optional
title_id title B ↔ S Lookup
birthday birthday B ↔ S Datenschutz beachten
address address B ↔ S Privat- oder Geschäftsadresse
postcode postalCode B ↔ S  
city city B ↔ S  
country_id country B ↔ S Lookup
mail email B ↔ S Empfohlenes Dublettenmerkmal
mail_second Custom Field email_secondary B ↔ S  
phone_fixed phone B ↔ S  
phone_fixed_second Custom Field B ↔ S  
phone_mobile mobilePhone B ↔ S  
fax fax / Custom Field B ↔ S  
skype_name Custom Field B ↔ S Nur falls weiterhin relevant
remarks comments / description B ↔ S Konfliktregel notwendig
language_id language B ↔ S Lookup
Firmenrelation accountId B ↔ S Über Kontaktbeziehung bestimmen
user_id / owner_id ownerId B ↔ S Benutzer-Mapping
contact_group_ids Tags / Kategorien B ↔ S  
updated_at Middleware-Syncstatus B → intern  

Kritischer Punkt: Account-Verknüpfung
Für eine Person mit Firmenbezug muss die Reihenfolge lauten:
     1. Firmenkontakt in bexio identifizieren.
     2. Zugehörigen Sage Account suchen oder erstellen.
     3. Person als Sage Contact erstellen.
     4. accountId des Contacts auf den Sage Account setzen.
     5. Beziehung in einer Mappingtabelle speichern.
Eine Person sollte nicht anhand des Firmennamens allein zugeordnet werden. Primär sollte die bexio-Beziehungs-ID beziehungsweise die externe Kontakt-ID verwendet werden.

Feldzuordnung Bexio "Aufträge" ↔Sage "Salesorders"

bexio stellt Aufträge als Dokumentressource bereit. Für eine vollständige Synchronisation müssen Dokumentkopf und Positionen getrennt betrachtet werden. Die bexio API bietet Verwaltungsfunktionen für Verkaufsaufträge und weitere Verkaufsdokumente.

AuftragsKopf

bexio Auftrag Feld Sage Salesorder Feld Richtung Bemerkung
id Custom Field bexio_order_id B → S Technischer Schlüssel
Sage Salesorder-ID Mappingtabelle S → intern  
document_nr orderNumber B ↔ S Sichtbare Auftragsnummer
title name / title B ↔ S  
contact_id accountId B ↔ S Über Kontaktmapping
contact_sub_id contactId B ↔ S Ansprechpartner
user_id ownerId B ↔ S Benutzer-Mapping
project_id projectId / Custom Field B ↔ S Optional
language_id language B ↔ S Lookup
currency_id currency B ↔ S Lookup, ISO-Code bevorzugen
payment_type_id paymentTerms B ↔ S Lookup
bank_account_id Custom Field B ↔ S Nur falls fachlich benötigt
Dokumentdatum orderDate B ↔ S Feldname in bexio prüfen
is_valid_from validFrom B ↔ S Optional
is_valid_to validUntil B ↔ S Optional
header headerText / Beschreibung B ↔ S  
footer footerText / Beschreibung B ↔ S  
contact_address Rechnungsadresse B ↔ S Snapshot des Dokuments
delivery_address Lieferadresse B ↔ S  
delivery_address_type Lieferadresstyp B ↔ S Lookup
total_net netAmount B → S Berechnetes Feld möglichst nicht zurückschreiben
total_taxes taxAmount B → S  
total_gross grossAmount B → S  
mwst_type taxType B ↔ S Lookup
mwst_is_net pricesIncludeTax B ↔ S Boolean-Transformation
show_position_taxes Custom Field B ↔ S Darstellungsinformation
kb_item_status_id status B ↔ S Statustabelle erforderlich
api_reference externalReference B ↔ S Sehr gut für Integrationsreferenz geeignet
updated_at Syncstatus B → intern Polling
Sage Änderungszeit Syncstatus S → intern Konflikterkennung

Auftragspositionen

bexio Position Feld Sage Salesorder Line Feld Richtung Bemerkung
Positions-ID externalLineId B → S Mappingtabelle
amount quantity B ↔ S  
unit_id unit B ↔ S Lookup
text description B ↔ S  
unit_price unitPrice B ↔ S  
discount_in_percent discountPercent B ↔ S  
Artikelreferenz productId / articleId B ↔ S Nur mit Artikelmapping
Steuersatz-ID taxRate / taxId B ↔ S Lookup
Positionssumme lineTotal B → S Berechnetes Feld
Sortierung position / sortOrder B ↔ S  
Positionstyp lineType B ↔ S Normal, Titel, Zwischensumme, Text etc.

Feldzuordnung Bexio Rechnungen ↔Sage "Sales"

Hier würde es Sinn machen nur die Kopfdaten zu übermitteln

bexio Rechnung Feld Sage Sales Feld Richtung Bemerkung
id Custom Field bexio_invoice_id B → S Technische Referenz
document_nr saleNumber / invoiceNumber B → S  
title name / title B → S  
contact_id accountId B → S Über Mapping
contact_sub_id contactId B → S Ansprechpartner
user_id ownerId B → S Benutzer-Mapping
project_id Custom Field / Projekt B → S Optional
currency_id currency B → S Lookup
language_id Custom Field B → S  
Rechnungsdatum saleDate / invoiceDate B → S  
Fälligkeitsdatum dueDate B → S  
payment_type_id paymentTerms B → S Lookup
header description / Custom Field B → S  
footer Custom Field B → S  
total_net netAmount B → S  
total_taxes taxAmount B → S  
total_gross grossAmount B → S  
erhaltene Zahlungen paidAmount B → S Falls Sales dies unterstützt
offener Betrag openAmount B → S  
Rechnungsstatus status B → S Entwurf, offen, bezahlt, storniert
mwst_type taxType B → S  
mwst_is_net pricesIncludeTax B → S  
contact_address Rechnungsadresse B → S Dokument-Snapshot
api_reference externalReference B → S  
updated_at Syncstatus B → intern  

Polling-Intervalle für alle Entitäten

Entität Intervall
Kontakte alle 5–15 Minuten
Aufträge alle 5 Minuten
Rechnungen alle 5–15 Minuten
Lookup-Daten täglich
vollständiger Abgleich nachts oder wöchentlich